硬件描述語(yǔ)言VHDL基礎(chǔ)_第1頁(yè)
硬件描述語(yǔ)言VHDL基礎(chǔ)_第2頁(yè)
硬件描述語(yǔ)言VHDL基礎(chǔ)_第3頁(yè)
硬件描述語(yǔ)言VHDL基礎(chǔ)_第4頁(yè)
硬件描述語(yǔ)言VHDL基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩140頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第3章硬件描述語(yǔ)言VHDL基礎(chǔ)自20世紀(jì)60年代以來(lái),數(shù)字集成電路已經(jīng)歷了從SSI、MSI、LSI到VLSI的發(fā)展過(guò)程。數(shù)字集成電路按照芯片設(shè)計(jì)方法的不同大致可以分為三類:①通用型中、小規(guī)模集成電路;②用軟件組態(tài)的大規(guī)模、超大規(guī)模集成電路,如微處理器、單片機(jī)等;③專用集成電路(ASIC-ApplicationSpecificIntegratedCircuit)。

ASIC是一種專門為某一應(yīng)用領(lǐng)域或?yàn)閷iT用戶需要而設(shè)計(jì)、制造的LSI或VLSI電路,它可以將某些專用電路或電子系統(tǒng)設(shè)計(jì)在一個(gè)芯片上,構(gòu)成單片集成系統(tǒng)。一、PLD發(fā)展概況①PLD中陣列交叉點(diǎn)的邏輯表示PLD邏輯陣列中交叉點(diǎn)的連接方式采用圖7-7所示的幾種邏輯表示。(a)表示實(shí)體連結(jié),就是行線和列線在這個(gè)交叉點(diǎn)處實(shí)在連接,這個(gè)交叉點(diǎn)是不可編程點(diǎn),在交叉點(diǎn)處打上實(shí)心點(diǎn)。①PLD中陣列交叉點(diǎn)的邏輯表示PLD邏輯陣列中交叉點(diǎn)的連接方式采用圖7-7所示的幾種邏輯表示。(b)表示可編程連接。無(wú)論×或表示該符號(hào)所在行線和列線交叉處是可編程點(diǎn),具有一個(gè)可編程單元。?①PLD中陣列交叉點(diǎn)的邏輯表示PLD邏輯陣列中交叉點(diǎn)的連接方式采用圖7-7所示的幾種邏輯表示。在采用熔絲工藝的PLD器件中,器件出廠后用戶編程之前,所有可編程點(diǎn)處的熔絲都處于接通狀態(tài),習(xí)慣上都用×表示熔絲接通,因此可編程點(diǎn)上處處都打×或。?①PLD中陣列交叉點(diǎn)的邏輯表示PLD邏輯陣列中交叉點(diǎn)的連接方式采用圖7-7所示的幾種邏輯表示。PLD器件被用戶編程后,可編程點(diǎn)上的熔絲有的燒斷,有的接通。編程后可在編程點(diǎn)上仍打有×,這時(shí)的×表示可編程點(diǎn)被編程后熔絲接通。①PLD中陣列交叉點(diǎn)的邏輯表示PLD邏輯陣列中交叉點(diǎn)的連接方式采用圖7-7所示的幾種邏輯表示。熔絲燒斷的可編程點(diǎn)上的×消失,行線和列線不相接,這種情況用圖(c)表示。

②與門及或門的表示≥1ABCYYABCYABC&ABCYYABC與陣列如圖(a)所示。在二極管與門的各支路與輸出之間接入熔絲。熔絲保留的各支路的輸入為有效輸入,輸出F是熔絲保留各支路輸入的與邏輯函數(shù)。圖(b)是PLD表示。圖(a)和圖(b)是熔絲全部保留的與陣列表示情況。圖(c)是燒斷3個(gè)熔絲的情況,圖(d)是圖(c)的PLD表示。PLD中與陣列的缺省表示在PLD器件與陣列中??吹较聢D中給出的幾種表示。輸出為Z1的與門4個(gè)輸入變量全部被編程后輸入,4個(gè)交叉點(diǎn)均畫×。因此,Z2為Z1的缺省表示。這時(shí)的陣列交叉點(diǎn)上均未畫×,而在與門符號(hào)內(nèi)卻畫有×。PLD中與陣列的缺省表示輸出為Z3的與門輸入陣列交叉點(diǎn)上無(wú)×,與門符號(hào)內(nèi)也無(wú)×,這是浮動(dòng)狀態(tài)的邏輯表示。浮動(dòng)輸入狀態(tài)代表與陣列編程后熔絲全部熔斷,4個(gè)輸入全都不同與門相接,相當(dāng)與門輸入懸空,與門輸出為高電平,即輸出邏輯“1”②與門及或門的表示③輸入緩沖器和反饋緩沖器在PLD中有二種特殊的緩沖器輸入緩沖器和反饋緩沖器,二種緩沖器有相同的電路構(gòu)成它們是單輸入、雙輸出的緩沖器單元,一個(gè)是高有效輸出端,即同極性輸出端。另一個(gè)是低有效輸出端,即反極性輸出端。③輸入緩沖器和反饋緩沖器與曾經(jīng)學(xué)過(guò)的輸出三態(tài)緩沖器不同輸出三態(tài)緩沖器也有三個(gè)端,但只有一個(gè)輸入和一個(gè)輸出端,另一個(gè)是使能控制端。原則上說(shuō),輸出三態(tài)緩沖器有二個(gè)輸入端一個(gè)輸出端。輸入緩沖器和反饋緩沖器輸出只有0、1兩個(gè)邏輯狀態(tài)。而輸出三態(tài)緩沖器除了有0、1兩個(gè)邏輯狀態(tài)外,還有一個(gè)稱為高阻(Z)的狀態(tài)。在PLD中為了實(shí)現(xiàn)輸出極性可編程,常采用圖(a)所示的異或門結(jié)構(gòu)。當(dāng)熔絲燒斷,異或門輸出極性為低有效,即否則異或門輸出高有效Q0=P⊕0=P。③輸入緩沖器和反饋緩沖器PPQ=?=10圖(b)是編程后熔絲保留,輸出極性編程為高有效。圖(c)是編程熔絲燒斷,輸出極性編程為低有效。③輸入緩沖器和反饋緩沖器與陣列Y1Y2或陣列AB與陣列Y1Y2或陣列④與或陣列圖任一組合邏輯函數(shù)都可用“與或”式表示,即任何組合邏輯函數(shù)都可以用一個(gè)與門陣列與一個(gè)或門陣列來(lái)實(shí)現(xiàn)。如:標(biāo)準(zhǔn)畫法簡(jiǎn)化畫法例:可編程只讀存儲(chǔ)器PROM與陣列(固定)D2D1D0或陣列(可編程)A2A1A0完全譯碼陣列實(shí)現(xiàn)組合邏輯函數(shù):將函數(shù)寫為最小項(xiàng)之和形式,將對(duì)應(yīng)的與項(xiàng)或起來(lái)即可。容量=與門數(shù)×或門數(shù)=2n×m利用效率低。例:試用PROM實(shí)現(xiàn)4位二進(jìn)制碼到Gray碼的轉(zhuǎn)換。轉(zhuǎn)換真值表與陣列或陣列A2A1A0A3D2D1D0D3例:可編程邏輯陣列PLA

