




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第3章硬件描述語言VHDL基礎自20世紀60年代以來,數字集成電路已經歷了從SSI、MSI、LSI到VLSI的發展過程。數字集成電路按照芯片設計方法的不同大致可以分為三類:①通用型中、小規模集成電路;②用軟件組態的大規模、超大規模集成電路,如微處理器、單片機等;③專用集成電路(ASIC-ApplicationSpecificIntegratedCircuit)。
ASIC是一種專門為某一應用領域或為專門用戶需要而設計、制造的LSI或VLSI電路,它可以將某些專用電路或電子系統設計在一個芯片上,構成單片集成系統。一、PLD發展概況①PLD中陣列交叉點的邏輯表示PLD邏輯陣列中交叉點的連接方式采用圖7-7所示的幾種邏輯表示。(a)表示實體連結,就是行線和列線在這個交叉點處實在連接,這個交叉點是不可編程點,在交叉點處打上實心點。①PLD中陣列交叉點的邏輯表示PLD邏輯陣列中交叉點的連接方式采用圖7-7所示的幾種邏輯表示。(b)表示可編程連接。無論×或表示該符號所在行線和列線交叉處是可編程點,具有一個可編程單元。?①PLD中陣列交叉點的邏輯表示PLD邏輯陣列中交叉點的連接方式采用圖7-7所示的幾種邏輯表示。在采用熔絲工藝的PLD器件中,器件出廠后用戶編程之前,所有可編程點處的熔絲都處于接通狀態,習慣上都用×表示熔絲接通,因此可編程點上處處都打×或。?①PLD中陣列交叉點的邏輯表示PLD邏輯陣列中交叉點的連接方式采用圖7-7所示的幾種邏輯表示。PLD器件被用戶編程后,可編程點上的熔絲有的燒斷,有的接通。編程后可在編程點上仍打有×,這時的×表示可編程點被編程后熔絲接通。①PLD中陣列交叉點的邏輯表示PLD邏輯陣列中交叉點的連接方式采用圖7-7所示的幾種邏輯表示。熔絲燒斷的可編程點上的×消失,行線和列線不相接,這種情況用圖(c)表示。
②與門及或門的表示≥1ABCYYABCYABC&ABCYYABC與陣列如圖(a)所示。在二極管與門的各支路與輸出之間接入熔絲。熔絲保留的各支路的輸入為有效輸入,輸出F是熔絲保留各支路輸入的與邏輯函數。圖(b)是PLD表示。圖(a)和圖(b)是熔絲全部保留的與陣列表示情況。圖(c)是燒斷3個熔絲的情況,圖(d)是圖(c)的PLD表示。PLD中與陣列的缺省表示在PLD器件與陣列中常看到下圖中給出的幾種表示。輸出為Z1的與門4個輸入變量全部被編程后輸入,4個交叉點均畫×。因此,Z2為Z1的缺省表示。這時的陣列交叉點上均未畫×,而在與門符號內卻畫有×。PLD中與陣列的缺省表示輸出為Z3的與門輸入陣列交叉點上無×,與門符號內也無×,這是浮動狀態的邏輯表示。浮動輸入狀態代表與陣列編程后熔絲全部熔斷,4個輸入全都不同與門相接,相當與門輸入懸空,與門輸出為高電平,即輸出邏輯“1”②與門及或門的表示③輸入緩沖器和反饋緩沖器在PLD中有二種特殊的緩沖器輸入緩沖器和反饋緩沖器,二種緩沖器有相同的電路構成它們是單輸入、雙輸出的緩沖器單元,一個是高有效輸出端,即同極性輸出端。另一個是低有效輸出端,即反極性輸出端。③輸入緩沖器和反饋緩沖器與曾經學過的輸出三態緩沖器不同輸出三態緩沖器也有三個端,但只有一個輸入和一個輸出端,另一個是使能控制端。原則上說,輸出三態緩沖器有二個輸入端一個輸出端。輸入緩沖器和反饋緩沖器輸出只有0、1兩個邏輯狀態。而輸出三態緩沖器除了有0、1兩個邏輯狀態外,還有一個稱為高阻(Z)的狀態。在PLD中為了實現輸出極性可編程,常采用圖(a)所示的異或門結構。當熔絲燒斷,異或門輸出極性為低有效,即否則異或門輸出高有效Q0=P⊕0=P。③輸入緩沖器和反饋緩沖器PPQ=?=10圖(b)是編程后熔絲保留,輸出極性編程為高有效。圖(c)是編程熔絲燒斷,輸出極性編程為低有效。③輸入緩沖器和反饋緩沖器與陣列Y1Y2或陣列AB與陣列Y1Y2或陣列④與或陣列圖任一組合邏輯函數都可用“與或”式表示,即任何組合邏輯函數都可以用一個與門陣列與一個或門陣列來實現。如:標準畫法簡化畫法例:可編程只讀存儲器PROM與陣列(固定)D2D1D0或陣列(可編程)A2A1A0完全譯碼陣列實現組合邏輯函數:將函數寫為最小項之和形式,將對應的與項或起來即可。容量=與門數×或門數=2n×m利用效率低。例:試用PROM實現4位二進制碼到Gray碼的轉換。轉換真值表與陣列或陣列A2A1A0A3D2D1D0D3例:可編程邏輯陣列PLA
與陣列(可編程)A2A1A0D2D1D0或陣列(可編程)實現組合邏輯函數:將函數化簡為最簡與或式,將對應的與項或起來即可。容量=與門數×或門數制造工藝復雜。與陣列或陣列A3A2A1A0D3D2D1D0例:試用PLA實現4位二進制碼到Gray碼的轉換。解:利用卡諾圖化簡得最簡與或式:二、可編程專用集成電路ASIC可編程專用集成電路ASIC(ApplicationSpecificIntegratedCircuit)是面向用戶特定用途或特定功能的大規模、超大規模集成電路。分類:按功能分為數字的、模擬的、數字和模擬混和三種。按制造方式分為全定制、半定制ASIC、可編程三種。根據芯片的集成度和結構復雜度分類簡單可編程邏輯器件SPLD特點是都具有可編程的與陣列、不可編程的或陣列、輸出邏輯宏單元OLMC和輸入輸出邏輯單元IOC。復雜可編程邏輯器件CPLD特點是具有更大的與陣列和或陣列,增加了大量的宏單元和布線資源,觸發器的數量明顯增加。現場可編程邏輯門陣列FPGA運算器、乘法器、數字濾波器、二維卷積器等具有復雜算法的邏輯單元和信號處理單元的邏輯設計可選用FPGA實現。按制造技術和編程方式進行分類雙極熔絲制造技術的可編程ASIC萊迪思(Lattice)半導體公司的PAL系列反熔絲制造技術的可編程ASICActel的FPGAEECMOS制造技術的可編程ASICLattice的GAL和ispLSI/pLSISRAM制造技術的可編程ASICXilinx的FPGA,Altera的FPGA雙極熔絲和反熔絲ASIC通常稱為OTP(onetimeprogramming)器件采用EECMOS和SRAM制造技術的可編程ASIC具有用戶可重復編程的特性,可以實現電擦電寫。按制造技術和編程方式進行分類用SRAM技術制造的FPGA則具有數據揮發性,又稱易失性。具有揮發性的FPGA,當系統斷電或掉電后,寫入FPGA中的編程數據要丟失。因此,必須把要下載到FPGA的數據借用編程器固化到與其聯用的EPROM或EEPROM中,待重新上電時,芯片將編程數據再下載到FPGA中。FPGA的數據揮發性,決定有些環境不宜選用。可編程ASIC的編程方式可編程ASIC的編程方式有兩種:采用專用編程器進行編程在系統編程甩掉了專用編程器,而且也不用將芯片從電路系統取下,只利用計算機和一組下載電纜就可以在系統編程。Lattice和Xilinx等幾家大公司現在都有在系統可編程ASIC產品。在系統編程方式方便了用戶。
可編程ASIC的一般開發步驟設計輸入(entry)功能模擬(functionsimulation)邏輯分割(partitioning)布局和布線(placeandrouting)時間模擬(timingsimulation)寫入下載數據(download)ASIC開發步驟流程圖TOP—DOWN設計思想自頂向下(TOP—DOWN)設計首先是從系統級開始入手。把系統分成若干基本單元模塊,然后再把作為基本單元的這些模塊分成下一層的子模塊。TOP—DOWN設計思想采用TOP—DOWN層次結構化設計方法,設計者可在一個硬件系統的不同層次的模塊下進行設計。總體設計師可以在上層模塊級別上對其下層模塊設計者所做的設計進行行為級模擬驗證。在TOP—DOWN的設計過程中,劃分每一個層次模塊時要對目標模塊做優化,在實現模塊時要進行模擬仿真。雖然TOP—DOWN的設計過程是理想的,但它的缺點是得到的最小可實現的物理單元不標準,成本可能較高。BOTTOM—UP設計思想BOTTOM—UP層次結構化設計是TOP—DOWN設計的逆過程。它雖然也是從系統級開始的,即從設計樹的樹根開始,但在層次模塊劃分時,首先考慮的是實現模塊的基本物理單元是否存在,劃分過程必須是從存在的基本單元出發。BOTTOM—UP設計思想設計樹最末枝上的單元要么是已經制造出的單元,要么是已經開發成功的單元,或者是可以買得到的單元。自底向上(BOTTOM—UP)的設計過程采用的全是標準單元,通常比較經濟。但完全采用自底向上的設計有時不能完全達到指定的設計目標要求。BOTTOM—UP設計思想用可編程ASIC實現一個好的電子系統設計通常采用TOP—DOWN和BOTTOM—UP兩種方法的結合,充分考慮設計過程中多個指標的平衡。設計庫及庫元件在層次設計中所用的模塊有兩種:預先設計好的標準模塊由用戶設計的具有特定應用功能的模塊前者一般要存放在EDA開發系統中各種類型的文件庫之中,后者必須經過模型仿真和調試證明無誤后,建立一個圖形符號存放在用戶的設計庫中準備在更上層的設計中使用。設計庫及庫元件模塊的功能模型可以是邏輯圖形式,也可以是VHDL描述的,還可以是真值表或邏輯方程式描述的。一個已知的圖形符號可以用來代表一個或幾個功能模型,這些模型的功能相同,參數可以不同。例如2輸入與非門7400、74LS00,74S00,功能相同,但是傳輸延時,功耗不相同。第3章硬件描述語言VHDL基礎⒈硬件描述語言概述⒉VHDL語言程序結構⒊VHDL常用語句⒋VHDL語法基礎什么是VHDLVHDL-VHSICHardwareDecription
Language
其中VHSIC-VeryHighSpeedIntegratedCircuit即超高速集成電路硬件描述語言電子設計自動化的關鍵技術之一是要求用形式化方法來描述硬件系統。VHDL適應了這種要求。目前在國內外應用的硬件描述語言有許多種,其中應用最廣泛的有VHDL語言和Verilog-HDL語言。
3.1硬件描述語言概述VHDL和VerilogHDLVerilogHDL:另一種硬件描述語言,由Verilog
公司開發,1995年成為IEEE標準。優點:簡單、易學易用缺點:功能不如VHDL強大,仿真工具少VHDL:1987年成為IEEE標準優點:功能強大、通用性強。缺點:難學VHDL在電子系統設計中的應用電子系統的設計模塊VHDL在電子系統設計中的應用電子系統設計的描述等級1、行為級2、RTL級(Registertransferlevel)3、邏輯門級4、版圖級(制版級)用VHDL可以描述以上四個等級VHDL在電子系統設計中的應用系統設計的描述等級-行為級所謂行為描述,實際就是對整個系統的數學模型的描述,在行為描述階段,并不真正考慮其實際操作和算法怎么實現,而是考慮系統的結構和工作過程是否能達到系統設計規格書的要求。VHDL在電子系統設計中的應用系統設計的描述等級-RTL級寄存器描述比行為描述更注重硬件的具體實現,通過該描述可以導出系統的邏輯表達式,為邏輯綜合作準備,當然進行邏輯綜合和邏輯綜合工具的能力有關,當然設計人員還必須了解邏輯綜合工具的說明和規定。
VHDL在電子系統設計中的應用系統設計的描述等級-邏輯門級該層次把RTL描述的程序轉換成基本邏輯元件表示的文件,該文件就象老的設計方法中的電原理圖。VHDL在電子系統設計中的應用系統設計的描述等級-制版級如何使用VHDL描述硬件實體Entity(實體)Architecture1(構造體)ArchitectureNprocess(進程結構)
block(塊結構)subprograms(子程序)procedure(過程)
function(函數)3.2VHDL語言程序結構VHDL語言程序可由實體(Entity)說明、結構體(Architecture)、程序包(Package)、庫(Library)、配置(Configuration)5個部分組成。其中庫、實體說明、結構體是一個VHDL語言程序的基本組成部分。3.2VHDL語言程序結構實體(Entity):實體用于描述所設計的系統的外部接口信號;結構體(Architecture):構造體用于描述系統內部的結構和行為;建立輸入和輸出之間的關系;庫(Library):庫是專門存放預編譯程序包的地方。程序包(Package):包集合存放各個設計模塊共享的數據類型、常數和子程序等;配置(Configuration):配置語句安裝具體元件到實體—結構體對,可以被看作是設計的零件清單;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語言程序結構以2選1多路選擇器電路為例
當s=‘0’時,
y的值為a的值,當s=‘1’時,
y的值為b的值。
s00001111a00110011b01010101y001101013.2.1實體說明實體:描述電路器件外部情況及各信號端口的基本性質外部特性:4個信號端口a,b,s:輸入信號端口y:輸出信號端口輸入輸出信號性質: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;實體結構體實體名結構體名3.2.1實體說明庫說明【例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
實體說明結構體3.2VHDL語言程序結構注釋3.2VHDL語言程序結構
P0:PROCESS(a,b,s)VARIABLEtempl,temp2,temp3:STD_LOGIC;BEGIN
templ:=aAND(NOTs); temp2:=bANDs; temp3:=templORtemp2; temp<=temp3; y<=temp;ENDPROCESSP0;ENDstructure;進程變量定義3.2.1實體說明實體說明的書寫格式如下所示:
ENTITY<實體名>IS[GENERIC(類屬說明);][PORT(端口說明);][實體語句部分;]END[ENTITY]<實體名>;其中“<>”中的部分是必選項,“[]”中的部分是可選項。3.2.1實體說明其中端口說明格式為:
PORT(端口名1,端口名N:方向:數據類型)其中方向有:IN,OUT,INOUT,BUFFER,LINKAGE注意In信號只能被引用,不能被賦值out信號只能被賦值,不能被引用buffer信號可以被引用,也可以被賦值簡單地說
In
不可以出現在<=或:=的左邊
out不可以出現在<=或:=的右邊
buffer可以出現在<=或:=的兩邊
INOUT
BUFFERINOUT3.2.1實體說明3.2.1實體說明注意:數據類型名是端口信號的取值類型,有:BIT:位類型,取值0、1;BIT_VECTOR:位向量類型,是BIT的組合;INTEGER:整數類型,可用作循環指針或常數;BOOLEAN:布爾類型,取值FALSE、TRUESTD_LOGIC:工業標準的邏輯類型,取值0、1、X、Z等;STD_LOGIC_VECTOR:是STD_LOGIC的組合;
3.2.1實體說明STD_LOGIC:工業標準的邏輯類型,由IEEE1164標準制定的9值邏輯系統取值:0,1,U,Z,X,W,L,H,-
U:沒初始化
Z:高阻
X:不定
W:弱信號不定
L:弱信號0
H:弱信號1 -:Don’tcare3.2.1實體說明例子(HalfAdd)
其內部結構將由Architecture來描述3.2.1實體說明例如,4位加法器作為一個設計實體的實體說明如下:
ENTITYadder_rippleIS
PORT(a,b:INSTD_LOGIC_VECTOR(3DOWNTO0);q:OUTSTD_LOGIC_VECTOR(3DOWNTO0);
Cout:OUTSTD_LOGIC);ENDadder_ripple;3.2.1實體說明類屬說明語句(GENERIC)
類屬說明語句必須放在端口說明語句之前,用以設定實體或元件的內部電路結構和規模,其書寫格式如下:
GENERIC(常數名:數據類型[:=設定值];┇常數名:數據類型[:=設定值]);例如:GENERIC(m:TIME:=5ns);指定了結構體內m的值為5ns。3.2.2結構體結構體(Architecture)是對實體功能的具體描述。結構體主要是描述實體的硬件結構、元件之間的互連關系、實體所完成的邏輯功能以及數據的傳輸變換等方面的內容。一個結構體的書寫格式如下:
ARCHITECTURE<結構體名>OF<實體名>IS[說明語句;]BEGIN<功能描述語句;>END<結構體名>;描述電路器件的內部邏輯功能和電路結構可以有多種不同的描述方式行為描述方式(behavioral)
數據流描述方式(dataflow)
結構描述方式(structure)3.2.2結構體功能描述語句3.2.2結構體Arcthitecture
格式:
Arcthitecture
結構體名of
實體名is[定義語句]內部信號、常數、元件、數據類型、函數等的定義
begin[并行處理語句和block、process、function、procedure]
end構造體名;一個實體中可以具有一個結構體,也可以具有幾個結構體。一個實體內部若有幾個結構體,則結構體名不能重復。3.2.2結構體3.2.2結構體行為描述一般采用進程語句(process)描述3.2.2結構體【例3-2】一個RS觸發器的結構體的行為描述方式
ARCHITECTURErs_behavOFrsffISBEGINq<=NOT(qbANDset);
qb<=NOT(qANDreset);
ENDrs_behav;是一個RS觸發器的結構體的行為描述方式。3.2.2結構體3.2.2結構體元件例化時端口映射方式1:位置對應方式元件例化時端口映射方式2:名字直接對應3.2.2結構體【例】一個RS觸發器的結構體的結構描述方式
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結構體3.2.2結構體數據流描述【例3-4】使用RTL(數據流)描述方式的全加器VHDL程序
ENTITYfull_adderISGENERIC(tpd:TIME:=5ns)
PORT(a,b,Cin:INSTD_LOGIC;
S,Co:OUTSTD_LOGIC);ENDfull_adder;ARCHITECTURErtlOFfull_adderISSIGNALh:STD_LOGIC;--內部信號定義
BEGIN h<=aXORbAFTERtpd; S<=hXORCinAFTERtpd; Co<=(aANDb)OR(hANDCin)AFTER2*tpd;ENDrtl;3.2.2結構體3.2.2結構體三種描述方式的比較3.2.3包集合、庫及配置除了entity(實體)和architecture(結構體)外還有另外三個可以獨立進行編譯的設計單元Package(包集合):存放信號定義、常數定義、數據類型、元件語句、函數定義和過程定義。Library庫:內含各類包定義、實體、構造體等configuration(配置)描述層與層之間的連接關系以及實體與構造體之間關系。3.2.3包集合、庫及配置VHDL中的設計單元(可以獨立編譯)3.2.3包集合、庫及配置Library庫的概念庫:數據的集合,用來存放已編譯過的設計單元(包括實體說明、結構體、配置說明、包集合)庫中內容可以用作其他VHDL描述的資源。在VHDL語言中,庫的說明總是放在設計單元的最前面:LIBRARY庫名;USE庫名.程序包名.項目名;第一個語句是LIBRARY庫名,表明使用什么庫。另外還要說明設計者要使用的是庫中哪一個包集合以及包集合中的項目名。這樣就是第2個語句的格式。3.2.3包集合、庫及配置在VHDL語言中庫大致有5種:STD庫--VHDL的標準庫IEEE庫--VHDL的標準庫的擴展面向ASIC的庫--不同的工藝不同公司自定義的庫(WORK庫)普通用戶自己的庫除WORK庫外,其他4類庫在使用前都要首先進行說明3.2.3包集合、庫及配置Package包集合的概念為了使一組數據類型、常量、子程序等被多個實體公用,VHDL提供了包集合的機制。包集合就像是公用的工具箱,各個實體都可使用其中定義的工具。為了方便設計,VHDL提供了一些標準的包集合。
LIBRARYIEEE;
--打開IEEE庫
USEIEEE.STD_LOGIC_1164.ALL;--調用其中的STD_LOGIC_1164包集合3.2.3包集合、庫及配置Package包集合用戶也可以自定義包集合包集合結構如下所示:
PACKAGE包集合名IS[說明語句]END包集合名;PACKAGEBODY包集合名IS[說明語句]ENDBODY;3.2.3包集合、庫及配置【例3-10】包集合的例子。
--包集合說明
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;--函數
ENDexample;3.2.3包集合、庫及配置【例3-10】包集合的例子。--包集合體PACKAGEBODYexampleISCONSTANTdelay1:TIME:=15ns;--定義延時常量的值
FUNCTIONmean(a,b,c:REAL)RETURNREALISBEGINRETURN(a+b+c)/3.0;--求均值
ENDmean;ENDexample;自定義的包集合和標準包集合一樣,也要通過調用才能使用。如要用上例中的example包集合,則要在實體說明前加上語句:USEWORK.example.ALL;3.2.3包集合、庫及配置配置(Configuration)描述層與層之間的連接關系,以及實體與結構之間的連接關系。設計者可以利用這種配置語句來選擇不同的結構體,使其與要設計的實體相對應。在仿真某一個實體時,可以利用配置來選擇各種不同的結構體,進行性能對比試驗,以得到性能最佳的結構體。配置語句的基本書寫格式如下:
CONFIGURATION配置名OF實體名IS[語句說明]END配置名;VHDL中的結構關系結構關系3.4VHDL語法基礎3.4.1標識符和保留字基本標識符主要由字母、數字以及下劃線組成,標識符的書寫要遵守以下規則:①字符必須以英文字母開頭;②標識符的最后一個字符不能是下劃線;③在標識符中不允許出現連續2個下劃線;④VHDL的保留關鍵字不能做一般的標識符使用。標識符中不區別大小寫,但通常有較好語言素質的設計人員書寫VHDL程序時都有自己的大小寫體的書寫風格。下面是幾個符合規范的標識符:
Three_State_GateSel_7DROM_2716下面是幾個不符號規范的標識符:
_TEXT_FILE--標識符必須以字母開頭,_開頭錯誤
8D10B--標識符必須以字母開頭,數字開頭錯誤
TOOL--Bar--不能出現二個連續下劃線
SELECT--保留關鍵字不能做標識符用
Res_Clk_--下劃線不能在標識符最后
Date-Input--字母間不是下劃線3.4.1標識符和保留字3.4.2數據對象對象object對客觀實體的抽象和概括在VHDL語言中,數據對象有以下4種類型:常數(CONSTANT)信號(SIGNAL)變量(VARIABLE)文件(FILES),其中文件類型是VHDL’93標準中新加入的。
1.常量(CONSTANT)常量是指那些在設計描述中不發生變化的值。常量是全局變量,在結構體描述、程序包說明、實體說明、過程說明、函數調用說明和進程說明中使用。使用前必須對常量進行說明,常量說明的格式如下:CONSTANT常量名:數據類型:=表達式;1.常量(CONSTANT)例如:
CONSTANTWIDTH:INTEGER:=8; --寄存器的寬度CONTANTVCC:REAL:=5.0;--指定供電電源的電壓CONTANTDBUS:BIT_VECTOR:=“10110011”;--給出總線數據向量注意:數值和單位之間要留空格常量一旦賦值之后,在程序中就不能再改變了。2.變量(VARIABLE)變量是局部變量變量只能在進程語句、函數語句以及過程語句中使用。變量的說明也只能在進程語句、函數語句以及過程語句的相應說明區域進行。變量的書寫格式為:
VARIABLE變量名:數據類型[:=表達式];例如:
VARIABLEresult:STD_LOGIC:=‘0’;--變量賦初值
VARIABLEx,y,z:INTEGER;VARIABLEcount:INTEGERRANGE0TO255:=10;2.變量(VARIABLE)在VHDL語言中,變量的使用規則和限制范圍說明如下:變量賦值是直接非預設的,在某一時刻僅包含一個值;變量賦值和初始化賦值符號用“:=”表示;變量不能用于硬件連線和存儲元件;在仿真模型中,變量用于高層次建模;在系統綜合時,變量用于計算,作為索引載體和數據的暫存;在進程中,變量的使用范圍在進程之內。若將變量用于進程之外,必須將該變量先賦給一個相同類型的信號,用信號在進程之間傳遞數據。3.信號(SIGNAL)在電子電路內,是用連線將元件或單元連結起來構成系統。在VHDL語言中,信號起著連線的作用,信號將實體與實體、元件與元件連結起來構成系統。一般將信號視為實際硬件系統中連線的抽象。信號是全局變量,一般在程序包、實體說明、結構體中都可以對信號進行定義說明,各進程之間的通信可以借助信號來實現。
3.信號(SIGNAL)信號說明語句格式如下:SIGNAL信號名:數據類型、約束條件[:=初始值];
信號賦值語句格式如下:信號名<=表達式;例如:
A<=BAFTER10ns;--有一定的延時
A<=expression_B;A<=expression_BAFTER10ns;--延時10ns變量與信號的差異1、賦值方式不同:變量:=表達式;信號<=表達式;2、硬件實現的功能不同信號代表電路單元、功能模塊間的互聯,代表實際的硬件連線變量代表電路單元內部的操作,代表暫存的臨時數據3、有效范圍不同信號(全局量):程序包、實體、結構體變量(局部量):進程、子程序在進程和子程序中,信號只能被使用,不能被定義說明變量與信號的差異4、賦值行為的不同:信號賦值延時更新數值,一般生成時序電路變量賦值立即更新數值,一般生成組合電路5、信號的多次賦值一個進程中,只最后一次賦值有效多個進程中變量與信號的差異由于信號賦值的延時性,賦新值發生在進程結束時,所以結果是a,b的值互換。由于變量賦值的立即更新,所以結果是a,b的值均為b。3.4.3數據類型數據類型舉例整數
+136,+12456,-678實數(浮點數)
-2.0,+3.5,-1.0E38
BIT
‘0’,‘1’一定用單引號
BIT_VECTOR“10101111”,X“00BB”
STD_LOGIC
‘0’,‘1’,‘L’,‘H’…等9種取值布爾量(BOOLEAN)只有二種取值情況‘0’和‘1’或TRUE和FALSESTD_LOGIC_VECTOR“01100110”(STD_LOGIC數組)字符和字符串A~Z,0~9,a~z,“STRING”物理類型
Time_unitns(納秒)ms(毫秒)錯誤等級
note,warning,error自然數、正整數大于0或等于0的整數3.4.3數據類型(1)整數在VHDL語言中整數的范圍是-(231-1)~(231-1),即-2147483647~2147483647。整數可以用一系列二進制數來表示,但不能看做是BIT_VECTOR或STD_LOGIC_VECTOR。(2)實數實數類型也稱浮點數類型,規定的浮點數范圍是-1.0E+38~+1.0E+38。注意有的數字可用實數表示,也可用整數表示。例如+99.0是實數,+99是整數,兩數雖然數值相同,但類型不同。3.4.3數據類型(3)BIT和BIT_VECTORBIT型又稱位型,其取值只有‘0’和‘1’。而BIT_VECTOR實際上是BIT的數組。例如“01110111”或X“07FA”是BIT_VECTOR型數據,用來表示一個信號的值或用來表示總線信號的數值。由于BIT_VECTOR僅能表示邏輯“0”和“1”不能表示高阻、隨意項、未知常用狀態,實際可綜合的程序中很少用。在可綜合的VHDL語言程序中,實際上都采用STD_LOGIC和STD_LOGIC_VECTOR型數據。3.4.3數據類型(4)布爾量布爾量具有兩種狀態,“真”或者“假”。雖然布爾量也是二值枚舉量,但它和BIT型不同,沒有數值的含義,也不能進行算術運算,但它能進行關系運算。例如,它可以在IF語句中被測試,測試結果產生一個布爾量TRUE或者FALSE。一個布爾量常用來表示信號的狀態或者總線上的情況。如果某個信號或者變量被定義為布爾量,那么在仿真中將自動地對其賦值進行核查。一般這一類型數據的初始值總為FALSE。3.4.3數據類型(5)STD_LOGIC和STD_LOGIC_VECTORSTD_LOGIC是VHDL語言中已定義的標準邏輯變量,有9種定義的可取值。例如:‘U’,‘X’,‘0’,‘1’,‘Z’,‘W’,‘L’,‘H’,‘-’其中’U’未初始化;‘X’強迫未知:‘0’強制0;‘1’強制1;‘Z’高阻;‘W’弱未知;‘L’為弱0;‘H’為弱1;‘-’為隨意。對邏輯綜合而言僅‘0’,‘1’,‘Z’和‘-’有意義。邏輯綜合是將電路的行為級描述,特別是RTL級描述轉化成為門級表達的過程。
STD_LOGIC_VECTOR是STD_LOGIC的數組。二者賦值只能是‘0’,‘1’或由二進制數組成的字符串“11001111”,不能賦16進制或8進制數。
3.4.3數據類型(6)字符和字符串字符在VHDL語言中也認為是一種數據類型,使用時要用單引號。例如‘A’,‘a’,‘B’,‘b’。注意單引號內字母大小寫所代表的意義不同,‘1’和‘2’只是個字符量而已,不具有數值含義。VHDL語言中的字符串都帶有雙引號,例如“VHDL”,“ABCDE”,這些帶有雙引號的字符串常用于結構說明或程序提示。3.4.3數據類型(7)物理型數據表示時間的數據為物理型數據。這一數據類型在仿真時將要用到,邏輯綜合不用。物理型數據可視為與物理單位有關的整數。能方便地用來表示、分析校驗量綱。例如,下面的語句是STANDARD程序包給出的子句,它表示出time這個物理型數據的量綱和進位關系
TYPEtimeIS-2147483647TO2147483646UNITSfs;ps=1000fs;ns=1000ps;μs=1000ns;ms=1000μs;sec=1000ms;min=60sec;hr=60min;ENDUNITS3.4.4數據類型的轉換在VHDL語言中數據類型的定義是很嚴格的,對于某一數據類型的變量、信號、常量及文件賦值時,數據類型必須一致。為了正確地進行代入或賦值,數據類型轉換常常是非常必要的。為了實行類型轉換,VHDL語言的程序包中提供了一些轉換函數。表3-5程序包中轉換函數及其功能
程序包名轉換函數名轉換函數功能STD_LOGIC_1164TO_STDLOGICVECTOR(A)TO_BITVECTOR(A)TO_STDLOGIC(A)TO_BIT(A)由BIT_VECTOR轉換為STD_LOGIC_VECTOR
由STD_LOGIC_VECTOR轉換為BIT_VECTOR
由BIT轉換成STD_LOGIC
由STD_LOGIC轉換成BITSTD_LOGIC_ARITHCONV_STD_LOGIC_VECTOR(A,位長)CONV_INTEGER(A)由INTEGER,UNSDGNED,SIGNED轉換成指定位長的STD_LOGIC_VECTOR
由UNSIGNED,SIGNED轉換成INTEGERSTD_LOGIC_UNSIGNEDCONV_INTEGER(A)由STD_LOGIC_VECTOR轉換成INTEGER類型轉換實例VARIABLEI:INTEGER;--變量I定義為整型。VARIABLER:REAL;--變量R定義為實型。I:=INTEGER(R);--把R轉為整型后賦給整型變量I。R:=REAL(I);--把I轉為實型后賦給實型變量R。SIGNALa:BIT_VECTOR(11DOWNTO0);SIGNALb:STD_LOGIC_VECTOR(11DOWNTO0);a<=x“A8”;--十六進制值可賦予位向量b<=x“A8”;--語法錯,十六進制值不能賦予 STD_LOGIC_VECTOR類型b<=T0_STDLOGICVECTOR(X“AF7”);--將位向量轉換成標準邏輯向量b<=TO_STDLOGICVECTOR(O“5177”);--將八進制表示位向量轉換成標準邏輯向量b<=TO_STDLOGICVECTOR(B“1010_1111_0111”);--轉換為標準邏輯向量3.4.5運算操作符在VHDL語言中共有4類運算操作符,邏輯運算關系運算算術運算并置運算需要注意的是操作數的類型應該和操作符所要求的類型一致。運算操作符的優先級。1.邏輯運算符VHDL語言中的邏輯運算符共有7種:AND——與OR——或NOT——取反NAND——與非NOR——或非XOR——異或XNOR——異或非必須注意的是,運算符的左邊和右邊,以及代入信號的數據類型必須是相同的,否則編譯時會給出出錯警告。適用數據類型:STD_LOGICBITSTD_LOGIC_VECTOR布爾型2.算術運算符在VHDL語言中,有如下10種算術運算符:
+加;
-減;*乘;/除;
MOD求模;
REM取余;
ABS取絕對值。
**指數;
+正;(一元運算)-負;(一元運算)可以為任何數據類型(整數、實數、物理量)具有相同的數據類型可以同為整數或實數。物理量可以被整數或實數相乘或相除,其結果仍為一個物理量求模和取余的操作數必須是同一整數類型數據。左操作數可以是任意整數或實數,而右操作數應為一個整數。2.算術運算符實際上能夠真正綜合邏輯電路的算術運算符只有“+”、“-”、“*”。在數據位較長的情況下,使用算術運算符進行運算,特別是使用乘法運算符時,應非常慎重。因為對于16位的乘法運算,綜合時邏輯門電路會超過2000個門。3.關系運算符在VHDL語言中,有如下6種關系運算符:
=等于;
/=不等于;
<小于;
<=小于等于;
>大于;>=大于等于。在關系運算符的左、右兩邊是運算操作符,不同的關系運算符對兩邊的操作數的數據類型有不同的要求左、右兩邊的操作數的類型必須相同,但位長度不一定相同等號和不等號可以適用于所有類型的數據可使用于整數和實數、位等枚舉類型以及位向量等數組類型3.關系運算符在利用關系運算符對位向量數據進行比較時,比較過程是從最左邊的位開始,自左至右按位進行比較的。在位長不同的情況下,只能按自左至右的比較結果作為關系運算的結果。例如,對2位和3位的位向量進行比較:
SIGNALa:STD_LOGIC_VECTOR(2DOWNTO0);
SIGNALb:STD_LOGIC_VECTOR(1DOWNTO0);
a<=“011”;
b<=“11”;
IF(a<b)THEN┇ELSE┇ENDIF;4.并置運算符并置運算符“&”用于位和向量的連接,就是將運算符右邊的內容接在左邊的內容之后形成一個新的數組。例如:ARCHITECTUREexampleOFshiftrlISBEGINPROCESS(a)BEGINo1<=‘0’&a(7DOWNTO1);--右移一位o2<=a(6DOWNTO0)&‘0’;--左移一位o3<=a&b;--合并a,bENDPROCESS;ENDshiftrl;3.3VHDL常用語句VHDL的描述語句分為并行語句和順序語句兩種。1、并行處理(concurrent)語句的執行與書寫順序無關,并行塊內的語句是同時執行的2、順序處理(sequential)語句的執行按書寫的先后次序,從前到后順序執行。這種方式和其他普通編程語言(如c,pascal)是一樣的。3.3VHDL常用語句Architecture中的語句及子模塊之間是并行處理的子模塊block中的語句是并行處理的子模塊process中的語句是順序處理的子模塊subprogram中的function和procedure是順序處理的Arcthitecture
構造體名of
實體名is[定義語句]內部信號、常數、元件、數據類型、函數等的定義
begin[并行處理語句和block、process、function、procedure]
end構造體名;內部順序處理Architecture中的BlockBlock格式
塊名:
BLOCK[定義語句]
begin[并行處理語句concurrentstatement]
endblock
塊名Architecture中的Block條件Block格式
塊名:
BLOCK
[(布爾表達式)]
[定義語句]
begin[并行處理語句concurrentstatement[信號]<=
guarded[信號,延時];
endblock
塊名Architecture中的BlockBlock例子
myblock1:
block(clk=‘1’)
signal:qin:bit:=‘0’;
begin
qout<=guardedqin;
endblockmyblock1
myblock2:
block
begin
qout<=qin;
endblock
myblock2Architecture中的processProcess格式[進程名:]
process[(觸發信號列表)][定義語句;]
begin[串行處理語句sequentialstatement;]
endprocessArchitecture中的processprocess例子
exp1:
process
(clk,qin)
variable:qin:bit:=‘0’;
begin
qout<=qin;
endprocessexp2:
process
begin
waiton
clk,qin;
qout<=qin;
endprocessArchitecture中的subprogramFunction(函數)格式:
function
函數名(參數1,參數2…...)
[定義語句]
return
數據類型名
is[定義語句]
begin[順序執行語句]
return[返回變量名]
end函數名
Architecture中的subprogramFunction例子functionmax(a,b:bit)
returnbooleanisvariable:flag:boolean;beginif(a=b)thenflag<=true;
endifreturnflag;endmaxFunction中的參數不用說明方向(因為只有一種方向in)Architecture中的subprogramprocedure(過程)格式:
procedure
過程名(參數1,參數2…...)is[定義語句]
begin[順序執行語句]
end
過程名
Architecture中的subprogramProcedure例子proceduremax(a,b:inbit;
flag:outboolean)isbeginif(a=b)thenflag<=true;
endifendmax;3.3.1并行語句在VHDL語言中,并行語句主要包括:并行信號賦值語句;塊語句;進程語句;過程調用語句;參數傳遞語句(也稱GENERIC語句);元件例化語句;生成語句;并行斷言語句。1.并行信號賦值語句在VHDL語言中,并行信號賦值語句可分為以下3個子類型:并發信號賦值語句;條件信號賦值語句;選擇信號賦值語句。上面信號賦值語句的共同特點就是語句執行都是并發的。并行處理語句concurrentstatement信號賦值操作符號“<=”進行信號賦值操作的,它可以用在順序執行語句中,也可以用在并行處理語句中注意
1、用在并行處理語句中時,符號<=右邊的值是此條語句的敏感信號,即符號<=右邊的值發生變化就會重新激發此條賦值語句,也即符號<=右邊的值不變化時,此條賦值語句就不會執行。如果符號<=右邊是常數則賦值語句一直執行。
2、用在順序執行語句中時,沒有以上說法。并行處理語句concurrentstatement賦值語句例子Myblock:Blockbegin
clr<=‘1’after10ns;
clr<=‘0’after20ns;endblockmyblockprocessbegin
clr<=‘1’after10ns;
clr<=‘0’after20ns;endblockmyblock程序執行10ns后clr
為1,又過10ns后0賦給了clr,此時clr
以前的值1并沒有清掉,clr將出現不穩定狀態程序執行10ns后clr
為1,又過20ns后clr的值變為0,條件信號賦值語句條件信號賦值語句屬于并發描述語句的范疇,可以根據不同的條件將不同的表達式的值賦給目標信號。條件信號賦值語句書寫的一般格式為:
目標信號<=表達式1WHEN條件1ELSE
表達式2WHEN條件2ELSE
表達式3WHEN條件3ELSE…
表達式n-1WHEN條件n-1ELSE
表達式n;并行處理語句concurrentstatement條件信號帶入語句例子Blockbegin
sel<=b&a;q<=ainwhensel=“00”elsebinwhensel=“01”elsecinwhensel=“10”elsedinwhensel=‘11”elsexx;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- Unit 8 Revision Lesson 28(教學設計)-2024-2025學年北京版英語四年級下冊
- 2023四年級數學下冊 一 四則混合運算第2課時教學設計 西師大版
- Unit 1 You and Me Section A 1a~1d How Do We Get to Know Each Other教學設計 2024-2025學年人教版(2024)七年級英語上冊
- 8網絡新世界 教學設計-2024-2025學年道德與法治四年級上冊(統編版)
- 3 曲曲直直(教學設計)人教版(2012)美術三年級下冊
- 2024秋四年級英語上冊 Unit 5 Dinners ready Part B 第2課時教學設計 人教PEP
- 2023四年級數學下冊 3 運算律第5課時 乘法分配律配套教學設計 新人教版
- 美術課課件制作
- 《0×5 =?》(教學設計)-2024-2025學年三年級上冊數學北師大版
- Unit 6 rain or shine Section A Grammar英文版教學設計 2024-2025學年人教版(2024)七年級英語下冊
- 英語-北京市朝陽區2025年高三年級第二學期質量檢測一(朝陽一模)試題和答案
- 教師規范漢字書寫培訓
- 2024年新疆醫科大學附屬腫瘤醫院招聘事業單位考試真題
- 2025年《宏觀經濟政策與發展規劃》核心備考題庫(含典型題、重點題)
- 【百強校】【黑吉遼卷】黑龍江省哈爾濱市第三中學2025年高三學年第一次模擬考試(哈三中一模)語文試卷
- 2025年河南醫學高等專科學校單招職業適應性考試題庫含答案
- 腫瘤化學療法的護理
- 2025至2030年中國網球撿球籃數據監測研究報告
- 角膜塑形鏡試戴片參數選擇和配適評估鞏朝雁課件
- 2025年河南經貿職業學院單招職業技能測試題庫1套
- 全國計算機等級考試一級試題及答案(5套)
評論
0/150
提交評論