版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
文檔中心文檔編號(hào)資源類(lèi)別:HD語(yǔ)言版本文檔中心文檔編號(hào)資源類(lèi)別:HD語(yǔ)言版本密級(jí)內(nèi)部公開(kāi)共4頁(yè)VerilogHD入門(mén)教程僅供內(nèi)部使用)擬制:批準(zhǔn):批準(zhǔn):中研基礎(chǔ)中研基礎(chǔ)日期:日期:日期:yyyy/mm/dd版權(quán)所有不得復(fù)制VerilogHDL入門(mén)教程絕密請(qǐng)輸入文檔編號(hào)VerilogHDL入門(mén)教程絕密請(qǐng)輸入文檔編號(hào)日期修訂版本描述初稿完成修訂記錄作者2004-08-16 第2頁(yè),共41頁(yè)版權(quán)所有侵權(quán)必究VerilogHDL入VerilogHDL入門(mén)教程絕密請(qǐng)輸入文檔編號(hào)目錄1前言...................................................................52HD設(shè)計(jì)方法學(xué)簡(jiǎn)介 ......................................................52.1數(shù)字電路設(shè)計(jì)方法....................................................52.2硬件描述語(yǔ)言 .......................................................62.3設(shè)計(jì)方法學(xué).........................................................6VerilogHD簡(jiǎn)介.....................................................72.4.1歷史..........................................................72.4.2能力..........................................................73VerilogHDL建模概述 .....................................................93.1模塊 ..............................................................93.1.1簡(jiǎn)單事例.......................................................93.1.2模塊的結(jié)構(gòu)....................................................103.1.3模塊語(yǔ)法......................................................113.2時(shí)延 .............................................................113.3三種建模方式 ......................................................123.3.1結(jié)構(gòu)化描述方式 ................................................123.3.2數(shù)據(jù)流描述方式 ................................................143.3.3行為描述方式..................................................153.3.4混合設(shè)計(jì)描述..................................................164VerilogHDL基本語(yǔ)法 ....................................................174.1標(biāo)識(shí)符............................................................174.1.1定義.........................................................174.1.2關(guān)鍵詞 .......................................................174.1.3書(shū)寫(xiě)規(guī)范建議..................................................174.2注釋 .............................................................174.3格式 .............................................................184.4數(shù)字值集合........................................................184.4.1值集合 .......................................................184.4.2常量.........................................................184.5數(shù)據(jù)類(lèi)型..........................................................204.5.1線網(wǎng)類(lèi)型......................................................204.5.2寄存器類(lèi)型 ...................................................204.6運(yùn)算符和表達(dá)式.....................................................214.6.1算術(shù)運(yùn)算符....................................................214.6.2關(guān)系運(yùn)算符....................................................224.6.3邏輯運(yùn)算符....................................................234.6.4按位邏輯運(yùn)算符 ................................................244.6.5條件運(yùn)算符....................................................254.6.6連接運(yùn)算符....................................................254.7條件語(yǔ)句..........................................................25case語(yǔ)句..........................................................275結(jié)構(gòu)建模 ..............................................................282004-08-16 第3頁(yè),共41頁(yè)版權(quán)所有侵權(quán)必究VerilogHDL入VerilogHDL入門(mén)教程絕密請(qǐng)輸入文檔編號(hào)5.1模塊定義結(jié)構(gòu)......................................................285.2模塊端口..........................................................285.3實(shí)例化語(yǔ)句........................................................295.4結(jié)構(gòu)化建模具體實(shí)例.................................................316數(shù)據(jù)流建模 ............................................................346.1連續(xù)賦值語(yǔ)句 ......................................................346.2阻塞賦值語(yǔ)句 ......................................................346.3數(shù)據(jù)流建模具體實(shí)例.................................................347行為建模 ..............................................................357.1簡(jiǎn)介.............................................................357.2順序語(yǔ)句塊........................................................357.3過(guò)程賦值語(yǔ)句 ......................................................367.4行為建模具體實(shí)例...................................................378其他方面 ..............................................................399習(xí)題..................................................................3910附錄AVerilog保留字 ...................................................402004-08-16 第4頁(yè),共41頁(yè)版權(quán)所有侵權(quán)必究VerilogHDL入門(mén)教程VerilogHDL入門(mén)教程絕密請(qǐng)輸入文檔編號(hào)關(guān)鍵詞:摘 要:本文主要介紹了VerilogVerilogHDL入門(mén)教程VerilogHDL入門(mén)教程絕密請(qǐng)輸入文檔編號(hào)關(guān)鍵詞:摘 要:本文主要介紹了VerilogHDL語(yǔ)言的一些基本知識(shí),目的是使初學(xué)者能夠迅速掌握HDL設(shè)計(jì)方法,初步了解并掌握VerilogHDL語(yǔ)言的基本要素,能夠讀懂簡(jiǎn)單的設(shè)計(jì)代碼并能夠進(jìn)行一些簡(jiǎn)單設(shè)計(jì)的VerilogHD建模。縮略語(yǔ)清單:對(duì)本文所用縮略語(yǔ)進(jìn)行說(shuō)明,要求提供每個(gè)縮略語(yǔ)的英文全名和中文解釋。參考資料清單:請(qǐng)?jiān)诒砀裰辛_列本文檔所引用的有關(guān)參考文獻(xiàn)名稱(chēng)、作者、標(biāo)題、編號(hào)、發(fā)布日期和出版單位等基本信息。參考資料清單名稱(chēng)Quisck作者AMBITDesign編號(hào)發(fā)布日期查閱地點(diǎn)或渠道蘇文彪出版單位(若不為本公司發(fā)布的文獻(xiàn),請(qǐng)?zhí)顚?xiě)此列)Reference forSystemVerilogHDLVerilogHDL硬J.Bhasker著圖書(shū)館機(jī)械工業(yè)出版件描述語(yǔ)言徐振林等譯社1前言當(dāng)前業(yè)界的硬件描述語(yǔ)言中主要有VHDL和VerilogHDL。公司根據(jù)本身ASIC設(shè)計(jì)現(xiàn)有的特點(diǎn)、現(xiàn)狀,主推VerilogHDL語(yǔ)言,逐漸淡化VHDL語(yǔ)言,從而統(tǒng)一公司的ASIC/FPGA設(shè)計(jì)平臺(tái),簡(jiǎn)化流程。為使新員工在上崗培訓(xùn)中能迅速掌握ASIC/FPGA設(shè)計(jì)的基本技能,中研基礎(chǔ)部ASIC設(shè)計(jì)中心開(kāi)發(fā)了一系列的培訓(xùn)教材。該套HD語(yǔ)言培訓(xùn)系列包括如下教程:《VerilogHDL入門(mén)教程》《VerilogHDL代碼書(shū)寫(xiě)規(guī)范》《Verilog基本電路設(shè)計(jì)指導(dǎo)書(shū)》《TestBench編碼技術(shù)》系列教材完成得較匆忙,本身尚有許多不完善的地方,同時(shí),可能還需要其他知識(shí)方面的培訓(xùn)但沒(méi)有形成培訓(xùn)教材,希望大家在培訓(xùn)過(guò)程中,多提寶貴意見(jiàn),以便我們對(duì)它進(jìn)行修改和完善。2設(shè)計(jì)方法學(xué)簡(jiǎn)介2004-08-16 第5頁(yè),共41頁(yè)版權(quán)所有侵權(quán)必究VerilogHDL入門(mén)教程2.1VerilogHDL入門(mén)教程2.1數(shù)字電路設(shè)計(jì)方法當(dāng)前的數(shù)字電路設(shè)計(jì)從層次上分可分成以下幾個(gè)層次:絕密請(qǐng)輸入文檔編號(hào)1.算法級(jí)設(shè)計(jì):利用高級(jí)語(yǔ)言如C語(yǔ)言及其他一些系統(tǒng)分析工具(如MATLAB)對(duì)設(shè)計(jì)從系統(tǒng)的算法級(jí)方式進(jìn)行描述。算法級(jí)不需要包含時(shí)序信息。2.RTL級(jí)設(shè)計(jì):用數(shù)據(jù)流在寄存器間傳輸?shù)哪J絹?lái)對(duì)設(shè)計(jì)進(jìn)行描述。3.門(mén)級(jí):用邏輯級(jí)的與、或、非門(mén)等門(mén)級(jí)之間的連接對(duì)設(shè)計(jì)進(jìn)行描述。4.開(kāi)關(guān)級(jí):用晶體管和寄存器及他們之間的連線關(guān)系來(lái)對(duì)設(shè)計(jì)進(jìn)行描述。算法級(jí)是高級(jí)的建模,一般對(duì)特大型設(shè)計(jì)或有較復(fù)雜的算法時(shí)使用,特別是通訊方面的一些系統(tǒng),通過(guò)算法級(jí)的建模來(lái)保證設(shè)計(jì)的系統(tǒng)性能。在算法級(jí)通過(guò)后,再把算法級(jí)用RTL級(jí)進(jìn)行描述。門(mén)級(jí)一般對(duì)小型設(shè)計(jì)可適合。開(kāi)關(guān)級(jí)一般是在版圖級(jí)進(jìn)行。2.2硬件描述語(yǔ)言在傳統(tǒng)的設(shè)計(jì)方法中,當(dāng)設(shè)計(jì)工程師設(shè)計(jì)一個(gè)新的硬件、一個(gè)新的數(shù)字電路或一個(gè)數(shù)字邏輯系統(tǒng)時(shí),他或許在CAE工作站上做設(shè)計(jì),為了能在CAE工作站做設(shè)計(jì),設(shè)計(jì)者必須為設(shè)計(jì)畫(huà)一張線路圖,通常地,線路圖是由表示信號(hào)的線和表示基本設(shè)計(jì)單元的符號(hào)連在一起組成線路圖,符號(hào)取自設(shè)計(jì)者用于構(gòu)造線路圖的零件庫(kù)。若設(shè)計(jì)者是用標(biāo)準(zhǔn)邏輯器件(如74系列等)做板極設(shè)計(jì)線路圖,那么在線路圖中,符號(hào)取自標(biāo)準(zhǔn)邏輯零件符號(hào)庫(kù);若設(shè)計(jì)是進(jìn)行ASIC設(shè)計(jì),則這些符號(hào)取自ASIC庫(kù)的可用的專(zhuān)用宏單元。這就是傳統(tǒng)的原理圖設(shè)計(jì)方法。對(duì)線路圖的邏輯優(yōu)化,設(shè)計(jì)者或許利用一些EDA工具或者人工地進(jìn)行邏輯的布爾函數(shù)邏輯優(yōu)化。為了能夠?qū)υO(shè)計(jì)進(jìn)行驗(yàn)證,設(shè)計(jì)者必須通過(guò)搭個(gè)硬件平臺(tái)(如電路板),對(duì)設(shè)計(jì)進(jìn)行驗(yàn)證。隨著電子設(shè)計(jì)技術(shù)的飛速發(fā)展,設(shè)計(jì)的集成度、復(fù)雜度越來(lái)越高,傳統(tǒng)的設(shè)計(jì)方法已滿(mǎn)足不了設(shè)計(jì)的要求,因此要求能夠借助當(dāng)今先進(jìn)的EDA工具,使用一種描述語(yǔ)言,對(duì)數(shù)字電路和數(shù)字邏輯系統(tǒng)能夠進(jìn)行形式化的描述,這就是硬件描述語(yǔ)言。硬件描述語(yǔ)言HDL(HardwareDescriptionLanguage)是一種用形式化方法來(lái)描述數(shù)字電路和數(shù)字邏輯系統(tǒng)的語(yǔ)言。數(shù)字邏輯電路設(shè)計(jì)者可利用這種語(yǔ)言來(lái)描述自己的設(shè)計(jì)思想,然后利用ED工具進(jìn)行仿真,再自動(dòng)綜合到門(mén)級(jí)電路,最后用ASI或FPG實(shí)現(xiàn)其功能。舉個(gè)例子,在傳統(tǒng)的設(shè)計(jì)方法中,對(duì)輸入的與門(mén),我們可能需到標(biāo)準(zhǔn)器件庫(kù)中調(diào)個(gè)7系列的器件出來(lái),但在硬件描述語(yǔ)言中,“&”就是一個(gè)與門(mén)的形式描述,“C=A&B”就是一個(gè)2輸入與門(mén)的描述。而“and”就是一個(gè)與門(mén)器件。硬件描述語(yǔ)言發(fā)展至今已有二十多年歷史,當(dāng)今業(yè)界的標(biāo)準(zhǔn)中(IEEE標(biāo)準(zhǔn))主要有VHDL和VerilogHDL這兩種硬件描述語(yǔ)言。2.3設(shè)計(jì)方法學(xué)當(dāng)前的ASIC設(shè)計(jì)有多種設(shè)計(jì)方法,但一般地采用自頂向下的設(shè)計(jì)方法。隨著技術(shù)的發(fā)展,一個(gè)芯片上往往集成了幾十萬(wàn)到幾百萬(wàn)個(gè)器件,傳統(tǒng)的自底向上的設(shè)計(jì)方法已不太現(xiàn)實(shí)。因此,一個(gè)設(shè)計(jì)往往從系統(tǒng)級(jí)設(shè)計(jì)開(kāi)始,把系統(tǒng)劃分成幾個(gè)大的基本的功能模塊,每個(gè)功能模塊再按一定的規(guī)則分成下一個(gè)層次的基本單元,如此一直劃分下去。自頂向下的設(shè)計(jì)方法可用下面的樹(shù)狀結(jié)構(gòu)表示:2004-08-16 第6頁(yè),共41頁(yè)版權(quán)所有侵權(quán)必究VerilogHDL入門(mén)教程絕密請(qǐng)輸入文檔編號(hào)系統(tǒng)VerilogHDL入門(mén)教程絕密請(qǐng)輸入文檔編號(hào)系統(tǒng)級(jí)的頂層模塊模塊A 模塊B 模塊C模塊B1 模塊B2 模塊C1圖1TOP-DOWN設(shè)計(jì)思想通過(guò)自頂向下的設(shè)計(jì)方法,可實(shí)現(xiàn)設(shè)計(jì)的結(jié)構(gòu)化,使一個(gè)復(fù)雜的系統(tǒng)設(shè)計(jì)可由多個(gè)設(shè)計(jì)者分工合作;還可以實(shí)現(xiàn)層次化的管理。2.4VerilogHDL簡(jiǎn)介VerilogHDL是一種硬件描述語(yǔ)言,用于從算法級(jí)、RTL級(jí)、門(mén)級(jí)到開(kāi)關(guān)級(jí)的多種抽象設(shè)計(jì)層次的數(shù)字系統(tǒng)建模。被建模的數(shù)字系統(tǒng)對(duì)象的復(fù)雜性可介于簡(jiǎn)單的門(mén)級(jí)和完整的電子數(shù)字系統(tǒng)之間。數(shù)字系統(tǒng)可按層次描述。2.4.1歷史VerilogHDL語(yǔ)言最初是于1983年由GatewayDesignAutoation公司為其模擬器產(chǎn)品開(kāi)發(fā)的硬件建模語(yǔ)言。那時(shí)它只是一種專(zhuān)用語(yǔ)言。由于他們的模擬、仿真器產(chǎn)品的廣泛使用,VerilogHDL作為一種便于使用且實(shí)用的語(yǔ)言逐漸為眾多設(shè)計(jì)者所接受。在一次努力增加語(yǔ)言普及性的活動(dòng)中,VerilogHDL語(yǔ)言于1990年被推向公眾領(lǐng)域。OpenVerilogInternational(OVI)是促進(jìn)Verilog發(fā)展的國(guó)際性組織。1992年,OVI決定致力于推廣VerilogOVI標(biāo)準(zhǔn)成為IEEE標(biāo)準(zhǔn)。這一努力最后獲得成功,Verilog語(yǔ)言于1995年成為IEEE標(biāo)準(zhǔn),稱(chēng)為IEEEStd1364-1995。完整的標(biāo)準(zhǔn)在Verilog硬件描述語(yǔ)言參考手冊(cè)中有詳細(xì)描述。2.4.2能力對(duì)初學(xué)者,可先大致了解一下VerilogHDL所提供的能力,掌握VerilogHDL語(yǔ)言的核心子集就可以了。1.概述VerilogHDL語(yǔ)言具有下述描述能力:設(shè)計(jì)的行為特性、設(shè)計(jì)的數(shù)據(jù)流特性、設(shè)計(jì)的結(jié)構(gòu)組成以及包含響應(yīng)監(jiān)控和設(shè)計(jì)驗(yàn)證方面的時(shí)延和波形產(chǎn)生機(jī)制。所有這些都使用同一種建模語(yǔ)言。此外,VerilogHDL語(yǔ)言提供了編程語(yǔ)言接口,通過(guò)該接口可以在模擬、驗(yàn)證期間從設(shè)計(jì)外部訪問(wèn)設(shè)計(jì),包括模擬的具體控制和運(yùn)行。VerilogHDL語(yǔ)言不僅定義了語(yǔ)法,而且對(duì)每個(gè)語(yǔ)法結(jié)構(gòu)都定義了清晰的模擬、仿真語(yǔ)義。因此,用這種語(yǔ)言編寫(xiě)的模型能夠使用Verilog仿真器進(jìn)行驗(yàn)證。語(yǔ)言從C編程語(yǔ)言中繼承了多種操作符和結(jié)構(gòu)。VerilogHDL提供了擴(kuò)展的建模能力,其中許多擴(kuò)展最初很難理解。但是,Verilog2004-08-16 第7頁(yè),共41頁(yè)版權(quán)所有侵權(quán)必究VerilogHDL入門(mén)教程絕密請(qǐng)輸入文檔編號(hào)HDL語(yǔ)言的核VerilogHDL入門(mén)教程絕密請(qǐng)輸入文檔編號(hào)HDL語(yǔ)言的核心子集非常易于學(xué)習(xí)和使用,這對(duì)大多數(shù)建模應(yīng)用來(lái)說(shuō)已經(jīng)足夠。當(dāng)然,完整的硬件描述語(yǔ)言足以對(duì)從最復(fù)雜的芯片到完整的電子系統(tǒng)進(jìn)行描述。2.主要功能list 基本邏輯門(mén),例如and、or和nand等都內(nèi)置在語(yǔ)言中。 開(kāi)關(guān)級(jí)基本結(jié)構(gòu)模型,例如pos和nos等也被內(nèi)置在語(yǔ)言中。 可采用三種不同方式或混合方式對(duì)設(shè)計(jì)建模。這些方式包括:行為描述方式—使用過(guò)程化結(jié)構(gòu)建模;數(shù)據(jù)流方式—使用連續(xù)賦值語(yǔ)句方式建模;結(jié)構(gòu)化方式—使用門(mén)和模塊實(shí)例語(yǔ)句描述建模。 VerilogHDL中有兩類(lèi)數(shù)據(jù)類(lèi)型:線網(wǎng)數(shù)據(jù)類(lèi)型和寄存器數(shù)據(jù)類(lèi)型。線網(wǎng)類(lèi)型表示構(gòu)件間的物理連線,而寄存器類(lèi)型表示抽象的數(shù)據(jù)存儲(chǔ)元件。 能夠描述層次設(shè)計(jì),可使用模塊實(shí)例結(jié)構(gòu)描述任何層次。 設(shè)計(jì)的規(guī)??梢允侨我獾模徽Z(yǔ)言不對(duì)設(shè)計(jì)的規(guī)模(大?。┦┘尤魏蜗拗?。 VerilogHDL不再是某些公司的專(zhuān)有語(yǔ)言而是IEEE標(biāo)準(zhǔn)。 人和機(jī)器都可閱讀Verilog語(yǔ)言,因此它可作為EDA的工具和設(shè)計(jì)者之間的交互語(yǔ)言。 設(shè)計(jì)能夠在多個(gè)層次上加以描述,從開(kāi)關(guān)級(jí)、門(mén)級(jí)、寄存器傳送級(jí)(RTL)到算法級(jí)。 能夠使用內(nèi)置開(kāi)關(guān)級(jí)原語(yǔ)在開(kāi)關(guān)級(jí)對(duì)設(shè)計(jì)完整建模。 同一語(yǔ)言可用于生成模擬激勵(lì)和指定測(cè)試的驗(yàn)證約束條件,例如輸入值的指定。 VerilogHDL能夠監(jiān)控模擬驗(yàn)證的執(zhí)行,即模擬驗(yàn)證執(zhí)行過(guò)程中設(shè)計(jì)的值能夠被監(jiān)控和顯示。這些值也能夠用于與期望值比較,在不匹配的情況下,打印報(bào)告消息。 在行為級(jí)描述中,VerilogHDL不僅能夠在RTL級(jí)上進(jìn)行設(shè)計(jì)描述,而且能夠在體系結(jié)構(gòu)級(jí)描述及其算法級(jí)行為上進(jìn)行設(shè)計(jì)描述。 能夠使用門(mén)和模塊實(shí)例化語(yǔ)句在結(jié)構(gòu)級(jí)進(jìn)行結(jié)構(gòu)描述。 對(duì)高級(jí)編程語(yǔ)言結(jié)構(gòu),例如條件語(yǔ)句、情況語(yǔ)句和循環(huán)語(yǔ)句,語(yǔ)言中都可以使用。下圖顯示了VerilogHDL的混合方式建模能力,即在一個(gè)設(shè)計(jì)中每個(gè)模塊均可以在不同設(shè)計(jì)層次上建模。開(kāi)關(guān) 算法開(kāi)關(guān)門(mén)RTL門(mén)圖2混合設(shè)計(jì)層次建模示意圖2004-08-16 第8頁(yè),共41頁(yè)版權(quán)所有侵權(quán)必究VerilogHDL入門(mén)教程3VerilogHDL建模概述VerilogHDL入門(mén)教程3VerilogHDL建模概述絕密請(qǐng)輸入文檔編號(hào)在數(shù)字電路設(shè)計(jì)中,數(shù)字電路可簡(jiǎn)單歸納為兩種要素:線和器件。線是器件管腳之間的物理連線;器件也可簡(jiǎn)單歸納為組合邏輯器件(如與或非門(mén)等)和時(shí)序邏輯器件(如寄存器、鎖存器、RAM等)。一個(gè)數(shù)字系統(tǒng)(硬件)就是多個(gè)器件通過(guò)一定的連線關(guān)系組合在一塊的。因此,VerilogHDL的建模實(shí)際上就是如何使用HDL語(yǔ)言對(duì)數(shù)字電路的兩種基本要素的特性及相互之間的關(guān)系進(jìn)行描述的過(guò)程。下面通過(guò)一些實(shí)例,以便對(duì)VerilogHDL的設(shè)計(jì)建模有個(gè)大概的印象。3.1模塊模塊(odule)是Verilog的基本描述單位,用于描述某個(gè)設(shè)計(jì)的功能或結(jié)構(gòu)及與其他模塊通信的外部端口。模塊在概念上可等同一個(gè)器件就如我們調(diào)用通用器件(與門(mén)、三態(tài)門(mén)等)或通用宏單元(計(jì)數(shù)器、AL、CP)等,因此,一個(gè)模塊可在另一個(gè)模塊中調(diào)用。一個(gè)電路設(shè)計(jì)可由多個(gè)模塊組合而成,因此一個(gè)模塊的設(shè)計(jì)只是一個(gè)系統(tǒng)設(shè)計(jì)中的某個(gè)層次設(shè)計(jì),模塊設(shè)計(jì)可采用多種建模方式。3.1.1簡(jiǎn)單事例下面先介紹幾個(gè)簡(jiǎn)單的VerilogHDL程序。例[1]加法器oduleaddr(a,b,cin,count,su);input[2:0]a;input[2:0]b;inputcin;outputcount;output[2:0]su;assign{count,su}=a+b+cin;endodule該例描述一個(gè)3位加法器,從例子可看出整個(gè)模塊是以odule開(kāi)始,endodule結(jié)束。例[2]比較器odulecopare(equal,a,b);input [1:0]a,b; //declaretheinputsignal;outputequare; //declaretheoutputsignal;assignequare=(a==b)?1:0;/*ifa=b,output1,otherwise0;*/endodule2004-08-16 第9頁(yè),共41頁(yè)版權(quán)所有侵權(quán)必究VerilogHDL入門(mén)教程絕密請(qǐng)輸入文檔編號(hào)該例描述一個(gè)VerilogHDL入門(mén)教程絕密請(qǐng)輸入文檔編號(hào)該例描述一個(gè)比較器,從上可看到,/*....*/和//...表示注釋部分。注釋只是為了方便設(shè)計(jì)者讀懂代碼,對(duì)編譯并不起作用。例[3]三態(tài)驅(qū)動(dòng)器oduletri(din,d_en,d_out);inputdin;inputd_en;outputd_out;//--Enteryourstateentshere--//assignd_out=d_en?din:bz;endoduleoduletrist(din,d_en,d_out);inputdin;inputd_en;outputd_out;//--stateentshere--//triu_tri(din,d_en,d_out);endodule該例描述了一個(gè)三態(tài)驅(qū)動(dòng)器。其中三態(tài)驅(qū)動(dòng)門(mén)在模塊tri中描述,而在模塊trist中調(diào)用了模塊tri。模塊tri對(duì)trist而言相當(dāng)于一個(gè)已存在的器件,在trist模塊中對(duì)該器件進(jìn)行實(shí)例化,實(shí)例化名u_tri。3.1.2模塊的結(jié)構(gòu)通過(guò)上面的實(shí)例可看出,一個(gè)設(shè)計(jì)是由一個(gè)個(gè)模塊(odule)構(gòu)成的。一個(gè)模塊的設(shè)計(jì)如下:1、模塊內(nèi)容是嵌在odule和endodule兩個(gè)語(yǔ)句之間。每個(gè)模塊實(shí)現(xiàn)特定的功能,模塊可進(jìn)行層次的嵌套,因此可以將大型的數(shù)字電路設(shè)計(jì)分割成大小不一的小模塊來(lái)實(shí)現(xiàn)特定的功能,最后通過(guò)由頂層模塊調(diào)用子模塊來(lái)實(shí)現(xiàn)整體功能,這就是Top-Down的設(shè)計(jì)思想,如的例[3。2、模塊包括接口描述部分和邏輯功能描述部分。這可以把模塊與器件相類(lèi)比。模塊的端口定義部分:如上例:oduleaddr(a,b,cin,count,su);其中odule是模塊的保留字,addr是模塊的名字,相當(dāng)于器件名。()內(nèi)是該模塊的端口聲明,定義了該模塊的管腳名,是該模塊與其他模塊通訊的外部接口,相當(dāng)于器件的pin。模塊的內(nèi)容,包括I/O說(shuō)明,內(nèi)部信號(hào)、調(diào)用模塊等的聲明語(yǔ)句和功能定義語(yǔ)句。I/O說(shuō)明語(yǔ)句如:input[2:0]a; input[2:0]b; inputcin;outputcount; 其中的input、output、inout是保留字,定義了管腳信號(hào)的流向,[n:0]表示該信號(hào)的位寬(總線或單根信號(hào)線)。2004-08-16 第10頁(yè),共41頁(yè)版權(quán)所有侵權(quán)必究VerilogHDL入門(mén)教程邏輯功能描述部分如:assign d_outVerilogHDL入門(mén)教程邏輯功能描述部分如:assign d_out=d_en?din:bz;triu_tri(din,d_en,d_out);絕密請(qǐng)輸入文檔編號(hào)功能描述用來(lái)產(chǎn)生各種邏輯(主要是組合邏輯和時(shí)序邏輯,可用多種方法進(jìn)行描述,具體的用法下面章節(jié)有介紹),還可用來(lái)實(shí)例化一個(gè)器件,該器件可以是廠家的器件庫(kù)也可以是我們自己用HDL設(shè)計(jì)的模塊(相當(dāng)于在原理圖輸入時(shí)調(diào)用一個(gè)庫(kù)元件)。在邏輯功能描述中,主要用到assign和always兩個(gè)語(yǔ)句。3、對(duì)每個(gè)模塊都要進(jìn)行端口定義,并說(shuō)明輸入、輸出口,然后對(duì)模塊的功能進(jìn)行邏輯描述,當(dāng)然,對(duì)測(cè)試模塊,可以沒(méi)有輸入輸出口。4、VerilogHDL的書(shū)寫(xiě)格式自由,一行可以寫(xiě)幾個(gè)語(yǔ)句,也可以一個(gè)語(yǔ)句分幾行寫(xiě)。具體由代碼書(shū)寫(xiě)規(guī)范約束。5、除endodule語(yǔ)句外,每個(gè)語(yǔ)句后面需有分號(hào)表示該語(yǔ)句結(jié)束。3.1.3模塊語(yǔ)法1.一個(gè)模塊的基本語(yǔ)法如下:一個(gè)模塊的基本語(yǔ)法如下:oduleodule_nae(port1,port2,......);//Declarations:input,output,inout,reg,wire,paraeter,function,task,...//Statements:InitialstateentAlwaysstateentModuleinstantiationGateinstantiationContinuousassignentendodule模塊的結(jié)構(gòu)需按上面的順序進(jìn)行,聲明區(qū)用來(lái)對(duì)信號(hào)方向、信號(hào)數(shù)據(jù)類(lèi)型、函數(shù)、任務(wù)、參數(shù)等進(jìn)行描述。語(yǔ)句區(qū)用來(lái)對(duì)功能進(jìn)行描述如:器件調(diào)用(Moduleinstantiation)等。2.書(shū)寫(xiě)語(yǔ)法建議一個(gè)模塊用一個(gè)文件;模塊名與文件名要同名;一行一句語(yǔ)句。信號(hào)方向按輸入、輸出、雙向順序描述。設(shè)計(jì)模塊時(shí)可盡量考慮采用參數(shù)化,提高設(shè)計(jì)的重用。以上是初學(xué)者的建議,具體的或深入的方面可看相關(guān)的文檔。下面的有關(guān)語(yǔ)法建議類(lèi)似。3.2時(shí)延2004-08-16 第11頁(yè),共41頁(yè)版權(quán)所有侵權(quán)必究VerilogHDL入門(mén)教程絕密請(qǐng)輸入文檔編號(hào)信號(hào)在電路中傳輸會(huì)有傳播延時(shí)等,如線延時(shí)、器件延時(shí)。時(shí)延就是對(duì)延時(shí)特性的HDL描述。舉例如下:assignVerilogHDL入門(mén)教程絕密請(qǐng)輸入文檔編號(hào)信號(hào)在電路中傳輸會(huì)有傳播延時(shí)等,如線延時(shí)、器件延時(shí)。時(shí)延就是對(duì)延時(shí)特性的HDL描述。舉例如下:assign#2 B=;表示B信號(hào)在2個(gè)時(shí)間單位后得到A信號(hào)的值。如下圖:A:B:2圖3句:在VerilogHDL中,所有時(shí)延都必須根據(jù)時(shí)間單位進(jìn)行定義,定義方式為在文件頭添加如下語(yǔ)`tiescale1ns/100ps其中’tiescale是VerilogHDL提供的預(yù)編譯處理命令,1ns表示時(shí)間單位是1ns,100ps表示時(shí)間精度是100p。根據(jù)該命令,編譯工具才可以認(rèn)知#2為2n。在VerilogHDL的IEEE標(biāo)準(zhǔn)中沒(méi)有規(guī)定時(shí)間單位的缺省值,由各模擬工具確定。因此,在寫(xiě)代碼時(shí)必須確定。3.3三種建模方式在HDL的建模中,主要有結(jié)構(gòu)化描述方式、數(shù)據(jù)流描述方式和行為描述方式,下面分別舉例說(shuō)明三者之間的區(qū)別。3.3.1結(jié)構(gòu)化描述方式結(jié)構(gòu)化的建模方式就是通過(guò)對(duì)電路結(jié)構(gòu)的描述來(lái)建模,即通過(guò)對(duì)器件的調(diào)用(HDL概念稱(chēng)為例化),并使用線網(wǎng)來(lái)連接各器件的描述方式。這里的器件包括VerilogHDL的內(nèi)置門(mén)如與門(mén)and,異或門(mén)xo等,也可以是用戶(hù)的一個(gè)設(shè)計(jì)。結(jié)構(gòu)化的描述方式反映了一個(gè)設(shè)計(jì)的層次結(jié)構(gòu)。例[1]:一位全加器圖4一位全加器的結(jié)構(gòu)圖代碼:oduleFA_struct(A,B,Cin,Su,Count);inputA;inputB;inputCin;2004-08-16 第12頁(yè),共41頁(yè)版權(quán)所有侵權(quán)必究VerilogHDL入門(mén)教程絕密請(qǐng)輸入文檔編號(hào)outputSu;outputCount;wireVerilogHDL入門(mén)教程絕密請(qǐng)輸入文檔編號(hào)outputSu;outputCount;wireS1,T1,T2,T3;//--stateents--//xorx1(S1,A,B);xorx2(Su,S1,Cin);andA1(T3,A,B);andA2(T2,B,Cin);andA3(T1,A,Cin);orO1(Cout,T1,T2,T3);endodule該實(shí)例顯示了一個(gè)全加器由兩個(gè)異或門(mén)、三個(gè)與門(mén)、一個(gè)或門(mén)構(gòu)成。S1、T1、T2、T3則是門(mén)與門(mén)之間的連線。代碼顯示了用純結(jié)構(gòu)的建模方式,其中xor、and、or是VerilogHDL內(nèi)置的門(mén)器件。以xorx1(S1,A,B)該例化語(yǔ)為例:xor表明調(diào)用一個(gè)內(nèi)置的異或門(mén),器件名稱(chēng)xor,代碼實(shí)例化名x1(類(lèi)似原理圖輸入方式)。括號(hào)內(nèi)的S1,A,B表明該器件管腳的實(shí)際連接線(信號(hào))的名稱(chēng),其中A、B是輸入,S1是輸出。其他同。下:例[2]:兩位的全加器兩位的全加器可通過(guò)調(diào)用兩個(gè)一位的全加器來(lái)實(shí)現(xiàn)。該設(shè)計(jì)的設(shè)計(jì)層次示意圖和結(jié)構(gòu)圖如Four_bit_FAFA_struct FA_structFAFCinFBABCinABCinSumF_structCountSumF_structCountFSumFCountFourbitFA圖5兩位全加器的結(jié)構(gòu)示意圖代碼:oduleFour_bit_FA(FA,FB,FCin,FSu,FCout);paraeterSIZE=2;input[SIZE:1]FA;2004-08-16 第13頁(yè),共41頁(yè)版權(quán)所有侵權(quán)必究VerilogHDL入門(mén)教程絕密請(qǐng)輸入文檔編號(hào)input[SIZE:1]VerilogHDL入門(mén)教程絕密請(qǐng)輸入文檔編號(hào)input[SIZE:1]FB;inputFCin;output[SIZE:1]FSu;outputFCout;wireFTep;FA_structFA1(.A(FA[1]),.B(FB[1]),.Cin(FCin),.Sum(FSu[1]),.Cout(Ftep));FA_struct FA2(.A(FA[2]),.B(FB[2]),.Cin(FTep),.Sum(FSu[2]),.Cout(FCount));endodule該實(shí)例用結(jié)構(gòu)化建模方式進(jìn)行一個(gè)兩位的全加器的設(shè)計(jì),頂層模塊Four_bit_FA調(diào)用了兩個(gè)一位的全加器FA_struct。在這里,以前的設(shè)計(jì)模塊FA_struct對(duì)頂層而言是一個(gè)現(xiàn)成的器件,頂層模塊只要進(jìn)行例化就可以了。注意這里的例化中,端口映射(管腳的連線)采用名字關(guān)聯(lián),如.A(FA[2]),其中.A表示調(diào)用器件的管腳,括號(hào)中的信號(hào)表示接該管腳的電路中的具體信。wire保留字表明信號(hào)Ftep是屬線網(wǎng)類(lèi)型(下面有具體描述)。另外,在設(shè)計(jì)中,盡量考慮參數(shù)化的問(wèn)題。器件的端口映射必須采用名字關(guān)聯(lián)。3.3.2數(shù)據(jù)流描述方式數(shù)據(jù)流的建模方式就是通過(guò)對(duì)數(shù)據(jù)流在設(shè)計(jì)中的具體行為的描述的來(lái)建模。最基本的機(jī)制就是用連續(xù)賦值語(yǔ)句。在連續(xù)賦值語(yǔ)句中,某個(gè)值被賦給某個(gè)線網(wǎng)變量(信號(hào)),語(yǔ)法如下:assign[dela]net_nae=expression;如:assign#2A=B;2004-08-16 第14頁(yè),共41頁(yè)版權(quán)所有侵權(quán)必究VerilogHDL入門(mén)教程絕密請(qǐng)輸入文檔編號(hào)在數(shù)據(jù)流描述方式中,還必須借助于HDVerilogHDL入門(mén)教程絕密請(qǐng)輸入文檔編號(hào)在數(shù)據(jù)流描述方式中,還必須借助于HDL提供的一些運(yùn)算符,如按位邏輯運(yùn)算符:邏輯與(&,邏輯或(|)等。以上面的全加器為例,可用如下的建模方式:圖6一位全加器的結(jié)構(gòu)圖`tiescale1ns/100psoduleFA_flow(A,B,Cin,Su,Count)inputA,B,Cin;outputSu,Count;wireS1,T1,T2,T3;assign#2S1=A^B;assign#2Sum=S1^Cin;assign#2T3=A&B;assign#2T1=A&Cin;assign#2T2=B&Cin;endodule注意在各assign語(yǔ)句之間,是并行執(zhí)行的,即各語(yǔ)句的執(zhí)行與語(yǔ)句之間的順序無(wú)關(guān)。如上,當(dāng)有個(gè)變化時(shí),S1、T3、T1將同時(shí)變化,S1的變化又會(huì)造成Su的變化。3.3.3行為描述方式行為方式的建模是指采用對(duì)信號(hào)行為級(jí)的描述(不是結(jié)構(gòu)級(jí)的描述)的方法來(lái)建模。在表示方面,類(lèi)似數(shù)據(jù)流的建模方式,但一般是把用initial塊語(yǔ)句或always塊語(yǔ)句描述的歸為行為建模方式。行為建模方式通常需要借助一些行為級(jí)的運(yùn)算符如加法運(yùn)算符(+),減法運(yùn)算符()等。以下舉個(gè)例子,對(duì)initial和always語(yǔ)句的具體應(yīng)用可看相關(guān)章節(jié)的介紹,這里,先對(duì)行為建模方式有個(gè)概念。例[1]一位全加器的行為建模oduleFA_behav1(A,B,Cin,Su,Cout);inputA,B,Cin;outputSu,Cout;2004-08-16 第15頁(yè),共41頁(yè)版權(quán)所有侵權(quán)必究VerilogHDL入門(mén)教程絕密請(qǐng)輸入文檔編號(hào)regSu,Cout;regVerilogHDL入門(mén)教程絕密請(qǐng)輸入文檔編號(hào)regSu,Cout;regT1,T2,T3;alwas@(AorBorCin)beginendendoduleSum=(A^B)^Cin;T1=A&Cin;T2=B&Cin;T3=A&B;Cout=(T1|T2)|T3;現(xiàn)。需要先建立以下概念:1、只有寄存器類(lèi)型的信號(hào)才可以在always和initial語(yǔ)句中進(jìn)行賦值,類(lèi)型定義通過(guò)reg語(yǔ)句實(shí)2、always語(yǔ)句是一直重復(fù)執(zhí)行,由敏感表(always語(yǔ)句括號(hào)內(nèi)的變量)中的變量觸發(fā)。3、always語(yǔ)句從0時(shí)刻開(kāi)始。4、在begin和end之間的語(yǔ)句是順序執(zhí)行,屬于串行語(yǔ)句。例[2]:一位全加器的行為建模oduleFA_behav2(A,B,Cin,Su,Cout);inputA,B,Cin;outputSu,Cout;regSu,Cout;alwas@(AorBorCin)beginendendodule{Count,Su}=A+B+Cin;在例2中,采用更加高級(jí)(更趨于行為級(jí))描述方式,即直接采用“+”來(lái)描述加法。{Count,Su}表示對(duì)位數(shù)的擴(kuò)展,因?yàn)閮蓚€(gè)1bit相加,和有兩位,低位放在Sum變量中,進(jìn)位放在Count中。3.3.4混合設(shè)計(jì)描述2004-08-16 第16頁(yè),共41頁(yè)版權(quán)所有侵權(quán)必究VerilogHDL入門(mén)教程絕密請(qǐng)輸入文檔編號(hào)在實(shí)際的設(shè)VerilogHDL入門(mén)教程絕密請(qǐng)輸入文檔編號(hào)在實(shí)際的設(shè)計(jì)中,往往是多種設(shè)計(jì)模型的混合。一般地,對(duì)頂層設(shè)計(jì),采用結(jié)構(gòu)描述方式,對(duì)低層模塊,可采用數(shù)據(jù)流、行為級(jí)或兩者的結(jié)合。如上面的兩bit全加器,對(duì)頂層模塊(Four_bit_FA)采用結(jié)構(gòu)描述方式對(duì)低層進(jìn)行例化,對(duì)低層模塊(FA)可采用結(jié)構(gòu)描述、數(shù)據(jù)流描述或行為級(jí)描述。4VerilogHDL基本語(yǔ)法本節(jié)介紹VerilogHDL語(yǔ)言的一些基本要素,包括標(biāo)識(shí)符、注釋、格式、數(shù)字值集合、兩種數(shù)據(jù)類(lèi)型、運(yùn)算符和表達(dá)式和一些基本的語(yǔ)句如IF語(yǔ)句等。4.1標(biāo)識(shí)符4.1.1定義標(biāo)識(shí)符(identifier)用于定義模塊名、端口名、信號(hào)名等。VerilogHDL中的標(biāo)識(shí)符(identifier)可以是任意一組字母、數(shù)字、$符號(hào)和_(下劃線)符號(hào)的組合,但標(biāo)識(shí)符的第一個(gè)字符必須是字母或者下劃線。另外,標(biāo)識(shí)符是區(qū)分大小寫(xiě)的。以下是標(biāo)識(shí)符的幾個(gè)例子:CountCOUNT //與Count不同。R56_68FIVE$4.1.2關(guān)鍵詞VerilogHDL定義了一系列保留字,叫做關(guān)鍵詞,附錄A列出了語(yǔ)言中的所有保留字。注意只有小寫(xiě)的關(guān)鍵詞才是保留字。例如,標(biāo)識(shí)符always(這是個(gè)關(guān)鍵詞)與標(biāo)識(shí)符ALWAYS(非關(guān)鍵詞)是不同的。4.1.3書(shū)寫(xiě)規(guī)范建議以下是一些書(shū)寫(xiě)規(guī)范的要求,可參考公司的《Verilog代碼書(shū)寫(xiě)規(guī)范》。1、用有意義的有效的名字如Sum、CPU_add等。2、用下劃線區(qū)分詞。3、采用一些前綴或后綴,如時(shí)鐘采用Clk前綴:Clk_50,Clk_CPU;低電平采用_n后綴:Enable_n;4、統(tǒng)一一定的縮寫(xiě)如全局復(fù)位信號(hào)Rst。5、同一信號(hào)在不同層次保持一致性,如同一時(shí)鐘信號(hào)必須在各模塊保持一致。6、自定義的標(biāo)識(shí)符不能與保留字同名。7、參數(shù)采用大寫(xiě),如SIZE。4.2注釋VerilogHDL中有兩種注釋的方式,一種是以“/*”符號(hào)開(kāi)始,“*/”結(jié)束,在兩個(gè)符號(hào)之間的語(yǔ)句都是注釋語(yǔ)句,因此可擴(kuò)展到多行。如:2004-08-16 第17頁(yè),共41頁(yè)版權(quán)所有侵權(quán)必究VerilogHDL入門(mén)教程/*stateVerilogHDL入門(mén)教程/*stateent1,stateent2,.....stateentn*/以上n個(gè)語(yǔ)句都是注釋語(yǔ)句。另一種是以//開(kāi)頭的語(yǔ)句,它表示以//開(kāi)始到本行結(jié)束都屬于注釋語(yǔ)句。絕密請(qǐng)輸入文檔編號(hào)4.3格式VerilogHDL是區(qū)分大小寫(xiě)的,即大小寫(xiě)不同的標(biāo)識(shí)符是不同的。另外VerilogHDL的書(shū)寫(xiě)格式是自由的,即一條語(yǔ)句可多行書(shū)寫(xiě);一行可寫(xiě)多個(gè)語(yǔ)句。白空(新行、制表符、空格)沒(méi)有特殊意義。如inputA;inputB;與inputA;inputB;是一樣的。書(shū)寫(xiě)規(guī)范建議:一個(gè)語(yǔ)句一行。采用空四格的table鍵進(jìn)行縮進(jìn)。4.4數(shù)字值集合本小節(jié)介紹VerilogHDL的值的集合和常量(整型、實(shí)型、字符型)和變量等。4.4.1值集合VerilogHDL中規(guī)定了四種基本的值類(lèi)型:0:邏輯0或“假”;1:邏輯1或“真”;X:未知值;Z:高阻。注意這四種值的解釋都內(nèi)置于語(yǔ)言中。如一個(gè)為z的值總是意味著高阻抗,一個(gè)為0的值通常是指邏輯0。在門(mén)的輸入或一個(gè)表達(dá)式中的為“z”的值通常解釋成“x”。此外,x值和z值都是不分大小寫(xiě)的,也就是說(shuō),值0x1z與值0X1Z相同。VerilogHDL中的常量是由以上這四類(lèi)基本值組成的。4.4.2常量VerilogHDL中有三種常量:整型、實(shí)型、字符串型。2004-08-16 第18頁(yè),共41頁(yè)版權(quán)所有侵權(quán)必究VerilogHDL入門(mén)教程絕密請(qǐng)輸入文檔編號(hào)VerilogHDL入門(mén)教程絕密請(qǐng)輸入文檔編號(hào)下劃線符號(hào)(_)可以隨意用在整數(shù)或?qū)崝?shù)中,它們就數(shù)量本身沒(méi)有意義。它們能用來(lái)提高易讀性;唯一的限制是下劃線符號(hào)不能用作為首字符。下面主要介紹整型和字符串型。1.整型整型數(shù)可以按如下兩種方式書(shū)寫(xiě):1)簡(jiǎn)單的十進(jìn)制數(shù)格式2)基數(shù)格式A.簡(jiǎn)單的十進(jìn)制格式這種形式的整數(shù)定義為帶有一個(gè)可選的“+”(一元)或“-”(一元)操作符的數(shù)字序列。下面是這種簡(jiǎn)易十進(jìn)制形式整數(shù)的例子。32 十進(jìn)制數(shù)32-15 十進(jìn)制數(shù)-15B.基數(shù)表示法這種形式的整數(shù)格式為:[size]basevaluesize定義以位計(jì)的常量的位長(zhǎng);base為o或O(表示八進(jìn)制),b或B(表示二進(jìn)制),d或D(表示十進(jìn)制),h或H(表示十六進(jìn)制)之一;value是基于base的值的數(shù)字序列。值x和z以及十六進(jìn)制中的a到f不區(qū)分大小寫(xiě)。下面是一些具體實(shí)例:5O37 5位八進(jìn)制數(shù)(二進(jìn)制11111)4D2 4位十進(jìn)制數(shù)(二進(jìn)制001)4B1x_01 4位二進(jìn)制數(shù)7Hx 位x擴(kuò)展的x),即xxxxxxx4hZ 4位z(擴(kuò)展的z),即zzzz4d-4 非法:數(shù)值不能為負(fù)8h2A 在位長(zhǎng)和字符之間,以及基數(shù)和數(shù)值之間允許出現(xiàn)空格3'b001 非法:`和基數(shù)b之間不允許出現(xiàn)空格(2+3)b10 非法:位長(zhǎng)不能夠?yàn)楸磉_(dá)式注意,x(或z)在十六進(jìn)制值中代表4位x(或z),在八進(jìn)制中代表3位x(或z),在二進(jìn)制中代表1位x(或z)?;鶖?shù)格式計(jì)數(shù)形式的數(shù)通常為無(wú)符號(hào)數(shù)。這種形式的整型數(shù)的長(zhǎng)度定義是可選的。如果沒(méi)有定義一個(gè)整數(shù)型的長(zhǎng)度,數(shù)的長(zhǎng)度為相應(yīng)值中定義的位數(shù)。下面是兩個(gè)例子:o721 9位八進(jìn)制數(shù)hAF 8位十六進(jìn)制數(shù)2004-08-16 第19頁(yè),共41頁(yè)版權(quán)所有侵權(quán)必究VerilogHDL入門(mén)教程絕密請(qǐng)輸入文檔編號(hào)如果定義的長(zhǎng)度比為常量指VerilogHDL入門(mén)教程絕密請(qǐng)輸入文檔編號(hào)如果定義的長(zhǎng)度比為常量指定的長(zhǎng)度長(zhǎng),通常在左邊填0補(bǔ)位。但是如果數(shù)最左邊一位為x或z,就相應(yīng)地用x或z在左邊補(bǔ)位。例如:10b10 左邊添0占位,000000001010bx0x1 左邊添x占位,xxxxxxx0x1如果長(zhǎng)度定義得更小,那么最左邊的位相應(yīng)地被截?cái)唷@纾?'b1001_0011與3b011相等5H0FFF與5H1F相等2.字符串型字符串是雙引號(hào)內(nèi)的字符序列。字符串不能分成多行書(shū)寫(xiě)。例如:"INTERNALERROR""REACHED->HERE"用8位ASCII值表示的字符可看作是無(wú)符號(hào)整數(shù)。因此字符串是8位ASCII值的序列。為存儲(chǔ)字符串“INTERNALERROR”,變量需要8*14位。reg[1:8*14]Message;...Message="INTERNALERROR"4.5數(shù)據(jù)類(lèi)型VerilogHDL主要包括兩種數(shù)據(jù)類(lèi)型線網(wǎng)類(lèi)型(nettype)和寄存器類(lèi)型(regtpe)。4.5.1線網(wǎng)類(lèi)型1.wire和tri定義線網(wǎng)類(lèi)型主要有wire和tri兩種。線網(wǎng)類(lèi)型用于對(duì)結(jié)構(gòu)化器件之間的物理連線的建模。如器件的管腳,內(nèi)部器件如與門(mén)的輸出等。以上面的加法器為例,輸入信號(hào)A,B是由外部器件所驅(qū)動(dòng),異或門(mén)X的輸出S1是與異或門(mén)X輸入腳相連的物理連接線,它由異或門(mén)X所驅(qū)動(dòng)。由于線網(wǎng)類(lèi)型代表的是物理連接線,因此它不存貯邏輯值。必須由器件所驅(qū)動(dòng)。通常由assign進(jìn)行賦值。如assignA=B^;當(dāng)一個(gè)wire類(lèi)型的信號(hào)沒(méi)有被驅(qū)動(dòng)時(shí),缺省值為Z(高阻)。信號(hào)沒(méi)有定義數(shù)據(jù)類(lèi)型時(shí),缺省為wire類(lèi)型。如上面一位全加器的端口信號(hào)A,B,SUM等,沒(méi)有定義類(lèi)型,故缺省為wire線網(wǎng)類(lèi)型。2.兩者區(qū)別tri主要用于定義三態(tài)的線網(wǎng)。4.5.2寄存器類(lèi)型2004-08-16 第20頁(yè),共41頁(yè)版權(quán)所有侵權(quán)必究VerilogHDL入門(mén)教程1.定義絕密VerilogHDL入門(mén)教程1.定義絕密請(qǐng)輸入文檔編號(hào)reg是最常用的寄存器類(lèi)型,寄存器類(lèi)型通常用于對(duì)存儲(chǔ)單元的描述,如D型觸發(fā)器、ROM等。存儲(chǔ)器類(lèi)型的信號(hào)當(dāng)在某種觸發(fā)機(jī)制下分配了一個(gè)值,在分配下一個(gè)值之時(shí)保留原值。但必須注意的是,reg類(lèi)型的變量,不一定是存儲(chǔ)單元,如在always語(yǔ)句中進(jìn)行描述的必須用reg類(lèi)型的變量。reg類(lèi)型定義語(yǔ)法如下:reg[sb:lsb]reg1,reg2,...regN;sb和lsb定義了范圍,并且均為常數(shù)值表達(dá)式。范圍定義是可選的;如果沒(méi)有定義范圍,缺省值為1位寄存器。例如:reg[3:0]Sat; //Sat為4位寄存器。regCnt; //1位寄存器。reg[1:32]Kisp,Pisp,Lisp;寄存器類(lèi)型的值可取負(fù)數(shù),但若該變量用于表達(dá)式的運(yùn)算中,則按無(wú)符號(hào)類(lèi)型處理,如:reg A;.....A=-1;....則A的二進(jìn)制為1111,在運(yùn)算中,A總按無(wú)符號(hào)數(shù)15來(lái)看待。2.寄存器類(lèi)型的存儲(chǔ)單元建模舉例用寄存器類(lèi)型來(lái)構(gòu)建兩位的D觸發(fā)器如下:reg[1:0]Dout;.....alwas@(posedgeClk)Dout <=Din;....用寄存器數(shù)組類(lèi)型來(lái)建立存儲(chǔ)器的模型,如對(duì)2個(gè)8位的RAM建模如下:reg [7:0]Me[0:1];對(duì)存儲(chǔ)單元的賦值必須一個(gè)個(gè)第賦值,如上2個(gè)8位的RAM的賦值必須用兩條賦值語(yǔ)句:.....Me[0]=’h55;Me[1]=’haa;....3.書(shū)寫(xiě)規(guī)范建議對(duì)數(shù)組類(lèi)型,請(qǐng)按降序方式,如[7:0];4.6運(yùn)算符和表達(dá)式2004-08-16 第21頁(yè),共41頁(yè)版權(quán)所有侵權(quán)必究VerilogHDL入門(mén)教程4.6.1算術(shù)運(yùn)算符在常用的算術(shù)運(yùn)算符主要是VerilogHDL入門(mén)教程4.6.1算術(shù)運(yùn)算符在常用的算術(shù)運(yùn)算符主要是:加法(二元運(yùn)算符):“+”;減法(二元運(yùn)算符):“-”;乘法(二元運(yùn)算符):“*”;絕密請(qǐng)輸入文檔編號(hào)在算術(shù)運(yùn)算符的使用中,注意如下兩個(gè)問(wèn)題:1.算術(shù)操作結(jié)果的位數(shù)長(zhǎng)度算術(shù)表達(dá)式結(jié)果的長(zhǎng)度由最長(zhǎng)的操作數(shù)決定。在賦值語(yǔ)句下,算術(shù)操作結(jié)果的長(zhǎng)度由操作符左端目標(biāo)長(zhǎng)度決定??紤]如下實(shí)例:reg[3:0]Arc,Bar,Crt;reg[5:0]Frx;...Arc=Bar+Crt;Frx=Bar+Crt;第一個(gè)加的結(jié)果長(zhǎng)度由Bar,Crt和Arc長(zhǎng)度決定,長(zhǎng)度為4位。第二個(gè)加法操作的長(zhǎng)度同樣由Frx的長(zhǎng)度決定(Frx、Bat和Crt中的最長(zhǎng)長(zhǎng)度),長(zhǎng)度為6位。在第一個(gè)賦值中,加法操作的溢出部分被丟棄;而在第二個(gè)賦值中,任何溢出的位存儲(chǔ)在結(jié)果位Frx[4中。在較大的表達(dá)式中,中間結(jié)果的長(zhǎng)度如何確定?在VerilogHDL中定義了如下規(guī)則:表達(dá)式中的所有中間結(jié)果應(yīng)取最大操作數(shù)的長(zhǎng)度(賦值時(shí),此規(guī)則也包括左端目標(biāo))??紤]另一個(gè)實(shí)例:wire[4:1]Box,Drt;wire[5:1]Cfg;wire[6:1]Peg;wire[8:1]Adt;...assignAdt=(Box+Cfg)+(Drt+Peg);表達(dá)式右端的操作數(shù)最長(zhǎng)為6,但是將左端包含在內(nèi)時(shí),最大長(zhǎng)度為8。所以所有的加操作使用8位進(jìn)行。例如:Box和Cfg相加的結(jié)果長(zhǎng)度為8位。2.有符號(hào)數(shù)和無(wú)符號(hào)數(shù)在設(shè)計(jì)中,請(qǐng)先按無(wú)符號(hào)數(shù)進(jìn)行。4.6.2關(guān)系運(yùn)算符關(guān)系運(yùn)算符有:?>(大于)2004-08-16 第22頁(yè),共41頁(yè)版權(quán)所有侵權(quán)必究VerilogHDL入門(mén)教程?<VerilogHDL入門(mén)教程?<(小于)?>=(不小于)?<=(不大于)==(邏輯相等)!=(邏輯不等)絕密請(qǐng)輸入文檔編號(hào)例:關(guān)系操作符的結(jié)果為真(1)或假(0)。如果操作數(shù)中有一位為X或Z,那么結(jié)果為X。23>45結(jié)果為假(0),而:52<8hxFF結(jié)果為x。如果操作數(shù)長(zhǎng)度不同,長(zhǎng)度較短的操作數(shù)在最重要的位方向(左方)添0補(bǔ)齊。例如:b1000>=b01110等價(jià)于:b01000>=b01110結(jié)果為假(0)。在邏輯相等與不等的比較中,只要一個(gè)操作數(shù)含有x或z,比較結(jié)果為未知(x),如:假定:Data=b11x0;Addr=b11x0;那么:Data==Addr比較結(jié)果不定,也就是說(shuō)值為x。4.6.3邏輯運(yùn)算符邏輯運(yùn)算符有:&&(邏輯與)||(邏輯或)!(邏輯非)用法為:(表達(dá)式1)邏輯運(yùn)算符(表達(dá)式2)....這些運(yùn)算符在邏輯值0(假)或1(真)上操作。邏輯運(yùn)算的結(jié)果為0或1。例如,假定:Crd=b0;//0為假Dgs=b1;//1為真那么:Crd&&Dgs結(jié)果為0(假)Crd||Dgs結(jié)果為1(真)!Dgs結(jié)果為0(假)邏輯與(&&)的真值表如下:表1邏輯與真值表2004-08-16 第23頁(yè),共41頁(yè)版權(quán)所有侵權(quán)必究VerilogHDL入門(mén)教程&&0假)1(真)X/Z(不定)VerilogHDL入門(mén)教程&&0假)1(真)X/Z(不定)(假)00x(真)01x絕密請(qǐng)輸入文檔編號(hào)X/Z(不定)xxx邏輯或的真值表如下:表2邏輯或真值表||01x/z(不定)(假)01x(真)111x/z(不定)x1x4.6.4按位邏輯運(yùn)算符按位運(yùn)算符有:?~(一元非):(相當(dāng)于非門(mén)運(yùn)算)?&(二元與):(相當(dāng)于與門(mén)運(yùn)算)?|(二元或):(相當(dāng)于或門(mén)運(yùn)算)?^(二元異或):(相當(dāng)于異或門(mén)運(yùn)算)?~^,^~(二元異或非即同或):(相當(dāng)于同或門(mén)運(yùn)算)這些操作符在輸入操作數(shù)的對(duì)應(yīng)位上按位操作,并產(chǎn)生向量結(jié)果。下表顯示對(duì)于不同按位邏輯運(yùn)算符按位操作的結(jié)果:圖7按位邏輯運(yùn)算符真值表例如,假定,2004-08-16 第24頁(yè),共41頁(yè)版權(quán)所有侵權(quán)必究VerilogHDL入門(mén)教程絕密請(qǐng)輸入文檔編號(hào)VerilogHDL入門(mén)教程絕密請(qǐng)輸入文檔編號(hào)A=b0110;B=b0100;那么:A|B結(jié)果為0110A&B結(jié)果為0100如果操作數(shù)長(zhǎng)度不相等,長(zhǎng)度較小的操作數(shù)在最左側(cè)添0補(bǔ)位。例如,b0110^b10000與如下式的操作相同:b00110^b10000結(jié)果為'b10110。4.6.5條件運(yùn)算符條件操作符根據(jù)條件表達(dá)式的值選擇表達(dá)式,形式如下:cond_expr?expr1:expr2如果cond_expr為真(即值為1),選擇expr1;如果cond_expr為假(值為0),選擇expr2。如果cond_expr為x或z,結(jié)果將是按以下邏輯expr1和expr2按位操作的值:0與0得0,1與1得1,其余情況為x。如下所示:wire[2:0]Student=Marks>18?Grade_A:Grade_C;計(jì)算表達(dá)式Marks>18;如果真,Grade_A賦值為Student;如果Marks<=18,Grade_C賦值為Student。4.6.6連接運(yùn)算符連接操作是將小表達(dá)式合并形成大表達(dá)式的操作。形式如下:{expr1,expr2,...,exprN}實(shí)例如下所示:wire[7:0]Dbus;assignDbus[7:4]={Dbus[0],Dbus[1],Dbus[2],Dbus[3]};//以反轉(zhuǎn)的順序?qū)⒌投?位賦給高端4位。assignDbus={Dbus[3:0],Dbus[7:4]};//高4位與低4位交換。由于非定長(zhǎng)常數(shù)的長(zhǎng)度未知,不允許連接非定長(zhǎng)常數(shù)。例如,下列式子非法:{Dbus,5}//不允許連接操作非定長(zhǎng)常數(shù)。4.7條件語(yǔ)句if語(yǔ)句的語(yǔ)法如下:if(condition_1)procedural_stateent_12004-08-16 第25頁(yè),共41頁(yè)版權(quán)所有侵權(quán)必究VerilogHDL入門(mén)教程絕密請(qǐng)輸入文檔編號(hào){elseif(condition_2)procedural_stateent_2}{elseprocedural_stateVerilogHDL入門(mén)教程絕密請(qǐng)輸入文檔編號(hào){elseif(condition_2)procedural_stateent_2}{elseprocedural_stateent_3}如果對(duì)condition_1求值的結(jié)果為個(gè)非零值,那么procedural_stateent_1被執(zhí),如果condition_1的值為0、x或z,那么procedural_stateent_1不執(zhí)行。如果存在一個(gè)else分支,那么這個(gè)分支被執(zhí)行。以下是一個(gè)例子。if(Sum<60)beginendGrade=C;Total_C=Total_c+1;elseif(Sum<75)beginendelsebeginendGrade=B;Total_B=Total_B+1;Grade=A;Total_A=Total_A+1;注意條件表達(dá)式必須總是被括起來(lái),如果使用if-if-else格式,那么可能會(huì)有二義性,如下例所示:if(Clk)if(Reset)Q=0;elseQ=D;問(wèn)題是最后一個(gè)else屬于哪一個(gè)if?它是屬于第一個(gè)if的條件(Clk)還是屬于第二個(gè)if的條件(Reset)?這在VerilogHDL中已通過(guò)將else與最近的沒(méi)有else的if相關(guān)聯(lián)來(lái)解決。在這個(gè)例子中,else與內(nèi)層if語(yǔ)句相關(guān)聯(lián)。以下是另一些if語(yǔ)句的例子。if(Sum<100)Sum=Sum+10;if(Nickel_In)Deposit=5;2004-08-16 第26頁(yè),共41頁(yè)版權(quán)所有侵權(quán)必究VerilogHDL入門(mén)教程絕密請(qǐng)輸入文檔編號(hào)elseif(Die_In)Deposit=VerilogHDL入門(mén)教程絕密請(qǐng)輸入文檔編號(hào)elseif(Die_In)Deposit=10;elseif(Quarter_In)Deposit=25;elseDeposit=ERROR;書(shū)寫(xiě)建議:、條件表達(dá)式需用括號(hào)括起來(lái)。、若為if-if語(yǔ)句,請(qǐng)使用塊語(yǔ)句begin---end:if(Clk)beginif(Reset)Q=0;endelseQ=D;以上兩點(diǎn)建議是為了使代碼更加清晰,防止出錯(cuò)。3、對(duì)if語(yǔ)句,除非在時(shí)序邏輯中,if語(yǔ)句需要有else語(yǔ)句。若沒(méi)有缺省語(yǔ)句,設(shè)計(jì)將產(chǎn)生一個(gè)鎖存器,鎖存器在ASIC設(shè)計(jì)中有諸多的弊端(可看同步設(shè)計(jì)技術(shù)所介紹)。如下一例:if(T)Q=;沒(méi)有else語(yǔ)句,當(dāng)T為1(真)時(shí),D被賦值給Q,當(dāng)T為0(假)時(shí),因?yàn)闆](méi)有else語(yǔ)句,電路保持Q以前的值,這就形成一個(gè)鎖存器。4.8case語(yǔ)句case語(yǔ)句是一個(gè)多路條件分支形式,其語(yǔ)法如下:case(case_expr)case_ite_expr{,case_ite_expr}:procedural_stateent......[default:procedural_stateent]endcasecase語(yǔ)句首先對(duì)條件表達(dá)式case_expr求值,然后依次對(duì)各分支項(xiàng)求值并進(jìn)行比較,第一個(gè)與條件表達(dá)式值相匹配的分支中的語(yǔ)句被執(zhí)行??梢栽?個(gè)分支中定義多個(gè)分支項(xiàng);這些值不需要互斥。缺省分支覆蓋所有沒(méi)有被分支表達(dá)式覆蓋的
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 碧桂園成本部主管面試題庫(kù)含答案
- 電力系統(tǒng)工程師筆試題及模擬試卷含答案
- 2025年城市災(zāi)害防治體系建設(shè)可行性研究報(bào)告
- 2025年數(shù)字廣告投放平臺(tái)優(yōu)化項(xiàng)目可行性研究報(bào)告
- 2025年空間信息與遙感技術(shù)應(yīng)用可行性研究報(bào)告
- 2025年數(shù)字化個(gè)人助理開(kāi)發(fā)可行性研究報(bào)告
- 2025年可持續(xù)固廢處理與利用項(xiàng)目可行性研究報(bào)告
- 2025年信息安全技術(shù)應(yīng)用項(xiàng)目可行性研究報(bào)告
- 2026年鶴崗師范高等專(zhuān)科學(xué)校單招職業(yè)技能測(cè)試題庫(kù)及完整答案詳解1套
- 2026年河北能源職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能考試題庫(kù)及答案詳解1套
- 初三勵(lì)志、拼搏主題班會(huì)課件
- Cuk斬波完整版本
- GB/T 3521-2023石墨化學(xué)分析方法
- 一年級(jí)數(shù)學(xué)重疊問(wèn)題練習(xí)題
- 三維動(dòng)畫(huà)及特效制作智慧樹(shù)知到課后章節(jié)答案2023年下吉林電子信息職業(yè)技術(shù)學(xué)院
- 胰腺囊腫的護(hù)理查房
- 臨床醫(yī)學(xué)概論常見(jiàn)癥狀課件
- 物業(yè)管理理論實(shí)務(wù)教材
- 仁川國(guó)際機(jī)場(chǎng)
- 全檢員考試試題
- 光刻和刻蝕工藝
評(píng)論
0/150
提交評(píng)論