與陣列(可編程)A2A1A0D2D1D0或陣列(可編程)實(shí)現(xiàn)組合邏輯函數(shù):將函數(shù)化簡(jiǎn)為最簡(jiǎn)與或式,將對(duì)應(yīng)的與項(xiàng)或起來(lái)即可。容量=與門數(shù)×或門數(shù)制造工藝復(fù)雜。與陣列或陣列A3A2A1A0D3D2D1D0例:試用PLA實(shí)現(xiàn)4位二進(jìn)制碼到Gray碼的轉(zhuǎn)換。解:利用卡諾圖化簡(jiǎn)得最簡(jiǎn)與或式:二、可編程專用集成電路ASIC可編程專用集成電路ASIC(ApplicationSpecificIntegratedCircuit)是面向用戶特定用途或特定功能的大規(guī)模、超大規(guī)模集成電路。分類:按功能分為數(shù)字的、模擬的、數(shù)字和模擬混和三種。按制造方式分為全定制、半定制ASIC、可編程三種。根據(jù)芯片的集成度和結(jié)構(gòu)復(fù)雜度分類簡(jiǎn)單可編程邏輯器件SPLD特點(diǎn)是都具有可編程的與陣列、不可編程的或陣列、輸出邏輯宏單元OLMC和輸入輸出邏輯單元IOC。復(fù)雜可編程邏輯器件CPLD特點(diǎn)是具有更大的與陣列和或陣列,增加了大量的宏單元和布線資源,觸發(fā)器的數(shù)量明顯增加?,F(xiàn)場(chǎng)可編程邏輯門陣列FPGA運(yùn)算器、乘法器、數(shù)字濾波器、二維卷積器等具有復(fù)雜算法的邏輯單元和信號(hào)處理單元的邏輯設(shè)計(jì)可選用FPGA實(shí)現(xiàn)。按制造技術(shù)和編程方式進(jìn)行分類雙極熔絲制造技術(shù)的可編程ASIC萊迪思(Lattice)半導(dǎo)體公司的PAL系列反熔絲制造技術(shù)的可編程ASICActel的FPGAEECMOS制造技術(shù)的可編程ASICLattice的GAL和ispLSI/pLSISRAM制造技術(shù)的可編程ASICXilinx的FPGA,Altera的FPGA雙極熔絲和反熔絲ASIC通常稱為OTP(onetimeprogramming)器件采用EECMOS和SRAM制造技術(shù)的可編程ASIC具有用戶可重復(fù)編程的特性,可以實(shí)現(xiàn)電擦電寫。按制造技術(shù)和編程方式進(jìn)行分類用SRAM技術(shù)制造的FPGA則具有數(shù)據(jù)揮發(fā)性,又稱易失性。具有揮發(fā)性的FPGA,當(dāng)系統(tǒng)斷電或掉電后,寫入FPGA中的編程數(shù)據(jù)要丟失。因此,必須把要下載到FPGA的數(shù)據(jù)借用編程器固化到與其聯(lián)用的EPROM或EEPROM中,待重新上電時(shí),芯片將編程數(shù)據(jù)再下載到FPGA中。FPGA的數(shù)據(jù)揮發(fā)性,決定有些環(huán)境不宜選用??删幊藺SIC的編程方式可編程ASIC的編程方式有兩種:采用專用編程器進(jìn)行編程在系統(tǒng)編程甩掉了專用編程器,而且也不用將芯片從電路系統(tǒng)取下,只利用計(jì)算機(jī)和一組下載電纜就可以在系統(tǒng)編程。Lattice和Xilinx等幾家大公司現(xiàn)在都有在系統(tǒng)可編程ASIC產(chǎn)品。在系統(tǒng)編程方式方便了用戶。

可編程ASIC的一般開發(fā)步驟設(shè)計(jì)輸入(entry)功能模擬(functionsimulation)邏輯分割(partitioning)布局和布線(placeandrouting)時(shí)間模擬(timingsimulation)寫入下載數(shù)據(jù)(download)ASIC開發(fā)步驟流程圖TOP—DOWN設(shè)計(jì)思想自頂向下(TOP—DOWN)設(shè)計(jì)首先是從系統(tǒng)級(jí)開始入手。把系統(tǒng)分成若干基本單元模塊,然后再把作為基本單元的這些模塊分成下一層的子模塊。TOP—DOWN設(shè)計(jì)思想采用TOP—DOWN層次結(jié)構(gòu)化設(shè)計(jì)方法,設(shè)計(jì)者可在一個(gè)硬件系統(tǒng)的不同層次的模塊下進(jìn)行設(shè)計(jì)??傮w設(shè)計(jì)師可以在上層模塊級(jí)別上對(duì)其下層模塊設(shè)計(jì)者所做的設(shè)計(jì)進(jìn)行行為級(jí)模擬驗(yàn)證。在TOP—DOWN的設(shè)計(jì)過(guò)程中,劃分每一個(gè)層次模塊時(shí)要對(duì)目標(biāo)模塊做優(yōu)化,在實(shí)現(xiàn)模塊時(shí)要進(jìn)行模擬仿真。雖然TOP—DOWN的設(shè)計(jì)過(guò)程是理想的,但它的缺點(diǎn)是得到的最小可實(shí)現(xiàn)的物理單元不標(biāo)準(zhǔn),成本可能較高。BOTTOM—UP設(shè)計(jì)思想BOTTOM—UP層次結(jié)構(gòu)化設(shè)計(jì)是TOP—DOWN設(shè)計(jì)的逆過(guò)程。它雖然也是從系統(tǒng)級(jí)開始的,即從設(shè)計(jì)樹的樹根開始,但在層次模塊劃分時(shí),首先考慮的是實(shí)現(xiàn)模塊的基本物理單元是否存在,劃分過(guò)程必須是從存在的基本單元出發(fā)。BOTTOM—UP設(shè)計(jì)思想設(shè)計(jì)樹最末枝上的單元要么是已經(jīng)制造出的單元,要么是已經(jīng)開發(fā)成功的單元,或者是可以買得到的單元。自底向上(BOTTOM—UP)的設(shè)計(jì)過(guò)程采用的全是標(biāo)準(zhǔn)單元,通常比較經(jīng)濟(jì)。但完全采用自底向上的設(shè)計(jì)有時(shí)不能完全達(dá)到指定的設(shè)計(jì)目標(biāo)要求。BOTTOM—UP設(shè)計(jì)思想用可編程ASIC實(shí)現(xiàn)一個(gè)好的電子系統(tǒng)設(shè)計(jì)通常采用TOP—DOWN和BOTTOM—UP兩種方法的結(jié)合,充分考慮設(shè)計(jì)過(guò)程中多個(gè)指標(biāo)的平衡。設(shè)計(jì)庫(kù)及庫(kù)元件在層次設(shè)計(jì)中所用的模塊有兩種:預(yù)先設(shè)計(jì)好的標(biāo)準(zhǔn)模塊由用戶設(shè)計(jì)的具有特定應(yīng)用功能的模塊前者一般要存放在EDA開發(fā)系統(tǒng)中各種類型的文件庫(kù)之中,后者必須經(jīng)過(guò)模型仿真和調(diào)試證明無(wú)誤后,建立一個(gè)圖形符號(hào)存放在用戶的設(shè)計(jì)庫(kù)中準(zhǔn)備在更上層的設(shè)計(jì)中使用。設(shè)計(jì)庫(kù)及庫(kù)元件模塊的功能模型可以是邏輯圖形式,也可以是VHDL描述的,還可以是真值表或邏輯方程式描述的。一個(gè)已知的圖形符號(hào)可以用來(lái)代表一個(gè)或幾個(gè)功能模型,這些模型的功能相同,參數(shù)可以不同。例如2輸入與非門7400、74LS00,74S00,功能相同,但是傳輸延時(shí),功耗不相同。第3章硬件描述語(yǔ)言VHDL基礎(chǔ)⒈硬件描述語(yǔ)言概述⒉VHDL語(yǔ)言程序結(jié)構(gòu)⒊VHDL常用語(yǔ)句⒋VHDL語(yǔ)法基礎(chǔ)什么是VHDLVHDL-VHSICHardwareDecription

Language

