第5章 VHDL程序結(jié)構(gòu)_第1頁(yè)
第5章 VHDL程序結(jié)構(gòu)_第2頁(yè)
第5章 VHDL程序結(jié)構(gòu)_第3頁(yè)
第5章 VHDL程序結(jié)構(gòu)_第4頁(yè)
第5章 VHDL程序結(jié)構(gòu)_第5頁(yè)
已閱讀5頁(yè),還剩121頁(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)介

1、本章需要重點(diǎn)掌握的知識(shí)本章需要重點(diǎn)掌握的知識(shí)n熟悉熟悉EDA集成開(kāi)發(fā)環(huán)境集成開(kāi)發(fā)環(huán)境Quartus II的設(shè)計(jì)流程;的設(shè)計(jì)流程;n掌握硬件描述語(yǔ)言掌握硬件描述語(yǔ)言VHDL的基本模型機(jī)構(gòu);的基本模型機(jī)構(gòu);HDL VHDLVerilog HDLABELAHDLSystemVerilogSystemC。 英文全名是英文全名是VHDL(Very High Speed Integrated Circuit)Hardware Description Language, 現(xiàn)在公布的最新現(xiàn)在公布的最新VHDL標(biāo)標(biāo)準(zhǔn)版本是準(zhǔn)版本是IEEE 1076-2008 復(fù)習(xí): VHDL語(yǔ)言的特點(diǎn):n VHDL語(yǔ)言具有很強(qiáng)

2、的電路描述和建模能力,能從多個(gè)層次對(duì)數(shù)字系統(tǒng)進(jìn)行建模和描述,從而大大簡(jiǎn)化了硬件設(shè)計(jì)任務(wù),提高了設(shè)計(jì)效率和可靠性。n VHDL具有與具體硬件電路無(wú)關(guān)和與設(shè)計(jì)平臺(tái)無(wú)關(guān)的特性,并且具有良好的電路行為描述和系統(tǒng)描述的能力,使設(shè)計(jì)者可以專心致力于其功能的實(shí)現(xiàn),而不需要對(duì)不影響功能的與工藝有關(guān)的因素花費(fèi)過(guò)多的時(shí)間和精力。原理圖原理圖/VHDL文本編輯文本編輯綜合綜合FPGA/CPLD適配適配FPGA/CPLD編程下載編程下載FPGA/CPLD器件和電路系統(tǒng)時(shí)序與功能時(shí)序與功能門級(jí)仿真門級(jí)仿真1、功能仿真、功能仿真2、時(shí)序仿真、時(shí)序仿真邏輯綜合器邏輯綜合器結(jié)構(gòu)綜合器結(jié)構(gòu)綜合器1、isp方式下載方式下載 2、

3、JTAG方式下載方式下載 3、針對(duì)、針對(duì)SRAM結(jié)構(gòu)的配置結(jié)構(gòu)的配置 4、OTP器件編程器件編程 功能仿真功能仿真FPGAFPGACPLDCPLD設(shè)計(jì)流程設(shè)計(jì)流程應(yīng)用應(yīng)用FPGA/CPLD的的EDA開(kāi)發(fā)流程開(kāi)發(fā)流程:HDL文本輸入文本輸入Step 1:設(shè)計(jì)輸入:設(shè)計(jì)輸入(原理圖原理圖HDL文本編輯文本編輯) 這種方式這種方式與傳統(tǒng)的計(jì)算機(jī)軟件語(yǔ)言編輯輸入基本與傳統(tǒng)的計(jì)算機(jī)軟件語(yǔ)言編輯輸入基本一致一致。就是將使用了某種硬件描述語(yǔ)言。就是將使用了某種硬件描述語(yǔ)言(HDL)(HDL)的電的電路設(shè)計(jì)文本,如路設(shè)計(jì)文本,如VHDLVHDL或或VerilogVerilog的源程序,進(jìn)行編的源程序,進(jìn)行編輯

4、輸入。輯輸入。 可以說(shuō),應(yīng)用可以說(shuō),應(yīng)用HDLHDL的文本輸入方法克服了原理圖的文本輸入方法克服了原理圖輸入法存在的所有弊端,為輸入法存在的所有弊端,為EDAEDA技術(shù)的應(yīng)用和發(fā)展打技術(shù)的應(yīng)用和發(fā)展打開(kāi)了一個(gè)廣闊的天地。開(kāi)了一個(gè)廣闊的天地。Step 2:綜合 整個(gè)綜合過(guò)程就是將設(shè)計(jì)者在整個(gè)綜合過(guò)程就是將設(shè)計(jì)者在EDAEDA平臺(tái)上編輯平臺(tái)上編輯輸入的輸入的HDLHDL文本、原理圖或狀態(tài)圖形描述,依據(jù)文本、原理圖或狀態(tài)圖形描述,依據(jù)給定的硬件結(jié)構(gòu)組件和約束控制條件進(jìn)行給定的硬件結(jié)構(gòu)組件和約束控制條件進(jìn)行編譯編譯、優(yōu)化、轉(zhuǎn)換和綜合優(yōu)化、轉(zhuǎn)換和綜合,最終獲得門級(jí)電路甚至更底,最終獲得門級(jí)電路甚至更底層

5、的電路描述網(wǎng)表文件。層的電路描述網(wǎng)表文件。 它的功能就是將軟件描述與給定的硬件結(jié)構(gòu)它的功能就是將軟件描述與給定的硬件結(jié)構(gòu)用某種網(wǎng)表文件的方式對(duì)應(yīng)起來(lái),成為相應(yīng)互的用某種網(wǎng)表文件的方式對(duì)應(yīng)起來(lái),成為相應(yīng)互的映射關(guān)系。映射關(guān)系。Step 3:適配 適配器也稱適配器也稱結(jié)構(gòu)綜合器結(jié)構(gòu)綜合器,適配器就是將綜合后,適配器就是將綜合后網(wǎng)表文件針對(duì)某一具體的目標(biāo)器件進(jìn)行邏輯映射操網(wǎng)表文件針對(duì)某一具體的目標(biāo)器件進(jìn)行邏輯映射操作,其中包括底層器件配置、邏輯分割、優(yōu)化、布作,其中包括底層器件配置、邏輯分割、優(yōu)化、布局布線操作局布線操作, ,使之產(chǎn)生最終的下載文件,如使之產(chǎn)生最終的下載文件,如JEDECJEDEC、

6、JamJam格式的文件。格式的文件。 適配完成后可以利用適配所產(chǎn)生的仿真文件作適配完成后可以利用適配所產(chǎn)生的仿真文件作精確的時(shí)序仿真,同時(shí)產(chǎn)生可用于編程的文件。精確的時(shí)序仿真,同時(shí)產(chǎn)生可用于編程的文件。Step 4: 時(shí)序仿真與功能仿真時(shí)序仿真功能仿真 就是接近真實(shí)器件運(yùn)行特性的仿真,就是接近真實(shí)器件運(yùn)行特性的仿真,仿真文件中己包含了器件硬件特性參數(shù),仿真文件中己包含了器件硬件特性參數(shù),因而,仿真精度高。因而,仿真精度高。 是直接對(duì)是直接對(duì)VHDL、原理圖描述或其他、原理圖描述或其他描述形式的邏輯功能進(jìn)行測(cè)試模擬,以了解描述形式的邏輯功能進(jìn)行測(cè)試模擬,以了解其實(shí)現(xiàn)的功能是否滿足原設(shè)計(jì)的要求的過(guò)

