VHDL硬件描述語言(入門簡述)知識交流.ppt_第1頁
VHDL硬件描述語言(入門簡述)知識交流.ppt_第2頁
VHDL硬件描述語言(入門簡述)知識交流.ppt_第3頁
VHDL硬件描述語言(入門簡述)知識交流.ppt_第4頁
VHDL硬件描述語言(入門簡述)知識交流.ppt_第5頁
免費預(yù)覽已結(jié)束,剩余155頁可下載查看

下載本文檔

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

文檔簡介

1、2020/9/2,1,第三章,硬件描述語言基礎(chǔ),2,2020/9/2,章節(jié)目錄,3.1 硬件描述語言概述 3.2 VHDL語言程序結(jié)構(gòu) 3.3 VHDL語法基礎(chǔ) 3.4 VHDL常用語句 3.5 組合電路的VHDL描述 3.6 時序電路的VHDL描述,調(diào)換,3,2020/9/2,3.1 硬件描述語言概述,可編程邏輯器件、電子設(shè)計自動化(EDA)與硬件描述語言,可編程邏輯器件是一種功能可變的集成器件,可通過編程的方法設(shè)計其完成不同的邏輯功能,設(shè)計需借助軟件工具,即采用電子設(shè)計自動化的方式,設(shè)計形式有原理圖和硬件描述語言兩種,硬件描述語言是用來描述數(shù)字電路系統(tǒng)的一種語言,4,2020/9/2,3.

2、1 硬件描述語言概述,目前常用的硬件描述語言有兩種,VHDL,Verilog HDL,Very High Speed Integrated Circuit Hardware Description Language 超高速集成電路硬件描述語言,Verilog Hardware Description Language Verilog硬件描述語言,VHDL語言發(fā)展較早,從使用者數(shù)量來看,目前兩種語言平分秋色,VHDL語言更嚴(yán)謹(jǐn)、更適合設(shè)計大型數(shù)字系統(tǒng)。兩種語言相似的地方很多,學(xué)會一種可自學(xué)另一種。,5,2020/9/2,3.1 硬件描述語言概述,VHDL語言的IEEE標(biāo)準(zhǔn) VHDL IEEE 1

3、076-1987 VHDL IEEE 1076-1993,早在1980年,因為美國軍事工業(yè)需要描述電子系統(tǒng)的方法,美國國防部開始進行VHDL的開發(fā) 1987年,由IEEE(Institute of Electrical and Electronics Engineers,電氣和電子工程師協(xié)會 )將VHDL制定為標(biāo)準(zhǔn),稱為IEEE1076-1987 1993年制定了第二個IEEE標(biāo)準(zhǔn)版本,稱為IEEE1076-1993,增加了一些新的命令和屬性,6,2020/9/2,章節(jié)目錄,3.1 硬件描述語言概述 3.2 VHDL語言程序結(jié)構(gòu) 3.3 VHDL語法基礎(chǔ) 3.4 VHDL常用語句 3.5 組合

4、電路的VHDL描述 3.6 時序電路的VHDL描述,7,2020/9/2,五個基本組成部分,庫(Library) 程序包(Package),實體說明(Entity Declaration),結(jié)構(gòu)體(Archiecture),配置(Configuration),主要部分,注意: 程序擴展名為.vhd,8,2020/9/2,【例3-1】2選1數(shù)據(jù)選擇器的VHDL語言描述,功能:2選1數(shù)據(jù)選擇器,Sel=0時,f=d0; Sel=1時,f=d1;,9,2020/9/2,- 2 to 1 mux VHDL LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTIT

5、Y mux IS PORT (d0,d1,sel: IN STD_LOGIC; f: OUT STD_LOGIC); END mux;,庫 程序包,實體說明,VHDL語言程序,注釋,10,2020/9/2,ARCHITECTURE structure OF mux IS SIGNAL temp: STD_LOGIC; -內(nèi)部信號 BEGIN p0:PROCESS(d0,d1,sel) -進程 VARIABLE temp1,temp2,temp3: STD_LOGIC; BEGIN -進程內(nèi)的局部變量 temp1:=d0 AND(NOT sel);-變量間的邏輯關(guān)系 temp2:=d1 AND

6、sel; temp3:=temp1 OR temp2; temp=temp3; f=temp; END PROCESS p0; -進程結(jié)束 END structure; -結(jié)構(gòu)體結(jié)束,結(jié)構(gòu)體,11,2020/9/2,EDA工具軟件QuartusII綜合出來的電路,程序中的信號temp被優(yōu)化掉了,12,2020/9/2,1行是注釋,用 “-”引頭 23行是庫說明部分,打開庫及庫中的程序包 47行是實體說明部分,描述電路的端口信號 8最后是結(jié)構(gòu)體部分,描述電路的邏輯功能 VHDL語言不區(qū)分大小寫,為閱讀方便,關(guān)鍵字用大寫,用戶自定義部分用小寫。,說明,13,2020/9/2,本節(jié)三方面內(nèi)容,3.2

