第5章 基本邏輯電路的VHDL設(shè)計.ppt_第1頁
第5章 基本邏輯電路的VHDL設(shè)計.ppt_第2頁
第5章 基本邏輯電路的VHDL設(shè)計.ppt_第3頁
第5章 基本邏輯電路的VHDL設(shè)計.ppt_第4頁
第5章 基本邏輯電路的VHDL設(shè)計.ppt_第5頁
已閱讀5頁,還剩95頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第5章 基本邏輯電路的VHDL設(shè)計,【學(xué)習(xí)目標】 通過本章學(xué)習(xí)應(yīng)掌握組合邏輯電路設(shè)計,主要有基本門電路、編碼器、譯碼器、加法器、三態(tài)輸出電路等組合邏輯電路設(shè)計技術(shù);時序邏輯電路設(shè)計,主要有觸發(fā)器、移位寄存器、計數(shù)器等時序邏輯電路設(shè)計技術(shù);狀態(tài)機基本概念、狀態(tài)機設(shè)計流程、一般有限狀態(tài)機的VHDL設(shè)計、Moore型有限狀態(tài)機設(shè)計、Mealy型有限狀態(tài)機設(shè)計、有限狀態(tài)機的編碼等。,5.1 組合邏輯電路設(shè)計,5.1.1 基本門電路設(shè)計 1與非門電路 與非門電路包括二輸入與非門、三輸入與非門、四輸入與非門和多輸入與非門等。下面介紹二輸入與非門電路的設(shè)計方法,其他的設(shè)計方法與二輸入與非門的設(shè)計方法類似,在

2、這里不作更多論述。二輸入與非門電路的邏輯方程式為Y= ,邏輯真值表見表5.1,二輸入與非門的電路符號如圖5.1所示,表5.1 二輸入與非門的真值表,圖5.1 二輸入與非門的電路符號,5.1 組合邏輯電路設(shè)計,5.1.1 基本門電路設(shè)計 1與非門電路 (1)VHDL設(shè)計方法 二輸入與非門電路的邏輯真值表見表5.1,二輸入與非門的電路符號如圖5.1所示。,5.1.1 基本門電路設(shè)計 1與非門電路 (1)VHDL設(shè)計方法 【例5.1】二輸入與非門的VHDL描述方法一: LIBRARY ieee; USE ieee.STD_LOGIC_1164.ALL; ENTITY nand_2 IS PORT (

3、a, b: IN STD_LOGIC; y: OUT STD_LOGIC); END; ARCHITECTURE one OF nand_2 IS BEGIN y=a nand b; END;,5.1 組合邏輯電路設(shè)計,5.1.1 基本門電路設(shè)計 1與非門電路 (1)VHDL設(shè)計方法 【例5.2】二輸入與非門的VHDL描述方法二: LIBRARY ieee; USE ieee.STD_LOGIC_1164.ALL; ENTITY nand_2 IS PORT (a, b: INSTD_LOGIC; y: OUTSTD_LOGIC); END; ARCHITECTURE one OF nand_

4、2 IS SIGNAL ab: STD_LOGIC_VECTOR (1 DOWNTO 0); BEGIN ab=a -接下頁,5.1 組合邏輯電路設(shè)計,5.1.1 基本門電路設(shè)計 1與非門電路 -接上頁 process (ab) is begin case ab is when “00”=y” 相當(dāng)于THEN或于是 when 01=yyyy=null; end case; end process; end;,5.1 組合邏輯電路設(shè)計,(a) 用nand實現(xiàn)的二輸入 與非門的RTL電路,(b)用 case語句實現(xiàn)的二輸入 與非門的RTL電路,圖5.2 二輸入與非門RTL電路,5.1 組合邏輯電路

5、設(shè)計,5.1.1 基本門電路設(shè)計 1與非門電路 (1)VHDL設(shè)計方法,二輸入與非門的功能仿真結(jié)果如圖5.3所示,觀察波形可知,輸入為a與b,輸出為y,且其邏輯關(guān)系滿足二輸入與非門真值表的要求。,圖5.3 二輸入與非門的功能仿真圖,5.1 組合邏輯電路設(shè)計,5.1.1 基本門電路設(shè)計 1與非門電路 (2)仿真結(jié)果,5.1.1 基本門電路設(shè)計 2 基本邏輯門電路的VHDL描述 【例5.3】基本邏輯門電路的VHDL描述 LIBRARY ieee; USE ieee.STD_LOGIC_1164.ALL; ENTITY gate IS PORT (a, b: IN STD_LOGIC; y1,y2,

6、y3,y4,y5,y6: OUT STD_LOGIC); END; ARCHITECTURE one OF gate IS BEGIN y1=a and b; -構(gòu)成與門 y2=a or b; -構(gòu)成或門 y3= not a ; -構(gòu)成非門 y4=a nand b; -構(gòu)成與非門 y5=a nor b; -構(gòu)成異或門 y6=not(a xor b); -構(gòu)成異或非門 END;,5.1 組合邏輯電路設(shè)計,5.1.2 編碼器設(shè)計 在數(shù)字系統(tǒng)中,常常需要將某信息變換為某一特定的代碼。把二進制碼按一定的規(guī)律進行編排,使每組代碼具有特定的含義,稱為編碼。具有編碼功能的邏輯電路稱為編碼器。 編碼器是將 2

