verilog中的$radom函数

我需要产生一个背压。背压每次经过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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值