EDA技術(shù)與實踐-徐飛編著-第3章課件_第1頁
EDA技術(shù)與實踐-徐飛編著-第3章課件_第2頁
EDA技術(shù)與實踐-徐飛編著-第3章課件_第3頁
EDA技術(shù)與實踐-徐飛編著-第3章課件_第4頁
EDA技術(shù)與實踐-徐飛編著-第3章課件_第5頁
已閱讀5頁,還剩132頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

3.1三態(tài)門及雙向電路設(shè)計3.2分頻器電路設(shè)計3.3存儲器電路設(shè)計3.4狀態(tài)機(jī)設(shè)計3.5序列信號產(chǎn)生與檢測電路設(shè)計3.6運(yùn)算電路設(shè)計第3章數(shù)字電路VHDL設(shè)計進(jìn)級

CompanyLogo3.1三態(tài)及雙向電路設(shè)計

三態(tài)門描述雙向電路描述CompanyLogo

一、三態(tài)門描述三態(tài)電路的描述非常廣泛,在常見的數(shù)據(jù)總線、地址總線,乃至控制總線有時都需引入三態(tài)設(shè)計。三態(tài)門的描述,首先需將某信號定義為STD_LOGIC型,利用STD_LOGIC數(shù)據(jù)類型中的取值‘Z’(高阻)對信號賦值;通常采用條件信號賦值(WHEN┅ELSE)語句描述,當(dāng)使能有效時端口響應(yīng)輸入或輸出數(shù)據(jù),使能無效時端口輸出為高阻。CompanyLogo

【例3-1】

1位三態(tài)門的VHDL描述LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.All;ENTITYtri_gateISPORT(datain:INSTD_LOGIC;en:INSTD_LOGIC;

dataout:OUTSTD_LOGI);ENDtri_gate; ARCHITECTUREoneOFtri_gateISBEGIN

dataout<=datainWHENen='1'ELSE'Z';ENDone;

