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

下載本文檔

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

文檔簡介

1、硬件描述語言VHDL編程基礎(chǔ),本章首先介紹了VHDL的基本結(jié)構(gòu),使讀者初步掌握VHDL的基礎(chǔ)知識。最后通過大量的實例使讀者進(jìn)一步掌握使用VHDL的設(shè)計方法。,本章主要內(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年代誕生于美國國防部的一項研究計劃,目的是使電路的設(shè)計能夠以文字的方式保存下來。 被列為IEEE1076標(biāo)

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

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

4、動將VHDL描述轉(zhuǎn)化為門級網(wǎng)表。 7. 具有可移植性,可以在不同的設(shè)計環(huán)境和系統(tǒng)平臺中使用。 8. 具有良好的可讀性。,三、VHDL與高級語言的區(qū)別,1.某些并行語句可以自動的重復(fù)執(zhí)行,不需要用循環(huán)指令來保證。 2.VHDL中的許多語句不是按排列順序執(zhí)行的,而是可以同時執(zhí)行的(VHDL的并行性)。,返 回,第二節(jié) VHDL程序結(jié)構(gòu),一、VHDL的基本結(jié)構(gòu),ENTITY nand_2 IS -定義一個實體 PORT( a, b: IN STD_LOGIC; -描述輸入輸出 y: OUT STD_LOGIC); -信號 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ū),定義使用那些自定義元件庫,定義電路實體的外觀:I/O接口的規(guī)格,描述電路內(nèi)部的邏輯功能,決定那一個architecture被使用,1. VHDL基本結(jié)構(gòu)圖,VHDL程序范例,兩位二進(jìn)制數(shù)比較器。a和b分別代表兩個二進(jìn)制數(shù);equ是比較器的輸出端口

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

7、; end behave;,2庫(library),庫是用來存儲和放置可編譯的設(shè)計單元的地方,通過其目錄可查詢、調(diào)用。庫可以分為兩類:設(shè)計庫和資源庫。庫說明一般格式如下: library 庫名; use 庫名.邏輯體名;,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;,初學(xué)時不太熟悉,全部寫上。,庫的種類,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(無符號數(shù)學(xué)函數(shù)) std_logic_signed(符號數(shù)學(xué)函數(shù)) Std庫 是VHDL的標(biāo)準(zhǔn)庫,在庫中存放有稱為”STANDARD”的包集合 此外,TEXTIO該包在測試時使用 面向ASIC的庫 該庫存放著與邏輯門一一對應(yīng)的實體,方便進(jìn)行門級仿真,由個公司提供面向ASIC的邏輯門庫 WORK庫 現(xiàn)行作業(yè)庫,使用該庫時無需進(jìn)行任何說明 用戶定義的庫 用戶為自身設(shè)計需要所開發(fā)的共用包集合和實體等,匯集在一起定義的庫,3. 實體說明,功能:描述設(shè)計模塊的輸入/輸出信號或引腳,并給出設(shè)計模塊與外界的接口

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