7、N 個分立的信息代碼以N個二進制碼來表示。,5.1 組合邏輯電路設(shè)計,5.1.2 編碼器設(shè)計 1. 8線-3線編碼器的VHDL描述 8線-3線編碼真值表見表5.2所示。 表5.2 8線-3線編碼真值表,5.1 組合邏輯電路設(shè)計,【例5.4】 8線-3線編碼器的VHDL設(shè)計 LIBRARY ieee; USE ieee.STD_LOGIC_1164.ALL; ENTITY encoder8_3 IS PORT (i: INSTD_LOGIC_VECTOR (7 downto 0) ; y: OUT STD_LOGIC_VECTOR(2 downto 0); END; ARCHITECTURE o

8、ne OF encoder8_3 IS BEGIN Process (i) is begin case i is -接下頁,5.1 組合邏輯電路設(shè)計,5.1.2 編碼器設(shè)計 1. 8線-3線編碼器的VHDL描述,when “00000001”=yyyyyyyyy=000; end case; end process; end process; end;,5.1 組合邏輯電路設(shè)計,5.1.2 編碼器設(shè)計 1. 8線-3線編碼器的VHDL描述,本例中,運用了case語句完成了編碼器內(nèi)部邏輯結(jié)構(gòu)設(shè)計,其RTL電路圖如圖5.4所示。,圖5.4 8線-3線編碼器的RTL電路圖,5.1 組合邏輯電路設(shè)計,

9、5.1.2 編碼器設(shè)計 1. 8線-3線編碼器的VHDL描述,2. 8線-3線編碼器的功能仿真 8線-3線編碼器的功能仿真結(jié)果如圖5.5所示。,圖5.5 8線-3線編碼器功能仿真波形圖,5.1 組合邏輯電路設(shè)計,5.1.2 編碼器設(shè)計,5.1.3 譯碼器設(shè)計 譯碼是編碼的逆過程,它的功能是將具有特定含義的二進制碼進行辨別,并轉(zhuǎn)換成控制信號。具有譯碼功能的邏輯電路稱為譯碼器。,5.1 組合邏輯電路設(shè)計,5.1.3 譯碼器設(shè)計1. 2線- 4線譯碼器,2線-4線譯碼器的真值表見表5.3所示。,表5.3 2線-4線譯碼器的真值表,5.1 組合邏輯電路設(shè)計,(1)2線-4線譯碼器的VHDL設(shè)計 lib

10、rary ieee; -【例5.5】 2線-4線譯碼器的VHDL代碼 use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity decode_24 is port (a: in std_logic_vector(1 downto 0); z: out std_logic_vector(3 downto 0); end ; architecture str of decode_24 is Begin with a select z=0001 when 00, 0010 when 01, 0100 when 10, 1

11、000 when 11, XXXX when others; end;,5.1 組合邏輯電路設(shè)計,5.1.3 譯碼器設(shè)計1. 2線- 4線譯碼器,圖5.6 2線-4線譯碼器的RTL電路,5.1 組合邏輯電路設(shè)計,5.1.3 譯碼器設(shè)計1. 2線- 4線譯碼器,(2)2線-4線譯碼器的仿真波形 如圖5.7所示,當(dāng)輸入使“00”、“01”、“10”、“11”時分別輸出“0001”、“0010”、“0100”和“1000”,這與真值表中顯示的邏輯關(guān)系一致。,圖5.7 2線-4線譯碼器的仿真波形圖,5.1 組合邏輯電路設(shè)計,5.1.3 譯碼器設(shè)計1. 2線- 4線譯碼器,7段數(shù)碼顯示譯碼電路是一個組合

12、邏輯電路,通常的小規(guī)模專用集成IC,如74系列或4000系列的器件只能作十進制BCD碼譯碼,然而數(shù)字系統(tǒng)中的數(shù)據(jù)處理和運算都是2進制的,所以輸出表達都是16進制的,為了滿足16進制數(shù)的譯碼顯示,最方便的方法就是利用譯碼程序在FPGA/CPLD中來實現(xiàn)。,5.1 組合邏輯電路設(shè)計,5.1.3 譯碼器設(shè)計 2. 7段數(shù)碼顯示譯碼器設(shè)計,【例5.6】 7段BCD譯碼顯示器的VHDL描述 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY LED_SEG IS PORT (A: IN STD_LOGIC_VECTOR (3 DOWNTO 0); LED:

13、 OUT STD_LOGIC_VECTOR (6 DOWNTO 0) ) ; END; ARCHITECTURE one OF LED_SEG IS BEGIN PROCESS ( A ) BEGIN,5.1 組合邏輯電路設(shè)計,5.1.3 譯碼器設(shè)計 2. 7段數(shù)碼顯示譯碼器設(shè)計,CASE A IS WHEN 0000 = LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED NULL ; END CASE; END PROCESS; END;,5.1 組合邏輯電路設(shè)計,5.1.3 譯碼器設(shè)計 2. 7段數(shù)碼顯示譯碼器設(shè)

14、計,例5.6中輸出信號LED 的7位分別接數(shù)碼管的7個段,高位在左,低位在右。例如當(dāng)LED輸出為“1101111”時,數(shù)碼管的7個段:g、f、e、d、c、b、a分別接1、1、0、1、1、1、1;接有高電平的段點亮,低電平的段不亮,于是數(shù)碼管顯示“9”,其功能仿真如圖5.8所示。,圖5.8 7段數(shù)碼顯示譯碼電路功能仿真波形,5.1 組合邏輯電路設(shè)計,5.1.3 譯碼器設(shè)計 2. 7段數(shù)碼顯示譯碼器設(shè)計,5.1.4 加法器設(shè)計1.四位二進制全加器的VHDL,5.1 組合邏輯電路設(shè)計,【例5.7】 四位二進制全加器的VHDL描述 LIBRARY ieee; USE ieee.STD_LOGIC_11

15、64.ALL; USE ieee.STD_LOGIC_unsigned.ALL; ENTITY adder_4bit IS PORT (a, b: IN STD_LOGIC_VECTOR(3 DOWNTO 0); ci: IN STD_LOGIC; s: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); co: OUT STD_LOGIC); END; ARCHITECTURE one OF adder_4bit IS SIGNAL temp: STD_LOGIC_VECTOR (4 DOWNTO 0); BEGIN temp=(0,圖5.9 4位二進制全加器的RTL電路圖,

16、5.1 組合邏輯電路設(shè)計,5.1.4 加法器設(shè)計,2 4位全加器的仿真結(jié)果 例5.7中的4位全加器的功能仿真結(jié)果如圖5-10所示,其時序仿真結(jié)果如圖5-17所示。從波形中可以看出, 當(dāng)a、b和ci取不同的值時,執(zhí)行a+b+ci操作后,和數(shù)s與進位co均滿足4位全加器的邏輯功能要求。,5.10 4位二進制全加器的功能仿真結(jié)果,5.1 組合邏輯電路設(shè)計,5.1.4 加法器設(shè)計,5.1.5 三態(tài)門與雙向緩沖電路設(shè)計 三態(tài)門,是指邏輯門的輸出除有高、低電平兩種狀態(tài)外,還有第三種狀態(tài)高阻狀態(tài)的門電路,高阻態(tài)相當(dāng)于隔斷狀態(tài)。三態(tài)門都有一個EN為控制使能端,來控制門電路的通斷。具備這三種狀態(tài)的器件就叫做三態(tài)

17、(門、總線、.)。VHDL設(shè)計中,如果用STD_LOGIC數(shù)據(jù)類型的Z對一個變量賦值,即會引入三態(tài)門,并在使能信號的控制下可使其輸出呈高阻態(tài),這等效于使三態(tài)門禁止輸出。,5.1 組合邏輯電路設(shè)計,5.1.5 三態(tài)門與雙向緩沖電路設(shè)計 1三態(tài)門設(shè)計 【例5.8】4位三態(tài)控制門電路的VHDL描述 LIBRARY ieee; USE ieee.STD_LOGIC_1164.ALL; USE ieee.STD_LOGIC_unsigned.ALL; ENTITY tri_gate IS PORT(en : IN STD_LOGIC; din: IN STD_LOGIC_VECTOR(3 DOWNTO

18、0); dout: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); END; ARCHITECTURE one OF tri_gate IS BEGIN PROCESS (en ,din) BEGIN IF (en=1) then dout=din; else dout=ZZZZ; end if; end process; END;,5.1 組合邏輯電路設(shè)計,圖5.11 三態(tài)門電路的RTL電路,5.1 組合邏輯電路設(shè)計,5.1.5 三態(tài)門與雙向緩沖電路設(shè)計 1三態(tài)門設(shè)計,圖5.12 三態(tài)門電路的功能仿真圖,5.1 組合邏輯電路設(shè)計,5.1.5 三態(tài)門與雙向緩沖電路設(shè)計 1三

19、態(tài)門設(shè)計,2. 雙向總線緩沖器 雙向總線緩沖器用于對數(shù)據(jù)總線的驅(qū)動和緩沖,典型雙向總線緩沖電路圖如圖5.13所示。 一般雙向總線緩沖器的模式為:兩個數(shù)據(jù)端口a、 b,一個使能端en,一個方向控制端dr。其操作行為真值表如表5.4所示。,5.1 組合邏輯電路設(shè)計,5.1.5 三態(tài)門與雙向緩沖電路設(shè)計,2. 雙向總線緩沖器 ain=a; a=aout;,圖5.13 雙向總線驅(qū)動電路,如果A為輸入端口,即ain=a時,aout應(yīng)為“ZZZZZZZZ”,表5.4雙向總線驅(qū)動電路真值表,5.1 組合邏輯電路設(shè)計,5.1.5 三態(tài)門與雙向緩沖電路設(shè)計,2. 雙向總線緩沖器 【例5.9】 雙向總線緩沖器的V

20、HDL描述 library ieee; use ieee.std_logic_1164.all; ENTITY DUB_GATE IS PORT ( a,b: INOUT STD_LOGIC_VECTOR(7 DOWNTO 0); en: IN STD_LOGIC; dr: INOUT STD_LOGIC); END DUB_GATE; ARCHITECTURE a OF DUB_GATE IS SIGNAL abuf, bbuf: STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN P1: PROCESS (a, dr, en) BEGIN if (en=0) and (

21、dr=1) then bbuf = a; -接下頁,5.1 組合邏輯電路設(shè)計,5.1.5 三態(tài)門與雙向緩沖電路設(shè)計,else - 接上頁 bbuf=ZZZZZZZZ; end if; b=bbuf; END PROCESS; P2: PROCESS (b,dr,en) BEGIN if (en=0) and (dr=0) then abuf = b; else abuf=ZZZZZZZZ; end if; a=abuf; END PROCESS; END a;,5.1 組合邏輯電路設(shè)計,5.1.5 三態(tài)門與雙向緩沖電路設(shè)計,圖5.14 雙向總線緩沖器的RTL電路圖,5.1 組合邏輯電路設(shè)計,5

22、.1.5 三態(tài)門與雙向緩沖電路設(shè)計 雙向總線緩沖器的RTL電路圖如圖5.14所示。,5.2 時序邏輯電路設(shè)計,5.2.1 觸發(fā)器設(shè)計 1.RS觸發(fā)器設(shè)計 RS觸發(fā)器由兩個與非門(或者或非門)的輸入和輸出交叉連接而成,如圖5.15所示, 真值表見表5.5。,圖5.15 RS觸發(fā)器原理圖,表5.5 RS觸發(fā)器真值表,5.2.1 觸發(fā)器設(shè)計 1.RS觸發(fā)器設(shè)計 【例5.10】 RS觸發(fā)器的VHDL程序代碼 LIBRARY ieee; USE ieee.STD_LOGIC_1164.ALL; ENTITY RSFF IS PORT(R, S: IN STD_LOGIC; Q, QB: OUT STD_

23、LOGIC); END; ARCHITECTURE one OF RSFF IS SIGNAL Q_TEMP,QB_TEMP: STD_LOGIC; BEGIN Q_TEMP=S NAND QB_TEMP; QB_TEMP=R NAND Q_TEMP; Q=Q_TEMP; QB=QB_TEMP; END;,5.2 時序邏輯電路設(shè)計,圖5.16 RS觸發(fā)器的RTL電路,圖5.17 RS觸發(fā)器功能仿真波形圖,5.2 時序邏輯電路設(shè)計,5.2.1 觸發(fā)器設(shè)計 1.RS觸發(fā)器設(shè)計,5.2.1 觸發(fā)器設(shè)計 2. JK觸發(fā)器設(shè)計 JK觸發(fā)器的狀態(tài)方程是:Q_tmp=j +q_temp。用VHDL邏輯表達式

24、對JK觸發(fā)器進行描述。其真值表見表5.6所示。,表5.6 JK觸發(fā)器真值表,5.2 時序邏輯電路設(shè)計,5.2.1 觸發(fā)器設(shè)計 【例5.11】 JK觸發(fā)器VHDL程序 library ieee; use ieee.std_logic_1164.all; entity jkff1 is port (j, k, clk: in std_logic; q: out std_logic); end; architecture one of jkff1 is signal q_temp :std_logic; begin p1:process begin wait until(clkevent and c

25、lk=1); q_temp=(j and (not q_temp) or (not k) and q_temp); end process; q=q_temp; end;,5.2 時序邏輯電路設(shè)計,圖5.18 JK觸發(fā)器的RTL電路,圖5.19 JK觸發(fā)器的功能仿真圖,5.2 時序邏輯電路設(shè)計,5.2.1 觸發(fā)器設(shè)計 2. JK觸發(fā)器設(shè)計,5.2.2 移位寄存器設(shè)計 移位寄存器是一個具有移位功能的寄存器,是指寄存器中所存的代碼能夠在移位脈沖的作用下依次左移或右移。既能左移又能右移的稱為雙向移位寄存器,只需要改變左、右移的控制信號便可實現(xiàn)雙向移位要求。根據(jù)移位寄存器存取信息的方式不同分為:串入串

26、出、串入并出、并入串出、并入并出四種形式。,5.2 時序邏輯電路設(shè)計,5.2.2 移位寄存器設(shè)計 【例5.12】8位右移移位寄存器的VHDL描述 LIBRARY ieee; USE ieee.STD_LOGIC_1164.ALL; ENTITY SHFRT IS PORT (CLK, LOAD: IN STD_LOGIC; DIN: IN STD_LOGIC_VECTOR (7 DOWNTO 0); QB: OUT STD_LOGIC); END; ARCHITECTURE ONE OF SHFRT IS BEGIN -接下頁,5.2 時序邏輯電路設(shè)計,PROCESS (CLK, LOAD)

27、-接上頁 VARIABLE REG8:STD_LOGIC_VECTOR (7 DOWNTO 0); BEGIN IF CLKEVENT AND CLK=1 THEN IF LOAD=1 THEN REG8:=DIN; ELSE REG8 (6 DOWNTO 0):=REG8(7 DOWNTO 1); END IF; END IF; QB=REG8 (0); END PROCESS; END;,5.2 時序邏輯電路設(shè)計,5.2.2 移位寄存器設(shè)計,圖5.20 移位寄存器的RTL電路圖,圖5.21 移位寄存器的功能仿真波形圖(十六進制表示形式),5.2 時序邏輯電路設(shè)計,5.2.2 移位寄存器設(shè)計

28、,5.2.3計數(shù)器設(shè)計,1.十六進制加法計數(shù)器設(shè)計 【例5.13】十六進制加法計數(shù)器的VHDL描述 LIBRARY ieee; USE ieee.STD_LOGIC_1164.ALL; USE ieee. STD_LOGIC_unsigned.ALL; ENTITY CNT10 IS PORT(CLK,RST,EN:IN STD_LOGIC; CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); COUT:OUT STD_LOGIC); END; ARCHITECTURE one OF CNT16 IS BEGIN -接下頁,5.2 時序邏輯電路設(shè)計,PROCESS (CL

29、K, RST, EN) -接上頁 VARIABLE CQI: STD_LOGIC_VECTOR (3 DOWNTO 0); BEGIN IF RST=1 THEN CQI:=(OTHERS=0); -計數(shù)器高電平復(fù)位 ELSIF CLKEVENT AND CLK=1 THEN IF EN=1 THEN -計數(shù)器控制端高電平有效 IF CQI0); END IF; END IF; END IF; IF CQI=15 THEN COUT=1; -計數(shù)滿16產(chǎn)生一個進位 ELSE COUT=0; END IF; CQ=CQI; END PROCESS; END;,5.2 時序邏輯電路設(shè)計,5.2.3

