如何在 10 个时间单位或时钟后一次性分配变量:
作为测试平台级别的构造:
reg c,d,e;
initial begin
#10;
c = a+b;
d = a;
e = b;
end
对于 RTL(综合),首先您需要一个带时钟的测试台。
我会在我的测试工具中生成一个这样的时钟:
reg clk ; //Rising edge every 10 timesteps
initial begin
clk = 0;
#5;
forever begin
#5 ;
clk = ~clk;
end
end
建立一个计数到 10 的计数器,一旦达到 10,就使触发器能够加载新值。
wire enable = (counter == 4'b10);
always @(posedge clk or negedge rst_n) begin
if (~rst_n) begin
c <= 1'b0;
d <= 1'b0;
e <= 1'b0;
end
else if (enable) begin
c <= (a+b);
d <= a;
e <= b;
end
end
endmodule
额外的 Verilog 提示
输出是隐含的连线,无需重新定义它们。
非阻塞分配<=
用于在@(posedge clk)
推断触发器时始终使用。
reg
s 或logic
类型可以在内部always
或initial
块中分配。wire
s 用于assign
或用于端口之间的连接。