EDA技術及其應用第4章-應用VHDL設計數(shù)字系統(tǒng)-電子琴和音樂播放器的設計課件_第1頁
EDA技術及其應用第4章-應用VHDL設計數(shù)字系統(tǒng)-電子琴和音樂播放器的設計課件_第2頁
EDA技術及其應用第4章-應用VHDL設計數(shù)字系統(tǒng)-電子琴和音樂播放器的設計課件_第3頁
EDA技術及其應用第4章-應用VHDL設計數(shù)字系統(tǒng)-電子琴和音樂播放器的設計課件_第4頁
EDA技術及其應用第4章-應用VHDL設計數(shù)字系統(tǒng)-電子琴和音樂播放器的設計課件_第5頁
已閱讀5頁,還剩65頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論