7、程,其實(shí)現(xiàn)的功能是否滿足原設(shè)計(jì)的要求的過(guò)程,仿真過(guò)程不涉及任何具體器件的硬件特性。仿真過(guò)程不涉及任何具體器件的硬件特性。Step5: 編程下載 通 常 , 將 對(duì)通 常 , 將 對(duì) C P L DC P L D 的 下 載 稱 為 編 程的 下 載 稱 為 編 程(Program)(Program),對(duì),對(duì)FPGAFPGA中的中的SRAMSRAM進(jìn)行直接下載進(jìn)行直接下載的方式稱為配置的方式稱為配置(Configure)(Configure),但對(duì)于,但對(duì)于OTP OTP FPGAFPGA的下載和對(duì)的下載和對(duì)FPGAFPGA的專用配置的專用配置ROMROM的下載的下載仍稱為編程。仍稱為編程。St

8、ep 6: 硬件測(cè)試 最后是將含有載入了設(shè)計(jì)的最后是將含有載入了設(shè)計(jì)的FPGAFPGA或或CPLDCPLD的硬件系統(tǒng)進(jìn)行統(tǒng)一測(cè)的硬件系統(tǒng)進(jìn)行統(tǒng)一測(cè)試,以便最終驗(yàn)證設(shè)計(jì)項(xiàng)目在目標(biāo)試,以便最終驗(yàn)證設(shè)計(jì)項(xiàng)目在目標(biāo)系統(tǒng)上的實(shí)際工作情況,以排除錯(cuò)系統(tǒng)上的實(shí)際工作情況,以排除錯(cuò)誤,改進(jìn)設(shè)計(jì)。誤,改進(jìn)設(shè)計(jì)。Quartus II是是Altera提供的提供的FPGA/CPLD開(kāi)發(fā)集成環(huán)境開(kāi)發(fā)集成環(huán)境 Quartus II設(shè)計(jì)流程設(shè)計(jì)流程 VHDL VHDL 程序程序 庫(kù)的調(diào)用庫(kù)的調(diào)用 程序包的調(diào)用程序包的調(diào)用 實(shí)體描述實(shí)體描述 結(jié)構(gòu)體描述結(jié)構(gòu)體描述LIBRARY IEEE;LIBRARY IEEE;USE IE

9、EE.std_logic_1164.all;USE IEEE.std_logic_1164.all;ENTITYENTITY MUX2 IS MUX2 IS PORTPORT (d0,d1: (d0,d1:IN IN std_logic;std_logic; sel: sel:IN IN std_logic;std_logic; q: q:OUTOUT std_logic);std_logic);END END ENTITY;ENTITY;ARCHITECTUREARCHITECTURE behav OF MUX2 ISbehav OF MUX2 ISBEGINBEGIN PROCESS PR

10、OCESS (d0,d1,sel)(d0,d1,sel) BEGIN BEGIN IFIF sel=0 sel=0 THENTHEN q=d0; q=d0; ELSIFELSIF sel=1 sel=1 THENTHEN q=d1; q=d1; ELSEELSE q=Z;q=Z; END IF;END IF; END PROCESSEND PROCESS; ;END behav;END behav;用于說(shuō)明設(shè)計(jì)系統(tǒng)用于說(shuō)明設(shè)計(jì)系統(tǒng)的外部接口信息,的外部接口信息,具有唯一性具有唯一性描述相應(yīng)實(shí)體的行描述相應(yīng)實(shí)體的行為、功能或電路結(jié)為、功能或電路結(jié)構(gòu)構(gòu)本章內(nèi)容:本章內(nèi)容: 基本的基本的VHDL模型

11、結(jié)構(gòu)模型結(jié)構(gòu)實(shí)體(實(shí)體(ENTITYENTITY)包括)包括實(shí)體名實(shí)體名、類屬參數(shù)說(shuō)明類屬參數(shù)說(shuō)明、端端口說(shuō)明口說(shuō)明三部分組成。三部分組成。格式格式 :ENTITY ENTITY 實(shí)體名實(shí)體名 ISIS 類屬參數(shù)說(shuō)明類屬參數(shù)說(shuō)明 ; 端口說(shuō)明端口說(shuō)明 ;ENDENDENTITY ENTITY 實(shí)體名實(shí)體名 ;通常用于說(shuō)明通常用于說(shuō)明靜態(tài)信息靜態(tài)信息GENERIC(常數(shù)名:數(shù)據(jù)類型:設(shè)定值);(常數(shù)名:數(shù)據(jù)類型:設(shè)定值);提供外部接口信息提供外部接口信息PORT(端口名:端口方向端口名:端口方向 數(shù)據(jù)類型數(shù)據(jù)類型);5.1 實(shí)體 類屬聲明類屬聲明是設(shè)計(jì)者向設(shè)計(jì)實(shí)體傳遞的信息,包括數(shù)據(jù)通道寬度、信

12、號(hào)寬度、實(shí)體中子元件的數(shù)目、實(shí)體的延時(shí)特性和負(fù)載特性等靜態(tài)信息: GENERICGENERIC(CONSTANTCONSTANT名稱名稱 :IN IN 類屬類型類屬類型 := := 缺省缺省值值 ; );); 端口聲明端口聲明是描述設(shè)計(jì)實(shí)體的輸入和輸出特性的定義部分,它包括端口的信號(hào)名稱、信號(hào)模式、信號(hào)類型和仿真初始值等信息: PORTPORT(SIGNALSIGNAL名稱名稱 : 信號(hào)模式信號(hào)模式 信號(hào)類型信號(hào)類型BUS:= BUS:= 仿真初始值仿真初始值 ; );); 在例題中,給出了1位全加器的實(shí)體聲明,實(shí)體中給出了該全加器的端口聲明:例例 1 1位全加器位全加器ENTITY ENTI

