Verilog HDL基礎知識(二)

引言:本文繼續介紹Verilog HDL基礎知識,重點介紹賦值語句、阻塞與非阻塞、循環語句、同步與異步、函數與任務語法知識。

1. 賦值語句

在Verilog中,有兩種進行賦值的方法,即連續賦值語句和過程賦值語句(塊)。

1.1 連續賦值語句

連續賦值用于表示組合邏輯。左側必須是Net數據類型即wire和tri類型。

連續賦值始終處于活動狀態,這意味著,對右側值的任何更改都會導致賦值左側值被更新。

//連續賦值方法1    
wire [15:0] adder_out = mult_out + out;     
//連續賦值方法2    
wire [15;0] adder_out;     
assign adder_out = mult_out + out;

在仿真測試中,可以對連續賦值語句分配延遲,但在綜合時,該延遲被忽略。

assign #5 adder_out = mult_out + out; //延遲5ns
1.2? 過程賦值語句(塊)

過程賦值語句包括initial和always兩種。intial語句用于初始化仿真使用,always使用行為功能描述電路功能。

每個always和initial塊都是并行運行的,但每個塊內部是順序執行的。

圖片

圖1:過程賦值語句示例

2. 阻塞賦值和非阻塞賦值

always和initial過程塊有種類型賦值即阻塞賦值(=)和非阻塞賦值(<=)。

過程賦值的左側必須是變量數據類型,可以是reg、integer、real或time或realtime。賦值的右側可以是任何有效的表達式或信號。

阻塞賦值和非阻塞賦值示例如下圖所示。

圖片

圖2:阻塞賦值和非阻塞賦值示例

如圖2左側阻塞賦值,兩條語句同時執行,延遲#5時,a=b=2,再延遲#10時,c=a=2,即賦值語句立即執行,執行完畢后才執行下一條語句,左側值在賦值語句執行完后立即改變。如圖2右側非阻塞賦值,延遲#5時,a=b=2,而再延遲#5時,c=a=1,即c值并未立即為a的新值。

圖3展示了阻塞賦值和非阻塞賦值綜合后的RTL電路舉例。

圖片

圖3:阻塞賦值和非阻塞賦值綜合后的RTL電路舉例

?阻塞賦值和非阻塞賦值使用規則

組合電路一般使用阻塞賦值,時序電路使用非阻塞賦值,這可以避免混淆,提高代碼可讀性。

3. 兩種類型RTL處理

組合邏輯處理:對所有輸入列表信號敏感,用于組合邏輯。

圖片

圖4:組合邏輯處理

時序邏輯處理:對時鐘信號或者控制信號沿敏感(通過添加posedge或者negedge關鍵字),用于時序邏輯。

圖片

圖5:時序邏輯處理

4. 過程塊語句

initial和always過程塊中有三種常用語句:if-esle、case和循環語句。

4.1 if-else語句

語句以關鍵字if開頭,后跟一個條件,然后是條件為true時要執行的語句序列。else子句(如果存在)將在條件為false時執行。

圖片

圖6:if-else示例

可以看到if語句合成為兩個輸入復用器。可以看到,多個if語句會導致多個復用,從而產生優先級。如果不需要在你的電路中進行優先級排序,case語句會更有效率。

4.2 case語句

在case語句中,所有條件都將根據表達式進行檢查。這導致一個多路復用器具有多個輸入。

圖片

圖7:case語句示例

casez語句將表達式或條件中的所有'z'值視為不關心。

casex語句將所有“x”和“z”值視為不關心,而不是邏輯值。

圖片

圖片

圖8:casez和casex語句示例

4.3 循環語句

(1)forever循環語句示例

initial begin        clk = 0;    forever #25 clk= ~clk;   
end

以上示例為周期為#50的clk時鐘,注意該語句不可綜合,只能用于仿真。

(2)repeat循環語句

if(rotate == 1)  repeat(8) begin //循環8次  temp = data[15];  data = {data <<1,temp};  end  

repeat語句可以設置循環的次數,該語句可以用于綜合,要具有明確的循環表達式和循環條件。

(3)while循環語句

initial begin      cnt = 0;while(cnt < 101) begin  $display("cnt = %d",cnt); cnt = cnt + 1;   end   
end 

cnt循環計數100次,在cnt為101時退出循環,該語句可以用于綜合,要具有明確的循環表達式和循環條件。

(4)for循環語句

integer i;    
always @(inp,cnt) begin    result[7:4] = 0;  result[3:0] = inp;  if (cnt == 1) begin  for (i=4;i<=7; i=i+1) begin  result[i] = result[i-4];  end     end     
end

以上for循環語句實現4bit左移位功能,for語句可以進行綜合,實現硬件電路。

5. 同步邏輯和異步邏輯

圖片

圖9:同步邏輯及異步邏輯

always敏度列表表達方式將導致控制信號是同步的或異步的。上圖中左側代碼具有同步預置和觸發器清除功能,該代碼僅在時鐘上升沿敏感,右側代碼敏感列表包含時鐘和異步清除信號,如果aclr上升沿觸發,就會引起q清零,不受時鐘控制。