30、計數(shù)器設(shè)計,例5.13描述的是一個帶有異步復(fù)位和同步時鐘使能的十六進制加法計數(shù)器。所謂同步或異步都是相對于時鐘而言的。依賴時鐘而有效的信號稱為同步信號,否則稱為異步信號。 例5.13中的進程語句中含有兩個獨立的IF語句,第個IF語句是不完整性條件語句,因而將產(chǎn)生計數(shù)器時序電路;第二個IF語句產(chǎn)生一個純組合邏輯的多路選擇器。從結(jié)構(gòu)上講,更一般的表述是將這兩個獨立的IF語句用兩個獨立的進程語句來表達,一個為時序進程(或稱時鐘進程),另一個為組合進程。,5.2 時序邏輯電路設(shè)計,5.2.3計數(shù)器設(shè)計,另外,不完整條件語句是指在條件語句中,沒有對所有可能發(fā)生的條件給出對應(yīng)的處理方式。對于這種語言現(xiàn)象,

31、VHDL綜合器將理解為當(dāng)不滿足條件時,不能執(zhí)行新的賦值,即應(yīng)保持原值不變,這就意味著必須引進時序元件來保存的原值,直到滿足IF語句的判斷條件后才能更新存儲器中的值。 利用這種不完整的條件語句的描述引進寄存器元件,從而構(gòu)成時序電路的方式是VHDL描述時序電路最重要的途徑,通常,完整的條件語句只能構(gòu)成組合邏輯電路。,5.2 時序邏輯電路設(shè)計,5.2.3計數(shù)器設(shè)計,圖5.22 十六進制加法計數(shù)器的RTL電路圖,5.2 時序邏輯電路設(shè)計,5.2.3計數(shù)器設(shè)計,圖5.23 十六進制加法計數(shù)器的功能仿真圖,5.2 時序邏輯電路設(shè)計,5.2.3計數(shù)器設(shè)計,2.十六進制減法計數(shù)器設(shè)計 【例5.14】十六進制減

