在 systemverilog 中实现 for 循环

Implementing a for loop in systemverilog

我想为我的 DUT 生成自动输入激励。此输入将同时进入不同的模块并处理此数据。我希望我的输入以越来越多的方式生成。比如 0000,0001,0010,0011...1111 我尝试使用 for 循环,但它仅使用循环中的最后数据并对其进行处理。

always_comb begin
  for (i=0, i<16; i=i+1)
  begin 
    data <= i;
  end 
end

当我像这样单独提供输入时,

data = 8'd1;
#2;
data = 8'd2;
#2;

它在所有指定的输入值下都能顺利运行。

always_comb 不能有延迟。至少符合 IEEE1800 标准。

你可以这样做:

bit [3:0] data; // bit so the initial value is 0, not x
bit clk;
always #1 clk++; // or some other clock model
always_ff @(posedge clk) begin
  data <= data+1;
end

或类似这样的内容:

logic [3:0] data;
initial begin
  for (i=0, i<16; i=i+1) begin 
    data = i;
    #2;
  end 
end

或其他一些带有时间延迟的类似代码。