版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第3章 VHDL基本知識 硬件描述語言(Hardware Description Language,HDL)是一種用于數(shù)字系統(tǒng)設(shè)計的高級語言,具有很強(qiáng)的電路描述和建模能力,大大簡化了硬件設(shè)計任務(wù),提高設(shè)計的效率和可靠性。以HDL語言設(shè)計,以CPLD/FPGA為硬件實現(xiàn)載體,EDA軟件為開發(fā)環(huán)境的現(xiàn)代數(shù)字系統(tǒng)設(shè)計方法已經(jīng)被廣泛采用。本章將介紹常用硬件描述語言VHDL的基本知識,包括EDA、VHDL簡介,基于VHDL的數(shù)字系統(tǒng)設(shè)計流程;VHDL語言的基本結(jié)構(gòu),數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式;順序語句,并行語句;VHDL庫和程序包等。 13.1 硬件描述語言VHDL介紹 3.1.1 EDA技術(shù)及
2、發(fā)展EDA是電子設(shè)計自動化(Electronic Design Automation)的縮寫,是20世紀(jì)90年代初從計算機(jī)輔助設(shè)計(CAD)、計算機(jī)輔助制造(CAM)、計算機(jī)輔助測試(CAT)和計算機(jī)輔助工程(CAE)等概念基礎(chǔ)上發(fā)展而來的新興電子設(shè)計技術(shù)。EDA技術(shù)以大規(guī)模可編程邏輯器件為設(shè)計的載體,依賴功能強(qiáng)大的計算機(jī),在EDA開發(fā)軟件平臺上用軟件的方法設(shè)計電子系統(tǒng)。采用硬件描述語言描述系統(tǒng)邏輯,生成系統(tǒng)設(shè)計文件,軟件自動完成邏輯編譯、邏輯化簡、邏輯分割、邏輯綜合及優(yōu)化、布局布線、邏輯仿真測試,直至實現(xiàn)電子系統(tǒng)的功能。再針對指定的目標(biāo)芯片適配編譯、邏輯映射、編程下載等,最終完成對電子系統(tǒng)硬
3、件功能的實現(xiàn)。伴隨著大規(guī)模集成電路制造技術(shù)、可編程邏輯器件、計算機(jī)輔助工程,以及電子系統(tǒng)設(shè)計技術(shù)的發(fā)展,EDA技術(shù)的發(fā)展經(jīng)過了三個主要階段:23.1 硬件描述語言VHDL介紹計算機(jī)輔助設(shè)計階段(CAD)20世紀(jì)70年代以后,利用計算機(jī)的圖形編輯、分析和存儲能力,輔助設(shè)計工程師進(jìn)行IC版圖設(shè)計、PCB布局布線等工作,取代了人工勞動。CAD設(shè)計技術(shù)初見雛形。計算機(jī)輔助工程階段(CAE)20世紀(jì)80年代出現(xiàn)的EDA工具除了具備圖形繪制功能以外,還增加了結(jié)構(gòu)設(shè)計和電路設(shè)計功能,代替了部分設(shè)計師的工作。在邏輯設(shè)計、邏輯仿真分析、布爾方程綜合優(yōu)化、自動布局布線等方面承擔(dān)了重要的工作。33.1 硬件描述語言
4、VHDL介紹電子系統(tǒng)設(shè)計自動化階段(EDA)進(jìn)入20世紀(jì)90年代,出現(xiàn)了以高級語言描述、系統(tǒng)級仿真和綜合技術(shù)為特征的新一代EDA工具。設(shè)計工程師采用結(jié)構(gòu)化、自頂向下的設(shè)計方法,先對整個電子系統(tǒng)進(jìn)行系統(tǒng)級設(shè)計和功能模塊劃分,采用硬件描述語言HDL對各個功能模塊描述,再用EDA工具對設(shè)計進(jìn)行行為描述和結(jié)構(gòu)綜合,系統(tǒng)仿真和測試驗證,自動布局布線,最后編程下載到CPLD/FPGA中。采用這種設(shè)計方法后,大大提高了復(fù)雜電子系統(tǒng)設(shè)計能力,提高了設(shè)計效率,縮短了設(shè)計周期。43.1 硬件描述語言VHDL介紹3.1.2 VHDL語言簡介硬件描述語言(HDL: Hardware Description Langu
5、age)是一種用形式化方法來描述數(shù)字電路和設(shè)計數(shù)字邏輯系統(tǒng)的語言,是EDA技術(shù)的重要組成部分。20世紀(jì)70年代末和80年代初,面對各個電子系統(tǒng)承包商技術(shù)線路不一致,使得產(chǎn)品不兼容,采用各自的設(shè)計語言,信息交換和維護(hù)困難,設(shè)計不能重復(fù)利用等情況,由美國國防部牽頭,來自IBM、Texas Instruments和Intermetrics公司的專家組成VHDL(Very High Speed Integrated Circuit HDL)工作組,提出了新的硬件描述語言版本和開發(fā)環(huán)境。IEEE標(biāo)準(zhǔn)化組織進(jìn)一步發(fā)展,經(jīng)過反復(fù)的修改與擴(kuò)充,在1987年宣布了VHDL語言標(biāo)準(zhǔn)版本,即IEEE STD 107
6、6-1987標(biāo)準(zhǔn)。1993年,VHDL-87標(biāo)準(zhǔn)被重新修訂,更新為IEEE STD 1076-1993標(biāo)準(zhǔn)?,F(xiàn)在公布的最新版本是IEEE STD 1076-2019。53.1 硬件描述語言VHDL介紹2019年,我國國家技術(shù)監(jiān)督局制定的CAD通用技術(shù)規(guī)范推薦VHDL作為我國電子設(shè)計自動化硬件描述語言國家標(biāo)準(zhǔn)。從此,VHDL語言在我國迅速普及,成為廣大硬件工程師必須掌握的一項技術(shù)。VHDL語言能夠成為標(biāo)準(zhǔn)化的硬件描述語言并獲得廣泛應(yīng)用,是因為有其它硬件描述語言不具備的有點:較強(qiáng)的系統(tǒng)級和電路描述能力。 與具體器件無關(guān),可移植性強(qiáng)。 基于庫的設(shè)計方式,便于復(fù)用。 語法規(guī)范、易于共享。 63.1 硬
7、件描述語言VHDL介紹3.1.3 VHDL語言設(shè)計開發(fā)流程以CPLD/FPGA為硬件載體,采用VHDL語言的EDA軟件進(jìn)行數(shù)字系統(tǒng)設(shè)計的的完整流程包括設(shè)計方案制定、設(shè)計輸入、邏輯綜合、布局布線、仿真測試、編程下載等。其他硬件描述語言的設(shè)計過程也是類似。設(shè)計流程圖如圖3-1所示。圖3-1 設(shè)計流程圖73.1 硬件描述語言VHDL介紹1. 設(shè)計方案制定采用自頂向下、模塊化設(shè)計的設(shè)計方式,確定整個系統(tǒng)的設(shè)計方案,劃分系統(tǒng)的各個邏輯模塊,確定各個模塊的功能,以及采用的設(shè)計方式。2. 設(shè)計輸入利用EDA軟件中的文本編輯器將系統(tǒng)功能或結(jié)構(gòu)用VHDL語言描述出來,保存問VHDL文件格式,為后面的綜合優(yōu)化做準(zhǔn)
8、備。83.1 硬件描述語言VHDL介紹現(xiàn)代大多數(shù)EDA軟件除了可以使用HDL語言設(shè)計輸入以外,通常還支持類似傳統(tǒng)電子系統(tǒng)設(shè)計的原理圖輸入方式。原理圖輸入方式中使用的邏輯模塊或符號,可以使用EDA軟件庫中預(yù)制的功能模塊,也可以使用VHDL語言設(shè)計的模塊或原件。實際上,圖形輸入方式除了原理圖輸入外還有狀態(tài)圖輸入和波形輸入等常用方式。采用模塊化設(shè)計方式,完成各個功能模塊設(shè)計后,將各個模塊組合在一起,即完成對整個系統(tǒng)的設(shè)計。93.1 硬件描述語言VHDL介紹3. 邏輯綜合所謂綜合就是將較高層次的抽象描述轉(zhuǎn)化為低層次描述的過程,是將軟件設(shè)計轉(zhuǎn)化為硬件電路的關(guān)鍵步驟。在完成設(shè)計輸入后,根據(jù)硬件結(jié)構(gòu)和約束條
9、件進(jìn)行編譯、優(yōu)化、綜合,最終得到門級甚至更低層次的電路描述網(wǎng)表文件。網(wǎng)表文件就將軟件描述和給定的硬件結(jié)構(gòu)形成對應(yīng)邏輯連接關(guān)系。103.1 硬件描述語言VHDL介紹4. 布局布線(適配)布局是指將網(wǎng)表文件中的邏輯連接關(guān)系合理地配置到目標(biāo)器件內(nèi)部的硬件結(jié)構(gòu)上,通常需要在速度優(yōu)先還是面積最優(yōu)間選擇。布線就是根據(jù)布局的拓?fù)浣Y(jié)構(gòu),利用目標(biāo)器件內(nèi)部資源,合理地連接各個單元。適配后產(chǎn)生的仿真文件可用于精確的時序仿真,同時生成用于編程下載的文件。113.1 硬件描述語言VHDL介紹5. 仿真測試仿真是EDA設(shè)計過程中的重要步驟,通常EDA軟件中會提供仿真工具,也可以使用第三方的專業(yè)仿真工具。根據(jù)不同的實施階段
10、,分為功能仿真和時序仿真:功能仿真:在采用不同方式完成設(shè)計輸入后,即可進(jìn)行邏輯功能的仿真測試,以了解功能是否滿足設(shè)計要求。這個階段的仿真測試不涉及具體的硬件結(jié)構(gòu)、特性。時序仿真:又稱后仿真,是最接近硬件真實運行的仿真。利用布局布線后生成的包含硬件特性參數(shù)的仿真文件,對系統(tǒng)和各個模塊進(jìn)行時序仿真,分析其時序關(guān)系和延遲信息。123.1 硬件描述語言VHDL介紹6. 編程下載將適配后生成的下載或配置文件,通過編程器或下載線纜下載到目標(biāo)器件中。一般將對CPLD的下載稱為編程,對FPGA的下載稱為配置。最后將整個系統(tǒng)進(jìn)行統(tǒng)一的測試,驗證設(shè)計在目標(biāo)系統(tǒng)上的實際工作情況。133.2 VHDL程序的基本結(jié)構(gòu)V
11、HDL程序是由庫(1ibrary)、程序包(package)、實體(entity declaration)、結(jié)構(gòu)體(architecture body)、配置(configuration)五部分組成。設(shè)計實體結(jié)構(gòu)結(jié)構(gòu)圖如圖3-2所示,其中設(shè)計實體必須有實體和結(jié)構(gòu)體,其它部分根據(jù)設(shè)計需要來添加。圖3-2 設(shè)計實體結(jié)構(gòu)圖143.2 VHDL程序的基本結(jié)構(gòu)實體是VHDL程序的基本單元,類似原理圖設(shè)計中的而一個元件符號。其中實體說明部分規(guī)定了其與外界通信的引腳或接口信號。在實體內(nèi)部有一個或多個結(jié)構(gòu)體,用來描述設(shè)計的邏輯結(jié)構(gòu)或功能。153.2 VHDL程序的基本結(jié)構(gòu)【例3-1】 VHDL程序基本結(jié)構(gòu)LI
12、BRARY IEEE; 庫說明部分USE IEEE.STD_LOGIC_1164.ALL; 程序包說明部分ENTITY nand2 IS 實體說明部分PORT ( a,b:IN STD_LOGIC; y:OUT STD_LOGIC);END nand2;163.2 VHDL程序的基本結(jié)構(gòu)ARCHITECTURE arch_name OF nand2 IS 結(jié)構(gòu)體描述部分BEGINPROCESS (a , b) VARIABLE comb : STD_LOGIC_VECTOR ( 1 DOWNTO 0 ) ; BEGIN Comb : = a & b ; CASE comb IS WHEN 00
13、 = y y y y y = 0 ; END CASE ; END PROCESS ;END arch_name ;173.2 VHDL程序的基本結(jié)構(gòu)3.2.1 實體說明實體說明部分的一般結(jié)構(gòu):ENTITY 實體名 ISGENERIC (類屬表);PORT (端口表);END ENTITY 實體名;183.2 VHDL程序的基本結(jié)構(gòu)1. 實體名實體說明部分以“ENTITY 實體名 IS”開始,以“END ENTITY 實體名”結(jié)束。其中實體名由設(shè)計者自定義,一般根據(jù)所設(shè)計實體的功能來取名,“ENTITY”是VHDL語法規(guī)定中的保留關(guān)鍵字。大多數(shù)EDA軟件中的編譯器和適配器是不區(qū)分VHDL語言大
14、小寫的,但為了保持良好的設(shè)計風(fēng)格和便于閱讀,通常將VHDL語言的標(biāo)識符和保留關(guān)鍵字以大寫表示,設(shè)計者自定義符號小寫表示,如實體名、結(jié)構(gòu)體名、變量名等。193.2 VHDL程序的基本結(jié)構(gòu)2. 類屬說明類屬參數(shù)用來在不同層次的設(shè)計模塊間傳遞信息和參數(shù),比如數(shù)組長度、位矢量長度、端口寬度、器件延時時間等。這些參數(shù)都要求是整數(shù)類型。類屬說明的一般格式如下:GENERIC (參數(shù)1:參數(shù)類型 : = 靜態(tài)表達(dá)式; 參數(shù)2:參數(shù)類型 : = 靜態(tài)表達(dá)式;參數(shù)n:參數(shù)類型 : = 靜態(tài)表達(dá)式);203.2 VHDL程序的基本結(jié)構(gòu)3. 端口說明端口說明是對設(shè)計實體和外部接口的描述,是設(shè)計實體和外部通信的通道,
15、對應(yīng)電路圖上的引腳。一個端口就是一個數(shù)據(jù)對象,包括端口名、數(shù)據(jù)類型、通信模式。端口說明的一般格式如下:PORT (端口名1 :通信模式 數(shù)據(jù)類型; 端口名2 :通信模式 數(shù)據(jù)類型;端口名n :通信模式 數(shù)據(jù)類型;);213.2 VHDL程序的基本結(jié)構(gòu)通信模式說明數(shù)據(jù)、信號通過端口的流動方向,主要有4種:IN:定義端口為單向只讀模式。數(shù)據(jù)或信號從外部流向?qū)嶓w內(nèi)部,或者從該端口讀取外部數(shù)據(jù)。OUT:定義端口為單向輸出模式。數(shù)據(jù)或信號只能從該端口流出,或者向該端口賦值。223.2 VHDL程序的基本結(jié)構(gòu)BUFFER:定義端口為緩沖模式。該模式和輸出模式類似,區(qū)別在于緩沖模式允許實體內(nèi)部應(yīng)用該端口信號
16、即允許內(nèi)部反饋,輸出模式則不能用于內(nèi)部反饋。緩沖模式的端口只能連接設(shè)計實體內(nèi)部信號源,或者是其它實體的緩沖模式端口。INOUT:定義端口為輸入輸出雙向模式。在某些設(shè)計實體中,例如雙向總線、RAM數(shù)據(jù)口、單片機(jī)的I/O口等,數(shù)據(jù)是雙向的,既可以流入實體內(nèi)部,也可以從實體流出,這是需設(shè)計為雙向模式。實體內(nèi)部的信號和外部輸入實體的信號都可以經(jīng)過雙向模式端口,也允許引入內(nèi)部反饋,所以雙向模式是一個完備的端口模式。233.2 VHDL程序的基本結(jié)構(gòu)3.2.2 結(jié)構(gòu)體描述結(jié)構(gòu)體具體描述了設(shè)計實體行為,定義了實體的邏輯功能或內(nèi)部電路結(jié)構(gòu)關(guān)系,規(guī)定了該實體的數(shù)據(jù)流程,建立了實體輸出與輸入之間的關(guān)系。結(jié)構(gòu)體的一
17、般格式如下:ARCHITECTURE 結(jié)構(gòu)體名 OF 實體名 IS 定義語句內(nèi)部信號,常數(shù),數(shù)據(jù)類型,函數(shù)定義; 說明語句 BEGIN 進(jìn)程語句; 功能描述語句并行處理語句; END ARCHITECTURE 結(jié)構(gòu)體名;243.2 VHDL程序的基本結(jié)構(gòu)“說明語句”用來說明和定義結(jié)構(gòu)體內(nèi)部使用的信號、常數(shù)、數(shù)據(jù)類型、函數(shù)、過程、元件調(diào)用聲明等,這是結(jié)構(gòu)體中必需的?!肮δ苊枋稣Z句”描述結(jié)構(gòu)體的行為、功能、電路連接關(guān)系等,可以是并行語句、順序語句或者它們的混合。其中并行語句是結(jié)構(gòu)體描述的主要語句,并行語句間是并行的,沒有順序關(guān)系。進(jìn)程語句是典型的并行語句,進(jìn)程間是并行的,但進(jìn)程內(nèi)部的語句是有順序的
18、。253.2 VHDL程序的基本結(jié)構(gòu)結(jié)構(gòu)體功能可以用三種方式進(jìn)行描述,即行為描述法、數(shù)據(jù)流描述法、結(jié)構(gòu)描述法:1. 行為描述法行為描述表示輸入與輸出間轉(zhuǎn)換的關(guān)系,是對設(shè)計實體按算法的路徑來描述。采用進(jìn)程語句,順序描述設(shè)計實體的行為。這種描述方式通常是對整體設(shè)計功能的定義,不是對單一器件進(jìn)行描述,是一種高層次的描述方法。 263.2 VHDL程序的基本結(jié)構(gòu)圖3-3 半加器及其邏輯電路273.2 VHDL程序的基本結(jié)構(gòu)ARCHITECTURE alg_ha OF half_adder ISBEGINPROCESS(a,b) BEGIN IF a = 0 AND b = 0 THEN c = 0;s
19、 = 0; ELSIF a = 1 AND b= 1 THEN c = 1;s = 0; ELSE c = 0;s = 1; END IF;END PROCESSEND alg_ha;283.2 VHDL程序的基本結(jié)構(gòu)2. 數(shù)據(jù)流描述法數(shù)據(jù)流描述法描述了數(shù)據(jù)流程的運動路徑、運動方向和運動結(jié)果,采用進(jìn)程語句順序描述數(shù)據(jù)流在控制流作用下被加工、處理、存儲的全過程。由半加器的真值表可推導(dǎo)信號間邏輯關(guān)系,用邏輯表達(dá)式描述如下: s = a b c = a b基于上述邏輯表達(dá)式的數(shù)據(jù)流描述為:293.2 VHDL程序的基本結(jié)構(gòu)ARCHITECTURE dataflow_ha OF half_adder
20、ISBEGINs = a XOR b;c =n LDd a AND b;END dataflow_ha;可見,結(jié)構(gòu)體內(nèi)的兩條信號賦值語句之間是并行關(guān)系,每一賦值語句均相當(dāng)于一個省略了“說明”的進(jìn)程,描述了信號從輸入到輸出的路徑。而行為描述中進(jìn)程內(nèi)的信號賦值語句是順序語句。303.2 VHDL程序的基本結(jié)構(gòu)3. 結(jié)構(gòu)化描述法結(jié)構(gòu)化描述給出了實體內(nèi)部結(jié)構(gòu)組織,所包含的模塊或元件及其互連關(guān)系。結(jié)構(gòu)化描述通常用于層次化結(jié)構(gòu)設(shè)計。對于一個復(fù)雜的電子系統(tǒng),將其分解成許多子系統(tǒng),子系統(tǒng)再分解成各個功能模塊。多層次設(shè)計的每個層次都可以作為一個元件,再構(gòu)成一個模塊或構(gòu)成一個系統(tǒng),每個元件分別仿真,然后再整體調(diào)試
21、。 圖3-3(a)所示的半加器可以用圖3-3(b)所示的邏輯電路加以實現(xiàn)。對該電路結(jié)構(gòu)采用結(jié)構(gòu)化描述法的程序如下:313.2 VHDL程序的基本結(jié)構(gòu)ARCHITECTURE struct_ha OF half_adder ISCOMPONENT and_gate PORT (a1,a2:IN BIT;a3:OUT BIT );END COMPONENT;COMPONENT xor_gate PORT (x1,x2:IN BIT;x3:OUT BIT );END COMPONENT;BEGINgl:and_gate PORT MAP (a,b,c ); g2:xor_gate PORT MAP
22、(a,b,s );END struct_ha;323.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式在VHDL語言中可以賦值的客體叫做數(shù)據(jù)對象。每一種數(shù)據(jù)對象代表的物理含義和使用規(guī)則,允許賦值的數(shù)據(jù)類型,可以參與的運算等都有嚴(yán)格的規(guī)定。3.3.1 數(shù)據(jù)對象VHDL語言的基本數(shù)據(jù)對象有3種:常量、變量和信號。變量、常量和其它高級語言中相應(yīng)類型類似,信號則是硬件描述語言中特有的,它帶有硬件特征。從硬件電路的角度來看,信號和變量相當(dāng)于電路之間的連線或連線上的信號值,常量則相當(dāng)于電源(VCC)、地(GND)等。333.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式1. 常量(Constant)常量是設(shè)計者在實體中給某
23、一常量名定義數(shù)據(jù)類型和賦值,在程序中試圖多次給常量賦值是錯誤的。常量定義的一般格式如下:CONSTANT 常量名 :數(shù)據(jù)類型 := 表達(dá)式 ;其中表達(dá)式的數(shù)據(jù)類型必須和定義的常量數(shù)據(jù)類型一致。常量定義一般包含在實體、結(jié)構(gòu)體、程序包、進(jìn)程、函數(shù)、過程等設(shè)計單元中。例如:CONSTANT VCC :REAL : = 3.3 ;343.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式該例子中,常量VCC被賦值為實型類型數(shù)據(jù),在程序中該常量的值將不能再改變,并保持到程序結(jié)束。CONSTANT ABUS :BIT_VECTOR : = 11000101 ;常量ABUS的數(shù)據(jù)類型是BIT_VECTOR,被賦初值為1
24、1000101,在程序中被做為某一器件的固定地址。353.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式2. 變量(Variable)變量是個局部量,做為一個臨時的數(shù)據(jù)存儲單元,只能在進(jìn)程、函數(shù)、過程等結(jié)構(gòu)中使用,不能將信息帶出它定義所在的當(dāng)前結(jié)構(gòu)。變量賦值是立即生效的,不存在延時。變量定義的一般格式如下:VARIABLE 變量名 :數(shù)據(jù)類型 : = 表達(dá)式;其中表達(dá)式的數(shù)據(jù)類型必須和定義的變量數(shù)據(jù)類型一致。例如:VARIABLE a :STD_LOGIC : = 1 ;定義標(biāo)準(zhǔn)邏輯位類型變量a,初始值為 1 VARIABLE count:INTEGER RANGE 0 TO 255 ;定義整數(shù)類型變
25、量count,取值范圍為0到255363.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式在變量定義語句中可以給出和變量相同數(shù)據(jù)類型的初始值,但這不是必須的。由于硬件電路上電后的隨機(jī)性,很多綜合器并不支持初始值設(shè)定,這樣可以在程序中通過賦值語句來賦予變量一個值。變量賦值的方式如下:變量名 : = 表達(dá)式;變量在賦值時不能產(chǎn)生附加延時。例如,tmp1、tmp2是變量,那么下式產(chǎn)生延時的方式是不合法的:Tmp1 : = tmp2 AFTER 10 ns;373.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式3. 信號(Signal)信號硬件系統(tǒng)描述中的基本數(shù)據(jù)類型,類似電路內(nèi)部的連接線,實現(xiàn)實體和實體間、元件和元件
26、間的連接。信號具有全局性特征,不但可以在一個設(shè)計實體內(nèi)部各個單元間傳遞數(shù)據(jù),還可以做為實體中并行語句模塊間的信息通道,不需注明信息的流動方向。信號通常在實體、結(jié)構(gòu)體、包集合中定義說明。注意不允許在進(jìn)程和過程的順序語句中定義信號。信號定義的格式如下:SIGNAL 信號名 :數(shù)據(jù)類型 : = 表達(dá)式;例如:SIGNAL bus_enable :BIT : = 1 ; 定義BIT類型信號,初始值為 1 SIGNAL data_bus :STD_LOGIC_VECTOR 7 DOWNTO 0 ;定義8位寬度的數(shù)據(jù)總線383.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式在給出信號的完整定義后,就可對信號賦值。
27、信號賦值語句如下:信號名 = 表達(dá)式 AFTER 時間量;AFTER 時間量,表示數(shù)據(jù)信號的傳入需延時給定的時間量,這與實際器件的硬件特征是吻合的。393.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式3.3.2 數(shù)據(jù)類型VHDL語言對參與運算的各個量的數(shù)據(jù)類型有嚴(yán)格要求,相同類型的量之間才能互相傳遞。VHDL語言要求設(shè)計實體中的常量、變量、信號都要指定數(shù)據(jù)類型,而且數(shù)據(jù)類型相同,而位長不同時也不能直接代入。這樣就使得VHDL編譯或綜合工具能很容易地找出設(shè)計中的錯誤。403.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式1. 標(biāo)準(zhǔn)定義數(shù)據(jù)類型VHDL語言的標(biāo)準(zhǔn)數(shù)據(jù)類型共有10種,如表3-1所示。413.3 數(shù)
28、據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式整數(shù)(INTEGER)在VHDL語言中,整數(shù)與數(shù)學(xué)中的整數(shù)的定義相同。整數(shù)的表示范圍為2 147 483 6472 147 483 647((2311)(2311),即32位有符號二進(jìn)制整數(shù)。整數(shù)的例子如:+12456,+13,457,盡管整數(shù)值是用一系列二進(jìn)制位值來表示的,但是整數(shù)不能看作是位矢量,也不能按位來進(jìn)行操作,對整數(shù)不能用邏輯操作符。當(dāng)需要進(jìn)行位操作時,可以用轉(zhuǎn)換函數(shù),將整數(shù)轉(zhuǎn)換成位矢量。在電子系統(tǒng)的開發(fā)過程中,整數(shù)也可以作為對信號總線狀態(tài)的一種抽象手段,用來準(zhǔn)確地表示總線的某一種狀態(tài)。在使用整數(shù)時,VHDL綜合器要求用RANGER對定義的數(shù)限定范圍
29、,根據(jù)限定的范圍決定此變量或信號的二進(jìn)制位數(shù)。例如:VARIABLE a :INTEGER RANGER 128 TO 128 ;423.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式實數(shù)(REAL)VHDL語言的實數(shù)類似于數(shù)學(xué)上的實數(shù),實數(shù)值的范圍為1.0E+38+1.0E+38。實數(shù)有正負(fù)數(shù),書寫時一定要有小數(shù)點。例如:1.0,+2.5,1.0E38,有些數(shù)可以用整數(shù)表示也可以用實數(shù)表示。例如,數(shù)字1的整數(shù)表示為1,而用實數(shù)表示則為1.0。兩個數(shù)的值是一樣的,但數(shù)據(jù)類型卻不一樣。大多數(shù)EDA工具只能在仿真器中使用實數(shù)類型數(shù)據(jù),綜合器則不支持實數(shù),這是因為VHDL語言適用于硬件系統(tǒng)設(shè)計與開發(fā)的語言,
30、實數(shù)類型的實現(xiàn)太復(fù)雜,電路規(guī)模上難以承受。433.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式實數(shù)常量的書寫方式舉例如下:2#11001011# 二進(jìn)制浮點數(shù)1.0 十進(jìn)制浮點數(shù) 0.0 十進(jìn)制浮點數(shù) 65971.333333 十進(jìn)制浮點數(shù) 65_971.333_3333 與上一行等價 8#43.6#e+4 八進(jìn)制浮點數(shù) 43.6E 4 十進(jìn)制浮點數(shù)443.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式位(BIT)在數(shù)字系統(tǒng)中,信號值通常用一個位來表示。位值的表示方法是用字符0或者1 (將值放在單引號中)來表示。位與整數(shù)中的1和0不同,1和0僅僅表示一個位的兩種取值。在程序包STANDARD中的定義源代碼是
31、:TYPE BIT IS ( 0 , 1 );453.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式位矢量(BIT_VECTOR)位矢量基于BIT數(shù)據(jù)類型的數(shù)字,在程序包STANDARD中的定義源代碼是:TYPE BIT_VECTOR IS ARRAY (Natural Ranger ) OF BIT;使用位矢量時必須指明數(shù)據(jù)寬度,即數(shù)組元素個數(shù)和排列順序,賦值是雙引號括起來的一組位數(shù)據(jù)。例如:VARIABLE a :BIT_VECTOR( 7 DOWNTO 0 ) : = 00110011463.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式布爾量(BOOLEAN)布爾量是二值枚舉量,具有兩種狀態(tài):“真”或
32、者“假”。布爾量位不同,沒有數(shù)值的含義,也不能進(jìn)行算術(shù)運算,只能進(jìn)行關(guān)系運算。例如在IF語句中被測試,測試結(jié)果產(chǎn)生一個布爾量值,TRUE或者FALSE。如果某個信號或者變量被定義為布爾量,那么在仿真中將自動地對其賦值進(jìn)行核查。一般這布爾量數(shù)據(jù)的初始值為FALSE。在程序包STANDARD中的定義源代碼是:TYPE BOOLEAN IS (FALSE , TRUE );473.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式字符(CHARACTER)字符類型數(shù)據(jù)通常用單引號括起來,如A。VHDL語言對大小寫不敏感,但是對字符類型數(shù)據(jù)中的大、小寫是不同的,例如,A不同于a。字符類型數(shù)據(jù)可以是az和AZ中的任
33、一個字母,09中的任一個數(shù)以及一些特殊字符,如$,等等。在程序包STANDARD中給出了預(yù)定義的128個ASCII碼字符類型。注意:字符1與整數(shù)1和實數(shù)1.0都是不相同的。當(dāng)需要明確指出1是字符類型數(shù)據(jù)時,則可寫為 CHARACTER(1) 。483.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式字符串(STRING)字符串是用雙引號括起來的一個字符序列,也稱字符矢量或字符串?dāng)?shù)組,。例如:integer range,字符串一般用于提示和說明。例如:VARIABLE string_var :STRING( 1 to 7 );string_var : = a b c d493.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算
34、符和表達(dá)式錯誤等級(SEVERITY LEVEL)錯誤等級類型數(shù)據(jù)通常用來表征電子系統(tǒng)的狀態(tài),分為NOTE(注意)、WARNING(警告)、ERROR(出錯)、FAILURE(失敗)4個等級。在系統(tǒng)仿真過程中用這4種狀態(tài)來表示系統(tǒng)當(dāng)前的工作情況,使開發(fā)者隨時了解當(dāng)前系統(tǒng)工作的情況,以采取相應(yīng)的對策。自然數(shù)(NATURAL)和正整數(shù)(POSITIVE)這兩類數(shù)據(jù)都是整數(shù)的子類,自然數(shù)類類數(shù)據(jù)取值0和0以上的正整數(shù),正整數(shù)類型數(shù)據(jù)為大于0的整數(shù)。503.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式時間(TIME)時間類型也稱為物理類型(PHYSICAL TYPE)。時間類型數(shù)據(jù)的范圍是整數(shù)定義的范圍,完
35、整的時間量數(shù)據(jù)包含整數(shù)和單位兩部分,整數(shù)和單位之間至少留一個空格,例如:16 ns,25 ms,3 sec,162 min 在程序包STANDARD中給出了時間的類型定義:TYPE TIME IS RANGER -2147483647 TO 2147483647unitsfs ; 飛秒,VHDL語言中的最小時間單位ps = 1000 fs ; 皮秒ns = 1000 ps ; 納秒us = 1000 ns ; 微妙ms = 1000 us ; 毫秒sec = 1000 ms ; 秒min = 60 sec ; 分hr = 60 min ; 時END units ;513.3 數(shù)據(jù)對象、數(shù)據(jù)類型
36、、運算符和表達(dá)式事件類型一般用于仿真,VHDL綜合器不支持時間類型。在系統(tǒng)仿真時,用時間類型數(shù)據(jù)可以表示信號的延時,從而使模型系統(tǒng)能更接近實際的硬件特性。2. IEEE標(biāo)準(zhǔn)數(shù)據(jù)類型在IEEE庫的程序包 STD_LOGIC_1164中定義了兩個非常重要的數(shù)據(jù)類型:標(biāo)準(zhǔn)邏輯位STD_LOGIC和標(biāo)準(zhǔn)邏輯矢量 STD_LOGIC_VECTOR。在程序中使用這兩類數(shù)據(jù)類型時,必須在程序的開始部分加入下面的語句:LIBRARY IEEE;USE IEEE.STD_LOIGC_1164.ALL;523.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式標(biāo)準(zhǔn)邏輯位STD_LOGICIEEE的STD_LOGIC標(biāo)準(zhǔn)邏輯位
37、數(shù)據(jù)類型是設(shè)計中常用的數(shù)據(jù)類型,在STD_LOGIC_1164程序包中定義了該數(shù)據(jù)類型的9種取值。而傳統(tǒng)的BIT類型只有0和1兩種取值,因此較少使用。在IEEE庫程序包STD_LOGIC_1164中STD_LOGIC數(shù)據(jù)類型的定義如下所示:TYPE STD_LOGIC IS ( U - 未初始化的 X - 強(qiáng)未知的 0 - 強(qiáng)0 1 - 強(qiáng)1 Z - 高阻態(tài) W - 弱未知的 L - 弱0 H - 弱1 - - 忽略 ) ;533.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式標(biāo)準(zhǔn)邏輯矢量 STD_LOGIC_VECTOR在IEEE庫程序包STD_LOGIC_1164中STD_LOGIC_VECTOR
38、類型的定義如下所 TYPE STD_LOGIC_VECTOR IS ARRAY ( NATURAL RANGE ) OF STD_LOGIC;可見,STD_LOGIC_VECTOR類型是在STD_LOGIC_1164程序包中定義的標(biāo)準(zhǔn)一維數(shù)組,數(shù)組中的每一個元素的數(shù)據(jù)類型都是標(biāo)準(zhǔn)邏輯位STD_LOGIC類型。向標(biāo)準(zhǔn)邏輯矢量 STD_LOGIC_VECTOR類型的數(shù)據(jù)對象賦值的方式與普通的一維數(shù)組 ARRAY數(shù)據(jù)對象賦值的方式是一樣的,同位寬、同數(shù)據(jù)類型的矢量間才能進(jìn)行賦值。543.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式3. 用戶定義數(shù)據(jù)類型 VHDL語言也允許用戶根據(jù)自己設(shè)計的需要自己定義數(shù)據(jù)
39、類型,用戶定義數(shù)據(jù)類型的一般格式為:TYPE 數(shù)據(jù)類型名,數(shù)據(jù)類型名 數(shù)據(jù)類型定義;用戶定義數(shù)據(jù)類型可以有多種類型,如枚舉(Enumerated)類型、整數(shù)(Integer)類型、實數(shù)(Real)類型、浮點數(shù)(Floating)類型、數(shù)組(Array)類型、記錄(Recode)類型、存取(Access)類型、文件(File)類型等,下面介紹幾種常用的用戶定義數(shù)據(jù)類型。553.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式枚舉(Enumerated)類型枚舉類型就是將類型中的所有元素都列出來。枚舉類型定義的格式為:TYPE 數(shù)據(jù)類型名 Is (元素,元素,);TYPE my_state IS ( sta
40、te1 state2 state3 state4 state5 ) ;563.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式但是,在邏輯電路中所有的數(shù)據(jù)都只能用0和1來表示,所以在綜合過程中用符號名表示的元素都將被轉(zhuǎn)化為二進(jìn)制編碼。枚舉類型元素的編碼是自動的,編碼順序是默認(rèn)的,一般第一個枚舉元素編碼為0,以后的依次加1。綜合器在編碼過程中自動將每一枚舉元素轉(zhuǎn)變成位矢量,位矢的長度將取所需表達(dá)的所有枚舉元素的最小值。在前面地舉例中,用于表達(dá)五個狀態(tài)的位矢長度應(yīng)該為3,編碼默認(rèn)值為如下方式:state1 = 000; state2 = 001; state3 = 010; state4 = 011; st
41、ate5 = 100;573.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式整數(shù)(Integer)類型、實數(shù)(Real)類型在前面的基本類型中可以看到,整數(shù)和實數(shù)類型在標(biāo)準(zhǔn)程序包中已經(jīng)定義過。但在實際應(yīng)用中,這兩種數(shù)據(jù)類型的取值范圍太大,綜合其無法進(jìn)行綜合。因此,用戶經(jīng)常根據(jù)實際的需要重新定義,限定其取值范圍。例如:TYPE my_num IS RANGE 100 TO 100 ;可見,整數(shù)或?qū)崝?shù)用戶定義數(shù)據(jù)類型的格式如下:TYPE 數(shù)據(jù)類型名 IS 數(shù)據(jù)類型定義約束范圍;583.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式數(shù)組(Array)類型數(shù)組類型就是將相同類型的數(shù)據(jù)集合在一起所形成的新的數(shù)據(jù)類型。數(shù)
42、組可以是一維的,也可以是二維或多維。數(shù)組類型定義的格式如下:TYPE 數(shù)據(jù)類型名 IS 范圍 OF 原數(shù)據(jù)類型名;“范圍”這一項默認(rèn)是整數(shù),例如:TYPE word IS ARRAY (INTEGER 1 TO 8) OF STD_LOGIC;TYPE d_bus IS ARRAY ( 0 TO 9) OF STD_LOGIC;TYPE instruction IS (ADD,SUB,INC,SRL,SRF,LDA,LDB,XFR);SUBTYPE digit IS INTEGER 0 TO 9;TYPE insflag IS ARRAY (instruction ADD TO SRF) OF
43、 digit;593.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式多維數(shù)組需要用兩個以上的范圍來描述,而且多維數(shù)組不能生成邏輯電路,因此只能用于生成仿真圖形及硬件的抽象模型。例如:TYPE memarray IS ARRAY (0 TO 5,7 DOWNTO 0) OF STD_LOGIC;CONSTANT romdata :memarray : =( 0,0,0,0,0,0,0,0 ),( 0,1,1,0,0,0,0,1 ),( 0,0,0,0,0,0,0,0 ),( 1,0,1,0,1,0,1,0 ),( 1,1,0,1,1,1,1,0 ),( 1,1,1,1,1,1,1,1 );SIGNAL
44、data_bit :STD_LOGIC;data_bit = romdata( 3,7);603.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式在代入初值時,各范圍最左邊所說明的值為數(shù)組的初始位腳標(biāo)。在上例中(0,7)是起始位,接下去右側(cè)范圍向右移一位變?yōu)?0,6),以后順序為(0,5),(0,4)直至(0,0)。然后,左側(cè)范圍向右移一位變?yōu)?1,7),此后按此規(guī)律移動得到最后一位(5,0)。613.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式記錄(Recode)類型由不同類型的數(shù)據(jù)組織在一起形成的數(shù)據(jù)類型叫記錄類型。記錄類型定義的格式如下:TYPE 數(shù)據(jù)類型名 IS RECODE 元素名:數(shù)據(jù)類型名; 元
45、素名:數(shù)據(jù)類型名; END RECORD;從記錄類型中提取元素的數(shù)據(jù)類型時應(yīng)使用“”。舉例如下:623.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式TYPE bank IS RECORDaddr0:STD_LOGIC_VECTOR(7 DOWNTO O);addrl:STD_LOGIC_VECTOR(7 DOWNTO O);r0:INTEGER;inat:instruction;END RECORD;SIGNAL addbusl,addbus2:STD_LOGIC VECTOR(31 DOWNTO 0);SIGNAL result:1NTEGER;SIGNAL alu_code:instructio
46、n;SIGNAL r_bank:bank : = ( 00000000,00000000,0,add);addbusl = r_bank. addrl;r_bank. inst = alu_code;633.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式用戶定義的子類型用戶定義的子類型是用戶對已定義的數(shù)據(jù)類型,做一些范圍限制而形成的一種新的數(shù)據(jù)類型。子類型的名稱通常采用用戶較易理解的名字。子類型定義的格式為: SUBTYPE 子類型名 數(shù)據(jù)類型名 范圍;例如,在“STD_LOGIC_VECTOR”基礎(chǔ)上所形成的子類:SUBTYPE a_bus IS STD_LOGIC_VECTOR ( 7 DOWNT
47、O 0);SUBTYPE digit IS INTEGER RANGE 0 TO 9;643.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式子類型可以對原數(shù)據(jù)類型指定范圍而形成,也可以完全和原數(shù)據(jù)類型范圍一致。例如:SUBTYPE abus IS STD_LOGIC_VECTOR (7 DOWNTO 0);SIGNAL aio:STD_LOGIC_VECTOR (7 DOWNTO 0);SIGNAL bio:STD_LOGIC_VECTOR (15 DOWNTO O);SIGNAL cio:abvs;aio = cio;正確操作bio = cio;錯誤操作新構(gòu)造的數(shù)據(jù)類型及子類型通常在包集合中定義,再
48、由USE語句裝載到描述語句中。653.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式3.3.3 VHDL運算符與表達(dá)式1. 常用運算符VHDL語言有4種運算符,分別是邏輯運算符、算術(shù)運算符、關(guān)系運算符和并置運算符。對于VHDL中的操作符與操作數(shù)間的運算有兩點需要特別注意:嚴(yán)格遵循在基本操作符間操作數(shù)是同數(shù)據(jù)類型的規(guī)則;嚴(yán)格遵循操作數(shù)的數(shù)據(jù)類型必須與操作符所要求的數(shù)據(jù)類型完全一致 663.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式邏輯運算符VHDL中共有7種邏輯運算,它們分別是:NOT 邏輯非;AND 邏輯與;NAND 邏輯與非;OR 邏輯或;NOR 或非;XOR 異或;XNOR 異或非。邏輯運算符適用的數(shù)
49、據(jù)類型是BIT、STD_LOGIC、BOOLEAN、BIT_VECTOR以及STD_LOGIC_VECTOR。如果運算符兩邊的值的類型是數(shù)組,則數(shù)組的尺寸,即位寬要相等。673.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式在7種邏輯運算符中,運算符NOT的優(yōu)先級最高,而其他6種運算符則具有相同的優(yōu)先級。在高級編程語言中的邏輯運算符有自左向右或是自右向左的優(yōu)先級順序,但是VHDL語言的邏輯運算符則沒有左右優(yōu)先級差別,設(shè)計人員經(jīng)常采用加括號的方法來解決邏輯表達(dá)式中沒有左右優(yōu)先級差別的問題。例如:q = a AND b OR NOT c AND d;683.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式在編譯時將
50、會給出語法出錯的信息。對于這種情況,這里可以采用加括號的方法來解決,可以將其修改為:q = (a AND b) OR (NOT c AND d);通常情況下,對于邏輯表達(dá)式中只有AND或OR或XOR的情況下可以不加括號,因為對于這三種邏輯運算來說,改變運算順序并不會改變結(jié)果的邏輯。例如:q = a AND b AND c AND d;q = a OR b OR c OR d;q = a XOR b XOR c XOR d;693.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式算術(shù)運算符在VHDL語言中,算術(shù)運算符主要包括16種,其中只有+(加)、一(減)和*(乘)能夠被EDA開發(fā)工具綜合為對應(yīng)的邏輯電
51、路,其余算術(shù)運算綜合成邏輯電路將會很困難,甚至是完全不可能的。VHDL中的16種算術(shù)運算符如下所示:+ 加; 減;* 乘; 除;MOD 取模;REM 取余;* 乘方;ABS 取絕對值;+ 正號; 負(fù)號;SLL 邏輯左移;SRL 邏輯右移;SLA 算術(shù)左移;SRA 算術(shù)右移;ROL 邏輯循環(huán)左移;ROR 邏輯循環(huán)右移。703.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式算術(shù)運算符的使用規(guī)則如下:+(加)、(減)、+(正號)、-(負(fù)號)四種運算符的操作與日常數(shù)值運算相同,可以用于整數(shù)、實數(shù)和物理類型。*(乘)、(除)運算符的操作數(shù)可以為整數(shù)、實數(shù)。同時,物理類型可以被整數(shù)或?qū)崝?shù)相乘或相除,結(jié)果仍為物理類
52、型;物理類型除以物理類型的結(jié)果是一個整數(shù)。MOD(取模)和REM(取余)運算符只能用于整數(shù)類型。ABS(取絕對值)運算符可以用于任何數(shù)據(jù)類型。*(乘方)運算符的左操作數(shù)可以是整數(shù)或是實數(shù),而右操作數(shù)必須是整數(shù)。只有在左操作數(shù)為實數(shù)時,其右操作數(shù)才可以是負(fù)整數(shù)。SLL(邏輯左移)、SRL(邏輯右移)、SLA(算術(shù)左移)、SRA(算術(shù)右移)、ROL(邏輯循環(huán)左移)和ROR(邏輯循環(huán)右移)六種算術(shù)運算符為二元運算符,它們只能定義在一維數(shù)組上,并且其元素必須是bit和boolean型,左操作數(shù)必須為這種類型,而右操作數(shù)必須是整數(shù)類型。713.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式下面是幾個整數(shù)REM(
53、取余)和MOD(取模)的小例子。通過這些例子,讀者能夠掌握REM和MOD運算的規(guī)則:7 REM 2 = 1, 7 REM (2 ) = 1, 7 REM 2 = 1, 7 REM (2) = 17 MOD 2 = 1, 7 MOD (2) = 1, 7 MOD 2 = 1, 7 MOD (2) = 1723.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式關(guān)系運算符VHDL語言的關(guān)系運算符如下所示: 相等; 不等于; 大于; 大于等于。733.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式關(guān)系運算符有如下規(guī)則:關(guān)系運算符兩邊數(shù)據(jù)類型必須一致(除、);(等于)、(不等于)適用于所有數(shù)據(jù)類型對象之間的比較;(大于)
54、、(大于等于)和(小于等于)適用于整數(shù)、實數(shù)、位矢量及數(shù)組之間的比較;兩個矢量比較時,自左向右,按位比較。743.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式關(guān)系運算符應(yīng)用舉例:PROCESS(num1,num2)SIGNAL a:STD_LOGIC_VECTOR(4 DOWNTO 0);SIGNAL b:STD_LOGIC_VECTOR(4 DOWNTO O);SIGNAL c:STD_LOGIC;BEGINa num 1; 賦值運算b num 2; 賦值運算IF (a b) THEN 關(guān)系運算c 1; 賦值運算ELSEc 0; 賦值運算ENDIF;END PROCESS;753.3 數(shù)據(jù)對象、數(shù)
55、據(jù)類型、運算符和表達(dá)式并置運算符并置運算符“”用于位的連接。并置運算的規(guī)則如下:并置運算可用于位的連接,形成位適量;并置運算可用于矢量的連接,形成新的矢量,例如,兩個4位的矢量并置運算后,可以構(gòu)成8位矢量;并置運算可用于位和矢量的連接,形成新的矢量,例如,位和一個4位的矢量并置運算后,可以構(gòu)成5位矢量。下面是一個使用了并置運算符的小例子,可見并置運算符的使用方法:SIGNAL a,b :STD_LOGIC_VECTOR( 3 DOWNTO 0);SIGNAL q :STD_LOGIC_VECTOR( 7 DOWNTO 0);q ab;763.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式在上面的小例子
56、中,3條程序語句的作用是將兩個4位長度的位矢量a和b連接成一個8位長度的位矢量并將其賦給信號q。位的連接可以有不同的表示方法,下面進(jìn)行介紹。先來看用并置運算符來連接4個STD_LOGIC類型的信號a、b、c、d,然看將連接后形成的位矢量賦給位矢量q。SIGNAL a,b,c,d :STD_LOGIC;SIGNAL q :STD_LOGIC_VECTOR( 3 DOWNTO 0);q abcd;773.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式2. 運算符優(yōu)先級在VHDL語言中中,邏輯運算、關(guān)系運算、算術(shù)運算、并置運算優(yōu)先級是不相同的,各種運算的操作不可能放在一個程序語句中,所以把各種運算符排成統(tǒng)一
57、的優(yōu)先順序表意義不明顯。其次,VHDL語言的結(jié)構(gòu)化描述,在綜合過程中,程序是并行的,沒有先后順序之分,寫在不同程序行的硬件描述程序同時并行工作。VHDL語言程序設(shè)計者不要理解程序是逐行執(zhí)行,運算是有先后順序的,這樣是不利于VHDL程序的設(shè)計。運算符的優(yōu)先順序僅在同一行的情況下有順序、有優(yōu)先,不同行的程序是同時的。各個運算符的優(yōu)先級別見下表3-2:783.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式793.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式3. 表達(dá)式VHDL語言中的表達(dá)式與其他高級程序設(shè)計語言非常相似,同樣是由運算符將基本元素連接起來的式子。要稱為一個表達(dá)式,需要有兩個要素:運算符和基本元素。基
58、本元素包括對象名、文字、函數(shù)調(diào)用及括起來的表達(dá)式。例如:ab,b (6)b (5)b (4),(AB)*B+(A REM B),7 REM (2)等。803.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式3.3.4 基本順序描述語句并行語句和順序語句是VHDL語言中的兩種基本描述語句,它們完整描述了數(shù)字系統(tǒng)的硬件結(jié)構(gòu)和邏輯功能。順序語句的特點是按照書寫的先后次序來執(zhí)行,它們只能出現(xiàn)在進(jìn)程、塊和子程序中,子程序包括函數(shù)(FUNCTION)和過程(PROCEDURE)。813.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式順序語句有兩類:一類是只能作為順序語句使用;另一類是既可以做順序語句也可以做并行語句,這類語
59、句放在進(jìn)程、子程序以外是并行語句,放在進(jìn)程、子程序內(nèi)是順序語句。VHDL語言有6類基本順序語句:賦值語句、流程控制語句、等待語句、子程序調(diào)用語句、返回語句和空操作語句。 823.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式1. 信號和變量賦值語句VHDL語言中的賦值語句是指將一個值或一個表達(dá)式的運算結(jié)果傳遞給某一個數(shù)據(jù)對象,如信號或變量。在設(shè)計實體中,數(shù)據(jù)的傳輸以及對端口外部數(shù)據(jù)的讀取都是通過賦值語句實現(xiàn)的。信號賦值語句信號的說明要放在VHDL語言程序的并行部分進(jìn)行,但可以在VHDL語言程序的并行部分和順序部分同時使用。信號賦值語句的書寫格式如下:目標(biāo)信號 = 表達(dá)式;該語句表示,將右邊信號量表達(dá)式
60、的值賦予左邊的目的信號量。例如:a = b;833.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式變量賦值語句在VHDL語言中,變量的說明和賦值語句只能在VHDL語言程序的順序部分進(jìn)行說明和使用,即只能出現(xiàn)在進(jìn)程、過程和函數(shù)中。變量賦值語句的書寫格式為:目標(biāo)變量 := 表達(dá)式;例如:count : = 10; 向變量count賦值10843.3 數(shù)據(jù)對象、數(shù)據(jù)類型、運算符和表達(dá)式2. IF語句IF語句是根據(jù)指定的條件確定執(zhí)行哪條語句。IF語句的條件判斷輸出是布爾量,即是“真”(TRUE)或“假”(FALSE)。因此在IF語句的條件表達(dá)式中只能使用關(guān)系運算操作(=,一,=)及邏輯運算操作的組合表達(dá)式。I
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度新型路牙材料研發(fā)與應(yīng)用勞務(wù)分包協(xié)議4篇
- 2025年建投公司綜合快訊項目進(jìn)度合同丨大干120天執(zhí)行4篇
- 2024版限量版啤酒銷售協(xié)議模板
- 探索游戲化教學(xué)在小學(xué)科學(xué)教育中的多元化應(yīng)用
- 現(xiàn)代企業(yè)如何通過技術(shù)手段提升安全生產(chǎn)的效率和質(zhì)量
- 科技與教育結(jié)合學(xué)生情緒管理策略的現(xiàn)代解讀
- 小學(xué)數(shù)學(xué)教學(xué)中資源的創(chuàng)造性應(yīng)用探索
- 2025年度高端酒店餐飲部專業(yè)廚師雇傭服務(wù)合同3篇
- 上海地區(qū)標(biāo)準(zhǔn)化住宅買賣合同模板2024
- 二零二五年度礦山設(shè)備租賃與安全監(jiān)管服務(wù)合同2篇
- 開展課外讀物負(fù)面清單管理的具體實施舉措方案
- 2025年云南中煙工業(yè)限責(zé)任公司招聘420人高頻重點提升(共500題)附帶答案詳解
- 2025-2030年中國洗衣液市場未來發(fā)展趨勢及前景調(diào)研分析報告
- 《智能網(wǎng)聯(lián)汽車智能傳感器測試與裝調(diào)》電子教案
- 客戶分級管理(標(biāo)準(zhǔn)版)課件
- 2023年江蘇省南京市中考化學(xué)真題
- 供電副所長述職報告
- 校園欺凌問題成因及對策分析研究論文
- 技術(shù)支持資料投標(biāo)書
- 老年人意外事件與與預(yù)防
- 預(yù)防艾滋病、梅毒和乙肝母嬰傳播轉(zhuǎn)介服務(wù)制度
評論
0/150
提交評論