7、.1 實體說明 3.2.2 結(jié)構(gòu)體 3.2.3 程序包、庫及配置,14,2020/9/2,3.2.1 實體說明,【格式】,ENTITY IS,GENERIC (類屬常數(shù)說明);,PORT (端口說明);,實體語句部分;,END ENTITY ;,主要部分,表示必選項, 表示可選項,【主要功能】說明電路的名字、輸入輸出信號。,15,2020/9/2,【例】4位串行進位加法器的實體說明。,ENTITY adder_ripple IS,GENERIC (m: TIME :=5ns);,PORT (a, b: IN STD_LOGIC_VECTOR(3 DOWNTO 0); q: OUT STD_LO

8、GIC_VECTOR(3 DOWNTO 0); cout: OUT STD_LOGIC);,END adder_ripple;,實體名由用戶自定義,必須和主文件名一致 必須以ENTITY IS開始,以END 結(jié)束 在端口說明部分說明輸入輸出信號的情況 在類屬常數(shù)說明部分說明類屬常數(shù)的情況,16,2020/9/2,類屬常數(shù):若程序中多處用到某個常數(shù),為方便修改,可將其定義為類屬常數(shù),只需修改類屬常數(shù)的值,則程序中與其有關(guān)的常數(shù)自動修改。,1.類屬常數(shù)說明語句,【功能】說明類屬常數(shù)的名字,數(shù)據(jù)類型,設(shè)定值。,GENERIC (m: TIME :=5ns);,【格式】,GENERIC (常數(shù)名: 數(shù)

9、據(jù)類型 :=設(shè)定值; 常數(shù)名: 數(shù)據(jù)類型 :=設(shè)定值);,【例】,17,2020/9/2,2.端口說明語句,【格式】,PORT (端口名,端口名: 模式 數(shù)據(jù)類型; 端口名,端口名: 模式 數(shù)據(jù)類型);,PORT (a,b: IN STD_LOGIC_VECTOR(3 DOWNTO 0); q: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); cout: OUT STD_LOGIC);,【功能】 說明輸入輸出信號的名字,輸入輸出模式,數(shù)據(jù)類型,位寬。,【例】,18,2020/9/2,端口名是輸入輸出信號的名字。 模式是指輸入輸出信號的方向。 數(shù)據(jù)類型是指輸入輸出信號的取值類

10、型。,表3-1端口方向說明,BIT BIT_VECTOR STD_LOGIC INTEGER BOOLEAN STD_LOGIC_VECTOR,常用數(shù)據(jù)類型,數(shù)據(jù)類型在3.3節(jié)詳細介紹,說明:,BUFFER是INOUT的子集,做輸入時,信號不是由外部驅(qū)動,而是從輸出反饋得到。,19,2020/9/2,3.2.2 結(jié)構(gòu)體,【格式】,ARCHITECTURE OF IS 內(nèi)部信號或元件定義語句; BEGIN END ;,【功能】描述電路的具體結(jié)構(gòu)、功能。,主要部分,20,2020/9/2,ARCHITECTURE是關(guān)鍵字。 結(jié)構(gòu)體名可隨意起,實體名必須和實體說明中的實體名一致。 定義語句是指對內(nèi)部

11、信號、元件、常數(shù)等的說明。 并行處理語句部分是結(jié)構(gòu)體的主要部分,描述電路的結(jié)構(gòu)、功能等。 BEGIN后開始結(jié)構(gòu)和功能的描述。,說明:,21,2020/9/2,【例3-2】一個RS觸發(fā)器的結(jié)構(gòu)體(數(shù)據(jù)流描述方式),該電路中并行語句部分使用的是并行信號賦值語句,描述了兩個與非門的連接關(guān)系。,22,2020/9/2,【例3-3】一個RS觸發(fā)器的結(jié)構(gòu)體(結(jié)構(gòu)描述方式),本例是RS觸發(fā)器的另一種描述方式,并行處理語句采用的是元件例化語句,后面3.4.1介紹。,23,2020/9/2,【例3-4】一個全加器的VHDL程序(數(shù)據(jù)流描述方式),本例結(jié)構(gòu)體中的并行處理部分采用的也是并發(fā)信號賦值語句。描述了兩個異

12、或門和一個與或門。 本例中的類屬說明語句說明了一個時間常數(shù)tpd是5ns,后面的賦值語句使用了該延時參數(shù)。,24,2020/9/2,結(jié)構(gòu)體中并行語句有5種類型,信號賦值語句 元件例化語句 進程語句結(jié)構(gòu) 塊語句結(jié)構(gòu) 子程序語句結(jié)構(gòu),3.4節(jié)詳細介紹,25,2020/9/2,3.2.3 包集合、庫及配置,1. 包集合(Package),包集合中存放供多個實體公用的數(shù)據(jù)類型、常量、子程序。 包集合又存放在庫中。 一般情況下,要使用某個包集合中的資源時,必須對該包集合進行使用說明。 一般情況下,要使用某個庫中的包集合時,也必須對該庫進行說明。,【格式】,LIBRARY ; USE ,LIBRARY I

13、EEE; USE IEEE.STD_LOGIC_1164.ALL,【例】,類似于C語言中的頭文件,26,2020/9/2,VHDL提供的常用的標(biāo)準(zhǔn)包集合: STANDARD STD_LOGIC_1164,STANDARD包中定義了若干數(shù)據(jù)類型、子類型、函數(shù);該包已預(yù)先在STD庫中編譯好,并且自動與所有模型連接,使用時無須說明; STD_LOGIC_1164包中也定義了若干數(shù)據(jù)類型和函數(shù); 該包已預(yù)先在IEEE庫中編譯好,但是在使用時須加以使用說明;,在STD 庫中,在IEEE庫中,,用時不須說明,,用時須說明,27,2020/9/2,常用的數(shù)據(jù)類型(整數(shù)、實數(shù)、BIT、BIT_VECTOR、布

14、爾量、字符、字符串、物理型、錯誤等級、自然數(shù)和正整數(shù))均在STANDARD程序包中,常用的數(shù)據(jù)類型(STD_LOGIC、STD_LOGIC_VECTOR)在STD_LOGIC_1164程序包中,28,2020/9/2,【包集合結(jié)構(gòu)格式】,PACKAGE IS 說明語句; END 包集合名;,PACKAGE BODY IS 說明語句; END 包集合名;,包首,包體,用戶可自定義包集合。,29,2020/9/2,【例3-10】自定義包集合的例子。,-包集合說明(包首) PACKAGE example IS TYPE alu_op IS (add,sub,mul,div,eq,gt,lt); CO

