第7章-有限狀態(tài)機設(shè)計與LPM應(yīng)用_第1頁
第7章-有限狀態(tài)機設(shè)計與LPM應(yīng)用_第2頁
第7章-有限狀態(tài)機設(shè)計與LPM應(yīng)用_第3頁
第7章-有限狀態(tài)機設(shè)計與LPM應(yīng)用_第4頁
第7章-有限狀態(tài)機設(shè)計與LPM應(yīng)用_第5頁
已閱讀5頁,還剩102頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第7章有限狀態(tài)機設(shè)計與LPM應(yīng)用EDA技術(shù)實用教程7.1一般有限狀態(tài)機的設(shè)計7.1.1用戶自定義數(shù)據(jù)類型定義語句TYPE語句用法如下:TYPE數(shù)據(jù)類型名IS數(shù)據(jù)類型定義OF基本數(shù)據(jù)類型;或TYPE數(shù)據(jù)類型名IS數(shù)據(jù)類型定義;以下列出了兩種不同的定義方式:TYPEst1ISARRAY(0TO15)OFSTD_LOGIC;TYPEweekIS(sun,mon,tue,wed,thu,fri,sat);7.1一般有限狀態(tài)機的設(shè)計7.1.1用戶自定義數(shù)據(jù)類型定義語句TYPEm_stateIS(st0,st1,st2,st3,st4,st5);SIGNALpresent_state,next_state:m_state;布爾數(shù)據(jù)類型的定義語句是:TYPEBOOLEANIS(FALSE,TRUE);TYPEmy_logicIS('1','Z','U','0');SIGNALs1:my_logic;s1<='Z';7.1一般有限狀態(tài)機的設(shè)計7.1.1用戶自定義數(shù)據(jù)類型定義語句子類型SUBTYPE的語句格式如下:SUBTYPE子類型名IS基本數(shù)據(jù)類型RANGE約束范圍;

SUBTYPEdigitsISINTEGERRANGE0to9;7.1.2為什么要使用狀態(tài)機7.1一般有限狀態(tài)機的設(shè)計有限狀態(tài)機克服了純硬件數(shù)字系統(tǒng)順序方式控制不靈活的缺點。狀態(tài)機的結(jié)構(gòu)模式相對簡單。狀態(tài)機容易構(gòu)成性能良好的同步時序邏輯模塊。狀態(tài)機的VHDL表述豐富多樣。在高速運算和控制方面,狀態(tài)機更有其巨大的優(yōu)勢。就可靠性而言,狀態(tài)機的優(yōu)勢也是十分明顯的。7.1.3一般有限狀態(tài)機的設(shè)計7.1一般有限狀態(tài)機的設(shè)計1.說明部分ARCHITECTURE...ISTYPEFSM_STIS(s0,s1,s2,s3);SIGNALcurrent_state,next_state:FSM_ST;...7.1.3一般有限狀態(tài)機的設(shè)計7.1一般有限狀態(tài)機的設(shè)計2.主控時序進程圖7-1

一般狀態(tài)機結(jié)構(gòu)框圖工作示意圖3.主控組合進程7.1.3一般有限狀態(tài)機的設(shè)計

控組合進程的任務(wù)是根據(jù)外部輸入的控制信號(包括來自狀態(tài)機外部的信號和來自狀態(tài)機內(nèi)部其它非主控的組合或時序進程的信號),或(和)當前狀態(tài)的狀態(tài)值確定下一狀態(tài)(next_state)的取向,即next_state的取值內(nèi)容,以及確定對外輸出或?qū)?nèi)部其它組合或時序進程輸出控制信號的內(nèi)容。7.1一般有限狀態(tài)機的設(shè)計4.輔助進程【例7-1】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYs_machineISPORT(clk,reset:INSTD_LOGIC;state_inputs:INSTD_LOGIC_VECTOR(0TO1);comb_outputs:OUTINTEGERRANGE0TO15);ENDs_machine;ARCHITECTUREbehvOFs_machineISTYPEFSM_STIS(s0,s1,s2,s3);SIGNALcurrent_state,next_state:FSM_ST;BEGINREG:PROCESS(reset,clk)BEGINIFreset='1'THENcurrent_state<=s0;ELSIFclk='1'ANDclk'EVENTTHENcurrent_state<=next_state;ENDIF;ENDPROCESS;COM:PROCESS(current_state,state_Inputs)接下頁BEGINCASEcurrent_stateISWHENs0=>comb_outputs<=5;IFstate_inputs="00"THENnext_state<=s0;ELSEnext_state<=s1;ENDIF;WHENs1=>comb_outputs<=8;IFstate_inputs="00"THENnext_state<=s1;ELSEnext_state<=s2;ENDIF;WHENs2=>comb_outputs<=12;IFstate_inputs="11"THENnext_state<=s0;ELSEnext_state<=s3;ENDIF;WHENs3=>comb_outputs<=14;IFstate_inputs="11"THENnext_state<=s3;ELSEnext_state<=s0;ENDIF;ENDcase;ENDPROCESS;ENDbehv;接上頁7.1.3一般有限狀態(tài)機的設(shè)計7.1一般有限狀態(tài)機的設(shè)計4.輔助進程圖7-2例7-1狀態(tài)機的工作時序圖

7.2.1多進程有限狀態(tài)機

7.2Moore型有限狀態(tài)機的設(shè)計圖7-3ADC0809工作時序

7.2.1多進程有限狀態(tài)機

7.2Moore型有限狀態(tài)機的設(shè)計圖7-4控制ADC0809采樣狀態(tài)圖

7.2.1多進程有限狀態(tài)機

圖7-5采樣狀態(tài)機結(jié)構(gòu)框圖