13、TY full_adder IS IS - 實(shí)體聲明 PORT PORT (a,b,c_in:ININ Bit; - 端口聲明 sum,c_out:OUTOUT Bit);ENDEND full_adder; 上述實(shí)體聲明與右圖是相互對(duì)應(yīng)的??梢?jiàn)已知一個(gè)電路的邏輯框圖,就可以寫出對(duì)應(yīng)的實(shí)體聲明,反之亦然。 full_adderabc_insumc_out 從下面的例子,我們來(lái)看端口聲明和類屬聲明的作用,在該例中類屬n是鎖存器的位數(shù),缺省值為8:例例 高電平鎖存的高電平鎖存的n n位鎖存器位鎖存器ENTITYENTITY latch ISIS GENERIC GENERIC(n:Positive

14、 := 8); PORT PORT (eg:ININ Bit; d:ININ Bit_Vector (n-1 DOWNTO 0DOWNTO 0); q:OUTOUT Bit_Vector(n-1 DOWNTO 0DOWNTO 0);ENDEND latch;ARCHITECTUREARCHITECTURE latch_eg OF OF latch ISISBEGINBEGIN PROCESSPROCESS(eg) BEGINBEGIN IFIF eg=1 THENTHEN q = d;ENDEND IFIF;ENDEND PROCESSPROCESS;ENDEND latch_eg; 端口方向

15、n IN :IN定義的通道為單向輸入輸入模式,規(guī)定數(shù)據(jù)只能通過(guò)此端口被讀入實(shí)體中。n OUT :OUT定義的通道為單向輸出輸出模式,規(guī)定數(shù)據(jù)只能通過(guò)此端口從實(shí)體向外流出,或者說(shuō)可以將實(shí)體中的數(shù)據(jù)向此端口賦值。端口方向nINOUT : INOUTINOUT為輸入輸出雙向端口,即從端口內(nèi)部為輸入輸出雙向端口,即從端口內(nèi)部看,可以對(duì)端口進(jìn)行賦值,即輸出數(shù)據(jù)。也可以從此看,可以對(duì)端口進(jìn)行賦值,即輸出數(shù)據(jù)。也可以從此端口讀入數(shù)據(jù),即輸入。如端口讀入數(shù)據(jù),即輸入。如RAMRAM的數(shù)據(jù)端口,單片機(jī)的數(shù)據(jù)端口,單片機(jī)的的I/OI/O口???。n BUFFER :輸出緩沖。輸出緩沖。 BUFFERBUFFER的功

16、能與的功能與INOUTINOUT類似,區(qū)別在于當(dāng)需要輸入類似,區(qū)別在于當(dāng)需要輸入數(shù)據(jù)時(shí),只允許內(nèi)部回讀北部產(chǎn)生的輸出信號(hào)數(shù)據(jù)時(shí),只允許內(nèi)部回讀北部產(chǎn)生的輸出信號(hào), ,即反即反饋。如計(jì)數(shù)器的設(shè)計(jì),可將計(jì)數(shù)器輸出的計(jì)數(shù)信號(hào)回饋。如計(jì)數(shù)器的設(shè)計(jì),可將計(jì)數(shù)器輸出的計(jì)數(shù)信號(hào)回讀,以作下一計(jì)數(shù)值的初值。與讀,以作下一計(jì)數(shù)值的初值。與INOUTINOUT模式相比,模式相比,BUFFERBUFFER回讀(輸入)的信號(hào)不是由外部輸入的,而是回讀(輸入)的信號(hào)不是由外部輸入的,而是由內(nèi)部產(chǎn)生、向外輸出的信號(hào)。由內(nèi)部產(chǎn)生、向外輸出的信號(hào)。就是說(shuō)就是說(shuō)buffer buffer 僅僅僅僅是一個(gè)數(shù)據(jù)緩存器,不能用于是一

17、個(gè)數(shù)據(jù)緩存器,不能用于IOIO輸出!輸出!ExampleExample:ENTITY ENTITY my_design my_design ISISPORTPORT(d:(d:ININ std_logic_vector(15 DOWNTO 0); std_logic_vector(15 DOWNTO 0); clk,reset,oe: clk,reset,oe:ININ std_logic; std_logic; q: q:OUTOUT std_logic_vector(15 DOWNTO 0); std_logic_vector(15 DOWNTO 0); ad: ad:INOUTINOUT

18、 std_logic_vector(15 DOWNTO 0); std_logic_vector(15 DOWNTO 0); int: int:BUFFER BUFFER std_logic;std_logic; as: as:OUTOUT std_logic); std_logic);END my_design;END my_design;結(jié)構(gòu)體(結(jié)構(gòu)體(ARCHITECTUREARCHITECTURE)是設(shè)計(jì)實(shí)體的具體描述,)是設(shè)計(jì)實(shí)體的具體描述,指明設(shè)計(jì)實(shí)體的具體行為、所用元件及連接關(guān)系。指明設(shè)計(jì)實(shí)體的具體行為、所用元件及連接關(guān)系。由由定義說(shuō)明定義說(shuō)明和和具體功能具體功能描述兩部分組成。

19、描述兩部分組成。格式格式 :ARCHITECTUREARCHITECTURE 結(jié)構(gòu)體名結(jié)構(gòu)體名 OF OF 實(shí)體號(hào)名實(shí)體號(hào)名 ISIS 定義語(yǔ)句定義語(yǔ)句 信號(hào)信號(hào)(signalsignal);); 常數(shù)常數(shù)(constantconstant);); 數(shù)據(jù)類型數(shù)據(jù)類型(typetype);); 函數(shù)函數(shù)(functionfunction);); 元件元件(componentcomponent)等;)等;BEGINBEGIN 并行處理語(yǔ)句并行處理語(yǔ)句 ;END END 結(jié)構(gòu)體名;結(jié)構(gòu)體名;注意:注意:定義語(yǔ)句定義語(yǔ)句只對(duì)本結(jié)構(gòu)體有只對(duì)本結(jié)構(gòu)體有效。效。結(jié)構(gòu)體名應(yīng)結(jié)構(gòu)體名應(yīng)有明確意義有明確意義并行處

20、理并行處理是是VHDL的特點(diǎn)的特點(diǎn)5.2 結(jié)構(gòu)體ExampleExample:半加器:半加器LibraryLibrary IEEE; IEEE;Use ieee.std_logic_1164.all;Use ieee.std_logic_1164.all;EntityEntity half_adder is half_adder is port (X,Y: in bit; sum, carry: out port (X,Y: in bit; sum, carry: out bit);bit);end half_adder;end half_adder;ArchitectureArchitect

21、ure dataflow of half_adder is dataflow of half_adder isbegin begin - -并行處理語(yǔ)句并行處理語(yǔ)句 sum = X xor Y; sum = X xor Y; carry =X and Y; carry =X and Y;End dataflow;End dataflow;注意:仿真注意:仿真時(shí)波形考慮時(shí)波形考慮了延時(shí)。了延時(shí)。5.2 結(jié)構(gòu)體傳統(tǒng)描述方式傳統(tǒng)描述方式用與門、非門、用與門、非門、或門等具體底層或門等具體底層器件來(lái)組成器件來(lái)組成LIBRARY IEEE;LIBRARY IEEE;USE IEEE.std_logic_

22、1164.all;USE IEEE.std_logic_1164.all;ENTITYENTITY MUX2 IS MUX2 IS PORTPORT (d0,d1: (d0,d1:IN IN std_logic;std_logic; sel: sel:IN IN std_logic;std_logic; q: q:OUT OUT std_logic);std_logic);END END ENTITY;ENTITY;ARCHITECTURE ARCHITECTURE behav OF MUX2 ISbehav OF MUX2 ISBEGINBEGIN PROCESSPROCESS (d0,d1

23、,sel) (d0,d1,sel) BEGIN BEGIN IFIF sel=0 THEN sel=0 THEN q=d0; q=d0; ELSIF ELSIF sel=1 THENsel=1 THEN q=d1; q=d1; ELSE ELSE q=Z;q=Z; END IF;END IF; END PROCESS END PROCESS; ;END behav;END behav;VHDLVHDL描述描述程序包調(diào)用程序包調(diào)用實(shí)體描述實(shí)體描述結(jié)構(gòu)體描述結(jié)構(gòu)體描述庫(kù)的調(diào)用庫(kù)的調(diào)用描述實(shí)例VHDLVHDL的結(jié)構(gòu)體描述方式的結(jié)構(gòu)體描述方式: :通常根據(jù)描述的對(duì)象把結(jié)構(gòu)體命名為通常根據(jù)描述的對(duì)象把結(jié)

