![采用VHDL進(jìn)行高層次設(shè)計(jì)課件_第1頁(yè)](http://file4.renrendoc.com/view/fde63b32aa6c8185a081f88eeb6544c9/fde63b32aa6c8185a081f88eeb6544c91.gif)
![采用VHDL進(jìn)行高層次設(shè)計(jì)課件_第2頁(yè)](http://file4.renrendoc.com/view/fde63b32aa6c8185a081f88eeb6544c9/fde63b32aa6c8185a081f88eeb6544c92.gif)
![采用VHDL進(jìn)行高層次設(shè)計(jì)課件_第3頁(yè)](http://file4.renrendoc.com/view/fde63b32aa6c8185a081f88eeb6544c9/fde63b32aa6c8185a081f88eeb6544c93.gif)
![采用VHDL進(jìn)行高層次設(shè)計(jì)課件_第4頁(yè)](http://file4.renrendoc.com/view/fde63b32aa6c8185a081f88eeb6544c9/fde63b32aa6c8185a081f88eeb6544c94.gif)
![采用VHDL進(jìn)行高層次設(shè)計(jì)課件_第5頁(yè)](http://file4.renrendoc.com/view/fde63b32aa6c8185a081f88eeb6544c9/fde63b32aa6c8185a081f88eeb6544c95.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
使用VHDL進(jìn)行
數(shù)字電路設(shè)計(jì)使用VHDL進(jìn)行
數(shù)字電路設(shè)計(jì)1ASIC技術(shù)的發(fā)展電路系統(tǒng)設(shè)計(jì)方法自定向下的設(shè)計(jì)流程設(shè)計(jì)描述風(fēng)格高層次設(shè)計(jì)方法ASIC技術(shù)的發(fā)展高層次設(shè)計(jì)方法2ASIC技術(shù)的發(fā)展由于所設(shè)計(jì)的系統(tǒng)的規(guī)模已從幾十幾百門增加到幾萬(wàn)幾十萬(wàn)門,使得從前電子工程師所熟悉的畫電路圖、真值表和卡諾圖的設(shè)計(jì)方法已經(jīng)遠(yuǎn)遠(yuǎn)不能滿足數(shù)字系統(tǒng)的復(fù)雜性要求ASIC技術(shù)的發(fā)展由于所設(shè)計(jì)的系統(tǒng)的規(guī)模已從幾十幾百門增加到3ASIC技術(shù)的發(fā)展高層次設(shè)計(jì)方法──HLD(HighLevelDesign)是從八十年代末以來(lái),最新專用集成電路設(shè)計(jì)的、最先進(jìn)的設(shè)計(jì)方法,它為用戶設(shè)計(jì)更大規(guī)模、更高水平、性能優(yōu)良的數(shù)字系統(tǒng)提供了可靠的保證ASIC技術(shù)的發(fā)展高層次設(shè)計(jì)方法──HLD(HighLev4HLD符合目前
對(duì)電路的兩個(gè)要求TimetoMarket:對(duì)于通信領(lǐng)域來(lái)說(shuō),快速推出市場(chǎng)需要的系統(tǒng)具有非常重要的價(jià)值,HLD使得快速設(shè)計(jì)較大的芯片成為可能。SOC:目前對(duì)數(shù)子系統(tǒng)的需求是規(guī)模越來(lái)越大,HLD非集成電路專業(yè)背景的通信廠商設(shè)計(jì)大規(guī)模芯片提供了可能HLD符合目前
對(duì)電路的兩個(gè)要求TimetoMarket5設(shè)計(jì)技術(shù)的發(fā)展使得HLD成為可能設(shè)計(jì)技術(shù)的發(fā)展使得HLD成為可能6設(shè)計(jì)技術(shù)的發(fā)展使得HLD成為可能采用最原始的版圖設(shè)計(jì)只需要相應(yīng)的圖形編輯工具采用電路圖設(shè)計(jì)就需要相應(yīng)的布局布線工具采用HDL語(yǔ)言設(shè)計(jì)電路就需要相應(yīng)的綜合工具支持結(jié)論:正是綜合技術(shù)的提出使得HLD成為可能設(shè)計(jì)技術(shù)的發(fā)展使得HLD成為可能采用最原始的版圖設(shè)計(jì)只需要相7電路設(shè)計(jì)方法由底向上的設(shè)計(jì)(Bottom-up):從結(jié)構(gòu)層開始,采用結(jié)構(gòu)化單元和由少數(shù)行為級(jí)模塊構(gòu)成的層次式模型,逐級(jí)向上搭建出符合要求的系統(tǒng)。自頂而下的設(shè)計(jì)(Top-Down):先對(duì)所要設(shè)計(jì)的系統(tǒng)進(jìn)行功能描述,然后逐步分塊細(xì)化,直至結(jié)構(gòu)化最底層的具體實(shí)現(xiàn)電路設(shè)計(jì)方法由底向上的設(shè)計(jì)(Bottom-up):從結(jié)構(gòu)層開8Top-Down的優(yōu)越性提高設(shè)計(jì)生產(chǎn)的效率:自頂向下的設(shè)計(jì)方法允許設(shè)計(jì)者從一個(gè)高抽象層次上對(duì)系統(tǒng)的功能進(jìn)行定制,而不需要考慮門級(jí)的具體實(shí)現(xiàn)方法,這充分體現(xiàn)了工藝無(wú)關(guān)性的基本設(shè)計(jì)思想。設(shè)計(jì)者只需要寫出設(shè)計(jì)中所需部件的硬件描述語(yǔ)言代碼或者是其它類型的模型,設(shè)計(jì)工具就會(huì)根據(jù)編寫的高層描述生成門級(jí)的實(shí)現(xiàn),這就大大減少了設(shè)計(jì)者以往必須花費(fèi)在設(shè)計(jì)細(xì)節(jié)上的時(shí)間Top-Down的優(yōu)越性提高設(shè)計(jì)生產(chǎn)的效率:自頂向下的設(shè)計(jì)方9Top-Down的優(yōu)越性增加了設(shè)計(jì)的重用性:在大多數(shù)的自頂向下設(shè)計(jì)過(guò)程中,對(duì)設(shè)計(jì)的描述都保持在一個(gè)通用的工藝水平上,它不是為某一廠家的工藝庫(kù)而特意定制的,也就是說(shuō),設(shè)計(jì)是與工藝無(wú)關(guān)的,所以在實(shí)現(xiàn)設(shè)計(jì)時(shí)不必使用某一特定廠家的工藝,這樣就極大的提高了設(shè)計(jì)的可重用性,如果需要改變?cè)O(shè)計(jì)所使用的工藝,只需要將設(shè)計(jì)在相應(yīng)的工藝庫(kù)上映設(shè)即可。Top-Down的優(yōu)越性增加了設(shè)計(jì)的重用性:在大多數(shù)的自頂向10Top-Down的優(yōu)越性錯(cuò)誤的早期發(fā)覺:可以帶來(lái)好處1、減少產(chǎn)品開發(fā)周期2、降低開發(fā)成本3、增加設(shè)計(jì)一次成功通過(guò)的可能性Top-Down的優(yōu)越性錯(cuò)誤的早期發(fā)覺:可以帶來(lái)好處11電路設(shè)計(jì)應(yīng)該采用的方法強(qiáng)調(diào)進(jìn)行系統(tǒng)開發(fā)的方式:首先進(jìn)行系統(tǒng)分析,給出Specification,劃分模塊,明確模塊接口,確定模塊內(nèi)部功能,此時(shí)應(yīng)該編寫詳細(xì)的設(shè)計(jì)說(shuō)明文檔,之后才是編程,調(diào)試。目前國(guó)內(nèi)很難達(dá)到這個(gè)層次,但一般較大的設(shè)計(jì)都是多個(gè)設(shè)計(jì)者完成,因此模塊劃分和確定接口信號(hào)是非常重要的,可以極大的減少設(shè)計(jì)的調(diào)試時(shí)間。模塊盡量以寄存器為邊界,這樣對(duì)于聯(lián)調(diào)和最后的系統(tǒng)集成非常方便。建立合理的設(shè)計(jì)習(xí)慣對(duì)于今后的工作的效率會(huì)有巨大幫助電路設(shè)計(jì)應(yīng)該采用的方法強(qiáng)調(diào)進(jìn)行系統(tǒng)開發(fā)的方式:首先進(jìn)行系統(tǒng)分12設(shè)計(jì)技術(shù)的發(fā)展CAD:SchematicsEDA:HDLVHDL和Verilog是影響最廣的兩種HDL。VHDL相對(duì)于Veirlog而言,它在語(yǔ)法上更嚴(yán)謹(jǐn)一些,雖然這樣也使它失去了一些靈活性和多樣性,但從文檔紀(jì)錄、綜合以及器件和系統(tǒng)級(jí)的仿真上講VHDL是一種更好的選擇。設(shè)計(jì)技術(shù)的發(fā)展CAD:Schematics13VHDL語(yǔ)言在1981年,美國(guó)國(guó)防部提出了一種新的硬件描述語(yǔ)言,稱之為VHSICHardwareDescriptionLanguage,也就是我們現(xiàn)在所說(shuō)的VHDL,它是美國(guó)國(guó)防部委托IBM和TexasInstruments聯(lián)合開發(fā)的。1986年,VHDL被建議作為IEEE標(biāo)準(zhǔn),經(jīng)過(guò)了多次更改后,直到1987年12月,它才被接納為IEEE1076標(biāo)準(zhǔn)。該標(biāo)準(zhǔn)經(jīng)過(guò)不斷完善和更新,目前的標(biāo)準(zhǔn)為IEEE1164,它已被絕大多數(shù)IC生產(chǎn)廠家和EDA工具供應(yīng)商所接受。當(dāng)前幾乎所有的EDA軟件,象Synopsys、MentorGraphics、InovaEDA、Cadence等,均支持該標(biāo)準(zhǔn)。VHDL語(yǔ)言在1981年,美國(guó)國(guó)防部提出了一種新的硬件描述語(yǔ)14VHDL語(yǔ)言的特點(diǎn)VHDL是工業(yè)標(biāo)準(zhǔn)的文本格式語(yǔ)言VHDL能同時(shí)支持仿真和綜合VHDL是一種并發(fā)執(zhí)行的語(yǔ)言VHDL支持結(jié)構(gòu)化設(shè)計(jì)和TOP-DOWN設(shè)計(jì)方法VHDL的描述與工藝無(wú)關(guān)支持多風(fēng)格的描述方法VHDL語(yǔ)言的特點(diǎn)VHDL是工業(yè)標(biāo)準(zhǔn)的文本格式語(yǔ)言15數(shù)字系統(tǒng)描述的Gajski圖數(shù)字系統(tǒng)描述的Gajski圖16VHDL描述數(shù)字電路的層次采用VHDL語(yǔ)言描述電路時(shí),我們將電路的描述分為行為(Behavioral)和寄存器傳輸級(jí)(RegisterTransferLevel)和門級(jí)描述(GateLevel)三個(gè)層次。這樣的劃分是根據(jù)寄存器和組合邏輯的確定性而言的行為級(jí):寄存器和組合邏輯都不明確RTL級(jí):寄存器明確,組合邏輯不明確。門級(jí):寄存器和組合邏輯都明確VHDL描述數(shù)字電路的層次采用VHDL語(yǔ)言描述電路時(shí),我們將17三種描述層次的比較在目前的實(shí)際設(shè)計(jì)工作中,行為描述和門級(jí)描述都很少用到。門級(jí)描述投入大量精力描述電路的具體細(xì)節(jié),無(wú)法體現(xiàn)出高層描述的優(yōu)點(diǎn)。行為描述的抽象層次太高,綜合工具無(wú)法很好的理解設(shè)計(jì)者的意圖,綜合出的電路距離設(shè)計(jì)者的實(shí)際要求有很大差距,并且目前主流的綜合工具都不具有這種功能,目前有一些推出的行為綜合器如Synopsys的BehavioralComplier,但用戶的反映都不是很良好三種描述層次的比較在目前的實(shí)際設(shè)計(jì)工作中,行為描述和門級(jí)描述18使用VHDL描述組合邏輯的方法在使用VHDL描述組合邏輯電路時(shí),根據(jù)描述風(fēng)格的不同,我們將它分為行為級(jí)描述、結(jié)構(gòu)流(DataFlow)描述和結(jié)構(gòu)級(jí)(StructuralLevel)描述。這里的行為級(jí)(BehavioralLevel)描述和前面的行為描述(Behavioral)從概念上是有區(qū)別的,或者說(shuō)是行為描述具體在組合邏輯中的定義。行為級(jí)描述是指一個(gè)組合邏輯的功能已經(jīng)明確,但它的具體實(shí)現(xiàn)結(jié)構(gòu)沒有確定,但限定使用組合邏輯實(shí)現(xiàn)。使用VHDL描述組合邏輯的方法在使用VHDL描述組合邏輯電路19高層次設(shè)計(jì)流程高層次設(shè)計(jì)流程20一、系統(tǒng)功能分析進(jìn)行系統(tǒng)功能分析的目的是在進(jìn)行系統(tǒng)設(shè)計(jì)之前明確系統(tǒng)的需求,也就是確定系統(tǒng)所要完成的功能、系統(tǒng)的輸入輸出、以及這些輸入輸出之間的關(guān)系等,并且要確定系統(tǒng)的時(shí)序要求。系統(tǒng)功能分析的另外一個(gè)目的,就是系統(tǒng)的模塊劃分。在系統(tǒng)分析時(shí),應(yīng)根據(jù)功能的耦合程度,將系統(tǒng)劃分為不同的功能模塊,每一個(gè)功能都映射到一個(gè)模塊,同時(shí)還需要確定模塊之間的相互關(guān)系,這是模塊化設(shè)計(jì)的基本要求。一、系統(tǒng)功能分析進(jìn)行系統(tǒng)功能分析的目的是在進(jìn)行系統(tǒng)設(shè)計(jì)之前明21二、體系結(jié)構(gòu)設(shè)計(jì)體系結(jié)構(gòu)設(shè)計(jì)又是整個(gè)系統(tǒng)設(shè)計(jì)階段最重要的工作,它的首要任務(wù)就是數(shù)據(jù)通路和控制通路的設(shè)計(jì)。在數(shù)字系統(tǒng)的設(shè)計(jì)中,系統(tǒng)的控制是建立在數(shù)據(jù)通路的基礎(chǔ)之上的,不同的數(shù)據(jù)通路對(duì)應(yīng)了不同的控制通路。數(shù)據(jù)通路的設(shè)計(jì)包括被處理數(shù)據(jù)的類型分析、處理單元的劃分、以及處理單元之間的關(guān)聯(lián)程度等??刂仆肥菙?shù)據(jù)通路上數(shù)據(jù)傳輸?shù)目刂茊卧糜趨f(xié)調(diào)數(shù)據(jù)處理單元之間的關(guān)系,控制通路的設(shè)計(jì)主要包括數(shù)據(jù)的調(diào)度、數(shù)據(jù)的處理算法和正確的時(shí)序安排等。數(shù)據(jù)通路和控制通路的設(shè)計(jì)并不是截然分開的,有時(shí)在確定好數(shù)據(jù)通路后,由于時(shí)序或數(shù)據(jù)的調(diào)度等問(wèn)題,而不得不重新修改數(shù)據(jù)通路。所以數(shù)據(jù)通路與控制通路的設(shè)計(jì)往往要經(jīng)過(guò)許多次反復(fù)才能達(dá)到最優(yōu)的效果二、體系結(jié)構(gòu)設(shè)計(jì)體系結(jié)構(gòu)設(shè)計(jì)又是整個(gè)系統(tǒng)設(shè)計(jì)階段最重要的工作22三、系統(tǒng)描述謂系統(tǒng)描述也就是使用VHDL語(yǔ)言對(duì)系統(tǒng)進(jìn)行編碼。在進(jìn)行大型軟件的開發(fā)時(shí),編碼相對(duì)于前面所進(jìn)行的系統(tǒng)劃分工作相比就顯得不是那么重要,但在使用硬件描述語(yǔ)言進(jìn)行數(shù)字電路描述時(shí),情況則完全不同,因?yàn)檎Z(yǔ)言的描述直接決定著電路的性能,不好的編碼將無(wú)法反映所確定的體系結(jié)構(gòu),可能導(dǎo)致前面所做的工作完全浪三、系統(tǒng)描述謂系統(tǒng)描述也就是使用VHDL語(yǔ)言對(duì)系統(tǒng)進(jìn)行編碼。23四、系統(tǒng)功能仿真系統(tǒng)的功能仿真(FunctionalSimulation)是用來(lái)驗(yàn)證設(shè)計(jì)者所編寫的VHDL代碼是否完成了預(yù)定的功能。幾乎所有的高層設(shè)計(jì)軟件都支持語(yǔ)言級(jí)的系統(tǒng)仿真,這樣在系統(tǒng)綜合前就可以通過(guò)系統(tǒng)功能仿真來(lái)驗(yàn)證所設(shè)計(jì)系統(tǒng)的功能正確與否。在語(yǔ)言級(jí)系統(tǒng)仿真時(shí),要求設(shè)計(jì)者使用VHDL語(yǔ)言所提供的豐富的仿真語(yǔ)句來(lái)編寫系統(tǒng)的測(cè)試基準(zhǔn)程序(Testbench)。測(cè)試基準(zhǔn)程序在高層次設(shè)計(jì)中占有非常重要的地位,不僅在系統(tǒng)功能仿真時(shí)被用來(lái)作為功能驗(yàn)證的基準(zhǔn),而且在門級(jí)仿真與后時(shí)序仿真都要以此為基準(zhǔn)。四、系統(tǒng)功能仿真系統(tǒng)的功能仿真(FunctionalSim24綜合優(yōu)化階段綜合器對(duì)系統(tǒng)的綜合優(yōu)化主要分為兩步:第一步是將硬件描述語(yǔ)言翻譯成門電路,第二步是對(duì)產(chǎn)生的電路進(jìn)行優(yōu)化。主要工作是在第二步進(jìn)行的,判斷一個(gè)綜合器性能的標(biāo)準(zhǔn)也是基于這一方面的。系統(tǒng)優(yōu)化的目的就是花費(fèi)最小的硬件資源滿足最大的時(shí)序要求,所以系統(tǒng)優(yōu)化就是在系統(tǒng)的速度(Speed)和面積(Area)之間找到一個(gè)最佳方案(Trade-off)。系統(tǒng)優(yōu)化的關(guān)鍵在于系統(tǒng)約束條件(Constraints)的設(shè)定,施加到系統(tǒng)的約束條件將使綜合器對(duì)系統(tǒng)的優(yōu)化按照設(shè)計(jì)者所期望的目標(biāo)進(jìn)行。綜合優(yōu)化階段綜合器對(duì)系統(tǒng)的綜合優(yōu)化主要分為兩步:第一步是將硬25系統(tǒng)實(shí)現(xiàn)如果系統(tǒng)綜合優(yōu)化的結(jié)果滿足設(shè)計(jì)者的要求,就可以進(jìn)行系統(tǒng)實(shí)現(xiàn)的工作。在一般的ASIC設(shè)計(jì)中,設(shè)計(jì)者應(yīng)該將綜合后電路的網(wǎng)表(Netlist)文件和設(shè)計(jì)的時(shí)序要求,交給IC生產(chǎn)廠家進(jìn)行下一步的工作。這是國(guó)內(nèi)一般的做法,專業(yè)的微電子公司將會(huì)參與更多的后面的layout的工作。系統(tǒng)實(shí)現(xiàn)如果系統(tǒng)綜合優(yōu)化的結(jié)果滿足設(shè)計(jì)者的要求,就可以進(jìn)行系26設(shè)計(jì)風(fēng)格描述設(shè)計(jì)描述的風(fēng)格直接控制著EDA工具綜合的結(jié)果。描述同一功能的兩段RTL描述能產(chǎn)生出時(shí)序和面積上完全不同的電路,好的描述方式就是易于被綜合器識(shí)別并可以被綜合出設(shè)計(jì)者期望的電路,電路的質(zhì)量取決于工程師使用的描述風(fēng)格和綜合工具的能力。我將會(huì)在外面介紹。設(shè)計(jì)風(fēng)格描述設(shè)計(jì)描述的風(fēng)格直接控制著EDA工具綜合的結(jié)果。描27我個(gè)人對(duì)高層次設(shè)計(jì)方法的理解硬件描述語(yǔ)言--------schematic(netlist)-------版圖綜合工具布局布線工具高級(jí)語(yǔ)言-----------匯編語(yǔ)言----------------機(jī)器語(yǔ)言高級(jí)語(yǔ)言編譯器機(jī)器語(yǔ)言編譯器(assembler)目前國(guó)內(nèi)還有很多人不認(rèn)同采用HDL的高層次設(shè)計(jì)方法,其實(shí)就是不能理解綜合工具的作用,但映射到不認(rèn)同C編譯器或BASIC編譯器的作用確是荒謬的。我認(rèn)為高層次設(shè)計(jì)方法實(shí)際就是犧牲描述精確度來(lái)?yè)Q取描述效率,在某些具體應(yīng)用中是不適用的,比如最先進(jìn)的處理器研究。但對(duì)于通常應(yīng)用背景的數(shù)字系統(tǒng)來(lái)說(shuō)TimetoMarket是非常重要的,高層次設(shè)計(jì)方法可以極大的提高設(shè)計(jì)的效率。隨著綜合工具性能的不斷提高,高層設(shè)計(jì)方法的應(yīng)用范圍會(huì)越來(lái)越廣。我個(gè)人對(duì)高層次設(shè)計(jì)方法的理解硬件描述語(yǔ)言--------sc28VHDL語(yǔ)言基礎(chǔ)VHDL語(yǔ)言基礎(chǔ)29設(shè)計(jì)實(shí)體和結(jié)構(gòu)體的概念VHDL把一個(gè)電路模塊看作一個(gè)單元,對(duì)任何一個(gè)單元的描述包括接口描述和內(nèi)部特性描述兩個(gè)部分。接口描述稱為設(shè)計(jì)實(shí)體(entity),它提供該單元的公共信息,如名稱、端口等;內(nèi)部特性描述稱為結(jié)構(gòu)體(architecture),它定義單元的內(nèi)部操作特性。一個(gè)結(jié)構(gòu)體可以對(duì)應(yīng)多個(gè)實(shí)體,結(jié)構(gòu)體和實(shí)體的綁定關(guān)系稱為配置(configuration)。一個(gè)電路單元只能有一個(gè)entity,下面是一個(gè)最簡(jiǎn)單的例子,描述的電路是一個(gè)半加器設(shè)計(jì)實(shí)體和結(jié)構(gòu)體的概念VHDL把一個(gè)電路模塊看作一個(gè)單元,對(duì)30一個(gè)半加器的VHDL描述entityhalfadderis
port(a,b:inbit;
sum,carry:outbit);
endhalfadder;
architecturebehaviorofhalfadderis
begin
process(a,b)
begin
if(a=’1’andb=’1’)thencarry<=’1’;
elsecarry<=’0’;
endif;
if(a/=b)thensum<=’1’;
elsesum<=’0’;
endif;
endprocess;
endbehavior;一個(gè)半加器的VHDL描述entityhalfadderi31Entity的描述entity實(shí)體名is 類屬參數(shù)說(shuō)明 端口說(shuō)明end實(shí)體名;entitymuxisgeneric(m:time:=1ns);port(d0,d1,sel:inbit;q:outbit); endmux;Entity的描述entity實(shí)體名isentitym32端口的方向in(輸入)、out(輸出,結(jié)構(gòu)體內(nèi)部不能再使用)、inout(輸入輸出雙向)、buffer(輸出,結(jié)構(gòu)體內(nèi)可再使用)不提倡使用buffer型,可以在內(nèi)部在起一個(gè)名字)端口的方向in(輸入)、out(輸出,結(jié)構(gòu)體內(nèi)部不能再使用)33結(jié)構(gòu)體的框架architecture結(jié)構(gòu)體名of實(shí)體名is定義語(yǔ)句begin 并行處理語(yǔ)句end結(jié)構(gòu)體名;定義語(yǔ)句位于architecture和begin之間,用于對(duì)結(jié)構(gòu)體內(nèi)部所使用的信號(hào)、常數(shù)、數(shù)據(jù)類型、函數(shù)等進(jìn)行定義。信號(hào)定義和端口說(shuō)明一樣,應(yīng)有信號(hào)名和數(shù)據(jù)類型,因它是內(nèi)部使用,不需要有方向的說(shuō)明。并行處理語(yǔ)句處于語(yǔ)句begin和end之間,具體描述了結(jié)構(gòu)體的行為及其連接關(guān)系。在結(jié)構(gòu)體中的語(yǔ)句都是可以并行執(zhí)行的,語(yǔ)句的執(zhí)行順序不以書寫的語(yǔ)句順序?yàn)閳?zhí)行順序。結(jié)構(gòu)體的框架architecture結(jié)構(gòu)體名of實(shí)體名34Entity和architecture總結(jié)一個(gè)單元只有一個(gè)設(shè)計(jì)實(shí)體,而結(jié)構(gòu)體的個(gè)數(shù)可以不限。也就是說(shuō),一個(gè)設(shè)計(jì)實(shí)體可以對(duì)應(yīng)于多個(gè)結(jié)構(gòu)體。這種方式的意義在于:每個(gè)結(jié)構(gòu)體代表該電路的某一方面的特性(如行為特性、結(jié)構(gòu)特性等),而且,即使是同一特性的描述,也可以有不同的抽象層次。Entity和architecture總結(jié)一個(gè)單元只有一個(gè)35在一個(gè)單元中引用另外一個(gè)單元architecturestructureoffulladderissignalts:bit;signaltc1,tc2:bit;componenthalfadder
port(a,b:inbit;sum,carry:outbit);end
component;begin U0:halfadderportmap(a,b,ts,tc1); U1:halfadderportmap(ts,cin,sum,tc2)endstructure;在一個(gè)單元中引用另外一個(gè)單元architecturestr36設(shè)計(jì)庫(kù)庫(kù)(library)是經(jīng)過(guò)編譯后的數(shù)據(jù)的集合,它存放程序包定義、設(shè)計(jì)實(shí)體定義、結(jié)構(gòu)體定義和配置定義。在VHDL中,庫(kù)的說(shuō)明總是放在設(shè)計(jì)單元的最前面,如:libraryIEEE;useIEEE.std_logic_1164.all;這樣,在設(shè)計(jì)單元內(nèi)就可以使用庫(kù)中的數(shù)據(jù)。在VHDL中,可以存在多個(gè)不同的庫(kù),但是庫(kù)與庫(kù)之間是獨(dú)立的,不能互相嵌套。當(dāng)前在VHDL中存在的庫(kù)大致包括:標(biāo)準(zhǔn)庫(kù)、工藝庫(kù)、用戶自定義的庫(kù)和WORK庫(kù)。其中,WORK庫(kù)是現(xiàn)行工作庫(kù),設(shè)計(jì)者描述的VHDL不需要任何說(shuō)明,都可以存放在WORK庫(kù)中,而且對(duì)WORK庫(kù)的使用不需要任何說(shuō)明。設(shè)計(jì)庫(kù)庫(kù)(library)是經(jīng)過(guò)編譯后的數(shù)據(jù)的集合,它存放程37常用的數(shù)據(jù)類型在設(shè)計(jì)可綜合電路是常用的類型整形(一般只在作下標(biāo)時(shí)用,內(nèi)部)std_logic,std_logic_vector(9值邏輯),端口都用這兩種類型類型之間的轉(zhuǎn)化首先說(shuō)明IEEE.std_logic_unsigned庫(kù)conv_integer(),conv_std_logic_vector(integer,n)常用的數(shù)據(jù)類型在設(shè)計(jì)可綜合電路是常用的類型38Std_logic和std_logic_vectorStd_logic信號(hào)用單引號(hào),比如a<=‘1’;std_logic_vector用雙引號(hào),比如a<=“111”;對(duì)于所有bit都相同的std_logic_vector,可以使用<=(others=>‘1’)來(lái)賦值使用&可以將位數(shù)較短的std_logic_vector型組合為數(shù)位較長(zhǎng)的std_logic_vector型Std_logic和std_logic_vectorStd_39九值邏輯1--force10--force0X--ForceUnknownZ--HighImpedanceU-UninitializedW-WeakunknownH--Weak1L--Weak0-don’tcare在可綜合電路中設(shè)計(jì)中需要的:1,0,Z,X,-Z用來(lái)描述三態(tài)X用來(lái)賦不可能出現(xiàn)的缺省值-用來(lái)賦無(wú)關(guān)值,利于優(yōu)化U在仿真中會(huì)遇到,沒有初始化,在功能仿真中按照else來(lái)計(jì)算,在后仿真中則會(huì)傳遞,導(dǎo)致錯(cuò)誤九值邏輯1--force1在可綜合電路中設(shè)計(jì)中需要的40常用的運(yùn)算符邏輯運(yùn)算符not、and、or、nand、nor、xor算術(shù)運(yùn)算符+和-,其它運(yùn)算符×,/,**,mod對(duì)于一般的可綜合電路來(lái)講,都不使用,因?yàn)樗鼈兊乃惴ǘ急容^復(fù)雜,綜合器綜合的效果不好,需要是用戶自己設(shè)計(jì)算法,比如采用booth算法實(shí)現(xiàn)乘法連接運(yùn)算符&,比較常用關(guān)系運(yùn)算符=、/=、<、<=、>、>=都非常常用賦值運(yùn)算符<=,:=常用的運(yùn)算符邏輯運(yùn)算符41邏輯運(yùn)算Andornandxornornot操作數(shù)必須類型和長(zhǎng)度都相同注意使用括號(hào)
c<=aandbandc
c<=(aandb)andc
--?一樣不一定一樣邏輯運(yùn)算Andornandxornornot不一定42關(guān)系運(yùn)算符<,<=,/=,>,>=只要是同一類型,長(zhǎng)度不同可以比較在synopsys中是可以的,比如“11111”>“1100”這是因?yàn)槎x了IEEE.std_logic_unsigned庫(kù)關(guān)系運(yùn)算符<,<=,/=,>,>=43Std_logic_unsigned庫(kù)function"<="(L:STD_LOGIC_VECTOR;R:STD_LOGIC_VECTOR)returnBOOLEAN;function"<="(L:STD_LOGIC_VECTOR;R:INTEGER)returnBOOLEAN;function"<="(L:INTEGER;R:STD_LOGIC_VECTOR)returnBOOLEAN;function">"(L:STD_LOGIC_VECTOR;R:STD_LOGIC_VECTOR)returnBOOLEAN;function">"(L:STD_LOGIC_VECTOR;R:INTEGER)returnBOOLEAN;function">"(L:INTEGER;R:STD_LOGIC_VECTOR)returnBOOLEAN;function">="(L:STD_LOGIC_VECTOR;R:STD_LOGIC_VECTOR)returnBOOLEAN;function">="(L:STD_LOGIC_VECTOR;R:INTEGER)returnBOOLEAN;function">="(L:INTEGER;R:STD_LOGIC_VECTOR)returnBOOLEAN;function"="(L:STD_LOGIC_VECTOR;R:STD_LOGIC_VECTOR)returnBOOLEAN;function"="(L:STD_LOGIC_VECTOR;R:INTEGER)returnBOOLEAN;function"="(L:INTEGER;R:STD_LOGIC_VECTOR)returnBOOLEAN;Std_logic_unsigned庫(kù)function"<44加法運(yùn)算最常見的加一計(jì)數(shù)器可以寫成:
A<=A+1這是因?yàn)樵趗nsigned中定義了function"+"(L:STD_LOGIC_VECTOR;R:STD_LOGIC_VECTOR)returnSTD_LOGIC_VECTOR;function"+"(L:STD_LOGIC_VECTOR;R:INTEGER)returnSTD_LOGIC_VECTOR;function"+"(L:INTEGER;R:STD_LOGIC_VECTOR)returnSTD_LOGIC_VECTOR;
function"+"(L:STD_LOGIC_VECTOR;R:STD_LOGIC)returnSTD_LOGIC_VECTOR;function"+"(L:STD_LOGIC;R:STD_LOGIC_VECTOR)returnSTD_LOGIC_VECTOR;加法運(yùn)算最常見的加一計(jì)數(shù)器可以寫成:
A<=A+145引用庫(kù)文件這個(gè)預(yù)先定義的包文件std_logic_unsigned.vhd被已經(jīng)被預(yù)先編譯的IEEE庫(kù)中,因此設(shè)計(jì)者在使用上面的操作時(shí),需要使用IEEE.std_logic_unsigned.all;
否則編譯時(shí)就會(huì)出錯(cuò).用戶可以自己包文件,編譯到指定庫(kù)中,并在源文件中引用這個(gè)包文件:
usemy_library.my_package.all引用庫(kù)文件這個(gè)預(yù)先定義的包文件std_logic_unsig46進(jìn)程process一個(gè)進(jìn)程就相當(dāng)于一個(gè)并行的語(yǔ)句,它的內(nèi)部時(shí)串行的[進(jìn)程名]:process(進(jìn)程敏感信號(hào)列表)begin順序描述語(yǔ)句;endprocessprocess語(yǔ)句從process開始,到endprocess結(jié)束,進(jìn)程名可以省略。進(jìn)程process一個(gè)進(jìn)程就相當(dāng)于一個(gè)并行的語(yǔ)句,它的內(nèi)部時(shí)47Process的例子mux2:
process(a,b,s)
begin
if(s=’0’)thenf<=a;
elsef<=b;
endif;endprocess;進(jìn)程的所有輸入信號(hào)應(yīng)該放在敏感表內(nèi),否則會(huì)造成前后仿真不符Process的例子mux2:process(a,b,48信號(hào)和變量信號(hào)在電路模塊之間傳遞信息,signal用在模塊內(nèi)部,具體表現(xiàn)在變量在entity的端口和architecture內(nèi)說(shuō)明,variable在process內(nèi)部說(shuō)明,無(wú)法傳遞到process外面賦給變量的值則立即成為當(dāng)前值,而賦給信號(hào)的值必須在進(jìn)程結(jié)束后才能成為當(dāng)前值。信號(hào)和變量信號(hào)在電路模塊之間傳遞信息,signal用在模塊內(nèi)49順序語(yǔ)句Waitif;caseloop對(duì)于一般的可綜合電路描述,這四種順序語(yǔ)句已經(jīng)足夠了順序語(yǔ)句Wait50Wait語(yǔ)句Waituntilclk’eventandclk=‘1’then用來(lái)描述寄存器在testbench中描述延遲時(shí)可以使用waitforxxxns;敏感表相當(dāng)于一個(gè)waiton語(yǔ)句Wait語(yǔ)句Waituntilclk’eventan51進(jìn)程的啟動(dòng)
process(a,b,s)
begin
if(s=’0’)thenf<=a;
elsef<=b;
endif;--waitona,b,s進(jìn)程在這個(gè)地方掛起endprocess;進(jìn)程的啟動(dòng)process(a,b,s)52IF語(yǔ)句
IFcondition1THENsequence_of_statements1{ELSIFcondition2THENsequence_of_statements2}{ELSEsequence_of_statements3}ENDIF;其中括號(hào)內(nèi)為可選部分,它表示當(dāng)條件1成立時(shí),執(zhí)行順序語(yǔ)句序列1;當(dāng)條件2成立時(shí),執(zhí)行順序語(yǔ)句序列2;否則執(zhí)行順序語(yǔ)句序列3。ELSEIF付句可以重復(fù),但ELSE付句只能有一條。IF語(yǔ)句IFcondition1THEN53IF語(yǔ)句注意如果if引導(dǎo)event代表時(shí)鐘,此時(shí)不能有else復(fù)句用戶組合邏輯的if,如果沒有else付句,一定要在IF語(yǔ)句前面有缺省賦值,否則會(huì)造成不需要的latchIF語(yǔ)句注意如果if引導(dǎo)event代表時(shí)鐘,此時(shí)不能有els54IF語(yǔ)句IF語(yǔ)句對(duì)應(yīng)的電路就是多選電路,比如ifselect=‘1’thenoutput<=a;elseoutput<=b;endif;對(duì)應(yīng)的電路就是用select作為選擇信號(hào)來(lái)選通a和bIF語(yǔ)句IF語(yǔ)句對(duì)應(yīng)的電路就是多選電路,比如55Case語(yǔ)句
CASE語(yǔ)句的描述如下:
CASEexpressionISWHENchoices1=>sequence_of_statements1;{WHENchoices2=>sequence_of_statements1;}ENDCASE其中條件有如下四種表達(dá)方法:
WHEN值=>
WHEN值|值|…|值=>WHEN值TO值=>
WHEN
others=>選擇項(xiàng)必須覆蓋表達(dá)式所有選項(xiàng),不足時(shí)其它選項(xiàng)包括在others項(xiàng)中。Case語(yǔ)句CASE語(yǔ)句的描述如下:56Case語(yǔ)句Case語(yǔ)句對(duì)應(yīng)的是無(wú)優(yōu)先級(jí)的多選如果在case中給多個(gè)信號(hào)賦值一定要在前面有缺省賦值.大家看下面的程序有什么問(wèn)題?Case語(yǔ)句Case語(yǔ)句對(duì)應(yīng)的是無(wú)優(yōu)先級(jí)的多選57Case語(yǔ)句Process(decoder_in)beginCASEdecoder_inISWHEN“000”=>decoder_out<=“11111110”;WHEN“001”=>decoder_out<=“11111101”;WHEN“010”=>decoder_out<=“11111011”;WHEN“011”=>decoder_out<=“11110111”;WHEN“100”=>decoder_out<=“11101111”;WHEN“101”=>decoder_out<=“11011111”;WHEN“110”=>decoder_out<=“10111111”;WHEN“111”=>decoder_out<=“01111111”ENDCASE;Decoder_in為std_logic_vector型,所以即使是9個(gè)值也沒有完全賦值,因此如果在case前沒有decoder的缺省賦值,就應(yīng)該有default選項(xiàng)whendefault=>decoder_out<=(others=>’X’);Case語(yǔ)句Process(decoder_in)Decod58Loop語(yǔ)句FORidentifierINdiscrete_rangeLOOPsequence_of_statemetnsENDLOOP;LOOP語(yǔ)句適用于描述有重復(fù)操作,或模塊需要很強(qiáng)的迭代能力時(shí)使用。如下電路完成對(duì)輸入的8位向量的翻轉(zhuǎn),即信號(hào)的高位與低位對(duì)調(diào):FORiIN0TO7LOOPoutput_vector(i)<=input_vector(7-i);ENDLOOP;Loop語(yǔ)句FORidentifierINdis59loop語(yǔ)句上述程序中i為循環(huán)變量,在VHDL中不允許任何對(duì)循環(huán)變量的賦值,也就是說(shuō)不允許在任何函數(shù)返回值中存在循環(huán)變量,或在任何過(guò)程的輸出與雙向參量中存在循環(huán)變量。并且循環(huán)變量不用顯式說(shuō)明,它的作用域僅存在于循環(huán)語(yǔ)句內(nèi)部,因此不允許在循環(huán)語(yǔ)句內(nèi)部存在于循環(huán)變量同名的變量或信號(hào)loop語(yǔ)句上述程序中i為循環(huán)變量,在VHDL中不允許任何對(duì)60進(jìn)制B(binary)O(octal)X(Hexadecimal)通常情況下我們都用二進(jìn)制對(duì)于位寬為4n的用16進(jìn)制極為方便,在VHDL的語(yǔ)言規(guī)定中,可以使用<=X”0F”
賦值,但synopsys到9910才支持,如果工具不支持只能使用2進(jìn)制.進(jìn)制B(binary)O(octal)X(Hexadec61理解并行的概念在architecture中的語(yǔ)句都是并行的,它們的執(zhí)行順序和位置無(wú)關(guān),一個(gè)process相當(dāng)于一個(gè)并行語(yǔ)句.比如在architecture中存在:D<=A+E;A<=B+C;將產(chǎn)生兩個(gè)加法器,第二個(gè)輸出作為第一個(gè)的一個(gè)輸入在仿真時(shí),當(dāng)B或C變化時(shí),激活語(yǔ)句2,當(dāng)A或E變化時(shí),激活語(yǔ)句2.本質(zhì):在現(xiàn)實(shí)電路中,各個(gè)部件是并行工作的,一個(gè)部件的輸入變化,才會(huì)引起這個(gè)部件的輸出變換.理解并行的概念在architecture中的語(yǔ)句都是并行的,62避免組合環(huán)在一般情況下不要使用組合環(huán),尤其是不要用行為級(jí)描述組合環(huán),如果需要使用電路圖形式,并在設(shè)計(jì)中不要優(yōu)化這個(gè)模塊避免組合環(huán)在一般情況下不要使用組合環(huán),尤其是不要用行為級(jí)描述63練習(xí)寫一個(gè)帶有異步復(fù)位同步置數(shù)的增量計(jì)數(shù)器Clk時(shí)鐘load同步置數(shù)信號(hào)rst異步清零data置入數(shù)據(jù)count計(jì)數(shù)器輸出練習(xí)寫一個(gè)帶有異步復(fù)位同步置數(shù)的增量計(jì)數(shù)器Clk64lIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYcounterISPORT(clk:INstd_logic;load:INstd_logic;rst:INstd_logic;data:INstd_logic_vector(7downto0);count:OUTstd_logic_vector(7downto0));ENDcounter;ARCHITECTUREarc_counterOFcounterISSIGNALcnt:std_logic_vector(7downto0);BEGINPROCESS(clk,rst)BEGINIFrst='1'THENcnt<=(others=>'0');ELSIFclk'eventANDclk='1'THENIFload='1'THENcnt<=data;ELSEcnt<=cnt-1;ENDIF;ENDIF;ENDPROCESS;count<=cnt;ENDarc_counter;lIBRARYIEEE;65敏感表Process(a,b)begins<=a;t<=b;v<=sort;endprocessProcess(a,b,s,t)begins<=a;t<=b;v<=sort;endprocess仿真和綜合的區(qū)別?結(jié)論:出現(xiàn)在賦值號(hào)左邊的都應(yīng)該寫在敏感表中敏感表Process(a,b)Process(a,b,s,t66LatchProcess(x,z)beginifx=‘1’theny<=z;endif;endprocess;X=0時(shí)需要保存原值,導(dǎo)致產(chǎn)生一個(gè)latchLatchProcess(x,z)X=0時(shí)需要保存原值,導(dǎo)致67使用VHDL描述基本電路使用VHDL描述基本電路68原因采用HDL語(yǔ)言進(jìn)行數(shù)字電路設(shè)計(jì)的流程中最重要的環(huán)節(jié)就是將語(yǔ)言描述轉(zhuǎn)化為電路,將你的設(shè)計(jì)付諸實(shí)現(xiàn),因此你必須知道所描述的語(yǔ)言對(duì)應(yīng)的電路,只有這樣綜合工具才會(huì)輸出一個(gè)可預(yù)知的、準(zhǔn)確的、高質(zhì)量的結(jié)果,滿足設(shè)計(jì)者對(duì)電路功能、時(shí)序和面積上的要求。數(shù)字電路都是由一些基本單元連接而成的,只有能準(zhǔn)確的描述這些常見電路才有可能使用這些模塊構(gòu)建更復(fù)雜的數(shù)字電路,因此熟悉數(shù)字電路中一些常見電路的描述是進(jìn)行大規(guī)模系統(tǒng)設(shè)計(jì)的基礎(chǔ)原因采用HDL語(yǔ)言進(jìn)行數(shù)字電路設(shè)計(jì)的流程中最重要的環(huán)節(jié)就是將69RTL電路模型RTL電路模型70結(jié)論對(duì)于RTL電路的描述主要就是針對(duì)時(shí)序部件和組合邏輯的描述,如果設(shè)計(jì)者在使用VHDL語(yǔ)言進(jìn)行描述時(shí),能遵照組合邏輯和時(shí)序電路描述的規(guī)范,那么就可以使綜合工具明確設(shè)計(jì)者的意圖,綜合出設(shè)計(jì)者期望的電路。結(jié)論對(duì)于RTL電路的描述主要就是針對(duì)時(shí)序部件和組合邏輯的描述71數(shù)字系統(tǒng)的結(jié)構(gòu)除了調(diào)用的一些宏單元模塊
時(shí)序電路、組合邏輯以及總線和存儲(chǔ)單元,這四種基本單元就可以構(gòu)成各種各樣的數(shù)字電路。我個(gè)人的理解,不知道對(duì)不對(duì)?數(shù)字系統(tǒng)的結(jié)構(gòu)除了調(diào)用的一些宏單元模塊
時(shí)序電路、組合邏輯以72時(shí)序部件時(shí)序邏輯電路在任一時(shí)刻的輸出信號(hào)不但與當(dāng)時(shí)的輸入信號(hào)有關(guān),而且還依賴于電路原來(lái)的狀態(tài),因此這類電路必須具有記錄過(guò)去狀態(tài)的能力。時(shí)序邏輯電路中最基本的記憶部件就是就是觸發(fā)器(flip-flop)和鎖存器(latch),它們都是一位的存儲(chǔ)單元,多位存儲(chǔ)單元就可以構(gòu)成寄存器(Register)時(shí)序部件時(shí)序邏輯電路在任一時(shí)刻的輸出信號(hào)不但與當(dāng)時(shí)的輸入信號(hào)73LATCH鎖存器是電平觸發(fā)的,鎖存器的值在時(shí)鐘的一個(gè)邏輯狀態(tài)可以更改,在另一個(gè)邏輯狀態(tài)被保存下來(lái),因此在使能階段輸入端的一個(gè)毛刺也會(huì)導(dǎo)致電路的誤操作,無(wú)法阻止毛刺的傳播,容易產(chǎn)生較多的競(jìng)爭(zhēng)冒險(xiǎn)現(xiàn)象。從數(shù)字電路教材中,我們可以知道鎖存器的優(yōu)點(diǎn)是面積小、功耗低、速度較快,因此在許多全定制和半定制ASIC設(shè)計(jì)中會(huì)使用鎖存器單元,但在使用FPGA或CPLD實(shí)現(xiàn)電路時(shí),應(yīng)該避免使用鎖存器。LATCH鎖存器是電平觸發(fā)的,鎖存器的值在時(shí)鐘的一個(gè)邏輯狀態(tài)74寄存器的描述
PROCESSBEGINWAITUNTIL(edge)
…ENDPROCESS;或PROCESS(sensitivitylist)BEGINIF(edge)
…
ENDIF;ENDPROCESS;寄存器的描述PROCESS75時(shí)鐘沿描述使用WAIT語(yǔ)句時(shí),進(jìn)程不需要敏感表,WAITUNTIL語(yǔ)句就相當(dāng)于敏感表的功能。在使用IF語(yǔ)句時(shí)應(yīng)該將時(shí)鐘信號(hào)放入敏感表中。對(duì)于時(shí)鐘的跳變有兩種描述方法,event屬性或函數(shù)調(diào)用。如下所示:clk’eventANDclk=‘1’--上跳沿的event屬性描述clk’eventANDclk=‘0’--下跳沿的event屬性描述rising_edge(clk)--上跳沿的函數(shù)調(diào)用falling_edge(clk)--下跳沿的函數(shù)調(diào)用在電路設(shè)計(jì)中,應(yīng)使用event屬性來(lái)描述時(shí)鐘跳變,因?yàn)橐恍¬HDL的綜合工具并不支持函數(shù)調(diào)用,并且函數(shù)只檢測(cè)0到1和1到0的跳變,無(wú)法檢測(cè)出X到1或0到X,這對(duì)于使用的九值邏輯是不適合的。時(shí)鐘沿描述使用WAIT語(yǔ)句時(shí),進(jìn)程不需要敏感表,WAITU76時(shí)鐘沿描述時(shí)鐘沿在作為IF或ELSIF語(yǔ)句的條件時(shí),只可以單獨(dú)使用,不能和其他條件共存,如下面的語(yǔ)句就是錯(cuò)誤的:IF(edgeANDrst=’1’)THEN同時(shí)當(dāng)某一IF語(yǔ)句或ELSIF語(yǔ)句后有時(shí)鐘沿做條件時(shí),就不可以在有ELSE付句,如下面的語(yǔ)句描述也是錯(cuò)誤的:IFrst=’1’THENSequential_statementELSIF(edge)THENSequential_statementELSESequential_statementENDIF;時(shí)鐘沿描述時(shí)鐘沿在作為IF或ELSIF語(yǔ)句的條件時(shí),只可以單77異步復(fù)位和同步復(fù)位記憶部件在電路加電后其狀態(tài)是不確定的,它的初值應(yīng)由復(fù)位信號(hào)來(lái)設(shè)置,根據(jù)設(shè)置的時(shí)機(jī)不同,可分為同步置位和異步置位。所謂同步置位是指置位信號(hào)只有在給定的時(shí)鐘沿下才可以完成工作;而異步復(fù)位是指復(fù)位信號(hào)一旦生效存儲(chǔ)部件就會(huì)被置位。其原理如下圖所示異步復(fù)位和同步復(fù)位記憶部件在電路加電后其狀態(tài)是不確定的,它的78Asynreset和synresetAsynreset和synreset79異步復(fù)位的VHDL描述PROCESS(sensitivitylist)BEGINIF(reset)THEN
…ELSIF(set)THEN
…ELSIF(edge)THEN
…
ENDIF;ENDPROCESS;此時(shí)的敏感表只需要異步負(fù)位信號(hào)和時(shí)鐘信號(hào)即可,IF語(yǔ)句相對(duì)于WAIT語(yǔ)句更靈活一些異步復(fù)位的VHDL描述PROCESS(sensitivity80強(qiáng)調(diào)在FPGA設(shè)計(jì)中盡量不要使用latch強(qiáng)調(diào)在FPGA設(shè)計(jì)中盡量不要使用latch81觸發(fā)器描述LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;
ENTITYdffISPORT(data:INstd_logic;clk:INstd_logic;q:OUTstd_logic);ENDdff;ARCHITECTUREdffOFdffISBEGINPROCESSBEGINWAITUNTILclk’eventANDclk=‘1’;q<=data;ENDPROCESS;ENDdff;觸發(fā)器描述LIBRARYIEEE;82電路圖電路圖83帶異步復(fù)位上沿的D觸發(fā)器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;
ENTITYdff_asyn_resetISPORT(data:INstd_logic;clk:INstd_logic;reset:INstd_logic;q:OUTstd_logic);ENDdff_asyn_reset;ARCHITECTUREdff_asyn_resetOFdff_asyn_resetISBEGINPROCESS(clk,reset)BEGINIFreset=‘0’THENq<=‘0’;ELSIFclk’eventANDclk=‘1’THENq<=data;ENDIF;ENDPROCESS;ENDdff_asyn_reset;帶異步復(fù)位上沿的D觸發(fā)器LIBRARYIEEE;84電路圖電路圖85帶異步置位復(fù)位的上跳沿D觸發(fā)器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;
ENTITYdff_asynISPORT(data:INstd_logic;clk:INstd_logic;preset:INstd_logic;reset:INstd_logic;q:OUTstd_logic);ENDdff_asyn_preset;ARCHITECTUREdff_asynOFdff_asynISBEGINPROCESS(clk,preset,reset)BEGIN
IFpreset=‘0’THENq<=‘1’;ELSIFreset=‘0’THENq<=‘0’;ELSIFclk’eventANDclk=‘1’THENq<=data;ENDIF;ENDPROCESS;ENDdff_asyn;帶異步置位復(fù)位的上跳沿D觸發(fā)器LIBRARYIEEE;86電路圖電路圖87帶異步復(fù)位和輸入使能的上跳沿D觸發(fā)器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;
ENTITYdff_ck_enISPORT(data:INstd_logic;clk:INstd_logic;reset:INstd_logic;en:INstd_logic;q:OUTstd_logic);ENDdff_ck_en;ARCHITECTUREdff_ck_enOFdff_ck_enISBEGINPROCESS(clk,reset)BEGINIFreset=‘0’THENq<=‘0’;ELSIFclk’eventANDclk=‘1’THEN
IFen=‘1’THENq<=data;ENDIF;ENDIF;ENDPROCESS;ENDdff_ck_en;帶異步復(fù)位和輸入使能的上跳沿D觸發(fā)器LIBRARYIEE88電路圖電路圖89計(jì)數(shù)器計(jì)數(shù)器是數(shù)字系統(tǒng)中使用最多的時(shí)序電路。它不僅能用于對(duì)時(shí)鐘脈沖計(jì)數(shù),還可用于定時(shí)、分頻、產(chǎn)生節(jié)拍脈沖以及進(jìn)行數(shù)字運(yùn)算等。稍微復(fù)雜的數(shù)字系統(tǒng),幾乎都包含計(jì)數(shù)器。按計(jì)數(shù)器中觸發(fā)器翻轉(zhuǎn)的次序,可以把計(jì)數(shù)器分為同步式和異步式兩種。在同步計(jì)數(shù)器中,當(dāng)時(shí)鐘脈沖輸入時(shí)觸發(fā)器的翻轉(zhuǎn)是同時(shí)的,而在異步計(jì)數(shù)器中,觸發(fā)器則不是同時(shí)翻轉(zhuǎn)的一般的設(shè)計(jì)中都使用同步計(jì)數(shù)器計(jì)數(shù)器計(jì)數(shù)器是數(shù)字系統(tǒng)中使用最多的時(shí)序電路。它不僅能用于對(duì)時(shí)90帶異步清零和計(jì)數(shù)使能的8位同步計(jì)數(shù)器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYcounter8ISPORT(clk:INstd_logic;en:INstd_logic;rst:INstd_logic;count:OUTstd_logic_vector(7downto0));ENDcounter8;ARCHITECTUREcounter8OFcounter8ISSIGNALcnt:std_logic_vector(7downto0);BEGINPROCESS(clk,en,cnt,rst)BEGINIFrst=‘0’THENcnt<=(others=>‘0’);ELSIFclk’eventANDclk=‘1’THENIFen=‘1’THENcnt<=cnt+1;ENDIF;ENDIF;ENDPROCESS;count<=cnt;ENDcounter8;帶異步清零和計(jì)數(shù)使能的8位同步計(jì)數(shù)器LIBRARYIEE91RTL視圖RTL視圖92建議大家在初期的練習(xí)中,對(duì)于簡(jiǎn)單電路可以使用synplify綜合后觀察它的RTL視圖,比較自己對(duì)模塊的基本理解,可以提高對(duì)vhdl描述和綜合的認(rèn)識(shí)。建議大家在初期的練習(xí)中,對(duì)于簡(jiǎn)單電路可以使用synplify93移位操作LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYshiftISPORT(clk:INstd_logic;rst:INstd_logic;data:INstd_logic;Q:OUTstd_logic_vector(7downto0));ENDshift;ARCHITECTUREshiftOFshiftISSIGNALQ_temp:std_logic_vector(7downto0);BEGINPROCESS(rst,clk)BEGINIFrst=‘1’THENQ_temp<=(others=>‘0’);ELSIFclk’eventANDclk=‘1’THENQ_temp<=Q_temp(6downto0)&data;ENDIF;ENDPROCESS;Q<=Q_temp;ENDshift;移位操作LIBRARYIEEE;94電路圖電路圖95練習(xí)描述一個(gè)串并轉(zhuǎn)換電路,并行輸出位8位,搜索到同步字AA后開始發(fā)送一個(gè)同步標(biāo)記,以后每組一個(gè)字,發(fā)一次.練習(xí)描述一個(gè)串并轉(zhuǎn)換電路,并行輸出位8位,搜索到同步字AA后96結(jié)果Process(Q_temp,data)variablecompare_AA:std_logic_vector(7downto0)begincompare_AA:=Q_temp(6downto0)&data;IFcompare_AA=“10101010”thensame_with_AA<=‘1’;elsesame_with_AA<=‘0’;endif;endprocess;process(rst,clk)beginifrst=‘1’thenword_counter_enable<=‘0’;elsifclk’eventandclk=‘1’thenifsame_with_AA=‘1’thenword_counter_enable<=‘1’;endif;endif;endprocess;結(jié)果Process(Q_temp,data)97結(jié)果Process(rst,clk)beginifrst=‘1’thenword_counter<=“000”;elsifclk’eventandclk=‘1’thenifword_counter_enable=‘1’thenword_counter<=word_counter+1;endif;endif;endprocess;process(word_coutner)beginifword_counter=“001”thenword_syn<=‘1’;elseword_syn<=‘0’;endif;endprocess;結(jié)果Process(rst,clk)98組合電路的描述在RTL電路模型中,處于各個(gè)寄存器之間的部分都是組合邏輯電路,相對(duì)于寄存器的描述,組合邏輯的描述相對(duì)模糊,設(shè)計(jì)者只能大約的估計(jì)出組合部分的面積和時(shí)延,而組合邏輯在很大程度上決定著電路的面積和速度,因此對(duì)于組合電路的準(zhǔn)確描述就顯得十分重要。只有了解基本組合單元的特點(diǎn),才能使由VHDL語(yǔ)言描述產(chǎn)生的電路符合設(shè)計(jì)者時(shí)序和面積上的要求。組合邏輯的特點(diǎn)是在任何時(shí)刻電路的輸出僅僅取決于該時(shí)刻的輸入信號(hào),而與這一時(shí)刻輸入信號(hào)作用前電路原來(lái)的狀態(tài)沒有任何關(guān)系。在電路結(jié)構(gòu)上基本是由邏輯門組成,只有從輸入到輸出的通路,沒有從輸出反饋到輸入的回路。雖然邏輯電路由于具體問(wèn)題的不同而千差萬(wàn)別,但其中也有若干種電路在各類數(shù)字系統(tǒng)中大量的出現(xiàn),并且其它許多電路都是在它們的基礎(chǔ)上變化得到的,下面就介紹如何用VHDL語(yǔ)言來(lái)描述這些基本電路。組合電路的描述在RTL電路模型中,處于各個(gè)寄存器之間的部分都99多選電路ENTITYpri_muxISPORT(input_a:INstd_logic;input_b:INstd_logic;input_c:INstd_logic;input_d:INstd_logic;select_a:INstd_logic;select_b:INstd_logic;select_c:INstd_logic;pout:OUTstd_logic);ENDpri_mux;ARCHITECTUREpri_muxOFpri_muxISBEGINPROCESS(input_a,input_b,input_c,input_d,select_a,select_b,select_c)BEGIN
IFselect_a=‘1’THENpout<=input_a;ELSIFselect_b=‘1’THENpout<=input_b;ELSIFselect_c=‘1’THENpout<=input_c;ELSEpout<=input_d;ENDIF;ENDPROCESS;ENDpri_mux;多選電路ENTITYpri_muxIS100電路圖電路圖101無(wú)優(yōu)先級(jí)的選擇器PROCESS(input_a,input_b,input_c,input_d,sel)BEGINCASEselISWHEN“00”=>pout<=input_a;WHEN“01”=>pout<=input_b;WHEN“10”=>pout<=input_c;
WHENothers=>pout<=input_d;ENDCASE;ENDPROCESS;為什么沒有使用when“11”=>pout<=input_d;無(wú)優(yōu)先級(jí)的選擇器PROCESS(input_a,input_102電路圖電路圖103無(wú)優(yōu)先級(jí)的譯碼器ENTITYdecoderISPORT(Ain:INstd_logic_vector(2downto0);en:INstd_logic;Yout:OUTstd_logic_vector(7downto0));ENDdecoder;ARCHITECTUREdecoderOFdecoderISBEGINPROCESS(Ain,en)BEGINIFen=‘0’THENYout<=(others=>‘0’);ELSECASEAinISWHEN“000”=>Yout<=“00000001”;WHEN“001”=>Yout<=“00000010”;
WHEN“010”=>Yout<=“00000100”;WHEN“011”=>Yout<=“00001000”;WHEN“100”=>Yout<=“00010000”;WHEN“101”=>Yout<=“00100000”;WHEN“110”=>Yout<=“01000000”;WHEN“111”=>Yout<=“10000000”;
WHENothers=>Yout<=(others=>‘0’);ENDCASE;ENDIF;ENDPROCESS;ENDdecoder;無(wú)優(yōu)先級(jí)的譯碼器ENTITYdecoderIS104電路圖電路圖
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 部編版五年級(jí)語(yǔ)文下冊(cè)第13課《人物描寫一組》精美課件
- 施工總承包管理及協(xié)調(diào)
- 自考《勞動(dòng)法(00167)》考前強(qiáng)化考試題庫(kù)(含答案)
- 畜牧法規(guī)知識(shí)考試題庫(kù)及答案
- 2025年正德職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 2025年晉中職業(yè)技術(shù)學(xué)院高職單招語(yǔ)文2018-2024歷年參考題庫(kù)頻考點(diǎn)含答案解析
- 2025年攀枝花攀西職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 中班數(shù)學(xué)主題活動(dòng)策劃方案模板五篇
- 藥品運(yùn)輸合同
- 林業(yè)承包合同標(biāo)準(zhǔn)范本
- 2025民政局離婚協(xié)議書范本(民政局官方)4篇
- 2024年03月四川農(nóng)村商業(yè)聯(lián)合銀行信息科技部2024年校園招考300名工作人員筆試歷年參考題庫(kù)附帶答案詳解
- 小學(xué)一年級(jí)數(shù)學(xué)上冊(cè)口算練習(xí)題總匯
- 潤(rùn)滑油知識(shí)-液壓油
- 2024年江蘇省中醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫(kù)頻考點(diǎn)附帶答案
- 臨床思維能力培養(yǎng)
- 人教版高中物理必修第三冊(cè)第十章靜電場(chǎng)中的能量10-1電勢(shì)能和電勢(shì)練習(xí)含答案
- 《中國(guó)香文化》課件
- 2024簡(jiǎn)易租房合同下載打印
- 阿基米德課件
- 2024年步步高高考英語(yǔ)大一輪復(fù)習(xí)(新人教版)基礎(chǔ)知識(shí)默寫本必修第一冊(cè)含答案
評(píng)論
0/150
提交評(píng)論