Menu
CoddyTech

读写转发

本课属于 Coddy Verilog 学习旅程的“RTL 设计与验证”单元。第 24 课,共 38 课。

存储器接口必须定义同一地址读写时的行为。转发会在发生冲突时明确选择输入的写入数据,从而实现新数据行为。如果没有这种旁路,之前的非阻塞读取模板会捕获旧数据。设备的存储器模式各不相同,因此仅凭仿真语义无法保证映射到特定的原语。

相关代码片段;挑战中提供了周围的声明和连接。

if(re) begin
    if(we && waddr==raddr) q <= data;
    else q <= mem[raddr];
end

旁路仅在地址确实发生冲突时才选择传入的数据字。

明确指定冲突行为,并根据所选的硬件内存模式进行验证。

challenge icon

挑战

中等

实现一个带新数据旁路的四字同步读存储器。写入规则和复位/读使能规则与上一课相同。当使能读取与对同一地址的使能写入冲突时,q 会捕获输入数据,而不是旧数据。输出列:q。所有控制信号和数据在每个时钟上升沿之前都保持稳定;之后观察结果。

完成 design.v,并保留其模块名称和端口。锁定的 testbench.v 会提供输入变化,并在信号稳定后输出结果。它会使用模拟器参数(例如 +CASE=1)选择场景;不需要标准输入。不要在设计中添加输出语句、延迟或仿真终止语句。预期输出为每次观察一行十进制值,各值之间用一个空格分隔,并以换行符结尾。

亲手试试

module dut (input clk, input rst, input we, input re, input [1:0] waddr, input [1:0] raddr, input [7:0] data, output reg [7:0] q);
    // 用你的设计替换这里的占位内容。
    initial q = 0;
endmodule
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

RTL 设计与验证中的所有课

自己练习: Verilog 在线编译器