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.mzph.cn/news/212047.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【IDEA】IntelliJ IDEA中进行Git版本控制

本篇文章主要记录一下自己在IntelliJ IDEA上使用git的操作,一个新项目如何使用git进行版本控制。文章使用的IDEA版本 IntelliJ IDEA Community Edition 2023.3,远程仓库为https://gitee.com/ 1.配置Git(File>Settings) 2.去Git…

[gRPC实现go调用go]

1什么是RPC RPC:Remote Procedure Call,远程过程调用。简单来说就是两个进程之间的数据交互。正常服务端的接口服务是提供给用户端(在Web开发中就是浏览器)或者自身调用的,也就是本地过程调用。和本地过程调用相对的就是:假如两个…

深度优先遍历(DFS)

时间复杂度与深搜一致;

STM32 定时器总结

缩写 ARR: Auto-Reload Register(保存定时器的计数范围) PSC: Prescaler register(预分频器寄存器,根据设置的分频因子N,计数N个定时器时钟脉冲后,产生一个CNT计数,以此实现分频功能&#xff0…

LeetCode 2048. 下一个更大的数值平衡数

一、题目 1、题目描述 如果整数 x 满足&#xff1a;对于每个数位 d &#xff0c;这个数位 恰好 在 x 中出现 d 次。那么整数 x 就是一个 数值平衡数 。 给你一个整数 n &#xff0c;请你返回 严格大于 n 的 最小数值平衡数。 0 < n < 1e6 2、接口描述 public:int nextB…

Android渲染-AHardwareBuffer

本文主要从应用的角度介绍android的native层AHardwareBuffer创建纹理以及保存渲染数据。 HardwareBuffer 要介绍native层的AHardwareBuffer&#xff0c;就需要先从Java层的HardwareBuffer说起。Android官方对于HardwareBuffer介绍如下&#xff1a; HardwareBuffer wraps a na…

HttpURLConnection OOM问题记录

使用HttpURLConnection 上传大文件&#xff0c;会出现内存溢出问题&#xff1a; 观察HttpURLConnection 源码&#xff1a; Overridepublic synchronized OutputStream getOutputStream() throws IOException {connecting true;SocketPermission p URLtoSocketPermission(th…

【接口分享】热门好用的API,含免费次数

语音验证码短信&#xff1a;拨打电话告知用户验证码&#xff0c;实现信息验证。短信验证码&#xff1a;可用于登录、注册、找回密码、支付认证等等应用场景。支持三大运营商&#xff0c;3秒可达&#xff0c;99.99&#xff05;到达率&#xff0c;支持大容量高并发。通知短信&…

基于SSM的点餐系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

mysql设置为密码登录

要设置Ubuntu上的MySQL需要密码登录&#xff0c;你可以使用以下步骤&#xff1a; 打开终端。 输入以下命令登录到 MySQL 服务器&#xff1a; sudo mysql -u root -p按Enter后&#xff0c;系统会要求输入密码。如果是第一次登录&#xff0c;你可能需要直接按Enter键&#xff08…

【已解决】解决UbuntuKali无法进行SSH远程连接

目录 Ubuntu20.04配置SSH远程连接Kali Linux配置SSH远程连接 Ubuntu20.04配置SSH远程连接 首先更新安装包 sudo apt-get update 下载SSH服务 sudo apt install openssh-server 查看SSH服务 service ssh status 打开 /etc/ssh/sshd_config文件修改配置文件 将PermitRootLog…

知识笔记(五十二)———MySQL 删除数据表

MySQL中删除数据表是非常容易操作的&#xff0c;但是你在进行删除表操作时要非常小心&#xff0c;因为执行删除命令后所有数据都会消失。 语法 以下为删除 MySQL 数据表的通用语法&#xff1a; DROP TABLE table_name ; -- 直接删除表&#xff0c;不检查是否存在 或 DROP…

基于Debain安装 Docker 和 Docker Compose

一、安装Docker # 先升级一下系统 (Ubuntu / Debian 系) sudo apt-get update sudo apt-get upgrade# 如果你是 CentOS、红帽系列则使用&#xff1a; yum update yum upgrade# 安装 Docker curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh二、Dock…

LeetCode 0070. 爬楼梯:动态规划(递推)

【LetMeFly】70.爬楼梯&#xff1a;动态规划&#xff08;递推&#xff09; 力扣题目链接&#xff1a;https://leetcode.cn/problems/climbing-stairs/ 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#x…

NVIDIA Jetson NX ubuntu20.04删除多余版本冲突的Boost库

参考Ubuntu16.04 卸载旧版本Boost库并安装新版本 卸载 删除/usr/local/include/boost文件夹&#xff0c;删除/usr/local/lib中和boost有关的文件,以及/usr/local/lib/cmake/中boost的cmake文件 cd /usr/local/lib/ ls | grep boost sudo rm -rf /usr/local/include/boost su…

蓝桥杯 day01 奇怪的数列 特殊日期

奇怪的数列 题目描述 奇怪的数列 从 X 星截获一份电码&#xff0c;是一些数字&#xff0c;如下&#xff1a; 13 1113 3113 132113 1113122113 ⋯⋯ YY 博士经彻夜研究&#xff0c;发现了规律&#xff1a; 第一行的数字随便是什么&#xff0c;以后每一行都是对上一行…

redis+springsecurity+mybtais-plus+JWT

redisspringsecuritymybtais-plusJWT 01 引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.mysql</groupId&g…

12.视图

目录 1.视图的含义与作用 2.视图的创建与查看 1.创建视图的语法形式 2、查看视图&#xff1a; 1.使用DESCRIBE语句查看视图基本信息 2.使用SHOW TABLE STATUS语查看视图基本信息查看视图的信息 3.使用SHOW CREATE VIEW语查看视图详细信息 4.在views表中查看视图详细信息…

【DP】Yarik and Array—CF1899C

Yarik and Array—CF1899C 一道不难的DP&#xff0c;根据代码就能看出思路。 C o d e Code Code #include <bits/stdc.h> #define int long long #define sz(a) ((int)a.size()) #define all(a) a.begin(), a.end() using namespace std; using PII pair<int, int&…

codeforces

分析 删去 k k k 个之后要是回文串&#xff0c;不过题目会给字符串rearrange&#xff0c;所以对于奇数个数的字符最多留一个&#xff0c;偶数的不用管。 Think Twice, Code Once #include<bits/stdc.h> #define il inline #define get getchar #define put putchar #…