硬件描述語言VHDL_講義.ppt_第1頁
硬件描述語言VHDL_講義.ppt_第2頁
硬件描述語言VHDL_講義.ppt_第3頁
硬件描述語言VHDL_講義.ppt_第4頁
硬件描述語言VHDL_講義.ppt_第5頁
已閱讀5頁,還剩193頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、硬件描述語言VHDL編程基礎(chǔ),本章首先介紹了VHDL的基本結(jié)構(gòu),使讀者初步掌握VHDL的基礎(chǔ)知識(shí)。最后通過大量的實(shí)例使讀者進(jìn)一步掌握使用VHDL的設(shè)計(jì)方法。,本章主要內(nèi)容,第一節(jié) 概述,第二節(jié) VHDL程序結(jié)構(gòu),第三節(jié) VHDL的基本數(shù)據(jù)類型,第四節(jié) VHDL的基本描述語句,第五節(jié) 子程序,第一節(jié) 概述,VHDL(Very high speed intergated circuit Hardware Description Language):非常高速集成電路的硬件描述語言。 20世紀(jì)80年代誕生于美國(guó)國(guó)防部的一項(xiàng)研究計(jì)劃,目的是使電路的設(shè)計(jì)能夠以文字的方式保存下來。 被列為IEEE1076標(biāo)

2、準(zhǔn),也成為工業(yè)界的標(biāo)準(zhǔn)。 1993年修改成IEEE Std1164-1993。 1995年,中國(guó)國(guó)家技術(shù)監(jiān)督局組織編撰并出版CAD通用技術(shù)規(guī)范,推薦VHDL語言作為我國(guó)電子設(shè)計(jì)自動(dòng)化硬件描述語言的國(guó)家標(biāo)準(zhǔn)。,1.VHDL簡(jiǎn)介,2Verilog HDL語言簡(jiǎn)介,Verilog HDL它是在C語言的基礎(chǔ)上發(fā)展起來的,由GDA(Gateway Design Automation)公司創(chuàng)造的,1989年cadence公司收購(gòu)了GDA公司,使得Verilog HDL成為了該公司的獨(dú)家專利。1990年Cadence公司公開發(fā)表了Verilog HDL,并成立LVI組織以促進(jìn)Verilog HDL成為IEE

3、E標(biāo)準(zhǔn),即IEEE Standard 1364-1995。 Verilog HDL的最大特點(diǎn)就是易學(xué)易用,如果有C語言的編程經(jīng)驗(yàn),可以在一個(gè)較短的時(shí)間內(nèi)很快的學(xué)習(xí)和掌握,Verilog HDL語言的系統(tǒng)抽象能力稍遜于VHDL,而對(duì)門級(jí)開關(guān)電路的描述能力則優(yōu)于VHDL。,二、VHDL的優(yōu)點(diǎn),1. 支持層次化設(shè)計(jì) 2. 具有多層次描述系統(tǒng)硬件功能的能力 3. 具有豐富的仿真語句和庫函數(shù) 4. VHDL語句的行為描述能力和程序結(jié)構(gòu)決定了他具有支持大規(guī)模設(shè)計(jì)的分解和已有設(shè)計(jì)的再利用功能。,VHDL的優(yōu)點(diǎn),5. 對(duì)設(shè)計(jì)的描述具有相對(duì)獨(dú)立性,與硬件的結(jié)構(gòu)無關(guān) 6.可以利用EDA工具進(jìn)行邏輯綜合和優(yōu)化,并自

4、動(dòng)將VHDL描述轉(zhuǎn)化為門級(jí)網(wǎng)表。 7. 具有可移植性,可以在不同的設(shè)計(jì)環(huán)境和系統(tǒng)平臺(tái)中使用。 8. 具有良好的可讀性。,三、VHDL與高級(jí)語言的區(qū)別,1.某些并行語句可以自動(dòng)的重復(fù)執(zhí)行,不需要用循環(huán)指令來保證。 2.VHDL中的許多語句不是按排列順序執(zhí)行的,而是可以同時(shí)執(zhí)行的(VHDL的并行性)。,返 回,第二節(jié) VHDL程序結(jié)構(gòu),一、VHDL的基本結(jié)構(gòu),ENTITY nand_2 IS -定義一個(gè)實(shí)體 PORT( a, b: IN STD_LOGIC; -描述輸入輸出 y: OUT STD_LOGIC); -信號(hào) END nand_2;,LIBRARY IEEE;-IEEE庫說明 USE I

5、EEE.STD_Logic_1164.ALL; -自定義元件庫,ARCHITECTURE rtl OF nand_2 IS BEGIN -結(jié)構(gòu)體說明 y=NOT(a AND b); END rtl;,1.USE定義區(qū),2.PACKAGE定義區(qū),3.ENTITY定義區(qū),4.ARCHITECTURE定義區(qū),定義元件庫,5.CONFIGURATION定義區(qū),定義使用那些自定義元件庫,定義電路實(shí)體的外觀:I/O接口的規(guī)格,描述電路內(nèi)部的邏輯功能,決定那一個(gè)architecture被使用,1. VHDL基本結(jié)構(gòu)圖,VHDL程序范例,兩位二進(jìn)制數(shù)比較器。a和b分別代表兩個(gè)二進(jìn)制數(shù);equ是比較器的輸出端口

6、。比較器的邏輯功能是:若a=b則輸出equ為1,否則equ為0。,-IEEE庫使用說明 LIBRARY ieee ; use ieee.std_logic_1164.all; -實(shí)體部分,對(duì)器件定義,包含有實(shí)體名、端口名、端口模式及其數(shù)據(jù)類型等信息 ENTITY ecomp2 is port (a,b:in std_logic_vector(1 downto 0); equ:out std_logic); end ecomp2; -結(jié)構(gòu)體部分,對(duì)器件描述,決定內(nèi)部功能結(jié)構(gòu) ARCHITECTURE behave of ecomp2 is begin equ=1 when (a=b)else 0