其中VHSIC-VeryHighSpeedIntegratedCircuit即超高速集成電路硬件描述語(yǔ)言電子設(shè)計(jì)自動(dòng)化的關(guān)鍵技術(shù)之一是要求用形式化方法來(lái)描述硬件系統(tǒng)。VHDL適應(yīng)了這種要求。目前在國(guó)內(nèi)外應(yīng)用的硬件描述語(yǔ)言有許多種,其中應(yīng)用最廣泛的有VHDL語(yǔ)言和Verilog-HDL語(yǔ)言。

3.1硬件描述語(yǔ)言概述VHDL和VerilogHDLVerilogHDL:另一種硬件描述語(yǔ)言,由Verilog

公司開發(fā),1995年成為IEEE標(biāo)準(zhǔn)。優(yōu)點(diǎn):簡(jiǎn)單、易學(xué)易用缺點(diǎn):功能不如VHDL強(qiáng)大,仿真工具少VHDL:1987年成為IEEE標(biāo)準(zhǔn)優(yōu)點(diǎn):功能強(qiáng)大、通用性強(qiáng)。缺點(diǎn):難學(xué)VHDL在電子系統(tǒng)設(shè)計(jì)中的應(yīng)用電子系統(tǒng)的設(shè)計(jì)模塊VHDL在電子系統(tǒng)設(shè)計(jì)中的應(yīng)用電子系統(tǒng)設(shè)計(jì)的描述等級(jí)1、行為級(jí)2、RTL級(jí)(Registertransferlevel)3、邏輯門級(jí)4、版圖級(jí)(制版級(jí))用VHDL可以描述以上四個(gè)等級(jí)VHDL在電子系統(tǒng)設(shè)計(jì)中的應(yīng)用系統(tǒng)設(shè)計(jì)的描述等級(jí)-行為級(jí)所謂行為描述,實(shí)際就是對(duì)整個(gè)系統(tǒng)的數(shù)學(xué)模型的描述,在行為描述階段,并不真正考慮其實(shí)際操作和算法怎么實(shí)現(xiàn),而是考慮系統(tǒng)的結(jié)構(gòu)和工作過(guò)程是否能達(dá)到系統(tǒng)設(shè)計(jì)規(guī)格書的要求。VHDL在電子系統(tǒng)設(shè)計(jì)中的應(yīng)用系統(tǒng)設(shè)計(jì)的描述等級(jí)-RTL級(jí)寄存器描述比行為描述更注重硬件的具體實(shí)現(xiàn),通過(guò)該描述可以導(dǎo)出系統(tǒng)的邏輯表達(dá)式,為邏輯綜合作準(zhǔn)備,當(dāng)然進(jìn)行邏輯綜合和邏輯綜合工具的能力有關(guān),當(dāng)然設(shè)計(jì)人員還必須了解邏輯綜合工具的說(shuō)明和規(guī)定。

VHDL在電子系統(tǒng)設(shè)計(jì)中的應(yīng)用系統(tǒng)設(shè)計(jì)的描述等級(jí)-邏輯門級(jí)該層次把RTL描述的程序轉(zhuǎn)換成基本邏輯元件表示的文件,該文件就象老的設(shè)計(jì)方法中的電原理圖。VHDL在電子系統(tǒng)設(shè)計(jì)中的應(yīng)用系統(tǒng)設(shè)計(jì)的描述等級(jí)-制版級(jí)如何使用VHDL描述硬件實(shí)體Entity(實(shí)體)Architecture1(構(gòu)造體)ArchitectureNprocess(進(jìn)程結(jié)構(gòu))

block(塊結(jié)構(gòu))subprograms(子程序)procedure(過(guò)程)

function(函數(shù))3.2VHDL語(yǔ)言程序結(jié)構(gòu)VHDL語(yǔ)言程序可由實(shí)體(Entity)說(shuō)明、結(jié)構(gòu)體(Architecture)、程序包(Package)、庫(kù)(Library)、配置(Configuration)5個(gè)部分組成。其中庫(kù)、實(shí)體說(shuō)明、結(jié)構(gòu)體是一個(gè)VHDL語(yǔ)言程序的基本組成部分。3.2VHDL語(yǔ)言程序結(jié)構(gòu)實(shí)體(Entity):實(shí)體用于描述所設(shè)計(jì)的系統(tǒng)的外部接口信號(hào);結(jié)構(gòu)體(Architecture):構(gòu)造體用于描述系統(tǒng)內(nèi)部的結(jié)構(gòu)和行為;建立輸入和輸出之間的關(guān)系;庫(kù)(Library):庫(kù)是專門存放預(yù)編譯程序包的地方。程序包(Package):包集合存放各個(gè)設(shè)計(jì)模塊共享的數(shù)據(jù)類型、常數(shù)和子程序等;配置(Configuration):配置語(yǔ)句安裝具體元件到實(shí)體—結(jié)構(gòu)體對(duì),可以被看作是設(shè)計(jì)的零件清單;libraryIEEE;useIEEE.std_logic_1164.all;useIEEE.std_logic_unsigned.all;entitycountisport(clock,reset:inSTD_LOGIC;

dataout:outSTD_LOGIC_VECTOR(3downto0));endcount;architecture

behaviorlofcountissignaldatabuffer:STD_LOGIC_VECTOR(3downto0);begin

dataout<=databuffer;

process(clock,reset)

beginif(reset='1')thendatabuffer<="0000";