6. 函數(function)和任務(task)

Verilog HDL有兩種子程序,函數和任務。它們都必須在模塊中定義。函數根據其輸入返回一個值。函數通常產生組合邏輯,并用于assign表達式中。

任務和函數對于模塊中的重復代碼非常有用。它們提高了代碼的可讀性。

圖片

?

圖片

圖10:function示例

圖片

圖11:task示例

function和task的異同點

相同點:

(1)任務和函數必須在模塊內定義,其作用范圍僅適用于該模塊,可以在模塊內多次調用;

(2)任務和函數中可以聲明局部變量,如寄存器,時間,整數,實數和事件,但是不能聲明線網類型的變量;

(3)任務和函數中只能使用行為級語句,但是不能包含always和initial塊,設計者可以在always和initial塊中調用任務和函數。

差異點:

(1)函數能調用另一個函數,但是不能調用任務,任務可以調用另一個任務,也可以調用函數;

(2)函數總是在仿真時刻0開始 ,任務可以在非零時刻開始執行;

(3)函數一定不能包含任何延遲,事件或者時序控制聲明語句,任務可以包含延遲,事件或者時序控制聲明語句;

(4)函數至少要有一個輸入變量,也可以有多個輸入變量,任務可以沒有或者有多個輸入,輸出,輸入輸出變量;

(5)函數只能返回一個值,函數不能有輸出或者雙向變量,任務不返回任何值,或者返回多個輸出或雙向變量值。??

延伸閱讀:Verilog HDL基礎知識(一)

圖片

歡迎關注FPGA技術實戰公眾號,喜歡就多多轉發吧!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/20339.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/20339.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/20339.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java數據結構-二叉搜索樹

目錄 1. 概念2. 二叉搜索樹的操作2.1 查找2.2 插入2.3 刪除 3. 全部代碼 1. 概念 二叉搜索樹是特殊的二叉樹,也叫二叉排序樹,它的特點是:每個結點的左子樹上的所有結點的值都小于這個結點的值,右子樹上的所有結點的值都大于這個結點的值,另外所有的左子樹和右子樹也分別為二叉…

詳解 Spark 編程之 RDD 依賴關系

一、依賴與血緣關系 依賴&#xff1a;兩個相鄰 RDD 之間的關系血緣關系&#xff1a;多個連續的 RDD 的依賴由于 RDD 不會保存數據&#xff0c;為了提高容錯性&#xff0c;每個 RDD 都會保存自己的血緣關系&#xff0c;一旦某個轉換過程出現錯誤&#xff0c;可以根據血緣關系重新…

JavaScript實現粒子數字倒計時效果附完整注釋

<!DOCTYPE html> <html lang="en"><head><meta charset

隨身wifi網絡卡頓怎么解決?隨身WiFi哪個牌子的最好用?排名第一名的隨身WiFi!

對于隨身wifi靠不靠譜這個問題&#xff0c;網上一直存在爭議。很多人的隨身wifi網速不穩定&#xff0c;信號看著滿格就是上不了網。關于隨身wifi卡頓到底該怎么解決呢&#xff1f; 1.如果是設備網絡在一個地方上網速度很快&#xff0c;換一個地方網絡就不行了&#xff0c;很可能…

股票買賣II

股票買賣II 時間限制&#xff1a;1秒 內存限制&#xff1a;128M 題目描述 給定一個長度為N的數組&#xff0c;數組中的第i個數字表示一個給定股票在第i天的價格。 設計一個算法來計算你所能獲取的最大利潤。你可以盡可能地完成更多的交易&#xff08;多次買賣一支股票…

解析Java中1000個常用類:Readable類,你學會了嗎?

在 Java 編程中,處理輸入流是一個常見的需求。Java 提供了多種方式來處理輸入流,例如 InputStream、Reader 等類和接口。 而 Readable 接口是 Java 提供的一個簡單而強大的接口,用于表示可讀的字符序列。 本文將詳細介紹 Readable 接口的用途、實現原理、應用場景,并通過…

Linux學習筆記(清晰且清爽)

本文首次發布于個人博客 想要獲得最佳的閱讀體驗&#xff08;無廣告且清爽&#xff09;&#xff0c;請訪問本篇筆記 Linux安裝 關于安裝這里就不過多介紹了&#xff0c;安裝版本是CentOS 7&#xff0c;詳情安裝步驟見下述博客在VMware中安裝CentOS7&#xff08;超詳細的圖文教…

QT之全局忽略編譯警告QMAKE_CXXFLAGS

全局忽略編譯警告QMAKE_CXXFLAGS 這個是Qt中用來給編譯器傳遞開關的&#xff0c;常寫在’pro’文件或’pri’文件中。 將所有的警告當成錯誤處理 QMAKE_CXXFLAGS -Werror return-type //函數有返回值 QMAKE_CXXFLAGS -Werror return-local-addr //返回局部變量地址 QMAKE…