7、; end behave;,2庫(library),庫是用來存儲(chǔ)和放置可編譯的設(shè)計(jì)單元的地方,通過其目錄可查詢、調(diào)用。庫可以分為兩類:設(shè)計(jì)庫和資源庫。庫說明一般格式如下: library 庫名; use 庫名.邏輯體名;,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;,初學(xué)時(shí)不太熟悉,全部寫上。,庫的種類,IEEE庫 Std_logic_1164(標(biāo)準(zhǔn)邏輯類型和相應(yīng)函數(shù))是IEEE正式認(rèn)可的標(biāo)準(zhǔn)包集合 std_logic_arith

8、(數(shù)學(xué)函數(shù)) Synopsys公司提供的, 非IEEE認(rèn)可 std_logic_unsigned(無符號(hào)數(shù)學(xué)函數(shù)) std_logic_signed(符號(hào)數(shù)學(xué)函數(shù)) Std庫 是VHDL的標(biāo)準(zhǔn)庫,在庫中存放有稱為”STANDARD”的包集合 此外,TEXTIO該包在測(cè)試時(shí)使用 面向ASIC的庫 該庫存放著與邏輯門一一對(duì)應(yīng)的實(shí)體,方便進(jìn)行門級(jí)仿真,由個(gè)公司提供面向ASIC的邏輯門庫 WORK庫 現(xiàn)行作業(yè)庫,使用該庫時(shí)無需進(jìn)行任何說明 用戶定義的庫 用戶為自身設(shè)計(jì)需要所開發(fā)的共用包集合和實(shí)體等,匯集在一起定義的庫,3. 實(shí)體說明,功能:描述設(shè)計(jì)模塊的輸入/輸出信號(hào)或引腳,并給出設(shè)計(jì)模塊與外界的接口

9、。實(shí)體類似一個(gè)“黑盒”,實(shí)體描述了“黑盒”的輸入輸出口。 實(shí)體的電路意義相當(dāng)于器件,在電路原理圖上相當(dāng)于元件符號(hào)。實(shí)體的對(duì)象相當(dāng)廣泛,可以是完整的系統(tǒng)(特大型)、電路板、芯片、電路單元、小函數(shù)或是邏輯門。實(shí)體有實(shí)體名。 格式: ENTITY實(shí)體名IS GENERIC(類屬表); PORT(端口表); END ENTITY 實(shí)體名,entity ecomp2 is port ( a,b:in std_logic_vector(1 downto 0); equ:out std_logic - -注意,這最后沒有分號(hào) ); end ecomp2;,實(shí)體給出了一個(gè)外形和信號(hào)流方向,實(shí) 體 名,實(shí)體名實(shí)

10、際上是器件名,最好根據(jù)相應(yīng)的電路功能確定。如4位2進(jìn)制計(jì)數(shù)器用counter4b;8位加法器用add8b;3/8譯碼器用ym_38。,實(shí)體名必須與文件名相同,否則無法編譯。,實(shí)體名不能用工具庫中定義好的元件名。,實(shí)體名不能用中文,也不能用數(shù)字開頭。,類 屬 表,類屬表:用以將信息參數(shù)傳遞到實(shí)體。 常用于不同層次之間的信息傳遞。易于使程序模塊化和通用化。 類屬表的一般格式為: GENERIC(常數(shù)名:數(shù)據(jù)類型:=設(shè)定值 ) GENERIC(awidth : INTEGER:=3; timex: time ); 其中:常數(shù)名由設(shè)計(jì)者確定;數(shù)據(jù)類型通常取INTEGER或time等;在表中提供時(shí)間參數(shù)

11、、總線寬度等信息。,分頻器(偶數(shù)分頻)的VHDL描述,library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity fredivn is GENERIC (N:integer); port (clk:in std_logic; outclk:out std_logic);-分頻后脈沖 end fredivn; architecture behav of fredivn is signal count:integer;,begin p