32、法計數(shù)器VHDL程序 LIBRARY ieee; USE ieee.STD_LOGIC_1164.ALL; USE ieee.STD_LOGIC_unsigned.ALL; ENTITY CNT16 IS PORT(CLK,RST,EN:IN STD_LOGIC; CQ: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); END; ARCHITECTURE one OF CNT16 IS BEGIN -接下頁,5.2 時序邏輯電路設(shè)計,5.2.3計數(shù)器設(shè)計,PROCESS (CLK, RST, EN) -接上頁 VARIABLE CQI: STD_LOGIC_VECTOR(3

33、 DOWNTO 0); BEGIN IF RST=1 THEN CQI: =1111; ELSIF CLKEVENT AND CLK=1 THEN IF EN=1 THEN IF CQI0 THEN CQI: =CQI-1; ELSE CQI: =1111; END IF; END IF; END IF; CQ=CQI; END PROCESS; END;,5.2 時序邏輯電路設(shè)計,十六進制減法計數(shù)器的仿真結(jié)果如圖5.24所示。,圖5.24 十六進制減法計數(shù)器功能仿真波形圖,5.2 時序邏輯電路設(shè)計,5.2.3計數(shù)器設(shè)計,3.異步計數(shù)器設(shè)計 異步計數(shù)器,它的下一位計數(shù)器的輸出作為上一位計數(shù)器的

