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

下載本文檔

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

文檔簡介

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

2、這里不作更多論述。二輸入與非門電路的邏輯方程式為Y= ,邏輯真值表見表5.1,二輸入與非門的電路符號如圖5.1所示,表5.1 二輸入與非門的真值表,圖5.1 二輸入與非門的電路符號,5.1 組合邏輯電路設(shè)計(jì),5.1.1 基本門電路設(shè)計(jì) 1與非門電路 (1)VHDL設(shè)計(jì)方法 二輸入與非門電路的邏輯真值表見表5.1,二輸入與非門的電路符號如圖5.1所示。,5.1.1 基本門電路設(shè)計(jì) 1與非門電路 (1)VHDL設(shè)計(jì)方法 【例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è)計(jì),5.1.1 基本門電路設(shè)計(jì) 1與非門電路 (1)VHDL設(shè)計(jì)方法 【例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è)計(jì),5.1.1 基本門電路設(shè)計(jì) 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è)計(jì),(a) 用nand實(shí)現(xiàn)的二輸入 與非門的RTL電路,(b)用 case語句實(shí)現(xiàn)的二輸入 與非門的RTL電路,圖5.2 二輸入與非門RTL電路,5.1 組合邏輯電路

5、設(shè)計(jì),5.1.1 基本門電路設(shè)計(jì) 1與非門電路 (1)VHDL設(shè)計(jì)方法,二輸入與非門的功能仿真結(jié)果如圖5.3所示,觀察波形可知,輸入為a與b,輸出為y,且其邏輯關(guān)系滿足二輸入與非門真值表的要求。,圖5.3 二輸入與非門的功能仿真圖,5.1 組合邏輯電路設(shè)計(jì),5.1.1 基本門電路設(shè)計(jì) 1與非門電路 (2)仿真結(jié)果,5.1.1 基本門電路設(shè)計(jì) 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è)計(jì),5.1.2 編碼器設(shè)計(jì) 在數(shù)字系統(tǒng)中,常常需要將某信息變換為某一特定的代碼。把二進(jìn)制碼按一定的規(guī)律進(jìn)行編排,使每組代碼具有特定的含義,稱為編碼。具有編碼功能的邏輯電路稱為編碼器。 編碼器是將 2

7、N 個(gè)分立的信息代碼以N個(gè)二進(jìn)制碼來表示。,5.1 組合邏輯電路設(shè)計(jì),5.1.2 編碼器設(shè)計(jì) 1. 8線-3線編碼器的VHDL描述 8線-3線編碼真值表見表5.2所示。 表5.2 8線-3線編碼真值表,5.1 組合邏輯電路設(shè)計(jì),【例5.4】 8線-3線編碼器的VHDL設(shè)計(jì) 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è)計(jì),5.1.2 編碼器設(shè)計(jì) 1. 8線-3線編碼器的VHDL描述,when “00000001”=yyyyyyyyy=000; end case; end process; end process; end;,5.1 組合邏輯電路設(shè)計(jì),5.1.2 編碼器設(shè)計(jì) 1. 8線-3線編碼器的VHDL描述,本例中,運(yùn)用了case語句完成了編碼器內(nèi)部邏輯結(jié)構(gòu)設(shè)計(jì),其RTL電路圖如圖5.4所示。,圖5.4 8線-3線編碼器的RTL電路圖,5.1 組合邏輯電路設(shè)計(jì),

9、5.1.2 編碼器設(shè)計(jì) 1. 8線-3線編碼器的VHDL描述,2. 8線-3線編碼器的功能仿真 8線-3線編碼器的功能仿真結(jié)果如圖5.5所示。,圖5.5 8線-3線編碼器功能仿真波形圖,5.1 組合邏輯電路設(shè)計(jì),5.1.2 編碼器設(shè)計(jì),5.1.3 譯碼器設(shè)計(jì) 譯碼是編碼的逆過程,它的功能是將具有特定含義的二進(jìn)制碼進(jìn)行辨別,并轉(zhuǎn)換成控制信號。具有譯碼功能的邏輯電路稱為譯碼器。,5.1 組合邏輯電路設(shè)計(jì),5.1.3 譯碼器設(shè)計(jì)1. 2線- 4線譯碼器,2線-4線譯碼器的真值表見表5.3所示。,表5.3 2線-4線譯碼器的真值表,5.1 組合邏輯電路設(shè)計(jì),(1)2線-4線譯碼器的VHDL設(shè)計(jì) 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è)計(jì),5.1.3 譯碼器設(shè)計(jì)1. 2線- 4線譯碼器,圖5.6 2線-4線譯碼器的RTL電路,5.1 組合邏輯電路設(shè)計(jì),5.1.3 譯碼器設(shè)計(jì)1. 2線- 4線譯碼器,(2)2線-4線譯碼器的仿真波形 如圖5.7所示,當(dāng)輸入使“00”、“01”、“10”、“11”時(shí)分別輸出“0001”、“0010”、“0100”和“1000”,這與真值表中顯示的邏輯關(guān)系一致。,圖5.7 2線-4線譯碼器的仿真波形圖,5.1 組合邏輯電路設(shè)計(jì),5.1.3 譯碼器設(shè)計(jì)1. 2線- 4線譯碼器,7段數(shù)碼顯示譯碼電路是一個(gè)組合