12、rocess(clk) begin if(clkevent and clk=1) then -將clk信號(hào)N分頻 if(count=N-1)then count=0; else count=count+1; if count(integer(N/2) then -產(chǎn)生分頻后時(shí)鐘 outclk=0; else outclk=1; end if; end if; end if; end process; end behav;,對(duì)fredivn進(jìn)行調(diào)用,package test_con is constant N1:integer:=16; - 16分頻 end test_con; use work

13、.test_con.all; library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity frediv16 is port(clkin :in std_logic; clkout:out std_logic); end frediv16;,architecture behav of frediv16 is component fredivn -調(diào)用分頻函數(shù) generic(N:positive); port (clk:in std

14、_logic; outclk:out std_logic); END component; begin u1:fredivn - 匹配端口、參數(shù) generic map(N=N1) port map(clkin,clkout); end behav;,端口表:指明實(shí)體的輸入、輸出信號(hào)極其模式。 端口表的一般格式為: PORT(端口名:端口模式數(shù)據(jù)類型 ) 端口模式:共五種: IN(輸入)、 OUT(輸出)、 INOUT(雙向端口) 、 BUFFER(輸出并向內(nèi)部反饋)、LINKAGE (不指定方向),端 口 表,數(shù)據(jù)類型:VHDL作為一種強(qiáng)類型語言,必須對(duì)數(shù)據(jù)對(duì)象(常量、變量、信號(hào))規(guī)定取值范

15、圍,即對(duì)傳輸或存儲(chǔ)數(shù)據(jù)的類型作明確的界定。,實(shí) 體 舉 例,ENTITY black_box IS Generic ( constant width : integer := 7;); PORT ( clk, rst:INstd_logic; d:IN std_logic_vector(width DOWNTO 0); q:OUTstd_logic_vector(width DOWNTO 0); co:OUT std_logic); END black_box;,練 習(xí) 一,編寫包含以下內(nèi)容的實(shí)體代碼 端口 D 為12位輸入總線 端口 OE 和 CLK 都是1位輸入 端口 AD 為 12位雙向

16、總線 端口 A為12位輸出總線 端口 INT 是1位輸出 端口 AS 是一位輸出同時(shí)被用作內(nèi)部反饋,練習(xí)一答案,LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY my_design IS PORT ( d:IN std_logic_vector(11 DOWNTO 0); oe, clk:IN std_logic; ad:INOUT std_logic_vector(11 DOWNTO 0); a:OUT std_logic_vector(11 DOWNTO 0); int:OUT std_logic; as:BUFFER std_logic)

17、; END my_design;,練 習(xí),1、編寫包含全加器的實(shí)體代碼。 2、編寫4選1數(shù)據(jù)選擇器的實(shí)體代碼。,4. 結(jié)構(gòu)體,結(jié)構(gòu)體:通過若干并行語句來描述設(shè)計(jì)實(shí)體的邏輯功能(行為描述)或內(nèi)部電路結(jié)構(gòu)(結(jié)構(gòu)描述),從而建立設(shè)計(jì)實(shí)體輸出與輸入之間的關(guān)系。一個(gè)設(shè)計(jì)實(shí)體可以有多個(gè)結(jié)構(gòu)體。 實(shí)體是“黑箱”,結(jié)構(gòu)體在電路上相當(dāng)于器件的內(nèi)部電路。結(jié)構(gòu)體都必須附屬于某個(gè)實(shí)體,一個(gè)實(shí)體可同時(shí)具備多個(gè)結(jié)構(gòu)體。 格式: ARCHITECTURE 結(jié)構(gòu)體名 OF 實(shí)體名 IS 說明語句; BEGIN 并行語句; END ARCHITECTURE 結(jié)構(gòu)體名;,ARCHITECTURE behave of ecomp2

18、 is begin equ=1 when (a=b)else 0; end behave;,電路未必是這樣,一般情況下我們不必關(guān)心怎樣實(shí)現(xiàn),我們只關(guān)心輸入、輸出間是否滿足要求。,VHDL結(jié)構(gòu)體術(shù)語,說明語句:用于定義結(jié)構(gòu)體中所用的數(shù)據(jù)對(duì)象和子程序,并對(duì)所引用的元件加以說明,但不能定義變量。 并行語句 并行語句有五種類型,可以把它們看成結(jié)構(gòu)體的五種子結(jié)構(gòu)。這五種語句結(jié)構(gòu)本身是并行語句,但內(nèi)部可能含有并行運(yùn)行的邏輯描述語句或順序運(yùn)行的邏輯描述語句,如進(jìn)程內(nèi)部包含的即為順序語句。 五種語句結(jié)構(gòu)分別為塊語句、進(jìn)程語句、信號(hào)賦值語句、子程序調(diào)用語句和元件例化語句。,結(jié)構(gòu)體結(jié)構(gòu)圖,實(shí)體和結(jié)構(gòu)體之間的關(guān)系,

19、Structure(結(jié)構(gòu))描述 描述該設(shè)計(jì)單元的硬件結(jié)構(gòu),即該硬件是如何構(gòu)成的,類似于數(shù)字電路中的邏輯圖描述. Date Flow(數(shù)據(jù)流)描述 它是類似于寄存器傳輸級(jí)的方式描述數(shù)據(jù)的傳輸和變換,以規(guī)定設(shè)計(jì)中的各種寄存器形式為特征,然后在寄存器之間插入組合邏輯。與數(shù)字電路中的真值表描述相似。 Behavior Process(行為級(jí))描述 只描述所希望電路的功能或者電路行為(輸入輸出間轉(zhuǎn)換的行為),而沒有指明或涉及實(shí)現(xiàn)這些行為的硬件結(jié)構(gòu)。與數(shù)字電路中的邏輯表達(dá)式描述相似。,結(jié)構(gòu)體的三種描述形式,architecture one of mux21 is single d,e:bit; begin

20、 d=a and (not)s; e=b and s; y=d or e; end one;,Structure描述,Structure描述,結(jié)構(gòu)描述方法一般用在主模塊與子模塊的調(diào)用上,所以這種描述方法支持層次化(hierarchy)的設(shè)計(jì) 最能提高設(shè)計(jì)效率,它可以將已有的設(shè)計(jì)成果,方便的用到新的設(shè)計(jì)中去 目前存在的大量的電路板上分離元件的集成工作都需要使用這種方法,Date Flow描述,architecture one of mux21 is begin y=a when s=0 else b; end one;,數(shù)據(jù)流描述,對(duì)信號(hào)與數(shù)據(jù)之間的邏輯關(guān)系與結(jié)構(gòu)非常清楚的情況下,采用次方法描述

21、 主要適用于算法描述,如FFT快速傅立葉變換,DCT離散余弦變換,architecture one of mux21 is begin y=(a and (not s) or (b and s); end one;,Behavior Process描述,行為級(jí)描述,是對(duì)系統(tǒng)數(shù)學(xué)模型的描述,其抽象程度比其他兩種方式要高 大量使用算術(shù)運(yùn)算、關(guān)系運(yùn)算、慣性延時(shí)、傳輸延時(shí)等難于或不能邏輯綜合的VHDL語言 主要用于系統(tǒng)數(shù)學(xué)模型的仿真或系統(tǒng)工作原理的仿真 信號(hào)被分為控制信號(hào)和被控信號(hào)。僅知道控制信號(hào)和被控信號(hào)的控制關(guān)系,而不知道具體結(jié)構(gòu),一般采用這種描述方法,描述風(fēng)格,常用的描述風(fēng)格有:行為描述、數(shù)據(jù)流

22、描述、結(jié)構(gòu)化描述及混合描述。 1行為描述 描述中采用進(jìn)程語句。 2數(shù)據(jù)流描述 描述中采用除進(jìn)程外的其他并發(fā)語句。 3結(jié)構(gòu)化描述 用來調(diào)用低層次設(shè)計(jì)模塊,支持大型設(shè)計(jì)邏輯分解。 4混合描述 大型設(shè)計(jì)中,常采用行為描述與結(jié)構(gòu)描述相結(jié)合的混合描述。,布爾加法器的三種描述方式,三個(gè)輸入信號(hào)A、B和enable,一個(gè)輸出信號(hào)C,當(dāng)enable為高電平時(shí),輸出信號(hào)C等于A和B的和;當(dāng)enable為低電平時(shí),輸出,輸出C保持低電平,行為級(jí)描述,If enable = 1 Then C=A+B Else C=0 End If; 該描述不包含任何與電路實(shí)現(xiàn)的有關(guān)信息 最接近其他高級(jí)語言的描述風(fēng)格,最容易被設(shè)計(jì)者

23、理解和使用,數(shù)據(jù)流級(jí)描述,C=(enable AND NOT(A) AND B) OR (enable AND A AND NOT(B); 更接近具體電路,抽象層次較行為描述有所降低,結(jié)構(gòu)描述,U1: XOR2 Port Map(A, B, temp) U2: AND2 Port Map(temp, enable, C) 規(guī)定了具體電路實(shí)現(xiàn)形式,采用一個(gè)2輸入異或門和一個(gè)2輸入與門來實(shí)現(xiàn)。 可以實(shí)現(xiàn)多層次的調(diào)用。,結(jié)構(gòu)體行為描述舉例,2 X 8 Input AND gate: ENTITY black_box IS PORT ( a, b:INstd_logic_vector(7 DOWNTO

24、 0); y:OUTstd_logic_vector(7 DOWNTO 0); END black_box; ARCHITECTURE example OF black_box IS BEGIN y = a AND b; END example;,操作案例,1、操作題目:通過38譯碼器的設(shè)計(jì)實(shí)例,從整體結(jié)構(gòu)上初步認(rèn)識(shí)VHDL的基本結(jié)構(gòu)和語句特點(diǎn)。 2、38譯碼器的電路圖如圖所示,有4個(gè)輸入端(A0、A1、A2、EN),8個(gè)輸出端(Y0Y7) 3、步驟:定義元件庫、實(shí)體、結(jié)構(gòu)體、編譯、仿真。,返 回,第三節(jié) VHDL的基本數(shù)據(jù)類型,一、數(shù)據(jù)對(duì)象,是數(shù)據(jù)類型的載體,共有三種形式的對(duì)象: Const

25、ant(常量) Variable(變量) Signal(信號(hào)) 對(duì)象的說明格式為: 對(duì)象類別 標(biāo)識(shí)符表:類型標(biāo)識(shí):=初值,(1)常量聲明,常量是全局量,在結(jié)構(gòu)描述、程序包說明、實(shí)體說明、過程說明、函數(shù)調(diào)用說明和進(jìn)程說明中使用。 例: constant WIDTH :INTEGER := 8; constant width: integer := 8; constant Us: real := 12.0; constant bus: std_logic_vector(3 down to 0) :=”1101”; 注: 常量一旦被賦值就不能再改變,VHDL語言規(guī)定的常量的有效范圍,(2)變量聲明,

26、定義了給定類型的變量名稱。 例: variable A,B :BIT; variable j : integer,變量賦值,整體賦值:temp := “10101010”;temp := x”AA” ; 逐位賦值:temp(7) := 1; 多位賦值temp (7 downto 4) := “1010”;,(3)信號(hào)聲明,信號(hào)可以將結(jié)構(gòu)體中分離的并行語句連接起來,并且通過端口其他模塊與該設(shè)計(jì)內(nèi)的連接起來。 信號(hào)為器件內(nèi)部節(jié)點(diǎn)信號(hào),數(shù)據(jù)的進(jìn)出不像端口信號(hào)那樣受限制,不必定義其端口模式。 定義信號(hào)的目的是為了在設(shè)計(jì)電路時(shí)使用該信號(hào)。 用“=”來給信號(hào)賦值 例: signal A,B :BIT; s

27、ignal INIT :INTEGE: = -1,信號(hào)賦值,SIGNAL temp : Std_Logic_Vector (7 downto 0); 整體賦值:temp = “10101010”;temp = x”AA” ; 逐位賦值:temp(7) = 1; 多位賦值: temp (7 downto 4) = “1010”;,信號(hào)舉例,LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY simp IS PORT(a, b, c, d : IN Std_Logic; g : OUT Std_Logic); END simp; ARCHITECTU

28、RE logic OF simp IS SIGNAL e,f : Std_Logic; BEGIN e = a or b; f=not(c or d); g =e and f; END logic;,信號(hào)和變量的作用范圍,信號(hào)和變量的區(qū)別,信號(hào)和變量值代入的區(qū)別,Process(a,b,c,d) Begin d=a; x=b+d; d=c; y=b+d; End Process;,Process(a,b,c,d) Begin d:=a; x=b+d; d:=c; y=b+d; End Process;,X=b+c Y=b+c,X=b+a Y=b+c,執(zhí)行結(jié)果:,二、數(shù)據(jù)類型,1. 標(biāo)準(zhǔn)定義的數(shù)

29、據(jù)類型 不必用USE說明而直接使用。 1)Boolean(布爾量):取值為FALSE和TRUE。 2)Character(字符):使用時(shí)用單引號(hào)括起來,如:A。 3)String(字符串):使用時(shí)用雙引號(hào)括起來,如: 111000101 。 4)Integer(整數(shù)):范圍在-(231-1)(231-1) 5)Real(實(shí)數(shù)):范圍在-1.0E+38 + 1.0E+38,6)Bit(位):取值為0或1. 7)Time(時(shí)間):取值范圍與整數(shù)一致,一般用于仿真。(fs,ps,ns,us,ms,s,min,h) 8)Bit_vector(位矢量):基于BIT數(shù)據(jù)類型的數(shù)組。使用時(shí)必需注明寬度。 9