一、三態(tài)門描述CompanyLogo【例3-2】8位三態(tài)門電路設(shè)計(8位單向總線驅(qū)動器)DOUT[7..0]ENDIN[7..0]ENTRI_BUF8DOUT[7..0]DIN[7..0]一、三態(tài)門描述CompanyLogoLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYTri_buf8ISPORT(din:INSTD_LOGIC_VECTOR(7DOWNTO0);

en:INSTD_LOGIC;

dout:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDTri_buf8ARCHITECTUREoneOFtri_buf8ISBEGIN

dout<=dinWHENen=‘1’ELSE"ZZZZZZZZ";ENDone;8位三態(tài)門電路(8位單向總線驅(qū)動器)VHDL描述一、三態(tài)門描述CompanyLogo數(shù)據(jù)總線往往是雙向的,在進(jìn)行雙向電路設(shè)計時,端口方向應(yīng)為INOUT類型,結(jié)構(gòu)體部分對輸出信號必須進(jìn)行有條件的三態(tài)控制。

二、雙向電路描述CompanyLogo【例3-3】雙向端口信號作一個信號的輸入,作另一信號的輸出的電路描述Bidir_busfrom_coreto_coreq_inenclk二、雙向電路描述q_outq_inoutCompanyLogoLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.All;ENTITYdir_dataISPORT(

from_core:INSTD_LOGIC_VECTOR(7DOWNTO0);

to_core:OUTSTD_LOGIC_VECTOR(7DOWNTO0);en,clk:INSTD_LOGIC;

q_inout:INOUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDdir_data; ARCHITECTUREtwoOFdir_dataISSIGNALa,b:STD_LOGIC_VECTOR(7DOWNTO0);BEGIN二、雙向電路描述CompanyLogoPROCESS(en,a,q_inout)BEGINIFen='1'THENb<=q_inout;

q_inout<="ZZZZZZZZ";ELSE

q_inout<=a;b<=q_inout;ENDIF;ENDPROCESS;二、雙向電路描述PROCESS(clk)BEGINIFclk’EVENTANDclk='1'THENa<=from_core;

to_core<=b;ENDIF;ENDPROCESS;ENDtwo;CompanyLogo二、雙向電路描述例3-3的RTL電路CompanyLogo【例3-4】雙向端口信號既作信號輸入,又作信號輸出的電路。二、雙向電路描述LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.All;ENTITYdir_busISPORT(clk,rst:INSTD_LOGIC;

rw:INSTD_LOGIC;address:INSTD_LOGIC_VECTOR(1DOWNTO0);

data:INOUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDdir_bus; ARCHITECTUREtwoOFdir_busISSIGNALdata_in:STD_LOGIC_VECTOR(7DOWNTO0);SIGNALdata_out:STD_LOGIC_VECTOR(7DOWNTO0);SIGNALdata_a:STD_LOGIC_VECTOR(7DOWNTO0);SIGNALdata_b:STD_LOGIC_VECTOR(7DOWNTO0);BEGIN

data_in<=data;CompanyLogo二、雙向電路描述PROCESS(clk,rst)BEGINIFrst='1'THEN

data_a<=(OTHERS=>'0');

data_b<=(OTHERS=>'0');ELSIFclk’EVENTANDclk='1'THENIFrw='1'THEN

IFaddress="00"THEN

data_a<=data_in;ELSIFaddress="01"THEN

data_b<=data_in;ELSENULL;ENDIF;ELSENULL;ENDIF;ENDIF;ENDPROCESS;CompanyLogoPROCESS(clk)BEGINIFclk’EVENTANDclk='1'THENIFrw=‘0’THENIFaddress="00"THEN

data_out<=data_a;ELSIFaddress="01"THEN

data_out<=data_b;ELSENULL;ENDIF;ELSENULL;ENDIF;ENDIF;ENDPROCESS;Data<=data_out

WHEN(rw='0'ANDaddress(1)='0')ELSE(OTHERS=>'Z');ENDtwo;二、雙向電路描述CompanyLogo偶數(shù)分頻奇數(shù)分頻2N分頻半整數(shù)分頻數(shù)控分頻3.2分頻器電路設(shè)計CompanyLogo一、偶數(shù)分頻對時鐘進(jìn)行偶數(shù)分頻,使占空比為50%,可使用一個計數(shù)器,對輸入時鐘進(jìn)行模n(n為偶數(shù))計數(shù),在前n/2個時鐘內(nèi),使輸出為高(或低)電平,在后n/2個時鐘內(nèi)使輸出為低(或高)電平,即可實現(xiàn)對輸入時鐘的n分頻。設(shè)計思路CompanyLogo【例3-5】設(shè)計一個8分頻電路LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYfdiv8IS

GENERIC(n:INTEGER:=8);PORT(clr,clkin:INSTD_LOGIC;

clkout:OUTSTD_LOGIC);ENDfdiv8;ARCHITECTUREoneOFfdiv8ISSIGNALcnt:INTEGERRANGE0TOn-1;BEGIN一、偶數(shù)分頻CompanyLogoPROCESS(clkin,clr)BEGINIFclr='1'THENcnt<=0;ELSIFRISING_EDGE(clkin)THENIFcnt=n-1THEN

cnt<=0;ELSE

cnt<=cnt+1;ENDIF;

ENDIF;ENDPROCESS;clkout<='1'WHENcnt<INTEGER(n/2)ELSE'0';ENDone;一、偶數(shù)分頻8分頻電路其它描述方法?CompanyLogo一、偶數(shù)分頻8分頻電路的仿真波形T_out=8T_inF_in=8F_outCompanyLogo二、奇數(shù)分頻設(shè)計思路對時鐘進(jìn)行奇數(shù)分頻,如果對占空比不作要求的話,其設(shè)計方法與偶數(shù)分頻是相同的。如果要使占空比為50%,其方法是分別對輸入時鐘的上升沿和下降沿進(jìn)行模n(n為奇數(shù))計數(shù),在計數(shù)值為小于(n-1)/2時,使信號輸出為高(或低)電平,在計數(shù)值為大于等于(n-1)/2時使信號輸出為低(或高)電平,從而得到兩個占空比為(n-1)/2:n的分頻信號,然后將這兩個信號相或即可實現(xiàn)對輸入時鐘的n(n為奇數(shù))分頻。CompanyLogo【例3-6】設(shè)計一個5分頻電路(占空比2:5)LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYfdiv5aIS

GENERIC(n:INTEGER:=5);PORT(clr,clkin:INSTD_LOGIC;

Clkout:OUTSTD_LOGIC);ENDfdiv5a;ARCHITECTUREoneOFfdiv5aISSIGNALcnt:INTEGERRANGE0TOn-1;BEGIN二、奇數(shù)分頻CompanyLogoPROCESS(clkin,clr)BEGINIFclr='1'THENcnt<=0;ELSIFRISING_EDGE(clkin)THENIFcnt=n-1THEN

cnt<=0;

ELSE

cnt<=cnt+1;ENDIF;

ENDIF;ENDPROCESS;clkout<='1'WHENcnt<INTEGER(n/2)ELSE'0';ENDone;二、奇數(shù)分頻CompanyLogo5分頻電路的仿真波形(占空比2:5)二、奇數(shù)分頻T_out=5T_inF_in=5F_outCompanyLogo【例3-7】設(shè)計一個5分頻電路(占空比1:2)LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYfdiv5aISGENERIC(n:INTEGER:=5);PORT(clr,clkin:INSTD_LOGIC;

Clkout:OUTSTD_LOGIC);ENDfdiv5a;ARCHITECTUREtwoOFfdiv5bISSIGNALclka,clkb:STD_LOGIC;SIGNALcnt1,cnt2:INTEGERRANGE0TOn-1;BEGIN二、奇數(shù)分頻CompanyLogoPROCESS(clkin,clr)BEGINIFclr='1'THENcnt1<=0;ELSIF

RISING_EDGE(clkin)THENIFcnt1=n-1THENcnt1<=0;

ELSEcnt1<=cnt1+1;ENDIF;

ENDIF;ENDPROCESS;clka<='1'WHENcnt<INTEGER(n/2)ELSE'0';二、奇數(shù)分頻CompanyLogoPROCESS(clkin,clr)BEGINIFclr='1'THENcnt2<=0;ELSIF

FALLING_EDGE(clkin)THENIFcnt2=n-1THENcnt2<=0;

ELSEcnt2<=cnt2+1;ENDIF;

ENDIF;ENDPROCESS;clkb<='1'WHENcnt2<INTEGER(n/2)ELSE'0';Clkout<=clkaORclkb;ENDone;二、奇數(shù)分頻CompanyLogo5分頻電路的仿真波形(占空比1:2)

二、奇數(shù)分頻T_out=5T_inF_in=5F_out占空比1:2CompanyLogo三、2N分頻器如一個電路中需要用到多個時鐘,若輸入系統(tǒng)時鐘頻率恰為2的n次冪,則可用一個M位的二進(jìn)制計數(shù)器對輸入系統(tǒng)時鐘進(jìn)行計數(shù),該計數(shù)器第0位為輸入時鐘的二分頻,第1位為輸入時鐘的四分頻,第2位為輸入時鐘的8分頻,依此類推,第n-1位為輸入時鐘的2n分頻。CompanyLogoLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALLENTITYfdivISPORT(clk_1024,clr:INSTD_LOGIC;

clk_512,clk_64,clk_4,clk_1:OUTSTD_LOGIC);ENDfdiv;ARCHITECTUREoneOFfdivISSIGNALcnt:STD_LOGIC_VECTOR(9DOWNTO0);BEGIN三、2N分頻器【例3-8】設(shè)計一分頻器,輸入頻率為1024HZ,輸出頻率為512HZ,64HZ,4HZ,1HZ.CompanyLogoPROCESS(clk_1024,clr)BEGIN

IF(clr=‘1’)THENcnt<=(OTHERS=>’0’);ELSIFRISING_EDGE(clk_1024)THEN

cnt<=cnt+1;ENDIF;ENDPROCESS;Clk_512<=cnt(0);Clk_64<=cnt(3);Clk_4<=cnt(7);Clk_1<=cnt(9);ENDone;N位二進(jìn)制計數(shù)器,第n-1位為輸入時鐘的2n分頻三、2N分頻器CompanyLogo異或門模N計數(shù)器2分頻器

clkclk/(N-0.5)clk

/(2N-1)半整數(shù)分頻設(shè)計原理框圖四、半整數(shù)分頻器在某些場合下,用戶所需要的頻率與頻率時鐘源可能不是整數(shù)倍關(guān)系,如有一個5MHz的時鐘源,但電路中需要產(chǎn)生一個2MHz的時鐘信號,由于分頻比為2.5,因此整數(shù)分頻器將不能勝任。對于分頻系數(shù)為N-0.5的分頻器,稱為半整數(shù)分頻。下圖是一種通用的半整數(shù)分頻電路的設(shè)計框圖,由一個異或門、一個模N的計數(shù)器和一個2分頻電路構(gòu)成。CompanyLogoLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYfdiv25aISGENERIC(n:INTEGER:=3);PORT(clkin:INSTD_LOGIC;

clkout:OUTSTD_LOGIC); ENDfdiv25a;

ARCHITECTUREoneOFfdiv25aISSIGNALclk,div2:STD_LOGIC;SIGNALc_out:STD_LOGIC;SIGNALcount:INTEGERRANGE0TOn-1;BEGINclk<=clkinXORdiv2;四、半整數(shù)分頻器【例3-9】設(shè)計一個2.5分頻電路CompanyLogoPROCESS(clk)BEGIN

IF(clk'eventANDclk='1')THEN

IF(count=n-1)THENcount<=0;

c_out<='1';ELSEcount<=count+1;

c_out<='0';ENDIF;ENDIF;ENDPROCESS;

四、半整數(shù)分頻器PROCESS(c_out)BEGINIFRISING_EDGE(c_out)THENdiv2<=NOTdiv2;

ENDIF;ENDPROCESS;Clkout<=c_out;ENDone;CompanyLogo2.5分頻電路仿真波形圖四、半整數(shù)分頻器T_out=2.5T_inF_in=2.5F_out2.5分頻內(nèi)部電路CompanyLogo數(shù)控分頻器的功能就是在輸入端給定不同的輸入數(shù)據(jù)時,將對輸入的時鐘信號有不同的分頻比。數(shù)控分頻器一般是用計數(shù)值可并行預(yù)置的加法計數(shù)器完成的,即計數(shù)器不是從0開始計數(shù),而是從某個初值開始計數(shù)。初值不同,則分頻系數(shù)不同,計數(shù)器計滿后重新加載初值,根據(jù)計算器的溢出標(biāo)志控制產(chǎn)生分頻輸出信號。五、數(shù)控分頻器CompanyLogo【例3.2-5】設(shè)計一個數(shù)控分頻器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYdvfISPORT(clkin:INSTD_LOGIC;data:INSTD_LOGIC_VECTOR(7DOWNTO0);

clkout:OUTSTD_LOGIC);ENDdvf;ARCHITECTUREoneOFdvfISSIGNALfull:STD_LOGIC;SIGNALCnt1:STD_LOGIC_VECTOR(7DOWNTO0);SIGNALCnt2:STD_LOGIC;BEGIN五、數(shù)控分頻器CompanyLogoPROCESS(clkin)BEGINIFclkin'EVENTANDclkin='1'THENIFcnt1="11111111"THENcnt1<=data;full<='1';ELSEcnt1<=cnt1+1;full<='0';ENDIF;ENDIF;ENDPROCESS;PROCESS(full)BEGIN

IFfull'EVENTANDfullL='1'THEN

cnt2<=NOTcnt2;

ENDIF;ENDPROCESS;

clkout<=cnt2;ENDone;五、數(shù)控分頻器CompanyLogo五、數(shù)控分頻器數(shù)控分頻電路的仿真波形圖CompanyLogoRAM的設(shè)計FIFO的設(shè)計LIFO的設(shè)計3.3存儲器電路設(shè)計CompanyLogoRAM是并行寄存器的集合,主要用于數(shù)據(jù)存儲。數(shù)據(jù)可被寫入任意內(nèi)部寄存器單元,也可從任意內(nèi)部寄存器單元讀出;每個寄存器單元對應(yīng)有一個地址,由地址線確定對某個寄存器單元進(jìn)行數(shù)據(jù)讀寫;RAM在時鐘和寫使能有效時,將外部數(shù)據(jù)寫入某地址對應(yīng)的單元;在時鐘和讀使能有效時,將某地址對應(yīng)單元的數(shù)據(jù)讀出;RAM有單口RAM(讀寫地址線合用)和雙口RAM(讀寫地址線分開)之分。一、RAM設(shè)計CompanyLogo一、RAM設(shè)計【例3-11】16×

8的單口RAM設(shè)計LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.All;USEIEEE.STD_LOGIC_UNSIGNED.All;ENTITYs_ramISPORT(addr:INSTD_LOGIC_VECTOR(3DOWNTO0);

clk:INSTD_LOGIC;

wr:INSTD_LOGIC;

data_in:INSTD_LOGIC_VECTOR(7DOWNTO0);

data_out:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDs_ram; ARCHITECTUREoneOFs_ramISTYPEmemISARRY(15DOWNTO0)OFSTD_LOGIC_VECTOR(7DOWNTO0);自定義一維數(shù)組類型,16個元素,每個元素的位寬為8位。CompanyLogo一、RAM設(shè)計SIGNALram_mem:mem;BEGINPROCESS(clk)BEGINIFclk’EVENTANDclk=’1’THENIFwr='1'THEN

ram_mem(CONV_INTEGER(addr))<=data_in;

ENDIF;ENDIF;ENDPROCESS;data_out<=ram_mem(CONV_INTEGER(addr));ENDone;二進(jìn)制數(shù)轉(zhuǎn)換為整數(shù)函數(shù)寫入數(shù)據(jù)輸出數(shù)據(jù)CompanyLogo【例3.3-2】64*8的雙口RAM設(shè)計一、RAM設(shè)計LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.All;USEIEEE.STD_LOGIC_UNSIGNED.All;ENTITYd_ramISPORT(w_addr:INSTD_LOGIC_VECTOR(5DOWNTO0);

r_addr:INSTD_LOGIC_VECTOR(3DOWNTO0);

clk:INSTD_LOGIC;

wr:INSTD_LOGIC;

data_in:INSTD_LOGIC_VECTOR(7DOWNTO0);

data_out:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDd_ram; ARCHITECTUREtwoOFd_ramISTYPEdmemISARRY(63DOWNTO0)OFSTD_LOGIC_VECTOR(7DOWNTO0);CompanyLogoSIGNALdram_mem:dmem;SIGNALread_adder:STD_LOGIC_VECTOR(3DOWNTO0);BEGINPROCESS(clk)BEGINIFclk'EVENTANDclk='1'THENIFwr='1'THEN

dram_mem(CONV_INTEGER(w_addr))<=data_in;

ENDIF;

read_addr<=r_addrENDIF;ENDPROCESS;data_out<=dram_mem(CONV_INTEGER(read_addr));

ENDtwo;一、RAM設(shè)計CompanyLogo二、FIFO設(shè)計FIFO(firstin,firstout)是隊列數(shù)據(jù)存儲的寄存器;FIFO對數(shù)據(jù)的存儲與讀取是先進(jìn)先出,即數(shù)據(jù)在時鐘和一定的使能控制下,逐個寫入隊列,然后按照寫入的順序逐個讀出。FIFO不但可用來存貯數(shù)據(jù),有時也可用于時鐘不同的模塊之間進(jìn)行數(shù)據(jù)通信。如:有甲、乙兩模塊,甲在時鐘A的控制下進(jìn)行數(shù)據(jù)收發(fā),乙在時鐘B的控制下進(jìn)行數(shù)據(jù)收發(fā),這兩個模塊間是不能直接連接進(jìn)行數(shù)據(jù)通信的。此時可用FIFO連接這兩個模塊,進(jìn)行異步時鐘的同步,即甲模塊按時鐘A的時序?qū)IFO寫數(shù)據(jù),數(shù)據(jù)存到一定狀態(tài)后,發(fā)出標(biāo)志信號,乙模塊接到標(biāo)志信號后再按時鐘B從FIFO讀數(shù)據(jù),這樣就可完成這兩個模塊間的數(shù)據(jù)通信。CompanyLogo二、FIFO設(shè)計【例3-13】字寬為8,深度為16的FIFO設(shè)計LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.All;USEIEEE.STD_LOGIC_UNSIGNED.All;ENTITYfifoISPORT(clk:INSTD_LOGIC;

rst:INSTD_LOGIC;

wr:INSTD_LOGIC;rd:INSTD_LOGIC;

data_in:INSTD_LOGIC_VECTOR(7DOWNTO0);

empt:OUTSTD_LOGIC;--存儲狀態(tài)空標(biāo)志full:OUTSTD_LOGIC;--存儲狀態(tài)滿標(biāo)志

data_out:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDfifo; CompanyLogoARCHITECTUREthreeOFfifoISTYPEfifo_typeISARRY(15DOWNTO0)OFSTD_LOGIC_VECTOR(7DOWNTO0);SIGNALfifo_mem:fifoy_type;--定義存貯單元SIGNALrd_ptr:INTEGERRANGE0TO15;--定義讀指針SIGNALwr_ptr:INTEGERRANGE0TO15;--定義寫指針BEGINPROCESS(clk)VARIABLEcnt:INTEGERRANGE0TO16;--存貯單元使用統(tǒng)計BEGINIFclk’EVENTANDclk='1'THEN二、FIFO設(shè)計CompanyLogoIFrst='1'THEN--復(fù)位

FORiIN15DOWNTO0LOOP-–對所有存貯單元清零

fifo_mem(i)<=(OTHERS=>'0');

ENDLOOP;

rd_ptr<=0;--讀指針復(fù)位

wr_ptr<=0;--寫指針復(fù)位

cnt:=0;--統(tǒng)計計數(shù)器復(fù)位

empt<='1';--空標(biāo)志位置1full<='0';--滿標(biāo)志位置0ELSIFwr='1'THEN--寫使能有效

fifo_mem(wr_ptr)<=data_in;--寫入數(shù)據(jù)

IFcnt<16THEN–-統(tǒng)計計數(shù)器未滿(有空存貯單元)

cnt:=cnt+1;--統(tǒng)計計數(shù)器加1IFwr_ptr<15THENwr_ptr<=wr_ptr+1;ELSEwr_ptr<=0;--寫指針清零

ENDIF;ENDIF;

二、FIFO設(shè)計CompanyLogoELSIFrd='1'THEN--讀使能有效

IFcnt>0THEN--有單元數(shù)據(jù)可讀

cnt:=cnt-1;--統(tǒng)計計數(shù)器減1IFrd_ptr<15THENrd_ptr<=rd_ptr+1;

--讀指針小于15,則加1ELSErd_ptr<=0;--讀指針清零

ENDIF;ENDIF;ENDIF;IFcnt=0THEN

empt<='1';--統(tǒng)計計數(shù)器為0,發(fā)出存儲狀態(tài)為空標(biāo)志ELSE

empt<='0';ENDIF;二、FIFO設(shè)計CompanyLogoIFcnt=16THENfull<='1';--統(tǒng)計計數(shù)器為16,發(fā)出存儲狀態(tài)為滿標(biāo)志

ELSEfull<='0';ENDIF;ENDIF;ENDPROCESS;data_out<=fifo_mem(rd_ptr)WHENrd='1'ELSE(OTHERS=>'Z');--讀使能有效,將數(shù)據(jù)送到數(shù)據(jù)輸出端,否則為高阻ENDthree;二、FIFO設(shè)計CompanyLogoLIFO(last

in,firstout)為后進(jìn)先出存貯器,是一種堆棧形式的數(shù)據(jù)存儲的寄存器,即數(shù)據(jù)在時鐘和一定的使能控制下,逐個寫入存儲器,而讀數(shù)據(jù)時則是逆向讀出。讀寫用同一個指針。其程序編寫思路與FIFO設(shè)計方法相似。三、LIFO設(shè)計CompanyLogo三、LIFO設(shè)計【例3-14】字寬為8,深度為16的LIFO設(shè)計LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.All;USEIEEE.STD_LOGIC_UNSIGNED.All;ENTITYlifoISPORT(clk:INSTD_LOGIC;

rst:INSTD_LOGIC;

wr:INSTD_LOGIC;-rd:INSTD_LOGIC;

data_in:INSTD_LOGIC_VECTOR(7DOWNTO0);

empt:OUTSTD_LOGIC;full:OUTSTD_LOGIC;

data_out:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDlifo; CompanyLogoARCHITECTUREoneOFlifoISTYPElifo_typeISARRY(15DOWNTO0)OFSTD_LOGIC_VECTOR(7DOWNTO0);SIGNALlifo_mem:lifo_type;--定義存貯單元SIGNALrw_ptr:INTEGERRANGE0TO15;--定義讀寫指針BEGINPROCESS(clk)VARIABLEcnt:INTEGERRANGE0TO16;--記錄存貯單元使用BEGINIFclk'EVENTANDclk='1'THEN三、LIFO設(shè)計CompanyLogo

IFrst='1'THEN--復(fù)位

FORiIN15DOWNTO0LOOP–-對所有存貯單元清零

lifo_mem(i)<=(OTHERS=>‘0’);ENDLOOP;

rw_ptr<=0;--讀寫指針復(fù)位

cnt:=0;--記錄復(fù)位

empt<='1';--空標(biāo)志位置1full<='0';--滿標(biāo)志位置0ELSIFwr='1'THEN--寫使能有效

fifo_mem(rw_ptr)<=data_in;--寫入數(shù)據(jù)

IFcnt<16THEN–-有空存貯單元

cnt:=cnt+1;--記錄指針加1IFrw_ptr<15THEN

rw_ptr<=rw_ptr+1;--讀寫指針小于15,則加1ENDIF;ENDIF;三、LIFO設(shè)計CompanyLogoELSIFrd='1'THEN--讀使能有效

IFcnt>0THEN--有單元數(shù)據(jù)可讀

cnt:=cnt-1;--記錄指針減1IFrw_ptr>0THEN

rw_ptr<=rw_ptr-1;--讀寫指針大于0,則減1ENDIF;ENDIF;ENDIF;IFcnt=0THEN

empt<='1';--記錄指針為0,發(fā)出存儲狀態(tài)為空標(biāo)志ELSE

empt<='0';ENDIF;三、LIFO設(shè)計CompanyLogoIFcnt=16THENfull<='1';--記錄指針為16,發(fā)出存儲狀態(tài)為滿標(biāo)志

ELSEfull<='0';ENDIF;ENDIF;ENDPROCESS;data_out<=lifo_mem(rw_ptr)WHENrd=‘1’ELSE(OTHERS=>‘Z’);--讀使能有效,將數(shù)據(jù)送到數(shù)據(jù)輸出端,否則為高阻(不占用數(shù)據(jù)線)。ENDone;三、LIFO設(shè)計CompanyLogo數(shù)字類型定義語句狀態(tài)機(jī)的結(jié)構(gòu)Moore狀態(tài)機(jī)描述Mealy狀態(tài)機(jī)描述3.4狀態(tài)機(jī)設(shè)計CompanyLogo一、數(shù)據(jù)類型定義語句TYPE數(shù)據(jù)類型名IS數(shù)據(jù)類型定義[OF基本數(shù)據(jù)類型];1、表達(dá)格式2、格式說明(1)數(shù)據(jù)類型名:由設(shè)計者自定,要符合標(biāo)識符的規(guī)定;(2)數(shù)據(jù)類型定義:用來描述所定義的數(shù)據(jù)類型的表達(dá)方式和表達(dá)內(nèi)容;(3)[OF基本數(shù)據(jù)類型]:一般為已有的標(biāo)準(zhǔn)預(yù)定義數(shù)據(jù)類型,該部分不是必須的;(4)數(shù)據(jù)類型定義語句一般放在結(jié)構(gòu)體中的說明部分。CompanyLogo例:

TYPEst

ISARRAY(0TO15)OFSTD_LOGIC;TYPEweekIS(sun,mon,tue,wed,thu,fri,sat);

TYPEm_stIS(st0,st1,st2,st3,st4,st5);SIGNALpresent_st,next_st:m_st

;枚舉數(shù)據(jù)類型是一種特殊的數(shù)據(jù)類型,一般用文字符號表示,主要是為了便于設(shè)計、閱讀、編譯與優(yōu)化。在進(jìn)行電路綜合時,是用一組二進(jìn)制數(shù)來編碼的,其實際電路是由一組觸發(fā)器實現(xiàn)的。一、數(shù)據(jù)類型定義語句CompanyLogo1、狀態(tài)機(jī)的說明部分

狀態(tài)機(jī)的說明部分一般放在結(jié)構(gòu)體ARCHITECTURE和BEGIN之間;首先使用TYPE語句定義新的數(shù)據(jù)類型,一般將該數(shù)據(jù)類型定義為枚舉型,其元素采用文字符號表示,作為狀態(tài)機(jī)的狀態(tài)名。然后用SIGNAL語句定義狀態(tài)變量(如現(xiàn)態(tài)和次態(tài)),將其數(shù)據(jù)類型定義為由TYPE語句定義的新數(shù)據(jù)類型。

二、狀態(tài)機(jī)的結(jié)構(gòu)

例:ARCHITECTURE┅OF┅ISTYPEnew_stateIS(s0,s1,s2,s3,s4);SIGNALpresent_state,next_state:new_state;┇BEGIN┇CompanyLogo二、狀態(tài)機(jī)的結(jié)構(gòu)

2、狀態(tài)機(jī)的進(jìn)程部分

P1:PROCESS(clk,rst)BEGINIF(rst='1')THEN--復(fù)位,由現(xiàn)態(tài)(present_state)轉(zhuǎn)入初始狀態(tài)

present_state<=初始狀態(tài);ELSIF(clk'EVENTANDclk='1')THEN

present_state<=next_state;

--時鐘上升沿時,由現(xiàn)態(tài)(present_state)轉(zhuǎn)入次態(tài)(next_state)

ENDIF;ENDPROCESSP1;(1)三進(jìn)程狀態(tài)機(jī)基本結(jié)構(gòu)進(jìn)程1:同步時序進(jìn)程,在時鐘驅(qū)動下,進(jìn)行狀態(tài)轉(zhuǎn)換CompanyLogoP2:PROCESS(present_state,輸入信號)BEGINCASEpresent_stateISWHEN初始狀態(tài)=>IF(轉(zhuǎn)換條件)THEN(給次態(tài)賦值);┇ENDIF;WHEN--其他所有狀態(tài)轉(zhuǎn)換的描述┇ENDCASE;ENDPROCESSP2;二、狀態(tài)機(jī)的結(jié)構(gòu)

進(jìn)程2:狀態(tài)轉(zhuǎn)移進(jìn)程,根據(jù)現(xiàn)態(tài)和輸入條件,給次態(tài)賦值CompanyLogoP3:PROCESS(present_state,輸入信號)--(Mealy型)BEGINCASEpresent_stateISWHEN初始狀態(tài)=>IF(輸入信號的變化)THEN(輸出賦值);--輸出值由當(dāng)前狀態(tài)值與輸入信號共同決定┇ENDIF;WHEN--其他所有狀態(tài)下輸出的描述┇ENDCASE;ENDPROCESSP3;二、狀態(tài)機(jī)的結(jié)構(gòu)

進(jìn)程3:輸出描述進(jìn)程,給輸出賦值根據(jù)現(xiàn)態(tài)給輸出賦值為Moore型狀態(tài)機(jī);根據(jù)現(xiàn)態(tài)和輸入條件給輸出賦值為Mealy型狀態(tài)機(jī)CompanyLogo或者:P3:PROCESS(present_state,輸入信號)--(Moore型)BEGINCASEpresent_stateISWHEN初始狀態(tài)=>(輸出賦值);--輸出值僅由當(dāng)前狀態(tài)值決定WHEN--其他所有狀態(tài)下輸出的描述┇ENDCASE;ENDPROCESSP3;二、狀態(tài)機(jī)的結(jié)構(gòu)

CompanyLogoP1:PROCESS(clk,rst)BEGINIF(rst='1')THEN

present_state<=初始狀態(tài);

--復(fù)位,由現(xiàn)態(tài)(present_state)轉(zhuǎn)入初始狀態(tài)ELSIF(clk'EVENTANDclk='1')THEN

present_state<=next_state;

--時鐘上升沿時,由現(xiàn)態(tài)(present_state)轉(zhuǎn)入次態(tài)(next_state)

ENDIF;ENDPROCESSP1;(2)兩進(jìn)程狀態(tài)機(jī)基本結(jié)構(gòu)二、狀態(tài)機(jī)的結(jié)構(gòu)

進(jìn)程1:同步時序進(jìn)程,在時鐘驅(qū)動下,進(jìn)行狀態(tài)轉(zhuǎn)換CompanyLogoP2:PROCESS(present_state,輸入信號)BEGINCASEpresent_stateISWHEN初始狀態(tài)=>IF(轉(zhuǎn)換條件)THEN(次態(tài)賦值);ENDIF;IF(轉(zhuǎn)換條件)THEN(輸出賦值);ENDIF;┇--其他所有狀態(tài)轉(zhuǎn)換的描述,其他所有狀態(tài)下輸出的描述

ENDCASE;ENDPROCESSP2;二、狀態(tài)機(jī)的結(jié)構(gòu)

進(jìn)程2:狀態(tài)轉(zhuǎn)移與輸出描述進(jìn)程,給次態(tài)和輸出賦值CompanyLogoPROCESS(clk,rst)BEGINIF(rst='1')THENcurrent_state<=初始狀態(tài);(輸出賦初值);ELSIF(clk'EVENTANDclk='1')thenCASEcurrent_stateISWHEN初始狀態(tài)=>IF(轉(zhuǎn)換條件)THEN(當(dāng)前狀態(tài)賦值);ENDIF;IF(轉(zhuǎn)換條件)THEN(輸出賦值);ENDIF;┇--其他所有狀態(tài)轉(zhuǎn)換的描述,其他所有狀態(tài)下輸出的描述

ENDCASE;ENDIF;ENDPROCESS;(3)單進(jìn)程狀態(tài)機(jī)基本結(jié)構(gòu)二、狀態(tài)機(jī)的結(jié)構(gòu)

CompanyLogo狀態(tài)機(jī)是一種描述數(shù)字控制系統(tǒng)的方法,主要用來構(gòu)成順序控制模型。狀態(tài)機(jī)克服了純硬件數(shù)字系統(tǒng)順序控制方式不靈活的缺點(diǎn);狀態(tài)機(jī)易構(gòu)成性能良好的同步時序邏輯模塊。狀態(tài)機(jī)設(shè)計方案相對固定,結(jié)構(gòu)清晰,易于理解,易于修改,是數(shù)字系統(tǒng)中一種最常用的設(shè)計方法。二、狀態(tài)機(jī)的結(jié)構(gòu)

狀態(tài)機(jī)特點(diǎn)CompanyLogo對一個實際工程,若要用狀態(tài)機(jī)實現(xiàn)控制,首先要對實現(xiàn)工程的控制器功能進(jìn)行分析,將控制功能分解為若干步,每一步對應(yīng)一個狀態(tài),確定各狀態(tài)間轉(zhuǎn)換的輸入條件是什么,輸出是如何變化的,并將這種控制關(guān)系用狀態(tài)轉(zhuǎn)換圖來表示。然后根據(jù)狀態(tài)轉(zhuǎn)換圖來描述其狀態(tài)機(jī)控制程序代碼。Moore型狀態(tài)機(jī):輸出僅由其所處狀態(tài)決定,與當(dāng)前輸入無關(guān)。從輸出時序上看,只有當(dāng)時鐘信號變化使?fàn)顟B(tài)發(fā)生變化時才導(dǎo)致輸出的變化,因此Moore型屬于同步輸出狀態(tài)機(jī)。

mealy型狀態(tài)機(jī):輸出信號值根據(jù)當(dāng)前狀態(tài)值和外部輸入信號確定;一旦輸入信號或狀態(tài)發(fā)生變化時,輸出信號立即發(fā)生變化。狀態(tài)機(jī)設(shè)計方法狀態(tài)機(jī)設(shè)計類型二、狀態(tài)機(jī)的結(jié)構(gòu)

CompanyLogoSt3/1101St0/0000St1/1000St2/0110a=01a=10/11狀態(tài)/輸出輸入a=00/01a=10a=11a=00a=11/00a=10a=00/11a=01a=10/01rst=1【例3-15】如下圖是一個Moore型狀態(tài)轉(zhuǎn)換圖,試采用單進(jìn)程狀態(tài)機(jī)結(jié)構(gòu)進(jìn)行描述。三、Moore狀態(tài)機(jī)描述CompanyLogoLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmoore1ISPORT(a:INSTD_LOGIC_VECTOR(1DOWNTO0);

clk,rst:INSTD_LOGIC;q:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDmoore1;ARCHITECTUREoneOFmoore1ISTYPEst_typeIS(st0,st1,st2,st3);SIGNALc_st:st_type;BEGIN

PROCESS(clk,rst)BEGINIFrst='1'THENc_st<=st0;三、Moore狀態(tài)機(jī)描述CompanyLogoELSIFclk'EVENTANDclk='1'THENCASEc_stISWHENst0=>q<="0000";IFa="01"THENc_st<=st1;ELSIFa="10"THENc_st<=st2;ELSEc_st<=st0;ENDIF;WHENst1=>q<="1000";IFa="10"ORa="11"THENc_st<=st2;ELSEc_st<=st1;ENDIF;三、Moore狀態(tài)機(jī)描述CompanyLogoWHENst2=>q<="0110";IFa="00"ORa="11“THENc_st<=st3;ELSIFa="10"THENc_st<=st1;ELSEc_st<=st2;ENDIF;WHENst3=>q<="1101";IFa="11"THENc_st<=st0;ELSIFa="00"THENc_st<=st1;ELSEc_st<=st3;ENDIF;WHENOTHERS=>q<="0000";

c_st<=st0;ENDCASE;ENDIF;ENDPROCESS;ENDone;三、Moore狀態(tài)機(jī)描述CompanyLogo【例3-16】上圖二進(jìn)程狀態(tài)機(jī)結(jié)構(gòu)進(jìn)行描述。ARCHITECTUREtwoOFmoore2ISTYPEst_typeIS(st0,st1,st2,st3);SIGNALp_st,n_st:st_type;BEGINP1:PROCESS(clk,rst)BEGINIFrst='1'THENp_st<=st0;ELSIFclk'EVENTANDclk='1'THEN

p_st<=n_st;ENDIF;ENDPROCESSP1;三、Moore狀態(tài)機(jī)描述CompanyLogoP2:PROCESS(p_st,a)BEGINCASEp_stISWHENst0=>q<="0000";IFa="01"THENn_st<=st1;ELSIFa="10"THENn_st<=st2;ELSEn_st<=st0;ENDIF;WHENst1=>q<="1000";IFa="10"ORa="11"THENn_st<=st2;ELSEn_st<=st1;ENDIF;三、Moore狀態(tài)機(jī)描述CompanyLogoWHENst2=>q<="0110";IFa="00"ORa="11"THENn_st<=st3;ELSIFa="10"THENn_st<=st1;ELSEn_st<=st2;ENDIF;WHENst3=>q<="1101";IFa="11"THENn_st<=st0;ELSIFa="00"THENn_st<=st1;ELSEn_st<=st3;ENDIF;WHENOTHERS=>q<="0000";

n_st<=st0;ENDCASE;ENDPROCESSP2;ENDtwo;三、Moore狀態(tài)機(jī)描述CompanyLogo【例3-17】上圖三進(jìn)程狀態(tài)機(jī)結(jié)構(gòu)進(jìn)行描述。ARCHITECTUREthreeOFmoore3ISTYPEst_typeIS(st0,st1,st2,st3);SIGNALp_st,n_st:st_type;BEGINP1:PROCESS(clk,rst)BEGINIFrst='1'THENp_st<=st0;ELSIFclk'EVENTANDclk='1'THEN

p_st<=n_st;ENDIF;ENDPROCESSP1;三、Moore狀態(tài)機(jī)描述CompanyLogoP2:PROCESS(p_st,a)BEGINCASEp_stISWHENst0=>IFa="01"THENn_st<=st1;ELSIFa="10"THENn_st<=st2;ELSEn_st<=st0;ENDIF;WHENst1=>IFa="10"ORa="11"THENn_st<=st2;ELSEn_st<=st1;ENDIF;三、Moore狀態(tài)機(jī)描述CompanyLogoWHENst2=>IFa="00"ORa="11"THENn_st<=st3;ELSIFa="10"THENn_st<=st1;ELSEn_st<=st2;ENDIF;WHENst3=>IFa="11"THENn_st<=st0;ELSIFa="00"THENn_st<=st1;ELSEn_st<=st3;ENDIF;WHENOTHERS=>n_st<=st0;ENDCASE;ENDPROCESSP2;三、Moore狀態(tài)機(jī)描述CompanyLogoP3:PROCESS(p_st)BEGINCASEp_stISWHENst0=>q<="0000";WHENst1=>q<="1000";WHENst2=>q<="0110";WHENst3=>q<="1101";WHENOTHERS=>q<="0000";ENDCASE;ENDPROCESSP3;ENDthree;三、Moore狀態(tài)機(jī)描述CompanyLogoSt3St0St1St201/000110/100011/0011狀態(tài)輸入/輸出00/101001/100110/001011/111100/110011,00/111010/010000/000011/110101/011110/010101/0110rst=1四、Mealy狀態(tài)機(jī)描述【例3-18】下圖是一個Mealy型的狀態(tài)轉(zhuǎn)換圖,試采用單進(jìn)程狀態(tài)機(jī)結(jié)構(gòu)進(jìn)行描述。CompanyLogoLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmealy1ISPORT(a:INSTD_LOGIC_VECTOR(1DOWNTO0);

clk,rst:INSTD_LOGIC;q:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDmealy1;ARCHITECTUREoneOFmealy1ISTYPEst_typeIS(st0,st1,st2,st3);SIGNALc_st:st_type;BEGINPROCESS(clk,rst)BEGINIFrst='1'THENc_st<=st0;ELSIFclk'EVENTANDclk='1'THEN四、Mealy狀態(tài)機(jī)描述CompanyLogo

CASEc_stISWHENst0=>IFa="00"THENc_st<=st0;q<="0000";ELSIFa="01"THENc_st<=st1;q<="0001";ELSIFa="10"THENc_st<=st2;q<="0010"ELSEc_st<=st0;q<="1101"ENDIF;WHENst1=>IFa="00"THENc_st<=st1;q<="1010";ELSIFa="01"THENc_st<=st1;q<="1001";ELSIFa="10"THENc_st<=st2;q<="1000"ELSEc_st<=st2;q<="0011"ENDIF;四、Mealy狀態(tài)機(jī)描述CompanyLogoWHENst2=>IFa="01"THENc_st<=st2;q<="0111";ELSIFa="10"THENc_st<=st1;q<="0100";ELSEc_st<=st3;q<="1110"ENDIF;WHENst3=>IFa="00"THENc_st<=st1;q<="1100";ELSIFa="01"THENc_st<=st3;q<="0110";ELSIFa="10"THENc_st<=st3;q<="0101"ELSEc_st<=st0;q<="1111"ENDIF;WHENOTHERS=>q<="0000";c_st<=st0;ENDCASE;ENDIF;ENDPROCESS;ENDone;四、Mealy狀態(tài)機(jī)描述CompanyLogo【例3-19】上圖用二進(jìn)程狀態(tài)機(jī)結(jié)構(gòu)進(jìn)行描述。ARCHITECTUREtwoOFmealy2ISTYPEst_typeIS(st0,st1,st2,st3);SIGNALp_st,n_st:st_type;BEGINP1:PROCESS(clk,rst)BEGINIFrst='1'THENp_st<=st0;ELSIFclk'EVENTANDclk='1'THEN

p_st<=n_st;ENDIF;ENDPROCESSP1;四、Mealy狀態(tài)機(jī)描述CompanyLogoP2:PROCESS(p_st,a)BEGINCASEp_stISWHENst0=>IFa="00"THENn_st<=st0;q<="0000";ELSIFa="01"THENn_st<=st1;q<="0001";ELSIFa="10"THENn_st<=st2;q<="0010"ELSEn_st<=st0;q<="1101"ENDIF;WHENst1=>IFa="00"THENn_st<=st1;q<="1010";ELSIFa="01"THENn_st<=s

溫馨提示

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

評論

0/150

提交評論