elsif(clock'eventandclock='1')thenifdatabuffer="1000"then

databuffer<="0000";elsedatabuffer<=databuffer+'1';endif;endif;

endprocess;endbehavioral;3.2VHDL語(yǔ)言程序結(jié)構(gòu)以2選1多路選擇器電路為例

當(dāng)s=‘0’時(shí),

y的值為a的值,當(dāng)s=‘1’時(shí),

y的值為b的值。

s00001111a00110011b01010101y001101013.2.1實(shí)體說(shuō)明實(shí)體:描述電路器件外部情況及各信號(hào)端口的基本性質(zhì)外部特性:4個(gè)信號(hào)端口a,b,s:輸入信號(hào)端口y:輸出信號(hào)端口輸入輸出信號(hào)性質(zhì):STD_LOGIC

ENTITYmux21aIS

PORT(a,b,s:INSTD_LOGIC;

y:OUTSTD_LOGIC);ENDmux;例3-1

ENTITY

mux21aIS

PORT(a,b,s:INSTD_LOGIC;y:OUTSTD_LOGIC);

ENDENTITY

mux21a;

ARCHITECTURE

oneOFmux21aISBEGINy<=aWHENs=‘0’ELSEb;

ENDARCHITECTURE

one;實(shí)體結(jié)構(gòu)體實(shí)體名結(jié)構(gòu)體名3.2.1實(shí)體說(shuō)明庫(kù)說(shuō)明【例3-1】二選一MUX的VHDL描述。

--2to1mux21aVHDLLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux21aIS

PORT(a,b,s:INSTD_LOGIC;

y:OUTSTD_LOGIC);ENDmux21a;ARCHITECTUREstructureOFmux21aISSIGNALtemp:STD_LOGIC;BEGIN

實(shí)體說(shuō)明結(jié)構(gòu)體3.2VHDL語(yǔ)言程序結(jié)構(gòu)注釋3.2VHDL語(yǔ)言程序結(jié)構(gòu)

P0:PROCESS(a,b,s)VARIABLEtempl,temp2,temp3:STD_LOGIC;BEGIN

templ:=aAND(NOTs); temp2:=bANDs; temp3:=templORtemp2; temp<=temp3; y<=temp;ENDPROCESSP0;ENDstructure;進(jìn)程變量定義3.2.1實(shí)體說(shuō)明實(shí)體說(shuō)明的書寫格式如下所示:

ENTITY<實(shí)體名>IS[GENERIC(類屬說(shuō)明);][PORT(端口說(shuō)明);][實(shí)體語(yǔ)句部分;]END[ENTITY]<實(shí)體名>;其中“<>”中的部分是必選項(xiàng),“[]”中的部分是可選項(xiàng)。3.2.1實(shí)體說(shuō)明其中端口說(shuō)明格式為:

PORT(端口名1,端口名N:方向:數(shù)據(jù)類型)其中方向有:IN,OUT,INOUT,BUFFER,LINKAGE注意In信號(hào)只能被引用,不能被賦值out信號(hào)只能被賦值,不能被引用buffer信號(hào)可以被引用,也可以被賦值簡(jiǎn)單地說(shuō)

In

不可以出現(xiàn)在<=或:=的左邊

out不可以出現(xiàn)在<=或:=的右邊

buffer可以出現(xiàn)在<=或:=的兩邊

INOUT

BUFFERINOUT3.2.1實(shí)體說(shuō)明3.2.1實(shí)體說(shuō)明注意:數(shù)據(jù)類型名是端口信號(hào)的取值類型,有:BIT:位類型,取值0、1;BIT_VECTOR:位向量類型,是BIT的組合;INTEGER:整數(shù)類型,可用作循環(huán)指針或常數(shù);BOOLEAN:布爾類型,取值FALSE、TRUESTD_LOGIC:工業(yè)標(biāo)準(zhǔn)的邏輯類型,取值0、1、X、Z等;STD_LOGIC_VECTOR:是STD_LOGIC的組合;

3.2.1實(shí)體說(shuō)明STD_LOGIC:工業(yè)標(biāo)準(zhǔn)的邏輯類型,由IEEE1164標(biāo)準(zhǔn)制定的9值邏輯系統(tǒng)取值:0,1,U,Z,X,W,L,H,-

U:沒(méi)初始化

Z:高阻

X:不定

W:弱信號(hào)不定

L:弱信號(hào)0

H:弱信號(hào)1 -:Don’tcare3.2.1實(shí)體說(shuō)明例子(HalfAdd)

其內(nèi)部結(jié)構(gòu)將由Architecture來(lái)描述3.2.1實(shí)體說(shuō)明例如,4位加法器作為一個(gè)設(shè)計(jì)實(shí)體的實(shí)體說(shuō)明如下:

ENTITYadder_rippleIS

PORT(a,b:INSTD_LOGIC_VECTOR(3DOWNTO0);q:OUTSTD_LOGIC_VECTOR(3DOWNTO0);

Cout:OUTSTD_LOGIC);ENDadder_ripple;3.2.1實(shí)體說(shuō)明類屬說(shuō)明語(yǔ)句(GENERIC)

類屬說(shuō)明語(yǔ)句必須放在端口說(shuō)明語(yǔ)句之前,用以設(shè)定實(shí)體或元件的內(nèi)部電路結(jié)構(gòu)和規(guī)模,其書寫格式如下:

GENERIC(常數(shù)名:數(shù)據(jù)類型[:=設(shè)定值];┇常數(shù)名:數(shù)據(jù)類型[:=設(shè)定值]);例如:GENERIC(m:TIME:=5ns);指定了結(jié)構(gòu)體內(nèi)m的值為5ns。3.2.2結(jié)構(gòu)體結(jié)構(gòu)體(Architecture)是對(duì)實(shí)體功能的具體描述。結(jié)構(gòu)體主要是描述實(shí)體的硬件結(jié)構(gòu)、元件之間的互連關(guān)系、實(shí)體所完成的邏輯功能以及數(shù)據(jù)的傳輸變換等方面的內(nèi)容。一個(gè)結(jié)構(gòu)體的書寫格式如下:

ARCHITECTURE<結(jié)構(gòu)體名>OF<實(shí)體名>IS[說(shuō)明語(yǔ)句;]BEGIN<功能描述語(yǔ)句;>END<結(jié)構(gòu)體名>;描述電路器件的內(nèi)部邏輯功能和電路結(jié)構(gòu)可以有多種不同的描述方式行為描述方式(behavioral)

數(shù)據(jù)流描述方式(dataflow)

結(jié)構(gòu)描述方式(structure)3.2.2結(jié)構(gòu)體功能描述語(yǔ)句3.2.2結(jié)構(gòu)體Arcthitecture

格式:

Arcthitecture

結(jié)構(gòu)體名of

實(shí)體名is[定義語(yǔ)句]內(nèi)部信號(hào)、常數(shù)、元件、數(shù)據(jù)類型、函數(shù)等的定義

begin[并行處理語(yǔ)句和block、process、function、procedure]

end構(gòu)造體名;一個(gè)實(shí)體中可以具有一個(gè)結(jié)構(gòu)體,也可以具有幾個(gè)結(jié)構(gòu)體。一個(gè)實(shí)體內(nèi)部若有幾個(gè)結(jié)構(gòu)體,則結(jié)構(gòu)體名不能重復(fù)。3.2.2結(jié)構(gòu)體3.2.2結(jié)構(gòu)體行為描述一般采用進(jìn)程語(yǔ)句(process)描述3.2.2結(jié)構(gòu)體【例3-2】一個(gè)RS觸發(fā)器的結(jié)構(gòu)體的行為描述方式

ARCHITECTURErs_behavOFrsffISBEGINq<=NOT(qbANDset);

qb<=NOT(qANDreset);

ENDrs_behav;是一個(gè)RS觸發(fā)器的結(jié)構(gòu)體的行為描述方式。3.2.2結(jié)構(gòu)體3.2.2結(jié)構(gòu)體元件例化時(shí)端口映射方式1:位置對(duì)應(yīng)方式元件例化時(shí)端口映射方式2:名字直接對(duì)應(yīng)3.2.2結(jié)構(gòu)體【例】一個(gè)RS觸發(fā)器的結(jié)構(gòu)體的結(jié)構(gòu)描述方式

ARCHITECTURErs_struOFrsffISCOMPONENTnand2

PORT(a,b:INBIT;

c:OUTBIT);

ENDCOMPONENT;

BEGINu1:nand2PORTMAP(a=>set,b=>qb,c=>q);

u2:nand2PORTMAP(a=>reset,b=>q,c=>qb);

ENDrs_stru;3.2.2結(jié)構(gòu)體3.2.2結(jié)構(gòu)體數(shù)據(jù)流描述【例3-4】使用RTL(數(shù)據(jù)流)描述方式的全加器VHDL程序

ENTITYfull_adderISGENERIC(tpd:TIME:=5ns)

PORT(a,b,Cin:INSTD_LOGIC;

S,Co:OUTSTD_LOGIC);ENDfull_adder;ARCHITECTURErtlOFfull_adderISSIGNALh:STD_LOGIC;--內(nèi)部信號(hào)定義

BEGIN h<=aXORbAFTERtpd; S<=hXORCinAFTERtpd; Co<=(aANDb)OR(hANDCin)AFTER2*tpd;ENDrtl;3.2.2結(jié)構(gòu)體3.2.2結(jié)構(gòu)體三種描述方式的比較3.2.3包集合、庫(kù)及配置除了entity(實(shí)體)和architecture(結(jié)構(gòu)體)外還有另外三個(gè)可以獨(dú)立進(jìn)行編譯的設(shè)計(jì)單元Package(包集合):存放信號(hào)定義、常數(shù)定義、數(shù)據(jù)類型、元件語(yǔ)句、函數(shù)定義和過(guò)程定義。Library庫(kù):內(nèi)含各類包定義、實(shí)體、構(gòu)造體等configuration(配置)描述層與層之間的連接關(guān)系以及實(shí)體與構(gòu)造體之間關(guān)系。3.2.3包集合、庫(kù)及配置VHDL中的設(shè)計(jì)單元(可以獨(dú)立編譯)3.2.3包集合、庫(kù)及配置Library庫(kù)的概念庫(kù):數(shù)據(jù)的集合,用來(lái)存放已編譯過(guò)的設(shè)計(jì)單元(包括實(shí)體說(shuō)明、結(jié)構(gòu)體、配置說(shuō)明、包集合)庫(kù)中內(nèi)容可以用作其他VHDL描述的資源。在VHDL語(yǔ)言中,庫(kù)的說(shuō)明總是放在設(shè)計(jì)單元的最前面:LIBRARY庫(kù)名;USE庫(kù)名.程序包名.項(xiàng)目名;第一個(gè)語(yǔ)句是LIBRARY庫(kù)名,表明使用什么庫(kù)。另外還要說(shuō)明設(shè)計(jì)者要使用的是庫(kù)中哪一個(gè)包集合以及包集合中的項(xiàng)目名。這樣就是第2個(gè)語(yǔ)句的格式。3.2.3包集合、庫(kù)及配置在VHDL語(yǔ)言中庫(kù)大致有5種:STD庫(kù)--VHDL的標(biāo)準(zhǔn)庫(kù)IEEE庫(kù)--VHDL的標(biāo)準(zhǔn)庫(kù)的擴(kuò)展面向ASIC的庫(kù)--不同的工藝不同公司自定義的庫(kù)(WORK庫(kù))普通用戶自己的庫(kù)除WORK庫(kù)外,其他4類庫(kù)在使用前都要首先進(jìn)行說(shuō)明3.2.3包集合、庫(kù)及配置Package包集合的概念為了使一組數(shù)據(jù)類型、常量、子程序等被多個(gè)實(shí)體公用,VHDL提供了包集合的機(jī)制。包集合就像是公用的工具箱,各個(gè)實(shí)體都可使用其中定義的工具。為了方便設(shè)計(jì),VHDL提供了一些標(biāo)準(zhǔn)的包集合。

LIBRARYIEEE;

--打開IEEE庫(kù)

USEIEEE.STD_LOGIC_1164.ALL;--調(diào)用其中的STD_LOGIC_1164包集合3.2.3包集合、庫(kù)及配置Package包集合用戶也可以自定義包集合包集合結(jié)構(gòu)如下所示:

PACKAGE包集合名IS[說(shuō)明語(yǔ)句]END包集合名;PACKAGEBODY包集合名IS[說(shuō)明語(yǔ)句]ENDBODY;3.2.3包集合、庫(kù)及配置【例3-10】包集合的例子。

--包集合說(shuō)明

PACKAGEexampleISTYPEalu_op

IS(add,sub,mul,div,eq,gt,lt);--枚舉類型

CONSTANTpi:REAL:=3.1415926;--常量

CONSTANTdelayl:TIME;

COMPONENTnand2--元件

PORT(a,b:INBIT;

c:OUTBIT);

ENDCOMPONENT;

FUNCTIONmean(a,b,c:REAL)RETURNREAL;--函數(shù)

ENDexample;3.2.3包集合、庫(kù)及配置【例3-10】包集合的例子。--包集合體PACKAGEBODYexampleISCONSTANTdelay1:TIME:=15ns;--定義延時(shí)常量的值

FUNCTIONmean(a,b,c:REAL)RETURNREALISBEGINRETURN(a+b+c)/3.0;--求均值

ENDmean;ENDexample;自定義的包集合和標(biāo)準(zhǔn)包集合一樣,也要通過(guò)調(diào)用才能使用。如要用上例中的example包集合,則要在實(shí)體說(shuō)明前加上語(yǔ)句:USEWORK.example.ALL;3.2.3包集合、庫(kù)及配置配置(Configuration)描述層與層之間的連接關(guān)系,以及實(shí)體與結(jié)構(gòu)之間的連接關(guān)系。設(shè)計(jì)者可以利用這種配置語(yǔ)句來(lái)選擇不同的結(jié)構(gòu)體,使其與要設(shè)計(jì)的實(shí)體相對(duì)應(yīng)。在仿真某一個(gè)實(shí)體時(shí),可以利用配置來(lái)選擇各種不同的結(jié)構(gòu)體,進(jìn)行性能對(duì)比試驗(yàn),以得到性能最佳的結(jié)構(gòu)體。配置語(yǔ)句的基本書寫格式如下:

CONFIGURATION配置名OF實(shí)體名IS[語(yǔ)句說(shuō)明]END配置名;VHDL中的結(jié)構(gòu)關(guān)系結(jié)構(gòu)關(guān)系3.4VHDL語(yǔ)法基礎(chǔ)3.4.1標(biāo)識(shí)符和保留字基本標(biāo)識(shí)符主要由字母、數(shù)字以及下劃線組成,標(biāo)識(shí)符的書寫要遵守以下規(guī)則:①字符必須以英文字母開頭;②標(biāo)識(shí)符的最后一個(gè)字符不能是下劃線;③在標(biāo)識(shí)符中不允許出現(xiàn)連續(xù)2個(gè)下劃線;④VHDL的保留關(guān)鍵字不能做一般的標(biāo)識(shí)符使用。標(biāo)識(shí)符中不區(qū)別大小寫,但通常有較好語(yǔ)言素質(zhì)的設(shè)計(jì)人員書寫VHDL程序時(shí)都有自己的大小寫體的書寫風(fēng)格。下面是幾個(gè)符合規(guī)范的標(biāo)識(shí)符:

Three_State_GateSel_7DROM_2716下面是幾個(gè)不符號(hào)規(guī)范的標(biāo)識(shí)符:

_TEXT_FILE--標(biāo)識(shí)符必須以字母開頭,_開頭錯(cuò)誤

8D10B--標(biāo)識(shí)符必須以字母開頭,數(shù)字開頭錯(cuò)誤

TOOL--Bar--不能出現(xiàn)二個(gè)連續(xù)下劃線

SELECT--保留關(guān)鍵字不能做標(biāo)識(shí)符用

Res_Clk_--下劃線不能在標(biāo)識(shí)符最后

Date-Input--字母間不是下劃線3.4.1標(biāo)識(shí)符和保留字3.4.2數(shù)據(jù)對(duì)象對(duì)象object對(duì)客觀實(shí)體的抽象和概括在VHDL語(yǔ)言中,數(shù)據(jù)對(duì)象有以下4種類型:常數(shù)(CONSTANT)信號(hào)(SIGNAL)變量(VARIABLE)文件(FILES),其中文件類型是VHDL’93標(biāo)準(zhǔn)中新加入的。

1.常量(CONSTANT)常量是指那些在設(shè)計(jì)描述中不發(fā)生變化的值。常量是全局變量,在結(jié)構(gòu)體描述、程序包說(shuō)明、實(shí)體說(shuō)明、過(guò)程說(shuō)明、函數(shù)調(diào)用說(shuō)明和進(jìn)程說(shuō)明中使用。使用前必須對(duì)常量進(jìn)行說(shuō)明,常量說(shuō)明的格式如下:CONSTANT常量名:數(shù)據(jù)類型:=表達(dá)式;1.常量(CONSTANT)例如:

CONSTANTWIDTH:INTEGER:=8; --寄存器的寬度CONTANTVCC:REAL:=5.0;--指定供電電源的電壓CONTANTDBUS:BIT_VECTOR:=“10110011”;--給出總線數(shù)據(jù)向量注意:數(shù)值和單位之間要留空格常量一旦賦值之后,在程序中就不能再改變了。2.變量(VARIABLE)變量是局部變量變量只能在進(jìn)程語(yǔ)句、函數(shù)語(yǔ)句以及過(guò)程語(yǔ)句中使用。變量的說(shuō)明也只能在進(jìn)程語(yǔ)句、函數(shù)語(yǔ)句以及過(guò)程語(yǔ)句的相應(yīng)說(shuō)明區(qū)域進(jìn)行。變量的書寫格式為:

VARIABLE變量名:數(shù)據(jù)類型[:=表達(dá)式];例如:

VARIABLEresult:STD_LOGIC:=‘0’;--變量賦初值

VARIABLEx,y,z:INTEGER;VARIABLEcount:INTEGERRANGE0TO255:=10;2.變量(VARIABLE)在VHDL語(yǔ)言中,變量的使用規(guī)則和限制范圍說(shuō)明如下:變量賦值是直接非預(yù)設(shè)的,在某一時(shí)刻僅包含一個(gè)值;變量賦值和初始化賦值符號(hào)用“:=”表示;變量不能用于硬件連線和存儲(chǔ)元件;在仿真模型中,變量用于高層次建模;在系統(tǒng)綜合時(shí),變量用于計(jì)算,作為索引載體和數(shù)據(jù)的暫存;在進(jìn)程中,變量的使用范圍在進(jìn)程之內(nèi)。若將變量用于進(jìn)程之外,必須將該變量先賦給一個(gè)相同類型的信號(hào),用信號(hào)在進(jìn)程之間傳遞數(shù)據(jù)。3.信號(hào)(SIGNAL)在電子電路內(nèi),是用連線將元件或單元連結(jié)起來(lái)構(gòu)成系統(tǒng)。在VHDL語(yǔ)言中,信號(hào)起著連線的作用,信號(hào)將實(shí)體與實(shí)體、元件與元件連結(jié)起來(lái)構(gòu)成系統(tǒng)。一般將信號(hào)視為實(shí)際硬件系統(tǒng)中連線的抽象。信號(hào)是全局變量,一般在程序包、實(shí)體說(shuō)明、結(jié)構(gòu)體中都可以對(duì)信號(hào)進(jìn)行定義說(shuō)明,各進(jìn)程之間的通信可以借助信號(hào)來(lái)實(shí)現(xiàn)。

3.信號(hào)(SIGNAL)信號(hào)說(shuō)明語(yǔ)句格式如下:SIGNAL信號(hào)名:數(shù)據(jù)類型、約束條件[:=初始值];

信號(hào)賦值語(yǔ)句格式如下:信號(hào)名<=表達(dá)式;例如:

A<=BAFTER10ns;--有一定的延時(shí)

A<=expression_B;A<=expression_BAFTER10ns;--延時(shí)10ns變量與信號(hào)的差異1、賦值方式不同:變量:=表達(dá)式;信號(hào)<=表達(dá)式;2、硬件實(shí)現(xiàn)的功能不同信號(hào)代表電路單元、功能模塊間的互聯(lián),代表實(shí)際的硬件連線變量代表電路單元內(nèi)部的操作,代表暫存的臨時(shí)數(shù)據(jù)3、有效范圍不同信號(hào)(全局量):程序包、實(shí)體、結(jié)構(gòu)體變量(局部量):進(jìn)程、子程序在進(jìn)程和子程序中,信號(hào)只能被使用,不能被定義說(shuō)明變量與信號(hào)的差異4、賦值行為的不同:信號(hào)賦值延時(shí)更新數(shù)值,一般生成時(shí)序電路變量賦值立即更新數(shù)值,一般生成組合電路5、信號(hào)的多次賦值一個(gè)進(jìn)程中,只最后一次賦值有效多個(gè)進(jìn)程中變量與信號(hào)的差異由于信號(hào)賦值的延時(shí)性,賦新值發(fā)生在進(jìn)程結(jié)束時(shí),所以結(jié)果是a,b的值互換。由于變量賦值的立即更新,所以結(jié)果是a,b的值均為b。3.4.3數(shù)據(jù)類型數(shù)據(jù)類型舉例整數(shù)

+136,+12456,-678實(shí)數(shù)(浮點(diǎn)數(shù))

-2.0,+3.5,-1.0E38

BIT

‘0’,‘1’一定用單引號(hào)

BIT_VECTOR“10101111”,X“00BB”

STD_LOGIC

‘0’,‘1’,‘L’,‘H’…等9種取值布爾量(BOOLEAN)只有二種取值情況‘0’和‘1’或TRUE和FALSESTD_LOGIC_VECTOR“01100110”(STD_LOGIC數(shù)組)字符和字符串A~Z,0~9,a~z,“STRING”物理類型

Time_unitns(納秒)ms(毫秒)錯(cuò)誤等級(jí)

note,warning,error自然數(shù)、正整數(shù)大于0或等于0的整數(shù)3.4.3數(shù)據(jù)類型(1)整數(shù)在VHDL語(yǔ)言中整數(shù)的范圍是-(231-1)~(231-1),即-2147483647~2147483647。整數(shù)可以用一系列二進(jìn)制數(shù)來(lái)表示,但不能看做是BIT_VECTOR或STD_LOGIC_VECTOR。(2)實(shí)數(shù)實(shí)數(shù)類型也稱浮點(diǎn)數(shù)類型,規(guī)定的浮點(diǎn)數(shù)范圍是-1.0E+38~+1.0E+38。注意有的數(shù)字可用實(shí)數(shù)表示,也可用整數(shù)表示。例如+99.0是實(shí)數(shù),+99是整數(shù),兩數(shù)雖然數(shù)值相同,但類型不同。3.4.3數(shù)據(jù)類型(3)BIT和BIT_VECTORBIT型又稱位型,其取值只有‘0’和‘1’。而BIT_VECTOR實(shí)際上是BIT的數(shù)組。例如“01110111”或X“07FA”是BIT_VECTOR型數(shù)據(jù),用來(lái)表示一個(gè)信號(hào)的值或用來(lái)表示總線信號(hào)的數(shù)值。由于BIT_VECTOR僅能表示邏輯“0”和“1”不能表示高阻、隨意項(xiàng)、未知常用狀態(tài),實(shí)際可綜合的程序中很少用。在可綜合的VHDL語(yǔ)言程序中,實(shí)際上都采用STD_LOGIC和STD_LOGIC_VECTOR型數(shù)據(jù)。3.4.3數(shù)據(jù)類型(4)布爾量布爾量具有兩種狀態(tài),“真”或者“假”。雖然布爾量也是二值枚舉量,但它和BIT型不同,沒(méi)有數(shù)值的含義,也不能進(jìn)行算術(shù)運(yùn)算,但它能進(jìn)行關(guān)系運(yùn)算。例如,它可以在IF語(yǔ)句中被測(cè)試,測(cè)試結(jié)果產(chǎn)生一個(gè)布爾量TRUE或者FALSE。一個(gè)布爾量常用來(lái)表示信號(hào)的狀態(tài)或者總線上的情況。如果某個(gè)信號(hào)或者變量被定義為布爾量,那么在仿真中將自動(dòng)地對(duì)其賦值進(jìn)行核查。一般這一類型數(shù)據(jù)的初始值總為FALSE。3.4.3數(shù)據(jù)類型(5)STD_LOGIC和STD_LOGIC_VECTORSTD_LOGIC是VHDL語(yǔ)言中已定義的標(biāo)準(zhǔn)邏輯變量,有9種定義的可取值。例如:‘U’,‘X’,‘0’,‘1’,‘Z’,‘W’,‘L’,‘H’,‘-’其中’U’未初始化;‘X’強(qiáng)迫未知:‘0’強(qiáng)制0;‘1’強(qiáng)制1;‘Z’高阻;‘W’弱未知;‘L’為弱0;‘H’為弱1;‘-’為隨意。對(duì)邏輯綜合而言僅‘0’,‘1’,‘Z’和‘-’有意義。邏輯綜合是將電路的行為級(jí)描述,特別是RTL級(jí)描述轉(zhuǎn)化成為門級(jí)表達(dá)的過(guò)程。

STD_LOGIC_VECTOR是STD_LOGIC的數(shù)組。二者賦值只能是‘0’,‘1’或由二進(jìn)制數(shù)組成的字符串“11001111”,不能賦16進(jìn)制或8進(jìn)制數(shù)。

3.4.3數(shù)據(jù)類型(6)字符和字符串字符在VHDL語(yǔ)言中也認(rèn)為是一種數(shù)據(jù)類型,使用時(shí)要用單引號(hào)。例如‘A’,‘a(chǎn)’,‘B’,‘b’。注意單引號(hào)內(nèi)字母大小寫所代表的意義不同,‘1’和‘2’只是個(gè)字符量而已,不具有數(shù)值含義。VHDL語(yǔ)言中的字符串都帶有雙引號(hào),例如“VHDL”,“ABCDE”,這些帶有雙引號(hào)的字符串常用于結(jié)構(gòu)說(shuō)明或程序提示。3.4.3數(shù)據(jù)類型(7)物理型數(shù)據(jù)表示時(shí)間的數(shù)據(jù)為物理型數(shù)據(jù)。這一數(shù)據(jù)類型在仿真時(shí)將要用到,邏輯綜合不用。物理型數(shù)據(jù)可視為與物理單位有關(guān)的整數(shù)。能方便地用來(lái)表示、分析校驗(yàn)量綱。例如,下面的語(yǔ)句是STANDARD程序包給出的子句,它表示出time這個(gè)物理型數(shù)據(jù)的量綱和進(jìn)位關(guān)系

TYPEtimeIS-2147483647TO2147483646UNITSfs;ps=1000fs;ns=1000ps;μs=1000ns;ms=1000μs;sec=1000ms;min=60sec;hr=60min;ENDUNITS3.4.4數(shù)據(jù)類型的轉(zhuǎn)換在VHDL語(yǔ)言中數(shù)據(jù)類型的定義是很嚴(yán)格的,對(duì)于某一數(shù)據(jù)類型的變量、信號(hào)、常量及文件賦值時(shí),數(shù)據(jù)類型必須一致。為了正確地進(jìn)行代入或賦值,數(shù)據(jù)類型轉(zhuǎn)換常常是非常必要的。為了實(shí)行類型轉(zhuǎn)換,VHDL語(yǔ)言的程序包中提供了一些轉(zhuǎn)換函數(shù)。表3-5程序包中轉(zhuǎn)換函數(shù)及其功能

程序包名轉(zhuǎn)換函數(shù)名轉(zhuǎn)換函數(shù)功能STD_LOGIC_1164TO_STDLOGICVECTOR(A)TO_BITVECTOR(A)TO_STDLOGIC(A)TO_BIT(A)由BIT_VECTOR轉(zhuǎn)換為STD_LOGIC_VECTOR

由STD_LOGIC_VECTOR轉(zhuǎn)換為BIT_VECTOR

由BIT轉(zhuǎn)換成STD_LOGIC

由STD_LOGIC轉(zhuǎn)換成BITSTD_LOGIC_ARITHCONV_STD_LOGIC_VECTOR(A,位長(zhǎng))CONV_INTEGER(A)由INTEGER,UNSDGNED,SIGNED轉(zhuǎn)換成指定位長(zhǎng)的STD_LOGIC_VECTOR

由UNSIGNED,SIGNED轉(zhuǎn)換成INTEGERSTD_LOGIC_UNSIGNEDCONV_INTEGER(A)由STD_LOGIC_VECTOR轉(zhuǎn)換成INTEGER類型轉(zhuǎn)換實(shí)例VARIABLEI:INTEGER;--變量I定義為整型。VARIABLER:REAL;--變量R定義為實(shí)型。I:=INTEGER(R);--把R轉(zhuǎn)為整型后賦給整型變量I。R:=REAL(I);--把I轉(zhuǎn)為實(shí)型后賦給實(shí)型變量R。SIGNALa:BIT_VECTOR(11DOWNTO0);SIGNALb:STD_LOGIC_VECTOR(11DOWNTO0);a<=x“A8”;--十六進(jìn)制值可賦予位向量b<=x“A8”;--語(yǔ)法錯(cuò),十六進(jìn)制值不能賦予 STD_LOGIC_VECTOR類型b<=T0_STDLOGICVECTOR(X“AF7”);--將位向量轉(zhuǎn)換成標(biāo)準(zhǔn)邏輯向量b<=TO_STDLOGICVECTOR(O“5177”);--將八進(jìn)制表示位向量轉(zhuǎn)換成標(biāo)準(zhǔn)邏輯向量b<=TO_STDLOGICVECTOR(B“1010_1111_0111”);--轉(zhuǎn)換為標(biāo)準(zhǔn)邏輯向量3.4.5運(yùn)算操作符在VHDL語(yǔ)言中共有4類運(yùn)算操作符,邏輯運(yùn)算關(guān)系運(yùn)算算術(shù)運(yùn)算并置運(yùn)算需要注意的是操作數(shù)的類型應(yīng)該和操作符所要求的類型一致。運(yùn)算操作符的優(yōu)先級(jí)。1.邏輯運(yùn)算符VHDL語(yǔ)言中的邏輯運(yùn)算符共有7種:AND——與OR——或NOT——取反NAND——與非NOR——或非XOR——異或XNOR——異或非必須注意的是,運(yùn)算符的左邊和右邊,以及代入信號(hào)的數(shù)據(jù)類型必須是相同的,否則編譯時(shí)會(huì)給出出錯(cuò)警告。適用數(shù)據(jù)類型:STD_LOGICBITSTD_LOGIC_VECTOR布爾型2.算術(shù)運(yùn)算符在VHDL語(yǔ)言中,有如下10種算術(shù)運(yùn)算符:

+加;

-減;*乘;/除;

MOD求模;

REM取余;

ABS取絕對(duì)值。

**指數(shù);

+正;(一元運(yùn)算)-負(fù);(一元運(yùn)算)可以為任何數(shù)據(jù)類型(整數(shù)、實(shí)數(shù)、物理量)具有相同的數(shù)據(jù)類型可以同為整數(shù)或?qū)崝?shù)。物理量可以被整數(shù)或?qū)崝?shù)相乘或相除,其結(jié)果仍為一個(gè)物理量求模和取余的操作數(shù)必須是同一整數(shù)類型數(shù)據(jù)。左操作數(shù)可以是任意整數(shù)或?qū)崝?shù),而右操作數(shù)應(yīng)為一個(gè)整數(shù)。2.算術(shù)運(yùn)算符實(shí)際上能夠真正綜合邏輯電路的算術(shù)運(yùn)算符只有“+”、“-”、“*”。在數(shù)據(jù)位較長(zhǎng)的情況下,使用算術(shù)運(yùn)算符進(jìn)行運(yùn)算,特別是使用乘法運(yùn)算符時(shí),應(yīng)非常慎重。因?yàn)閷?duì)于16位的乘法運(yùn)算,綜合時(shí)邏輯門電路會(huì)超過(guò)2000個(gè)門。3.關(guān)系運(yùn)算符在VHDL語(yǔ)言中,有如下6種關(guān)系運(yùn)算符:

