版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
EDA技術及其應用第4章應用VHDL設計數(shù)字系統(tǒng)
EDA技術及其應用第4章應用VHDL設計數(shù)字系統(tǒng)1項目1:電子琴的設計設計目標:設計一個電子琴,具有8個按鍵,當按下某一個按鍵的時候,能夠演奏8個音符之一:
1、2、3、4、5、6、7、H1視頻演示知識點:熟練掌握計數(shù)器的設計方法;熟練掌握可變分頻器的設計方法;熟練掌握IF語句的使用;熟練掌握CASE語句的使用;項目1:電子琴的設計設計目標:2項目1:電子琴的設計項目分析:設計問題1:如何發(fā)出不同音調(diào)的聲音?設計關鍵1:可變分頻器/
數(shù)控分配器。項目1:電子琴的設計項目分析:設計關鍵1:3項目1:電子琴的設計項目分析:設計問題2:按下不同按鍵時,如何得到不同的分頻數(shù)?設計關鍵2:向可變分頻器(數(shù)控分配器)提供分頻數(shù)字,需要一個“按鍵”到“分頻數(shù)”的轉(zhuǎn)換模塊。...18?項目1:電子琴的設計項目分析:...18?4項目1:電子琴的設計項目分析:設計關鍵1:
可變分頻器(數(shù)控分配器)!項目1:電子琴的設計項目分析:5項目1:電子琴的設計LIBRARY
IEEE;USE
IEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYCNT10IS
PORT
(CLK,RST,EN:IN
STD_LOGIC;CNT :OUT
STD_LOGIC_VECTOR(3DOWNTO0);COUT :OUT
STD_LOGIC
);ENDCNT10;知識回顧:10進制計數(shù)器設計項目1:電子琴的設計LIBRARYIEEE;知識回顧:106項目1:電子琴的設計ARCHITECTUREbehavOFCNT10ISBEGIN
PROCESS(CLK,RST,EN)
VARIABLECNTI:STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
IFRST='1'THEN
CNTI:=(OTHERS=>'0');--計數(shù)器異步復位
ELSIFCLK'EVENT
ANDCLK='1'THEN--檢測時鐘上升沿
IFEN='1'THEN--檢測是否允許計數(shù)(同步使能)
IFCNTI<9THEN--檢測是否小于9
CNTI:=CNTI+1;--小于9,允許加1計數(shù)
ELSECNTI:=(OTHERS=>‘0’);--大于等于9,計數(shù)值清零
END
IF;
END
IF;
END
IF;
IFCNTI=9THENCOUT<=‘1’;--計數(shù)等于9,輸出進位信號
ELSECOUT<='0';
END
IF;CNT<=CNTI;--將計數(shù)值向端口輸出
END
PROCESS;ENDbehav;
知識回顧:10進制計數(shù)器設計項目1:電子琴的設計ARCHITECTUREbehavO7仿真結果:10進制計數(shù)器設計結論:計數(shù)器就可以完成分頻器的任務!項目1:電子琴的設計仿真結果:10進制計數(shù)器設計結論:項目1:電子琴的設計8項目1:電子琴的設計LIBRARY
IEEE;USE
IEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY
CNT_N
IS
PORT
(CLK,RST,EN:IN
STD_LOGIC;
N :INSTD_LOGIC_VECTOR(11DOWNTO0);
CNT :OUT
STD_LOGIC_VECTOR(11DOWNTO0);COUT :OUT
STD_LOGIC
);END
CNT_N;設計關鍵:N進制計數(shù)器設計——可變分頻器項目1:電子琴的設計LIBRARYIEEE;設計關鍵:N進9項目1:電子琴的設計ARCHITECTUREbehavOF
CNT_N
ISBEGIN
PROCESS(CLK,RST,EN)
VARIABLECNTI:STD_LOGIC_VECTOR(11DOWNTO0);
BEGIN
IFRST='1'THEN
CNTI:=(OTHERS=>'0');--計數(shù)器異步復位
ELSIFCLK'EVENT
ANDCLK='1'THEN--檢測時鐘上升沿
IFEN='1'THEN--檢測是否允許計數(shù)(同步使能)
IF
CNTI<N-1
THEN--檢測是否小于N-1
CNTI:=CNTI+1;--小于N-1,允許加1計數(shù)
ELSECNTI:=(OTHERS=>'0');--大于等于N-1,計數(shù)值清零
END
IF;
END
IF;
END
IF;
IF
CNTI=N-1
THENCOUT<='1';--計數(shù)等于N-1,輸出進位信號
ELSECOUT<='0';
END
IF;CNT<=CNTI;--將計數(shù)值向端口輸出
END
PROCESS;ENDbehav;
設計關鍵:N進制計數(shù)器設計——可變分頻器項目1:電子琴的設計ARCHITECTUREbehavO10設計關鍵:N進制計數(shù)器設計——可變分頻器結論:COUT實現(xiàn)了N分頻,但是占空比是1/N,能量不足,無法驅(qū)動蜂鳴器工作。N分頻,占空1/N項目1:電子琴的設計設計關鍵:N進制計數(shù)器設計——可變分頻器結論:N分頻,占空111項目1:電子琴的設計LIBRARY
IEEE;USE
IEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY
CNT_N
IS
PORT
(CLK,RST,EN:IN
STD_LOGIC;
N :INSTD_LOGIC_VECTOR(11DOWNTO0);
CNT :OUT
STD_LOGIC_VECTOR(11DOWNTO0);COUT :OUT
STD_LOGIC
);END
CNT_N;設計關鍵:改進的N進制計數(shù)器——可變分頻器COUT占空比50%項目1:電子琴的設計LIBRARYIEEE;設計關鍵:12項目1:電子琴的設計ARCHITECTUREbehavOF
CNT_N
ISBEGIN
PROCESS(CLK,RST,EN)
VARIABLECNTI:STD_LOGIC_VECTOR(11DOWNTO0);
BEGIN
IFRST='1'THEN
CNTI:=(OTHERS=>'0');--計數(shù)器異步復位
ELSIFCLK'EVENT
ANDCLK='1'THEN--檢測時鐘上升沿
IFEN='1'THEN--檢測是否允許計數(shù)(同步使能)
IF
CNTI<N-1
THEN
CNTI:=CNTI+1;--小于N/2,允許加1計數(shù)
ELSECNTI:=(OTHERS=>'0');--大于等于N/2,計數(shù)值清零
END
IF;
END
IF;END
IF;IF
CNTI<CONV_INTEGER(N)/2
THENCOUT<=‘0';
ELSECOUT<=‘1';
END
IF;CNT<=CNTI;COUT<=COUTI;--將計數(shù)值向端口輸出
END
PROCESS;ENDbehav;
設計關鍵:改進的N進制計數(shù)器——可變分頻器COUT占空比50%項目1:電子琴的設計ARCHITECTUREbehavO13占空比非50%占空比接近50%結論:COUT實現(xiàn)了N分頻,當N比較大時,占空比是接近50%,能量足以驅(qū)動蜂鳴器工作。設計關鍵:改進的N進制計數(shù)器——可變分頻器COUT占空比50%項目1:電子琴的設計占空比非50%占空比接近50%結論:設計關鍵:項目1:電子琴14項目1:電子琴的設計項目分析:設計關鍵2:向可變分頻器(數(shù)控分配器)提供分頻數(shù)字,需要一個“按鍵”到“分頻數(shù)”的轉(zhuǎn)換模塊。項目1:電子琴的設計項目分析:15項目1:電子琴的設計LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYconverterIS
PORT
(
key:INSTD_LOGIC_VECTOR(7DOWNTO0);
en:OUTSTD_LOGIC;
div_num:OUTintegerrange0to4095;
CODE:OUTSTD_LOGIC_VECTOR(3DOWNTO0);
HIGH:OUTSTD_LOGIC
);END
entityconverter;設計關鍵2:
“按鍵”到“分頻數(shù)”的轉(zhuǎn)換模塊。項目1:電子琴的設計LIBRARYIEEE;設計關鍵2:16項目1:電子琴的設計ARCHITECTUREoneOFconverterIS
BEGIN
PROCESS(converter)
BEGIN
CASEkeyIS--譯碼電路,查表方式,控制音調(diào)的預置數(shù)
WHEN"00000000"=>div_num<=0;en<='0';CODE<="0000";HIGH<='0‘;--不按鍵,0Hz,不響
WHEN"00000001"=>div_num<=2867;en<='1';CODE<="0001";HIGH<='0';--按鍵1,中音1,523.25Hz;
WHEN"00000010"=>div_num<=2554;en<='1';CODE<="0010";HIGH<='0';--按鍵2,中音2,587.33Hz;
WHEN"00000100"=>div_num<=2275;en<='1';CODE<="0011";HIGH<='0';--按鍵3,中音3,659.26Hz;
WHEN"00001000"=>div_num<=2148;en<='1';CODE<="0100";HIGH<='0';--按鍵4,中音4,698.46Hz;
WHEN"00010000"=>div_num<=1913;en<='1';CODE<="0101";HIGH<='0';--按鍵5,中音5,783.99Hz;
WHEN"00100000"=>div_num<=1705;en<='1';CODE<="0110";HIGH<='0';--按鍵6,中音6,880Hz;
WHEN"01000000"=>div_num<=1519;en<='1';CODE<="0111";HIGH<='0';--按鍵7,中音7,987.77Hz;
WHEN"10000000"=>div_num<=1433;en<='1';CODE<="0001";HIGH<='1';--按鍵8,高音1,1046.5Hz;
WHENothers =>div_num<=0;en<='0';CODE<="0000";HIGH<='0';--同時按多個鍵,0Hz,不響ENDCASE;
ENDPROCESS;ENDone;設計關鍵2:
“按鍵”到“分頻數(shù)”的轉(zhuǎn)換模塊。項目1:電子琴的設計ARCHITECTUREoneOF17項目1:電子琴的設計設計關鍵2:
“按鍵”到“分頻數(shù)”的轉(zhuǎn)換模塊。項目1:電子琴的設計設計關鍵2:18設計關鍵3:
在頂層原理圖中組裝各個功能模塊。項目1:電子琴的設計思考:原理圖作為頂層設計文件有什么優(yōu)點和缺點?如何使用“元件例化”語句完成模塊調(diào)用和信號線連接,頂層程序設計怎樣設計?VHDL程序作為頂層設計有什么優(yōu)缺點?設計關鍵3:項目1:電子琴的設計思考:194.31位全加器的VHDL描述
4.3.1半加器描述LIBRARY
IEEE;--1位二進制全加器頂層設計描述USE
IEEE.STD_LOGIC_1164.ALL;ENTITYf_adderIS
PORT(ain,bin,cin:IN
STD_LOGIC;cout,sum:OUT
STD_LOGIC);END
ENTITYf_adder;ARCHITECTUREfd1OFf_adderIS
COMPONENTh_adder--調(diào)用半加器聲明語句
PORT(a,b:IN
STD_LOGIC;co,so:OUT
STD_LOGIC);
ENDCOMPONENT;
COMPONENTor2a
PORT(a,b:IN
STD_LOGIC;c:OUT
STD_LOGIC);
ENDCOMPONENT;SIGNALd,e,f:STD_LOGIC;--定義3個信號作為內(nèi)部的連接線。BEGINu1:h_adderPORTMAP(a=>ain,b=>bin,co=>d,so=>e);--元件例化語句u2:h_adderPORT
MAP(a=>e,b=>cin,co=>f,so=>sum);u3:or2aPORT
MAP(a=>d,b=>f,c=>cout);END
ARCHITECTUREfd1;
4.31位全加器的VHDL描述4.3.1半加器描述20項目1:電子琴的設計總結知識點回顧:IF語句的使用;CASE語句的使用;計數(shù)器的設計;可變分頻器的設計;項目1:電子琴的設計總結知識點回顧:21項目1:電子琴的設計總結知識點回顧:IF語句的使用;IF語句既可以描述組合電路,也可以描述時序電路;完整條件IF語句用來描述組合電路;
IFs='0'THENy<=a;ELSE
y<=b;END
IF;IFCLK'EVENT
ANDCLK='1'THEN
CNT<=CNT+1;END
IF;不完整條件IF語句用來描述時序電路;項目1:電子琴的設計總結知識點回顧:IFs='0'22項目1:電子琴的設計總結知識點回顧:CASE語句的使用;CASE語句最適合于描述譯碼器電路;不完整的CASE語句會生成不必要的鎖存器;
CASEkeyIS--譯碼電路,查表方式,控制音調(diào)的預置數(shù)
WHEN"00000000"=>div_num<=0;en<='0';CODE<="0000";HIGH<='0‘;--不按鍵,0Hz,不響
WHEN"00000001"=>div_num<=2867;en<='1';CODE<="0001";HIGH<='0';--按鍵1,中音1,523.25Hz;
WHEN"00000010"=>div_num<=2554;en<='1';CODE<="0010";HIGH<='0';--按鍵2,中音2,587.33Hz;
WHEN"00000100"=>div_num<=2275;en<='1';CODE<="0011";HIGH<='0';--按鍵3,中音3,659.26Hz;
WHEN"00001000"=>div_num<=2148;en<='1';CODE<="0100";HIGH<='0';--按鍵4,中音4,698.46Hz;
WHEN"00010000"=>div_num<=1913;en<='1';CODE<="0101";HIGH<='0';--按鍵5,中音5,783.99Hz;
WHEN"00100000"=>div_num<=1705;en<='1';CODE<="0110";HIGH<='0';--按鍵6,中音6,880Hz;
WHEN"01000000"=>div_num<=1519;en<='1';CODE<="0111";HIGH<='0';--按鍵7,中音7,987.77Hz;
WHEN"10000000"=>div_num<=1433;en<='1';CODE<="0001";HIGH<='1';--按鍵8,高音1,1046.5Hz;
WHENothers =>div_num<=0;en<='0';CODE<="0000";HIGH<='0';--同時按多個鍵,0Hz,不響ENDCASE;項目1:電子琴的設計總結知識點回顧:CASEkey23項目1:電子琴的設計總結知識點回顧:計數(shù)器的設計;可變分頻器的設計;項目1:電子琴的設計總結知識點回顧:24項目2:音樂播放器的設計設計目標:設計一個音樂播放器,可以播放一首歌曲;拓展設計:設計一個音樂播放器,可以播放多首歌曲;具有“播放/停止”、“暫停播放”和2個按鍵;當?shù)谝淮伟聪隆安シ?停止”按鍵的時候,能夠重頭開始演奏一首動聽的樂曲,第二次按下鍵,就停止播放;當按下“暫停播放”按鍵的時候能夠在暫停演奏和繼續(xù)演奏之間切換;項目2:音樂播放器的設計設計目標:25項目2:音樂播放器的設計存儲和
讀音符模塊頻率轉(zhuǎn)換模塊數(shù)控分頻模塊項目2:音樂播放器的設計存儲和
讀音符模塊頻率轉(zhuǎn)換模塊數(shù)控分26項目2:音樂播放器的設計4-5樂曲硬件演奏電路設計
ROM中的數(shù)據(jù)文件music.mifWIDTH=4;--“梁?!睒非葑鄶?shù)據(jù)DEPTH=256;ADDRESS_RADIX=DEC;DATA_RADIX=DEC;CONTENTBEGIN--注意實用文件中要展開以下數(shù)據(jù),每一組占一行00:3;01:3;02:3;03:3;04:5;05:5;06:5;07:6;08:8;09:8;10:8;11:9;12:6;13:8;14:5;15:5;16:12;17:12;18:12;19:15;20:13;21:12;22:10;23:12;24:9;25:9;26:9;27:9;28:9;29:9;30:9;31:0;32:9;33:9;34:9;35:10;36:7;37:7;38:6;39:6;40:5;41:5;42:5;43:6;44:8;45:8;46:9;47:9;48:3;49:3;50:8;51:8;52:6;53:5;54:6;55:8;56:5;57:5;58:5;59:5;60:5;61:5;62:5;63:5;64:10;65:10;66:10;67:12;68:7;69:7;70:9;71:9;72:6;73:8;74:5;75:5;76:5;77:5;78:5;79:5;80:3;81:5;82:3;83:3;84:5;85:6;86:7;87:9;88:6;89:6;90:6;91:6;92:6;93:6;94:5;95:6;96:8;97:8;98:8;99:9;100:12;101:12;102:12;103:10;104:9;105:9;106:10;107:9;108:8;109:8;110:6;111:5;112:3;113:3;114:3;115:3;116:8;117:8;118:8;119:8;120:6;121:8;122:6;123:5;124:3;125:5;126:6;127:8;128:5;129:5;130:5;131:5;132:5;133:5;134:5;135:5;136:0;137:0;138:0;END;
設計關鍵1:存儲和讀音符模塊項目2:音樂播放器的設計4-5樂曲硬件演奏電路設計ROM27項目2:音樂播放器的設計LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYNoteTabsISPORT(clk :INSTD_LOGIC;ToneIndex :OUTSTD_LOGIC_VECTOR(3DOWNTO0));END;ARCHITECTUREoneOFNoteTabsISCOMPONENTMUSIC--音符數(shù)據(jù)ROMPORT(address :INSTD_LOGIC_VECTOR(7DOWNTO0);clock :INSTD_LOGIC;q :OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDCOMPONENT; SIGNALCounter:STD_LOGIC_VECTOR(7DOWNTO0);BEGINPROCESS(clk,Counter)BEGINIF(clk'EVENTANDclk='1')THENIFCounter=138THENCounter<="00000000";ELSECounter<=Counter+1;ENDIF;ENDIF;ENDPROCESS;u1:MUSICPORTMAP(address => Counter, clock => clk, q => ToneIndex);END;設計關鍵1:存儲和讀音符模塊項目2:音樂播放器的設計LIBRARYIEEE;設計關鍵128項目2:音樂播放器的設計設計關鍵2:頻率轉(zhuǎn)換模塊LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYToneTabaISPORT(Index : INSTD_LOGIC_VECTOR(3DOWNTO0); CODE : OUTSTD_LOGIC_VECTOR(3DOWNTO0); HIGH : OUTSTD_LOGIC; en : OUTSTD_LOGIC; div_num : OUT integerrange0to4095);END;CASEIndexIS--譯碼電路,查表方式,控制音調(diào)的預置數(shù)WHEN"0001"=>div_num<=2867;en<='1';CODE<="0001";HIGH<='0';--中音1,523.25 Hz;WHEN"0010"=>div_num<=2554;en<='1';CODE<="0010";HIGH<='0';--中音2,587.33 Hz;WHEN"0011"=>div_num<=2275;en<='1';CODE<="0011";HIGH<='0';--中音3,659.26 Hz;WHEN"0100"=>div_num<=2148;en<='1';CODE<="0100";HIGH<='0';--中音4,698.46 Hz;WHEN"0101"=>div_num<=1913;en<='1';CODE<="0101";HIGH<='0';--中音5,783.99 Hz;WHEN"0110"=>div_num<=1705;en<='1';CODE<="0110";HIGH<='0';--中音6,880 Hz;WHEN"0111"=>div_num<=1519;en<='1';CODE<="0111";HIGH<='0';--中音7,987.77 Hz;WHEN"1000"=>div_num<=1433;en<='1';CODE<="0001";HIGH<='1';--高音1,1046.5 Hz;WHEN"1001"=>div_num<=1277;en<='1';CODE<="0010";HIGH<='1';--高音2,1174.66 Hz;WHEN"1010"=>div_num<=1138;en<='1';CODE<="0011";HIGH<='1';--高音3,1318.51 Hz;WHEN"1011"=>div_num<=1074;en<='1';CODE<="0100";HIGH<='1';--高音4,1396.91 Hz;WHEN"1100"=>div_num<=957;en<='1';CODE<="0101";HIGH<='1';--高音5,1567.98 Hz;WHEN"1101"=>div_num<=852;en<='1';CODE<="0110";HIGH<='1';--高音6,1760 Hz;WHEN"1110"=>div_num<=759;en<='1';CODE<="0111";HIGH<='1';--高音7,1975.53 Hz;WHEN"1111"=>div_num<=672;en<='1';CODE<="0001";HIGH<='1';--高高音1,2200 Hz;WHENothers=>div_num<=0;en<='0';CODE<="0000";HIGH<='0'; --不響ENDPROCESS;END;
項目2:音樂播放器的設計設計關鍵2:頻率轉(zhuǎn)換模塊LIBRAR29項目2:音樂播放器的設計設計關鍵3:數(shù)控分頻模塊LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYSpeakeraISPORT(CLK_1500kHz :INSTD_LOGIC;EN :INSTD_LOGIC;div_num :INintegerrange0to4095;Speaker :OUTSTD_LOGIC);END;ARCHITECTUREoneOFSpeakeraISBEGINPROCESS(CLK_1500kHz,EN)VARIABLECQI:integerrange0to4095;VARIABLESpeaker_reg:STD_LOGIC;BEGINIFCLK_1500kHz'EVENTANDCLK_1500kHz='1'THEN --檢測時鐘上升沿IFEN='1'THEN --檢測是否允許計數(shù)(同步使能)IFCQI=0THENCQI:=div_num/2-1;Speaker_reg:=notSpeaker_reg;ELSECQI:=CQI-1;ENDIF;ENDIF;ENDIF;Speaker<=Speaker_reg;ENDPROCESS;END;項目2:音樂播放器的設計設計關鍵3:數(shù)控分頻模塊LIBRAR30項目2:音樂播放器的設計存儲和
讀音符模塊頻率轉(zhuǎn)換模塊數(shù)控分頻模塊請寫出對應的元件例化語句設計關鍵4:組合子模塊,生成songer模塊項目2:音樂播放器的設計存儲和
讀音符模塊頻率轉(zhuǎn)換模塊數(shù)控分31項目2:音樂播放器的設計存儲和
讀音符模塊頻率轉(zhuǎn)換模塊數(shù)控分頻模塊設計關鍵4:組合子模塊,生成songer模塊項目2:音樂播放器的設計存儲和
讀音符模塊頻率轉(zhuǎn)換模塊數(shù)控分32項目2:音樂播放器的設計設計關鍵5:分頻模塊,產(chǎn)生4Hz和1.5MHz時鐘信號項目2:音樂播放器的設計設計關鍵5:分頻模塊,產(chǎn)生4Hz和133項目2:音樂播放器的設計LIBRARYIEEE;--分頻模塊,從20MHz到4HZ和1.5MHzUSEIEEE.STD_LOGIC_1164.ALL;ENTITYfreq_divIS
PORT(CLK_30MHz :INSTD_LOGIC;CLK_4Hz :outSTD_LOGIC;CLK_1500kHz :outSTD_LOGIC);END;ARCHITECTUREoneOFfreq_divIS
signaldivider,divider1 : integerrange0to187500;
signalCLK_1500kHz_tmp : STD_LOGIC;
signalCLK_4HZ_tmp : STD_LOGIC;beginCLK_1500kHz<=CLK_1500kHz_tmp;
process(CLK_30MHz)
begin
if(CLK_30MHz'eventandCLK_30MHz='1')then
ifdivider=9thendivider<=0;CLK_1500kHz_tmp<=notCLK_1500kHz_tmp;
elsedivider<=divider+1;
endif;
endif;
endprocess;設計關鍵5:分頻模塊,產(chǎn)生4Hz和1.5MHz時鐘信號項目2:音樂播放器的設計LIBRARYIEEE;--分頻34項目2:音樂播放器的設計CLK_4HZ<=CLK_4HZ_tmp;
process(CLK_1500kHz)
begin
if(CLK_1500kHz'eventandCLK_1500kHz='1')then
ifdivider1=187499thendivider1<=0;CLK_4HZ_tmp<=notCLK_4HZ_tmp;
elsedivider1<=divider1+1;
endif;
endif;
endprocess;end;設計關鍵5:分頻模塊,產(chǎn)生4Hz和1.5MHz時鐘信號項目2:音樂播放器的設計CLK_4HZ<=CLK_435EDA技術及其應用第4章應用VHDL設計數(shù)字系統(tǒng)
EDA技術及其應用第4章應用VHDL設計數(shù)字系統(tǒng)36項目1:電子琴的設計設計目標:設計一個電子琴,具有8個按鍵,當按下某一個按鍵的時候,能夠演奏8個音符之一:
1、2、3、4、5、6、7、H1視頻演示知識點:熟練掌握計數(shù)器的設計方法;熟練掌握可變分頻器的設計方法;熟練掌握IF語句的使用;熟練掌握CASE語句的使用;項目1:電子琴的設計設計目標:37項目1:電子琴的設計項目分析:設計問題1:如何發(fā)出不同音調(diào)的聲音?設計關鍵1:可變分頻器/
數(shù)控分配器。項目1:電子琴的設計項目分析:設計關鍵1:38項目1:電子琴的設計項目分析:設計問題2:按下不同按鍵時,如何得到不同的分頻數(shù)?設計關鍵2:向可變分頻器(數(shù)控分配器)提供分頻數(shù)字,需要一個“按鍵”到“分頻數(shù)”的轉(zhuǎn)換模塊。...18?項目1:電子琴的設計項目分析:...18?39項目1:電子琴的設計項目分析:設計關鍵1:
可變分頻器(數(shù)控分配器)!項目1:電子琴的設計項目分析:40項目1:電子琴的設計LIBRARY
IEEE;USE
IEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYCNT10IS
PORT
(CLK,RST,EN:IN
STD_LOGIC;CNT :OUT
STD_LOGIC_VECTOR(3DOWNTO0);COUT :OUT
STD_LOGIC
);ENDCNT10;知識回顧:10進制計數(shù)器設計項目1:電子琴的設計LIBRARYIEEE;知識回顧:1041項目1:電子琴的設計ARCHITECTUREbehavOFCNT10ISBEGIN
PROCESS(CLK,RST,EN)
VARIABLECNTI:STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
IFRST='1'THEN
CNTI:=(OTHERS=>'0');--計數(shù)器異步復位
ELSIFCLK'EVENT
ANDCLK='1'THEN--檢測時鐘上升沿
IFEN='1'THEN--檢測是否允許計數(shù)(同步使能)
IFCNTI<9THEN--檢測是否小于9
CNTI:=CNTI+1;--小于9,允許加1計數(shù)
ELSECNTI:=(OTHERS=>‘0’);--大于等于9,計數(shù)值清零
END
IF;
END
IF;
END
IF;
IFCNTI=9THENCOUT<=‘1’;--計數(shù)等于9,輸出進位信號
ELSECOUT<='0';
END
IF;CNT<=CNTI;--將計數(shù)值向端口輸出
END
PROCESS;ENDbehav;
知識回顧:10進制計數(shù)器設計項目1:電子琴的設計ARCHITECTUREbehavO42仿真結果:10進制計數(shù)器設計結論:計數(shù)器就可以完成分頻器的任務!項目1:電子琴的設計仿真結果:10進制計數(shù)器設計結論:項目1:電子琴的設計43項目1:電子琴的設計LIBRARY
IEEE;USE
IEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY
CNT_N
IS
PORT
(CLK,RST,EN:IN
STD_LOGIC;
N :INSTD_LOGIC_VECTOR(11DOWNTO0);
CNT :OUT
STD_LOGIC_VECTOR(11DOWNTO0);COUT :OUT
STD_LOGIC
);END
CNT_N;設計關鍵:N進制計數(shù)器設計——可變分頻器項目1:電子琴的設計LIBRARYIEEE;設計關鍵:N進44項目1:電子琴的設計ARCHITECTUREbehavOF
CNT_N
ISBEGIN
PROCESS(CLK,RST,EN)
VARIABLECNTI:STD_LOGIC_VECTOR(11DOWNTO0);
BEGIN
IFRST='1'THEN
CNTI:=(OTHERS=>'0');--計數(shù)器異步復位
ELSIFCLK'EVENT
ANDCLK='1'THEN--檢測時鐘上升沿
IFEN='1'THEN--檢測是否允許計數(shù)(同步使能)
IF
CNTI<N-1
THEN--檢測是否小于N-1
CNTI:=CNTI+1;--小于N-1,允許加1計數(shù)
ELSECNTI:=(OTHERS=>'0');--大于等于N-1,計數(shù)值清零
END
IF;
END
IF;
END
IF;
IF
CNTI=N-1
THENCOUT<='1';--計數(shù)等于N-1,輸出進位信號
ELSECOUT<='0';
END
IF;CNT<=CNTI;--將計數(shù)值向端口輸出
END
PROCESS;ENDbehav;
設計關鍵:N進制計數(shù)器設計——可變分頻器項目1:電子琴的設計ARCHITECTUREbehavO45設計關鍵:N進制計數(shù)器設計——可變分頻器結論:COUT實現(xiàn)了N分頻,但是占空比是1/N,能量不足,無法驅(qū)動蜂鳴器工作。N分頻,占空1/N項目1:電子琴的設計設計關鍵:N進制計數(shù)器設計——可變分頻器結論:N分頻,占空146項目1:電子琴的設計LIBRARY
IEEE;USE
IEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY
CNT_N
IS
PORT
(CLK,RST,EN:IN
STD_LOGIC;
N :INSTD_LOGIC_VECTOR(11DOWNTO0);
CNT :OUT
STD_LOGIC_VECTOR(11DOWNTO0);COUT :OUT
STD_LOGIC
);END
CNT_N;設計關鍵:改進的N進制計數(shù)器——可變分頻器COUT占空比50%項目1:電子琴的設計LIBRARYIEEE;設計關鍵:47項目1:電子琴的設計ARCHITECTUREbehavOF
CNT_N
ISBEGIN
PROCESS(CLK,RST,EN)
VARIABLECNTI:STD_LOGIC_VECTOR(11DOWNTO0);
BEGIN
IFRST='1'THEN
CNTI:=(OTHERS=>'0');--計數(shù)器異步復位
ELSIFCLK'EVENT
ANDCLK='1'THEN--檢測時鐘上升沿
IFEN='1'THEN--檢測是否允許計數(shù)(同步使能)
IF
CNTI<N-1
THEN
CNTI:=CNTI+1;--小于N/2,允許加1計數(shù)
ELSECNTI:=(OTHERS=>'0');--大于等于N/2,計數(shù)值清零
END
IF;
END
IF;END
IF;IF
CNTI<CONV_INTEGER(N)/2
THENCOUT<=‘0';
ELSECOUT<=‘1';
END
IF;CNT<=CNTI;COUT<=COUTI;--將計數(shù)值向端口輸出
END
PROCESS;ENDbehav;
設計關鍵:改進的N進制計數(shù)器——可變分頻器COUT占空比50%項目1:電子琴的設計ARCHITECTUREbehavO48占空比非50%占空比接近50%結論:COUT實現(xiàn)了N分頻,當N比較大時,占空比是接近50%,能量足以驅(qū)動蜂鳴器工作。設計關鍵:改進的N進制計數(shù)器——可變分頻器COUT占空比50%項目1:電子琴的設計占空比非50%占空比接近50%結論:設計關鍵:項目1:電子琴49項目1:電子琴的設計項目分析:設計關鍵2:向可變分頻器(數(shù)控分配器)提供分頻數(shù)字,需要一個“按鍵”到“分頻數(shù)”的轉(zhuǎn)換模塊。項目1:電子琴的設計項目分析:50項目1:電子琴的設計LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYconverterIS
PORT
(
key:INSTD_LOGIC_VECTOR(7DOWNTO0);
en:OUTSTD_LOGIC;
div_num:OUTintegerrange0to4095;
CODE:OUTSTD_LOGIC_VECTOR(3DOWNTO0);
HIGH:OUTSTD_LOGIC
);END
entityconverter;設計關鍵2:
“按鍵”到“分頻數(shù)”的轉(zhuǎn)換模塊。項目1:電子琴的設計LIBRARYIEEE;設計關鍵2:51項目1:電子琴的設計ARCHITECTUREoneOFconverterIS
BEGIN
PROCESS(converter)
BEGIN
CASEkeyIS--譯碼電路,查表方式,控制音調(diào)的預置數(shù)
WHEN"00000000"=>div_num<=0;en<='0';CODE<="0000";HIGH<='0‘;--不按鍵,0Hz,不響
WHEN"00000001"=>div_num<=2867;en<='1';CODE<="0001";HIGH<='0';--按鍵1,中音1,523.25Hz;
WHEN"00000010"=>div_num<=2554;en<='1';CODE<="0010";HIGH<='0';--按鍵2,中音2,587.33Hz;
WHEN"00000100"=>div_num<=2275;en<='1';CODE<="0011";HIGH<='0';--按鍵3,中音3,659.26Hz;
WHEN"00001000"=>div_num<=2148;en<='1';CODE<="0100";HIGH<='0';--按鍵4,中音4,698.46Hz;
WHEN"00010000"=>div_num<=1913;en<='1';CODE<="0101";HIGH<='0';--按鍵5,中音5,783.99Hz;
WHEN"00100000"=>div_num<=1705;en<='1';CODE<="0110";HIGH<='0';--按鍵6,中音6,880Hz;
WHEN"01000000"=>div_num<=1519;en<='1';CODE<="0111";HIGH<='0';--按鍵7,中音7,987.77Hz;
WHEN"10000000"=>div_num<=1433;en<='1';CODE<="0001";HIGH<='1';--按鍵8,高音1,1046.5Hz;
WHENothers =>div_num<=0;en<='0';CODE<="0000";HIGH<='0';--同時按多個鍵,0Hz,不響ENDCASE;
ENDPROCESS;ENDone;設計關鍵2:
“按鍵”到“分頻數(shù)”的轉(zhuǎn)換模塊。項目1:電子琴的設計ARCHITECTUREoneOF52項目1:電子琴的設計設計關鍵2:
“按鍵”到“分頻數(shù)”的轉(zhuǎn)換模塊。項目1:電子琴的設計設計關鍵2:53設計關鍵3:
在頂層原理圖中組裝各個功能模塊。項目1:電子琴的設計思考:原理圖作為頂層設計文件有什么優(yōu)點和缺點?如何使用“元件例化”語句完成模塊調(diào)用和信號線連接,頂層程序設計怎樣設計?VHDL程序作為頂層設計有什么優(yōu)缺點?設計關鍵3:項目1:電子琴的設計思考:544.31位全加器的VHDL描述
4.3.1半加器描述LIBRARY
IEEE;--1位二進制全加器頂層設計描述USE
IEEE.STD_LOGIC_1164.ALL;ENTITYf_adderIS
PORT(ain,bin,cin:IN
STD_LOGIC;cout,sum:OUT
STD_LOGIC);END
ENTITYf_adder;ARCHITECTUREfd1OFf_adderIS
COMPONENTh_adder--調(diào)用半加器聲明語句
PORT(a,b:IN
STD_LOGIC;co,so:OUT
STD_LOGIC);
ENDCOMPONENT;
COMPONENTor2a
PORT(a,b:IN
STD_LOGIC;c:OUT
STD_LOGIC);
ENDCOMPONENT;SIGNALd,e,f:STD_LOGIC;--定義3個信號作為內(nèi)部的連接線。BEGINu1:h_adderPORTMAP(a=>ain,b=>bin,co=>d,so=>e);--元件例化語句u2:h_adderPORT
MAP(a=>e,b=>cin,co=>f,so=>sum);u3:or2aPORT
MAP(a=>d,b=>f,c=>cout);END
ARCHITECTUREfd1;
4.31位全加器的VHDL描述4.3.1半加器描述55項目1:電子琴的設計總結知識點回顧:IF語句的使用;CASE語句的使用;計數(shù)器的設計;可變分頻器的設計;項目1:電子琴的設計總結知識點回顧:56項目1:電子琴的設計總結知識點回顧:IF語句的使用;IF語句既可以描述組合電路,也可以描述時序電路;完整條件IF語句用來描述組合電路;
IFs='0'THENy<=a;ELSE
y<=b;END
IF;IFCLK'EVENT
ANDCLK='1'THEN
CNT<=CNT+1;END
IF;不完整條件IF語句用來描述時序電路;項目1:電子琴的設計總結知識點回顧:IFs='0'57項目1:電子琴的設計總結知識點回顧:CASE語句的使用;CASE語句最適合于描述譯碼器電路;不完整的CASE語句會生成不必要的鎖存器;
CASEkeyIS--譯碼電路,查表方式,控制音調(diào)的預置數(shù)
WHEN"00000000"=>div_num<=0;en<='0';CODE<="0000";HIGH<='0‘;--不按鍵,0Hz,不響
WHEN"00000001"=>div_num<=2867;en<='1';CODE<="0001";HIGH<='0';--按鍵1,中音1,523.25Hz;
WHEN"00000010"=>div_num<=2554;en<='1';CODE<="0010";HIGH<='0';--按鍵2,中音2,587.33Hz;
WHEN"00000100"=>div_num<=2275;en<='1';CODE<="0011";HIGH<='0';--按鍵3,中音3,659.26Hz;
WHEN"00001000"=>div_num<=2148;en<='1';CODE<="0100";HIGH<='0';--按鍵4,中音4,698.46Hz;
WHEN"00010000"=>div_num<=1913;en<='1';CODE<="0101";HIGH<='0';--按鍵5,中音5,783.99Hz;
WHEN"00100000"=>div_num<=1705;en<='1';CODE<="0110";HIGH<='0';--按鍵6,中音6,880Hz;
WHEN"01000000"=>div_num<=1519;en<='1';CODE<="0111";HIGH<='0';--按鍵7,中音7,987.77Hz;
WHEN"10000000"=>div_num<=1433;en<='1';CODE<="0001";HIGH<='1';--按鍵8,高音1,1046.5Hz;
WHENothers =>div_num<=0;en<='0';CODE<="0000";HIGH<='0';--同時按多個鍵,0Hz,不響ENDCASE;項目1:電子琴的設計總結知識點回顧:CASEkey58項目1:電子琴的設計總結知識點回顧:計數(shù)器的設計;可變分頻器的設計;項目1:電子琴的設計總結知識點回顧:59項目2:音樂播放器的設計設計目標:設計一個音樂播放器,可以播放一首歌曲;拓展設計:設計一個音樂播放器,可以播放多首歌曲;具有“播放/停止”、“暫停播放”和2個按鍵;當?shù)谝淮伟聪隆安シ?停止”按鍵的時候,能夠重頭開始演奏一首動聽的樂曲,第二次按下鍵,就停止播放;當按下“暫停播放”按鍵的時候能夠在暫停演奏和繼續(xù)演奏之間切換;項目2:音樂播放器的設計設計目標:60項目2:音樂播放器的設計存儲和
讀音符模塊頻率轉(zhuǎn)換模塊數(shù)控分頻模塊項目2:音樂播放器的設計存儲和
讀音符模塊頻率轉(zhuǎn)換模塊數(shù)控分61項目2:音樂播放器的設計4-5樂曲硬件演奏電路設計
ROM中的數(shù)據(jù)文件music.mifWIDTH=4;--“梁?!睒非葑鄶?shù)據(jù)DEPTH=256;ADDRESS_RADIX=DEC;DATA_RADIX=DEC;CONTENTBEGIN--注意實用文件中要展開以下數(shù)據(jù),每一組占一行00:3;01:3;02:3;03:3;04:5;05:5;06:5;07:6;08:8;09:8;10:8;11:9;12:6;13:8;14:5;15:5;16:12;17:12;18:12;19:15;20:13;21:12;22:10;23:12;24:9;25:9;26:9;27:9;28:9;29:9;30:9;31:0;32:9;33:9;34:9;35:10;36:7;37:7;38:6;39:6;40:5;41:5;42:5;43:6;44:8;45:8;46:9;47:9;48:3;49:3;50:8;51:8;52:6;53:5;54:6;55:8;56:5;57:5;58:5;59:5;60:5;61:5;62:5;63:5;64:10;65:10;66:10;67:12;68:7;69:7;70:9;71:9;72:6;73:8;74:5;75:5;76:5;77:5;78:5;79:5;80:3;81:5;82:3;83:3;84:5;85:6;86:7;87:9;88:6;89:6;90:6;91:6;92:6;93:6;94:5;95:6;96:8;97:8;98:8;99:9;100:12;101:12;102:12;103:10;104:9;105:9;106:10;107:9;108:8;109:8;110:6;111:5;112:3;113:3;114:3;115:3;116:8;117:8;118:8;119:8;120:6;121:8;122:6;123:5;124:3;125:5;126:6;127:8;128:5;129:5;130:5;131:5;132:5;133:5;134:5;135:5;136:0;137:0;138:0;END;
設計關鍵1:存儲和讀音符模塊項目2:音樂播放器的設計4-5樂曲硬件演奏電路設計ROM62項目2:音樂播放器的設計LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYNoteTabsISPORT(clk :INSTD_LOGIC;ToneIndex :OUTSTD_LOGIC_VECTOR(3DOWNTO0));END;ARCHITECTUREoneOFNoteTabsISCOMPONENTMUSIC--音符數(shù)據(jù)ROMPORT(address :INSTD_LOGIC_VECTOR(7DOWNTO0);clock :INSTD_LOGIC;q :OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDCOMPONENT; SIGNALCounter:STD_LOGIC_VECTOR(7DOWNTO0);BEGINPROCESS(clk,Counter)BEGINIF(clk'EVENTANDclk='1')THENIFCounter=138THENCounter<="00000000";ELSECounter<=Counter+1;ENDIF;ENDIF;ENDPROCESS;u1:MUSICPORTMAP(address => Counter, clock => clk, q => ToneIndex);END;設計關鍵1:存儲和讀音符模塊項目2:音樂播放器的設計LIBRARYIEEE;設計關鍵163項目2:音樂播放器的設計設計關鍵2:頻率轉(zhuǎn)換模塊LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYToneTabaISPORT(Index : INSTD_LOGIC_VECTOR(3DOWNTO0); CODE : OUTSTD_LOGIC_VECTOR(3DOWNTO0); HIGH : OUTSTD_LOGIC; en : OUTSTD_LOGIC; div_num : OU
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 黃酒發(fā)酵工崗前基礎評估考核試卷含答案
- 沖印師操作評優(yōu)考核試卷含答案
- 2025年上海第二工業(yè)大學單招(計算機)考試備考題庫附答案
- 2024年湖北生態(tài)工程職業(yè)技術學院馬克思主義基本原理概論期末考試題附答案
- 2024年鐵嶺衛(wèi)生職業(yè)學院馬克思主義基本原理概論期末考試題附答案
- 2024年長沙市直遴選筆試真題匯編附答案
- 2024年重慶工信職業(yè)學院輔導員招聘考試真題匯編附答案
- 2024年賀州市選調(diào)公務員考試真題匯編附答案
- 2024年甘德縣幼兒園教師招教考試備考題庫附答案
- 2025四川廣漢市招聘社區(qū)專職工作者(13人)備考題庫附答案
- 安全帽使用規(guī)范制度
- 2026國家電投集團蘇州審計中心選聘15人筆試模擬試題及答案解析
- 2026年桐城師范高等??茖W校單招職業(yè)技能考試題庫及答案1套
- 霧化吸入操作教學課件
- 2025年小學圖書館自查報告
- 【語文】廣東省佛山市羅行小學一年級上冊期末復習試卷
- 2025年醫(yī)療器械注冊代理協(xié)議
- 新疆三校生考試題及答案
- 2025新疆亞新煤層氣投資開發(fā)(集團)有限責任公司第三批選聘/招聘筆試歷年參考題庫附帶答案詳解
- 圍手術期心肌梗塞的護理
- 超市門口鑰匙管理制度
評論
0/150
提交評論