34、時鐘信號,這樣一級一級串行連接起來就構(gòu)成了一個異步計數(shù)器。 用VHDL語言描述異步邏輯電路時,由于一個時鐘進程只能構(gòu)成對應(yīng)單一時鐘信號的時序電路,如果在進程中需要構(gòu)成多觸發(fā)器時序電路,也只能產(chǎn)生對應(yīng)某個單一時鐘的同步時序邏輯,異步時序邏輯一般采取多個時鐘進程來構(gòu)成。,5.2 時序邏輯電路設(shè)計,5.2.3計數(shù)器設(shè)計,【例5.15】4個觸發(fā)器構(gòu)成的異步計數(shù)器的VHDL底層模塊程序 library ieee; use ieee.std_logic_1164.all; entity dffr is port (clk, clr, d:in std_logic; q, qb: out std_logic

35、); end; architecture str of dffr is signal q_in:std_logic; Begin -接下頁,5.2 時序邏輯電路設(shè)計,5.2.3計數(shù)器設(shè)計,qb=not(q_in); -接上頁 q=q_in; process (clk) begin if (clr=1) then q_in=0; elsif (clkevent and clk=1) then q_in=d; end if; end process; end;,5.2 時序邏輯電路設(shè)計,5.2.3計數(shù)器設(shè)計,圖5.25 異步計數(shù)器的底層模塊的RTL電路圖,5.2 時序邏輯電路設(shè)計,5.2.3計數(shù)器

