默认赋值可避免锁存器
本课属于 Coddy Verilog 学习旅程的“RTL 设计与验证”单元。第 1 课,共 38 课。
必须为每条输入路径都赋值组合输出。如果 always 块跳过了对某个输出的赋值,该输出会保留旧值,这可能会推断出锁存器。先进行 default 赋值,再进行覆盖赋值,可以让覆盖情况一目了然。
相关代码片段;挑战中提供了周边的声明和连接。
always @* begin
y = 0;
if (en) y = data;
enddefault 覆盖了禁用路径,因此输出只取决于当前输入。
在每条路径上为每个组合输出赋值;在条件覆盖赋值之前先设置默认值。
挑战
中等实现一个带使能门控的 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这节课包含一个小测验。开始学习即可作答,并记录你的进度。
RTL 设计与验证中的所有课
自己练习: Verilog 在线编译器