24、構(gòu)體命名為 structstruct(structuralstructural)結(jié)構(gòu)描述結(jié)構(gòu)描述(邏輯圖)(邏輯圖)描述該設(shè)計(jì)實(shí)體中電路元件之間的連接關(guān)系描述該設(shè)計(jì)實(shí)體中電路元件之間的連接關(guān)系 behav(behavior behav(behavior)行為描述行為描述(真值表、狀態(tài)(真值表、狀態(tài)圖)圖)描述該設(shè)計(jì)實(shí)體中電路模塊的行為功能描述該設(shè)計(jì)實(shí)體中電路模塊的行為功能 rtl rtl寄存器傳輸描述寄存器傳輸描述(邏輯表達(dá)式、布爾方(邏輯表達(dá)式、布爾方程)程)描述數(shù)據(jù)在該設(shè)計(jì)實(shí)體中通過(guò)寄存器的傳輸和變換描述數(shù)據(jù)在該設(shè)計(jì)實(shí)體中通過(guò)寄存器的傳輸和變換圖2.2 2選1多路選擇器邏輯圖 例:圖2.2

25、所示的是2選1多路選擇器的邏輯電路圖,它含有1個(gè)非門(U0)、3個(gè)2輸入端與非門(U1、U2、U3)和四個(gè)端口(a、b、c、out1) 例例2-4 22-4 2選選1 1多路選擇器多路選擇器 (課本(課本3535頁(yè))頁(yè)) 描述風(fēng)格:n 結(jié)構(gòu)描述 nRTL描述n 行為描述 n 結(jié)構(gòu)體mux_arch1:結(jié)構(gòu)描述。 它描述了設(shè)計(jì)實(shí)體mux的硬件是如何構(gòu)成的,即構(gòu)成設(shè)計(jì)實(shí)體mux的各個(gè)元件之間的連接關(guān)系。n 結(jié)構(gòu)體mux_arch2:RTL描述。 它描述了設(shè)計(jì)實(shí)體mux的數(shù)據(jù)從輸入到輸出的流向,同時(shí)也隱含了設(shè)計(jì)實(shí)體mux的另一種硬件結(jié)構(gòu)。n 結(jié)構(gòu)體mux_arch3:行為描述。 它描述了設(shè)計(jì)實(shí)體mu

26、x的輸出端口與輸入端口之間的行為關(guān)系,但不包含任何結(jié)構(gòu)信息。 思考題: 1.例2-1中的1位全加器是什么描述風(fēng)格? 2.試寫出1位全加器的另外2種風(fēng)格的描述。 留在實(shí)驗(yàn)課上驗(yàn)證!2.4 VHDL的標(biāo)識(shí)符在數(shù)字系統(tǒng)的在數(shù)字系統(tǒng)的VHDLVHDL描述中,描述中,實(shí)實(shí)體、結(jié)構(gòu)體、子程序、元件、對(duì)象、體、結(jié)構(gòu)體、子程序、元件、對(duì)象、屬性和語(yǔ)句標(biāo)號(hào)等屬性和語(yǔ)句標(biāo)號(hào)等用戶的定義項(xiàng),用戶的定義項(xiàng),都必須用標(biāo)識(shí)符來(lái)命名。都必須用標(biāo)識(shí)符來(lái)命名。標(biāo)識(shí)符n有效字符包括:有效字符包括:英文字母、數(shù)字、下劃線英文字母、數(shù)字、下劃線n必須是字母打頭必須是字母打頭n下劃線的前后都必須有字母或數(shù)字下劃線的前后都必須有字母或數(shù)

27、字n不區(qū)分大小寫不區(qū)分大小寫某些標(biāo)識(shí)符,例如某些標(biāo)識(shí)符,例如ARCHITECTUREARCHITECTURE、BEGINBEGIN、ENDEND和和ENTITYENTITY等等,在等等,在VHDLVHDL中有固定的含義,中有固定的含義,是是VHDLVHDL的保留字(列于附錄的保留字(列于附錄A A,并且在本書的,并且在本書的例子中用黑體字表示),不能用來(lái)命名用戶的例子中用黑體字表示),不能用來(lái)命名用戶的定義項(xiàng)。定義項(xiàng)。為了便于閱讀為了便于閱讀VHDLVHDL文檔,建議文檔,建議VHDLVHDL保留字保留字使用大寫字母,而用戶定義的標(biāo)識(shí)符使用小寫使用大寫字母,而用戶定義的標(biāo)識(shí)符使用小寫字母或者大

28、小寫字母組合。字母或者大小寫字母組合。建議用戶在定義標(biāo)識(shí)符時(shí),應(yīng)當(dāng)采用建議用戶在定義標(biāo)識(shí)符時(shí),應(yīng)當(dāng)采用有意義的有意義的名稱名稱來(lái)命名信號(hào)、變量、常量等對(duì)象,函數(shù)、過(guò)程來(lái)命名信號(hào)、變量、常量等對(duì)象,函數(shù)、過(guò)程等子程序,和元件、屬性、語(yǔ)句標(biāo)號(hào)等等。例如,等子程序,和元件、屬性、語(yǔ)句標(biāo)號(hào)等等。例如,命名存儲(chǔ)器地址,用命名存儲(chǔ)器地址,用mem_addr命名。命名。對(duì)于低電平有效的信號(hào),以對(duì)于低電平有效的信號(hào),以“_b”或者或者“_n”作作為結(jié)尾,并在整個(gè)設(shè)計(jì)中一直采用這種命名規(guī)則。為結(jié)尾,并在整個(gè)設(shè)計(jì)中一直采用這種命名規(guī)則。在整個(gè)設(shè)計(jì)中,采用統(tǒng)一的時(shí)鐘信號(hào)和復(fù)位信在整個(gè)設(shè)計(jì)中,采用統(tǒng)一的時(shí)鐘信號(hào)和復(fù)位

29、信號(hào)名稱。例如號(hào)名稱。例如“clk”和和“reset”或者或者“reset_n”。對(duì)。對(duì)于來(lái)自同一時(shí)鐘源但頻率不同的時(shí)鐘(由同一時(shí)鐘于來(lái)自同一時(shí)鐘源但頻率不同的時(shí)鐘(由同一時(shí)鐘源的不同分頻得到),使用源的不同分頻得到),使用“clk1”、“clk2”等命等命名。名。例: 合法的標(biāo)示符nmy_counter nDeconder_1n FFTnSig_Nnstate0n注:不區(qū)分大小寫n SAT,sat被認(rèn)為是同一個(gè)標(biāo)示符例: 非法的標(biāo)示符n_my_counter n my_counternDeconder-1n 2FFTnSig#Nnentitynlibrary 為了免受為了免受VHDL87VH

30、DL87對(duì)定義標(biāo)識(shí)符的限制,在對(duì)定義標(biāo)識(shí)符的限制,在VHDL93VHDL93中引中引入了擴(kuò)展標(biāo)識(shí)符,使標(biāo)識(shí)符的定義更為靈活。入了擴(kuò)展標(biāo)識(shí)符,使標(biāo)識(shí)符的定義更為靈活。 擴(kuò)展標(biāo)識(shí)符由一對(duì)反斜線之間的任何字符序列構(gòu)成。如果擴(kuò)展標(biāo)識(shí)符由一對(duì)反斜線之間的任何字符序列構(gòu)成。如果字符序列中包含有反斜線字符序列中包含有反斜線,則用雙寫的反斜線,則用雙寫的反斜線作為一個(gè)作為一個(gè)字符。字符。 擴(kuò)展標(biāo)識(shí)符取消了基本標(biāo)識(shí)符中的所有限制:擴(kuò)展標(biāo)識(shí)符擴(kuò)展標(biāo)識(shí)符取消了基本標(biāo)識(shí)符中的所有限制:擴(kuò)展標(biāo)識(shí)符可以使用任何的字符;可以以任何字符開(kāi)頭;可以使用任何的字符;可以以任何字符開(kāi)頭;區(qū)分大小寫等等。區(qū)分大小寫等等。每一個(gè)擴(kuò)展標(biāo)

31、識(shí)符與任何的基本標(biāo)識(shí)符都是不相同的,因此也每一個(gè)擴(kuò)展標(biāo)識(shí)符與任何的基本標(biāo)識(shí)符都是不相同的,因此也不同于任何一個(gè)保留字。不同于任何一個(gè)保留字。 例如:例如: ENTITYENTITY和和entityentity是兩個(gè)不同的標(biāo)識(shí)符,而且也不是保是兩個(gè)不同的標(biāo)識(shí)符,而且也不是保留字;留字; MUXMUX、MUXMUX、muxmux和和MuxMux是四個(gè)不同的標(biāo)識(shí)符;是四個(gè)不同的標(biāo)識(shí)符; c:filec:file是由是由7 7個(gè)字符構(gòu)成的擴(kuò)展標(biāo)識(shí)符個(gè)字符構(gòu)成的擴(kuò)展標(biāo)識(shí)符c:filec:file。在在VHDLVHDL語(yǔ)言中,可以語(yǔ)言中,可以賦值賦值的客體稱為的客體稱為對(duì)象對(duì)象。要掌握好這三種要掌握好這三

32、種數(shù)據(jù)對(duì)象的區(qū)別數(shù)據(jù)對(duì)象的區(qū)別及其應(yīng)用及其應(yīng)用常量是指定義在設(shè)計(jì)描述中常量是指定義在設(shè)計(jì)描述中不變化不變化的值,是一個(gè)的值,是一個(gè)全局量全局量。格式格式 :CONSTANT CONSTANT 常數(shù)名常數(shù)名: :數(shù)據(jù)類型數(shù)據(jù)類型:=:=表達(dá)式表達(dá)式Example Example :CONSTANT CONSTANT VCCVCC: :realreal:=:=5.05.0CONSTANTCONSTANT delay delay: :timetime:=:=10ns10nsCONSTANTCONSTANT fbus fbus: :bit_vectorbit_vector:=:=“0101”“0101

33、”指定電源電壓指定電源電壓某信號(hào)的延遲某信號(hào)的延遲總線上的數(shù)據(jù)向量總線上的數(shù)據(jù)向量用途:用途:在實(shí)體、結(jié)構(gòu)體、程序包、函數(shù)、過(guò)在實(shí)體、結(jié)構(gòu)體、程序包、函數(shù)、過(guò)程、進(jìn)程中程、進(jìn)程中保持靜態(tài)數(shù)據(jù)保持靜態(tài)數(shù)據(jù),以改善程,以改善程序的序的可讀性可讀性,使修改程序容易。,使修改程序容易。變量是定義在變量是定義在進(jìn)程進(jìn)程或或子程序子程序中的變化量。中的變化量。格式格式 :VARIABLE VARIABLE 變量名變量名: :數(shù)據(jù)類型數(shù)據(jù)類型:=:=初始值初始值用途:用途:在在PROCESSPROCESS、FUNCTIONFUNCTION、PROCEDUREPROCEDURE用用于計(jì)算或暫存中間數(shù)據(jù),是一個(gè)

34、于計(jì)算或暫存中間數(shù)據(jù),是一個(gè)局部局部量量。不能在進(jìn)程外部定義使用。不能在進(jìn)程外部定義使用注意:注意:變量的變量的賦值是立刻生效賦值是立刻生效的。的。信號(hào)對(duì)應(yīng)著硬件內(nèi)部實(shí)實(shí)在在的連線,在元件間起著信號(hào)對(duì)應(yīng)著硬件內(nèi)部實(shí)實(shí)在在的連線,在元件間起著互聯(lián)互聯(lián)作用作用,或作為一種,或作為一種數(shù)據(jù)容器數(shù)據(jù)容器,以保留,以保留歷史值歷史值和和當(dāng)前值當(dāng)前值。格式格式 :SIGNAL SIGNAL 信號(hào)名信號(hào)名: :數(shù)據(jù)類型數(shù)據(jù)類型:=:=表達(dá)式表達(dá)式注意:注意:“:=”“:=”表示對(duì)信號(hào)的賦初值,一般表示對(duì)信號(hào)的賦初值,一般不不產(chǎn)生延時(shí)產(chǎn)生延時(shí)。“=”=”表示信號(hào)的代入賦值,表示信號(hào)的代入賦值,有延時(shí)有延時(shí)。分

35、為分為外部端口信號(hào)外部端口信號(hào)和和內(nèi)部信號(hào)內(nèi)部信號(hào)。外部端口信號(hào)外部端口信號(hào)是設(shè)計(jì)單元電路中的引腳,在實(shí)體是設(shè)計(jì)單元電路中的引腳,在實(shí)體中定義,供整個(gè)設(shè)計(jì)單元使用,屬于全局量。中定義,供整個(gè)設(shè)計(jì)單元使用,屬于全局量。在結(jié)構(gòu)體中,外部端口信號(hào)可以直接使用,不在結(jié)構(gòu)體中,外部端口信號(hào)可以直接使用,不需要加以說(shuō)明。需要加以說(shuō)明。內(nèi)部信號(hào)內(nèi)部信號(hào)是用來(lái)描述設(shè)計(jì)單元內(nèi)部的傳輸信號(hào),是用來(lái)描述設(shè)計(jì)單元內(nèi)部的傳輸信號(hào),可在包體、結(jié)構(gòu)體、塊語(yǔ)句中定義。可在包體、結(jié)構(gòu)體、塊語(yǔ)句中定義。注意注意:信號(hào)不能在進(jìn)程和子程序中定義信號(hào)不能在進(jìn)程和子程序中定義!信號(hào)和變量的區(qū)別信號(hào)和變量的區(qū)別信號(hào)信號(hào)變量變量賦值符賦值符

36、號(hào)號(hào)=:=功能功能電路的內(nèi)部連接電路的內(nèi)部連接內(nèi)部數(shù)據(jù)交換內(nèi)部數(shù)據(jù)交換作用范作用范圍圍在結(jié)構(gòu)體、包體、塊在結(jié)構(gòu)體、包體、塊語(yǔ)句中定義。不能在語(yǔ)句中定義。不能在進(jìn)程中定義進(jìn)程中定義在進(jìn)程、過(guò)程和在進(jìn)程、過(guò)程和函數(shù)的內(nèi)部定義函數(shù)的內(nèi)部定義行為行為延遲一定時(shí)間后才賦延遲一定時(shí)間后才賦值值立即賦值立即賦值 下面的例子是D觸發(fā)器的VHDL描述,注意比較結(jié)構(gòu)體dff_1、dff_2和dff_3的差別:例例2-6 D2-6 D觸發(fā)器觸發(fā)器ENTITY dff_1 ISPORT (clk,d:IN Bit;q:OUT Bit);END dff_1;ARCHITECTURE bhv1 OF dff_1 ISBE

37、GINPROCESS (clk)VARIABLE a: Bit;BEGINIF clkEvent AND clk=1 THENa := d;q = a;END IF;END PROCESS;END bhv1;d qclkENTITY dff_2 ISPORT (clk,d:IN Bit;q:OUT Bit);END dff_2;ARCHITECTURE bhv2 OF dff_2 ISSIGNAL a: Bit;BEGINPROCESS (clk)BEGINIF clkEvent AND clk=1 THENa = d;END IF;END PROCESS;q = a;END bhv2;d a

38、clkqENTITY dff_3 ISPORT (clk,d:IN Bit;q:OUT Bit);END dff_3;ARCHITECTURE bhv3 OF dff_3 ISSIGNAL a: Bit;BEGINPROCESS (clk)BEGINIF clkEvent AND clk=1 THENa = d;q = a;END IF;END PROCESS;END bhv3;d aclka qclk dff_1、dff_2和dff_3在RTL電路上的差別如下: dff_1 dff_2 dff_3 在dff_1中,變量a在硬件上沒(méi)有對(duì)應(yīng)實(shí)物存在;但在dff_2和dff_3中,信號(hào)a在硬件上是

39、物理存在的。在dff_3中,因?yàn)樾盘?hào)a和q的值都被clk上升沿激活而改變,所以就變成兩個(gè)D觸發(fā)器的級(jí)聯(lián)了,與dff_2相比,信號(hào)d在輸出端q的反應(yīng)要晚1個(gè)clk周期。d qclkd aclka qclkd aclkq2.6 VHDL的數(shù)據(jù)類型和子類型在對(duì)象聲明格式中,有1項(xiàng)是對(duì)象的數(shù)據(jù)類型。VHDL含有很寬范圍的數(shù)據(jù)類型,用它們可以建立從簡(jiǎn)單到復(fù)雜的各種數(shù)據(jù)類型的對(duì)象,使得VHDL能夠在更高的抽象層次上描述對(duì)象和創(chuàng)建算法模型。在討論這些數(shù)據(jù)類型之前,我們先討論與數(shù)據(jù)類型有關(guān)的文字與數(shù)據(jù)類型有關(guān)的文字。2.6.1 文字 文字是一種具有“值”的符號(hào),它既不同于標(biāo)識(shí)符,也不同于運(yùn)算符。VHDL有6類

