在systemverilog中实现for循环

时间:2019-08-30 16:24:21

标签: for-loop testing generator system-verilog test-bench

我想为我的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;

在指定了所有输入值的情况下,它可以顺利运行。

1 个答案:

答案 0 :(得分: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

或其他具有时间延迟的类似代码。