36、設(shè)計,【例5.16】 4個觸發(fā)器構(gòu)成的異步計數(shù)器的頂層VHDL描述 library ieee; use ieee.std_logic_1164.all; entity rplcont is port(clk,clr:in std_logic; count:out std_logic_vector(3 downto 0); end; architecture str of rplcont is signal count_in_bar:std_logic_vector(4 downto 0); -接下頁,5.2 時序邏輯電路設(shè)計,5.2.3計數(shù)器設(shè)計,component dffr is -接上頁

37、port(clk,clr,d:in std_logic; q,qb:out std_logic); end component; begin count_in_bar(0)count_in_bar(i), clr=clr,d=count_in_bar(i+1), q=count(i),qb=count_in_bar(i+1); end generate; end;,5.2 時序邏輯電路設(shè)計,5.2.3計數(shù)器設(shè)計,圖5.26 4個觸發(fā)器構(gòu)成的異步計數(shù)器的RTL電路圖,5.2 時序邏輯電路設(shè)計,5.2.3計數(shù)器設(shè)計,5.3.1 狀態(tài)機概述 1.什么是狀態(tài)機 通俗地說,狀態(tài)機就是事物存在狀態(tài)的一種綜

38、合描述。 比如,一個單向路口的一盞紅綠燈,它有“亮紅燈”、“亮綠燈”和“亮黃燈”3種狀態(tài)。在不同情況下,3種狀態(tài)可以互相轉(zhuǎn)換。轉(zhuǎn)換的條件可以是經(jīng)過多少時間,比如經(jīng)過30秒鐘由“亮紅燈”狀態(tài)變?yōu)椤傲辆G燈”狀態(tài);也可以是特殊條件,比如有緊急事件,不論處于什么狀態(tài)都將轉(zhuǎn)變?yōu)椤傲良t燈”狀態(tài)。而所謂的狀態(tài)機,就是對這盞紅綠燈3種狀態(tài)的綜合描述,說明任意兩個狀態(tài)之間的轉(zhuǎn)變條件。,5.3 狀態(tài)機的設(shè)計,狀態(tài)機是由狀態(tài)寄存器和組合邏輯電路構(gòu)成的,能夠根據(jù)控制信號按照預(yù)先設(shè)定的狀態(tài)進行狀態(tài)轉(zhuǎn)移,是協(xié)調(diào)相關(guān)信號動作、完成特定操作的控制中心。 狀態(tài)機可歸納為4個要素:即現(xiàn)態(tài)、條件、動作及次態(tài)。這樣的歸納,主要是出于

39、對狀態(tài)機的內(nèi)在因果關(guān)系的考慮?!艾F(xiàn)態(tài)”和“條件”是因,“動作”和“次態(tài)”是果。,5.3 狀態(tài)機的設(shè)計,5.3.1 狀態(tài)機概述 1.什么是狀態(tài)機,現(xiàn)態(tài):是指當(dāng)前所處的狀態(tài)。 條件:又稱為“事件”。當(dāng)一個條件被滿足,將會觸發(fā)一個動作,或者執(zhí)行一次狀態(tài)的遷移。 動作:條件滿足后執(zhí)行的動作。動作執(zhí)行完畢后,可以遷移到新的狀態(tài),也可以仍舊保持原狀態(tài)。動作不是必需的,當(dāng)條件滿足后,也可以不執(zhí)行任何動作,直接遷移到新狀態(tài)。 次態(tài):條件滿足后要遷往的新狀態(tài)?!按螒B(tài)”是相對于“現(xiàn)態(tài)”而言的,“次態(tài)”一旦被激活,就轉(zhuǎn)變成新的“現(xiàn)態(tài)”了。,5.3 狀態(tài)機的設(shè)計,5.3.1 狀態(tài)機概述 1.什么是狀態(tài)機,根據(jù)時序輸出