30、)Natural(自然數(shù))和Positive(正整數(shù)):是整數(shù)的一個(gè)子類型。 10)Severity level(錯(cuò)誤等級(jí)):用來設(shè)計(jì)系統(tǒng)的工作狀態(tài)。有四種狀態(tài)值:NOTE(注意)、WARNING(警告)、ERROR(錯(cuò)誤)、FAILURE(失敗)。,2. 用戶自定義的數(shù)據(jù)類型,1)Enumerated Types(枚舉類型)格式如下: TYPE 數(shù)據(jù)類型名 IS (枚舉文字,枚舉文字); 例如:TYPE color IS (red,green,yellow,blue); TYPE level IS (0,1,Z); type states is (read,write); signal pr

31、esent _ state,next _ state:states; 再舉一例自定義數(shù)據(jù)類型week如下: type week is (sun,mon,tue,wed,thu,fri,sat); signal hotel,home :week; 上述對(duì)信號(hào)hotel和home的定義表明它們是自定義數(shù)據(jù)類型week,因此這兩個(gè)信號(hào)之間可以相互作用,因?yàn)橹挥兴鼈儗儆谕粩?shù)據(jù)類型。,2)Integer Types(整數(shù)類型)和 Real Types(實(shí)數(shù)類型)格式為: TYPE 數(shù)據(jù)類型名 IS RANGE 約束范圍; 例如: TYPE int IS INTEGER RANGE -10 TO 10;