15、NSTANT pi: REAL :=3.1415926; delay1:TIME; COMPONENT nand2 PORT (a,b: IN BIT; c:OUT BIT); END COMPONENT; FUNCTION mean(a,b,c:REAL) RETURN REAL; END example;,說明了一個枚舉型的數(shù)據(jù)類型alu_op,兩個常數(shù)pi、delay1,一個元件nand2,一個函數(shù)mean,30,2020/9/2,-包集合體 PACKAGE BODY example IS CONSTANT delay1:TIME=15ns; FUNCTION mean(a,b,c:RE

16、AL) RETURN REAL; BEGIN RETURN(a+b+c)/3.0; END mean; END example;,包集合體中具體說明了時間常數(shù)delay1的值、 函數(shù)mean的功能,31,2020/9/2,USE WORK. example. ALL;,自定義的包集合存放在現(xiàn)行工作庫WORK庫中。使用WORK庫時不需說明。 自定義的包集合在使用時必須進行使用說明。,【例】,說明:,32,2020/9/2,2. 庫(Library),【格式】,庫中存放已編譯過的設(shè)計單元(如實體、程序包等); 庫中內(nèi)容可以用作其它VHDL描述的資源。 使用庫時一般需要說明。,LIBRARY ;,5

17、種庫,IEEE STD ASIC WORK 用戶定義庫,LIBRARYIEEE;,【例】,33,2020/9/2,IEEE STD_LOGIC_1164 NUMERIC_BIT NUMERIC_STD STD_LOGIC_ARITH STD_LOGIC_SIGNED STD_LOGIC_UNSIGNED STD STANDARD TEXTIO VATIL(面向ASIC的庫) VATIL_TIMING VATIL_PRIMITIVE WORK(現(xiàn)行工作庫) 用戶自定義庫,無須說明,不但要說明庫,還要說明庫中的程序包。,例: LIBRARY IEEE; USE IEEE.STD_LOGIC_116

18、4.ALL,最常用,例: LIBRARY STD; USE STD.STANDAR.ALL;,34,2020/9/2,3. 配置語句(Configration),一個實體可以有多個結(jié)構(gòu)體。 可利用配置語句來選擇不同的結(jié)構(gòu)體,使其與要設(shè)計的實體相對應(yīng)。,實體1 結(jié)構(gòu)體1 結(jié)構(gòu)體2,【例】,CONFIGURATION confr OF rsff IS FOR 結(jié)構(gòu)體1; END FOR; END confr ;,【格式】,CONFIGURATION 配置名 OF 實體名 IS FOR 結(jié)構(gòu)體1名; END FOR; END 配置名;,35,2020/9/2,實體1 結(jié)構(gòu)體1,實體2 結(jié)構(gòu)體2,應(yīng)用

19、: 比如可設(shè)計兩個不同風(fēng)格的結(jié)構(gòu)體,比較其性能差異,可以用配置語句選擇其中的一個結(jié)構(gòu)體。 否則,只能設(shè)計兩個實體(程序),分別調(diào)試。,實體 結(jié)構(gòu)體1 結(jié)構(gòu)體2,VS,36,2020/9/2,章節(jié)目錄,3.1 硬件描述語言概述 3.2 VHDL語言程序結(jié)構(gòu) 3.3 VHDL語法基礎(chǔ) 3.4 VHDL常用語句 3.5 組合電路的VHDL描述 3.6 時序電路的VHDL描述,37,2020/9/2,3.3 VHDL語法基礎(chǔ),3.3.1 標(biāo)識符和保留字 3.2.2 數(shù)據(jù)對象 3.2.3 數(shù)據(jù)類型 3.3.4 數(shù)據(jù)類型的轉(zhuǎn)換 3.3.5 運算操作符,五方面內(nèi)容,38,2020/9/2,3.3.1 標(biāo)識符

20、和保留字,規(guī)則: 由字母數(shù)字下劃線組成 必須以英文字母開頭 最后一個字符不能是下劃線 不允許出現(xiàn)連續(xù)兩個下劃線 保留字不能作一般的標(biāo)識符 不區(qū)別大小寫,1. 標(biāo)識符,即由用戶起的實體名、結(jié)構(gòu)體名、信號名、變量名.,39,2020/9/2,2. 保留字,表3-3 常用保留字,保留字即VHDL語言中已使用的關(guān)鍵字。 保留字不能用作標(biāo)識符。,40,2020/9/2,41,2020/9/2,3.3.2 數(shù)據(jù)對象,對象有四種類型:,常數(shù) 信號 變量 文件,最常用,42,2020/9/2,3.3.2 數(shù)據(jù)對象,1. 常數(shù),CONSTANT 常數(shù)名 : 數(shù)據(jù)類型 := 表達式 ;,【常數(shù)聲明格式】,使用前必

21、須聲明,CONSTANT toler : DISTANCE := 1.5 nm; CONSTANT pi : REAL := 3.141592 ; CONSTANT cycle_time : TIME := 100 ns; CONSTANT Propagation_Delay : DELAY_LENGTH;,【例】,常數(shù)值,43,2020/9/2,2. 變量,variable 變量名 : 數(shù)據(jù)類型 約束條件 := 表達式 ;,【變量聲明格式】,使用前必須聲明,【例】,VARIABLE result:STD_LOGIC :=0; VARIABLE x, y, z:INTEGER; VARIABL

