面向仿真的veriloghdl語言描述的邏輯綜合_第1頁
面向仿真的veriloghdl語言描述的邏輯綜合_第2頁
面向仿真的veriloghdl語言描述的邏輯綜合_第3頁
面向仿真的veriloghdl語言描述的邏輯綜合_第4頁
面向仿真的veriloghdl語言描述的邏輯綜合_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

面向仿真的veriloghdl語言描述的邏輯綜合

硬件描述語言hdl語言用于描述硬件電路的功能、信號連接關(guān)系和時(shí)間差關(guān)系。它比傳統(tǒng)的電原理圖更有效地表示硬件電路的特性。進(jìn)入80年代后期,硬件描述語言向著標(biāo)準(zhǔn)化的方向發(fā)展,最終VHDL、VerilogHDL語言適應(yīng)了這種趨勢的要求,先后成為IEEE標(biāo)準(zhǔn).VHDL、VerilogHDL兩種語言具有硬件描述語言的共同特點(diǎn),但又各有長處,VerilogHDL語言的最大優(yōu)點(diǎn)是易學(xué),只要有C語言的基礎(chǔ)就可以了,而掌握VHDL設(shè)計(jì)技術(shù)就比較困難.VerilogHDL在系統(tǒng)抽象方面比VHDL略差一些,而在門級開關(guān)電路描述方面比VHDL強(qiáng)的多.標(biāo)準(zhǔn)的高級程序設(shè)計(jì)語言,例如FORTRAN、PASCAL、C、……等,只適合于描述過程和算法,但不能描述硬件電路,這些語言區(qū)別于硬件描述語言的一個(gè)明顯特點(diǎn)是只要每一條語句符合語法規(guī)則,那么經(jīng)編譯程序編譯后,就可以運(yùn)行該程序了.而用硬件描述語言進(jìn)行程序設(shè)計(jì)的最終目的是進(jìn)行硬件設(shè)計(jì),在硬件描述語言中,許多基于仿真的語句雖是符合語法規(guī)則的,但卻不能用硬件來實(shí)現(xiàn),即不能映射到硬件邏輯電路單元,我們要避免出現(xiàn)這種情況.若要最終實(shí)現(xiàn)硬件設(shè)計(jì),必須寫出可綜合的程序,即程序中的每一條語句和整個(gè)程序結(jié)構(gòu)都可向門級網(wǎng)表轉(zhuǎn)換.1有利于實(shí)現(xiàn)邏輯綜合在利用HDL的硬件設(shè)計(jì)方法中,設(shè)計(jì)著將自頂至下分成3個(gè)層次對系統(tǒng)進(jìn)行硬件設(shè)計(jì).第一層次是行為描述.所謂行為描述就是對整個(gè)系統(tǒng)的數(shù)學(xué)模型的描述.在行為描述階段,并不真正考慮其實(shí)際的操作和算法用什么方法來實(shí)現(xiàn),考慮更多的是系統(tǒng)的結(jié)構(gòu)及其工作過程是否能達(dá)到系統(tǒng)的設(shè)計(jì)要求.第二層次是RTL方式描述,這一層次也稱為寄存器傳輸描述或數(shù)據(jù)流描述.用行為方式描述的系統(tǒng)結(jié)構(gòu)的程序,其抽象程度很高,很難直接映射到具體邏輯元件結(jié)構(gòu)的硬件實(shí)現(xiàn)的.要想得到硬件的具體實(shí)現(xiàn),必須將行為方式描述的HDL語言程序改寫為RTL方式描述的HDL語言程序,這樣才能導(dǎo)出系統(tǒng)的邏輯表達(dá)式,才能進(jìn)行邏輯綜合.第三層次是邏輯綜合.就現(xiàn)有的邏輯綜合工具而言,所謂邏輯綜合就是將電路的RTL級語言描述轉(zhuǎn)換成門級網(wǎng)表的過程.邏輯綜合這一階段是利用邏輯綜合工具,將RTL方式描述的程序轉(zhuǎn)換成用基本邏輯元件表示的文件即門級網(wǎng)表.我們所關(guān)心的是第二層次,如何寫出可綜合的RTL方式描述的程序.VerilogHDL語言本身類似于C語言,有些語句既滿足語法要求,又可映射到具體邏輯元件結(jié)構(gòu),是可綜合的.有些語句只滿足語法,而無法映射到具體邏輯元件結(jié)構(gòu),是不可綜合的.本文將根據(jù)作者在工作中的一些體會來討論VerilogHDL的可綜合性.2如何書寫rtl級描述的程序現(xiàn)有的綜合工具自動(dòng)完成將RTL級的描述轉(zhuǎn)換成門級連接網(wǎng)表,因此,我們所關(guān)心的是如何寫出可綜合風(fēng)格的RTL級描述的程序.具體的說,主要有以下幾個(gè)方面.2.1/、%運(yùn)算的運(yùn)算符算術(shù)運(yùn)算符+、-、*、/、%,關(guān)系運(yùn)算符<、>、<=、>=、==、===、!=、!==,移位運(yùn)算符<<、>>,三目運(yùn)算符?:是可綜合的,但要注意在/、%運(yùn)算中必須除以或模2的冪次方.邏輯運(yùn)算符&&、‖、!,位運(yùn)算符號~、&、~&、|、~|、^~、~^、^,拼接運(yùn)算符{}是可綜合的.2.2循環(huán)體內(nèi)被賦值的變量行為語句if-else-if、case、casex、casez、for、repeat、while是可綜合的.要注意以下兩點(diǎn):(1)對于循環(huán)語句for、repeat、while,當(dāng)希望設(shè)計(jì)出能夠綜合的具體電路時(shí),其循環(huán)次數(shù)、步長和范圍必須固定.例如:for(i=const0,i<const1;i=i+const2)、repeat(const3)、while(const4)等語句中const0、const1、const2、const3、const4要為固定的常量.若在循環(huán)體內(nèi)const0、onst1、const2、const3、const4不固定,綜合工具不知道循環(huán)需要執(zhí)行的次數(shù),無法決定需要多少電路來完成.循環(huán)體內(nèi)不能有事件驅(qū)動(dòng)語句@event,循環(huán)體內(nèi)被賦值的變量大多是reg型,此時(shí)綜合的結(jié)果是組合電路.(2)if-else-if、case、casex、casez語句在描述狀態(tài)機(jī)、總線編碼、譯碼行為時(shí)非常有效,綜合工具是支持的.只是在使用case語句進(jìn)行設(shè)計(jì)時(shí),應(yīng)注意到若case語句所羅列的狀態(tài)并沒有表示出case表達(dá)式的所有狀態(tài)時(shí),此時(shí),應(yīng)加入default語句.若沒有default語句,則會出現(xiàn)偶然生成鎖存器的錯(cuò)誤,即生成了不想要的鎖存器.同樣對于if-else,如果只有if沒有配套的else也會出現(xiàn)偶然生成鎖存器的錯(cuò)誤.case語句可以用if-else-if語句來代替.2.3數(shù)據(jù)的綜合VerilogHDL語言有多種數(shù)據(jù)類型,正是由于這些數(shù)據(jù)類型,才使得VerilogHDL語言能夠創(chuàng)建高層次的系統(tǒng)和算法的模型.然而并不是每種數(shù)據(jù)類型都是完全可以綜合的,在最終的實(shí)現(xiàn)中,數(shù)據(jù)的綜合大多是寄存器型reg、integer和網(wǎng)絡(luò)型wire兩大類.1基于reg的編碼及數(shù)據(jù)的編碼常見的標(biāo)量類型是integer,綜合時(shí),綜合工具把integer綜合成32位的寄存器型數(shù)據(jù).當(dāng)超出這一范圍時(shí),就必須用數(shù)組表示.在RTL級語言描述時(shí),要根據(jù)數(shù)據(jù)的范圍確定數(shù)據(jù)的位寬,不要簡單的定義成16位或32位.這樣可節(jié)約邏輯資源,減少不必要的浪費(fèi).如數(shù)的范圍是0~255,只需定義8位的reg數(shù)據(jù)即可.對于reg型的負(fù)數(shù),RTL級語言描述的程序綜合后變?yōu)樨?fù)數(shù)的補(bǔ)碼表示,因此,在進(jìn)行比較兩數(shù)大小、加減乘除等運(yùn)算時(shí)要考慮到這一點(diǎn).應(yīng)該按照計(jì)算機(jī)組成原理中的運(yùn)算方法來進(jìn)行比較兩數(shù)大小、加減乘除等運(yùn)算.綜合工具不支持浮點(diǎn)數(shù),若要進(jìn)行浮點(diǎn)數(shù)的綜合,應(yīng)按照計(jì)算機(jī)組成原理中的運(yùn)算方法來進(jìn)行編程.2基于reg的二維個(gè)數(shù)復(fù)合類型通常用到的是數(shù)組.VerilogHDL語言中的數(shù)組是一維數(shù)組或二維數(shù)組.就目前的綜合工具來說,所有的一維限定性數(shù)組都是可以綜合的.一維數(shù)組的下標(biāo)可以是常量、變量、表達(dá)式或另一個(gè)數(shù)組中的元素,它們的范圍必須在數(shù)組的下標(biāo)域中,否則就會產(chǎn)生溢出.當(dāng)一維數(shù)組的下標(biāo)是變量、表達(dá)式或另一個(gè)數(shù)組中的元素時(shí),綜合后的時(shí)間延遲是很大的.通過對reg數(shù)據(jù)類型建立二維數(shù)組,可以描述ROM、RAM.2.4任務(wù)的遞歸調(diào)用對函數(shù)進(jìn)行綜合時(shí),函數(shù)體內(nèi)對循語句中循環(huán)變量的限制同2.2中所述,并且不能進(jìn)行遞歸函數(shù)調(diào)用,函數(shù)體內(nèi)不能包含有任何的時(shí)間控制語句.函數(shù)不能啟動(dòng)任務(wù).綜合工具將函數(shù)當(dāng)作一個(gè)硬件模塊來處理.一般綜合成組合邏輯電路.對任務(wù)的處理比函數(shù)復(fù)雜,任務(wù)體內(nèi)對循環(huán)語句的限制同函數(shù),不能進(jìn)行任務(wù)的遞歸調(diào)用.任務(wù)可以啟動(dòng)其他任務(wù)和函數(shù).若任務(wù)是在進(jìn)程always@(posedgeclk)或always@(negedgeclk)塊內(nèi)被調(diào)用,則任務(wù)體內(nèi)不允許有時(shí)間控制語句.若有多個(gè)進(jìn)程調(diào)用相同的任務(wù),書寫成如下形式:always@(posedgeclk)begin...light(parameter0);...endalways@(posedgeclk)begin...light(parameter1);...endtasklight(parameter)...綜合工具進(jìn)行綜合時(shí),進(jìn)行宏代換處理.2.5非阻塞賦值詞語連續(xù)賦值語句assign是可綜合的,綜合工具把它綜合成組合邏輯.賦值語句的左邊是wire型,右邊是reg、integer或wire型.過程賦值語句一般是在always塊內(nèi),有非阻塞(<=)和阻塞(=)兩種賦值語句,兩種賦值語句不能同時(shí)使用,建議使用非阻塞賦值語句.舉例說明如下:always@(posedgeclk)always@(posedgeclk)beginbeginb<=a;b=a;c<=b;c=b;endend若執(zhí)行前a=3、b=5執(zhí)行后左邊實(shí)例的結(jié)果是b=3、c=5,右邊實(shí)例的結(jié)果b=3、c=3.在使用非阻塞賦值語句時(shí),左邊的變量是reg或integer型,右邊的變量是reg、integer或wire型.被賦值的變量只能在一個(gè)always塊內(nèi)對其賦值,可在多個(gè)always塊內(nèi)被引用.2.6同步時(shí)序邏輯電路設(shè)計(jì)用assign語句對wire型變量進(jìn)行賦值,綜合后的結(jié)果是組合邏輯電路.用always@(Level-Sensitiveparameterlist),即電平敏感的always塊描述的電路綜合后的結(jié)果是組合邏輯電路或電平敏感的鎖存器,此時(shí),always塊內(nèi)賦值語句左邊的變量是reg或integer型,塊中要避免組合反饋回路.每次執(zhí)行always塊時(shí),在生成組合邏輯的always塊中被賦值的所有信號必須都在always@(Level-Sensitiveparameterlist)的敏感電平列表中列出,否則在綜合時(shí)將會為沒有列出的信號隱含的產(chǎn)生一個(gè)透明的鎖存器,這時(shí)綜合后的電路已不是純組合電路了.用always@(posedgeclock)或always@(negedgeclock)塊描述的電路綜合為同步時(shí)序邏輯電路.設(shè)計(jì)同步時(shí)序邏輯電路的關(guān)鍵是建立描述該電路狀態(tài)轉(zhuǎn)移的可綜合的有限狀態(tài)機(jī)模型,在VerilogHDL語言中最常用的描述同步時(shí)序狀態(tài)機(jī)的結(jié)構(gòu)是always和塊內(nèi)的case、if語句.除了緊跟在always后的@(posedgeclock)、@(negedgeclock)外,always塊中不允許有其他的@(event-expression)語句,目前大多數(shù)綜合工具不能綜合VerilogHDL描述的異步狀態(tài)機(jī),所以,用VerilogHDL設(shè)計(jì)的時(shí)序電路應(yīng)該是同步時(shí)序電路,如果一定要設(shè)計(jì)異步狀態(tài)機(jī),應(yīng)該用電原理圖輸入方法.2.7時(shí)鐘周期個(gè)數(shù)延遲語句是典型的面向仿真的,綜合工具不支持該語句.若需要延遲,需將特定的時(shí)間約束換算成相應(yīng)的時(shí)鐘周期個(gè)數(shù),用計(jì)數(shù)器計(jì)數(shù)時(shí)鐘周期的個(gè)數(shù)來實(shí)現(xiàn).2.8啟動(dòng)變量分析初始化語句也是面向仿真的,綜合工具不支持該語句.若需初始化參數(shù),應(yīng)該在有限狀態(tài)機(jī)中加入判別有無Reset信號的狀態(tài)來實(shí)現(xiàn).2.9催化子系統(tǒng)或模塊的協(xié)調(diào)wait語句和event類型是面向仿真的,是不可綜合.若想實(shí)現(xiàn)數(shù)字子系統(tǒng)或模塊的協(xié)調(diào)工作,建議采用握手應(yīng)答的方式.綜合工具支持disable語句,但只支持如下結(jié)構(gòu)形式的描述:begin:local—block—name……disablelocal—block—name……end3合并執(zhí)行的控制方式在一個(gè)大的程序模塊中,有許多assign語句和always模塊,它們之間是并發(fā)執(zhí)行的,即同時(shí)工作.為了協(xié)調(diào)數(shù)字系統(tǒng)各子系統(tǒng)或模塊的并發(fā)執(zhí)行,常采用兩種時(shí)序控制方式,即同步控制方式和異步控制方式.同步控制方式是指數(shù)字系統(tǒng)各子系統(tǒng)或模塊之間以時(shí)鐘節(jié)拍為基準(zhǔn),定時(shí)進(jìn)行數(shù)字系統(tǒng)各子系統(tǒng)或模塊之間啟動(dòng)或停止操作.異步控制方式是指數(shù)字系統(tǒng)各子系統(tǒng)或模塊之間的啟動(dòng)或停止用請求和回答信號來進(jìn)行的.數(shù)字系統(tǒng)各子系統(tǒng)或模塊之間在進(jìn)行某種操作時(shí),由于所處理的數(shù)據(jù)類型、步驟不同,其占用的時(shí)間也不同.因此,一般不采用同步控制方式而采用異步控制方式.4從可綜合性到可綜合性

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論