32、 TYPE current IS REAL RANGE -1E4 to 1E4 3)Array Types(數(shù)組類型)格式如下: TYPE 數(shù)據(jù)類型名 IS ARRAY(索引范圍)OF類型名稱 ; 例如:TYPE a IS ARRAY(integer0 TO 9)OF std_logic,4)物理類型)格式如下: TYPE 數(shù)據(jù)類型名 IS 范圍; units 基本單位; 單位; End units; 可以對(duì)時(shí)間,容量,阻抗等進(jìn)行定義。 例如: type time is range 1E18 to 1E18; units fs; -飛秒,相當(dāng)于10-15秒,VHDL中最小的時(shí)間單位 ps=10

33、00 fs; -皮秒,相當(dāng)于10-12秒 ns=1000 ps; -納秒,相當(dāng)于10-9秒 us=1000 ns; -微秒,相當(dāng)于10-6秒 ms=1000 us; -毫秒,相當(dāng)于10-3秒 sec=1000 ms; -秒 min=60 sec; -分 hr=60 min; -時(shí) end units;,5)Record Types(記錄類型)格式如下:,TYPE 數(shù)據(jù)類型名 IS record 元素名:數(shù)據(jù)類型名; 元素名:數(shù)據(jù)類型名; End Record; 例如:將鎖存器的輸入輸出和使能構(gòu)成一個(gè)記錄: type record_name is record latch_in: bit_vec

34、tor(3 downto 0); latch_out: bit_vector(3 downto 0); enable:bit; end record;,3. 用戶自定義子類型,subtype 語句用來定義數(shù)據(jù)類型的子類型。VHDL規(guī)定任何基本數(shù)據(jù)類型均可定義其子類型。子類型與其父類型完全兼容。 格式:subtype 子類型名 is 基本數(shù)據(jù)類型 range 約束范圍; 例:type integer is 2147483647 to +2147483647; -1 type i is range 0 to 50; -2 subtype natural is integer range 0 to

35、+2147483647; -3 subtype ci is i range 0 to 30; -4 subtype di is ci range 0 to 10; -5 subtype data is bit_vector (3 downto 0); -6 subtype lower_data is data; - 7 第三句定義自然數(shù)為整數(shù)數(shù)據(jù)類型的子類型;第四句定義ci為i的子類型。第五句定義di為ci的子類型,VHDL允許定義子類型的子類型;第六句,使用約束條件(3 downto 0)對(duì)非限定性數(shù)組bit_vector作具體說明;第七句,lower_data是data的一個(gè)子類型。,4.

36、 IEEE預(yù)定義標(biāo)準(zhǔn)邏輯位與矢量,在IEEE的程序包中std_logic_1164中定義了兩個(gè)非常重要的數(shù)據(jù)類型。 1)std_logic:工業(yè)標(biāo)準(zhǔn)的邏輯類型。取值為U(初始值)、X(不定)、0(邏輯0)、1(邏輯1)、Z(高阻態(tài))、W(弱信號(hào)不定) 、L(弱信號(hào)0)、H(弱信號(hào)1)、(不可能情況) 。 2)std_logic_vector:工業(yè)標(biāo)準(zhǔn)的邏輯類型。std_logic的組合。 注意:使用這兩種數(shù)據(jù)時(shí),程序中必須聲明: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL,Std_Logic數(shù)據(jù)類型,IEEE std_logic_ 1164中定義的一種數(shù)

37、據(jù)類型,它包含9種取值分別為: U未初始化用于仿真 X強(qiáng)未知用于仿真 0強(qiáng)0用于綜合與仿真 1強(qiáng)1用于綜合與仿真 Z高阻用于綜合與仿真 W弱未知用于仿真 L弱0用于綜合與仿真 H弱1用于綜合與仿真 _忽略用于綜合與仿真,三、標(biāo)識(shí)符,標(biāo)識(shí)符VHDL語言的是最基本的要素之一,是使用VHDL語言的基礎(chǔ)。標(biāo)識(shí)符是描述VHDL語言中端口、信號(hào)、常數(shù)、變量以及函數(shù)等的名稱的字符串。VHDL標(biāo)識(shí)符書寫規(guī)則如下: 1)使用的字符由26個(gè)英文字母、數(shù)字09以及下劃線組成; 2)標(biāo)識(shí)符必須以英文字母開始,不區(qū)分大小寫; 3)不能以下劃線結(jié)尾;不能有兩個(gè)相連的下劃線 4)標(biāo)識(shí)符中不能有空格; 5)標(biāo)識(shí)符不能與VHD

