我需要产生一个背压。背压每次经过x个时钟周期之后翻转,x是0到1_6000间的一个随机数。
如下图的代码,($random % 10)产生的是-9到9的数,包括0,
($random % 10) +1 那么值就在 -8到10之间。
always @(posedge clk) begin
DATA_READ_DELAY <= ($random % 10) + 1;
end
如图所示在modelsim中将进制变成了unsigned之后,发现值特别大,那么就是最高位为1(表示负数)
解决方案很简单,用下面的表达式,能够得到随机数,随机数范围是0到 特定值DATA_READ_DELAY_TIME
reg [9 : 0] DATA_READ_DELAY ;
localparam DATA_READ_DELAY_TIME = 10;
always @(posedge clk) begin
// ($random % 10 + 10) $random % 10能够保证值在 -9 到 9 , +10之后, 1 到 19
// ($random % DATA_READ_DELAY_TIME + DATA_READ_DELAY_TIME) % DATA_READ_DELAY_TIME 就能得到0到10之间的正数
DATA_READ_DELAY <= ($random % DATA_READ_DELAY_TIME + DATA_READ_DELAY_TIME) % DATA_READ_DELAY_TIME;
end