40、文字:整數(shù)、實(shí)數(shù)(也稱浮點(diǎn)數(shù))、字符、字符串、位串和物理量。 整數(shù)與實(shí)數(shù)的差別在于整數(shù)中不含小數(shù)點(diǎn),而實(shí)數(shù)中含有小數(shù)點(diǎn)。它們可以用2進(jìn)制、4進(jìn)制、8進(jìn)制、10進(jìn)制和16進(jìn)制等任意進(jìn)制來(lái)表示,而且可以在任意2個(gè)相鄰的數(shù)字之間插入下劃線,這大大增強(qiáng)了可讀性,但并不影響數(shù)值的大小。 下面是整數(shù)和實(shí)數(shù)文字的例子:- 整數(shù)文字01234567810E5 - 表示10X1052E8 - 表示2X1082#11111111# - 等于2進(jìn)制整數(shù)11111111B2#1111_1111# - 與上面1個(gè)文字等價(jià)8#777# - 等于8進(jìn)制整數(shù)777O16#FF# -等于16進(jìn)制整數(shù)FFH- 實(shí)數(shù)文字0.012

41、3456.999999123_456.999_999 - 與上面一行文字等價(jià)1.234E+2 - 等于10進(jìn)制實(shí)數(shù)123.416#F.FFF# - 等于16進(jìn)制整數(shù)F.FFFH 字符文字字符文字是用單引號(hào)括起來(lái)的單個(gè)是用單引號(hào)括起來(lái)的單個(gè)ASCIIASCII字符,例字符,例如如AA、/等。等。 字符串文字字符串文字則是用雙引號(hào)括起來(lái)的一串則是用雙引號(hào)括起來(lái)的一串ASCIIASCII字符,字符,例如例如abc、”1234”等。等。 位串字符位串字符是以進(jìn)制聲明符是以進(jìn)制聲明符B B或或O O或或X X為前導(dǎo)的、用雙引為前導(dǎo)的、用雙引號(hào)括起來(lái)的數(shù)字序列,但這些數(shù)字只限于號(hào)括起來(lái)的數(shù)字序列,但這些數(shù)