12、邏輯電路,通常的小規(guī)模專用集成IC,如74系列或4000系列的器件只能作十進(jìn)制BCD碼譯碼,然而數(shù)字系統(tǒng)中的數(shù)據(jù)處理和運(yùn)算都是2進(jìn)制的,所以輸出表達(dá)都是16進(jìn)制的,為了滿足16進(jìn)制數(shù)的譯碼顯示,最方便的方法就是利用譯碼程序在FPGA/CPLD中來實(shí)現(xiàn)。,5.1 組合邏輯電路設(shè)計(jì),5.1.3 譯碼器設(shè)計(jì) 2. 7段數(shù)碼顯示譯碼器設(shè)計(jì),【例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è)計(jì),5.1.3 譯碼器設(shè)計(jì) 2. 7段數(shù)碼顯示譯碼器設(shè)計(jì),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è)計(jì),5.1.3 譯碼器設(shè)計(jì) 2. 7段數(shù)碼顯示譯碼器設(shè)

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

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

17、(門、總線、.)。VHDL設(shè)計(jì)中,如果用STD_LOGIC數(shù)據(jù)類型的Z對一個(gè)變量賦值,即會(huì)引入三態(tài)門,并在使能信號的控制下可使其輸出呈高阻態(tài),這等效于使三態(tài)門禁止輸出。,5.1 組合邏輯電路設(shè)計(jì),5.1.5 三態(tài)門與雙向緩沖電路設(shè)計(jì) 1三態(tài)門設(shè)計(jì) 【例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è)計(jì),圖5.11 三態(tài)門電路的RTL電路,5.1 組合邏輯電路設(shè)計(jì),5.1.5 三態(tài)門與雙向緩沖電路設(shè)計(jì) 1三態(tài)門設(shè)計(jì),圖5.12 三態(tài)門電路的功能仿真圖,5.1 組合邏輯電路設(shè)計(jì),5.1.5 三態(tài)門與雙向緩沖電路設(shè)計(jì) 1三

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

22、.1.5 三態(tài)門與雙向緩沖電路設(shè)計(jì) 雙向總線緩沖器的RTL電路圖如圖5.14所示。,5.2 時(shí)序邏輯電路設(shè)計(jì),5.2.1 觸發(fā)器設(shè)計(jì) 1.RS觸發(fā)器設(shè)計(jì) RS觸發(fā)器由兩個(gè)與非門(或者或非門)的輸入和輸出交叉連接而成,如圖5.15所示, 真值表見表5.5。,圖5.15 RS觸發(fā)器原理圖,表5.5 RS觸發(fā)器真值表,5.2.1 觸發(fā)器設(shè)計(jì) 1.RS觸發(fā)器設(shè)計(jì) 【例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í)序邏輯電路設(shè)計(jì),圖5.16 RS觸發(fā)器的RTL電路,圖5.17 RS觸發(fā)器功能仿真波形圖,5.2 時(shí)序邏輯電路設(shè)計(jì),5.2.1 觸發(fā)器設(shè)計(jì) 1.RS觸發(fā)器設(shè)計(jì),5.2.1 觸發(fā)器設(shè)計(jì) 2. JK觸發(fā)器設(shè)計(jì) JK觸發(fā)器的狀態(tài)方程是:Q_tmp=j +q_temp。用VHDL邏輯表達(dá)式