Dubbo架構概覽:服務注冊與發現、遠程調用、監控與管理

Dubbo 是一個成熟的、高性能的、基于 Java 的微服務開發框架&#xff0c;它主要用于解決分布式系統中的服務治理問題&#xff0c;包括服務的注冊與發現、遠程過程調用&#xff08;RPC&#xff09;、服務監控與管理等多個關鍵環節。以下是Dubbo架構概覽的詳細介紹&#xff1a; …

3種使用OpenCV進行圖像合成的技巧

準備好探索圖像世界的魔法了嗎&#xff1f;今天&#xff0c;我們將用Python和OpenCV庫&#xff0c;一起解鎖三種超炫的圖像合成技巧&#xff0c;讓你的照片變得與眾不同&#xff01;&#x1f308; 1. 圖像融合&#xff1a;讓風景與夢境交織 想象一下&#xff0c;把日出的輝煌…

【前端每日基礎】day33——響應式布局

響應式布局是一種網頁設計的方法&#xff0c;它可以使網站在不同的設備上&#xff08;如桌面電腦、平板電腦、手機等&#xff09;以及不同的屏幕尺寸上呈現出最佳的顯示效果。響應式布局的目標是使用戶在任何設備上都能夠方便地訪問和瀏覽網站&#xff0c;而不需要使用不同版本…

ios v品會 api-sign算法

vip品會 api-sign算法還原 ios入門案例 視頻系列 IOS逆向合集-前言嗶哩嗶哩bilibili 一、ios難度與安卓對比 這里直接復制 楊如畫大佬的文章的內容&#xff1a; ios難度與安卓對比 很多人說ios逆向比安卓簡單&#xff0c;有以下幾個原因 1 首先就是閉源&#xff0c;安卓開源…

PH編程入門:從基礎到實踐的全方位解析

PH編程入門&#xff1a;從基礎到實踐的全方位解析 PH編程&#xff0c;作為一種獨特而強大的編程語言&#xff0c;正逐漸在各個領域展現其巨大的潛力。對于初學者來說&#xff0c;如何快速入門并掌握PH編程的精髓&#xff0c;是一個既充滿挑戰又充滿機遇的過程。本文將從四個方…

vscode過濾器@modified(查看配置了哪些設置)

文檔 visualstudio?docs?getstarted?settingshttps://code.visualstudio.com/docs/getstarted/settings 說明 使用modified可以過濾出&#xff1a; 配置過的設置&#xff08;和默認值不同&#xff09;&#xff1b; 在 settings.json 文件中配置了值的設置 步驟 1.打開…

Ubuntu Linux 24.04 使用certbot生成ssl證書

設置域名 1. 將需要生成SSL證書的域名解析到IP地址 idealand.xyz <> 64.176.82.190 檢查防火墻的設置 1. 首先查看防火墻的狀態&#xff1a; # ufw status 2. 如果防火墻開啟了&#xff0c;要開放80和443端口用于certbot驗證 # ufw allow 80 # ufw allow 443 生…

Vue3實戰筆記(53)—奇怪+1,VUE3實戰模擬股票大盤工作臺

文章目錄 前言一、實戰模擬股票大盤工作臺二、使用步驟總結 前言 實戰模擬股票大盤工作臺 一、實戰模擬股票大盤工作臺 接上文&#xff0c;這兩天封裝好的組件直接應用,上源碼&#xff1a; <template><div class"smart_house pb-5"><v-row ><…

JS對象由淺入深

對象 對象&#xff08;Object&#xff09;&#xff1a;JavaScript里的一種數據類型&#xff08;引用類型&#xff09;&#xff0c;也是用于存儲數據的 好處&#xff1a;可以用來詳細的描述某個事物&#xff0c;是用鍵值對形式存儲語義更明了 特點&#xff1a;對象數據是無序的&…

模型 FABE(特性 優勢 好處 證據)法則

說明&#xff1a;系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思維模型目錄。特性、優勢、好處、證據&#xff0c;一氣呵成。 1 FABE法則的應用 1.1 FABE法則營銷商用跑步機 一家高端健身器材公司的銷售代表正在向一家新開的健身房推銷他們的商用跑步機。以下…

數控切割編程:探索精密制造的奧秘與挑戰

數控切割編程&#xff1a;探索精密制造的奧秘與挑戰 在現代化制造領域&#xff0c;數控切割編程以其高精度、高效率的特性&#xff0c;成為眾多行業不可或缺的工藝手段。然而&#xff0c;對于初學者或外行人來說&#xff0c;數控切割編程往往顯得神秘且復雜。本文將從四個方面…

【數據分享】中國電力年鑒(2004-2022)

大家好&#xff01;今天我要向大家介紹一份重要的中國電力統計數據資源——《中國電力年鑒》。這份年鑒涵蓋了從2004年到2022年中國電力統計全面數據&#xff0c;并提供限時免費下載。&#xff08;無需分享朋友圈即可獲取&#xff09; 數據介紹 自1993年首次出版以來&#xf…