使用测试用例将交易发送到随机通道

问题描述 投票:0回答:1

我有 16 个通道需要随机发送数据。频道应随机选择。例如: 在第一次迭代中,选择通道 0、通道 3,即选择两个通道 在第二次迭代中,选择通道 9、10、12、15,即四个通道

通道可以在每次迭代中重复。每次迭代选择的通道数应该不同,因此通道应该选择在 0 到 15 之间。

如何使用 SV 约束创建相同的逻辑?

system-verilog
1个回答
0
投票

您可以使用动态数组

module top;
  class A;
    rand int no_of_channels;
    rand int channels[];
    
    constraint ch_size {
      no_of_channels inside {[1:16]};
      no_of_channels == channels.size();
      no_of_channels != const'(no_of_channels);
    }
    constraint ch_values {
      foreach(channels[i]) channels[i] inside {[0:15]};
      unique {channels};
    }
  endclass
  
  A a = new;
  initial repeat(10) begin
    assert(a.randomize());
    $display("%p",a);
  end
endmodule
© www.soinside.com 2019 - 2024. All rights reserved.