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

时间:2015-01-06 11:13:30

标签: random constraints system-verilog

我是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个时钟周期。目前它可以在任何我不想要的时钟周期内保持高电平。

2 个答案:

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

答案 1 :(得分:0)

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