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系统函数可以直接将一个有符号数转换为无符号数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/234462.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第四节JavaScript 条件语句、循环语句、break与continue语句

一、JavaScript条件语句 在通常的代码中,我们有一些需要决定执行不同动作,这就可以在代码中使用条件语句来完成。 下面是我们常使用的条件语句: if语句:只有当指定条件是true时,执行条件内代码。if…else语句&#…

【Unity动画】什么是任意状态(Any state)

(Any state)可以从某个状态A直接切换到另一个状态 B\C\D\E\F 比如A到C的过渡,直接设置从Any state 到C的过渡线触发参数即可。而不需要让A到C直接在连接,同样,B到C之间也无需直接链接。 这样设计是在每一个动画之间都…

Redis 持久化 —— 超详细操作演示!

四、Redis 持久化 四、Redis 持久化4.1 持久化基本原理4.2 RDB持久化4.3 AOF持久化4.4 RDB与AOF对比4.5 持久化技术转型 五、Redis 主从集群六、Redis 分布式系统七、Redis 缓存八、Lua脚本详解九、分布式锁 数据库系列文章: 关系型数据库: MySQL —— 基础语法大全…

kotlin - ViewBinding

前言 为什么用ViewBinding,而不用findViewById(),这个有很多优秀的博主都做了讲解,就不再列出了。 可参考下列博主的文章: kotlin ViewBinding的使用 文章里也给出了如何在gradle中做出相应的配置。 (我建议先看这位博…

windows 10多用户同时远程登陆配置【笔记】

系统环境&多用户访问情况: 1、【win】【R】键入【gpedit.msc】 2、依次选择【计算机配置】→ 【管理模板】 → 【Windows组件】 → 【远程桌面服务】 → 【远程桌面会话主机】 →【连接】 2.1、右键 【允许用户通过使用远程桌面服务进行远程连接】 编辑 …

Python字典去重竟然比集合去重快速40多倍

这里写目录标题 对比代码结果图代码解析 对比代码 from glob import glob from tqdm import tqdm import time path_listglob("E:/sky_150b/任务组_20231207_2023/*.jsonl") # for two in tqdm(path_list): onepath_list[0]with open(one,"r",encoding&q…

基于SpringBoot 2+Layui实现的管理后台系统源码+数据库+安装使用说明

springboot-plus 一个基于SpringBoot 2 的管理后台系统,包含了用户管理,组织机构管理,角色管理,功能点管理,菜单管理,权限分配,数据权限分配,代码生成等功能 相比其他开源的后台系统&#xff0…

MATLAB | 官方举办的动图绘制大赛 | 第四周(收官周)赛情回顾

MATHWORKS官方举办的迷你黑客大赛第三期(MATLAB Flipbook Mini Hack)圆满结束,虽然我的水平和很多大佬还有比较大的差距,但所有奖也算是拿满了: 专家评选前三名,以及投票榜前十:~ 每周的阶段性获奖者: 下面…

c++实现ros通信

这里用的到是自定义的msgcpp发布消息 主要包括两个msg,一个订阅者和一个发布者,以及cmakelists的相应修改。 首先是自定义的msg,功能包里面来自定义msg也是可以的: 新建功能包 catkin_create_pkg pkg roscpp std_msgs message_g…

模块一——双指针:611.有效三角形的个数

文章目录 题目描述算法原理解法一:暴力求解(超时)解法二:排序+双指针 代码实现 题目描述 题目链接:611.有效三角形的个数 算法原理 解法一:暴力求解(超时) 三层for循环枚举出所有的三元组&…

一款基于ESP32的迷你四足机器人

一、软件介绍 增加自定义动作模式,可以在小程序中自定义一个最多10个步骤的动作。 附件中:带自定模式固件bin.zip esp32c3固件文件 烧录下图设置 无串口版本esp32c3开发板烧录前先按住BOOT键再插线进入烧录模式,LoadMode选择USB。 二、AP…

5_CSS三大特性盒子模型

第5章-盒子模型【比屋教育】 本课目标(Objective) 掌握CSS三大特性理解什么是盒子模型掌握内边距padding的用法掌握外边距margin的用法 1. CSS的层叠,继承,优先级 1.1 CSS层叠 层叠:是指多个CSS样式叠加到同一个元…

详解ZNS SSD基本原理

ZNS SSD的原理是把namespace空间划分多个zone空间,zone空间内部执行顺序写。这样做的优势: 降低SSD内部的写放大,提升SSD的寿命 降低OP空间,host可以获得更大的使用空间 降低SSD内部DRAM的容量,降低整体的SSD成本 降…

自治调优!人大金仓解放DBA双手

数据库系统的性能是确保整个应用系统高效运转的关键因素,因此数据库性能调优工作至关重要。KingbaseES通过将人工调优过程内化为数据库内核,成功实现了自治调优。这种创新的调优方案为DBA提供了更高效且准确的性能调优途径,同时也显著降低了数…

下划线css

思路: Q1:为什么下划线不用边框border 而使用背景色呢? 要实现动画效果,随着行盒的方向走 新知识点 线性渐变:linear-gradient 方法:linear-gradient(direction, color-stop1, color-stop2, ...) 详情见&#xff1a…

MySQL- in(集合) 和 not in(...) 的使用和练习

1. 基础用法 mysql中in常用于where表达式中,其作用是查询某个范围内的数据。 select * from where field in (value1,value2,value3,…) 当 IN 前面加上 NOT 运算符时,表示与 IN 相反的意思,即不在这些列表项内选择 select * from where …

EarCMS 前台任意文件上传漏洞复现

0x01 产品简介 EarCMS是一个APP内测分发系统的平台。 0x02 漏洞概述 EarCMS前台put_upload.php中,存在pw参数硬编码问题,同时sql语句pdo使用错误,没有有效过滤sql语句,可以控制文件名和后缀,导致可以任意文件上传。 0x03 复现环境 FOFA:app="EearCMS" 0x0…

Nginx性能调优实战 1

Nginx性能调优实战指南 1 Nginx作为一款高性能的Web服务器和反向代理服务器,在处理大量请求和并发连接时表现出色。然而,在实际应用中,为了更好地适应不同的负载和提高系统性能,进行Nginx性能调优是至关重要的。深入探讨Nginx性能…

2023年【起重机司机(限桥式起重机)】考试题库及起重机司机(限桥式起重机)最新解析

题库来源:安全生产模拟考试一点通公众号小程序 2023年【起重机司机(限桥式起重机)】考试题库及起重机司机(限桥式起重机)最新解析,包含起重机司机(限桥式起重机)考试题库答案和解析及起重机司机(限桥式起重机)最新解析练习。安全生产模拟考试一点通结合…

Sql server数据库数据查询

请查询学生信息表的所有记录。 答:查询所需的代码如下: USE 学生管理数据库 GO SELECT * FROM 学生信息表 执行结果如下: 查询学生的学号、姓名和性别。 答:查询所需的代码如下: USE 学生管理数据库 GO SELE…