24、對JK觸發(fā)器進(jìn)行描述。其真值表見表5.6所示。,表5.6 JK觸發(fā)器真值表,5.2 時(shí)序邏輯電路設(shè)計(jì),5.2.1 觸發(fā)器設(shè)計(jì) 【例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í)序邏輯電路設(shè)計(jì),圖5.18 JK觸發(fā)器的RTL電路,圖5.19 JK觸發(fā)器的功能仿真圖,5.2 時(shí)序邏輯電路設(shè)計(jì),5.2.1 觸發(fā)器設(shè)計(jì) 2. JK觸發(fā)器設(shè)計(jì),5.2.2 移位寄存器設(shè)計(jì) 移位寄存器是一個(gè)具有移位功能的寄存器,是指寄存器中所存的代碼能夠在移位脈沖的作用下依次左移或右移。既能左移又能右移的稱為雙向移位寄存器,只需要改變左、右移的控制信號便可實(shí)現(xiàn)雙向移位要求。根據(jù)移位寄存器存取信息的方式不同分為:串入串

26、出、串入并出、并入串出、并入并出四種形式。,5.2 時(shí)序邏輯電路設(shè)計(jì),5.2.2 移位寄存器設(shè)計(jì) 【例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í)序邏輯電路設(shè)計(jì),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í)序邏輯電路設(shè)計(jì),5.2.2 移位寄存器設(shè)計(jì),圖5.20 移位寄存器的RTL電路圖,圖5.21 移位寄存器的功能仿真波形圖(十六進(jìn)制表示形式),5.2 時(shí)序邏輯電路設(shè)計(jì),5.2.2 移位寄存器設(shè)計(jì)

28、,5.2.3計(jì)數(shù)器設(shè)計(jì),1.十六進(jìn)制加法計(jì)數(shù)器設(shè)計(jì) 【例5.13】十六進(jìn)制加法計(jì)數(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í)序邏輯電路設(shè)計(jì),PROCESS (CL

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

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

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

32、法計(jì)數(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í)序邏輯電路設(shè)計(jì),5.2.3計(jì)數(shù)器設(shè)計(jì),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è)計(jì),十六進(jìn)制減法計(jì)數(shù)器的仿真結(jié)果如圖5.24所示。,圖5.24 十六進(jìn)制減法計(jì)數(shù)器功能仿真波形圖,5.2 時(shí)序邏輯電路設(shè)計(jì),5.2.3計(jì)數(shù)器設(shè)計(jì),3.異步計(jì)數(shù)器設(shè)計(jì) 異步計(jì)數(shù)器,它的下一位計(jì)數(shù)器的輸出作為上一位計(jì)數(shù)器的

34、時(shí)鐘信號,這樣一級一級串行連接起來就構(gòu)成了一個(gè)異步計(jì)數(shù)器。 用VHDL語言描述異步邏輯電路時(shí),由于一個(gè)時(shí)鐘進(jìn)程只能構(gòu)成對應(yīng)單一時(shí)鐘信號的時(shí)序電路,如果在進(jìn)程中需要構(gòu)成多觸發(fā)器時(shí)序電路,也只能產(chǎn)生對應(yīng)某個(gè)單一時(shí)鐘的同步時(shí)序邏輯,異步時(shí)序邏輯一般采取多個(gè)時(shí)鐘進(jìn)程來構(gòu)成。,5.2 時(shí)序邏輯電路設(shè)計(jì),5.2.3計(jì)數(shù)器設(shè)計(jì),【例5.15】4個(gè)觸發(fā)器構(gòu)成的異步計(jì)數(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í)序邏輯電路設(shè)計(jì),5.2.3計(jì)數(shù)器設(shè)計(jì),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í)序邏輯電路設(shè)計(jì),5.2.3計(jì)數(shù)器設(shè)計(jì),圖5.25 異步計(jì)數(shù)器的底層模塊的RTL電路圖,5.2 時(shí)序邏輯電路設(shè)計(jì),5.2.3計(jì)數(shù)器

36、設(shè)計(jì),【例5.16】 4個(gè)觸發(fā)器構(gòu)成的異步計(jì)數(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í)序邏輯電路設(shè)計(jì),5.2.3計(jì)數(shù)器設(shè)計(jì),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í)序邏輯電路設(shè)計(jì),5.2.3計(jì)數(shù)器設(shè)計(jì),圖5.26 4個(gè)觸發(fā)器構(gòu)成的異步計(jì)數(shù)器的RTL電路圖,5.2 時(shí)序邏輯電路設(shè)計(jì),5.2.3計(jì)數(shù)器設(shè)計(jì),5.3.1 狀態(tài)機(jī)概述 1.什么是狀態(tài)機(jī) 通俗地說,狀態(tài)機(jī)就是事物存在狀態(tài)的一種綜

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

