当前位置:网站首页>#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語句外讀取 變量,那麼賦值語句應是非阻塞式賦值。
边栏推荐
- Missing monitoring: ZABBIX monitors the status of Eureka instance
- Three methods of adding color to latex text
- How to configure GUI guide development environment
- MPLS experiment
- Wechat official account infinite callback authorization system source code, launched in the whole network
- leetcode1020. 飞地的数量(中等)
- Is software testing outsourcing going or not? Three years' real outsourcing experience tells you
- 攻防世界 MISC中reverseMe简述
- Misc of BUU (update from time to time)
- idea控制台彩色日志
猜你喜欢
Setting and using richview trvstyle template style
Cif10 actual combat (resnet18)
这个高颜值的开源第三方网易云音乐播放器你值得拥有
Leetcode59. spiral matrix II (medium)
Upgraded wechat tool applet source code for mobile phone detection - supports a variety of main traffic modes
Visitor tweets about how you can layout the metauniverse
Prefix and array series
kubernetes集群搭建Zabbix监控平台
Entity Developer数据库应用程序的开发
树莓派串口登录与SSH登录方法
随机推荐
kubernetes集群搭建Zabbix监控平台
[daily question] 729 My schedule I
MPLS experiment
1091: two or three things in childhood (multi instance test)
Zhongqing reading news
leetcode704. Binary search (find an element, simple, different writing)
前缀和数组系列
从autojs到冰狐智能辅助的心里历程
#systemverilog# 可综合模型的结构总结
GET 和 POST 请求类型的区别
C语言_双创建、前插,尾插,遍历,删除
巴比特 | 元宇宙每日必读:中国互联网企业涌入元宇宙的群像:“只有各种求生欲,没有前瞻创新的雄心”...
leetcode841. 钥匙和房间(中等)
医疗软件检测机构怎么找,一航软件测评是专家
19. Actual memory management of segment page combination
Proteus -- Serial Communication parity flag mode
指尖上的 NFT|在 G2 上评价 Ambire,有机会获得限量版收藏品
LeetCode Algorithm 2181. Merge nodes between zero
Latex文字加颜色的三种办法
Leetcode 78: subset