Menu
CoddyTech

默认赋值可避免锁存器

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

必须为每条输入路径都赋值组合输出。如果 always 块跳过了对某个输出的赋值,该输出会保留旧值,这可能会推断出锁存器。先进行 default 赋值,再进行覆盖赋值,可以让覆盖情况一目了然。

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

always @* begin
    y = 0;
    if (en) y = data;
end

default 覆盖了禁用路径,因此输出只取决于当前输入。

在每条路径上为每个组合输出赋值;在条件覆盖赋值之前先设置默认值。

challenge icon

挑战

中等

实现一个带使能门控的 8 位输出:当 en 为 1 时,y 等于 a;否则 y 为 0。确保 y 在每条组合逻辑路径上都有赋值。输出列:y。所有激励值都是已知的二进制值。

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

亲手试试

module dut (input en, input [7:0] a, output reg [7:0] y);
    // 用你的设计替换这里的占位代码。
    initial y = 0;
endmodule
quiz icon自我测试

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

RTL 设计与验证中的所有课

自己练习: Verilog 在线编译器