You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SystemVerilog中$dist_uniform生成固定值而非随机数问题求助

问题解决:$dist_uniform生成固定值的原因及修正方法

你遇到的问题是因为**$dist_uniform的第一个参数使用错误**,它需要一个可修改的整数变量来保存随机数生成器的状态,而不是常数。

错误原因

$dist_uniform的语法规则是:

$dist_uniform(rand_state, min_val, max_val)
  • rand_state:必须是整数变量,函数会通过它维护随机状态,每次调用后自动更新该变量的值,确保下一次生成不同的随机数。
  • 若直接传入常数(比如你代码里的10),每次调用都会重置随机状态,导致生成的随机数固定不变(通常是传入的min_val,也就是你看到的20)。

而$random内部维护了全局随机状态,不需要显式传递状态变量,所以每次调用都能生成不同的值。

修正后的代码示例

// 先声明并初始化随机状态变量
integer rand_seed = 10;
integer rand;
integer rand_test;

// 在循环内调用:
rand = $dist_uniform(rand_seed, 20, 25);
rand_test = $random;

额外说明

  • 如果使用SystemVerilog,更推荐使用类的randomize()方法或者$urandom/$urandom_range,这些函数用法更直观,也更符合现代验证流程。
  • 注意:Quartus在综合时会忽略这些系统随机函数(硬件无法直接生成随机数,需用专门的硬件随机模块),只有在仿真阶段(ModelSim/Questa)才会生效。

内容的提问来源于stack exchange,提问作者shlopkin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 06:20:23