Verilog基础:$random系统函数的使用

简介: Verilog基础:$random系统函数的使用

$random系统函数语法的BNF范式如下所示,有关BNF范式相关内容,可以浏览以往文章Verilog基础:巴科斯范式(BNF)

image.png

$random系统函数在每次调用时返回一个32位的随机数,这个随机数是有符号的,可正可负。按照Verilog标准语法,$random系统函数的调用方式为$random或$random(seed),但实际上$random()这种调用方式也是可以的,且其与$random完全一样。

 

seed是系统函数产生随机数的种子,当不指定种子时,如$random()或$random,系统会默认指定一个在每次调用后都会改变的隐形种子,且种子的改变轨迹是确定的,具体如下所示。

image.png

上面代码的随机数序列是确定的,即第一次调用系统函数时返回303379748,第二次时返回-1064739199,以此类推。

对于相同数值的种子,系统函数会返回相同的值,如下所示。


image.png

从上面的输出我们还可以发现,系统默认的隐形种子的种子值可能就是从0开始。

如果指定了种子值,我们必须保证在每次调用系统函数前的种子值是不同的,这样才能得到一个看近似随机的数字,如使用$time系统函数,它会返回当前的仿真时间。

image.png


$random系统函数返回的是32位有符号数,如果我们不需要这么大的有符号数可以使用求余运算符得到一个小的随机数,如下所示。

image.png

通过对8求余,我们得到了一个位于-7到7之间的随机数。

如果我们需要无符号的随机数,我们可以利用拼接运算符、域选或$unsigned系统函数,如下所示。

image.png

三种方法的输出结果是一样的,因为他们的原理是类似的,{}拼接运算符的结果是无符号的;域选运算符的结果也是无符号的,同时域选的位宽还可以保证输出数据的大小,这甚至省略了求余的操作;$unsigned系统函数可以直接将一个有符号数转换为无符号数。

目录
相关文章
|
存储 异构计算
Verilog RAM/ROM的数据初始化
Verilog RAM/ROM的数据初始化
|
Linux
【杂七杂八】简单粗暴处理linux下.nsf导致的目录无法删除
【杂七杂八】简单粗暴处理linux下.nsf导致的目录无法删除
890 0
|
PHP 异构计算
Matlab Simulink支持system generator插件
Matlab Simulink支持system generator插件
412 0
|
机器学习/深度学习 数据采集 算法
一文速学-时间序列分析算法之一次移动平均法和二次移动平均法详解+实例代码
一文速学-时间序列分析算法之一次移动平均法和二次移动平均法详解+实例代码
4160 0
一文速学-时间序列分析算法之一次移动平均法和二次移动平均法详解+实例代码
|
异构计算 内存技术
FPGA - 7系列 FPGA内部结构之SelectIO -08- 高级逻辑资源之OSERDESE2(二)
FPGA - 7系列 FPGA内部结构之SelectIO -08- 高级逻辑资源之OSERDESE2
958 0
FPGA - 7系列 FPGA内部结构之SelectIO -08- 高级逻辑资源之OSERDESE2(二)
|
缓存 数据中心 网络架构
5个减少网络延迟的简单方法
高速互联网对工作与娱乐至关重要,延迟和断线会严重影响效率和体验。本文探讨了导致连接缓慢的三个关键因素:吞吐量、带宽和延迟,并提供了减少延迟的实用方法。包括重启设备、关闭占用带宽的程序、使用有线连接、优化数据中心位置以及添加内容分发网络 (CDN) 等策略。虽然完全消除延迟不可能,但通过这些方法可显著改善网络性能。
4069 7
|
前端开发 Python
【前端验证】通用型顺序比对的uvm scoreboard组件编写
【前端验证】通用型顺序比对的uvm scoreboard组件编写
702 0
|
敏捷开发 数据可视化 BI
配置状态报告是什么?包括哪些编制步骤?需要注意哪些关键环节?
配置状态报告(CSR)是项目管理和系统开发中用于跟踪和记录项目配置项状态的重要工具,涵盖软件、硬件、文档等。它不仅提供项目当前状态、历史变更及发展趋势的清晰视图,还通过增强项目透明度、有效管理变更、支持决策制定和促进知识共享,帮助项目团队做出明智决策,确保项目按计划顺利进行。随着项目规模和复杂度的增加,CSR的重要性愈发凸显,现代项目管理工具已实现其编制和管理的自动化与智能化。