《序向逻辑电路与状态机设计》由会员分享,可在线阅读,更多相关《序向逻辑电路与状态机设计(103页珍藏版)》请在金锄头文库上搜索。
1、第第三三章章序向邏輯電路與狀態機設計VHDL數位電路實習與專題設計文魁資訊-UE301第三章序向邏輯電路與狀態機設計內容大綱n3-1順序性敘述的使用n3-2狀態機電路設計2-3VHDL的指定敘述與基本語法n單元4:算術邏輯(ALU)運算單元實習n單元5:除頻器與計數器實習n單元6:多工掃描式七段顯示器實習陳慶逸、林柏辰編著-文魁資訊2VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計3-1順序性敘述的使用陳慶逸、林柏辰編著-文魁資訊3VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計3-1-1 If-Then-Else敘述 順序性敘述指令必須要放在PROCESS程式主體內使
2、用,關於If-Then-Else敘述的語法如下:If(條件1)Then-若(條件1)情況發生時,則執行指令敘述;Elsif(條件2)Then-否則若是(條件2)情況發生時,則執行指令敘述;:Else-否則則執行.指令敘述;End If;-宣告結束陳慶逸、林柏辰編著-文魁資訊4VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計nD型正反器3-1-1 If-Then-Else敘述 CLKDQ(t+1)0XQ(t)1XQ(t)1100LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYdff_visPORT(CLK,D :INSTD_LOGIC;Q:O
3、UTSTD_LOGIC);ENDdff_v;ARCHITECTUREaOFdff_vISBEGINPROCESS(CLK)BEGIN IFCLKeventANDCLK=1THENQ=D; END IF;ENDPROCESS;ENDa;clkevent陳慶逸、林柏辰編著-文魁資訊5VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計3-1-2 計數器與除頻電路 n計數器設計上數計數器:計數值會隨著時脈訊號(正緣或負緣觸發)的發生而自動加1 下數計數器:在每次的觸發時計數值減一PROCESS (CLK)BEGINIFCLKeventANDCLK=1THENQN=QN+1;-計數值加一END
4、 IF;END PROCESS;PROCESS (CLK)BEGINIFCLKeventANDCLK=1THENQN=QN-1;-計數值減一END IF;END PROCESS;陳慶逸、林柏辰編著-文魁資訊6VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計3-1-2 計數器與除頻電路上下數計數器:將上數和下數的功能合併,再使用一個控制訊號DIR來決定其上下數的動作1LIBRARYIEEE;2USEIEEE.STD_LOGIC_1164.ALL;3USEIEEE.STD_LOGIC_UNSIGNED.ALL;45ENTITYUD_COUNTERis6PORT(CLK,DIR:IN S
5、TD_LOGIC;7Q:OUTSTD_LOGIC_VECTOR(3DOWNTO0);8ENDUD_COUNTER;910ARCHITECTUREaOFUD_COUNTERIS11SIGNALQN:STD_LOGIC_VECTOR(3DOWNTO0);12BEGIN13PROCESS(CLK)14BEGIN15IFCLKeventANDCLK=1THEN16IFDIR=0THEN QN=QN+1;17ELSEQN=QN-1;18END IF;19END IF;20END PROCESS;2122Q=QN;23ENDa;陳慶逸、林柏辰編著-文魁資訊7VHDL數位電路實習與專題設計第三章序向邏輯電路
6、與狀態機設計3-1-2 計數器與除頻電路輸出為對稱方波形狀的除頻器設計在FPT-3實驗板上的石英振盪器之振盪頻率是1.8432MHz(一秒振盪1.8432x106次),如果我們想要設計一個1/(1.8432x106)的除頻電路來得到輸出波形為對稱方波的1Hz輸出頻率時,我們可以宣告一個數值為振盪頻率值一半的整數(即(1.8432x106)/2),每當該數值數完一次時就令其對應的輸出訊號波形發生轉態,那麼當計數完振盪頻率的數值時輸出訊號恰完成一個週期的正反變化,如此一來我們便能輕易地得到1Hz的方波訊號了。1.8432x106Countervalue(1.8432x106/2)Counterva
7、lue(1.8432x106/2)PULSE陳慶逸、林柏辰編著-文魁資訊8VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計3-1-2 計數器與除頻電路1 libraryieee;2useieee.std_logic_1164.all;3 useieee.std_logic_unsigned.all;45ENTITYslowCLK18432IS 6PORT (clockIN:IN std_logic;7clockOUT:OUT std_logic);8 ENDSLOWCLK18432;910 ARCHITECTUREbehavioralOFslowCLK18432IS11 SIGNA
8、L PULSE:std_logic:=0;12 BEGIN 13PROCESS(clockIN)14 VARIABLECounter: INTEGERRANGE0TO1843200/2:=1843200/2;輸出為對稱方波形狀的除頻器設計(續)陳慶逸、林柏辰編著-文魁資訊9VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計3-1-2 計數器與除頻電路輸出為對稱方波形狀的除頻器設計(續)15 BEGIN 16 IF (clockINEVENTANDclockIN=1)THEN 17Counter:=Counter-1;18 IF(Counter=0) THEN 19IFPULSE=1T
9、HEN20PULSE=0;21 ELSEPULSE=1;22 END IF;23Counter:=1843200/2;24END IF;25 END IF;26END PROCESS;27clockOUT敘述命令1; When 選擇訊號2=敘述命令2;: When Others =敘述命令N;End Case; nCase-when指令本身是敘述組合邏輯的,但它卻必須在Process指令中執行,因此它是序向邏輯指令之一,其語法如下陳慶逸、林柏辰編著-文魁資訊11VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計3-1-3 case-when敘述C00001111S100110011S
10、001010101OperationF=A;F=A and B;F=A or B;F=Not A;F=A+B;F=A-B;F=A+1;FFFFFFFFF=A-1;-遞減1End case;end if;End Process;ENDa;陳慶逸、林柏辰編著-文魁資訊13VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計3-1-4 For-Loop敘述 nFOR-LOOP敘述VHDL語言使用For-Loop敘述來描述重複性的電路動作,其語法如下:FOR I IN開始值to結束值LOOP-以遞增的方式從開始值執行到結束值為止命令敘述End Loop;陳慶逸、林柏辰編著-文魁資訊14VHDL
11、數位電路實習與專題設計第三章序向邏輯電路與狀態機設計3-1-4 For-Loop敘述n四位元移位暫存器architectureaofshift4issignaltemp:std_logic_vector(3downto0);beginprocess(clk)beginIFclkeventandclk=1then temp(3)=data;ForIIN1to3LOOPtemp(3-I)=temp(4-I);END LOOP;END IF;end process ;QIFX=0 THENnext_state=s0;ELSEnext_state=s1;END IF;OPIFX=0THENnext_s
12、tate=s3;ELSEnext_state=s2;END IF;OPIFX=0 THENnext_state=s2;ELSEnext_state=s3;END IF;OPIF X=0THENnext_state=s3;ELSEnext_state=s0;ENDIF;OP=0;END CASE;END PROCESSstate_comp;state_clocking:PROCESS(CLK)BEGINIFCLKEVENTANDCLK=1 THENpresent_stateIFX=0THENnext_state=s0;ELSEnext_state=s1;END IF;IFX=0THENop=0;
13、ELSEopIFX=0THENnext_state=s3;ELSEnext_state=s2;END IF;IFX=0THENop=1;ELSEopIF X=0THENnext_state=s2;ELSEnext_state=s3;END IF;IFX=0THENop=0;ELSEopIFX=0THENnext_state=s3;ELSEnext_state=s0;END IF;IF X=0THENop=0;ELSEop=0;END IF;END CASE;ENDPROCESSstate_comp;state_clocking:PROCESS(CLK)BEGINIF CLKEVENTANDCL
14、K=1THENpresent_state = next_state;END IF;END PROCESS state_clocking;END a; 陳慶逸、林柏辰編著-文魁資訊21VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元4:算術邏輯(ALU)運算單元實習陳慶逸、林柏辰編著-文魁資訊22VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元4:算術邏輯(ALU)運算單元實習 n相關知識MS1S0Operation000F=A;001F=AandB;010F=AorB;011F=NotA;100F=A+B;101F=A-B;110F=A+1;111F25F27F
15、29F31F36F38F40F42F=A-1;43Endcase;44endif;45EndProcess;46ENDa;陳慶逸、林柏辰編著-文魁資訊25VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元4:算術邏輯(ALU)運算單元實習n功能模擬與CPLD下載驗證燒錄於力浦電子FPT-3實驗板輸入腳位輸出腳位M37(SW1)F(2)4(LED1)S(1)29(DIP1)F(1)5(LED2)S(0)31(DIP2)F(0)6(LED3)A(2)33(DIP3)A(1)34(DIP4)A(0)36(DIP5)B(2)1(DIP6)B(1)44(DIP7)B(0)2(DIP8)MA
16、2A0B2B0F2F0S1S0陳慶逸、林柏辰編著-文魁資訊26VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元4:算術邏輯(ALU)運算單元實習n功能模擬與CPLD下載驗證燒錄於力浦電子LP-2900實驗板(實驗電路圖)陳慶逸、林柏辰編著-文魁資訊27VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元4:算術邏輯(ALU)運算單元實習n功能模擬與CPLD下載驗證燒錄於力浦電子LP-2900實驗板(續)輸入腳位輸出腳位A(2)49(SW3)F(2)18(L10)A(1)51(SW4)F(1)19(L11)A(0)59(SW5)F(0)20(L12)B(2)60(SW
17、6)LED_COM141B(1)62(SW7)B(0)63(SW8)M64(SW9)S(1)65(SW10)S(0)67(SW11)陳慶逸、林柏辰編著-文魁資訊28VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元4:算術邏輯(ALU)運算單元實習n功能模擬與CPLD下載驗證燒錄於力浦電子LP-2900實驗板(續)陳慶逸、林柏辰編著-文魁資訊29VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元5:除頻器與計數器實習陳慶逸、林柏辰編著-文魁資訊30VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元5-1 產生1、2、4、8Hz不同頻率之除頻器設計 n相
18、關知識將1843200Hz除頻得到8Hz頻率輸出1.8432x106divisor(230400)divisor(230400)CN2divisor/2divisor/2以自由計數器得到4Hz、2Hz和1Hz的信號頻率陳慶逸、林柏辰編著-文魁資訊31VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元5-1 產生1、2、4、8Hz不同頻率之除頻器設計n實驗電路圖陳慶逸、林柏辰編著-文魁資訊32VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元5-1 產生1、2、4、8Hz不同頻率之除頻器設計n程式與說明7libraryieee;8useieee.std_logic_1
19、164.all;9useieee.std_logic_unsigned.all;10useieee.std_logic_arith.all;1112entityclk_divis13generic(divisor:integer:=230400);14port(15clk_in:instd_logic;16clk_out8Hz:bufferstd_logic;17clk_out4Hz:bufferstd_logic;18clk_out2Hz:bufferstd_logic;19clk_out1Hz:bufferstd_logic20);21endclk_div;2223architecture
20、archofclk_divis24signalcnt2:std_logic;25begin26-clkdivider-27process(clk_in)28variablecnt1,divisor2:integerrange0todivisor;29begin30divisor2:=divisor/2;31-upcounter-32if(clk_ineventandclk_in=1)then33ifcnt1=divisorthen34cnt1:=1;35else36cnt1:=cnt1+1;37endif;38endif;陳慶逸、林柏辰編著-文魁資訊33VHDL數位電路實習與專題設計第三章序向
21、邏輯電路與狀態機設計單元5-1 產生1、2、4、8Hz不同頻率之除頻器設計n程式與說明(續)39-clk_outregisterclkgenerator-40if(clk_ineventandclk_in=1)then41if(cnt1=divisor2)or(cnt1=divisor)then42cnt2=notcnt2;43endif;44endif;45clk_out8Hz=cnt2;46endprocess;4748process(clk_out8Hz)49begin50ifclk_out8Hzeventandclk_out8Hz=1then51clk_out4Hz=not(clk_o
22、ut4Hz);52endif;53endprocess;5455process(clk_out4Hz)56begin57ifclk_out4Hzeventandclk_out4Hz=1then58clk_out2Hz=not(clk_out2Hz);59endif;60endprocess;6162process(clk_out2Hz)63begin64ifclk_out2Hzeventandclk_out2Hz=1then65clk_out1Hz=not(clk_out1Hz);66endif;67endprocess;6869endarch;陳慶逸、林柏辰編著-文魁資訊34VHDL數位電路
23、實習與專題設計第三章序向邏輯電路與狀態機設計單元5-1 產生1、2、4、8Hz不同頻率之除頻器設計n功能模擬與CPLD下載驗證燒錄於力浦電子FPT-3實驗板輸入clk_in腳位43輸出clk_out8Hzclk_out4Hzclk_out2Hzclk_out1Hz腳位4568clk_out8Hzclk_out4Hzclk_out2Hzclk_out1Hz陳慶逸、林柏辰編著-文魁資訊35VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元5-1 產生1、2、4、8Hz不同頻率之除頻器設計n功能模擬與CPLD下載驗證燒錄於力浦電子LP-2900實驗板n更改除頻程式如下:n腳位配置圖:1
24、2entityclk_div_LP2900is13generic(divisor:integer:= 1250000);14port();輸入腳位輸出腳位clk_in55clk_out8Hz17(L9)clk_out4Hz18(L10)clk_out2Hz19(L11)clk_out1Hz20(L12)LED_COM141陳慶逸、林柏辰編著-文魁資訊36VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元5-1 產生1、2、4、8Hz不同頻率之除頻器設計n功能模擬與CPLD下載驗證燒錄於力浦電子LP-2900實驗板(續)nLP-2900實驗板元件規劃:陳慶逸、林柏辰編著-文魁資訊3
25、7VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元5-2 計數器設計與跑馬燈顯示 n相關知識計數器設計與跑馬燈顯示架構圖0111101111011110Clk1Clk2Clk3Clk4Clk_in頻率產生器counterclkcnt3bin3to8decoderBin2led.vhdCounter.vhdClk_div.vhdsel4可選擇輸入頻率的計數器電路符號 0111101111011110Clk1Clk2Clk3Clk4counterclkcnt3Counter.vhdsel4陳慶逸、林柏辰編著-文魁資訊38VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單
26、元5-2 計數器設計與跑馬燈顯示n實驗電路圖陳慶逸、林柏辰編著-文魁資訊39VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元5-2 計數器設計與跑馬燈顯示n程式與說明由1.8432MHz產生1Hz、2Hz、4Hz和8Hz輸出頻率之除頻電路程式碼7libraryieee;8useieee.std_logic_1164.all;9useieee.std_logic_unsigned.all;10useieee.std_logic_arith.all;1112entityclk_divis13generic(divisor:integer:=230400);14port(15clk_
27、in:instd_logic;16clk_out8Hz:bufferstd_logic;17clk_out4Hz:bufferstd_logic;18clk_out2Hz:bufferstd_logic;19clk_out1Hz:bufferstd_logic20);21endclk_div;2223architecturearchofclk_divis24signalcnt2:std_logic;25begin26-clkdivider-27process(clk_in)28variablecnt1,divisor2:integerrange0todivisor;29begin30divis
28、or2:=divisor/2;31-upcounter-32if(clk_ineventandclk_in=1)then33ifcnt1=divisorthen34cnt1:=1;35else36cnt1:=cnt1+1;37endif;38endif;39-clk_outregisterclkgenerator-40if(clk_ineventandclk_in=1)then41if(cnt1=divisor2)or(cnt1=divisor)then42cnt2=notcnt2;43endif;44endif;45clk_out8Hz=cnt2;46endprocess;陳慶逸、林柏辰編著
29、-文魁資訊40VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元5-2 計數器設計與跑馬燈顯示4748process(clk_out8Hz)49begin50ifclk_out8Hzeventandclk_out8Hz=1then51clk_out4Hz=not(clk_out4Hz);52endif;53endprocess;5455process(clk_out4Hz)56begin57ifclk_out4Hzeventandclk_out4Hz=1then58clk_out2Hz=not(clk_out2Hz);59endif;60endprocess;6162proces
30、s(clk_out2Hz)63begin64ifclk_out2Hzeventandclk_out2Hz=1then65clk_out1Hzclkclkclkclkclk=0;37endcase;38endprocess;40process(clk)41begin42ifclkeventandclk=1then43cnt1=cnt1+1;44endif;45endprocess;46cntledledledledledledledledled低音調高頻-高音調一週期陳慶逸、林柏辰編著-文魁資訊49VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元5-3 簡易電子琴設計陳慶逸、林柏
31、辰編著-文魁資訊50VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元5-3 簡易電子琴設計n實驗功能限於FPT-3實驗板上的EPM7064SLC44-10這顆晶片僅有64個LCs的容量,因此實驗中我們僅實驗Do和Rai兩個音:SW1(指撥開關設定為01)-DoSW2(指撥開關設定為10)-Rai至於力浦LP-2900、AlteraUP1X實驗板或其他SRAM製程技術的CPLD晶片(如FLEX10K系列)的元件一般來說可規劃的容量均甚大,在進行實驗時應較不需要如此特別留意容量限制的問題。陳慶逸、林柏辰編著-文魁資訊51VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單
32、元5-3 簡易電子琴設計n實驗電路圖陳慶逸、林柏辰編著-文魁資訊52VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元5-3 簡易電子琴設計n程式與說明簡易電子琴實習除頻器程式碼:8libraryieee;9useieee.std_logic_1164.all;10useieee.std_logic_unsigned.all;11useieee.std_logic_arith.all;1213entityclk_div_musicis14generic(divisor:integer:=31);15port(16clk_in:instd_logic;17clk_out:outst
33、d_logic18);19endclk_div_music;2021architecturearchofclk_div_musicis22signalcnt2:std_logic;23begin24-clkdivider-25process(clk_in)26variablecnt1,divisor2:integerrange0todivisor;27begin28divisor2:=divisor/2;29-upcounter-30if(clk_ineventandclk_in=1)then31ifcnt1=divisorthen32cnt1:=1;33else34cnt1:=cnt1+1;
34、35endif;36endif;陳慶逸、林柏辰編著-文魁資訊53VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元5-3 簡易電子琴設計n程式與說明簡易電子琴實習除頻器程式碼(續):37-clk_outregisterclkgenerator-38if(clk_ineventandclk_in=1)then39if(cnt1=divisor2)or(cnt1=divisor)then40cnt2=notcnt2;41endif;42endif;43clk_out704537portmap(clk,clk1);38u2:clk_div_music陳慶逸、林柏辰編著-文魁資訊55VH
35、DL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元5-3 簡易電子琴設計n程式與說明簡易電子琴主程式碼(續)39genericmap(6275)-Rai293.7Hz1.8432M-627540portmap(clk,clk2);4142-process-43process(sel,clk1,clk2)44begin45caseselis46when01=music_outDo47when10=music_outRai48whenothers=music_out=0;49endcase;50endprocess;5152endarch;陳慶逸、林柏辰編著-文魁資訊56VHDL數位電路
36、實習與專題設計第三章序向邏輯電路與狀態機設計單元5-3 簡易電子琴設計n功能模擬與CPLD下載驗證燒錄於力浦電子FPT-3實驗板輸入腳位輸出腳位clk43Music_out28(SP1)Sel(1)44(DIP7)Sel(0)2(DIP8)Music_outSEL1SEL0陳慶逸、林柏辰編著-文魁資訊57VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元5-3 簡易電子琴設計n功能模擬與CPLD下載驗證燒錄於力浦電子LP-2900實驗板由於LP-2900實驗板上的EPF10K10TC144-4晶片容量較大,因此我們可以更改程式以實現較多的音調頻率(LP-2900上之振盪頻率為10
37、MHz)。33u1:clk_div_music34genericmap(38226)-Do261.6Hz35portmap(clk,clk1);36u2:clk_div_music37genericmap(34048)-Rai293.7Hz38portmap(clk,clk2);39u3:clk_div_music40genericmap(30339)-Mi329.6Hz41portmap(clk,clk3);42u4:clk_div_music43genericmap(28638)-Fa349.1Hz44portmap(clk,clk4);45u5:clk_div_music46generi
38、cmap(25510)-so392.0Hz47portmap(clk,clk5);48u6:clk_div_music49genericmap(22727)-La440.0Hz50portmap(clk,clk6);51u7:clk_div_music52genericmap(20275)-si493.2Hz53portmap(clk,clk7);54u8:clk_div_music55genericmap(19109)-Do523.3Hz56portmap(clk,clk8);57陳慶逸、林柏辰編著-文魁資訊58VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元5-3 簡易電子
39、琴設計n功能模擬與CPLD下載驗證燒錄於力浦電子LP-2900實驗板(續)輸入腳位輸出腳位clk55Music_out46(BUZZER)Sel(7)47(SW1)Sel(6)48(SW2)Sel(5)49(SW3)Sel(4)51(SW4)Sel(3)59(SW5)Sel(2)60(SW6)Sel(1)62(SW7)Sel(0)63(SW8)陳慶逸、林柏辰編著-文魁資訊59VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元5-3 簡易電子琴設計n功能模擬與CPLD下載驗證燒錄於力浦電子LP-2900實驗板(續)Music_out陳慶逸、林柏辰編著-文魁資訊60VHDL數位電路實
40、習與專題設計第三章序向邏輯電路與狀態機設計單元5-4 Moore狀態機與電子音樂歌曲的編輯製作 n相關知識000001xxxxxx狀態機計數器0000000100100011010001010110蜂鳴器多工器01114986.4Hz261.6Hz293.7Hz329.6Hz349.2Hz392Hz440Hz493.2Hz音調產生器010MhzDoReiMiFaSoLaSiclk陳慶逸、林柏辰編著-文魁資訊61VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元5-4 Moore狀態機與電子音樂歌曲的編輯製作n實驗電路圖陳慶逸、林柏辰編著-文魁資訊62VHDL數位電路實習與專題設計
41、第三章序向邏輯電路與狀態機設計單元5-4 Moore狀態機與電子音樂歌曲的編輯製作n程式與說明除頻器設計12entityclk_div_musicis13generic(divisor:integer:=31);14port(15clk_in:instd_logic;16clk_out:outstd_logic17);18endclk_div_music;1920architecturearchofclk_div_musicis21signalcnt2:std_logic;22begin23-clkdivider-24process(clk_in)25variablecnt1,divisor2
42、:integerrange0todivisor;26begin27divisor2:=divisor/2;28-upcounter-29if(clk_ineventandclk_in=1)then30ifcnt1=divisorthen31cnt1:=1;32else33cnt1:=cnt1+1;34endif;35endif;36-clk_outregisterclkgenerator-37if(clk_ineventandclk_in=1)then38if(cnt1=divisor2)or(cnt1=divisor)then39cnt2=notcnt2;40endif;41endif;42
43、clk_out=cnt2;43endprocess;44endarch;陳慶逸、林柏辰編著-文魁資訊63VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元5-4 Moore狀態機與電子音樂歌曲的編輯製作n程式與說明音調產生器12entitymusic_geneis13port(14clk:instd_logic;15clk1,clk2,clk3,clk4,clk5,16clk6,clk7,clk8:outstd_logic16);17endmusic_gene;1819architecturearchofmusic_geneis2021componentclk_div_music
44、22generic(divisor:integer:=8);1523port(1.24clk_in:instd_logic;2.25clk_out:outstd_logic3.26);4.27endcomponent;282930begin3132u1:clk_div_music33genericmap(38226)-Do261.6Hz34portmap(clk,clk1);35u2:clk_div_music36genericmap(34048)-Rai293.7Hz37portmap(clk,clk2);38u3:clk_div_music39genericmap(30339)-Mi329
45、.6Hz40portmap(clk,clk3);41u4:clk_div_music42genericmap(28638)-Fa349.1Hz43portmap(clk,clk4);44u5:clk_div_music45genericmap(25510)-so392.0Hz46portmap(clk,clk547u6:clk_div_music48genericmap(22727)-La440.0Hz48portmap(clk,clk6);陳慶逸、林柏辰編著-文魁資訊64VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元5-4 Moore狀態機與電子音樂歌曲的編輯製作50u7:
46、clk_div_music51genericmap(20275)-si493.2Hz52portmap(clk,clk7);53u8:clk_div_music54genericmap(19109)-Do523.3Hz55portmap(clk,clk8);565758endarch;n程式與說明音調產生器(續)陳慶逸、林柏辰編著-文魁資訊65VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元5-4 Moore狀態機與電子音樂歌曲的編輯製作n程式與說明狀態機計數器設計(moore狀態機)S00101S10011S20011S30100S40010S50010S60001S1101
47、01S100101S90100S80011S70010S120101陳慶逸、林柏辰編著-文魁資訊66VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元5-4 Moore狀態機與電子音樂歌曲的編輯製作n程式與說明 多工器電路 頻率產生器 十模計數器頻率產生器陳慶逸、林柏辰編著-文魁資訊67VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元5-4 Moore狀態機與電子音樂歌曲的編輯製作n程式與說明主程式電路連線(electmusic.gdf)陳慶逸、林柏辰編著-文魁資訊68VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元5-4 Moore狀態機與電子音
48、樂歌曲的編輯製作n功能模擬與CPLD下載驗證(力浦電子LP-2900實驗板)輸入腳位輸出腳位10Mhz55Music_out46(連接蜂鳴器)陳慶逸、林柏辰編著-文魁資訊69VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元5-5 移位暫存器與電子音樂歌曲的編輯製作 n相關知識000001010011100101110DoReiMiFa蜂鳴器多工器SoLaSi111301100100261.6Hz293.7Hz329.6Hz349.2Hz392Hz440Hz493.2Hz音調產生器010MHz5Hz移位暫存器陳慶逸、林柏辰編著-文魁資訊70VHDL數位電路實習與專題設計第三章序向
49、邏輯電路與狀態機設計單元5-5 移位暫存器與電子音樂歌曲的編輯製作n實驗電路圖陳慶逸、林柏辰編著-文魁資訊71VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元5-5 移位暫存器與電子音樂歌曲的編輯製作n程式與說明除頻器設計(略)音調產生器(略)移位暫存器設計12entityringis13port(CLK:instd_logic;14ringen:instd_logic;15ring:outstd_logic_vector(2downto0);16endring;1718architecturearcpt_ringofringis19signalrings:std_logic_
50、vector(2downto0);20signalringdata:std_logic_vector(104downto0);21begin2223musicp:process(clk,ringen)24begin25ifclk=1andclkEVENTthen26ifringen=1then27rings=ringdata(104downto102);28ringdata(2downto0)=ringdata(104downto102);29ringdata(104downto3)=ringdata(101downto0);30else31ringdata=00101001110010100
51、0011001000103211001000100001000000100010001330001101100100001110100134011100011100011001010000;32rings=000;33endif;34endif;35endprocessmusicp;36ring=rings;37383139endarcpt_ring;1.40陳慶逸、林柏辰編著-文魁資訊72VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元5-5 移位暫存器與電子音樂歌曲的編輯製作n程式與說明(續)多工器電路頻率產生器n十模計數器n頻率產生器陳慶逸、林柏辰編著-文魁資訊73VHD
52、L數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元5-5 移位暫存器與電子音樂歌曲的編輯製作n程式與說明(續)主程式電路連線(elect_ring_main.gdf)與腳位規劃陳慶逸、林柏辰編著-文魁資訊74VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元5-5 移位暫存器與電子音樂歌曲的編輯製作n功能模擬與CPLD下載驗證輸入腳位輸出腳位Clk_in5555Bee_out4646(連接蜂鳴器)SW_in4747(SW1)陳慶逸、林柏辰編著-文魁資訊75VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元6:多工掃描式七段顯示器實習陳慶逸、林柏辰編著-文魁資
53、訊76VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元6-1 二位數BCD計數器設計 n相關知識本實驗我們將設計一組兩位數的BCD計數器,並將計數動作以多工掃描的方式顯示在一個二合一的七段顯示器元件上。使用多工掃描顯示時,我們一次只讓一個七段顯示器的共同點得到驅動電壓而點亮,也就是說同時間內只有一個七段顯示器可以顯示;但當掃描速度夠快時,由於人類視覺暫留的原理,我們肉眼所看到的現象卻是所有的七段顯示器都穩定而且非閃爍的顯示(每一個位數的七段顯示器之輸入掃描頻率至少要大於人眼的視覺暫留頻率24Hz)。eab cdfgC2C1陳慶逸、林柏辰編著-文魁資訊77VHDL數位電路實習與專
54、題設計第三章序向邏輯電路與狀態機設計單元6-1 二位數BCD計數器設計n相關知識(續)多工掃描電路動作示意圖C2C1M0M1012to1Mux1to2decoderSel=0777IN1IN2HighLowC2C1M0M1012to1Mux1to2decoderSel=1777IN1IN2HighLow陳慶逸、林柏辰編著-文魁資訊78VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元6-1 二位數BCD計數器設計n相關知識(續)多工掃描式兩位數BCD計數器電路架構圖C2C1M0M1012to1Mux1to2decoder444七段顯示器解碼電路7兩位數BCD計數器clk1Hz64
55、Hz頻率產生器selsel陳慶逸、林柏辰編著-文魁資訊79VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元6-1 二位數BCD計數器設計n相關知識(續)本實驗中所設計之兩位數BCD計數器電路方塊連線關係圖Clk_1HzClk_inUp_counter4_10clk4bin4to8decoderBin2ledClk_div_1_64Clk_64Hz447Bin2seg0_scanclkq_oneq_tenSeg-outSeg-one-enSeg-ten-enSeg-enceRst-nceRst_nSeg_enClk_out1Clk_out2clkLed(7)Led(6)Led(5
56、)Led(4)Led(3)Led(2)Led(1)Led(0)Led_enLed_enq_oneq_ten陳慶逸、林柏辰編著-文魁資訊80VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元6-1 二位數BCD計數器設計n實驗電路圖陳慶逸、林柏辰編著-文魁資訊81VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元6-1 二位數BCD計數器設計n程式與說明產生計數器計數時脈與七段顯示器掃描頻率之除頻電路程式碼11-12entityclk_div_1_64is13port(14clk_in:instd_logic;15clk_out1:outstd_logic;16clk
57、_out2:outstd_logic17);18endclk_div_1_64;1920architectureaofclk_div_1_64is2122-SIGNALDECLARED-signalcnt:std_logic_vector(20downto0);-*counter24signalreset:std_logic;-reset25begin2627-PROGRAMBODY-28process(clk_in)29begin30ifreset=1then31cnt=000000000000000000000;32elsifclk_ineventandclk_in=1then33cnt=
58、cnt+1;34endif;35endprocess;36reset=1whencnt=1843200else0;-*divisor184320038clk_out1=cnt(20);39clk_out2=cnt(14);4041enda;陳慶逸、林柏辰編著-文魁資訊82VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元6-1 二位數BCD計數器設計n程式與說明BCD上數計數器程式碼12entityup_counter4_10is13port(14clk:instd_logic;-systemclock15rst_n:instd_logic;-reset16ce:instd_lo
59、gic;-chipenable17q_one:outstd_logic_vector(3downto0);-counteroneoutput18q_ten:outstd_logic_vector(3downto0)-countertenoutput19);20endup_counter4_10;2122architectureaofup_counter4_10is2324-SIGNALDECLARED-25signalq_one_temp:std_logic_vector(3downto0);-tempq_one26signalq_ten_temp:std_logic_vector(3down
60、to0);-tempq_ten27begin28陳慶逸、林柏辰編著-文魁資訊83VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元6-1 二位數BCD計數器設計n程式與說明BCD上數計數器程式碼(續)29-PROGRAMBODY-30process(clk)31begin32if(ce=0orrst_n=0)then33q_one_temp=0000;34q_ten_temp=9)then-carryin(one)37q_one_temp=9)then-carryin(ten)39q_ten_temp=0000;40else41q_ten_temp=q_ten_temp+1;42
61、endif;43else44q_one_temp=q_one_temp+1;45endif;46endif;47endprocess;4849q_one=q_one_temp;50q_ten=q_ten_temp;5152enda;陳慶逸、林柏辰編著-文魁資訊84VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元6-1 二位數BCD計數器設計n程式與說明多工掃描顯示之七段顯示器解碼電路設計程式碼23entitybin2seg0_scanis24port(25clk:instd_logic;-64hzclock26seg_en:instd_logic;-segmentenable2
62、7q_one:instd_logic_vector(3downto0);-binaryinputofone28q_ten:instd_logic_vector(3downto0);-binaryinputoften29seg_out:outstd_logic_vector(6downto0);-7segmentoutput30seg_one_en:outstd_logic;-7segmentoneenable31seg_ten_en:outstd_logic-7segmenttenenable32);33endbin2seg0_scan;3435architecturearchofbin2se
63、g0_scanis3637-SIGNALDECLARED-38signalbin:std_logic_vector(3downto0);-binarycode39signalseg:std_logic_vector(6downto0);-segmentcode40signalsel:integerrange0to1;-scancoutnter41begin陳慶逸、林柏辰編著-文魁資訊85VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元6-1 二位數BCD計數器設計n程式與說明多工掃描顯示之七段顯示器解碼電路設計程式碼(續)4243-PROGRAMBODY-44-scanands
64、ignalassign-45process(clk,seg_en)46begin47ifclkeventandclk=1then48if(seg_en=0)then49seg_one_en=0;50seg_ten_en=0;51sel=0;52else53sel56bin=q_one;57seg_out=seg;58seg_one_en=0;59seg_ten_en61bin=q_ten;62seg_out=seg;63seg_one_en=1;64seg_ten_en66null;67endcase;68endif;69endif;70endprocess;71陳慶逸、林柏辰編著-文魁資訊8
65、6VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元6-1 二位數BCD計數器設計n程式與說明多工掃描顯示之七段顯示器解碼電路設計程式碼(續)72-binarytosevensegmentdecoder-73process(bin)74begin75casebinis75when0000=segsegsegsegsegsegsegsegsegsegseg=1111111;87endcase;88endprocess;8990endarch;陳慶逸、林柏辰編著-文魁資訊87VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元6-1 二位數BCD計數器設計n程式與說明低電
66、位動作之四對八解碼電路程式碼(略)掃描式多工顯示之兩位數BCD計數器主程式碼11entityup_scan_topis12port(13clk:instd_logic;-1.8432MHz14rst_n:instd_logic;15ce:instd_logic;16led_en:instd_logic;17seg_en:instd_logic;18led:outstd_logic_vector(7downto0);19seg_out:outstd_logic_vector(6downto0);20seg_one_en:outstd_logic;21seg_ten_en:outstd_logic
67、22);23endup_scan_top;2425architecturearchofup_scan_topis2627-COMPONENTDECLARED-28-clk_div1hz64hzcomponent-29componentclk_div_1_6430port(31clk_in:instd_logic;32clk_out1:outstd_logic;33clk_out2:outstd_logic34);35endcomponent;3637-up_counter_4_10component-38componentup_counter4_1039port(40clk:instd_log
68、ic;-systemclock41rst_n:instd_logic;-reset42ce:instd_logic;-chipenable46endcomponent;陳慶逸、林柏辰編著-文魁資訊88VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元6-1 二位數BCD計數器設計n程式與說明掃描式多工顯示之兩位數BCD計數器主程式碼(續)43q_one:outstd_logic_vector(3downto0);-counteroneoutput44q_ten:outstd_logic_vector(3downto0)-countertenoutput45);46endcompo
69、nent;4748-binaryto7segmentdecoder-49componentbin2seg0_scan50port(51clk:instd_logic;-64hzclock52seg_en:instd_logic;-segmentenable53q_one:instd_logic_vector(3downto0);54q_ten:instd_logic_vector(3downto0);55seg_out:outstd_logic_vector(6downto0);56seg_one_en:outstd_logic;57seg_ten_en:outstd_logic58);59e
70、ndcomponent;60陳慶逸、林柏辰編著-文魁資訊89VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元6-1 二位數BCD計數器設計n程式與說明掃描式多工顯示之兩位數BCD計數器主程式碼(續)61 -binary to led8 decoder-62 component bin2led0_1063 port (64led_en : in std_logic;65bin : in std_logic_vector (3 downto 0); led : out std_logic_vector (7 downto 0)67 );68 end component;6970 -
71、SIGNAL DECLARED-71 signal clk_1hz : std_logic;72 signal clk_64hz: std_logic;6473 signal q_one: std_logic_vector(3 downto 0);6574 signal q_ten: std_logic_vector(3 downto 0);6675 6776 begin6877 78 -Frequency divider-79 u1: clk_div_1_64 port map (clk, clk_1hz, clk_64hz);80 81 -4 bit up counter-82u2: up
72、_counter4_10 83 port map (clk_1hz, rst_n, ce, q_one, q_ten);8384 -binary to LED decoder-85 u3: bin2led0_10 port map (led_en, q_one, led);86 87 -binary to seven segment decoder-u4: bin2seg0_scan port map (clk_64hz, seg_en, q_one, q_ten, seg_out,89 seg_one_en, seg_ten_en);8290 end arch;陳慶逸、林柏辰編著-文魁資訊9
73、0VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元6-1 二位數BCD計數器設計n程式與說明掃描式多工顯示之兩位數BCD計數器主程式碼電路結構(續)陳慶逸、林柏辰編著-文魁資訊91VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元6-1 二位數BCD計數器設計n功能模擬與CPLD下載驗證輸出腳位Seg_out(0)16(a)Seg_out(1)17(b)Seg_out(2)18(c)Seg_out(3)19(d)Seg_out(4)20(e)Seg_out(5)21(f)Seg_out(6)24(g)Seg_one_en27(7SEGIO2)Seg_ten_en2
74、6(7SEGIO1)Led(7)4(LED1)Led(6)5(LED2)Led(5)6(LED3)Led(4)8(LED4)Led(3)9(LED5)Led(2)11(LED6)Led(1)12(LED7)輸入clkRst_nceSeg_enLed_en腳位4337(SW1)39(SW2)40(SW3)41(SW4)Led(0)14(LED8)Rst_nceSeg_enLed_enLed7Led07Segment陳慶逸、林柏辰編著-文魁資訊92VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元6-2 四位數BCD計數器設計與頻率控制 n相關知識本實驗我們將設計一組四位數的BCD計
75、數器,並將計數動作以多工掃描的方式顯示在力浦電子LP-2900實驗板上的六合一七段顯示器元件(高電位驅動)上。eab cdfgDE3DE1DE2為了節省CPLDI/O腳位的使用,LP-2900實驗板上已經用一顆74138解碼器連接六個七段顯示器的共同點C1C6,因此我們僅需以CPLD來控制74138解碼器的DE3、DE2和DE1三個輸入端即能選擇所欲點亮的七段顯示器。陳慶逸、林柏辰編著-文魁資訊93VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元6-2 四位數BCD計數器設計與頻率控制n實驗功能當Enable=0時,計數器不動作;Enable=1開始執行計數動作。Enable鍵
76、連接至實驗板上的SW6這個開關。當clear=1時,計數器被重置為0。Clear鍵連接至實驗板上的SW5這個開關。SW1和SW2這兩個開關決定掃描頻率。SW3和SW4這兩個開關決定計數頻率。陳慶逸、林柏辰編著-文魁資訊94VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元6-2 四位數BCD計數器設計與頻率控制n實驗電路圖陳慶逸、林柏辰編著-文魁資訊95VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元6-2 四位數BCD計數器設計與頻率控制n程式與說明十模計數器(略)頻率產生器陳慶逸、林柏辰編著-文魁資訊96VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機
77、設計單元6-2 四位數BCD計數器設計與頻率控制n四位數BCD上數計數器程式碼11entityBCD4_counteris1213port(clk,clr,en:instd_logic;14bcd3,bcd2,bcd1,bcd0:bufferstd_logic_vector(3downto0);15endBCD4_counter;1617architectureaofBCD4_counteris18begin19process(clk)20begin21ifclkeventandclk=1then22ifclr=1then23bcd3=0000;bcd2=0000;bcd1=0000;bcd0
78、=0000;24elsifen=1then25ifbcd0=1001then26bcd0=0000;27ifbcd1=1001then28bcd1=0000;29ifbcd2=1001then30bcd2=0000;31ifbcd3=1001then32bcd3=0000;33else34bcd3=bcd3+1;35endif;36else37bcd2=bcd2+1;38endif;39else40bcd1=bcd1+1;41endif;42else43bcd0=bcd0+1;44endif;45endif;46endif;47endprocess;48enda;陳慶逸、林柏辰編著-文魁資訊9
79、7VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元6-2 四位數BCD計數器設計與頻率控制n多工掃描顯示之七段顯示器解碼電路設計程式碼 10entitysevseg_lp2900is11port(x:instd_logic_vector(3downto0);12y:outstd_logic_vector(6downto0);13endsevseg_lp2900;1415architectureaofsevseg_lp2900is16begin17withxselect18y=1111110when0000,190110000when0001,201101101when0010,
80、211111001when0011,220110011when0100,231011011when0101,241011111when0110,251110000when0111,261111111when1000,271111011when1001,281110111when1010,290011111when1011,301001110when1100,310111101when1101,321001111when1110,331000111when1111,340000000whenothers;35enda;陳慶逸、林柏辰編著-文魁資訊98VHDL數位電路實習與專題設計第三章序向邏輯電
81、路與狀態機設計單元6-2 四位數BCD計數器設計與頻率控制n四對一多工器(略) n四位元寬位之四對一多工器(略) n二位元計數器(略) 陳慶逸、林柏辰編著-文魁資訊99VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元6-2 四位數BCD計數器設計與頻率控制n主程式碼的腳位連結結構圖陳慶逸、林柏辰編著-文魁資訊100VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元6-2 四位數BCD計數器設計與頻率控制n功能模擬與CPLD下載驗證(LP-2900實驗板)輸入腳位輸出腳位Clk_in55Y(6)23(a)Clear59(SW5)Y(5)26(b)Enable60(S
82、W6)Y(4)27(c)Scan_freq_sel(1)47(SW1)Y(3)28(d)Scan_freq_sel(0)48(SW2)Y(2)29(e)counter_clk_sel(1)49(SW3)Y(1)30(f)counter_clk_sel(0)51(SW4)Y(0)31(g)DE337DE236DE133陳慶逸、林柏辰編著-文魁資訊101VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計單元6-2 四位數BCD計數器設計與頻率控制n功能模擬與CPLD下載驗證(LP-2900實驗板)(續)陳慶逸、林柏辰編著-文魁資訊102VHDL數位電路實習與專題設計第三章序向邏輯電路與狀態機設計勘誤n3-8圖3-4裡的文字Countervalue變成Counteruen3-1846列IF沒有粗體陳慶逸、林柏辰編著-文魁資訊103VHDL數位電路實習與專題設計