当前位置: 首页 > news >正文

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

相关阅读

Verilog基础​编辑icon-default.png?t=N7T8https://blog.csdn.net/weixin_45791458/category_12263729.html


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

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

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

`timescale 1ns/1ns 
module test();
initial begin repeat(10) #5 $display("Default Random number is %d", $random);
end
endmodule输出:
Default Random number is   303379748
Default Random number is -1064739199
Default Random number is -2071669239
Default Random number is -1309649309
Default Random number is   112818957
Default Random number is  1189058957
Default Random number is -1295874971
Default Random number is -1992863214
Default Random number is    15983361
Default Random number is   114806029

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

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

`timescale 1ns/1ns 
module test();
initial begin repeat(10) #5 $display("Default Random number is %d", $random(0));
end
endmodule输出:
Default Random number is   303379748
Default Random number is   303379748
Default Random number is   303379748
Default Random number is   303379748
Default Random number is   303379748
Default Random number is   303379748
Default Random number is   303379748
Default Random number is   303379748
Default Random number is   303379748
Default Random number is   303379748

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

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

`timescale 1ns/1ns 
module test();
initial begin repeat(10) #5 $display("Default Random number is %d", $random($time));
end
endmodule输出:
Default Random number is -2147138048
Default Random number is -2146792448
Default Random number is -2146447360
Default Random number is -2146101760
Default Random number is -2145756672
Default Random number is -2145411072
Default Random number is -2145065984
Default Random number is -2144720384
Default Random number is -2144375296
Default Random number is -2144029696

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

`timescale 1ns/1ns 
module test();
initial begin repeat(10) #5 $display("Default Random number is %d", {$random} % 8);
endmodule输出:
Default Random number is           4
Default Random number is          -7
Default Random number is          -7
Default Random number is          -5
Default Random number is           5
Default Random number is           5
Default Random number is          -3
Default Random number is          -6
Default Random number is           1
Default Random number is           5

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

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

`timescale 1ns/1ns 
module test();
integer a; 
initial begin repeat(10) #5 $display("Default Random number is %d", {$random} % 8);//repeat(10) #5 begin a = $random; a = a[2:0]; $display("Default Random number is %d", a);end//repeat(10) #5 $display("Default Random number is %d", $unsigned($random) % 8);
end
endmodule输出:
Default Random number is          4
Default Random number is          1
Default Random number is          1
Default Random number is          3
Default Random number is          5
Default Random number is          5
Default Random number is          5
Default Random number is          2
Default Random number is          1
Default Random number is          5

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

http://www.lryc.cn/news/257045.html

相关文章:

  • 数据库Delete的多种用法
  • 鸿蒙前端开发-构建第一个ArkTS应用(Stage模型)
  • 从零开始搭建链上dex自动化价差套利程序(12)
  • MySQL 数据库如何实现 XA 规范?
  • SVN修改已提交版本的日志方法
  • ArkUI组件--Text组件
  • mysql的组合查询
  • 短视频购物系统源码:构建创新购物体验的技术深度解析
  • 暴力破解漏洞
  • 前端成神之路-CSS基础选择器
  • Endnote在word中加入参考文献及自定义参考文献格式方式
  • LeetCode力扣每日一题(Java):28、找出字符串中第一个匹配项的下标
  • Java UDP 多人聊天室简易版
  • leetcode 100.相同的树
  • 2021年第十届数学建模国际赛小美赛A题气道阻力的评估解题全过程文档及程序
  • 内网环境安装K8S1.20.11版本集群
  • 【前端设计模式】之策略模式
  • JUC包(面试常问)
  • 文字处理工具Word mac软件特点
  • 把 Windows 11 装进移动硬盘:Windows 11 To Go
  • 11、pytest断言预期异常
  • Vue之数据绑定
  • druid在没有web的项目中如何查看监控
  • 游戏被攻击该怎么办?游戏盾该如何使用,游戏盾如何防护攻击
  • 【基于openGauss5.0.0简单使用DBMind】
  • [递归回溯]连接卡片最短路径
  • 初识人工智能,一文读懂强化学习的知识文集(5)
  • 视频封面提取:精准截图,如何从指定时长中提取某一帧图片
  • Shopify 开源 WebAssembly 工具链 Ruvy
  • zxjy008- 项目集成Swagger