38、L的關(guān)鍵字重名。 6)說明文字開頭一律為兩個(gè)連續(xù)的“-”,注釋可以在任意語句后面,也可以獨(dú)立成行。,幾個(gè)合法的基本標(biāo)識(shí)符: a , October , MAY_1 , loop1 , new_state 幾個(gè)非法的基本標(biāo)識(shí)符: signal -保留字不能用作基本標(biāo)識(shí)符;old_state_ -最后字符不能是下劃線; New#type -有非法字符#; 8home -不能用數(shù)字開頭。,四、運(yùn)算符,(1)算術(shù)運(yùn)算符,+ 加 減 * 乘 / 除 * 乘方 REM 求余 MOD 求模 ABS 求絕對(duì)值 正一元運(yùn)算 負(fù),一元運(yùn)算,(2)關(guān)系運(yùn)算符,= 等于 /= 不等于 小于 = 小于或等于 大于 =大

39、于或等于 其中=符號(hào)也用于信號(hào)的賦值操作,(3)邏輯運(yùn)算符,AND 邏輯與 SLL 邏輯左移 OR 邏輯 SRL 邏輯右移 NAND 邏輯與非 SLA 算術(shù)左移 NOR 邏輯或非 SRA 算術(shù)右移 XOR 邏輯異或 ROR 邏輯循環(huán)右移 NOT 邏輯非 ROL 邏輯循環(huán)左移 當(dāng)一個(gè)語句中存在兩個(gè)以上的邏輯表達(dá)式,VHDL規(guī)定,左右沒有優(yōu)先級(jí)差別。 要借助括號(hào)規(guī)定運(yùn)算的順序 在所有邏輯運(yùn)算符中,not的優(yōu)先級(jí)最高,(4)連接運(yùn)算符, 表示 c 為6位位矢量,五、VHDL屬性,VHDL屬性(Attribute)是指實(shí)體、結(jié)構(gòu)體、類型及信號(hào)的一些表現(xiàn)特征。一般需要了解VHDL中的數(shù)值類屬性、函數(shù)類屬

40、性以及范圍類屬性。其引用的一般形式均為:對(duì)象屬性。,1數(shù)值類屬性,數(shù)值類屬性可用于返回?cái)?shù)組、塊或一般數(shù)據(jù)的有關(guān)屬性。如左邊界(left)、右邊界(right)、下邊界(low)、上邊界(high)和數(shù)組長(zhǎng)度(length)。例如: sdown :IN std_logic_vector(8 DOWNTO 0); 這個(gè)信號(hào)的各屬性值如下: sdownleft=8;sdownright=0;sdownlow=0; sdownhigh=8;sdownlength=9;,2函數(shù)類屬性,函數(shù)類屬性用來返回有關(guān)信號(hào)行為功能的信息。如信號(hào)屬性函數(shù):event,它的值為布爾型,如果剛好有事件發(fā)生在該屬性所附著的

41、信號(hào)上(即信號(hào)有變化),則其取值為True,否則為False。利用此屬性可決定時(shí)鐘邊沿是否有效,即時(shí)鐘是否發(fā)生。例如:時(shí)鐘邊沿表示SIGNAL clk:IN std_logic則:clkevent AND clk=1,表示時(shí)鐘的上升沿。 clkevent AND clk=0,表示時(shí)鐘的下降沿。 此外,VHDL還預(yù)定義了兩個(gè)函數(shù),利用它們也可以很方便地檢測(cè)信號(hào)的變化狀態(tài)。 rising_edge(clk) -檢測(cè)上升沿有效 falling_edge(clk) -檢測(cè)下降沿有效,3范圍類屬性,范圍(RANGE)類屬性,用來生成一個(gè)限制性數(shù)據(jù)對(duì)象的范圍。 例如:數(shù)據(jù)總線的范圍 SIGNAL data

42、_bus :std_logic_wector(15 DOWNTO 0); Data_busRANGE=15 DOWNTO 0; 注意:MAX+PLUS不支持該屬性。,練 習(xí),1、編寫包含全加器的結(jié)構(gòu)體代碼。 2、編寫3輸入與非門的結(jié)構(gòu)體代碼。,ARCHITECTURE example1 OF Full_adder IS BEGIN sum= a XOR b XOR c; c = (a AND b)OR(b AND c)OR(a AND c); END example1;,ARCHITECTURE example2 OF and3 IS BEGIN y= a AND b AND c; END e

43、xample2;,練 習(xí) 答 案,返 回,第四節(jié) VHDL的基本描述語句,一、順序語句,1. IF語句,順序語句用于進(jìn)程過程或函數(shù)之中,為算法描述提供了IF 語句、CASE語句、 LOOP語句。,可以用于實(shí)現(xiàn)兩種或兩種以上的條件分支判斷。 格式為:IF 布爾表達(dá)式1 THEN 順序語句1 ELSIF 布爾表達(dá)式2 THEN 順序語句2 END IF,1) IF 布爾表達(dá)式1 THEN順序語句1 END IF,常用格式,2) IF 布爾表達(dá)式1 THEN 順序語句1 ELSE 順序語句2 END IF,3) IF 布爾表達(dá)式1 THEN 順序語句1 ELSIF 布爾表達(dá)式2 THEN 順序語句2

