寄存器阵列存储
本课属于 Coddy Verilog 学习旅程的“RTL 设计与验证”单元。第 22 课,共 38 课。
展开的数组可以模拟硬件存储中的字。时钟控制的写入会更新一个选定的字;连续读取会选择一个字,无需读取时钟。对于受支持的模式,综合可能会用寄存器实现小型数组,也可能推断出存储器资源。不要假设未写入的字初始值为零。
相关代码片段;挑战中提供了周围的声明和连接。
reg [7:0] mem [0:3];
always @(posedge clk)
if(we) mem[waddr] <= data;
assign q = mem[raddr];写入由边沿触发,而读取则取决于选中的存储字。
明确写使能和读取时序;不要依赖未指定的 initial 存储器内容。
挑战
中等实现 4 个 8 位字。在上升沿,we 会将数据写入 mem[waddr]。q 是对 mem[raddr] 的异步组合读。存储器没有复位或 initial 内容;测试平台会在读取每个被观察的地址之前先写入该地址。观察发生在时钟沿之后,因此写入和读取同一地址时,q 会显示写入的值。输出列:q。所有控制信号和数据在每个时钟上升沿之前都保持稳定;之后观察结果。
完成 design.v,并保留其模块名称和端口。锁定的 testbench.v 会提供输入变化,并在信号稳定后输出结果。它会使用模拟器参数(例如 +CASE=1)选择场景;不需要标准输入。不要在设计中添加输出语句、延迟或仿真终止语句。预期输出是每次观察对应一行十进制值,各值之间用一个空格分隔,行尾以换行符结束。
亲手试试
module dut (input clk, input we, input [1:0] waddr, input [7:0] data, input [1:0] raddr, output [7:0] q);
// 用你的设计替换这段占位代码。
assign q = 0;
endmodule这节课包含一个小测验。开始学习即可作答,并记录你的进度。
RTL 设计与验证中的所有课
自己练习: Verilog 在线编译器