【例7-2】LIBRARYIEEE;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYADCINTISPORT(D:INSTD_LOGIC_VECTOR(7DOWNTO0);CLK,EOC:INSTD_LOGIC;ALE,START,OE,ADDA,LOCK0:OUTSTD_LOGIC;Q:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDADCINT;ARCHITECTUREbehavOFADCINTISTYPEstatesIS(st0,st1,st2,st3,st4);--定義各狀態(tài)子類型

SIGNALcurrent_state,next_state:states:=st0;SIGNALREGL :STD_LOGIC_VECTOR(7DOWNTO0);SIGNALLOCK :STD_LOGIC;--轉(zhuǎn)換后數(shù)據(jù)輸出鎖存時鐘信號

BEGINADDA<='1';--當ADDA<='0',模擬信號進入0809通道0;當ADDA<='1',則進入通道1Q<=REGL;LOCK0<=LOCK;COM:PROCESS(current_state,EOC)BEGIN--規(guī)定各狀態(tài)轉(zhuǎn)換方式

接下頁7.2.1三進程有限狀態(tài)機

CASEcurrent_stateISWHENst0=>ALE<='0';START<='0';LOCK<='0';OE<='0';next_state<=st1;--0809初始化

WHENst1=>ALE<='1';START<='1';LOCK<='0';OE<='0';next_state<=st2;--啟動采樣

WHENst2=>ALE<='0';START<='0';LOCK<='0';OE<='0';IF(EOC='1')THENnext_state<=st3;--EOC=1表明轉(zhuǎn)換結(jié)束

ELSEnext_state<=st2;--轉(zhuǎn)換未結(jié)束,繼續(xù)等待

ENDIF;WHENst3=>ALE<='0';START<='0';LOCK<='0';OE<='1';next_state<=st4;--開啟OE,輸出轉(zhuǎn)換好的數(shù)據(jù)

WHENst4=>ALE<='0';START<='0';LOCK<='1';OE<='1';next_state<=st0;WHENOTHERS=>next_state<=st0;ENDCASE;ENDPROCESSCOM;REG:PROCESS(CLK)

BEGINIF(CLK'EVENTANDCLK='1')THENcurrent_state<=next_state;ENDIF;ENDPROCESSREG;--由信號current_state將當前狀態(tài)值帶出此進程:REGLATCH1:PROCESS(LOCK)--此進程中,在LOCK的上升沿,將轉(zhuǎn)換好的數(shù)據(jù)鎖入

BEGINIFLOCK='1'ANDLOCK'EVENTTHENREGL<=D;ENDIF;ENDPROCESSLATCH1;ENDbehav;

7.2.1多進程有限狀態(tài)機

7.2Moore型有限狀態(tài)機的設(shè)計圖7-6ADC0809采樣狀態(tài)機工作時序

【例7-3】COM1:PROCESS(current_state,EOC)BEGINCASEcurrent_stateISWHENst0=>next_state<=st1;WHENst1=>next_state<=st2;WHENst2=>IF(EOC='1')THENnext_state<=st3; ELSEnext_state<=st2;ENDIF;WHENst3=>next_state<=st4;--開啟OEWHENst4=>next_state<=st0;WHENOTHERS=>next_state<=st0;ENDCASE;ENDPROCESSCOM1;COM2:PROCESS(current_state)BEGINCASEcurrent_stateISWHENst0=>ALE<='0';START<='0';LOCK<='0';OE<='0';WHENst1=>ALE<='1';START<='1';LOCK<='0';OE<='0';WHENst2=>ALE<='0';START<='0';LOCK<='0';OE<='0';WHENst3=>ALE<='0';START<='0';LOCK<='0';OE<='1';WHENst4=>ALE<='0';START<='0';LOCK<='1';OE<='1';WHENOTHERS=>ALE<='0';START<='0';LOCK<='0';ENDCASE;

ENDPROCESSCOM2;7.2.1三進程有限狀態(tài)機7.2.2單進程Moore型有限狀態(tài)機

7.2Moore型有限狀態(tài)機的設(shè)計【例7-4】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYMOORE1ISPORT(DATAIN:INSTD_LOGIC_VECTOR(1DOWNTO0);CLK,RST:INSTD_LOGIC;Q:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDMOORE1;ARCHITECTUREbehavOFMOORE1ISTYPEST_TYPEIS(ST0,ST1,ST2,ST3,ST4);SIGNALC_ST:ST_TYPE;接上頁BEGINPROCESS(CLK,RST)BEGINIFRST='1'THENC_ST<=ST0;Q<="0000";ELSIFCLK'EVENTANDCLK='1'THENCASEC_STIS

WHENST0=>IFDATAIN="10"THENC_ST<=ST1;ELSEC_ST<=ST0;ENDIF;Q<="1001";WHENST1=>IFDATAIN="11"THENC_ST<=ST2;ELSEC_ST<=ST1;ENDIF;Q<="0101";WHENST2=>IFDATAIN="01"THENC_ST<=ST3;ELSEC_ST<=ST0;ENDIF;Q<="1100";接上頁WHENST3=>IFDATAIN="00"THENC_ST<=ST4;ELSEC_ST<=ST2;ENDIF;Q<="0010";WHENST4=>IFDATAIN="11"THENC_ST<=ST0;ELSEC_ST<=ST3;ENDIF;Q<="1001";WHENOTHERS=>C_ST<=ST0;ENDCASE;ENDIF;ENDPROCESS;ENDbehav;7.2.2單進程Moore型有限狀態(tài)機

7.2Moore型有限狀態(tài)機的設(shè)計圖7-7例7-4狀態(tài)機綜合后的RTL電路模塊

7.2.2單進程Moore型有限狀態(tài)機

7.2Moore型有限狀態(tài)機的設(shè)計圖7-8例7-4單進程狀態(tài)機工作時序

7.2.2單進程Moore型有限狀態(tài)機

7.2Moore型有限狀態(tài)機的設(shè)計圖7-9對應(yīng)于例7-4的2進程狀態(tài)機工作時序圖

7.3Mealy型有限狀態(tài)機的設(shè)計【例7-5】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYMEALY1ISPORT(CLK,DATAIN,RESET:INSTD_LOGIC;Q:OUTSTD_LOGIC_VECTOR(4DOWNTO0));ENDMEALY1;ARCHITECTUREbehavOFMEALY1ISTYPEstatesIS(st0,st1,st2,st3,st4);SIGNALSTX:states;BEGINCOMREG:PROCESS(CLK,RESET)BEGIN--決定轉(zhuǎn)換狀態(tài)的進程

IFRESET='1'THENSTX<=ST0;ELSIFCLK'EVENTANDCLK='1'THENCASESTXIS接上頁WHENst0=>IFDATAIN='1'THENSTX<=st1;ENDIF;WHENst1=>IFDATAIN='0'THENSTX<=st2;ENDIF;WHENst2=>IFDATAIN='1'THENSTX<=st3;ENDIF;WHENst3=>IFDATAIN='0'THENSTX<=st4;ENDIF;WHENst4=>IFDATAIN='1'THENSTX<=st0;ENDIF;WHENOTHERS=>STX<=st0;

ENDCASE;

ENDIF;ENDPROCESSCOMREG;COM1:PROCESS(STX,DATAIN)BEGIN--輸出控制信號的進程

CASESTXISENDbehav;接上頁WHENst0=>IFDATAIN='1'THENQ<="10000";ELSEQ<="01010";ENDIF;WHENst1=>IFDATAIN='0'THENQ<="10111";ELSEQ<="10100";ENDIF;WHENst2=>IFDATAIN='1'THENQ<="10101";ELSEQ<="10011";ENDIF;WHENst3=>IFDATAIN='0'THENQ<="11011";ELSEQ<="01001";ENDIF;WHENst4=>IFDATAIN='1'THENQ<="11101";ELSEQ<="01101";ENDIF;WHENOTHERS=>Q<="00000";ENDCASE;ENDPROCESSCOM1;【例7-6】MEALY2LIBRARYIEEE;--MEALYFSMUSEIEEE.STD_LOGIC_1164.ALL;ENTITYMEALY2ISPORT(CLK,DATAIN,RESET:INSTD_LOGIC;Q:OUTSTD_LOGIC_VECTOR(4DOWNTO0));ENDMEALY2;ARCHITECTUREbehavOFMEALY2ISTYPEstatesIS(st0,st1,st2,st3,st4);SIGNALSTX:states;SIGNALQ1:STD_LOGIC_VECTOR(4DOWNTO0);BEGINCOMREG:PROCESS(CLK,RESET)--決定轉(zhuǎn)換狀態(tài)的進程

接上頁BEGINIFRESET='1'THENSTX<=ST0;ELSIFCLK'EVENTANDCLK='1'THENCASESTXIS

WHENst0=>IFDATAIN='1'THENSTX<=st1;ENDIF;WHENst1=>IFDATAIN='0'THENSTX<=st2;ENDIF;WHENst2=>IFDATAIN='1'THENSTX<=st3;ENDIF;WHENst3=>IFDATAIN='0'THENSTX<=st4;ENDIF;WHENst4=>IFDATAIN='1'THENSTX<=st0;ENDIF;WHENOTHERS=>STX<=st0;ENDCASE;ENDIF;ENDPROCESSCOMREG;COM1:PROCESS(STX,DATAIN,CLK)--輸出控制信號的進程

VARIABLEQ2:STD_LOGIC_VECTOR(4DOWNTO0);接上頁BEGINCASESTXIS

WHENst0=>IFDATAIN='1'THENQ2:="10000";ELSEQ2:="01010";ENDIF;WHENst1=>IFDATAIN='0'THENQ2:="10111";ELSEQ2:="10100";ENDIF;WHENst2=>IFDATAIN='1'THENQ2:="10101";ELSEQ2:="10011";ENDIF;WHENst3=>IFDATAIN='0'THENQ2:="11011";ELSEQ2:="01001";ENDIF;WHENst4=>IFDATAIN='1'THENQ2:="11101";ELSEQ2:="01101";ENDIF;WHENOTHERS=>Q2:="00000";ENDCASE;IFCLK'EVENTANDCLK='1'THENQ1<=Q2;ENDIF;ENDPROCESSCOM1;Q<=Q1;ENDbehav;

7.3Mealy型有限狀態(tài)機的設(shè)計圖7-10例7-5狀態(tài)機工作時序圖

7.3Mealy型有限狀態(tài)機的設(shè)計圖7-11例7-6狀態(tài)機工作時序圖

7.4.1狀態(tài)位直接輸出型編碼

7.4狀態(tài)編碼表7-1控制信號狀態(tài)編碼表

狀態(tài)

態(tài)

碼STARTALEOELOCKB功

ST000000初始態(tài)ST111000啟動轉(zhuǎn)換ST200001若測得EOC=1時,轉(zhuǎn)下一狀態(tài)ST3ST300100輸出轉(zhuǎn)換好的數(shù)據(jù)ST400110利用LOCK的上升沿將轉(zhuǎn)換好的數(shù)據(jù)鎖存【例7-7】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYAD0809ISPORT(D:INSTD_LOGIC_VECTOR(7DOWNTO0);CLK,EOC:INSTD_LOGIC;ALE,START,OE,ADDA:OUTSTD_LOGIC;c_state:OUTSTD_LOGIC_VECTOR(4DOWNTO0);Q:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDAD0809;ARCHITECTUREbehavOFAD0809ISSIGNALcurrent_state,next_state:STD_LOGIC_VECTOR(4DOWNTO0);CONSTANTst0:STD_LOGIC_VECTOR(4DOWNTO0):="00000";CONSTANTst1:STD_LOGIC_VECTOR(4DOWNTO0):="11000";CONSTANTst2:STD_LOGIC_VECTOR(4DOWNTO0):="00001";CONSTANTst3:STD_LOGIC_VECTOR(4DOWNTO0):="00100";

CONSTANTst4:STD_LOGIC_VECTOR(4DOWNTO0):="00110";SIGNALREGL:STD_LOGIC_VECTOR(7DOWNTO0);

SIGNALLOCK:STD_LOGIC;

BEGINADDA<='1';Q<=REGL;START<=current_state(4);ALE<=current_state(3);OE<=current_state(2);LOCK<=current_state(1);c_state<=current_state;COM:PROCESS(current_state,EOC)BEGIN--規(guī)定各狀態(tài)轉(zhuǎn)換方式

CASEcurrent_stateISWHENst0=>next_state<=st1;--0809初始化

WHENst1=>next_state<=st2;--啟動采樣

WHENst2=>IF(EOC='1')THENnext_state<=st3;--EOC=1表明轉(zhuǎn)換結(jié)束ELSEnext_state<=st2;--轉(zhuǎn)換未結(jié)束,繼續(xù)等待

ENDIF;WHENst3=>next_state<=st4;--開啟OE,輸出轉(zhuǎn)換好的數(shù)據(jù)

WHENst4=>next_state<=st0;

WHENOTHERS=>next_state<=st0;ENDCASE;ENDPROCESSCOM;REG:PROCESS(CLK)BEGINIF(CLK'EVENTANDCLK='1')THENcurrent_state<=next_state;ENDIF;ENDPROCESSREG;--由信號current_state將當前狀態(tài)值帶出此進程:REGLATCH1:PROCESS(LOCK)--此進程中,在LOCK的上升沿,將轉(zhuǎn)換好的數(shù)據(jù)鎖入

BEGINIFLOCK='1'ANDLOCK'EVENTTHENREGL<=D;ENDIF;ENDPROCESSLATCH1;ENDbehav;7.4.1狀態(tài)位直接輸出型編碼

7.4狀態(tài)編碼圖7-12例7-7狀態(tài)機工作時序圖

7.4狀態(tài)編碼7.4.2順序編碼狀

態(tài)順序編碼一位熱碼編碼STATE0000100000STATE1001010000STATE2010001000STATE3011000100STATE4100000010STATE5101000001表7-2編碼方式

7.4.2順序編碼7.4狀態(tài)編碼【例7-8】...SIGNALCRURRENT_STATE,NEXT_STATE:STD_LOGIC_VECTOR(2DOWNTO0);CONSTANTST0:STD_LOGIC_VECTOR(2DOWNTO0):="000";CONSTANTST1:STD_LOGIC_VECTOR(2DOWNTO0):="001";CONSTANTST2:STD_LOGIC_VECTOR(2DOWNTO0):="010";CONSTANTST3:STD_LOGIC_VECTOR(2DOWNTO0):="011";CONSTANTST4:STD_LOGIC_VECTOR(2DOWNTO0):="100";...7.4.3一位熱碼編碼(One-hotencoding)

7.4狀態(tài)編碼圖7-13一位熱碼編碼方式選擇對話框

7.5狀態(tài)機剩余狀態(tài)處理表7-3剩余狀態(tài)

狀態(tài)順序編碼st0000st1001st2010st3011st4100st_ilg1101st_ilg2110st_ilg3111

WHENst_ilg1=>next_state<=st0;WHENst_ilg2=>next_state<=st0;7.5狀態(tài)機剩余狀態(tài)處理【例7-9】...TYPEstatesIS(st0,st1,st2,st3,st4,st_ilg1,st_ilg2,st_ilg3);SIGNALcurrent_state,next_state:states;...COM:PROCESS(current_state,state_Inputs)--組合邏輯進程BEGINCASEcurrent_stateIS--確定當前狀態(tài)的狀態(tài)值...

WHENOTHERS=>next_state<=st0;

ENDcase;7.5狀態(tài)機剩余狀態(tài)處理【例7-10】...alarm<=(st0AND(st1ORst2ORst3ORst4ORst5))OR(st1AND(st0ORst2ORst3ORst4ORst5))OR(st2AND(st0ORst1ORst3ORst4ORst5))OR(st3AND(st0ORst1ORst2ORst4ORst5))OR(st4AND(st0ORst1ORst2ORst3ORst5))OR

(st5AND(st0ORst1ORst2ORst3ORst4));7.6.1AD采樣系統(tǒng)頂層電路設(shè)計7.6LPM模塊的VHDL文本方式調(diào)用圖7-14ADC0809采樣電路系統(tǒng)

7.6.2編輯定制LPM_RAM模塊

7.6LPM模塊的VHDL文本方式調(diào)用圖7-15生成或修改一個定制的LPM模塊

7.6.2編輯定制LPM_RAM模塊

圖7-16用VHDL定制LPM_RAM,文件名:RAM2.vhd7.6.2編輯定制LPM_RAM模塊

7.6LPM模塊的VHDL文本方式調(diào)用圖7-17選擇FIFO數(shù)據(jù)位寬為8,深度為5127.6LPM模塊的VHDL文本方式調(diào)用7.6.2編輯定制LPM_RAM模塊

圖7-18RAM2配置文件與結(jié)構(gòu)設(shè)置

7.6LPM模塊的VHDL文本方式調(diào)用7.6.2編輯定制LPM_RAM模塊

圖7-19選擇在讀請求信號有效后數(shù)據(jù)輸出

7.6.3雙口RAM定制

7.6LPM模塊的VHDL文本方式調(diào)用圖7-21雙口RAM的仿真波形

圖7-20雙口RAM7.6.3雙口RAM定制

【例7-11】

LIBRARYieee;USEieee.std_logic_1164.all;ENTITYRAM1ISPORT(address:INSTD_LOGIC_VECTOR(8DOWNTO0);--9位地址輸入

inclock:INSTD_LOGIC;--數(shù)據(jù)寫入時鐘

we:INSTD_LOGIC;--寫允許信號

data:INSTD_LOGIC_VECTOR(7DOWNTO0);--8位寫入數(shù)據(jù)q:OUTSTD_LOGIC_VECTOR(7DOWNTO0));--8位RAM數(shù)據(jù)輸出ENDRAM1;ARCHITECTURESYNOFRAM1ISSIGNALsub_wire0:STD_LOGIC_VECTOR(7DOWNTO0);COMPONENTlpm_ram_dq--LPM元件

GENERIC(lpm_width:NATURAL;--類屬

RAM數(shù)據(jù)寬度

自然數(shù)數(shù)據(jù)類型

接上頁

lpm_widthad:NATURAL;--類屬

RAM地址線位寬

自然數(shù)數(shù)據(jù)類型

lpm_indata,lpm_address_control,lpm_outdata,lpm_hint:STRING);

PORT(address:INSTD_LOGIC_VECTOR(8DOWNTO0);we,inclock:INSTD_LOGIC;q:OUTSTD_LOGIC_VECTOR(7DOWNTO0);data:INSTD_LOGIC_VECTOR(7DOWNTO0));ENDCOMPONENT;BEGINq<=sub_wire0(7DOWNTO0);lpm_ram_dq_component:lpm_ram_dqGENERICMAP--類屬映射語句(LPM_WIDTH=>8,--8位數(shù)據(jù)寬度

自然數(shù)數(shù)據(jù)類型

LPM_WIDTHAD=>9,--9位地址線寬度

自然數(shù)數(shù)據(jù)類型

LPM_INDATA=>"REGISTERED",--寄存器鎖存方式寫入數(shù)據(jù),字符串數(shù)據(jù)類型

LPM_ADDRESS_CONTROL=>"REGISTERED",--寄存器鎖存方式寫入地址,字符串數(shù)據(jù)類型

接上頁

LPM_OUTDATA=>"UNREGISTERED",--非寄存器鎖存方式輸出數(shù)據(jù)

LPM_HINT=>"USE_EAB=ON")-–允許使用FPGA中的EABPORTMAP(address=>address,inclock=>inclock,data=>data,we=>we,q=>sub_wire0);ENDSYN;7.6.4正弦信號發(fā)生器設(shè)計與LPMROM定制

7.6LPM模塊的VHDL文本方式調(diào)用圖7-22波形發(fā)生器電路系統(tǒng)結(jié)構(gòu)圖

1.正弦信號發(fā)生器結(jié)構(gòu)

2.正弦信號波形數(shù)據(jù)文件建立

【例7-12】LPM_ROM中作為正弦波形數(shù)據(jù)文件sindata.mifWIDTH=8;DEPTH=64;ADDRESS_RADIX=HEX;DATA_RADIX=DEC;CONTENTBEGIN00:255;01:254;02:252;03:249;04:245;05:239;06:233;07:225;08:217;09:207;0A:197;0B:186;0C:174;0D:162;0E:150;0F:137;10:124;11:112;12:99;13:87;14:75;15:64;16:53;17:43;18:34;19:26;1A:19;1B:13;1C:8;1D:4;1E:1;1F:0;20:0;21:1;22:4;23:8;24:13;25:19;26:26;27:34;28:43;29:53;2A:64;2B:75;2C:87;2D:99;2E:112;2F:124;30:137;31:150;32:162;33:174;34:186;35:197;36:207;37:217;38:225;39:233;3A:239;3B:245;3C:249;3D:252;3E:254;3F:255;END;

7.6.4正弦信號發(fā)生器設(shè)計與LPMROM定制

圖7-23定制LPMROM文件

3.LPMROM定制

7.6.4正弦信號發(fā)生器設(shè)計與LPMROM定制

圖7-24選擇ROM參數(shù)

3.LPMROM定制

7.6LPM模塊的VHDL文本方式調(diào)用7.6.4正弦信號發(fā)生器設(shè)計與LPMROM定制

圖7-25加入初始化文件

3.LPMROM定制

7.6LPM模塊的VHDL文本方式調(diào)用7.6.4正弦信號發(fā)生器設(shè)計與LPMROM定制

圖7-26例7-13仿真波形

3.LPMROM定制

7.6LPM模塊的VHDL文本方式調(diào)用3.LPMROM定制

【例7-13】LIBRARYieee;USEieee.std_logic_1164.all;ENTITYSINDATAIS PORT(address:INSTD_LOGIC_VECTOR(5DOWNTO0); inclock:INSTD_LOGIC; q:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDSINDATA;ARCHITECTURESYNOFSINDATAIS SIGNALsub_wire0 :STD_LOGIC_VECTOR(7DOWNTO0); COMPONENTlpm_rom GENERIC(lpm_width :NATURAL; lpm_widthad:NATURAL; lpm_address_control:STRING;

接上頁lpm_outdata :STRING; lpm_file :STRING );

PORT( address :INSTD_LOGIC_VECTOR(5DOWNTO0); inclock :INSTD_LOGIC; q :OUTSTD_LOGIC_VECTOR(7DOWNTO0) ); ENDCOMPONENT;BEGIN q<=sub_wire0(7DOWNTO0); lpm_rom_component:lpm_rom GENERICMAP(LPM_WIDTH=>8,LPM_WIDTHAD=>6, LPM_ADDRESS_CONTROL=>"REGISTERED",LPM_OUTDATA=>"UNREGISTERED", LPM_FILE=>"D:/SIN_G/DATA/sin_data.mif") PORTMAP(address=>address,inclock=>inclock,q=>sub_wire0 );ENDSYN;

【例7-14】LIBRARYIEEE;--正弦信號發(fā)生器源文件USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYSINGTISPORT(CLK:INSTD_LOGIC;--信號源時鐘

DOUT:OUTSTD_LOGIC_VECTOR(7DOWNTO0));--8位波形數(shù)據(jù)輸出END;ARCHITECTUREDACCOFSINGTISCOMPONENTSINDATA--調(diào)用波形數(shù)據(jù)存儲器LPM_ROMATAROM.VHD聲明

PORT(address:INSTD_LOGIC_VECTOR(5DOWNTO0); inclock:INSTD_LOGIC; q:OUTSTD_LOGIC_VECTOR(7DOWNTO0) );ENDCOMPONENT; 4.完成正弦信號發(fā)生器頂層設(shè)計和測試

接上頁

SIGNALQ1:STD_LOGIC_VECTOR(5DOWNTO0);--設(shè)定內(nèi)部節(jié)點作為地址計數(shù)器

BEGINPROCESS(CLK)--LPM_ROM地址發(fā)生器進程

BEGINIFCLK'EVENTANDCLK='1'THENQ1<=Q1+1;ENDIF;--Q1作為地址發(fā)生器計數(shù)器ENDPROCESS;u1:SINDATAPORTMAP(address=>Q1,q=>DOUT,inclock=>CLK);--例化END;

7.6.5編輯定制LPM_FIFO模塊

圖7-28選擇FIFO數(shù)據(jù)位寬為8,深度為5127.6LPM模塊的VHDL文本方式調(diào)用7.6.5編輯定制LPM_FIFO模塊

7.6LPM模塊的VHDL文本方式調(diào)用圖7-297-19fifo端口設(shè)置

7.6.5編輯定制LPM_FIFO模塊

7.6LPM模塊的VHDL文本方式調(diào)用圖7-30選擇Area優(yōu)化方式和EAB構(gòu)建

7.6.5編輯定制LPM_FIFO模塊

7.6LPM模塊的VHDL文本方式調(diào)用圖7-31單擊“Finish”后完成fifo2.vhd的定制

7.6.6LPM_FIFO定制文件的仿真測試

【例7-15】

LIBRARYieee;USEieee.std_logic_1164.all;ENTITYfifo2ISPORT(data:INSTD_LOGIC_VECTOR(7DOWNTO0);--輸入數(shù)據(jù)

wrreq:INSTD_LOGIC;--寫入請求

rdreq:INSTD_LOGIC;--讀出請求

clock:INSTD_LOGIC;--工作時鐘

aclr:INSTD_LOGIC;--異步清0

q:OUTSTD_LOGIC_VECTOR(7DOWNTO0);--數(shù)據(jù)輸出

full:OUTSTD_LOGIC);--溢出標志ENDfifo2;ARCHITECTURESYNOFfifo2ISSIGNALsub_wire0:STD_LOGIC_VECTOR(7DOWNTO0);SIGNALsub_wire1:STD_LOGIC;接上頁

COMPONENTlpm_fifo--調(diào)用LPM_FIFO聲明

GENERIC(lpm_width:NATURAL;--類屬數(shù)據(jù)寬度自然數(shù)數(shù)據(jù)類型

lpm_numwords:NATURAL;--類屬數(shù)據(jù)深度自然數(shù)數(shù)據(jù)類型

lpm_widthu:NATURAL;--類屬地址寬度自然數(shù)數(shù)據(jù)類型

lpm_showahead:STRING;--類屬數(shù)據(jù)讀出方式字符串數(shù)據(jù)類型

lpm_hint:STRING);--類屬優(yōu)化方式字符串數(shù)據(jù)類型

PORT(rdreq:INSTD_LOGIC;aclr:INSTD_LOGIC;clock:INSTD_LOGIC;q:OUTSTD_LOGIC_VECTOR(7DOWNTO0);wrreq:INSTD_LOGIC;data:INSTD_LOGIC_VECTOR(7DOWNTO0);full:OUTSTD_LOGIC);ENDCOMPONENT;BEGIN接上頁

q<=sub_wire0(7DOWNTO0);full<=sub_wire1;lpm_fifo_component:lpm_fifoGENERICMAP(LPM_WIDTH=>8,--類屬映射語句,數(shù)據(jù)寬度8位

LPM_NUMWORDS=>512,--8位字節(jié)數(shù)512個

LPM_WIDTHU=>9,--地址線位寬9位

LPM_SHOWAHEAD=>"OFF",--關(guān)閉先行數(shù)據(jù)輸出開關(guān)--打開內(nèi)部EAB,最大速度約束等級為5

LPM_HINT=>"USE_EAB=ON,MAXIMIZE_SPEED=5")PORTMAP(rdreq=>rdreq,aclr=>aclr,clock=>clock,wrreq=>wrreq,data=>data,q=>sub_wire0,full=>sub_wire1);ENDSYN;7.6LPM模塊的VHDL文本方式調(diào)用7.6.6LPM_FIFO定制文件的仿真測試

圖7-32例7-15的仿真波形

習題7-1

仿照例7-1,將例7-4用兩個進程,即一個時序進程,一個組合進程表達出來。7-2

為確保例7-5的狀態(tài)機輸出信號沒有毛刺,試用例7-4的方式構(gòu)成一個單進程狀態(tài),使輸出信號得到可靠鎖存,在相同輸入信號條件下,給出兩程序的仿真波形。

7-3

序列檢測器可用于檢測一組或多組由二進制碼組成的脈沖序列信號,當序列檢測器連續(xù)收到一組串行二進制碼后,如果這組碼與檢測器中預(yù)先設(shè)置的碼相同,則輸出1,否則輸出0。由于這種檢測的關(guān)鍵在于正確碼的收到必須是連續(xù)的,這就要求檢測器必須記住前一次的正確碼及正確序列,直到在連續(xù)的檢測中所收到的每一位碼都與預(yù)置數(shù)的對應(yīng)碼相同。在檢測過程中,任何一位不相等都將回到初始狀態(tài)重新開始檢測。例7-16描述的電路完成對序列數(shù)“11100101”的檢測,當這一串序列數(shù)高位在前(左移)串行進入檢測器后,若此數(shù)與預(yù)置的密碼數(shù)相同,則輸出“A”,否則仍然輸出“B”。

【例7-16】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYSCHKISPORT(DIN,CLK,CLR:INSTD_LOGIC;--串行輸入數(shù)據(jù)位/工作時鐘/復(fù)位信號

AB:OUTSTD_LOGIC_VECTOR(3DOWNTO0));--檢測結(jié)果輸出ENDSCHK;ARCHITECTUREbehavOFSCHKISSIGNALQ:INTEGERRANGE0TO8;SIGNALD:STD_LOGIC_VECTOR(7DOWNTO0);--8位待檢測預(yù)置數(shù)BEGIND<="11100101";--8位待檢測預(yù)置數(shù)

PROCESS(CLK,CLR)BEGINIFCLR='1'THENQ<=0;ELSIFCLK'EVENTANDCLK='1'THEN--時鐘到來時,判斷并處理當前輸入的位

CASEQIS

WHEN0=>IFDIN=D(7)THENQ<=1;ELSEQ<=0;ENDIF;

WHEN1=>IFDIN=D(6)THENQ<=2;ELSEQ<=0;ENDIF;WHEN2=>IFDIN=D(5)THENQ<=3;ELSEQ<=0;ENDIF;WHEN3=>IFDIN=D(4)THENQ<=4;ELSEQ<=0;ENDIF;WHEN4=>IFDIN=D(3)THENQ<=5;ELSEQ<=0;ENDIF;WHEN5=>IFDIN=D(2)THENQ<=6;ELSEQ<=0;ENDIF;WHEN6=>IFDIN=D(1)THENQ<=7;ELSEQ<=0;ENDIF;WHEN7=>IFDIN=D(0)THENQ<=8;ELSEQ<=0;ENDIF;WHENOTHERS=>Q<=0;ENDCASE;ENDIF;ENDPROCESS;PROCESS(Q)--檢測結(jié)果判斷輸出

BEGINIFQ=8THENAB<="1010";--序列數(shù)檢測正確,輸出

“A”ELSEAB<="1011";--序列數(shù)檢測錯誤,輸出

“B”ENDIF;ENDPROCESS;ENDbehav;要求1:說明例7-16的代碼表達的是什么類型的狀態(tài)機,它的優(yōu)點是什么?詳述其功能和對序列數(shù)檢測的邏輯過程。要求2:根據(jù)例7-16寫出由兩個主控進程構(gòu)成的相同功能的符號化Moore型有限狀態(tài)機,畫出狀態(tài)圖,并給出其仿真測試波形。要求3:將8位待檢測預(yù)置數(shù)作為外部輸入信號,即可以隨時改變序列檢測器中的比較數(shù)據(jù)。寫出此程序的符號化單進程有限狀態(tài)機。提示:對于D<=“11100101”,電路需分別不間斷記憶:初始狀態(tài)、1、11、111、1110、11100、111001、1110010、11100101共9種狀態(tài)。習題7-4根據(jù)圖7-33(a)所示的狀態(tài)圖,分別按照圖7-33(b)和圖7-33(c)寫出對應(yīng)結(jié)構(gòu)的VHDL狀態(tài)機。圖7-33習題7-4狀態(tài)圖

習題7-5在不改變原代碼功能的條件下用兩種方法改寫例7-2,使其輸出的控制信號(ALE、START、OE、LOCK)沒有毛刺。方法1:將輸出信號鎖存后輸出;方法2:使用狀態(tài)碼直接輸出型狀態(tài)機,并比較這三種狀態(tài)機的特點。實驗與設(shè)計7-1用狀態(tài)機實現(xiàn)序列檢測器的電路設(shè)計(1)實驗?zāi)康模河脿顟B(tài)機實現(xiàn)序列檢測器的設(shè)計,并對其進行仿真和硬件測試。(2)實驗原理:序列檢測器的工作原理已在習題7-3中作了說明。(3)實驗內(nèi)容1:仔細完成習題7-3的全部內(nèi)容,利用MAX+plusII對例7-16進行文本編輯輸入、仿真測試并給出仿真波形,了解控制信號的時序,最后進行引腳鎖定并完成硬件測試實驗。實驗與設(shè)計

建議選擇電路模式No.8,用鍵7(PIO11)控制復(fù)位信號CLR;鍵6(PIO9)控制狀態(tài)機工作時鐘CLK;待檢測串行序列數(shù)輸入DIN接PIO10(左移,最高位在前);指示輸出AB接PIO39~PIO36(顯示于數(shù)碼管6)。下載后:①按實驗板“系統(tǒng)復(fù)位”鍵;②用鍵2和鍵1輸入2位十六進制待測序列數(shù)“11100101”;③按鍵7復(fù)位(平時數(shù)碼6指示顯“B”);④按鍵6(CLK)8次,這時若串行輸入的8位二進制序列碼(顯示于數(shù)碼2/1和發(fā)光管D8~D0)與預(yù)置碼“11100101”相同,則數(shù)碼6應(yīng)從原來的B變成A,表示序列檢測正確,否則仍為B。實驗與設(shè)計(4)實驗內(nèi)容2:根據(jù)習題7-3中的習題要求3提出的設(shè)計方案,重復(fù)以上實驗內(nèi)容(將8位待檢測預(yù)置數(shù)由鍵4/鍵3作為外部輸入,從而可隨時改變檢測密碼)。(5)實驗思考題:如果待檢測預(yù)置數(shù)必須以右移方式進入序列檢測器,寫出該檢測器的VHDL代碼(兩進程符號化有限狀態(tài)機),并提出測試該序列檢測器的實驗方案。(6)實驗報告:根據(jù)以上的實驗內(nèi)容寫出實驗報告,包括設(shè)計原理、程序設(shè)計、程序分析、仿真分析、硬件測試和詳細實驗過程。實驗與設(shè)計7-2用狀態(tài)機對ADC0809的采樣控制電路實現(xiàn)(1)實驗?zāi)康模簩W習用狀態(tài)機對A/D轉(zhuǎn)換器ADC0809的采樣控制電路的實現(xiàn)。(2)實驗原理:ADC0809的采樣控制原理已在7.2.1節(jié)中作了詳細說明。ADC0809是CMOS的8位A/D轉(zhuǎn)換器,片內(nèi)有8路模擬開關(guān),可控制8個模擬量中的一個進入轉(zhuǎn)換器中。轉(zhuǎn)換時間約100μs,含鎖存控制的8路多路開關(guān),輸出有三態(tài)緩沖器控制,單5V電源供電。主要控制信號說明:如圖7-3所示,START是轉(zhuǎn)換啟動信號,高電平有效;ALE是3位通道選擇地址(ADDC、ADDB、ADDA)信號的鎖存信號。當模擬量送至某一輸入端(如IN1或IN2等),由3位地址信號選擇,而地址信號由ALE鎖存;EOC是轉(zhuǎn)換情況狀態(tài)信號,當啟動轉(zhuǎn)換約100μs后,EOC產(chǎn)生一個負脈沖,以示轉(zhuǎn)換結(jié)束;在EOC的上升沿后,若使輸出使能信號OE為高電平,則控制打開三態(tài)緩沖器,把轉(zhuǎn)換好的8位數(shù)據(jù)結(jié)果輸至數(shù)據(jù)總線,至此ADC0809的一次轉(zhuǎn)換結(jié)束。實驗與設(shè)計7-2用狀態(tài)機對ADC0809的采樣控制電路實現(xiàn)(3)實驗內(nèi)容:利用MAX+plusII對例7-2進行文本編輯輸入和仿真測試;給出仿真波形。最后進行引腳鎖定并進行測試,硬件驗證例7-2電路對ADC0809的控制功能。測試步驟:建議選擇電路模式No.5(參考附錄2的圖F-17),由對應(yīng)的電路圖可見,ADC0809的轉(zhuǎn)換時鐘CLK已經(jīng)事先接有750kHz的頻率,引腳鎖定為:START接PIO34,OE(ENABLE)接PIO35,EOC接PIO8,ALE接PIO33,狀態(tài)機時鐘CLK接clock0,ADDA接PIO32(ADDB和ADDC都接GND),ADC0809的8位輸出數(shù)據(jù)線接PIO23~PIO16,鎖存輸出Q顯示于數(shù)碼8/數(shù)碼7(PIO47~PIO40)。實驗與設(shè)計實驗操作:將GW48EDA系統(tǒng)左下角的撥碼開關(guān)的4、6、7向下?lián)?,其余向上。即?809工作使能,及使FPGA能接受來自0809轉(zhuǎn)換結(jié)束的信號(對于GW48-CK系統(tǒng),左下角選擇插針處的“轉(zhuǎn)換結(jié)束”和“A/D使能”用二短路帽短接)。下載ADC0809中的ADCINT.sof到實驗板的FPGA中;clock0的短路帽接可選12Hz、6MHz、65536Hz等頻率;按動一次右側(cè)的復(fù)位鍵;用螺絲刀旋轉(zhuǎn)GW48系統(tǒng)左下角的精密電位器,以便為ADC0809提供變化的待測模擬信號(注意,這時必須在例2中賦值:ADDA<='1',這樣就能通過實驗系統(tǒng)左下的AIN1輸入端與電位器相接,并將信號輸入0809的IN1端)。這時數(shù)碼管8和7將顯示ADC0809采樣的數(shù)字值(16進制),數(shù)據(jù)來自FPGA的輸出。數(shù)碼管2和1也將顯示同樣數(shù)據(jù),此數(shù)據(jù)直接來自0809的數(shù)據(jù)口。實驗結(jié)束后注意將撥碼開關(guān)撥向默認:僅“4”向下。實驗與設(shè)計(4)實驗思考題:在不改變原代碼功能的條件下將例7-2表達成用狀態(tài)碼直接輸出型的狀態(tài)機。(5)實驗報告:根據(jù)以上的實驗要求、實驗內(nèi)容和實驗思考題寫出實驗報告。7-3

波形發(fā)生與掃頻信號發(fā)生器電路設(shè)計(1)實驗?zāi)康模簩W習用VHDL設(shè)計波形發(fā)生器和掃頻信號發(fā)生器,掌握FPGA對D/A的接口和控制技術(shù),學會LPM_ROM在波形發(fā)生器設(shè)計中的實用方法。(2)實驗原理:參考7.6.4節(jié)。DAC0832的轉(zhuǎn)換速率是1μs,其引腳功能簡述如下:

ILE(PIN19):數(shù)據(jù)鎖存允許信號,高電平有效,系統(tǒng)板上已直接連在+5V上。WR1、WR2(PIN2、18):寫信號1、2,低電平有效。實驗與設(shè)計l

XFER(PIN17):數(shù)據(jù)傳送控制信號,低電平有效。l

VREF(PIN8):基準電壓,可正可負,-10V~+10V。l

RFB(PIN9):反饋電阻端。l

IOUT1/IOUT2(PIN11、12):電流輸出端。D/A轉(zhuǎn)換量是以電流形式輸出的,所以必須將電流信號變?yōu)殡妷盒盘枴

AGND/DGND(PIN3、10):模擬地與數(shù)字地。在高速情況下,此二GND地的連接線必須盡可能短,且系統(tǒng)的單點接地點須接在此連線的某一點上。

(3)實驗內(nèi)容1:根據(jù)例7-14,7-13和數(shù)據(jù)例7-12,完成波形發(fā)生器設(shè)計,仿真測試及的硬件測試。實驗與設(shè)計硬件實驗中注意:建議選擇電路模式No.5(參考附錄2的圖F-17右側(cè)),由對應(yīng)的電路圖可見,DAC0832的8位數(shù)據(jù)口D[7..0]與分別與FPGA的PIO31、30..、24相連,如果目標器件

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論