44、 END IF,4) IF 布爾表達(dá)式1 THEN IF 布爾表達(dá)式2 THEN 順序語句 END IF END IF,【例4-3】IF語句描述的判斷程序(2選1),IFs = 0THEN y= a0; ELSIFs =1THEN y= a1; ENDIF,練 習(xí),用IF語句實(shí)現(xiàn)4選1,IF s= 00 THEN y= a; ELSIF s= 01THEN y= b; ELSIF s= 10THEN y= c; ELSE y= d; END IF;,操作案例,1、操作題目:通過四選一數(shù)據(jù)選擇器設(shè)計(jì)實(shí)例,講解順序語句的語句特點(diǎn)。 2、四選一數(shù)據(jù)選擇器的電路圖:如圖4-3,有7個(gè)輸入端(A0、A1

45、、D0、D1、D2、D3、S),1個(gè)輸出端(Y) 3、步驟:分別用IF語句和CASE語句進(jìn)行編程,然后編譯、仿真。,2. CASE語句,CASE語句用于兩路或多分支判斷結(jié)構(gòu),它以一個(gè)多值表達(dá)式為判斷條件,依條件式的取值不同而實(shí)現(xiàn)多路分支。 格式為:CASE 表達(dá)式 IS WHEN 條件 =順序語句; WHEN OTHERS =順序語句; END CASE,使用CASE語句時(shí)應(yīng)注意: 條件句的選擇值應(yīng)在表達(dá)式的取值范圍內(nèi). 除非所有條件句中的選擇值能完全覆蓋case語句中表達(dá)式的取值,否則最后一個(gè)條件句中的選擇必須用“others”表示. case語句中每一條件句的選擇值只能出現(xiàn)一次,不能有相同

46、選擇值的條件語句出現(xiàn). case語句執(zhí)行中必須選中且只能選中所列條件語句中的一條.,【例4-4】case語句描述的判斷程序,Process(s) Begin Case s Is WHEN00=dddd=0; -當(dāng)s=其他時(shí),d=0 End Case;,練 習(xí),用case語句實(shí)現(xiàn)3-8譯碼器,3. LOOP語句,用于循環(huán)控制,與LOOP有關(guān)的五種語法其格式如下: (1)循環(huán)標(biāo)號(hào): LOOP 順序語句; END LOOP 循環(huán)標(biāo)號(hào); (2)標(biāo)號(hào): FOR 循環(huán)變量 IN 循環(huán)次數(shù)范圍 LOOP 順序語句; END LOOP 循環(huán)標(biāo)號(hào); (3)循環(huán)標(biāo)號(hào): WHILE 條件 LOOP 順序語句; EN

47、D LOOP 循環(huán)標(biāo)號(hào);,(4)NEXT語句:在LOOP語句中,用來跳出當(dāng)前循環(huán)。其格式為: NEXT 循環(huán)標(biāo)號(hào) WHEN條件; (5)EXIT語句:用來結(jié)束LOOP語句的執(zhí)行。其格式為: EXIT 循環(huán)標(biāo)號(hào) WHEN條件;,利用LOOP語句可以簡(jiǎn)化同類順序語句表達(dá)式.如: Signal a,b,c:std_logic_vector(1 to 3) For n IN 1 to 3 LOOP a(n)= b(n)AND c(n) END LOOP 等效于: a(1)= b(1)AND c(1) a(2)= b(2)AND c(2) a(3)= b(3)AND c(3),4NULL語句,NULL是

48、一條空語句,執(zhí)行該語句使程序走到下一條語句。例4-6是用VHDL描述3路數(shù)據(jù)選擇的程序,使用NULL語句可以排除一些不用的條件。,Process(s,a,b,c) Begin Case s Is WHEN00=dddNULL; End Case; End Process;,二、并行語句,并行語句與一般軟件程序的最大區(qū)別就是在結(jié)構(gòu)體中的執(zhí)行都是同時(shí)進(jìn)行的,既它們的執(zhí)行順序與語法的書寫順序無關(guān)。這種并行性是由硬件本身的并行性決定的,一旦電路接通電源,各部分就會(huì)按照事先設(shè)計(jì)好的方案同時(shí)工作。,常用的并行語句有,進(jìn)程語句(PROCESS)、 塊語句( BLOCK )、 并行信號(hào)賦值語句、 生成語句(

49、GENERATE )、 元件例化語句、 斷言語句。,1. 進(jìn)程語句,進(jìn)程語句是一段復(fù)合語句,由一段程序構(gòu)成,各個(gè)進(jìn)程之間是并行進(jìn)行的,而進(jìn)程的內(nèi)部語句都是順序執(zhí)行的。一個(gè)結(jié)構(gòu)體中可以包括多個(gè)進(jìn)程語句,多個(gè)進(jìn)程之間依靠信號(hào)(SIGNAL)來傳遞。,進(jìn)程(process)語句最具VHDL語言特色。提 供了一種用算法描述硬件行為的方法。 特點(diǎn): 1、進(jìn)程與進(jìn)程,或其它并發(fā)語句之間的并發(fā)性; 2、進(jìn)程內(nèi)部的順序性; 3、進(jìn)程的啟動(dòng)與掛起; 4、進(jìn)程與進(jìn)程,或其它并發(fā)語句之間的通信。,進(jìn)程語句,進(jìn)程語句的格式如下: 標(biāo)號(hào): PROCESS(敏感信號(hào)表) 說明語句;-定義一些局部變量 BEGIN 順序語句

50、; END PROCESS 標(biāo)號(hào): ; 敏感信號(hào)表:進(jìn)程內(nèi)要讀取的所有敏感信號(hào) (包括端口)的列表。每一個(gè)敏感 信號(hào)的變化,都將啟動(dòng)進(jìn)程。 格式:信號(hào)名稱 ,信號(hào)名稱 ,敏感信號(hào)表,進(jìn)程賴以啟動(dòng)的敏感表。對(duì)于表中列出的任何信號(hào)的改變,都將啟動(dòng)進(jìn)程,執(zhí)行進(jìn)程內(nèi)相應(yīng)順序語句. 一些VHDL綜合器,綜合后對(duì)應(yīng)進(jìn)程的硬件系統(tǒng)對(duì)進(jìn)程中的所有輸入的信號(hào)都是敏感的,不論在源程序的進(jìn)程中是否把所有的信號(hào)都列人敏感表中. 為了使軟件仿真與綜合后的硬件仿真對(duì)應(yīng)起來,應(yīng)當(dāng)將進(jìn)程中的所有輸入信號(hào)都列入敏感表中.,敏感信號(hào)表的特點(diǎn):,1、同步進(jìn)程的敏感信號(hào)表中只有時(shí)鐘信號(hào)。 如: process(clk) begin

