我是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个时钟周期。目前它可以在任何我不想要的时钟周期内保持高电平。
答案 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)
好的,我能够解决我的第一个问题。但仍然无法弄清楚如何生成随机有效信号,该信号仅在一个时钟周期内保持高电平。任何提示将不胜感激。