39、對狀態(tài)機(jī)的內(nèi)在因果關(guān)系的考慮?!艾F(xiàn)態(tài)”和“條件”是因,“動(dòng)作”和“次態(tài)”是果。,5.3 狀態(tài)機(jī)的設(shè)計(jì),5.3.1 狀態(tài)機(jī)概述 1.什么是狀態(tài)機(jī),現(xiàn)態(tài):是指當(dāng)前所處的狀態(tài)。 條件:又稱為“事件”。當(dāng)一個(gè)條件被滿足,將會(huì)觸發(fā)一個(gè)動(dòng)作,或者執(zhí)行一次狀態(tài)的遷移。 動(dòng)作:條件滿足后執(zhí)行的動(dòng)作。動(dòng)作執(zhí)行完畢后,可以遷移到新的狀態(tài),也可以仍舊保持原狀態(tài)。動(dòng)作不是必需的,當(dāng)條件滿足后,也可以不執(zhí)行任何動(dòng)作,直接遷移到新狀態(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)機(jī)的設(shè)計(jì),5.3.1 狀態(tài)機(jī)概述 1.什么是狀態(tài)機(jī),根據(jù)時(shí)序輸出

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

41、(2)建立狀態(tài)表或者畫出狀態(tài)圖 (3)根據(jù)狀態(tài)表或狀態(tài)圖,構(gòu)建狀態(tài)機(jī)的VHDL模型 (4)利用EDA工具進(jìn)行仿真、驗(yàn)證,5.3 狀態(tài)機(jī)的設(shè)計(jì),5.3.1 狀態(tài)機(jī)概述 2. 有限狀態(tài)機(jī)的設(shè)計(jì)流程,5.3.2 一般有限狀態(tài)機(jī)的VHDL設(shè)計(jì),一般和最常用的狀態(tài)機(jī)通常包含: 說明部分 主控時(shí)序進(jìn)程 主控組合進(jìn)程 輔助進(jìn)程幾個(gè)部分,5.3 狀態(tài)機(jī)的設(shè)計(jì),1說明部分 使用TYPE語句定義新的數(shù)據(jù)類型,此數(shù)據(jù)類型為枚舉型, 其元素通常都用狀態(tài)機(jī)的狀態(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)機(jī)的設(shè)計(jì),5.3.2 一般有限狀態(tài)機(jī)的VHDL設(shè)計(jì),2主控時(shí)序進(jìn)程 主控時(shí)序進(jìn)程是指負(fù)責(zé)狀態(tài)機(jī)運(yùn)轉(zhuǎn)和在時(shí)鐘驅(qū)動(dòng)下負(fù)責(zé)狀態(tài) 轉(zhuǎn)換的進(jìn)程; 狀態(tài)機(jī)是隨外部時(shí)鐘信號、以同步時(shí)序方式工作的; 狀態(tài)機(jī)向下一狀態(tài)(包括再次進(jìn)入本狀態(tài))轉(zhuǎn)換的實(shí)現(xiàn)僅僅取 決于時(shí)鐘信號的到來。,5.3 狀態(tài)機(jī)的設(shè)計(jì),5.3.2 一般有限狀態(tài)機(jī)的VHDL設(shè)計(jì),3. 主控組合進(jìn)程 主控組合進(jìn)程的任務(wù)是根據(jù)外部輸入的控制信號 (包括來自狀態(tài)機(jī)外部的信號和來自狀態(tài)機(jī)內(nèi)部其他非主控的組合或時(shí)序進(jìn)程的信號),或/和當(dāng)前狀態(tài)的狀態(tài)值確定下一狀態(tài)(next_state)的取向,即nex