42、字只限于0-90-9和和a-fa-f(A-FA-F與之等價(jià))。為了增強(qiáng)可與之等價(jià))。為了增強(qiáng)可讀性,可以在相鄰的數(shù)字之間插入下劃線。讀性,可以在相鄰的數(shù)字之間插入下劃線。 下面是位串文字的例子:下面是位串文字的例子: B”1010_1010” - - 位串長(zhǎng)度為位串長(zhǎng)度為8 8 O”377” - - 位串長(zhǎng)度為位串長(zhǎng)度為9 9,等價(jià)于,等價(jià)于B”011_111_111” X”5F5” - - 位串長(zhǎng)度為位串長(zhǎng)度為12,12,等價(jià)于等價(jià)于B”0101_1111_0101” 物理文字物理文字是由整數(shù)或者實(shí)數(shù)文字與表示物理單位的是由整數(shù)或者實(shí)數(shù)文字與表示物理單位的標(biāo)識(shí)符組成,例如:標(biāo)識(shí)符組成,例如:

43、3.5 ns、20 pf、15 kohm等等。等等。整數(shù)類型實(shí)數(shù)類型枚舉類型物理類型數(shù)組記錄標(biāo)量類型復(fù)合類型存取類型文件類型數(shù)據(jù)類型2.6.2 數(shù) 據(jù) 類 型標(biāo)量類型的聲明格式為: TYPE 類型名稱 IS 值域;聲明數(shù)組類型的一般格式為:TYPE 數(shù)組名稱 IS ARRAY 下標(biāo)范圍 OF 元素類型;聲明記錄類型的一般格式為: TYPE 記錄名稱 IS RECORD 元素名稱:元素類型; END RECORD;n標(biāo)準(zhǔn)定義的數(shù)據(jù)類型標(biāo)準(zhǔn)定義的數(shù)據(jù)類型(由由standard程序包定程序包定義義,在使用中不需再用在使用中不需再用USE語(yǔ)句以顯示調(diào)用語(yǔ)句以顯示調(diào)用)布爾量、字符、字符串、整數(shù)、實(shí)數(shù)、