10、際上是器件名,最好根據(jù)相應(yīng)的電路功能確定。如4位2進(jìn)制計數(shù)器用counter4b;8位加法器用add8b;3/8譯碼器用ym_38。,實體名必須與文件名相同,否則無法編譯。,實體名不能用工具庫中定義好的元件名。,實體名不能用中文,也不能用數(shù)字開頭。,類 屬 表,類屬表:用以將信息參數(shù)傳遞到實體。 常用于不同層次之間的信息傳遞。易于使程序模塊化和通用化。 類屬表的一般格式為: GENERIC(常數(shù)名:數(shù)據(jù)類型:=設(shè)定值 ) GENERIC(awidth : INTEGER:=3; timex: time ); 其中:常數(shù)名由設(shè)計者確定;數(shù)據(jù)類型通常取INTEGER或time等;在表中提供時間參數(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信號N分頻 if(count=N-1)then count=0; else count=count+1; if count(integer(N/2) then -產(chǎn)生分頻后時鐘 outclk=0; else outclk=1; end if; end if; end if; end process; end behav;,對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;,端口表:指明實體的輸入、輸出信號極其模式。 端口表的一般格式為: PORT(端口名:端口模式數(shù)據(jù)類型 ) 端口模式:共五種: IN(輸入)、 OUT(輸出)、 INOUT(雙向端口) 、 BUFFER(輸出并向內(nèi)部反饋)、LINKAGE (不指定方向),端 口 表,數(shù)據(jù)類型:VHDL作為一種強類型語言,必須對數(shù)據(jù)對象(常量、變量、信號)規(guī)定取值范

15、圍,即對傳輸或存儲數(shù)據(jù)的類型作明確的界定。,實 體 舉 例,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)容的實體代碼 端口 D 為12位輸入總線 端口 OE 和 CLK 都是1位輸入 端口 AD 為 12位雙向

16、總線 端口 A為12位輸出總線 端口 INT 是1位輸出 端口 AS 是一位輸出同時被用作內(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、編寫包含全加器的實體代碼。 2、編寫4選1數(shù)據(jù)選擇器的實體代碼。,4. 結(jié)構(gòu)體,結(jié)構(gòu)體:通過若干并行語句來描述設(shè)計實體的邏輯功能(行為描述)或內(nèi)部電路結(jié)構(gòu)(結(jié)構(gòu)描述),從而建立設(shè)計實體輸出與輸入之間的關(guān)系。一個設(shè)計實體可以有多個結(jié)構(gòu)體。 實體是“黑箱”,結(jié)構(gòu)體在電路上相當(dāng)于器件的內(nèi)部電路。結(jié)構(gòu)體都必須附屬于某個實體,一個實體可同時具備多個結(jié)構(gòu)體。 格式: ARCHITECTURE 結(jié)構(gòu)體名 OF 實體名 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)心怎樣實現(xiàn),我們只關(guān)心輸入、輸出間是否滿足要求。,VHDL結(jié)構(gòu)體術(shù)語,說明語句:用于定義結(jié)構(gòu)體中所用的數(shù)據(jù)對象和子程序,并對所引用的元件加以說明,但不能定義變量。 并行語句 并行語句有五種類型,可以把它們看成結(jié)構(gòu)體的五種子結(jié)構(gòu)。這五種語句結(jié)構(gòu)本身是并行語句,但內(nèi)部可能含有并行運行的邏輯描述語句或順序運行的邏輯描述語句,如進(jìn)程內(nèi)部包含的即為順序語句。 五種語句結(jié)構(gòu)分別為塊語句、進(jìn)程語句、信號賦值語句、子程序調(diào)用語句和元件例化語句。,結(jié)構(gòu)體結(jié)構(gòu)圖,實體和結(jié)構(gòu)體之間的關(guān)系,

19、Structure(結(jié)構(gòu))描述 描述該設(shè)計單元的硬件結(jié)構(gòu),即該硬件是如何構(gòu)成的,類似于數(shù)字電路中的邏輯圖描述. Date Flow(數(shù)據(jù)流)描述 它是類似于寄存器傳輸級的方式描述數(shù)據(jù)的傳輸和變換,以規(guī)定設(shè)計中的各種寄存器形式為特征,然后在寄存器之間插入組合邏輯。與數(shù)字電路中的真值表描述相似。 Behavior Process(行為級)描述 只描述所希望電路的功能或者電路行為(輸入輸出間轉(zhuǎn)換的行為),而沒有指明或涉及實現(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è)計 最能提高設(shè)計效率,它可以將已有的設(shè)計成果,方便的用到新的設(shè)計中去 目前存在的大量的電路板上分離元件的集成工作都需要使用這種方法,Date Flow描述,architecture one of mux21 is begin y=a when s=0 else b; end one;,數(shù)據(jù)流描述,對信號與數(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描述,行為級描述,是對系統(tǒng)數(shù)學(xué)模型的描述,其抽象程度比其他兩種方式要高 大量使用算術(shù)運算、關(guān)系運算、慣性延時、傳輸延時等難于或不能邏輯綜合的VHDL語言 主要用于系統(tǒng)數(shù)學(xué)模型的仿真或系統(tǒng)工作原理的仿真 信號被分為控制信號和被控信號。僅知道控制信號和被控信號的控制關(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è)計模塊,支持大型設(shè)計邏輯分解。 4混合描述 大型設(shè)計中,常采用行為描述與結(jié)構(gòu)描述相結(jié)合的混合描述。,布爾加法器的三種描述方式,三個輸入信號A、B和enable,一個輸出信號C,當(dāng)enable為高電平時,輸出信號C等于A和B的和;當(dāng)enable為低電平時,輸出,輸出C保持低電平,行為級描述,If enable = 1 Then C=A+B Else C=0 End If; 該描述不包含任何與電路實現(xiàn)的有關(guān)信息 最接近其他高級語言的描述風(fēng)格,最容易被設(shè)計者

23、理解和使用,數(shù)據(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ī)定了具體電路實現(xiàn)形式,采用一個2輸入異或門和一個2輸入與門來實現(xiàn)。 可以實現(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è)計實例,從整體結(jié)構(gòu)上初步認(rèn)識VHDL的基本結(jié)構(gòu)和語句特點。 2、38譯碼器的電路圖如圖所示,有4個輸入端(A0、A1、A2、EN),8個輸出端(Y0Y7) 3、步驟:定義元件庫、實體、結(jié)構(gòu)體、編譯、仿真。,返 回,第三節(jié) VHDL的基本數(shù)據(jù)類型,一、數(shù)據(jù)對象,是數(shù)據(jù)類型的載體,共有三種形式的對象: Const

25、ant(常量) Variable(變量) Signal(信號) 對象的說明格式為: 對象類別 標(biāo)識符表:類型標(biāo)識:=初值,(1)常量聲明,常量是全局量,在結(jié)構(gòu)描述、程序包說明、實體說明、過程說明、函數(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)信號聲明,信號可以將結(jié)構(gòu)體中分離的并行語句連接起來,并且通過端口其他模塊與該設(shè)計內(nèi)的連接起來。 信號為器件內(nèi)部節(jié)點信號,數(shù)據(jù)的進(jìn)出不像端口信號那樣受限制,不必定義其端口模式。 定義信號的目的是為了在設(shè)計電路時使用該信號。 用“=”來給信號賦值 例: signal A,B :BIT; s

27、ignal INIT :INTEGE: = -1,信號賦值,SIGNAL temp : Std_Logic_Vector (7 downto 0); 整體賦值:temp = “10101010”;temp = x”AA” ; 逐位賦值:temp(7) = 1; 多位賦值: temp (7 downto 4) = “1010”;,信號舉例,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;,信號和變量的作用范圍,信號和變量的區(qū)別,信號和變量值代入的區(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(字符):使用時用單引號括起來,如:A。 3)String(字符串):使用時用雙引號括起來,如: 111000101 。 4)Integer(整數(shù)):范圍在-(231-1)(231-1) 5)Real(實數(shù)):范圍在-1.0E+38 + 1.0E+38,6)Bit(位):取值為0或1. 7)Time(時間):取值范圍與整數(shù)一致,一般用于仿真。(fs,ps,ns,us,ms,s,min,h) 8)Bit_vector(位矢量):基于BIT數(shù)據(jù)類型的數(shù)組。使用時必需注明寬度。 9

