VHDL第1講盛建倫老師課件_第1頁
VHDL第1講盛建倫老師課件_第2頁
VHDL第1講盛建倫老師課件_第3頁
VHDL第1講盛建倫老師課件_第4頁
VHDL第1講盛建倫老師課件_第5頁
已閱讀5頁,還剩63頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、盛建倫 1數(shù) 字 邏 輯digital logic青島理工大學(xué)廣義雙語教學(xué)課程盛建倫 2習(xí)題參考答案習(xí)題參考答案1-24 (5) ),(),(),(311211105432ddddmmmmdcbafab0011cd00 0100 01110011 10xx0000xx11 10cbcbf盛建倫 3習(xí)題參考答案習(xí)題參考答案1-13 (2) (3) 1-15 (1) (2) dbcabdfdcbdcbdbadabdbdbcadbcadbf)()()(abbcacfcbcabaccbcabababacbcaf)()()(cbbacaf)(bacabxabbay)(盛建倫 4硬件描述語言語言vhdl基

2、礎(chǔ)基礎(chǔ)第第3章章 very high speed integrated circuit hardware description language vhdl(非常高速集成電路硬件描述語言)是由美國國防部支持的一項(xiàng)研究計(jì)劃,于1983年創(chuàng)建,目的是以文字化方法描述電子電路與系統(tǒng)。1987年,vhdl成為ieee標(biāo)準(zhǔn),即ieee1076標(biāo)準(zhǔn),1993年修改為ieee1164標(biāo)準(zhǔn),1996年,ieee又將電路合成的標(biāo)準(zhǔn)程序與規(guī)格加入到vhdl語言中,稱為1076.3標(biāo)準(zhǔn)。之后,又有1076.4標(biāo)準(zhǔn)和1076.6標(biāo)準(zhǔn)。盛建倫 5庫、程序包使用說明配置(configuration)結(jié)構(gòu)體(archite

3、cture)實(shí)體(entity)port端口說明結(jié)構(gòu)體說明generic類屬說明體實(shí)計(jì)設(shè)結(jié)構(gòu)體功能描述vhdl程序設(shè)計(jì)基本結(jié)構(gòu) vhdl用語言的方式而非圖形等方式描述硬件電路,容易修改,容易保存。特別適合于設(shè)計(jì)組合邏輯電路合邏輯電路和狀態(tài)機(jī)狀態(tài)機(jī):譯碼器、編碼器、加法器、多路選擇器、地址譯碼器、.盛建倫 6vhdl程序基本結(jié)構(gòu)程序基本結(jié)構(gòu)nvhdl程序通常包含實(shí)體實(shí)體(entity),結(jié)構(gòu)體結(jié)構(gòu)體(architecture),配置配置(configuration),包集合包集合(package),和庫庫(library)五部分。庫庫是專門存放預(yù)編譯程序包的地方。其中實(shí)體實(shí)體用于描述所設(shè)計(jì)的系統(tǒng)

4、的外部接口信號(hào); 配置配置語句安裝具體元件到實(shí)體結(jié)構(gòu)體對(duì),可以被看作是設(shè)計(jì)的零件清單; 結(jié)構(gòu)體結(jié)構(gòu)體用于描述系統(tǒng)內(nèi)部的結(jié)構(gòu)和行為;建立輸入和輸出之間的關(guān)系;包集合包集合存放各個(gè)設(shè)計(jì)模塊共享的數(shù)據(jù)類型、常數(shù)和子程序等;盛建倫 7vhdl主要用于描述設(shè)計(jì)系統(tǒng)的結(jié)構(gòu)、行為、功能和接口。n器件器件 或n子系統(tǒng)子系統(tǒng) architecturen process process sequentialn process combinationaln process component ports它將一個(gè)設(shè)計(jì) (元件、電路、系統(tǒng))分為:n外部外部( 可視部分、端口),n內(nèi)部?jī)?nèi)部(不可視部分、內(nèi)部功能、算法)。

5、very high speed integrated circuit hardware description language盛建倫 8一、信號(hào)(signal)的含義和信號(hào)的兩種最常用類型: std_logic 和 std_logic_vectorvhdl入門需掌握的基本知識(shí)入門需掌握的基本知識(shí)二、四種常用語句的基本用法賦值賦值語句、if語句、case語句 和 process語句三、實(shí)體實(shí)體(entity)、結(jié)構(gòu)體結(jié)構(gòu)體(architecture)以及 一個(gè)實(shí)體和一個(gè)結(jié)構(gòu)體組成的設(shè)計(jì)實(shí)體設(shè)計(jì)實(shí)體。四、層次結(jié)構(gòu)的設(shè)計(jì) 掌握元件元件(component)語句和端口映射端口映射(port map)