=等于;

/=不等于;

<小于;

<=小于等于;

>大于;>=大于等于。在關(guān)系運(yùn)算符的左、右兩邊是運(yùn)算操作符,不同的關(guān)系運(yùn)算符對(duì)兩邊的操作數(shù)的數(shù)據(jù)類型有不同的要求左、右兩邊的操作數(shù)的類型必須相同,但位長(zhǎng)度不一定相同等號(hào)和不等號(hào)可以適用于所有類型的數(shù)據(jù)可使用于整數(shù)和實(shí)數(shù)、位等枚舉類型以及位向量等數(shù)組類型3.關(guān)系運(yùn)算符在利用關(guān)系運(yùn)算符對(duì)位向量數(shù)據(jù)進(jìn)行比較時(shí),比較過(guò)程是從最左邊的位開始,自左至右按位進(jìn)行比較的。在位長(zhǎng)不同的情況下,只能按自左至右的比較結(jié)果作為關(guān)系運(yùn)算的結(jié)果。例如,對(duì)2位和3位的位向量進(jìn)行比較:

SIGNALa:STD_LOGIC_VECTOR(2DOWNTO0);

SIGNALb:STD_LOGIC_VECTOR(1DOWNTO0);

a<=“011”;

b<=“11”;

IF(a<b)THEN┇ELSE┇ENDIF;4.并置運(yùn)算符并置運(yùn)算符“&”用于位和向量的連接,就是將運(yùn)算符右邊的內(nèi)容接在左邊的內(nèi)容之后形成一個(gè)新的數(shù)組。例如:ARCHITECTUREexampleOFshiftrlISBEGINPROCESS(a)BEGINo1<=‘0’&a(7DOWNTO1);--右移一位o2<=a(6DOWNTO0)&‘0’;--左移一位o3<=a&b;--合并a,bENDPROCESS;ENDshiftrl;3.3VHDL常用語(yǔ)句VHDL的描述語(yǔ)句分為并行語(yǔ)句和順序語(yǔ)句兩種。1、并行處理(concurrent)語(yǔ)句的執(zhí)行與書寫順序無(wú)關(guān),并行塊內(nèi)的語(yǔ)句是同時(shí)執(zhí)行的2、順序處理(sequential)語(yǔ)句的執(zhí)行按書寫的先后次序,從前到后順序執(zhí)行。這種方式和其他普通編程語(yǔ)言(如c,pascal)是一樣的。3.3VHDL常用語(yǔ)句Architecture中的語(yǔ)句及子模塊之間是并行處理的子模塊block中的語(yǔ)句是并行處理的子模塊process中的語(yǔ)句是順序處理的子模塊subprogram中的function和procedure是順序處理的Arcthitecture

