【问题标题】:Implementing a for loop in systemverilog在 systemverilog 中实现 for 循环
【发布时间】:2019-08-30 16:24:21
【问题描述】:

我想为我的 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-loop testing system-verilog test-bench


    【解决方案1】:

    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
    

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

    【讨论】:

    • 有没有办法使用约束来完成这个过程?
    • 不确定您所说的“约束”是什么意思; SystemVerilog 随机化constraint 构造或其他东西。
    • 是的。这正是我的意思。
    • 如果实施得当,没有什么能阻止你。如何实现取决于他们的用例和期望的行为。
    猜你喜欢
    • 2021-10-28
    • 1970-01-01
    • 2014-02-15
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 2015-12-24
    相关资源
    最近更新 更多