6、語句。五、庫庫(library)和程序包程序包(package)的基本使用。有了以上入門知識(shí),就能做一般的設(shè)計(jì)了。有了以上入門知識(shí),就能做一般的設(shè)計(jì)了。盛建倫 9庫(庫(library)和程序包()和程序包(package) 庫(library)用于存放預(yù)先編譯好的程序包(package),作用: 程序包中定義了數(shù)據(jù)集合體、邏輯操作和元件等。 主要是聲明在設(shè)計(jì)或?qū)嶓w中將用到的常數(shù),數(shù)據(jù)類型,元件及子程序等。 任何一種設(shè)計(jì)都要充分利用前人已有的成果,公用的資源要盡可能使用;自己已經(jīng)設(shè)計(jì)好的資源也要盡量利用起來,程序包( package )和庫(library)就是一些可以公用的資源,是設(shè)計(jì)實(shí)體的

7、一個(gè)重要組成部分。盛建倫 10庫(庫(library) 設(shè)計(jì)庫設(shè)計(jì)庫對(duì)當(dāng)前設(shè)計(jì)是可見的,默認(rèn)的,無需用library子句和use子句說明的庫。vhdl語言的庫分為兩種,一種是設(shè)計(jì)庫,一種是資源庫。 庫是用來放置可編譯的設(shè)計(jì)單元的地方。 vhdl中的常用庫有: std庫、work庫、ieee庫和用戶定義庫。std 和 work 這兩個(gè)庫是設(shè)計(jì)庫。 盛建倫 11 vhdl的標(biāo)準(zhǔn)庫。庫中存放有稱為“standard”的標(biāo)準(zhǔn)包集合,其中定義了多種常用的數(shù)據(jù)類型,均不加說明可直接引用。庫(庫(library)std庫庫 常用的資源庫。ieee庫包含經(jīng)過ieee正式認(rèn)可的std_logic_1164包集合

8、和某些公司提供的一些包集合,如std_logic_arith(算術(shù)運(yùn)算庫)、std_logic_unsigned等。 work庫是現(xiàn)行作業(yè)庫。設(shè)計(jì)者所描述的vhdl語句不需要任何說明,都將存放在work庫中。work庫對(duì)所有設(shè)計(jì)都是隱含的,因此在使用該庫時(shí)無需進(jìn)行任何說明。ieee庫庫work庫庫盛建倫 12庫(庫(library)用戶定義庫用戶定義庫 用戶定義庫簡(jiǎn)稱用戶庫,是由用戶自己創(chuàng)建并定義的庫。 除了ieee標(biāo)準(zhǔn)資源庫外,各可編程器件廠家的eda軟件提供自己獨(dú)特的資源程序包。由于這些程序包是為它們制造的器件服務(wù)的,往往更有針對(duì)性。 設(shè)計(jì)者可以把自己經(jīng)常使用的非標(biāo)準(zhǔn)(一般是自己開發(fā)的)包

9、集合和實(shí)體等匯集在一起定義成一個(gè)庫,作為對(duì)vhdl標(biāo)準(zhǔn)庫的補(bǔ)充。用戶定義庫在使用時(shí)同樣要首先進(jìn)行說明。 qartus 中提供了一個(gè)lpm庫,庫中有許多稱之為 megafunctions的功能強(qiáng)大的函數(shù)。盛建倫 13庫(庫(library)除了std庫和work庫之外的其它庫均為資源庫。 使用資源庫中的元件和函數(shù)之前,需要使用library子句和use子句予以說明。 沒有說明的庫中的元件不能使用。 library子句和use子句總是放在設(shè)計(jì)實(shí)體的最前面(可以放在注釋之后)。 如果一個(gè)設(shè)計(jì)實(shí)體中使用了某個(gè)庫中的元件和函數(shù),就要使用相應(yīng)的library子句和use子句。library子句的作用是使該

10、庫在當(dāng)前文件中“可見”。盛建倫 14library子句子句說明使用哪個(gè)庫,它的格式是 library 庫名1,庫名2,庫名n;庫(庫(library)std庫和work庫是設(shè)計(jì)庫,在任何設(shè)計(jì)文件中隱含都是“不可見”的,不需要特別說明。也就是說,每一個(gè)設(shè)計(jì)文件中總是隱含下列不可見的行:library std, work;use std.standard.all;use子句子句說明使用哪個(gè)庫中的哪個(gè)程序包中的元件或者函數(shù)。它的格式是:use 庫名.程序包名.all; 這些是不用在程序里寫的盛建倫 15程序包(程序包(package) 程序包是一種使包體中的類型、常量、元件和函數(shù)對(duì)其他模塊(文件)是

11、可見、可以調(diào)用的設(shè)計(jì)單元。 程序包是公用的存儲(chǔ)區(qū),在程序包內(nèi)說明的數(shù)據(jù),可以被其它設(shè)計(jì)實(shí)體使用。程序包由包頭包頭和包體包體兩部分組成。盛建倫 16vhdl語言要素語言要素 v vh hd dl l語語言言要要素素包包括括數(shù)據(jù)對(duì)象數(shù)據(jù)對(duì)象變量變量信號(hào)信號(hào)常數(shù)常數(shù)數(shù)據(jù)類型數(shù)據(jù)類型操作數(shù)操作數(shù)運(yùn)算操作符運(yùn)算操作符盛建倫 17vhdl數(shù)據(jù)對(duì)象數(shù)據(jù)對(duì)象數(shù)據(jù)對(duì)象(data objects): 凡是可以被賦予一個(gè)值的對(duì)象稱為數(shù)據(jù)對(duì)象,數(shù)據(jù)對(duì)象用于傳遞信號(hào)。數(shù)據(jù)對(duì)象值的類型 數(shù)據(jù)對(duì)象類型 數(shù)據(jù)對(duì)象名 盛建倫 18信號(hào)和變量信號(hào)和變量信號(hào)信號(hào)(signal)變量變量 (variable) 是硬件中物理連線的抽象

12、描述,信號(hào)在元件的端口連接元件信號(hào)在元件的端口連接元件以及在元件內(nèi)部各部分之間的連接在元件內(nèi)部各部分之間的連接。 在硬件中沒有類似的對(duì)應(yīng)關(guān)系,它們主要用于保存中間結(jié)果。例如作為數(shù)組的下標(biāo)。常量代表數(shù)字電路中的電源、地、恒定邏輯值等常數(shù)。常量常量( constant)盛建倫 19信號(hào)在邏輯電路設(shè)計(jì)中最常用的數(shù)據(jù)類型信號(hào)在邏輯電路設(shè)計(jì)中最常用的數(shù)據(jù)類型 在vhdl語言中有10種數(shù)據(jù)類型,但是在邏輯電路設(shè)計(jì)中最常用的是std_logic和std_logic_vector提供的數(shù)據(jù)類型。 std_logic類型分為布爾(boolean)型、位(bit)型、位矢量(bit_vector)型。std_lo

13、gic有9種狀態(tài),常用的是三種狀態(tài):1 高電平0 低電平z高阻高阻狀態(tài)是為了雙向總線的描述盛建倫 20信號(hào)說明信號(hào)說明 一個(gè)信號(hào)只有經(jīng)過說明后才能使用。用vhdl語言進(jìn)行設(shè)計(jì)就是寫一系列語句。信號(hào)說明形式如下:一個(gè)語句用分號(hào)結(jié)束一個(gè)語句用分號(hào)結(jié)束。 signal clock, t1, t2 : std_logic;signal 信號(hào)名:數(shù)據(jù)類型 :=設(shè)定值;signal a : std_logic_vector(3 down to 0) := “0000”; 例如:signal r0, r1 ,r2, r3 : std_logic_vector(15 downto 0);signal r0,r

14、1,r2,r3:std_logic_vector(0 upto 15);設(shè)定值設(shè)定值可選項(xiàng)可選項(xiàng)盛建倫 21(1)說明位置不同,信號(hào)通常在實(shí)體、結(jié)構(gòu)體和程序包中說明,變量一般在進(jìn)程、過程和函數(shù)語句中說明;信號(hào)信號(hào)與變量變量的區(qū)別(2)賦值運(yùn)算符不同,信號(hào)用“ = ”符號(hào)進(jìn)行賦值, 變量用 “ := ”符號(hào)賦值;(3)延遲不同,信號(hào)的賦值存在延遲,變量的賦值是直接的,沒有任何延遲時(shí)間。 從信號(hào)說明看不出一個(gè)信號(hào)是組合邏輯還是時(shí)序邏輯(例如寄存器),這與abel語言是不同的。盛建倫 22vhdl 操作符操作符vhdl操作符:邏輯操作符邏輯操作符算術(shù)操作符算術(shù)操作符符號(hào)操作符符號(hào)操作符關(guān)系操作符關(guān)系

15、操作符盛建倫 23邏輯運(yùn)算符邏輯運(yùn)算符 -signal a,b :std_logic; -signal c,d :std_logic_vector(7 downto 0);有7種邏輯運(yùn)算符:not、or、and、nand、nor、xor 、 xnor 。說明:- 是注釋開始的標(biāo)志,這些signal語句的存在只是為了說明這些信號(hào)的類型,供閱讀方便使用。兩個(gè)進(jìn)行邏輯運(yùn)算的信號(hào),類型必須相同。例如a and b a or b not a正確c and d c xor d not c 正確a and c錯(cuò)誤 常用的為前三種。盛建倫 24不等于 ( a and b) or (c and d)邏輯運(yùn)算符邏

16、輯運(yùn)算符例如:a and b or c and d等于 (a and b ) or c) and d 這些邏輯運(yùn)算符, not優(yōu)先級(jí)最高,其他的優(yōu)先級(jí)相同。因此運(yùn)算時(shí)按由左到右的順序展開。運(yùn)算時(shí)要注意加括號(hào)。not、or、and、nand、nor、xor 、xnor 。能進(jìn)行邏輯運(yùn)算的數(shù)據(jù)類型:bit、 bit_vector、 booleanstd_logic、 std_logic_vector盛建倫 25signal a,b,c,d: std_logic_vector(3 downto 0);signal e,f,g,h: std_logic_vector(1 downto 0);d=a a

17、nd b and c;d=a or b or c;d=a xnor b xnor c;h=e nor f nor g;h=(e nor f) nor g;d=(e nor f) nor g;例盛建倫 26算術(shù)運(yùn)算符算術(shù)運(yùn)算符a + ba + 1常用的算術(shù)運(yùn)算符有:+ - -use ieee.std_logic_arith.all;-signal a,b :std_logic_vector(15 downto 0);字符串必須用雙引號(hào)括起來字符類型通常用單引號(hào)括起來,字符類型區(qū)分大小寫,a + 01求和運(yùn)算符、求積運(yùn)算符、符號(hào)運(yùn)算符、混合運(yùn)算符、移位運(yùn)算符 vhdl中的求和運(yùn)算符包括加減運(yùn)算和并

18、置運(yùn)算,操作數(shù)的數(shù)據(jù)類型為整型。例vhdl語句不區(qū)分大小寫盛建倫 27并置運(yùn)算符并置運(yùn)算符 &-signal a,b:std_logic_vector(3 downto 0);-signal c,d:std_logic_vector(2 downto 0); a and (1 & c) c & a 并置運(yùn)算符用于位的連接,形成矢量。也可連接矢量形成更大的矢量。例如:盛建倫 28signal a : std_logic_vector(4 downto 0);signal b : std_logic_vector(2 downto 0);signal c : std_logic_vector(1

19、downto 0);b b2 2b b1 1 b b0 0b b: :c c1 1 c c0 0c c: :b cb2b2 b1b1 b0b0b:b:c1c1 c0c0:c:c b2b2 b1b1 b0b0 c1c1 c0c0a = b ca a4 4 a a3 3 a a2 2a a1 1 a a0 0a a: :a:a:b b2 2 b b1 1 b b0 0 c c1 1 c c0 0例:并置運(yùn)算符 & 并置運(yùn)算符用于位的連接,形成矢量。也可連接矢量形成更大的矢量。盛建倫 29關(guān)系運(yùn)算符關(guān)系運(yùn)算符 = 等于等于/= 不等于不等于 大于大于 = 大于等于大于等于 關(guān)系運(yùn)算符有下列幾種:關(guān)系

20、運(yùn)算的結(jié)果為“真”(true)或者“假”(false)。=、 /= 在實(shí)現(xiàn)硬件電路時(shí)比其它的關(guān)系運(yùn)算符對(duì)芯片的利用率要高 等于等于、不等于不等于運(yùn)算符適用于所有的數(shù)據(jù)類型,其他的運(yùn)算符適用于整數(shù)、位及矢量等。在進(jìn)行關(guān)系運(yùn)算時(shí),兩邊的數(shù)據(jù)類型必須相同,但位長(zhǎng)度可以不同。盛建倫 30vhdl順序語句順序語句 順序語句的特點(diǎn)是,每一條順序語句的執(zhí)行順序執(zhí)行順序是與它們的書寫順序書寫順序基本一致的。順序語句只能出現(xiàn)在進(jìn)程(process)和子程序中,子程序包括函數(shù)(function)和過程(procedure)。順序語句的種類: 進(jìn)程語句進(jìn)程語句賦值語句賦值語句 流程控制語句流程控制語句 等待語句 子

21、程序調(diào)用語句 返回語句 空操作語句盛建倫 31常用的常用的4種語句種語句 vhdl有許多類型的語句,入門只需掌握4種語句:賦值語句,賦值語句,if語句,語句,case語句語句 和和 process語句。語句。盛建倫 32賦值語句賦值語句 -signal a, b, c: std_logic; -signal d, e, q :std_logic_vector(3 downto 0); = 是信號(hào)賦值符,= 左右兩邊數(shù)據(jù)類型必須相同,數(shù)據(jù)長(zhǎng)度必須相同。1、信號(hào)賦值語句、信號(hào)賦值語句 由于信號(hào)是物理量,因此賦值有延遲時(shí)間。如第二個(gè)語句就是一個(gè)或門,因此,信號(hào)d”或“q后到e有延遲時(shí)間。信號(hào)賦值語句

22、的語法格式為:目標(biāo)信號(hào)名目標(biāo)信號(hào)名 = 表達(dá)式(設(shè)定值);表達(dá)式(設(shè)定值); c = not (a and b); e = d or q; 盛建倫 33-variable x,y,z : integer range 0 to 255;x := 0;y := 132;z := x; 賦值語句賦值語句2、變量賦值語句、變量賦值語句:=是變量賦值符。:=左右兩邊的數(shù)據(jù)類型必須相同。由于變量沒有相對(duì)應(yīng)的明確的物理量,因此變量賦值沒有時(shí)間延遲。盛建倫 343. 并行賦值語句并行賦值語句(1) 條件賦值語句條件賦值語句格式:目標(biāo)信號(hào)=表達(dá)式1 when 條件1 else表達(dá)式2 when 條件2 else

23、表達(dá)式n-1 when 條件n-1 else表達(dá)式n;盛建倫 35并行賦值語句并行賦值語句(2) 選擇賦值語句選擇賦值語句格式:目標(biāo)信號(hào) b ) then outb ) then out= 1;elseout=0;end if;2、二選一if語句例盛建倫 39例: 一個(gè)8位二選一選擇器用于二選一控制的if語句-signal sel :std_logic;-signal a, b,c :std_logic_vector(7 downto 0); if sel = 1 then c = a; else c = b; end if; 盛建倫 40第三種if語句if 條件1 then 若干語句;els

24、if 條件2 then 若干語句; else 條件n then 若干語句;end if;語句格式3、多選一if語句盛建倫 41例:例:a1a1a2a2y y0 00 00 01 11 10 01 11 1d0d0d1d1d2d2d3d3a1a1a2a2d0d0d1d1d2d2d3d3y y四選一數(shù)四選一數(shù)據(jù)選擇器據(jù)選擇器process(a)beginif a=”00” then f=d0; elsif a=”01” then f=d1; elsif a=”10” then f=d2; else f=d3; end if;end process;多選一if語句盛建倫 42process 語句語句

25、 process語句通常稱為進(jìn)程語句,本質(zhì)上它描述了一個(gè)功描述了一個(gè)功能獨(dú)立的電路塊能獨(dú)立的電路塊。 在vhdl語言中,所有的并行執(zhí)行語句都代表功能獨(dú)立的電路塊,而所有順序執(zhí)行語句則是用于描述電路塊的功能。 process語句有許多變種,這里只介紹最基本的形式。流程控制語句 process語句是個(gè)并行執(zhí)行的語句,但是process語句內(nèi)部的語句要求是順序執(zhí)行語句。它是vhdl程序中,描述硬件并行工作的最重要最常用的語句。43process語句的書寫格式是:進(jìn)程名: process(敏感信號(hào)1,敏感信號(hào) 2,敏感信號(hào)n)若干變量說明語句begin若干順序執(zhí)行語句end process 進(jìn)程名;

26、process 語句語句用方括號(hào)括起來的部分是可選的 第一個(gè)進(jìn)程名以冒號(hào)結(jié)束,和關(guān)鍵字process隔開,它是可選的,可要可不要,對(duì)硬件電路沒有影響。不過我建議最好加上進(jìn)程名,加上進(jìn)程名等于給這塊功能獨(dú)立的電路加了個(gè)標(biāo)記,增強(qiáng)可讀性。 process語句中,begin之前的若干變量說明語句若干變量說明語句也是可選的。如果該process語句中需要使用變量,則需要在begin之前予以說明。這些被說明的變量只對(duì)該進(jìn)程語句起作用,只能在該process語句中使用。敏感信號(hào)表盛建倫 44 process語句中有個(gè)敏感信號(hào)表,各敏感信號(hào)之間用逗號(hào)分開。最后一個(gè)敏感信號(hào)后面是括號(hào),不需要跟一個(gè)逗號(hào)。pro

27、cess 語句語句 所謂敏感信號(hào)就是指當(dāng)它的狀態(tài)發(fā)生變化時(shí)它的狀態(tài)發(fā)生變化時(shí),啟動(dòng)啟動(dòng)process語句執(zhí)行語句執(zhí)行。由于process語句代表一塊功能獨(dú)立的電路,它的某些輸入信號(hào)的狀態(tài)變化,勢(shì)必引起電路輸出的變化,這些立即引起(當(dāng)然要經(jīng)過短暫的時(shí)間延遲)輸出信號(hào)狀態(tài)變化的信號(hào)就是敏感信號(hào)。 變量不是真正的物理量,因此不能出現(xiàn)在敏感信號(hào)表中。在process語句中只作為輸出存在的信號(hào)(出現(xiàn)在信號(hào)賦值符“=”的左邊),不能作為敏感信號(hào)。 既出現(xiàn)在信號(hào)賦值符“=”的左邊,又出現(xiàn)在信號(hào)賦值符“=”右邊的信號(hào),可以出現(xiàn)在敏感信號(hào)表中,這是因?yàn)檫@些信號(hào)既作為這塊電路的輸出,又是電路內(nèi)部的反饋信號(hào)。 盛建

28、倫 45 在process語句的書寫格式中,在 begin 和 end process 之間的若干順序執(zhí)行語句用于描述該process語句所代表的電路塊的功能。process 語句語句 在前面介紹if語句時(shí),用if語句描述了二選一選擇器和多選一選擇器。 但是由于if語句是順序執(zhí)行語句,因此不能代表一塊功能獨(dú)立的電路,只能成為一塊功能獨(dú)立電路的一部分。需要對(duì)前面的if語句進(jìn)行改造,使之成為一塊功能獨(dú)立的電路(能并行執(zhí)行)。改造的方法之一就是將if語句放在process語句中。盛建倫 46-signal sel: std_logic;-signal a, b, c: std_logic_vecto

29、r(15 downto 0);mux2to1: process(sel, a, b) beginif sel = 0 then c = a;else c = b;end if; end process;process 語句語句例: 二選一選擇器注意,本例中使用了進(jìn)程名,不過在end process之后沒有書寫進(jìn)程名。敏感信號(hào)表中有3個(gè)輸入信號(hào)盛建倫 47case語句語句 case語句是順序執(zhí)行語句,常用來描述總線的行為、編碼器和譯碼器的結(jié)構(gòu)以及狀態(tài)機(jī)等等。case語句可讀性好,非常簡(jiǎn)潔。case語句的書寫格式為流程控制語句case 條件表達(dá)式 is when 條件表達(dá)式值1 = 若干順序執(zhí)行語

30、句 when 條件表達(dá)式n = 若干順序執(zhí)行語句 when others = 若干順序執(zhí)行語句end case;盛建倫 48 在case語句中,某一個(gè)條件表達(dá)式滿足時(shí),就執(zhí)行它后面的順序執(zhí)行語句。case語句語句if語句的執(zhí)行是按順序執(zhí)行,各條件有不同的優(yōu)先級(jí); case語句各條件表達(dá)式值之間不存在不同的優(yōu)先級(jí),它們是同時(shí)執(zhí)行的,即執(zhí)行的順序與各條件表達(dá)式值的書寫順序無關(guān)。 case語句中條件表達(dá)式的值須一一列舉,不能遺漏;如果不需要一一列舉,則用others代替。 case語句和if語句在許多情況下完成的功能是相同的,在這些情況下,用case語句描述比用if語句描述更清晰、更簡(jiǎn)潔。 盛建倫

31、49-signal sel :std_logic_vector(1 downto 0);-signal a,b,c: std_logic;process(a,b,sel)begin sel c c null; end case;end process;case語句語句本例中出現(xiàn)的“null;”是個(gè)什么也不做的空語句。例: 2輸入與非門本例中,首先將與非門輸入信號(hào)a和b并置,生成一個(gè)2位的std_logic_vector信號(hào)sel。信號(hào)c是與非門的輸出。 第一個(gè)when 中的“|”代表或者,即三個(gè)條件中的任何一個(gè)滿足,都執(zhí)行 c = 1 語句。實(shí)際上與非門一般不這樣設(shè)計(jì)。常用的設(shè)計(jì)方法是: c

32、= not (a and b);盛建倫 50設(shè)計(jì)實(shí)體設(shè)計(jì)實(shí)體 在vhdl的設(shè)計(jì)中,基本設(shè)計(jì)單元是設(shè)計(jì)實(shí)體。 實(shí)體說明了該設(shè)計(jì)實(shí)體對(duì)外的接口;結(jié)構(gòu)體描述了設(shè)計(jì)實(shí)體內(nèi)部的性能;程序包存放各設(shè)計(jì)實(shí)體能共享的數(shù)據(jù)類型、常數(shù)和子程序等等,庫中存放已編譯好的實(shí)體、結(jié)構(gòu)體、程序包和配置。配置描述了實(shí)體與構(gòu)造體之間的連接關(guān)系。 一個(gè)設(shè)計(jì)實(shí)體最多由5部分構(gòu)成:實(shí)體實(shí)體(entity),一個(gè)或者幾個(gè)結(jié)構(gòu)體結(jié)構(gòu)體(architecture),使用的庫庫(library)和程序包程序包(pachage),配置配置(configuration)。 這里僅討論含有一個(gè)結(jié)構(gòu)體的設(shè)計(jì)實(shí)體,絕大多數(shù)設(shè)計(jì)實(shí)體都是僅含一個(gè)結(jié)構(gòu)體的

33、設(shè)計(jì)實(shí)體。一個(gè)實(shí)體-結(jié)構(gòu)體“對(duì)”共同定義一個(gè)電路模型。 盛建倫 51設(shè)計(jì)實(shí)體設(shè)計(jì)實(shí)體盛建倫 52 實(shí)體(實(shí)體(entity) 實(shí)體由實(shí)體(entity )語句說明。實(shí)體語句又稱為實(shí)體說明(entity declaration)語句。實(shí)體語句的作用是定義設(shè)計(jì)實(shí)體對(duì)外的信號(hào)。entity語句的書寫格式如下:entity 實(shí)體名 is generic (類屬參數(shù)表); port(端口信號(hào)表); 實(shí)體說明部分; begin實(shí)體語句部分;end 實(shí)體名; 最常用的形式是:最常用的形式是:entity 實(shí)體名 isport(端口信號(hào)表);end 實(shí)體名;盛建倫 53 port(端口)語句的書寫格式是:po

34、rt(端口名,端口名:模式 數(shù)據(jù)類型; 端口名,端口名:模式 數(shù)據(jù)類型; 端口名,端口名:模式 數(shù)據(jù)類型); 實(shí)體(實(shí)體(entity) 實(shí)體中的每一個(gè)輸出/輸入被稱為一個(gè)端口。一個(gè)端口實(shí)際上是一個(gè)信號(hào),因?yàn)檫@些信號(hào)負(fù)責(zé)設(shè)計(jì)實(shí)體與外部的接口,因此稱為端口。如果設(shè)計(jì)實(shí)體是一個(gè)封裝起來的元件,那么端口相當(dāng)于元件的引腳(pin)。 跟普通信號(hào)有兩點(diǎn)不同:一是端口一定是信號(hào),因此在說明時(shí)省略了關(guān)鍵字signal,二是在說明普通信號(hào)的信號(hào)說明語句中的信號(hào)沒有說明方向,端口由于是設(shè)計(jì)實(shí)體與外部的接口,因而是有方向的。 盛建倫 54例: 實(shí)體(實(shí)體(entity) port(reset, cs:instd_

35、logic; rd, wr:instd_logic; a1, a0:instd_logic; pa, pb:inoutstd_logic_vector(7 downto 0); pcoutstd_logic_vector(15 downto 0) ); port(端口)語句的書寫格式:port(端口名,端口名:模式 數(shù)據(jù)類型; 端口名,端口名:模式 數(shù)據(jù)類型); 注意:pc信號(hào)一行最后不以分號(hào)結(jié)束盛建倫 55 端口的模式用來說明信號(hào)通過端口的方向和通過方式,這些方向都是針對(duì)該設(shè)計(jì)實(shí)體而言的。例如,in模式對(duì)設(shè)計(jì)實(shí)體就是輸入。有下列幾種模式: 實(shí)體(實(shí)體(entity) in流入設(shè)計(jì)實(shí)體, 輸入

36、 out從設(shè)計(jì)實(shí)體流出, 輸出 inout雙向端口,即可輸入,又可輸出buffer 緩存,能用于內(nèi)部反饋的輸出盛建倫 56 out模式和buffer模式的區(qū)別在于out端口不能用于設(shè)計(jì)實(shí)體的內(nèi)部反饋。buffer端口能夠用于設(shè)計(jì)實(shí)體的內(nèi)部反饋。 實(shí)體(實(shí)體(entity) (a)q1的模式是out(b)q1的模式是buffer盛建倫 57結(jié)構(gòu)體結(jié)構(gòu)體 (architecture) 結(jié)構(gòu)體描述設(shè)計(jì)實(shí)體內(nèi)部的特性。結(jié)構(gòu)體的書寫格式如下: architecture 結(jié)構(gòu)體名 of 實(shí)體名 is 內(nèi)部信號(hào),常量,數(shù)據(jù)類型,函數(shù)等的定義; begin 若干并行執(zhí)行語句并行執(zhí)行語句 end 結(jié)構(gòu)體名; 實(shí)

37、體名一定要與本結(jié)構(gòu)體對(duì)應(yīng)實(shí)體的實(shí)體名完全一致。architecture后面的結(jié)構(gòu)體名要與end后的結(jié)構(gòu)體名完全一致,而不是與實(shí)體名一致。結(jié)構(gòu)體名可以隨便起,因?yàn)閯e的地方很少用到結(jié)構(gòu)體名。結(jié)構(gòu)體內(nèi)要求使用并行執(zhí)行語句。 類似if之類的順序執(zhí)行語句,只要將它們放在進(jìn)程語句process語句之內(nèi)即可。 process語句是并行執(zhí)行語句。 盛建倫 58前面已經(jīng)說明了并行語句和順序執(zhí)行語句的區(qū)別。結(jié)構(gòu)體結(jié)構(gòu)體(architecture) 并行執(zhí)行語句代表一個(gè)獨(dú)立的功能電路,因此它一定有明確表示或者隱含表示的輸入、輸出信號(hào),如process語句中敏感信號(hào)表中的信號(hào)不是輸入信號(hào)就是反饋信號(hào)。而順序執(zhí)行語句只

38、用于描述電路的功能一般很難判斷輸入輸出信號(hào),因此不能代表一個(gè)獨(dú)立的功能電路,例如從一個(gè)if語句中判斷輸入輸出信號(hào)就比較難。盛建倫 59結(jié)構(gòu)體有3種描述方式:行為描述、結(jié)構(gòu)描述和數(shù)據(jù)流描述。結(jié)構(gòu)體結(jié)構(gòu)體(architecture) (1) 行為描述行為描述 描述該設(shè)計(jì)實(shí)體的功能,即該單元能做什么。(2) 結(jié)構(gòu)描述結(jié)構(gòu)描述 描述該設(shè)計(jì)實(shí)體的硬件結(jié)構(gòu),即該設(shè)計(jì)實(shí)體的硬件是如何構(gòu)成的。(3) 數(shù)據(jù)流方式數(shù)據(jù)流方式 以類似于寄存器傳輸級(jí)的方式描述數(shù)據(jù)的傳輸和變換。主要使用并行執(zhí)行的信號(hào)賦值語句,即顯式表示了設(shè)計(jì)實(shí)體的行為,也隱式表示了設(shè)計(jì)實(shí)體的結(jié)構(gòu)。 其實(shí)初學(xué)者不用太鉆研各種描述方式的定義,只要能正確描

39、述設(shè)計(jì)實(shí)體的內(nèi)部特性即可。盛建倫 60 結(jié)構(gòu)體內(nèi)部要求使用并行執(zhí)行的語句,這是十分重要的。每個(gè)并行執(zhí)行語句都是一塊獨(dú)立的電路。結(jié)構(gòu)體結(jié)構(gòu)體(architecture) 像與非門這種簡(jiǎn)單的電路通過信號(hào)賦值語句很容易做到,但是像16位寄存器用簡(jiǎn)單的信號(hào)賦值語句就無法實(shí)現(xiàn),因此process語句在結(jié)構(gòu)體內(nèi)得到了大量的應(yīng)用。這和電路原理圖中是一樣的。 在用電路原理圖設(shè)計(jì)的電路中,每塊電路也都是并行操作,操作時(shí)間也沒有先后。所以各process語句之間都是并行執(zhí)行的。盛建倫 61 在用原理圖描述的電路中,各塊電路之間使用信號(hào)線互相聯(lián)系。在vhdl語言中,各process語句、各并行執(zhí)行語句之間同樣是通過信號(hào)互相聯(lián)系(或者稱之為通信)的。結(jié)構(gòu)體結(jié)構(gòu)體(architecture) 無論用電路原理圖的方式設(shè)計(jì)電路,還是用vhdl語言設(shè)計(jì)電路,組合邏輯電路中的各個(gè)信號(hào),如果不考慮信號(hào)傳輸延遲時(shí)間,是沒有時(shí)間先后的

溫馨提示

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