30、)Natural(自然數(shù))和Positive(正整數(shù)):是整數(shù)的一個子類型。 10)Severity level(錯誤等級):用來設(shè)計系統(tǒng)的工作狀態(tài)。有四種狀態(tài)值:NOTE(注意)、WARNING(警告)、ERROR(錯誤)、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; 上述對信號hotel和home的定義表明它們是自定義數(shù)據(jù)類型week,因此這兩個信號之間可以相互作用,因為只有它們屬于同一數(shù)據(jù)類型。,2)Integer Types(整數(shù)類型)和 Real Types(實數(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; 可以對時間,容量,阻抗等進(jìn)行定義。 例如: type time is range 1E18 to 1E18; units fs; -飛秒,相當(dāng)于10-15秒,VHDL中最小的時間單位 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; -時 end units;,5)Record Types(記錄類型)格式如下:,TYPE 數(shù)據(jù)類型名 IS record 元素名:數(shù)據(jù)類型名; 元素名:數(shù)據(jù)類型名; End Record; 例如:將鎖存器的輸入輸出和使能構(gòu)成一個記錄: 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)對非限定性數(shù)組bit_vector作具體說明;第七句,lower_data是data的一個子類型。,4.

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

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

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

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

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

41、信號上(即信號有變化),則其取值為True,否則為False。利用此屬性可決定時鐘邊沿是否有效,即時鐘是否發(fā)生。例如:時鐘邊沿表示SIGNAL clk:IN std_logic則:clkevent AND clk=1,表示時鐘的上升沿。 clkevent AND clk=0,表示時鐘的下降沿。 此外,VHDL還預(yù)定義了兩個函數(shù),利用它們也可以很方便地檢測信號的變化狀態(tài)。 rising_edge(clk) -檢測上升沿有效 falling_edge(clk) -檢測下降沿有效,3范圍類屬性,范圍(RANGE)類屬性,用來生成一個限制性數(shù)據(jù)對象的范圍。 例如:數(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語句。,可以用于實現(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語句實現(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è)計實例,講解順序語句的語句特點。 2、四選一數(shù)據(jù)選擇器的電路圖:如圖4-3,有7個輸入端(A0、A1

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

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

47、D LOOP 循環(huán)標(biāo)號;,(4)NEXT語句:在LOOP語句中,用來跳出當(dāng)前循環(huán)。其格式為: NEXT 循環(huán)標(biāo)號 WHEN條件; (5)EXIT語句:用來結(jié)束LOOP語句的執(zhí)行。其格式為: EXIT 循環(huán)標(biāo)號 WHEN條件;,利用LOOP語句可以簡化同類順序語句表達(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í)行都是同時進(jìn)行的,既它們的執(zhí)行順序與語法的書寫順序無關(guān)。這種并行性是由硬件本身的并行性決定的,一旦電路接通電源,各部分就會按照事先設(shè)計好的方案同時工作。,常用的并行語句有,進(jìn)程語句(PROCESS)、 塊語句( BLOCK )、 并行信號賦值語句、 生成語句(

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

50、; END PROCESS 標(biāo)號: ; 敏感信號表:進(jìn)程內(nèi)要讀取的所有敏感信號 (包括端口)的列表。每一個敏感 信號的變化,都將啟動進(jìn)程。 格式:信號名稱 ,信號名稱 ,敏感信號表,進(jìn)程賴以啟動的敏感表。對于表中列出的任何信號的改變,都將啟動進(jìn)程,執(zhí)行進(jìn)程內(nèi)相應(yīng)順序語句. 一些VHDL綜合器,綜合后對應(yīng)進(jìn)程的硬件系統(tǒng)對進(jìn)程中的所有輸入的信號都是敏感的,不論在源程序的進(jìn)程中是否把所有的信號都列人敏感表中. 為了使軟件仿真與綜合后的硬件仿真對應(yīng)起來,應(yīng)當(dāng)將進(jìn)程中的所有輸入信號都列入敏感表中.,敏感信號表的特點:,1、同步進(jìn)程的敏感信號表中只有時鐘信號。 如: 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)程敏感信號表中除時鐘信號外,還有其它信號。,例: 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 語句,則不允許有敏感信號表。,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è)計時應(yīng)注意以下問題: 1、進(jìn)程為一個獨立的無限循環(huán)語句。它只有兩種狀態(tài):執(zhí)行狀態(tài)和等待狀態(tài)。滿足條件進(jìn)入執(zhí)行狀態(tài),當(dāng)遇到end process語句后停止執(zhí)行。 2、進(jìn)程中的順序語句具有明顯的順序/并行運行雙重性。即。進(jìn)程中的順序語句具有并

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

56、名稱: BLOCK (表達(dá)式) 塊聲明項; 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)、嵌套塊,子塊聲明與父塊聲明的對象同名時,子塊聲明將忽略掉父塊聲明。,兩

57、個相互獨立的2輸入與門,(3)、衛(wèi)式(Guarded)塊,由保護(hù)表達(dá)式值的真、假決定塊語句的執(zhí)行與否。綜合不支持。,3. 并行信號賦值語句,包括三種: 簡單并行信號賦值; 條件信號賦值; 選擇信號賦值。 共同特點: 1、賦值目標(biāo)必須是信號,與其它并行語句同 時執(zhí)行,與書寫順序及是否在塊語句中無關(guān)。 2、每一信號賦值語句等效于一個進(jìn)程語句。 所有輸入信號的變化都將啟動該語句的執(zhí)行。,一個簡單并行信號賦值語句是一個進(jìn)程的縮寫。,(1)簡單(并行)信號賦值語句 格式:賦值目標(biāo)=表達(dá)式; 如q =b+c; 例:以下兩種描述等價,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等.壓縮文件請下載最新的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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論