51、if(clkevent and clk = 1) then if reset = 1 then data = “00”; else data = in_data; end if; end if; end process;,2、異步進(jìn)程敏感信號(hào)表中除時(shí)鐘信號(hào)外,還有其它信號(hào)。,例: process(clk,reset) begin if reset = 1 then data = “00”; elsif(clkevent and clk = 1) then data = in_data; end if; end process;,3、如果有 wait 語句,則不允許有敏感信號(hào)表。,PROCESS

52、 (a,b) BEGIN -sequential statements END PROCESS; PROCESS BEGIN - sequential statements WAIT ON (a,b) ; END PROCESS;,LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY if_case IS PORT ( a, b, c, d : IN Std_Logic; sel : IN Std_Logic_Vector(1 downto 0); y, z : OUT Std_Logic); END if_case; ARCHITECTURE l

53、ogic OF if_case IS BEGIN if_label: PROCESS(a, b, c, d, sel) BEGIN IF sel=00 THEN y = a; ELSIF sel=01 THEN y = b; ELSIF sel=10 THEN y = c; ELSE y = d; END IF; END PROCESS if_label;,case_label: PROCESS(a, b, c, d, sel)BEGINCASE sel ISWHEN 00 =z z z z z = 0;END CASE;END PROCESS case_label;END logic;,進(jìn)程

54、語句舉例,敏感表舉例,if_ label: PROCESS(oe) BEGIN IF oe=1 THEN y = a; END IF; END PROCESS if_label;,敏感表舉例,if_label: PROCESS(oe,a) BEGIN IF oe=1 THEN y = a; END IF; END PROCESS if_label;,進(jìn)行進(jìn)程設(shè)計(jì)時(shí)應(yīng)注意以下問題: 1、進(jìn)程為一個(gè)獨(dú)立的無限循環(huán)語句。它只有兩種狀態(tài):執(zhí)行狀態(tài)和等待狀態(tài)。滿足條件進(jìn)入執(zhí)行狀態(tài),當(dāng)遇到end process語句后停止執(zhí)行。 2、進(jìn)程中的順序語句具有明顯的順序/并行運(yùn)行雙重性。即。進(jìn)程中的順序語句具有并

55、行執(zhí)行的性質(zhì)。如:Process(s,a,b,c) Begin Case s Is WHEN00=dddNULL; End Case; End Process;,3、進(jìn)程必須由一個(gè)敏感信號(hào)表中定義的任一敏感信號(hào)的變化來啟動(dòng),否則必須有一個(gè)顯示的WAIT語句來激勵(lì)。 4、進(jìn)程語句本身是并行語句。即同一結(jié)構(gòu)體中的不同進(jìn)程是并行運(yùn)行的,后者是根據(jù)敏感信號(hào)獨(dú)立運(yùn)行的。 5、信號(hào)是多個(gè)進(jìn)程間的通信線。 6、在同一進(jìn)程中只能放置一個(gè)含有時(shí)鐘邊沿檢測(cè)語句的條件語句。,2. 塊語句,塊語句將結(jié)構(gòu)體中的并行語句結(jié)合在一起,其主要目的是改善并行語句極其結(jié)構(gòu)的可讀性,一般用于較復(fù)雜的VHDL程序。 其格式如下: 塊

56、名稱: BLOCK (表達(dá)式) 塊聲明項(xiàng); BEGIN 并行語句; END BLOCK 塊名稱;,(1)、塊語句的使用不影響邏輯功能,以下兩種描述結(jié)果相同: 描述一: a1: out1=1 after 2 ns; a2: out2=1 after 2 ns; a3: out3=1 after 2 ns; 描述二: a1: out1=1 after 2 ns; blk1: block begin a2: out2=1 after 2 ns; a3: out3=1 after 2 ns; end block blk1;,(2)、嵌套塊,子塊聲明與父塊聲明的對(duì)象同名時(shí),子塊聲明將忽略掉父塊聲明。,兩

57、個(gè)相互獨(dú)立的2輸入與門,(3)、衛(wèi)式(Guarded)塊,由保護(hù)表達(dá)式值的真、假?zèng)Q定塊語句的執(zhí)行與否。綜合不支持。,3. 并行信號(hào)賦值語句,包括三種: 簡(jiǎn)單并行信號(hào)賦值; 條件信號(hào)賦值; 選擇信號(hào)賦值。 共同特點(diǎn): 1、賦值目標(biāo)必須是信號(hào),與其它并行語句同 時(shí)執(zhí)行,與書寫順序及是否在塊語句中無關(guān)。 2、每一信號(hào)賦值語句等效于一個(gè)進(jìn)程語句。 所有輸入信號(hào)的變化都將啟動(dòng)該語句的執(zhí)行。,一個(gè)簡(jiǎn)單并行信號(hào)賦值語句是一個(gè)進(jìn)程的縮寫。,(1)簡(jiǎn)單(并行)信號(hào)賦值語句 格式:賦值目標(biāo)=表達(dá)式; 如q =b+c; 例:以下兩種描述等價(jià),architecture behav of a_var is begin output=a(i); end behav;,architecture behav of a_var is begin process(a, i) begin output=a(i); end process; end behav;,等效:,LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY ex1 IS PORT(a, b : IN STD_LOGIC; y : OUT STD_LOGIC); END ex1; ARCHITECTURE rtl OF ex1 IS SIGNAL c :

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論