Generate 循环
本课属于 Coddy Verilog 学习旅程的“RTL 设计与验证”单元。第 13 课,共 38 课。
generate 循环会在展开时创建重复的硬件。它的 genvar 索引不是会在运行时变化的寄存器。命名的 generate 块会为创建的实例或赋值提供可预测的层级名称。循环边界必须是展开时常量。
相关摘录;挑战中提供了周围的声明和连接。
genvar i;
generate
for(i=0;i<WIDTH;i=i+1) begin: bitcell
assign y[i] = a[i] ^ b[i];
end
endgenerate每次迭代都会展开为一个独立的位级操作,而不是占用一个时钟周期。
使用 genvar 和常量边界来描述展开时重复的结构。
挑战
中等使用带名称的 generate-for 循环和 genvar i,为每个位实例化一个连续赋值,生成 y[i] = a[i] XOR b[i]。WIDTH 为正数。锁定的测试平台会实例化 WIDTH 为 1、4 和 8 的实例,较窄的实例使用 a 和 b 的低位。输出列依次为十进制的 y1、y4 和 y8。
完成 design.v,并保留模块名称和端口。锁定的 testbench.v 会提供输入变化,并在输出稳定后打印结果。它会使用模拟器参数(例如 +CASE=1)选择一个场景;不需要标准输入。不要在设计中添加打印、延迟或模拟终止操作。预期输出是每次观测对应一行十进制值,数值之间以一个空格分隔,并以换行符结尾。
亲手试试
module dut #(parameter WIDTH=4) (input [WIDTH-1:0] a,b, output [WIDTH-1:0] y);
// 实现这个参数化电路。
assign y = 0;
endmodule这节课包含一个小测验。开始学习即可作答,并记录你的进度。
RTL 设计与验证中的所有课
自己练习: Verilog 在线编译器