44、位、布爾量、字符、字符串、整數(shù)、實(shí)數(shù)、位、時(shí)間、位向量、自然數(shù)、正整數(shù)時(shí)間、位向量、自然數(shù)、正整數(shù)nIEEE預(yù)定義標(biāo)準(zhǔn)邏輯位與向量預(yù)定義標(biāo)準(zhǔn)邏輯位與向量std_logic、std_logic_vectorn用戶自定義的數(shù)據(jù)類型用戶自定義的數(shù)據(jù)類型 枚舉類型、物理類型、數(shù)組類型、記錄類枚舉類型、物理類型、數(shù)組類型、記錄類型型整數(shù)類型整數(shù)類型n保留字:保留字:Integern范圍為范圍為-214783647到到214783647(231-1)n需要綜合時(shí),要對(duì)范圍加以限制需要綜合時(shí),要對(duì)范圍加以限制 TYPE code_in IS RANGE 15 DOWNTO 0;建議在描述整數(shù)類型或者整數(shù)類型

45、的數(shù)組下標(biāo)時(shí),采用由高位至低位的排列順序:“xHigh DOWNTO xLow”。SINGAL a:STD_LOGIC_VECTOR(3 DOWNTO 0); 若若a=“1010”,則,則 a(3)=1;a(2)=0;a(1)=1;a(0)=0SINGAL b:STD_LOGIC_VECTOR(0 TO 3); 若若b=“1101” ,則,則 b(3)=1;b(2)=0;b(1)=1;b(0)=1實(shí)數(shù)類型實(shí)數(shù)類型n保留字:保留字:Realn范圍為:范圍為:-1.0E38到到1.0E38n很多綜合器不支持該類型,僅在很多綜合器不支持該類型,僅在VHDL 仿真器中使用仿真器中使用nTYPE ana

46、log IS RANGE 0.0 TO 5.0;布爾量n保留字:Booleann取值為FALSE和TRUE字 符n保留字:Charactern編程時(shí)用單引號(hào)括起來(lái),如An字符文字區(qū)分大小寫,Z與z是不相同的字符串n保留字:Stringn字符串在編程時(shí)用雙引號(hào)括起,如“1111001101”位n保留字:Bitn取值只能是0和1位矢量n保留字:Bit_vectorn位矢量是基于Bit數(shù)據(jù)類型的數(shù)組,使用位向量必須注明寬度,即數(shù)組中的元件個(gè)數(shù)和排列n如: SIGNAL a: Bit_vector (7 DOWNTO 0);時(shí) 間n保留字:Timen時(shí)間類型值的范圍-(231-1)到(231-1)n時(shí)

47、間類型的完整表達(dá)方法應(yīng)包含整數(shù)和單位兩部分n一般用于仿真,對(duì)于邏輯綜合來(lái)說(shuō)意義不大自然數(shù)和正整數(shù)n保留字:自然數(shù)(Natural) 、正整數(shù)(Positive)n自然數(shù)是整數(shù)的一個(gè)子類型,包括零和正整數(shù)n正整數(shù)也是整數(shù)的一個(gè)子類型,包括整數(shù)中非零和非負(fù)的數(shù)值Std_logic、Std_logic_vectorn工業(yè)標(biāo)準(zhǔn)的邏輯類型,取值0(強(qiáng)0)、1(強(qiáng)1)、Z(高阻態(tài)) 、-(無(wú)關(guān)) 、X(強(qiáng)未知的)、W(弱未知的)、L(弱0)、H(弱1) 、U(未初始化的),只有前四種取值具有實(shí)際物理意義,其他的為了與模擬環(huán)境相容才保留的。Std_logic、Std_logic_vectornStd_log

48、ic_vector 是std_logic的組合n使用時(shí),在程序中必須聲明庫(kù)及程序包說(shuō)明語(yǔ)句:LIBRARY ieee; USE ieee.std_logic_1164.ALL;Std_logic、Std_logic_vector 在下面的例子中,4位二進(jìn)制計(jì)數(shù)器的輸出端口q的數(shù)據(jù)類型被定義為Std_Logic類型。因?yàn)樵谫x值語(yǔ)句中有表達(dá)式q+1,所以q的信號(hào)模式不能為OUT,而是BUFFER,即帶有內(nèi)部反饋的輸出端口。例例2-7 4位二進(jìn)制加法計(jì)數(shù)器位二進(jìn)制加法計(jì)數(shù)器LIBRARY IEEE;USE IEEE.Std_logic_1164.ALL;USE IEEE.Std_logic_Unsi

49、gned.ALL;ENTITY cnt4 IS PORT (clk:IN Bit; q:BUFFER Std_logic_Vector(3 DOWNTO 0) ;END cnt4;ARCHITECTURE bhv OF cnt4 ISBEGIN PROCESS (clk) BEGIN IF clkEvent AND clk=1 THEN - 上升沿 q = q+1; END IF; END PROCESS;END bhv; 在例2-7中,因?yàn)檩敵龆丝趒具有內(nèi)部反饋,因此信號(hào)模式為BUFFER。但BUFFER類型的輸出端口的驅(qū)動(dòng)能力往往不夠強(qiáng),因?yàn)橐粋€(gè)端口的扇出系數(shù)是一定的,如果被內(nèi)部反饋占用一