22、E count:INTEGER RANGE 0 TO 255 :=10;,初始值,聲明時可帶初始值,約束條件,44,2020/9/2,【變量賦值格式】,變量名 :=表達式;,【例】,result := 1; x :=y+3;,注意賦值符號 := 表達式的數(shù)據(jù)類型和變量的類型必須一致。 表達式可以是運算表達式也可以是具體數(shù)值。,45,2020/9/2,3. 信號,SIGNAL 信號名 : 數(shù)據(jù)類型 約束條件 := 表達式 ;,【信號聲明格式】,使用前必須聲明,【例】,SIGNAL first_sig: INTEGER; SIGNAL sys_clk:BIT :=0; SIGNAL second_

23、sig, third_sig:INTEGER :=10; SIGNAL s:INTEGER RANGE 0 TO 20 :=15;,初值,聲明時可帶初始值,約束條件,46,2020/9/2,【信號賦值格式】,信號名 =表達式;,【例】,a = b AFTER 10ns; a = expression_b; a = expression_b AFTER 10ns;,注意信號說明中的賦初值符號是 :=,而信號賦值語句中的賦值符號為=。 表達式的數(shù)據(jù)類型和信號的類型必須一致。 表達式可以是運算表達式也可以是具體數(shù)值。 信號賦值可以添加延時信息。,47,2020/9/2,變量是局部的,信號是全局的;

24、變量只能用在進程內(nèi),信號沒有此限制。若變量用于進程之外,必須將該變量先賦給一個相同類型的信號,用信號在進程之間傳遞數(shù)據(jù)。 信號可以延遲,變量不能。 變量不能用于硬件連線,常用在高層次建模的計算中。 進程對信號敏感而對變量不敏感。 賦值符號不一樣;,信號和變量的區(qū)別,48,2020/9/2,3.3.3 數(shù)據(jù)類型,Scalar types 標(biāo)量型 Composite 復(fù)合型 Access 存取型 File 文件型 Protected 保護型,5種類型,每一種中又有若干子類型和具體數(shù)據(jù)類型。,49,2020/9/2,已經(jīng)在標(biāo)準(zhǔn)數(shù)據(jù)包STANDARD和STD_LOGIC_1164中定義好的常用的數(shù)據(jù)類

25、型如下:,整數(shù)、實數(shù)、BIT、BIT_VECTOR、布爾量、 字符、字符串、物理型、錯誤等級、自然數(shù)和正整數(shù),本節(jié)介紹以上數(shù)據(jù)類型的特點。,STD_LOGIC、 STD_LOGIC_VECTOR,STANDARD,STD_LOGIC_1164,50,2020/9/2,3.3.3 數(shù)據(jù)類型,整數(shù)(INTEGER) (屬于:標(biāo)量型整數(shù)型,在STANDARD程序包中 ),整數(shù)的表示范圍為- (231-1) (231-1)。,【例】,VARIABLE a:INTEGER :=15;,SIGNAL s:INTEGER RANGE 0 TO 20 :=15;,INTEGER型數(shù)據(jù)值不用引號括起來,51,2

26、020/9/2,2. 實數(shù)(REAL) (屬于:標(biāo)量型浮點型, 在STANDARD程序包中 ),實數(shù)的表示范圍為- 1.0E38 +1.0E38。,實數(shù)的書寫方式舉例: 1.0 666.666 36.5e-4,某些數(shù)即可以用整數(shù)表示,也可以用實數(shù)表示,如1.0是實數(shù),1是整數(shù),兩者數(shù)值相同但類型不同。,REAL型數(shù)據(jù)值不用引號括起來,52,2020/9/2,3. BIT(屬于:標(biāo)量型枚舉型),和 BIT_VECTOR(屬于:復(fù)合型數(shù)組型),在STANDARD程序包中,BIT又稱位型,其值僅有2個,0 和1;,BIT_VECTOR又稱位矢量,是BIT的數(shù)組。,例:,BIT型數(shù)值要用單引號括起來,

27、 BIT_VECTOR型數(shù)值要用雙引號括起來。,SIGNAL a : BIT; SIGNAL low_byte : BIT_VECTOR (0 to 7) ; a = 1; Low_byte = “00000101”;,53,2020/9/2,4. 布爾型(BOOLEAN) (屬于:標(biāo)量型枚舉型,在STANDARD程序包中),BOOLEAN的值僅有2個,TRUE 和FALSE。,54,2020/9/2,5. STD_LOGIC,和 STD_LOGIC_VECTOR,在STD_LOGIC_1164程序包中,STD_LOGIC又稱標(biāo)準(zhǔn)邏輯變量,其值有9個,U,X,0,1,Z,W,L,H,-。常用的

28、是0,1,Z。 STD_LOGIC_VECTOR稱標(biāo)準(zhǔn)邏輯向量,是STD_LOGIC的數(shù)組。,STD_LOGIC型數(shù)值要用單引號括起來, STD_LOGIC_VECTOR型數(shù)值要用雙引號括起來。,例:,SIGNAL a : STD_LOGIC; a = 1;,55,2020/9/2,6. 字符(CHARACTER)(屬于:標(biāo)量型枚舉型),和 字符串(STRING)(屬于:復(fù)合型數(shù)組型),在STANDARD程序包中,CHARACTER型數(shù)值要用單引號括起來。 STRING型數(shù)值要用雙引號括起來。,例: A,a,1,2 。 “ABC”,“HELLO”。,56,2020/9/2,7. 時間型(TIM

29、E) (屬于:標(biāo)量型物理型,在STANDARD程序包中 ),GENERIC (m: TIME :=5ns);,例:,57,2020/9/2,8. 錯誤等級(SEVERITY_LEVEL) (屬于:標(biāo)量型枚舉型,在STANDARD程序包中 ),SEVERITY_LEVEL的值有4個,NOTE, WARNING, ERROR, FAILURE。 注意,警告,錯誤,失敗。,58,2020/9/2,9. 自然數(shù)(NATURAL)(標(biāo)量型整數(shù)型整數(shù)),和 正整數(shù)(POSITIVE)(標(biāo)量型整數(shù)型整數(shù)),在STANDARD程序包中,NATURAL 和POSITIVE是INTEGER 的子類型。,59,20

