SystemVerilog 随机数据仅针对有效信号生成

Posted

技术标签:

【中文标题】SystemVerilog 随机数据仅针对有效信号生成【英文标题】:SystemVerilog random data generated only for valid signal 【发布时间】:2015-01-06 11:13:30 【问题描述】:

我是 SV 新手,想了解一些关于随机化的意见。我有两个信号。

rand bit [20:0] data;
rand bit data_valid;

我只想在 data_valid 信号变高时生成随机数据。当有效信号为低时,数据应包含前一个信号。我在

上尝试过以下操作
constraint valid_data data -> data_valid ==1'b1; 

当有效信号为高时它产生随机数据,但当有效信号为低时数据变为0。有没有其他方法可以做到这一点?我想要的是当有效变低时数据信号不应该改变。它应该保持有效信号的当前值变低。

另一个问题是data_valid 信号的随机化。这是一个 1 位信号,我只想让这个信号随机变高 1 个时钟周期。目前它可以在我不想要的任何时钟周期内保持高电平。

【问题讨论】:

我猜你已经在一个类中定义了datadata_valid。这些不是信号,它们是类字段。此外,随机化这些字段时没有时钟周期的概念。任何时间行为都必须由您建模。 您似乎在这里混合了一些概念(信号变高、随机化、时钟周期等)。 【参考方案1】:

您需要通过保存先前生成的值的副本来构建状态机

class tx;
  rand bit [20:0] data;
  rand bit data_valid;
  bit [20:0] prev_data;
  bit prev_data_valid;
  function void post_randomize;
    prev_data = data;
    prev_data_valid = data_valid;
  endfunction
  constraint one_cycle  prev_data_valid -> data_valid == 0;
  constraint latch_data  !prev_data_valid -> data == prev_data;
endclass

假设您在每个时钟周期调用一次 randomize(),则此方法有效。

【讨论】:

【参考方案2】:

好的,我能够解决我的第一个问题。但是仍然无法弄清楚如何生成仅在一个时钟周期内保持高电平的随机有效信号。任何提示将不胜感激。

【讨论】:

能否附上您的解决方案,对遇到类似问题的其他人会有所帮助,欢迎使用 ***。

以上是关于SystemVerilog 随机数据仅针对有效信号生成的主要内容,如果未能解决你的问题,请参考以下文章

SystemVerilog 采样和数据驱动

systemverilog中的随机化方法

SystemVerilog搭建测试平台---第一章:验证导论(续)

Scrapy + pyqt5:信号仅在主线程错误中有效

SystemVerilog测试台模拟(VCS)的非活动停止开关

谈一谈SystemVerilog的randomize