構(gòu)造體名of

實(shí)體名is[定義語(yǔ)句]內(nèi)部信號(hào)、常數(shù)、元件、數(shù)據(jù)類型、函數(shù)等的定義

begin[并行處理語(yǔ)句和block、process、function、procedure]

end構(gòu)造體名;內(nèi)部順序處理Architecture中的BlockBlock格式

塊名:

BLOCK[定義語(yǔ)句]

begin[并行處理語(yǔ)句concurrentstatement]

endblock

塊名Architecture中的Block條件Block格式

塊名:

BLOCK

[(布爾表達(dá)式)]

[定義語(yǔ)句]

begin[并行處理語(yǔ)句concurrentstatement[信號(hào)]<=

guarded[信號(hào),延時(shí)];

endblock

塊名Architecture中的BlockBlock例子

myblock1:

block(clk=‘1’)

signal:qin:bit:=‘0’;

begin

qout<=guardedqin;

endblockmyblock1

myblock2:

block

begin

qout<=qin;

endblock

myblock2Architecture中的processProcess格式[進(jìn)程名:]

process[(觸發(fā)信號(hào)列表)][定義語(yǔ)句;]

begin[串行處理語(yǔ)句sequentialstatement;]

endprocessArchitecture中的processprocess例子

exp1:

process

(clk,qin)

variable:qin:bit:=‘0’;

begin

qout<=qin;

endprocessexp2:

process

begin

waiton

clk,qin;

qout<=qin;

endprocessArchitecture中的subprogramFunction(函數(shù))格式:

function

函數(shù)名(參數(shù)1,參數(shù)2…...)

[定義語(yǔ)句]

return

數(shù)據(jù)類型名

is[定義語(yǔ)句]

begin[順序執(zhí)行語(yǔ)句]

return[返回變量名]

end函數(shù)名

Architecture中的subprogramFunction例子functionmax(a,b:bit)

returnbooleanisvariable:flag:boolean;beginif(a=b)thenflag<=true;

endifreturnflag;endmaxFunction中的參數(shù)不用說(shuō)明方向(因?yàn)橹挥幸环N方向in)Architecture中的subprogramprocedure(過(guò)程)格式:

procedure

過(guò)程名(參數(shù)1,參數(shù)2…...)is[定義語(yǔ)句]

begin[順序執(zhí)行語(yǔ)句]

end

過(guò)程名

Architecture中的subprogramProcedure例子proceduremax(a,b:inbit;

flag:outboolean)isbeginif(a=b)thenflag<=true;

endifendmax;3.3.1并行語(yǔ)句在VHDL語(yǔ)言中,并行語(yǔ)句主要包括:并行信號(hào)賦值語(yǔ)句;塊語(yǔ)句;進(jìn)程語(yǔ)句;過(guò)程調(diào)用語(yǔ)句;參數(shù)傳遞語(yǔ)句(也稱GENERIC語(yǔ)句);元件例化語(yǔ)句;生成語(yǔ)句;并行斷言語(yǔ)句。1.并行信號(hào)賦值語(yǔ)句在VHDL語(yǔ)言中,并行信號(hào)賦值語(yǔ)句可分為以下3個(gè)子類型:并發(fā)信號(hào)賦值語(yǔ)句;條件信號(hào)賦值語(yǔ)句;選擇信號(hào)賦值語(yǔ)句。上面信號(hào)賦值語(yǔ)句的共同特點(diǎn)就是語(yǔ)句執(zhí)行都是并發(fā)的。并行處理語(yǔ)句concurrentstatement信號(hào)賦值操作符號(hào)“<=”進(jìn)行信號(hào)賦值操作的,它可以用在順序執(zhí)行語(yǔ)句中,也可以用在并行處理語(yǔ)句中注意