30、20/9/2,以上是已經(jīng)在標(biāo)準(zhǔn)數(shù)據(jù)包STANDARD和std_logic_1164中定義好的常用的數(shù)據(jù)類型。,除此之外,還可以由用戶自定義數(shù)據(jù)類型。,可以由用戶自定義的數(shù)據(jù)類型: 枚舉類型 整數(shù)類型 數(shù)組類型 記錄類型 存取類型 文件類型 時間類型 實數(shù)類型,TYPE 數(shù)據(jù)類型名 IS 數(shù)據(jù)類型定義 OF 基本數(shù)據(jù)類型 ;,TYPE 數(shù)據(jù)類型名 IS 數(shù)據(jù)類型定義;,【格式】,60,2020/9/2,TYPE alu_op IS (add,sub,mul,div,eq,gt,lt);,type BIT is (0, 1);,type BIT_VECTOR is array (NATURAL r

31、ange ) of BIT;,subtype POSITIVE is INTEGER range 1 to INTEGERHIGH;,定義一個數(shù)據(jù)類型alu_op,是枚舉型,取值為add,sub,mul,div,eq,gt,lt中的一個 聲明變量a是alu_op型的。,Variable a : alu_op,例,下例為標(biāo)準(zhǔn)程序包中的某些數(shù)據(jù)類型定義,61,2020/9/2,3.3.4 數(shù)據(jù)類型的轉(zhuǎn)換,自學(xué),62,2020/9/2,3.3.5 操作符,5類操作符,邏輯運算 關(guān)系運算 算術(shù)運算 并置運算 移位運算,63,2020/9/2,可以對 BIT, BOOLEAN,STD_LOGIC,STD

32、_LOGIC_VECTOR等類型數(shù)據(jù)進行邏輯運算。,1. 邏輯運算符,64,2020/9/2,2. 算術(shù)運算符,通常取模運算也叫取余運算,它們返回結(jié)果都是余數(shù)。rem和mod唯一的區(qū)別在于: 當(dāng)x和y的正負號一樣的時候,兩個函數(shù)結(jié)果是等同的;當(dāng)x和y的符號不同時,rem取余函數(shù)結(jié)果的符號和x的一樣,而mod求模和y一樣。,65,2020/9/2,3. 關(guān)系運算符,66,2020/9/2,4. 并置運算符,sel=b ,例:,若b=1,a=0,則sel=“10”,Y =H BEGIN END ;,并行語句用在結(jié)構(gòu)體的并行處理語句部分,72,2020/9/2,進程語句 并行信號賦值語句 元件例化語

