当前位置:网站首页>#systemverilog# 可綜合模型的結構總結
#systemverilog# 可綜合模型的結構總結
2022-07-06 07:08:00 【那麼菜】
一、可綜合模型的結構
如果程序只用於仿真,那麼幾乎所有的語法和編程語句都可以使用。但如果程序是用於硬件實現,那麼我們就必須保證程序的可綜合性,即所編寫的程序能被綜合器 轉化為相應的電路結構。不可綜合的HDL語句在用綜合工具綜合時將被忽略或者報錯。作為設計者,應該對可綜合模型的結構有所了解。
雖然不同的綜合工具對Verilog HDL語法結構的支持不盡相同,但Verilog HDL中某些典型的結構是很明確地被所有綜合工具支持或不支持的。
(1)所有綜合工具都支持的結 構:always,assign,begin,end,case,wire,tri,aupply0,supply1,reg,integer,default,for,function,and,nand,or,nor,xor,xnor,buf,not,bufif0,bufif1,notif0,notif1,if,inout,input,instantitation,module,negedge,posedge,operators,output,parameter。
(2)所有綜合工具都不支持的結構:time,defparam,$finish,fork,join,initial,delays,UDP,wait。
(3)有些工具支持有些工具不支持的結構:casex,casez,wand,triand,wor,trior,real,disable,forever,arrays,memories,repeat,task,while。
因此,要編寫出可綜合的模型,應盡量采用所有綜合工具都支持的結構來描述,這樣才能保證設計的正確性和縮短設計周期。
二、建立可綜合模型的原則
要保證Verilog HDL賦值語句的可綜合性,在建模時應注意以下要點:
(1)不使用初始化語句。
(2)不使用帶有延時的描述。
(3)不使用循環次數不確定的循環語句,如forever、while等。
(4)不使用用戶自定義原語(UDP元件)。
(5)盡量使用同步方式設計電路。
(6)除非是關鍵路徑的設計,一般不采用調用門級元件來描述設計的方法,建議采用行為語句來完成設計。
(7)用always過程塊描述組合邏輯,應在敏感信號列錶中列出所有的輸入信號。
(8)所有的內部寄存器都應該能够被複比特,在使用FPGA實現設計時,應盡量使用器件的全局複比特端作為系統總的複比特。
(9)對時序邏輯描述和建模,應盡量使用非阻塞賦值方式。對組合邏輯描述和建模,既可以用阻塞賦值,也可以用非阻塞賦值。但在同一個過程塊中,最好不要同時用阻塞賦值和非阻塞賦值。
(10)不能在一個以上的always過程塊中對同一個變量賦值。而對同一個賦值對象不能既使用阻塞式賦值,又使用非阻塞式賦值。
(11)如果不打算把變量推導成鎖存器,那麼必須在if語句或case語句的所有條件分支中都對變量明確地賦值。
(12)避免混合使用上昇沿和下降沿觸發的觸發器。
(13)同一個變量的賦值不能受多個時鐘控制,也不能受兩種不同的時鐘條件(或者不同的時鐘沿)控制。
(14)避免在case語句的分支項中使用x值或z值。
三、阻塞與非阻塞
建議在時序邏輯建模時使用非阻塞式賦值。因為對於阻塞式賦值來說,賦值語句的順序對最後的綜合結果有著直接的影響,設計者稍不留意就會使綜合結果與設計本 意大相徑庭。而如果采用非阻塞式賦值,則可以不考慮賦值語句的排列順序,只需將其連接關系描述清楚即可。如下面的模型:
always @ (posedge clkA) //Label AwA
… = DataOut; //讀DataOut的值
always @ (posedge clkA) //Label AwB
DataOut <= …; //采用非阻塞式賦值
如果將上述模型改為阻塞式賦值“DataOut = …”,按照程序中的書寫順序模擬這些always語句,在clkA上昇沿處,always語句AwA讀取了DataOut的當前值,然後always語句 AwB再向DataOut賦新值。如果顛倒了這兩條always語句的順序(或仿真器選擇重新排定這兩條always語句的執行順序),那麼先執行 always語句AwB,導致零時間內將新值賦給DataOut,隨後always語句AwA讀取的便是更新後的DataOut值。這看起來是由於 always語句都可以執行時,向DataOut的賦值是在零時間內發生並完成的。因此根據先執行哪一條always語句,AwA中讀取的DataOut 值可能是其原值,也可能是其新值。
使用非阻塞賦值就可以消除這種仿真行為的依賴性,這時,讀取DataOut發生在當前時刻,而在當前仿真周期結束時(即所有的變量讀取都已完成)才將新值 賦給DataOut。這樣上述模型的行為不再受always語句執行順序的影響。因此,在某條always語句內對變量賦值而在該always語句外讀取 變量,那麼賦值語句應是非阻塞式賦值。
边栏推荐
- Supporting title of the book from 0 to 1: ctfer's growth road (Zhou Geng)
- When my colleague went to the bathroom, I helped my product sister easily complete the BI data product and got a milk tea reward
- UWA pipeline version 2.2.1 update instructions
- Short video, more and more boring?
- NFT on fingertips | evaluate ambire on G2, and have the opportunity to obtain limited edition collections
- Misc of BUU (update from time to time)
- 基于PyTorch和Fast RCNN快速实现目标识别
- WPF之MVVM
- 指尖上的 NFT|在 G2 上评价 Ambire,有机会获得限量版收藏品
- “无聊猿” BAYC 的内忧与外患
猜你喜欢
巴比特 | 元宇宙每日必读:中国互联网企业涌入元宇宙的群像:“只有各种求生欲,没有前瞻创新的雄心”...
Introduction to ros2 installation and basic knowledge
这个高颜值的开源第三方网易云音乐播放器你值得拥有
CDN acceleration and cracking anti-theft chain function
leetcode841. Keys and rooms (medium)
1189. Maximum number of "balloons"
leetcode1020. Number of enclaves (medium)
Fast target recognition based on pytorch and fast RCNN
因高额网络费用,Arbitrum 奥德赛活动暂停,Nitro 发行迫在眉睫
Oracle database 11gr2 uses TDE transparent data encryption to report an error ora28353. If you run to close the wallet, you will report an error ora28365. If you run to open the wallet, you will repor
随机推荐
Cookie Technology & session Technology & ServletContext object
leetcode6109. 知道秘密的人数(中等,周赛)
Due to high network costs, arbitrum Odyssey activities are suspended, and nitro release is imminent
[advanced software testing step 1] basic knowledge of automated testing
L'auteur est mort? Ai utilise l'art pour conquérir l'humanité
指尖上的 NFT|在 G2 上评价 Ambire,有机会获得限量版收藏品
RichView TRVStyle 模板样式的设置与使用
After working for 10 years, I changed to a programmer. Now I'm 35 + years old and I'm not anxious
leetcode35. 搜索插入位置(简单,找插入位置,不同写法)
顶测分享:想转行,这些问题一定要考虑清楚!
Cookie技术&Session技术&ServletContext对象
Oracle database 11gr2 uses TDE transparent data encryption to report an error ora28353. If you run to close the wallet, you will report an error ora28365. If you run to open the wallet, you will repor
The author is dead? AI is conquering mankind with art
Leetcode59. spiral matrix II (medium)
这个高颜值的开源第三方网易云音乐播放器你值得拥有
变量的命名规则十二条
C语言_双创建、前插,尾插,遍历,删除
Compile, connect -- notes-2
将ue4程序嵌入qt界面显示
[some special grammars about C]