40、信號產(chǎn)生機理的不同,狀態(tài)機可以分成兩類:摩爾(Moore)型狀態(tài)機和米勒(Mealy)型狀態(tài)機。 兩種狀態(tài)機的區(qū)別: 前者的輸出僅是當(dāng)前狀態(tài)的函數(shù),后著的輸出 是當(dāng)前狀態(tài)和輸入信號的函數(shù)。 米勒型狀態(tài)機輸出的變化先于摩爾型。,5.3 狀態(tài)機的設(shè)計,5.3.1 狀態(tài)機概述 1.什么是狀態(tài)機,所有的狀態(tài)均可表達為CASE WHEN結(jié)構(gòu)中的一條CASE語句,而狀態(tài)的轉(zhuǎn)移則通過IF_THEN_ELSE語句實現(xiàn)。 應(yīng)用VHDL設(shè)計有限狀態(tài)機的流程如圖5.27所示。,5.3 狀態(tài)機的設(shè)計,5.3.1 狀態(tài)機概述 2. 有限狀態(tài)機的設(shè)計流程,圖5.27 VHDL設(shè)計有限狀態(tài)機的流程圖,(1)選擇狀態(tài)機類型

41、(2)建立狀態(tài)表或者畫出狀態(tài)圖 (3)根據(jù)狀態(tài)表或狀態(tài)圖,構(gòu)建狀態(tài)機的VHDL模型 (4)利用EDA工具進行仿真、驗證,5.3 狀態(tài)機的設(shè)計,5.3.1 狀態(tài)機概述 2. 有限狀態(tài)機的設(shè)計流程,5.3.2 一般有限狀態(tài)機的VHDL設(shè)計,一般和最常用的狀態(tài)機通常包含: 說明部分 主控時序進程 主控組合進程 輔助進程幾個部分,5.3 狀態(tài)機的設(shè)計,1說明部分 使用TYPE語句定義新的數(shù)據(jù)類型,此數(shù)據(jù)類型為枚舉型, 其元素通常都用狀態(tài)機的狀態(tài)名來定義; 狀態(tài)變量(如現(xiàn)態(tài)和次態(tài))應(yīng)定義為信號,便于信 息傳遞; 并將狀態(tài)變量的數(shù)據(jù)類型定義為含有既定狀態(tài)元素的新定 義的數(shù)據(jù)類型; 說明部分一般放在結(jié)構(gòu)體的

42、ARCHITECTURE和BEGIN之 間。,5.3 狀態(tài)機的設(shè)計,5.3.2 一般有限狀態(tài)機的VHDL設(shè)計,2主控時序進程 主控時序進程是指負責(zé)狀態(tài)機運轉(zhuǎn)和在時鐘驅(qū)動下負責(zé)狀態(tài) 轉(zhuǎn)換的進程; 狀態(tài)機是隨外部時鐘信號、以同步時序方式工作的; 狀態(tài)機向下一狀態(tài)(包括再次進入本狀態(tài))轉(zhuǎn)換的實現(xiàn)僅僅取 決于時鐘信號的到來。,5.3 狀態(tài)機的設(shè)計,5.3.2 一般有限狀態(tài)機的VHDL設(shè)計,3. 主控組合進程 主控組合進程的任務(wù)是根據(jù)外部輸入的控制信號 (包括來自狀態(tài)機外部的信號和來自狀態(tài)機內(nèi)部其他非主控的組合或時序進程的信號),或/和當(dāng)前狀態(tài)的狀態(tài)值確定下一狀態(tài)(next_state)的取向,即nex

43、t_state的取值內(nèi)容; 確定對外輸出或?qū)?nèi)部其他組合或時序進程輸出控制信號的內(nèi)容。,5.3 狀態(tài)機的設(shè)計,5.3.2 一般有限狀態(tài)機的VHDL設(shè)計,5.3 狀態(tài)機的設(shè)計,4輔助進程 輔助進程用于配合狀態(tài)機工作的組合進程或時序進程。例如為了完成某種算法的進程,或用于配合狀態(tài)機工作的其他時序進程,或為了穩(wěn)定輸出設(shè)置的數(shù)據(jù)鎖存器等。,5.3.2 一般有限狀態(tài)機的VHDL設(shè)計,圖5.28 一個狀態(tài)機的結(jié)構(gòu)框圖,5.3 狀態(tài)機的設(shè)計,5.3.2 一般有限狀態(tài)機的VHDL設(shè)計,【例5.17】一般有限狀態(tài)機的VHDL設(shè)計,利用狀態(tài)機設(shè)計方法輸出一個方波信號。 LIBRARY ieee; USE ieee

44、.STD_LOGIC_1164.ALL; ENTITY A_EXAMPLE IS PORT (clk,reset:IN STD_LOGIC; output:OUT STD_LOGIC); END; ARCHITECTURE ONE OF A_EXAMPLE IS TYPE STATE_TYPE IS(S0,S1,S2,S3); -狀態(tài)機說明部分 SIGNAL state: STATE_TYPE; BEGIN -接下頁,5.3 狀態(tài)機的設(shè)計,5.3.2 一般有限狀態(tài)機的VHDL設(shè)計,-接上頁 REG:PROCESS(clk,reset) -狀態(tài)機主控時序進程 BEGIN IF reset=1 T

