首页 > 解决方案 > 在 systemverilog 中实现 for 循环

问题描述

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

它适用于所有指定的输入值。

标签: for-looptestingsystem-verilogtest-bench

解决方案


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

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


推荐阅读