33、句 塊語句 過程調(diào)用語句 參數(shù)傳遞語句 生成語句 并行斷言語句,ARCHITECTURE OF IS 定義語句; BEGIN 進程語句 并行信號賦值語句 元件例化語句 END ;,73,2020/9/2,ARCHITECTURE COMPONENT END COMPONENT; BEGIN PROCESS END PROCESS dff1: dff PORT MAP(S(0),clk,S(1); q1;,各 部 分 之 間 是 并 行 的,74,2020/9/2,1. 進程語句,【格式】,進程標(biāo)號: PROCESS 敏感信號表 IS 進程內(nèi)部變量說明部分; BEGIN END PROCESS

34、進程標(biāo)號;,進程語句是最主要的并行語句,它在VDHL程序設(shè)計中使用頻率最高,也是最能體現(xiàn)硬件描述語言的一條語句。,75,2020/9/2,【例3-7】帶異步復(fù)位功能的D觸發(fā)器的VHDL描述。,76,2020/9/2,當(dāng)敏感信號發(fā)生變化時,執(zhí)行進程。 當(dāng)執(zhí)行完最后一個語句時,回到第一個語句,等待下一次敏感信號變化。 一個結(jié)構(gòu)體中可以有多個進程,進程之間是并行的。 仿真時進程內(nèi)部各條語句是順序執(zhí)行的。 進程語句說明部分可以說明需要的局部變量。,【說明】,77,2020/9/2,2. 并行信號賦值語句,并發(fā)信號賦值語句,例: q1=a+b; q2=a*b;,當(dāng)a或b有變化時,兩條語句同時執(zhí)行。 模擬

35、了兩個加法器和乘法器電路。,注意前提是信號賦值語句放在進程外; 若放在進程中,則變成了順序執(zhí)行的語句。,當(dāng)信號賦值語句放在進程外時,就是并發(fā)信號賦值語句。,78,2020/9/2,條件信號賦值語句,【格式】,目標(biāo)信號=表達式1 WHEN 條件1 ELSE 表達式2 WHEN 條件2 ELSE 表達式3 WHEN 條件3 ELSE 表達式n-1 WHEN 條件n-1 ELSE 表達式n;,當(dāng)條件1滿足時,目標(biāo)信號=表達式1 當(dāng)條件2滿足時,目標(biāo)信號=表達式2 ,【功能】,條件判斷是按順序執(zhí)行的,先判斷條件1滿足否,再判斷條件2滿足否。,79,2020/9/2,【例3-11】用條件信號賦值語句設(shè)計

36、4選1數(shù)據(jù)選擇器。,80,2020/9/2,選擇信號賦值語句,【格式】,WITH 選擇條件表達式 SELECT 目標(biāo)信號=表達式1 WHEN 選擇條件1 表達式2 WHEN 選擇條件2 表達式3 WHEN 選擇條件3 表達式n WHEN 選擇條件n; 表達式n+1 WHEN OTHERS;,當(dāng)選擇條件表達式值=條件1時,目標(biāo)信號=表達式1 當(dāng)選擇條件表達式值=條件2時,目標(biāo)信號=表達式2 ,【功能】,條件判斷是同時進行的,無優(yōu)先級。,81,2020/9/2,【例3-12】用選擇信號賦值語句設(shè)計4選1數(shù)據(jù)選擇器。,該例既使用了條件信號賦值語句也使用了選擇信號賦值語句,82,2020/9/2,3.

37、 元件例化語句,元件例化語句是最能體現(xiàn)層次化設(shè)計思想的語句。,例如設(shè)計由D觸發(fā)器構(gòu)成的移位寄存器,可以將設(shè)計分成2層,底層描述D觸發(fā)器,頂層調(diào)用底層描述的D觸發(fā)器。,在頂層中調(diào)用底層設(shè)計時,就要用到元件例化語句。,層次化設(shè)計簡單說即將整個系統(tǒng)分成不同的層次,頂層設(shè)計可以調(diào)用底層設(shè)計。,83,2020/9/2,【格式】,COMPONENT GENERIC 類屬說明; PORT ; END COMPONENT;, GENERIC MAP(參數(shù)映射) PORT MAP (端口映射);,定義元件: 把底層設(shè)計定義成一個元件,元件例化: 調(diào)用定義好的元件,并說明該元件與其他信號的連接關(guān)系。,84,202

38、0/9/2,【例3-14】用元件例化語句描述由D觸發(fā)器構(gòu)成的移位寄存器。,dff是另一個程序?qū)?yīng)的電路,這里將其定義成一個元件,并用其構(gòu)成一個移位寄存器。,85,2020/9/2,86,2020/9/2,元件名必須與底層文件的實體名一致。 端口映射部分要指明元件內(nèi)部信號與外部信號的連接關(guān)系,其順序必須與端口說明部分的順序一致。 一個元件定義部分可以對應(yīng)多個元件例化部分,相當(dāng)于調(diào)用了多個元件而已。 元件標(biāo)號名可以幫助標(biāo)示不同的元件。,【說明】,87,2020/9/2,4. 生成語句,非重點不講,88,2020/9/2,ARCHITECTURE COMPONENT END COMPONENT; B

