




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第5章基本邏輯電路的VHDL設計【學習目標】
通過本章學習應掌握組合邏輯電路設計,主要有基本門電路、編碼器、譯碼器、加法器、三態輸出電路等組合邏輯電路設計技術;時序邏輯電路設計,主要有觸發器、移位寄存器、計數器等時序邏輯電路設計技術;狀態機基本概念、狀態機設計流程、一般有限狀態機的VHDL設計、Moore型有限狀態機設計、Mealy型有限狀態機設計、有限狀態機的編碼等。5.1組合邏輯電路設計5.1.1基本門電路設計
1.與非門電路
與非門電路包括二輸入與非門、三輸入與非門、四輸入與非門和多輸入與非門等。下面介紹二輸入與非門電路的設計方法,其他的設計方法與二輸入與非門的設計方法類似,在這里不作更多論述。二輸入與非門電路的邏輯方程式為Y=,邏輯真值表見表5.1,二輸入與非門的電路符號如圖5.1所示輸入輸出ABY001011101110表5.1二輸入與非門的真值表
圖5.1二輸入與非門的電路符號5.1組合邏輯電路設計5.1.1基本門電路設計
1.與非門電路(1)VHDL設計方法二輸入與非門電路的邏輯真值表見表5.1,二輸入與非門的電路符號如圖5.1所示。5.1.1基本門電路設計
1.與非門電路(1)VHDL設計方法【例5.1】二輸入與非門的VHDL描述方法一:LIBRARYieee;USEieee.STD_LOGIC_1164.ALL;ENTITYnand_2IS PORT(a,b:INSTD_LOGIC;y:OUTSTD_LOGIC);END;ARCHITECTUREoneOFnand_2IS BEGIN y<=anandb;END;5.1組合邏輯電路設計5.1.1基本門電路設計
1.與非門電路(1)VHDL設計方法【例5.2】二輸入與非門的VHDL描述方法二:LIBRARYieee;USEieee.STD_LOGIC_1164.ALL;ENTITYnand_2IS PORT(a,b:IN STD_LOGIC; y:OUT STD_LOGIC);END;ARCHITECTUREoneOFnand_2IS SIGNALab:STD_LOGIC_VECTOR(1DOWNTO0);BEGIN
ab<=a&b;--接下頁5.1組合邏輯電路設計5.1.1基本門電路設計
1.與非門電路---接上頁process(ab)isbegincaseabiswhen“00”=>y<=‘1‘;--這里的“=>”相當于THEN或于是
when"01"=>y<='1';when"10"=>y<='1';when"11"=>y<='0';whenothers=>y<=null;endcase;endprocess;end;5.1組合邏輯電路設計(a)用nand實現的二輸入與非門的RTL電路(b)用case語句實現的二輸入與非門的RTL電路圖5.2二輸入與非門RTL電路
5.1組合邏輯電路設計5.1.1基本門電路設計
1.與非門電路(1)VHDL設計方法二輸入與非門的功能仿真結果如圖5.3所示,觀察波形可知,輸入為a與b,輸出為y,且其邏輯關系滿足二輸入與非門真值表的要求。
圖5.3二輸入與非門的功能仿真圖5.1組合邏輯電路設計5.1.1基本門電路設計
1.與非門電路(2)仿真結果5.1.1基本門電路設計2.基本邏輯門電路的VHDL描述【例5.3】基本邏輯門電路的VHDL描述LIBRARYieee;USEieee.STD_LOGIC_1164.ALL;ENTITYgateIS PORT(a,b:INSTD_LOGIC;
y1,y2,y3,y4,y5,y6:OUTSTD_LOGIC);END;ARCHITECTUREoneOFgateIS BEGIN y1<=aandb;--構成與門
y2<=aorb;--構成或門
y3<=nota;--構成非門
y4<=anandb;--構成與非門
y5<=anorb;--構成異或門
y6<=not(a
xorb);--構成異或非門
END;5.1組合邏輯電路設計
5.1.2編碼器設計
在數字系統中,常常需要將某信息變換為某一特定的代碼。把二進制碼按一定的規律進行編排,使每組代碼具有特定的含義,稱為編碼。具有編碼功能的邏輯電路稱為編碼器。編碼器是將
2N個分立的信息代碼以N個二進制碼來表示。5.1組合邏輯電路設計輸入輸出I0I1I2I3I4I5I6I7Y2Y1Y01000000000001000000001001000000100001000001100001000100000001001010000001011000000001115.1.2編碼器設計1.8線-3線編碼器的VHDL描述8線-3線編碼真值表見表5.2所示。表5.28線-3線編碼真值表5.1組合邏輯電路設計【例5.4】
8線-3線編碼器的VHDL設計LIBRARYieee;USEieee.STD_LOGIC_1164.ALL;ENTITYencoder8_3IS PORT(i:IN STD_LOGIC_VECTOR(7downto0); y:OUT STD_LOGIC_VECTOR(2downto0));END;ARCHITECTUREoneOFencoder8_3ISBEGINProcess(i)isbegin caseiis--接下頁5.1組合邏輯電路設計5.1.2編碼器設計1.8線-3線編碼器的VHDL描述
when“00000001”=>y<=“000”;--接上頁
when"00000010"=>y<="001"; when"00000100"=>y<="010"; when"00001000"=>y<="011";when"00010000"=>y<="100"; when"00100000"=>y<="101";when"01001000"=>y<="110";when"10000000"=>y<="111";whenothers=>y<="000";endcase;endprocess;endprocess;end;5.1組合邏輯電路設計5.1.2編碼器設計1.8線-3線編碼器的VHDL描述
本例中,運用了case語句完成了編碼器內部邏輯結構設計,其RTL電路圖如圖5.4所示。圖5.48線-3線編碼器的RTL電路圖
5.1組合邏輯電路設計5.1.2編碼器設計1.8線-3線編碼器的VHDL描述2.8線-3線編碼器的功能仿真
8線-3線編碼器的功能仿真結果如圖5.5所示。圖5.58線-3線編碼器功能仿真波形圖
5.1組合邏輯電路設計5.1.2編碼器設計5.1.3譯碼器設計譯碼是編碼的逆過程,它的功能是將具有特定含義的二進制碼進行辨別,并轉換成控制信號。具有譯碼功能的邏輯電路稱為譯碼器。5.1組合邏輯電路設計5.1.3譯碼器設計
1.2線-4線譯碼器
2線-4線譯碼器的真值表見表5.3所示。輸入輸出A1A2Z3Z2Z1Z0000001010010100100111000表5.32線-4線譯碼器的真值表
5.1組合邏輯電路設計(1)2線-4線譯碼器的VHDL設計libraryieee;---【例5.5】
2線-4線譯碼器的VHDL代碼useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitydecode_24isport(a:instd_logic_vector(1downto0);z:outstd_logic_vector(3downto0));end;architecturestrofdecode_24isBeginwithaselect
z<="0001"when"00","0010"when"01","0100"when"10","1000"when"11","XXXX"whenothers;end;5.1組合邏輯電路設計5.1.3譯碼器設計
1.2線-4線譯碼器圖5.62線-4線譯碼器的RTL電路
5.1組合邏輯電路設計5.1.3譯碼器設計
1.2線-4線譯碼器(2)2線-4線譯碼器的仿真波形如圖5.7所示,當輸入使“00”、“01”、“10”、“11”時分別輸出“0001”、“0010”、“0100”和“1000”,這與真值表中顯示的邏輯關系一致。圖5.72線-4線譯碼器的仿真波形圖5.1組合邏輯電路設計5.1.3譯碼器設計
1.2線-4線譯碼器
7段數碼顯示譯碼電路是一個組合邏輯電路,通常的小規模專用集成IC,如74系列或4000系列的器件只能作十進制BCD碼譯碼,然而數字系統中的數據處理和運算都是2進制的,所以輸出表達都是16進制的,為了滿足16進制數的譯碼顯示,最方便的方法就是利用譯碼程序在FPGA/CPLD中來實現。5.1組合邏輯電路設計5.1.3譯碼器設計
2.7段數碼顯示譯碼器設計【例5.6】
7段BCD譯碼顯示器的VHDL描述
LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYLED_SEGISPORT(A:INSTD_LOGIC_VECTOR(3DOWNTO0);LED:OUTSTD_LOGIC_VECTOR(6DOWNTO0));END;ARCHITECTUREoneOFLED_SEGISBEGINPROCESS(A)BEGIN5.1組合邏輯電路設計5.1.3譯碼器設計
2.7段數碼顯示譯碼器設計CASEAISWHEN"0000"=>LED<="0111111";--顯示“0”WHEN"0001"=>LED<="0000110";--顯示“1”WHEN"0010"=>LED<="1011011";--顯示“2”WHEN"0011"=>LED<="1001111";--顯示“3”WHEN"0100"=>LED<="1100110";--顯示“4”WHEN"0101"=>LED<="1101101";--顯示“5”WHEN"0110"=>LED<="1111101";--顯示“6”WHEN"0111"=>LED<="0000111";--顯示“7”WHEN"1000"=>LED<="1111111";--顯示“8”WHEN"1001"=>LED<="1101111";--顯示“9”WHEN"1010"=>LED<="1110111";--顯示“A”WHEN"1011"=>LED<="1111100";--顯示“B”WHEN"1100"=>LED<="0111001";--顯示“C”WHEN"1101"=>LED<="1011110";--顯示“D”WHEN"1110"=>LED<="1111001";--顯示“E”WHEN"1111"=>LED<="1110001";--顯示“F”WHENOTHERS=>NULL;ENDCASE;ENDPROCESS;END;5.1組合邏輯電路設計5.1.3譯碼器設計
2.7段數碼顯示譯碼器設計
例5.6中輸出信號LED的7位分別接數碼管的7個段,高位在左,低位在右。例如當LED輸出為“1101111”時,數碼管的7個段:g、f、e、d、c、b、a分別接1、1、0、1、1、1、1;接有高電平的段點亮,低電平的段不亮,于是數碼管顯示“9”,其功能仿真如圖5.8所示。圖5.87段數碼顯示譯碼電路功能仿真波形
5.1組合邏輯電路設計5.1.3譯碼器設計
2.7段數碼顯示譯碼器設計5.1.4加法器設計
1.四位二進制全加器的VHDL5.1組合邏輯電路設計【例5.7】
四位二進制全加器的VHDL描述
LIBRARYieee; USEieee.STD_LOGIC_1164.ALL;USEieee.STD_LOGIC_unsigned.ALL; ENTITYadder_4bitIS PORT(a,b:INSTD_LOGIC_VECTOR(3DOWNTO0);
ci:INSTD_LOGIC; s:OUTSTD_LOGIC_VECTOR(3DOWNTO0); co:OUTSTD_LOGIC);END; ARCHITECTUREoneOFadder_4bitISSIGNALtemp:STD_LOGIC_VECTOR(4DOWNTO0); BEGIN temp<=('0'&a)+b+ci;s<=temp(3downto0);co<=temp(4); END;圖5.94位二進制全加器的RTL電路圖
5.1組合邏輯電路設計5.1.4加法器設計2.4位全加器的仿真結果例5.7中的4位全加器的功能仿真結果如圖5-10所示,其時序仿真結果如圖5-17所示。從波形中可以看出,當a、b和ci取不同的值時,執行a+b+ci操作后,和數s與進位co均滿足4位全加器的邏輯功能要求。5.104位二進制全加器的功能仿真結果
5.1組合邏輯電路設計5.1.4加法器設計5.1.5三態門與雙向緩沖電路設計
三態門,是指邏輯門的輸出除有高、低電平兩種狀態外,還有第三種狀態——高阻狀態的門電路,高阻態相當于隔斷狀態。三態門都有一個EN為控制使能端,來控制門電路的通斷。具備這三種狀態的器件就叫做三態(門、總線、...)。VHDL設計中,如果用STD_LOGIC數據類型的'Z'對一個變量賦值,即會引入三態門,并在使能信號的控制下可使其輸出呈高阻態,這等效于使三態門禁止輸出。
5.1組合邏輯電路設計5.1.5三態門與雙向緩沖電路設計1.三態門設計
【例5.8】4位三態控制門電路的VHDL描述LIBRARYieee;USEieee.STD_LOGIC_1164.ALL;USEieee.STD_LOGIC_unsigned.ALL;ENTITYtri_gateIS
PORT(en:INSTD_LOGIC;din:INSTD_LOGIC_VECTOR(3DOWNTO0);
dout:OUTSTD_LOGIC_VECTOR(3DOWNTO0));END;ARCHITECTUREoneOFtri_gateISBEGINPROCESS(en,din)BEGINIF(en='1')thendout<=din;elsedout<="ZZZZ";endif;endprocess;END;5.1組合邏輯電路設計圖5.11三態門電路的RTL電路5.1組合邏輯電路設計5.1.5三態門與雙向緩沖電路設計1.三態門設計圖5.12三態門電路的功能仿真圖
5.1組合邏輯電路設計5.1.5三態門與雙向緩沖電路設計1.三態門設計2.雙向總線緩沖器雙向總線緩沖器用于對數據總線的驅動和緩沖,典型雙向總線緩沖電路圖如圖5.13所示。一般雙向總線緩沖器的模式為:兩個數據端口a、b,一個使能端en,一個方向控制端dr。其操作行為真值表如表5.4所示。
5.1組合邏輯電路設計5.1.5三態門與雙向緩沖電路設計2.雙向總線緩沖器
ain<=a;a<=aout;圖5.13雙向總線驅動電路
如果A為輸入端口,即ain<=a時,aout應為“ZZZZZZZZ”EnDr功能00a=b01b=a1X高阻表5.4雙向總線驅動電路真值表
5.1組合邏輯電路設計5.1.5三態門與雙向緩沖電路設計2.雙向總線緩沖器【例5.9】
雙向總線緩沖器的VHDL描述libraryieee;useieee.std_logic_1164.all;ENTITYDUB_GATEIS PORT(
a,b:INOUTSTD_LOGIC_VECTOR(7DOWNTO0); en:INSTD_LOGIC;
dr:INOUTSTD_LOGIC);ENDDUB_GATE;ARCHITECTUREaOFDUB_GATEISSIGNALabuf,bbuf:STD_LOGIC_VECTOR(7DOWNTO0);BEGINP1:PROCESS(a,dr,en) BEGIN if(en='0')and(dr='1')then
bbuf<=a;----接下頁5.1組合邏輯電路設計5.1.5三態門與雙向緩沖電路設計
else---接上頁
bbuf<="ZZZZZZZZ"; endif; b<=bbuf; ENDPROCESS; P2:PROCESS(b,dr,en)BEGIN if(en='0')and(dr='0')then
abuf<=b; else
abuf<="ZZZZZZZZ"; endif; a<=abuf; ENDPROCESS;ENDa;5.1組合邏輯電路設計5.1.5三態門與雙向緩沖電路設計圖5.14雙向總線緩沖器的RTL電路圖5.1組合邏輯電路設計5.1.5三態門與雙向緩沖電路設計雙向總線緩沖器的RTL電路圖如圖5.14所示。5.2時序邏輯電路設計5.2.1觸發器設計
1.RS觸發器設計
RS觸發器由兩個與非門(或者或非門)的輸入和輸出交叉連接而成,如圖5.15所示,
真值表見表5.5。
圖5.15RS觸發器原理圖
輸入輸出RSQQ非0001011010不變不變11不定不定表5.5RS觸發器真值表5.2.1觸發器設計
1.RS觸發器設計【例5.10】RS觸發器的VHDL程序代碼LIBRARYieee;USEieee.STD_LOGIC_1164.ALL;ENTITYRSFFISPORT(R,S:INSTD_LOGIC; Q,QB:OUTSTD_LOGIC);END;ARCHITECTUREoneOFRSFFISSIGNALQ_TEMP,QB_TEMP:STD_LOGIC;BEGIN
Q_TEMP<=SNANDQB_TEMP;QB_TEMP<=RNANDQ_TEMP;
Q<=Q_TEMP;QB<=QB_TEMP;END;5.2時序邏輯電路設計圖5.16RS觸發器的RTL電路圖5.17RS觸發器功能仿真波形圖5.2時序邏輯電路設計5.2.1觸發器設計
1.RS觸發器設計5.2.1觸發器設計
2.JK觸發器設計
JK觸發器的狀態方程是:Q_tmp<=j+q_temp。用VHDL邏輯表達式對JK觸發器進行描述。其真值表見表5.6所示。
輸入輸出jkq00保持01010111翻轉表5.6JK觸發器真值表5.2時序邏輯電路設計5.2.1觸發器設計
【例5.11】JK觸發器VHDL程序libraryieee;useieee.std_logic_1164.all;entityjkff1isport(j,k,clk:instd_logic;q:outstd_logic);end;architectureoneofjkff1issignalq_temp:std_logic;beginp1:processbeginwaituntil(clk'eventandclk='1');
q_temp<=(jand(notq_temp))or((notk)andq_temp);endprocess;q<=q_temp;end;
5.2時序邏輯電路設計圖5.18JK觸發器的RTL電路圖5.19JK觸發器的功能仿真圖5.2時序邏輯電路設計5.2.1觸發器設計
2.JK觸發器設計
5.2.2移位寄存器設計
移位寄存器是一個具有移位功能的寄存器,是指寄存器中所存的代碼能夠在移位脈沖的作用下依次左移或右移。既能左移又能右移的稱為雙向移位寄存器,只需要改變左、右移的控制信號便可實現雙向移位要求。根據移位寄存器存取信息的方式不同分為:串入串出、串入并出、并入串出、并入并出四種形式。
5.2時序邏輯電路設計5.2.2移位寄存器設計【例5.12】8位右移移位寄存器的VHDL描述LIBRARYieee;USEieee.STD_LOGIC_1164.ALL;ENTITYSHFRTISPORT(CLK,LOAD:INSTD_LOGIC;DIN:INSTD_LOGIC_VECTOR(7DOWNTO0); QB:OUTSTD_LOGIC);END;ARCHITECTUREONEOFSHFRTISBEGIN---接下頁5.2時序邏輯電路設計
PROCESS(CLK,LOAD)---接上頁
VARIABLEREG8:STD_LOGIC_VECTOR(7DOWNTO0);BEGINIFCLK'EVENTANDCLK='1'THENIFLOAD='1'THENREG8:=DIN;ELSEREG8(6DOWNTO0):=REG8(7DOWNTO1);ENDIF;ENDIF;QB<=REG8(0);ENDPROCESS;END;5.2時序邏輯電路設計5.2.2移位寄存器設計圖5.20移位寄存器的RTL電路圖圖5.21移位寄存器的功能仿真波形圖(十六進制表示形式)
5.2時序邏輯電路設計5.2.2移位寄存器設計5.2.3計數器設計1.十六進制加法計數器設計【例5.13】十六進制加法計數器的VHDL描述LIBRARYieee;USEieee.STD_LOGIC_1164.ALL;USEieee.STD_LOGIC_unsigned.ALL;ENTITYCNT10IS PORT(CLK,RST,EN
:
INSTD_LOGIC;CQ
:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);COUT
:
OUTSTD_LOGIC);END;ARCHITECTUREoneOF
CNT16
ISBEGIN---接下頁5.2時序邏輯電路設計
PROCESS(CLK,RST,EN)---接上頁
VARIABLECQI:STD_LOGIC_VECTOR(3DOWNTO0);BEGINIFRST='1'THENCQI:=(OTHERS=>'0');--計數器高電平復位
ELSIFCLK'EVENTANDCLK='1'THENIFEN='1'THEN--計數器控制端高電平有效
IFCQI<15
THENCQI:=CQI+1;--計數器開始計數
ELSECQI:=(OTHERS=>'0');ENDIF;ENDIF;ENDIF;IFCQI=15THENCOUT<='1';--計數滿16產生一個進位
ELSECOUT<='0';ENDIF;CQ<=CQI;ENDPROCESS;END;5.2時序邏輯電路設計5.2.3計數器設計
例5.13描述的是一個帶有異步復位和同步時鐘使能的十六進制加法計數器。所謂同步或異步都是相對于時鐘而言的。依賴時鐘而有效的信號稱為同步信號,否則稱為異步信號。例5.13中的進程語句中含有兩個獨立的IF語句,第1個IF語句是不完整性條件語句,因而將產生計數器時序電路;第二個IF語句產生一個純組合邏輯的多路選擇器。從結構上講,更一般的表述是將這兩個獨立的IF語句用兩個獨立的進程語句來表達,一個為時序進程(或稱時鐘進程),另一個為組合進程。5.2時序邏輯電路設計5.2.3計數器設計另外,不完整條件語句是指在條件語句中,沒有對所有可能發生的條件給出對應的處理方式。對于這種語言現象,VHDL綜合器將理解為當不滿足條件時,不能執行新的賦值,即應保持原值不變,這就意味著必須引進時序元件來保存的原值,直到滿足IF語句的判斷條件后才能更新存儲器中的值。利用這種不完整的條件語句的描述引進寄存器元件,從而構成時序電路的方式是VHDL描述時序電路最重要的途徑,通常,完整的條件語句只能構成組合邏輯電路。
5.2時序邏輯電路設計5.2.3計數器設計圖5.22十六進制加法計數器的RTL電路圖5.2時序邏輯電路設計5.2.3計數器設計圖5.23十六進制加法計數器的功能仿真圖5.2時序邏輯電路設計5.2.3計數器設計2.十六進制減法計數器設計【例5.14】十六進制減法計數器VHDL程序LIBRARYieee;USEieee.STD_LOGIC_1164.ALL;USEieee.STD_LOGIC_unsigned.ALL;ENTITYCNT16IS PORT(CLK,RST,EN:INSTD_LOGIC;CQ:OUTSTD_LOGIC_VECTOR(3DOWNTO0));END;ARCHITECTUREoneOFCNT16ISBEGIN---接下頁5.2時序邏輯電路設計5.2.3計數器設計PROCESS(CLK,RST,EN)---接上頁
VARIABLECQI:STD_LOGIC_VECTOR(3DOWNTO0);BEGINIFRST='1'THENCQI:="1111";ELSIFCLK'EVENTANDCLK='1'THENIFEN='1'THENIFCQI>0THENCQI:=CQI-1;ELSECQI:="1111";ENDIF;ENDIF;ENDIF;CQ<=CQI;ENDPROCESS;END;5.2時序邏輯電路設計十六進制減法計數器的仿真結果如圖5.24所示。圖5.24十六進制減法計數器功能仿真波形圖5.2時序邏輯電路設計5.2.3計數器設計
3.異步計數器設計異步計數器,它的下一位計數器的輸出作為上一位計數器的時鐘信號,這樣一級一級串行連接起來就構成了一個異步計數器。用VHDL語言描述異步邏輯電路時,由于一個時鐘進程只能構成對應單一時鐘信號的時序電路,如果在進程中需要構成多觸發器時序電路,也只能產生對應某個單一時鐘的同步時序邏輯,異步時序邏輯一般采取多個時鐘進程來構成。
5.2時序邏輯電路設計5.2.3計數器設計【例5.15】4個觸發器構成的異步計數器的VHDL底層模塊程序libraryieee;useieee.std_logic_1164.all;entitydffrisport(clk,clr,d:in
std_logic;q,qb:outstd_logic);end;architecturestrofdffrissignalq_in:std_logic;Begin---接下頁5.2時序邏輯電路設計5.2.3計數器設計qb<=not(q_in);---接上頁q<=q_in;process(clk)beginif(clr='1')then
q_in<='0';
elsif(clk'eventandclk='1')then
q_in<=d;endif;endprocess;end;5.2時序邏輯電路設計5.2.3計數器設計圖5.25異步計數器的底層模塊的RTL電路圖
5.2時序邏輯電路設計5.2.3計數器設計【例5.16】4個觸發器構成的異步計數器的頂層VHDL描述libraryieee;useieee.std_logic_1164.all;entityrplcontisport(clk,clr:in
std_logic;
count:outstd_logic_vector(3downto0));end;architecturestrofrplcontissignalcount_in_bar:std_logic_vector(4downto0);---接下頁5.2時序邏輯電路設計5.2.3計數器設計componentdffris---接上頁port(clk,clr,d:in
std_logic;
q,qb:out
std_logic);endcomponent;begincount_in_bar(0)<=clk;gen1:foriin0to3generate
u:dffrportmap(clk=>count_in_bar(i),
clr=>clr,d=>count_in_bar(i+1),q=>count(i),qb=>count_in_bar(i+1));endgenerate;end;5.2時序邏輯電路設計5.2.3計數器設計圖5.264個觸發器構成的異步計數器的RTL電路圖5.2時序邏輯電路設計5.2.3計數器設計
5.3.1狀態機概述1.什么是狀態機
通俗地說,狀態機就是事物存在狀態的一種綜合描述。比如,一個單向路口的一盞紅綠燈,它有“亮紅燈”、“亮綠燈”和“亮黃燈”3種狀態。在不同情況下,3種狀態可以互相轉換。轉換的條件可以是經過多少時間,比如經過30秒鐘由“亮紅燈”狀態變為“亮綠燈”狀態;也可以是特殊條件,比如有緊急事件,不論處于什么狀態都將轉變為“亮紅燈”狀態。而所謂的狀態機,就是對這盞紅綠燈3種狀態的綜合描述,說明任意兩個狀態之間的轉變條件。
5.3狀態機的設計
狀態機是由狀態寄存器和組合邏輯電路構成的,能夠根據控制信號按照預先設定的狀態進行狀態轉移,是協調相關信號動作、完成特定操作的控制中心。狀態機可歸納為4個要素:即現態、條件、動作及次態。這樣的歸納,主要是出于對狀態機的內在因果關系的考慮。“現態”和“條件”是因,“動作”和“次態”是果。5.3狀態機的設計
5.3.1狀態機概述1.什么是狀態機
①現態:是指當前所處的狀態。②條件:又稱為“事件”。當一個條件被滿足,將會觸發一個動作,或者執行一次狀態的遷移。③動作:條件滿足后執行的動作。動作執行完畢后,可以遷移到新的狀態,也可以仍舊保持原狀態。動作不是必需的,當條件滿足后,也可以不執行任何動作,直接遷移到新狀態。④次態:條件滿足后要遷往的新狀態。“次態”是相對于“現態”而言的,“次態”一旦被激活,就轉變成新的“現態”了。
5.3狀態機的設計
5.3.1狀態機概述1.什么是狀態機
根據時序輸出信號產生機理的不同,狀態機可以分成兩類:摩爾(Moore)型狀態機和米勒(Mealy)型狀態機。兩種狀態機的區別:
①前者的輸出僅是當前狀態的函數,后著的輸出是當前狀態和輸入信號的函數。
②米勒型狀態機輸出的變化先于摩爾型。5.3狀態機的設計
5.3.1狀態機概述1.什么是狀態機
所有的狀態均可表達為CASEWHEN結構中的一條CASE語句,而狀態的轉移則通過IF_THEN_ELSE語句實現。應用VHDL設計有限狀態機的流程如圖5.27所示。
5.3狀態機的設計
5.3.1狀態機概述2.有限狀態機的設計流程根據系統要求建立狀態轉移圖根據狀態轉移圖編寫VHDL代碼利用EDA工具進行仿真和驗證
圖5.27VHDL設計有限狀態機的流程圖
(1)選擇狀態機類型(2)建立狀態表或者畫出狀態圖(3)根據狀態表或狀態圖,構建狀態機的VHDL模型(4)利用EDA工具進行仿真、驗證
5.3狀態機的設計
5.3.1狀態機概述2.有限狀態機的設計流程5.3.2一般有限狀態機的VHDL設計
一般和最常用的狀態機通常包含:
①說明部分②主控時序進程③主控組合進程④輔助進程幾個部分5.3狀態機的設計
1.說明部分①使用TYPE語句定義新的數據類型,此數據類型為枚舉型,其元素通常都用狀態機的狀態名來定義;②狀態變量(如現態和次態)應定義為信號,便于信息傳遞;
③并將狀態變量的數據類型定義為含有既定狀態元素的新定義的數據類型;
④說明部分一般放在結構體的ARCHITECTURE和BEGIN之間。
5.3狀態機的設計
5.3.2一般有限狀態機的VHDL設計
2.主控時序進程①主控時序進程是指負責狀態機運轉和在時鐘驅動下負責狀態轉換的進程;
②狀態機是隨外部時鐘信號、以同步時序方式工作的;③狀態機向下一狀態(包括再次進入本狀態)轉換的實現僅僅取決于時鐘信號的到來。
5.3狀態機的設計
5.3.2一般有限狀態機的VHDL設計
3.主控組合進程
①主控組合進程的任務是根據外部輸入的控制信號(包括來自狀態機外部的信號和來自狀態機內部其他非主控的組合或時序進程的信號),或/和當前狀態的狀態值確定下一狀態(next_state)的取向,即next_state的取值內容;②確定對外輸出或對內部其他組合或時序進程輸出控制信號的內容。5.3狀態機的設計
5.3.2一般有限狀態機的VHDL設計
5.3狀態機的設計4.輔助進程
輔助進程用于配合狀態機工作的組合進程或時序進程。例如為了完成某種算法的進程,或用于配合狀態機工作的其他時序進程,或為了穩定輸出設置的數據鎖存器等。
5.3.2一般有限狀態機的VHDL設計
圖5.28一個狀態機的結構框圖5.3狀態機的設計
5.3.2一般有限狀態機的VHDL設計
【例5.17】一般有限狀態機的VHDL設計,利用狀態機設計方法輸出一個方波信號。LIBRARYieee;USEieee.STD_LOGIC_1164.ALL;ENTITYA_EXAMPLEISPORT(clk,reset:INSTD_LOGIC;
output:OUTSTD_LOGIC);END;ARCHITECTUREONEOFA_EXAMPLEISTYPESTATE_TYPEIS(S0,S1,S2,S3);--狀態機說明部分SIGNALstate:STATE_TYPE;BEGIN---接下頁5.3狀態機的設計
5.3.2一般有限狀態機的VHDL設計
----接上頁REG:PROCESS(clk,reset)--狀態機主控時序進程
BEGINIFreset='1'THENstate<=S0;ELSIFclk'EVENTANDclk='1'THENCASEstateISWHENS0=>state<=S1;WHENS1=>state<=S2;WHENS2=>state<=S3;WHENS3=>state<=S0;ENDCASE;ENDIF;ENDPROCESS;---接下頁5.3狀態機的設計
5.3.2一般有限狀態機的VHDL設計
---接上頁COM:PROCESS(state)--狀態機主控組合進程BEGINCASEstateISWHENS0=>output<='1';WHENS1=>output<='1';WHENS2=>output<='0';WHENS3=>output<='0';ENDCASE;ENDPROCESS;END;5.3狀態機的設計
5.3.2一般有限狀態機的VHDL設計
圖5.29狀態機設計輸出一個方波信號的RTL電路
圖5.30利用一般狀態機設計方法實現的方波信號5.3狀態機的設計
5.3.2一般有限狀態機的VHDL設計
5.3.3摩爾(Moore)型狀態機設計
如圖5.31所示是摩爾型狀態機的結構圖,圖中的輸出只與當前的狀態有關,而與當前的輸入信號無關。其狀態圖如圖5.32所示,摩爾狀態機的VHDL描述如例5.18所示。
圖5.31摩爾型狀態機的結構圖5.3狀態機的設計
圖5.32摩爾型狀態機的狀態圖5.3狀態機的設計
5.3.3摩爾(Moore)型狀態機設計
【例5.18】摩爾狀態機的VHDL描述libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;useieee.std_logic_arith.all;entitymoore_stateisport(clk,x_in,rst:in
std_logic;
key_en:out
std_logic;
y:outstd_logic_vector(3downto0));end;architecturestrofmoore_stateistypestate_typeis(s1,s2,s3,s4);signalstate:state_type;beginp1_state_p:process(clk,rst)Begin---接下頁5.3狀態機的設計
5.3.3摩爾(Moore)型狀態機設計
ifrst=‘1’thenstate<=s1;---接上頁
elsif
clk'eventandclk='1'thencasestateiswhens1=>ifx_in='0'thenstate<=s2;endif;whens2=>ifx_in='1'thenstate<=s3;endif;whens3=>ifx_in='0'thenstate<=s4;endif;whens4=>ifx_in='1'thenstate<=s1;endif;whenothers=>state<=s1;endcase;endif;---接下頁5.3狀態機的設計
5.3.3摩爾(Moore)型狀態機設計
endprocess;---接上頁p2_state_p:process(state)begincasestateiswhens1=>y<="0001";key_en<='0';whens2=>y<="0010";key_en<='1';whens3=>y<="0100";key_en<='1';whens4=>y<="1000";key_en<='0';whenothers=>null;endcase;endprocess;end;5.3狀態機的設計
5.3.3摩爾(Moore)型狀態機設計
圖5.33摩爾型狀態機的RTL電路圖RTL電路圖如圖5.33所示,仿真波形如圖5.34所示。5.3狀態機的設計
5.3.3摩爾(Moore)型狀態機設計
圖5.34摩爾型狀態機的仿真波形5.3.4米勒(Mealy)型狀態機設計
如圖5.35所示是米勒型狀態機的結構圖,圖中的輸出不僅與當前狀態有關,還與當前輸入信號有關。米勒型狀態機的狀態圖如圖5.36所示。圖5.35米勒型狀態機的結構圖5.3狀態機的設計
圖5.36米勒型狀態機的狀態圖5.3狀態機的設計
5.3.4米勒(Mealy)型狀態機設計
米勒型狀態機的結構體也由三部分組成:說明部分、時鐘同步的時序進程和組合進程。說明部分和時鐘完全類似于摩爾型狀態機,不同的只是組合進程。例5.19是實現米勒型狀態機的VHDL代碼。米勒型狀態機的RTL電路圖如圖5.37所示,仿真圖形如圖5.38所示。【例5.19】米勒型狀態機的VHDL描述libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitymealyisport(clk,rst,x_in:in
std_logic;
key_en:out
std_logic;
y:outstd_logic_vector(3downto0));end;architecturestrofmealyistypestate_typeis(s1,s2,s3,s4);signalstate:state_type;beginstate_p:process(clk,rst)begin---接下頁5.3狀態機的設計
5.3.4米勒(Mealy)型狀態機設計ifrst=‘1’thenstate<=s1;---接上頁
elsif
clk'eventandclk='1'thencasestateiswhens1=>ifx_in='0'thenstate<=s2;endif;whens2=>ifx_in='1'thenstate<=s3;endif;whens3=>ifx_in='0'thenstate<=s4;endif;whens4=>ifx_in='1'thenstate<=s1;endif;whenothers=>state<=s1;endcase;endif;endprocess;---接下頁5.3狀態機的設計
5.3.4米勒(Mealy)型狀態機設計out_p:process(state)---接上頁begincasestateiswhens1=>ifx_in='0'theny<="0001";key_en<='0
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 藥品調劑相關管理制度
- 藥品防蟲防鼠管理制度
- 藥店醫保藥品管理制度
- 藥店經營模式管理制度
- 菜場熟食衛生管理制度
- 設備介質排放管理制度
- 設備廠供應商管理制度
- 設備應急維修管理制度
- 設備檢修作業管理制度
- 設備移交調撥管理制度
- 學校德育教育的有效方法研究
- 2022愛德華EST3系統SDU軟件激活設備
- 2025年上半年民航醫學中心(民航總醫院)招聘應屆畢業生64人重點基礎提升(共500題)附帶答案詳解-1
- 2025年上半年山東濟寧市任城區事業單位招聘工作人員(衛生類)161人易考易錯模擬試題(共500題)試卷后附參考答案
- 股骨頭壞死中醫護理常規
- 水穩施工技術課件
- 父母育兒壓力量表(PSI)
- 河北省部分校2024-2025學年九年級下學期開學測試歷史試題(含答案)
- 智能機器人技術研發戰略合作協議
- 233KWh 定制戶外一體柜儲能系統項目技術方案
- 2024-2030年中國電船行業前景展望及投資戰略分析報告
評論
0/150
提交評論