1、用在并行處理語(yǔ)句中時(shí),符號(hào)<=右邊的值是此條語(yǔ)句的敏感信號(hào),即符號(hào)<=右邊的值發(fā)生變化就會(huì)重新激發(fā)此條賦值語(yǔ)句,也即符號(hào)<=右邊的值不變化時(shí),此條賦值語(yǔ)句就不會(huì)執(zhí)行。如果符號(hào)<=右邊是常數(shù)則賦值語(yǔ)句一直執(zhí)行。

2、用在順序執(zhí)行語(yǔ)句中時(shí),沒(méi)有以上說(shuō)法。并行處理語(yǔ)句concurrentstatement賦值語(yǔ)句例子Myblock:Blockbegin

clr<=‘1’after10ns;

clr<=‘0’after20ns;endblockmyblockprocessbegin

clr<=‘1’after10ns;

clr<=‘0’after20ns;endblockmyblock程序執(zhí)行10ns后clr

為1,又過(guò)10ns后0賦給了clr,此時(shí)clr

以前的值1并沒(méi)有清掉,clr將出現(xiàn)不穩(wěn)定狀態(tài)程序執(zhí)行10ns后clr

為1,又過(guò)20ns后clr的值變?yōu)?,條件信號(hào)賦值語(yǔ)句條件信號(hào)賦值語(yǔ)句屬于并發(fā)描述語(yǔ)句的范疇,可以根據(jù)不同的條件將不同的表達(dá)式的值賦給目標(biāo)信號(hào)。條件信號(hào)賦值語(yǔ)句書寫的一般格式為:

目標(biāo)信號(hào)<=表達(dá)式1WHEN條件1ELSE

表達(dá)式2WHEN條件2ELSE

表達(dá)式3WHEN條件3ELSE…

表達(dá)式n-1WHEN條件n-1ELSE

表達(dá)式n;并行處理語(yǔ)句concurrentstatement條件信號(hào)帶入語(yǔ)句例子Blockbegin

sel<=b&a;q<=ainwhensel=“00”elsebinwhensel=“01”elsecinwhensel=“10”elsedinwhensel=‘11”elsexx;

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論