39、EGIN PROCESS END PROCESS dff1: dff PORT MAP(S(0),clk,S(1); q1;,各部分之間是并行的,89,2020/9/2,3.4.2 順序語句,順序語句是相對于并行語句而言的。 順序語句的特點是:每一條順序語句的執(zhí)行順序是與它們的書寫順序相一致的。 順序語句只能出現(xiàn)在進程和子程序中。,進程標(biāo)號: PROCESS 敏感信號表 IS 進程語句說明部分; BEGIN END PROCESS 進程標(biāo)號;,90,2020/9/2,順序賦值語句 WAIT語句 IF語句 CASE語句 LOOP語句 EXIT語句 RETURN語句 NULL語句 REPORT語句

40、 斷言語句,常用,91,2020/9/2,1.順序賦值語句,變量賦值語句,【格式】,目標(biāo)變量 := 表達式,注意賦值符號 := 表達式的數(shù)據(jù)類型和變量的類型必須一致。 表達式可以是運算表達式也可以是具體數(shù)值。 變量賦值限定在進程、函數(shù)、過程等順序區(qū)域內(nèi)。 變量賦值無時間特性。 變量值具有局部性。只在進程內(nèi)有效。,count :=count+1;,【例】,92,2020/9/2, 信號賦值語句,【格式】,目標(biāo)信號 = 表達式,信號賦值語句中的賦值符號為=。 表達式的數(shù)據(jù)類型和信號的類型必須一致。 表達式可以是運算表達式也可以是具體數(shù)值。 信號賦值可以添加延時信息。 用在進程中才是順序語句,S=a

41、 XOR b XOR c;,【例】,當(dāng)信號賦值語句放在進程內(nèi)時,就是順序語句。 放在進程外時就是并行語句。,93,2020/9/2,2.WAIT語句,【格式】,WAIT-無限等待 WAIT ON-敏感信號變化 WAIT UNTIL-條件滿足 WAIT FOR-時間到,【功能】,進程在仿真運行中總是處于兩種狀態(tài)之一:執(zhí)行或掛起。 進程狀態(tài)的變化可受WAIT語句的控制,當(dāng)進程執(zhí)行到WAIT語句時就將被掛起,并設(shè)置好再次執(zhí)行的條件??梢栽O(shè)置4種條件。,94,2020/9/2,3.IF語句,IF語句是一種條件控制語句,是常用語句之一。 IF語句只能用在進程中。,網(wǎng)上流傳一句話:IF、CASE打天下,9

42、5,2020/9/2,【格式】,IF THEN ; END IF;, IF THEN 語句,當(dāng)條件滿足時,執(zhí)行THEN后的語句,否則,不執(zhí)行,【功能】,條件不完整,常用來實現(xiàn)時序電路,96,2020/9/2,順序處理語句,當(dāng)條件滿足時,d的值賦給q,否則,q值不變,【例3-17】用IF THEN語句描述D觸發(fā)器功能。,97,2020/9/2,【格式】,IF THEN ; ELSE ; END IF;,兩分支, IF THEN ELSE語句,當(dāng)條件滿足時,執(zhí)行THEN后的語句,否則,執(zhí)行ELSE后的語句。 條件完整,常用來實現(xiàn)組合電路。,【功能】,98,2020/9/2,【例】用IF THEN

43、ELSE語句描述二選一數(shù)據(jù)選擇器,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux IS PORT (d0,d1,sel: IN STD_LOGIC; f: OUT STD_LOGIC); END mux;,99,2020/9/2,ARCHITECTURE beha OF mux IS BEGIN PROCESS(d0,d1,sel) BEGIN IF (sel=0) THEN f=d0; ELSE f=d1; END IF; END PROCESS; END beha;,Sel=0時,f=d0; Sel=1時,f=d1;,100,20

44、20/9/2,【格式】,IF THEN ; ELSIF THEN ; ELSE ; END IF;,多分支, IF THEN ELSIFELSE語句,當(dāng)條件1滿足時,執(zhí)行THEN后的順序語句1,否則,當(dāng)條件2滿足時,執(zhí)行THEN后的順序語句2,否則執(zhí)行ELSE后的順序語句3。 條件完整,常用來實現(xiàn)組合電路。,【功能】,101,2020/9/2,條件1優(yōu)先級高 條件2優(yōu)先級低,還可以再分支,102,2020/9/2,【例】數(shù)據(jù)選擇器的VHDL程序。(P137),注意: 條件要完整,最后必須加ELSE f=0, 否則會綜合出寄存器。,103,2020/9/2,3.4.2 順序語句,條件不完整的綜合

45、結(jié)果,有寄存器,104,2020/9/2,條件完整的綜合結(jié)果,無寄存器,105,2020/9/2,4.CASE語句,【格式】,CASE 表達式 IS WHEN 取值1 = 順序處理語句1; WHEN 取值2 = 順序處理語句2; . WHEN OTHERS = 順序處理語句n; END CASE;,CASE語句也是常用語句之一,具有條件控制功能。 也只能用在進程中。,106,2020/9/2,幾個條件是同等級的,107,2020/9/2,【例3-19】用CASE語句實現(xiàn)3-8線譯碼器。,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY deco

46、der_3to8 IS PORT (a,b,c,g1,g2,g3: IN STD_LOGIC; y: OUT STD_LOGIC_VECTOR(7 DOWNTO 0); END decoder_3to8; ARCHITECTURE beha OF decoder_3to8 IS SIGNAL indata: STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN Indata=c,108,2020/9/2,PROCESS(Indata,g1,g2,g3) BEGIN IF (g1=1 AND g2=0 AND g3=0) THEN CASE indata IS WHEN “00

47、0” = y y y y y y y y y=“XXXXXXXX”; END CASE; ELSE f=11111111; END IF; END PROCESS; END beha;,109,2020/9/2,CASE語句的各條件表達式是同時執(zhí)行的。 條件表達式的所有情況都要列舉到。 可用WHEN OTHERS 描述。,【說明】,110,2020/9/2,5.LOOP語句,【格式】,FOR 循環(huán)變量 IN 取值范圍 LOOP ; END LOOP;,LOOP是循環(huán)語句,有兩種,FORLOOP WHILELOOP,FOR LOOP,若循環(huán)變量在取值范圍內(nèi)則執(zhí)行循環(huán), 否則結(jié)束循環(huán)。,【功能】,

48、111,2020/9/2,【例3-20 】用FORLOOP語句描述的偶校驗發(fā)生器。,設(shè)a=11001110, 則tmp=1,奇數(shù)個1; 設(shè)a=11001100, 則tmp=0,偶數(shù)個1。,112,2020/9/2,【格式】,WHILE 條件 LOOP ; END LOOP;,若條件為真則執(zhí)行循環(huán), 若為假則結(jié)束循環(huán)。,WHILELOOP,【功能】,113,2020/9/2,【例3-21】用WHILELOOP語句描述的偶校驗發(fā)生器。,功能和例3-20相同,注意y=tmp;只能寫在進程內(nèi),因為tmp是變量,在進程內(nèi)局部有效。,114,2020/9/2,歸納一下前面介紹的IF語句、CASE語句、LO

49、OP語句,有一個共同的特點,即不是對電路的具體結(jié)構(gòu)進行描述,而是對電路的功能和行為進行了描述,采用的是類似C語言的高級描述語言,我們把這種描述方式稱為行為描述方式。,后面介紹,115,2020/9/2,6.EXIT語句,【格式】,EXIT LOOP標(biāo)號;,EXIT LOOP標(biāo)號 WHEN 條件;,程序執(zhí)行到該語句處,無條件跳出。 程序執(zhí)行到LOOP標(biāo)號處,無條件跳出。 條件滿足時,執(zhí)行到該語句處跳出。 條件滿足時,執(zhí)行到LOOP標(biāo)號處跳出。,除正常結(jié)束循環(huán)外,還可利用EXIT語句退出。,116,2020/9/2,7.斷言語句(ASSERT),【格式】,assert 條件 REPORT 表達式

50、SEVERITY 表達式,斷言語句主要用于程序仿真、調(diào)試中的人機會話,它可以給出一個文字串作為警告和錯誤的信息。,【功能】,如果斷言條件不滿足,則順序執(zhí)行REPORT語句,輸出用雙引號括起來的以文字串表示的錯誤信息,同時還要報告錯誤信息的嚴(yán)重級別。,117,2020/9/2,【例3-22】使用ASSERT語句的RS觸發(fā)器的VHDL程序。注意在RS觸發(fā)器中,不允許兩個輸入都為1。,該程序使用斷言語句,一旦出現(xiàn)兩個輸入r、s都為1的情況,則發(fā)出錯誤提示。,118,2020/9/2,VHDL語言的三種描述方式,數(shù)據(jù)流描述方式(RTL級描述方式),結(jié)構(gòu)描述方式,行為描述方式,主要采用邏輯關(guān)系式的描述方

51、式,說明了數(shù)據(jù)的流向,主要采用元件例化語句,說明元件之間的連接關(guān)系,主要采用IF、CASE、WAIT、LOOP等高級語言,說明電路的功能和行為,119,2020/9/2,數(shù)據(jù)流描述方式的2選1數(shù)據(jù)選擇器,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux IS PORT (d0,d1,sel: IN STD_LOGIC; f: OUT STD_LOGIC); END mux; ARCHITECTURE mux_1 OF mux IS BEGIN p0:PROCESS(d0,d1,sel) VARIABLE temp1,temp2: STD

52、_LOGIC; BEGIN temp1:=d0 AND(NOT sel); temp2:=d1 AND sel; f=temp1 OR temp2; END PROCESS p0; END mux_1;,主要采用邏輯關(guān)系式的描述方式,說明了數(shù)據(jù)的流向,120,2020/9/2,結(jié)構(gòu)描述方式的2選1數(shù)據(jù)選擇器,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux IS PORT (d0,d1,sel: IN STD_LOGIC; f: OUT STD_LOGIC); END mux; ARCHITECTURE mux_2 OF mux IS

53、SIGNAL y1,y2,y3 :STD_LOGIC COMPONENT NOT1 PORT(a:IN STD_LOGIC, y:OUT STD_LOGIC); END COMPONENT;,121,2020/9/2,主要采用元件例化語句,說明元件之間的連接關(guān)系,COMPONENT AND2 PORT(a,b:IN STD_LOGIC, y:OUT STD_LOGIC); END COMPONENT; COMPONENT OR2 PORT(a,b:IN STD_LOGIC, y:OUT STD_LOGIC); END COMPONENT; BEGIN U1: NOT1 PORT MAP (se

54、l,y1) U2: AND2 PORT MAP (d0,y1,y2) U3: AND2 PORT MAP (d1,sel,y3) U4: OR2 PORT MAP (y2,y3,y) END mux_2;,122,2020/9/2,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux IS PORT (d0,d1,sel: IN STD_LOGIC; f: OUT STD_LOGIC); END mux; ARCHITECTURE beha OF mux IS BEGIN PROCESS(d0,d1,sel) BEGIN IF (sel=0

55、) THEN f=d0; ELSE f=d1; END IF; END PROCESS; END beha;,行為描述方式的2選1數(shù)據(jù)選擇器,主要采用IF、CASE、WAIT、LOOP等高級語言,說明電路的功能和行為,123,2020/9/2,實際程序中往往幾種描述方式混合使用, 初學(xué)階段不必過于在意所采用的描述方式,知道有這種說法即可。,124,2020/9/2,章節(jié)目錄,3.1 硬件描述語言概述 3.2 VHDL語言程序結(jié)構(gòu) 3.3 VHDL語法基礎(chǔ) 3.4 VHDL常用語句 3.5 組合電路的VHDL描述 3.6 時序電路的VHDL描述,125,2020/9/2,3.5組合電路的VHDL

56、描述,1.,【例4-3】判定電路的VHDL程序。(P123),本例使用了條件賦值語句,同學(xué)們可以嘗試用CASE語句實現(xiàn),126,2020/9/2,3.5組合電路的VHDL描述,綜合結(jié)果,127,2020/9/2,3.5組合電路的VHDL描述,2.,【例】4-2線優(yōu)先編碼器的VHDL程序。(P126),本例使用了 if then elsif then語句,利用IF條件的優(yōu)先級很方便地實現(xiàn)了優(yōu)先編碼的功能,如果用CASE語句則只能實現(xiàn)普通編碼器的功能,Then后面的順序語句用分號隔開,128,2020/9/2,條件不完整,缺少最后一條ELSE 綜合時會綜合出寄存器,RTL圖說明了這一點。,【程序存

57、在的問題】,在END IF前加一句: ELSE y=00;eo=0; 就不會產(chǎn)生寄存器,129,2020/9/2,3.5組合電路的VHDL描述,3.,【例】74138的VHDL程序。 (P130) 使用if then else、case 語句),130,2020/9/2,3.5組合電路的VHDL描述,3.,【例】74138的VHDL程序。 (P130) 使用if then else、case 語句),131,2020/9/2,3.5組合電路的VHDL描述,4.,【例】7448的VHDL程序。 (P135) (if then elsif then else語句),132,2020/9/2,條件不

58、完整,缺少最后一條ELSE 綜合時會綜合出寄存器, RTL圖說明了這一點。,【程序存在的問題】,133,2020/9/2,綜合電路局部,寄存器,【修改】,在END IF前加一句: ELSE segout = 0000000; rbo = 1; 就不會產(chǎn)生寄存器,134,2020/9/2,3.5組合電路的VHDL描述,5.,【例】1-4數(shù)據(jù)分配器的VHDL程序。 (P136) (if then elsif then else語句),該程序仍然出現(xiàn)條件不完整的情況,結(jié)果會綜合出寄存器。修改程序,在END IF前加ELSE w(0) = 0; w(1)= 0; w(2)= 0; w(3)=0;則寄存器消失。,135,202

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論