45、HEN state statestatestatestate=S0; END CASE; END IF; END PROCESS; -接下頁,5.3 狀態(tài)機的設(shè)計,5.3.2 一般有限狀態(tài)機的VHDL設(shè)計,-接上頁 COM:PROCESS(state) -狀態(tài)機主控組合進程 BEGIN CASE state IS WHEN S0=outputoutputoutputoutput=0; END CASE; END PROCESS; END;,5.3 狀態(tài)機的設(shè)計,5.3.2 一般有限狀態(tài)機的VHDL設(shè)計,圖5.29 狀態(tài)機設(shè)計輸出一個方波信號的RTL電路,圖5.30 利用一般狀態(tài)機設(shè)計方法實現(xiàn)的

46、方波信號,5.3 狀態(tài)機的設(shè)計,5.3.2 一般有限狀態(tài)機的VHDL設(shè)計,5.3.3摩爾(Moore)型狀態(tài)機設(shè)計,如圖5.31所示是摩爾型狀態(tài)機的結(jié)構(gòu)圖,圖中的輸出只與當(dāng)前的狀態(tài)有關(guān),而與當(dāng)前的輸入信號無關(guān)。 其狀態(tài)圖如圖5.32所示,摩爾狀態(tài)機的VHDL描述如例5.18所示。,圖5.31 摩爾型狀態(tài)機的結(jié)構(gòu)圖,5.3 狀態(tài)機的設(shè)計,圖5.32 摩爾型狀態(tài)機的狀態(tài)圖,5.3 狀態(tài)機的設(shè)計,5.3.3摩爾(Moore)型狀態(tài)機設(shè)計,【例5.18】摩爾狀態(tài)機的VHDL描述 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_

47、unsigned.all; use ieee.std_logic_arith.all; entity moore_state is port(clk,x_in,rst:in std_logic; key_en:out std_logic; y:out std_logic_vector(3 downto 0); end ; architecture str of moore_state is type state_type is (s1,s2,s3,s4); signal state:state_type; begin p1_state_p:process(clk,rst) Begin -接下頁

48、,5.3 狀態(tài)機的設(shè)計,5.3.3摩爾(Moore)型狀態(tài)機設(shè)計,if rst=1 then state if x_in=0 then state if x_in=1 then state if x_in=0 then state if x_in=1 then statestate=s1; end case; end if; -接下頁,5.3 狀態(tài)機的設(shè)計,5.3.3摩爾(Moore)型狀態(tài)機設(shè)計,end process; -接上頁 p2_state_p:process(state) begin case state is when s1=yyyynull; end case; end pro

49、cess; end;,5.3 狀態(tài)機的設(shè)計,5.3.3摩爾(Moore)型狀態(tài)機設(shè)計,圖5.33 摩爾型狀態(tài)機的RTL電路圖,RTL電路圖如圖5.33所示,仿真波形如圖5.34所示。,5.3 狀態(tài)機的設(shè)計,5.3.3摩爾(Moore)型狀態(tài)機設(shè)計,圖5.34 摩爾型狀態(tài)機的仿真波形,5.3.4 米勒(Mealy)型狀態(tài)機設(shè)計,如圖5.35所示是米勒型狀態(tài)機的結(jié)構(gòu)圖,圖中的輸出不僅與當(dāng)前狀態(tài)有關(guān),還與當(dāng)前輸入信號有關(guān)。米勒型狀態(tài)機的狀態(tài)圖如圖5.36所示。,圖5.35 米勒型狀態(tài)機的結(jié)構(gòu)圖,5.3 狀態(tài)機的設(shè)計,圖5.36 米勒型狀態(tài)機的狀態(tài)圖,5.3 狀態(tài)機的設(shè)計,5.3.4 米勒(Mealy

50、)型狀態(tài)機設(shè)計,米勒型狀態(tài)機的結(jié)構(gòu)體也由三部分組成:說明部分、時鐘同步的時序進程和組合進程。說明部分和時鐘完全類似于摩爾型狀態(tài)機,不同的只是組合進程。例5.19是實現(xiàn)米勒型狀態(tài)機的VHDL代碼。米勒型狀態(tài)機的RTL電路圖如圖5.37所示,仿真圖形如圖5.38所示。,【例5.19】米勒型狀態(tài)機的VHDL描述 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity mealy is port(clk,rst,x_in:in std_logic; key_en:out std_logic;

51、y:out std_logic_vector(3 downto 0); end; architecture str of mealy is type state_type is (s1,s2,s3,s4); signal state:state_type; begin state_p:process(clk,rst) begin -接下頁,5.3 狀態(tài)機的設(shè)計,5.3.4 米勒(Mealy)型狀態(tài)機設(shè)計,if rst=1 then state if x_in=0 then state if x_in=1 then state if x_in=0 then state if x_in=1 then statestate=s1; end case; end if; end process; -接下頁,5.3 狀態(tài)機的設(shè)計,5.3.4 米勒(M

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論