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.pswp.cn/news/212047.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/212047.shtml
英文地址,請注明出處:http://en.pswp.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 #…