From 057f49b7733b67f4bbd44c7ca5ac8ab3d2eacb22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=98=B3=E5=85=89=E5=B0=91=E5=B9=B4?= <849317537@qq.com> Date: Fri, 17 May 2024 21:19:17 +0800 Subject: [PATCH] =?UTF-8?q?ram=20=E4=BB=BF=E7=9C=9F=E9=AA=8C=E8=AF=81?= =?UTF-8?q?=E4=BB=A5=E5=8F=8A=E4=B8=8A=E6=9D=BF=E6=B5=8B=E8=AF=95=E9=80=9A?= =?UTF-8?q?=E8=BF=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ip_1_port_ram/ram.v | 82 ++++++++++++++++++++++ ip_1_port_ram/ram.v.out | 148 +++++++++++++++++++++++++++++++++++++++ ip_1_port_ram/tb_ram.v | 61 ++-------------- ip_1_port_ram/配置.png | Bin 0 -> 25404 bytes 4 files changed, 234 insertions(+), 57 deletions(-) create mode 100644 ip_1_port_ram/ram.v.out create mode 100644 ip_1_port_ram/配置.png diff --git a/ip_1_port_ram/ram.v b/ip_1_port_ram/ram.v index e69de29..d8c7751 100644 --- a/ip_1_port_ram/ram.v +++ b/ip_1_port_ram/ram.v @@ -0,0 +1,82 @@ +// 写优先: 立即把当前din写入值 输出到dout接口, 相当于把din和dout连接起来了 +// 读优先: 如果本身没有值会直接输出din到dout接口, 如果由值, 会把旧的值输出到dout接口 +// 不做任何改变: din和dout接口没有相关性 + +// 该实验会在复位之后启动ram核, 然后一个计数器累加从0~15, 其中0~7的时候高电平进行写(同样写0~7), 8~15低电平进行读取(把写的读出来) +module ram( + (*mark_debug="true"*)input wire sys_clk, // U18 + (*mark_debug="true"*)input wire sys_rst //J15 +); + + + + +(*mark_debug="true"*)reg [2:0]ram_addr; // 数据深度为8, 地址变化范围 0~7就行了 +(*mark_debug="true"*)reg [2:0]in_ram_data; // 数据宽度为3, 假想写入的数据, 数据变化范围是0~7, 只有在 ram_rw 是写入的时候进行累加并写入地址内 +(*mark_debug="true"*)wire [2:0]out_ram_data; + +reg ram_en; +always @(posedge sys_clk or negedge sys_rst) begin + if (!sys_rst) begin + ram_en <= 1'b0; + end + // 只有在复位之后, 才允许启动ram + else begin + ram_en <= 1'b1; + end +end + + +(*mark_debug="true"*)reg [7:0]counter; // 计数到15 清零, 变化范围 0~15 +wire ram_rw; +(*mark_debug="true"*)assign ram_rw = ram_en && (counter <= 8'b111); // 计数器 分成读写各占一半时间 +always @(posedge sys_clk or negedge sys_rst) begin + if (!sys_rst) begin + counter <= 8'b0; + end + // 没有启用ram禁止计数 + else if (ram_en == 1'b0 || counter == 8'b1111) begin + counter <= 8'b0; + end + else begin + counter <= counter + 8'b1; + end +end + +always @(posedge sys_clk or negedge sys_rst) begin + if (!sys_rst) begin + ram_addr <= 3'b0; + end + else if (ram_en && ram_addr < 3'b111) begin + ram_addr <= ram_addr + 3'b1; + end + else begin + ram_addr <= 3'b0; + end +end + + +always @(posedge sys_clk or negedge sys_rst) begin + if (!sys_rst) begin + in_ram_data <= 3'b0; + end + // 如果是写, 并且还没到最大数 + else if (ram_rw && in_ram_data < 3'b111) begin + in_ram_data <= in_ram_data + 3'b1; + end + else begin + in_ram_data <= 3'b0; + end +end + + +blk_mem_gen_0 _blk_mem_gen_0 ( + .clka(sys_clk), // input wire clka + .ena(ram_en), // input wire ena + .wea(ram_rw), // input wire [0 : 0] wea + .addra(ram_addr), // input wire [2 : 0] addra + .dina(in_ram_data), // input wire [2 : 0] dina + .douta(out_ram_data) // output wire [2 : 0] douta +); + +endmodule \ No newline at end of file diff --git a/ip_1_port_ram/ram.v.out b/ip_1_port_ram/ram.v.out new file mode 100644 index 0000000..ef8e995 --- /dev/null +++ b/ip_1_port_ram/ram.v.out @@ -0,0 +1,148 @@ +#! /c/Source/iverilog-install/bin/vvp +:ivl_version "12.0 (devel)" "(s20150603-1539-g2693dd32b)"; +:ivl_delay_selection "TYPICAL"; +:vpi_time_precision + 0; +:vpi_module "C:\iverilog\lib\ivl\system.vpi"; +:vpi_module "C:\iverilog\lib\ivl\vhdl_sys.vpi"; +:vpi_module "C:\iverilog\lib\ivl\vhdl_textio.vpi"; +:vpi_module "C:\iverilog\lib\ivl\v2005_math.vpi"; +:vpi_module "C:\iverilog\lib\ivl\va_math.vpi"; +S_000001d72665a990 .scope module, "tb_ram" "tb_ram" 2 1; + .timescale 0 0; + .port_info 0 /INPUT 1 "sys_clk"; + .port_info 1 /INPUT 1 "sys_rst"; +L_000001d7267330e0 .functor AND 1, v000001d72665ab20_0, L_000001d7266564d0, C4<1>, C4<1>; +L_000001d7266eb018 .functor BUFT 1, C4<00000111>, C4<0>, C4<0>, C4<0>; +v000001d726694ac0_0 .net/2u *"_ivl_0", 7 0, L_000001d7266eb018; 1 drivers +v000001d726656bf0_0 .net *"_ivl_2", 0 0, L_000001d7266564d0; 1 drivers +v000001d72665a060_0 .var "counter", 7 0; +v000001d7266a4530_0 .var "ram_addr", 2 0; +v000001d7266a45d0_0 .var "ram_data", 2 0; +v000001d72665ab20_0 .var "ram_en", 0 0; +v000001d72665abc0_0 .net "ram_rw", 0 0, L_000001d7267330e0; 1 drivers +o000001d7266aa0e8 .functor BUFZ 1, C4; HiZ drive +v000001d726656390_0 .net "sys_clk", 0 0, o000001d7266aa0e8; 0 drivers +o000001d7266aa118 .functor BUFZ 1, C4; HiZ drive +v000001d726656430_0 .net "sys_rst", 0 0, o000001d7266aa118; 0 drivers +E_000001d726658840/0 .event negedge, v000001d726656430_0; +E_000001d726658840/1 .event posedge, v000001d726656390_0; +E_000001d726658840 .event/or E_000001d726658840/0, E_000001d726658840/1; +L_000001d7266564d0 .cmp/ge 8, L_000001d7266eb018, v000001d72665a060_0; + .scope S_000001d72665a990; +T_0 ; + %wait E_000001d726658840; + %load/vec4 v000001d726656430_0; + %nor/r; + %flag_set/vec4 8; + %jmp/0xz T_0.0, 8; + %pushi/vec4 0, 0, 1; + %assign/vec4 v000001d72665ab20_0, 0; + %jmp T_0.1; +T_0.0 ; + %pushi/vec4 1, 0, 1; + %assign/vec4 v000001d72665ab20_0, 0; +T_0.1 ; + %jmp T_0; + .thread T_0; + .scope S_000001d72665a990; +T_1 ; + %wait E_000001d726658840; + %load/vec4 v000001d726656430_0; + %nor/r; + %flag_set/vec4 8; + %jmp/0xz T_1.0, 8; + %pushi/vec4 0, 0, 8; + %assign/vec4 v000001d72665a060_0, 0; + %jmp T_1.1; +T_1.0 ; + %load/vec4 v000001d72665ab20_0; + %cmpi/e 0, 0, 1; + %jmp/1 T_1.4, 4; + %flag_mov 8, 4; + %load/vec4 v000001d72665a060_0; + %cmpi/e 15, 0, 8; + %flag_or 4, 8; +T_1.4; + %jmp/0xz T_1.2, 4; + %pushi/vec4 0, 0, 8; + %assign/vec4 v000001d72665a060_0, 0; + %jmp T_1.3; +T_1.2 ; + %load/vec4 v000001d72665a060_0; + %addi 1, 0, 8; + %assign/vec4 v000001d72665a060_0, 0; +T_1.3 ; +T_1.1 ; + %jmp T_1; + .thread T_1; + .scope S_000001d72665a990; +T_2 ; + %wait E_000001d726658840; + %load/vec4 v000001d726656430_0; + %nor/r; + %flag_set/vec4 8; + %jmp/0xz T_2.0, 8; + %pushi/vec4 0, 0, 3; + %assign/vec4 v000001d7266a4530_0, 0; + %jmp T_2.1; +T_2.0 ; + %load/vec4 v000001d72665ab20_0; + %flag_set/vec4 9; + %flag_get/vec4 9; + %jmp/0 T_2.4, 9; + %load/vec4 v000001d7266a4530_0; + %cmpi/u 7, 0, 3; + %flag_get/vec4 5; + %and; +T_2.4; + %flag_set/vec4 8; + %jmp/0xz T_2.2, 8; + %load/vec4 v000001d7266a4530_0; + %addi 1, 0, 3; + %assign/vec4 v000001d7266a4530_0, 0; + %jmp T_2.3; +T_2.2 ; + %pushi/vec4 0, 0, 3; + %assign/vec4 v000001d7266a4530_0, 0; +T_2.3 ; +T_2.1 ; + %jmp T_2; + .thread T_2; + .scope S_000001d72665a990; +T_3 ; + %wait E_000001d726658840; + %load/vec4 v000001d726656430_0; + %nor/r; + %flag_set/vec4 8; + %jmp/0xz T_3.0, 8; + %pushi/vec4 0, 0, 3; + %assign/vec4 v000001d7266a45d0_0, 0; + %jmp T_3.1; +T_3.0 ; + %load/vec4 v000001d72665abc0_0; + %flag_set/vec4 9; + %flag_get/vec4 9; + %jmp/0 T_3.4, 9; + %load/vec4 v000001d7266a45d0_0; + %cmpi/u 7, 0, 3; + %flag_get/vec4 5; + %and; +T_3.4; + %flag_set/vec4 8; + %jmp/0xz T_3.2, 8; + %load/vec4 v000001d7266a45d0_0; + %addi 1, 0, 3; + %assign/vec4 v000001d7266a45d0_0, 0; + %jmp T_3.3; +T_3.2 ; + %pushi/vec4 0, 0, 3; + %assign/vec4 v000001d7266a45d0_0, 0; +T_3.3 ; +T_3.1 ; + %jmp T_3; + .thread T_3; +# The file index is used to find the file name in the following table. +:file_names 3; + "N/A"; + ""; + "ram.v"; diff --git a/ip_1_port_ram/tb_ram.v b/ip_1_port_ram/tb_ram.v index ce0867b..e349d50 100644 --- a/ip_1_port_ram/tb_ram.v +++ b/ip_1_port_ram/tb_ram.v @@ -12,62 +12,9 @@ initial begin #50 sys_rst <= 1'b1; end - -reg ram_en; -always @(posedge sys_clk or negedge sys_rst) begin - if (!sys_rst) begin - ram_en <= 1'b0; - end - // 只有在复位之后, 才允许启动ram - else begin - ram_en <= 1'b1; - end -end - - -reg [7:0]counter; // 计数到15 清零, 变化范围 0~15 -wire ram_rw; -assign ram_rw = ram_en && (counter <= 8'b111); // 计数器 分成读写各占一半时间, 0~7的时候高电平进行写, 8~15低电平进行读取 -always @(posedge sys_clk or negedge sys_rst) begin - if (!sys_rst) begin - counter <= 8'b0; - end - // 没有启用ram禁止计数 - else if (ram_en == 1'b0 || counter == 8'b1111) begin - counter <= 8'b0; - end - else begin - counter <= counter + 8'b1; - end -end - - -reg [2:0]ram_addr; // 地址变化范围 0~7就行了 -always @(posedge sys_clk or negedge sys_rst) begin - if (!sys_rst) begin - ram_addr <= 3'b0; - end - else if (ram_en && ram_addr < 3'b111) begin - ram_addr <= ram_addr + 3'b1; - end - else begin - ram_addr <= 3'b0; - end -end - - -reg [2:0]ram_data; // 假想写入的数据, 数据变化范围是0~7, 只有在 ram_rw 是写入的时候进行累加并写入地址内 -always @(posedge sys_clk or negedge sys_rst) begin - if (!sys_rst) begin - ram_data <= 3'b0; - end - // 如果是写, 并且还没到最大数 - else if (ram_rw && ram_data < 3'b111) begin - ram_data <= ram_data + 3'b1; - end - else begin - ram_data <= 3'b0; - end -end +ram u_ram( + .sys_clk(sys_clk), + .sys_rst(sys_rst) +); endmodule \ No newline at end of file diff --git a/ip_1_port_ram/配置.png b/ip_1_port_ram/配置.png new file mode 100644 index 0000000000000000000000000000000000000000..8d1ee88dfcd5e043684243eddfc370942f77e7a7 GIT binary patch literal 25404 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 DV(u}1 literal 0 HcmV?d00001