50、部分之后,其驅(qū)動(dòng)能力必然下降。 在這種情況下,通常用增加一個(gè)驅(qū)動(dòng)器的方法來(lái)解決:例2-7 4位二進(jìn)制加法計(jì)數(shù)器的另一種描述LIBRARY IEEE;USE IEEE.Std_logic_1164.ALL;USE IEEE.Std_logic_Unsigned.ALL;ENTITY cnt4 IS PORT (clk:IN Std_logic; q:OUT Std_logic_Vector(3 DOWNTO 0);END cnt4;ARCHITECTURE bhv OF cnt4 IS SIGNAL q1:Std_logic_Vector(3 DOWNTO 0) ;BEGIN PROCESS (

51、clk) BEGIN IF clkEvent AND clk=1 THEN q1 = q1+1; END IF; END PROCESS; q = q1;END bhv;枚舉類型枚舉類型n定義語(yǔ)法定義語(yǔ)法: TYPE 數(shù)據(jù)類型名數(shù)據(jù)類型名 IS (枚舉文字,枚舉文字,枚舉文字,枚舉文字,)n如如 TYPE States IS (S1,S2,S3,S4); TYPE color IS ( red,green,yellow,blue);n枚舉類型的定義及相應(yīng)的變量和信號(hào)聲明舉例枚舉類型的定義及相應(yīng)的變量和信號(hào)聲明舉例 TYPE color IS (red,green,yellow,blue); T

52、YPE level IS(0,1,Z); VARIABLE a:color; SIGNAL v:level; a:=red; v=1;物理類型物理類型n物理類型的定義需規(guī)定一個(gè)取值范圍、一個(gè)基本單位和若干個(gè)(0至多個(gè))次級(jí)單位,次級(jí)單位需是基本單位的整數(shù)倍TYPE voltage IS RANGE 0 TO 10E15 - 物理類型物理類型 UNITS nv; - 基本單位 uv = 1000nv; - 次級(jí)單位,是基本單位的整數(shù)倍 mv = 1000 uv; v = 1000 mv; kv = 1000 v; END UNITS; 復(fù)合類型(數(shù)組類型和記錄類型)復(fù)合類型(數(shù)組類型和記錄類型)

53、 復(fù)合類型包括數(shù)組和記錄復(fù)合類型包括數(shù)組和記錄。數(shù)組是同構(gòu)復(fù)合類。數(shù)組是同構(gòu)復(fù)合類型,它所定義的是同一類型值的集合;記錄是異構(gòu)型,它所定義的是同一類型值的集合;記錄是異構(gòu)復(fù)合類型,它所定義的可以是不同類型值的集合。復(fù)合類型,它所定義的可以是不同類型值的集合。 數(shù)組可以是一維或者多維的數(shù)組可以是一維或者多維的,每一維下標(biāo)的類,每一維下標(biāo)的類型必須是離散類型(每一維下標(biāo)的類型與數(shù)組元素型必須是離散類型(每一維下標(biāo)的類型與數(shù)組元素的類型其意義是不同的)。如果指定每一維下標(biāo)的的類型其意義是不同的)。如果指定每一維下標(biāo)的范圍和方向(即指定了數(shù)組的上下界),則為范圍和方向(即指定了數(shù)組的上下界),則為限定

54、限定性數(shù)組性數(shù)組,否則為,否則為非限定性數(shù)組非限定性數(shù)組。 VHDL仿真器支持多維數(shù)組,但仿真器支持多維數(shù)組,但VHDL綜合器綜合器只支持一維數(shù)組。只支持一維數(shù)組。數(shù)組類型數(shù)組類型n定義語(yǔ)法 TYPE 數(shù)組名稱 IS ARRAY 下標(biāo)范圍 OF 元素類型;n如: TYPE a IS ARRAY(integer 9 DOWNTO 0) OF std_logic; 數(shù)組類型數(shù)組類型TYPE Byte IS ARRAY (7 DOWNTO 0) OF Bit; - 限定性數(shù)組TYPE Address IS RANGE 65535 DOWNTO 0; -整數(shù)類型TYPE Element IS ARRA

55、Y(Address)OF Byte; - 限定性數(shù)組TYPE Colors IS ( Black,Blue,Green,Cyan,Red,Magenta,Brown,LightGray,DarkGray,LightBlue,LightGreen,LightCyan,LightRed,Light Magenta ,Yellow,White );TYPE Row IS RANGE 479 DOWNTO 0;TYPE Column IS RANGE 639 DOWNTO 0;TYPE Pixel IS ARRAY(Row,Column)OF Colors;- 其中Pixel 是Colors的類型,R

56、ow和Column分別是第一和第二維下標(biāo)的類型-數(shù)組類型數(shù)組類型數(shù)組類型數(shù)組類型TYPE Bit_Vector IS ARRAY(Natural RANGE )OF Bit; - 非限定性數(shù)組,其中Bit_Vector的類型是Bit,下標(biāo)的類型是自然數(shù)Natural,記錄記錄可以定義相同或者不同類型的元素,每個(gè)元素有不同的名稱。聲明記錄類型的一般格式為: TYPE 記錄名稱 IS RECORD 元素名稱:元素類型; END RECORD; 當(dāng)記錄類型中的每一個(gè)元素都為標(biāo)量類型時(shí),稱當(dāng)記錄類型中的每一個(gè)元素都為標(biāo)量類型時(shí),稱之為線性記錄類型;否則為非線性記錄類型。只有線之為線性記錄類型;否則為非

57、線性記錄類型。只有線性記錄類型的對(duì)象才是可綜合的。性記錄類型的對(duì)象才是可綜合的。記錄類型記錄類型 記錄記錄可以定義相同或者不同類型的元素,每個(gè)元素有不同的名稱。聲明記錄類型的一般格式為: TYPE 記錄名稱 IS RECORD 元素名稱:元素類型; END RECORD; 當(dāng)記錄類型中的每一個(gè)元素都為標(biāo)量類型時(shí),稱之為線性記錄類型;否則為非線性記錄類型。只有線性記錄類型的對(duì)象才是可綜合的。 下面是記錄類型定義的例子:TYPE Memory IS RECORD Address:Integer RANGE 16#FFFFF# DOWNTO 16#00000#; Data:Byte;END RECO

58、RD;TYPE Char IS RECORD Ascii:Character; Color:Colors; Row:Integer RANGE 23 DOWNTO 0; Col:Integer RANGE 79 DOWNTO 0;END RECORD;2.6.4 子類型 當(dāng)某一對(duì)象的值域是某個(gè)類型聲明所定義的值域的子集時(shí),為了增加可重用性,而不定義太多的不定義太多的新類型新類型,VHDL提出了子類型的概念。 子類型只是對(duì)其基本類型(也稱父類型)的值域加以限制,而并不是一種新的類型,因此 ,子類子類型和其父類型完全兼容,同一父類型的各子類型也型和其父類型完全兼容,同一父類型的各子類型也相互兼容相

59、互兼容。子類型的對(duì)象,可以將其值直接賦給父類型的對(duì)象;而父類型的對(duì)象,只要其值未超出子類型聲明的范圍,也可以將其值直接賦給子類型的對(duì)象。這一特性,可以類推到同一父類型的各子類型之間。 子類型聲明的一般格式為:SUBTYPE 子類型名稱 IS 基本類型值域的子集; 下面是兩個(gè)子類型聲明的例子:TYPE Integer IS RANGE 2147483647 TO +2147483647;SUBTYPE Natural IS Integer RANGE 0 TO IntegerHigh;SUBTYPE Positive IS Integer RANGE 1 TO IntegerHigh; 我們定義

60、下面的2個(gè)整數(shù)類型和2個(gè)信號(hào):TYPE Int_1 IS RANGE 63 DOWNTO 0;TYPE Int_2 IS RANGE 15 DOWNTO 0;SIGNAL a:Int_1;SIGNAL b:Int_2;則如下的信號(hào)賦值是非法的: a = b;但如果將如果將Int_2定義為定義為Int_1的子類型的子類型:SUBTYPE Int_2 IS Int_1 RANGE 15 DOWNTO 0;則如下的信號(hào)賦值就是合法的: a 0, 1|H = 1, OTHERS = 0);BEGIN b = typeconv_con(s);END;2.7 屬性VHDL中,下列項(xiàng)目可以具有屬性:類型,子

溫馨提示

  • 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)論