43、t_state的取值內(nèi)容; 確定對外輸出或?qū)?nèi)部其他組合或時(shí)序進(jìn)程輸出控制信號的內(nèi)容。,5.3 狀態(tài)機(jī)的設(shè)計(jì),5.3.2 一般有限狀態(tài)機(jī)的VHDL設(shè)計(jì),5.3 狀態(tài)機(jī)的設(shè)計(jì),4輔助進(jìn)程 輔助進(jìn)程用于配合狀態(tài)機(jī)工作的組合進(jìn)程或時(shí)序進(jìn)程。例如為了完成某種算法的進(jìn)程,或用于配合狀態(tài)機(jī)工作的其他時(shí)序進(jìn)程,或?yàn)榱朔€(wěn)定輸出設(shè)置的數(shù)據(jù)鎖存器等。,5.3.2 一般有限狀態(tài)機(jī)的VHDL設(shè)計(jì),圖5.28 一個(gè)狀態(tài)機(jī)的結(jié)構(gòu)框圖,5.3 狀態(tài)機(jī)的設(shè)計(jì),5.3.2 一般有限狀態(tài)機(jī)的VHDL設(shè)計(jì),【例5.17】一般有限狀態(tài)機(jī)的VHDL設(shè)計(jì),利用狀態(tài)機(jī)設(shè)計(jì)方法輸出一個(gè)方波信號。 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)機(jī)說明部分 SIGNAL state: STATE_TYPE; BEGIN -接下頁,5.3 狀態(tài)機(jī)的設(shè)計(jì),5.3.2 一般有限狀態(tài)機(jī)的VHDL設(shè)計(jì),-接上頁 REG:PROCESS(clk,reset) -狀態(tài)機(jī)主控時(shí)序進(jìn)程 BEGIN IF reset=1 T

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

46、方波信號,5.3 狀態(tài)機(jī)的設(shè)計(jì),5.3.2 一般有限狀態(tài)機(jī)的VHDL設(shè)計(jì),5.3.3摩爾(Moore)型狀態(tài)機(jī)設(shè)計(jì),如圖5.31所示是摩爾型狀態(tài)機(jī)的結(jié)構(gòu)圖,圖中的輸出只與當(dāng)前的狀態(tài)有關(guān),而與當(dāng)前的輸入信號無關(guān)。 其狀態(tài)圖如圖5.32所示,摩爾狀態(tài)機(jī)的VHDL描述如例5.18所示。,圖5.31 摩爾型狀態(tài)機(jī)的結(jié)構(gòu)圖,5.3 狀態(tài)機(jī)的設(shè)計(jì),圖5.32 摩爾型狀態(tài)機(jī)的狀態(tài)圖,5.3 狀態(tài)機(jī)的設(shè)計(jì),5.3.3摩爾(Moore)型狀態(tài)機(jī)設(shè)計(jì),【例5.18】摩爾狀態(tài)機(jī)的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)機(jī)的設(shè)計(jì),5.3.3摩爾(Moore)型狀態(tài)機(jī)設(shè)計(jì),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)機(jī)的設(shè)計(jì),5.3.3摩爾(Moore)型狀態(tài)機(jī)設(shè)計(jì),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)機(jī)的設(shè)計(jì),5.3.3摩爾(Moore)型狀態(tài)機(jī)設(shè)計(jì),圖5.33 摩爾型狀態(tài)機(jī)的RTL電路圖,RTL電路圖如圖5.33所示,仿真波形如圖5.34所示。,5.3 狀態(tài)機(jī)的設(shè)計(jì),5.3.3摩爾(Moore)型狀態(tài)機(jī)設(shè)計(jì),圖5.34 摩爾型狀態(tài)機(jī)的仿真波形,5.3.4 米勒(Mealy)型狀態(tài)機(jī)設(shè)計(jì),如圖5.35所示是米勒型狀態(tài)機(jī)的結(jié)構(gòu)圖,圖中的輸出不僅與當(dāng)前狀態(tài)有關(guān),還與當(dāng)前輸入信號有關(guān)。米勒型狀態(tài)機(jī)的狀態(tài)圖如圖5.36所示。,圖5.35 米勒型狀態(tài)機(jī)的結(jié)構(gòu)圖,5.3 狀態(tài)機(jī)的設(shè)計(jì),圖5.36 米勒型狀態(tài)機(jī)的狀態(tài)圖,5.3 狀態(tài)機(jī)的設(shè)計(jì),5.3.4 米勒(Mealy

50、)型狀態(tài)機(jī)設(shè)計(jì),米勒型狀態(tài)機(jī)的結(jié)構(gòu)體也由三部分組成:說明部分、時(shí)鐘同步的時(shí)序進(jìn)程和組合進(jìn)程。說明部分和時(shí)鐘完全類似于摩爾型狀態(tài)機(jī),不同的只是組合進(jìn)程。例5.19是實(shí)現(xiàn)米勒型狀態(tài)機(jī)的VHDL代碼。米勒型狀態(tài)機(jī)的RTL電路圖如圖5.37所示,仿真圖形如圖5.38所示。,【例5.19】米勒型狀態(tài)機(jī)的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)機(jī)的設(shè)計(jì),5.3.4 米勒(Mealy)型狀態(tài)機(jī)設(shè)計(jì),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)機(jī)的設(shè)計(jì),5.3.4 米勒(M

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論