![15.9VHDL結(jié)構(gòu)與要素實(shí)驗(yàn)與設(shè)計(jì)_第1頁](http://file4.renrendoc.com/view/17fb42838b9f1681c8abb4ea40b53b66/17fb42838b9f1681c8abb4ea40b53b661.gif)
![15.9VHDL結(jié)構(gòu)與要素實(shí)驗(yàn)與設(shè)計(jì)_第2頁](http://file4.renrendoc.com/view/17fb42838b9f1681c8abb4ea40b53b66/17fb42838b9f1681c8abb4ea40b53b662.gif)
![15.9VHDL結(jié)構(gòu)與要素實(shí)驗(yàn)與設(shè)計(jì)_第3頁](http://file4.renrendoc.com/view/17fb42838b9f1681c8abb4ea40b53b66/17fb42838b9f1681c8abb4ea40b53b663.gif)
![15.9VHDL結(jié)構(gòu)與要素實(shí)驗(yàn)與設(shè)計(jì)_第4頁](http://file4.renrendoc.com/view/17fb42838b9f1681c8abb4ea40b53b66/17fb42838b9f1681c8abb4ea40b53b664.gif)
![15.9VHDL結(jié)構(gòu)與要素實(shí)驗(yàn)與設(shè)計(jì)_第5頁](http://file4.renrendoc.com/view/17fb42838b9f1681c8abb4ea40b53b66/17fb42838b9f1681c8abb4ea40b53b665.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、VHDL結(jié)構(gòu)與要素實(shí)驗(yàn)與設(shè)計(jì)EDA技術(shù)實(shí)用教程實(shí) 驗(yàn) 與 設(shè) 計(jì) 8-1 移位相加8位硬件乘法器電路設(shè)計(jì)(1) 實(shí)驗(yàn)?zāi)康模簩W(xué)習(xí)應(yīng)用移位相加原理設(shè)計(jì)8位乘法器。(2) 實(shí)驗(yàn)原理:該乘法器是由8位加法器構(gòu)成的以時(shí)序方式設(shè)計(jì)的8位乘法器。其乘法原理是:乘法通過逐項(xiàng)移位相加原理來實(shí)現(xiàn)。從被乘數(shù)的最低位開始,若為1,則乘數(shù)左移后與上一次的和相加;若為0,左移后以全零相加,直至被乘數(shù)的最高位。從圖8-3的邏輯圖及其乘法操作時(shí)序圖圖8-4(示例中的相乘數(shù)為9FH和FDH )上可以清楚地看出此乘法器的工作原理,為了更好了解其工作原理,圖8-3中沒有加入控制電路(例8-28)。圖8-3中,START信號(hào)的上跳沿
2、及其高電平有兩個(gè)功能,即16位寄存器清零和被乘數(shù)A7.0向移位寄存器SREG8B加載;它的低電平則作為乘法使能信號(hào)。CLK為乘法時(shí)鐘信號(hào)。當(dāng)被實(shí) 驗(yàn) 與 設(shè) 計(jì) 乘數(shù)被加載于8位右移寄存器SREG8B后,隨著每一時(shí)鐘節(jié)拍,最低位在前,由低位至高位逐位移出。當(dāng)為1時(shí),1位乘法器ANDARITH打開,8位乘數(shù)B7.0在同一節(jié)拍進(jìn)入8位加法器,與上一次鎖存在16位鎖存器REG16B中的高8位進(jìn)行相加,其和在下一時(shí)鐘節(jié)拍的上升沿被鎖進(jìn)此鎖存器。而當(dāng)被乘數(shù)的移出位為0時(shí),與門全零輸出。如此往復(fù),直至8個(gè)時(shí)鐘脈沖后,最后乘積完整出現(xiàn)在REG16B端口。在這里,1位乘法器ANDARITH的功能類似于1個(gè)特殊
3、的與門,即當(dāng)ABIN為1時(shí),DOUT直接輸出DIN,而當(dāng)ABIN為0時(shí),DOUT輸出全“00000000”。8位移位相加原理構(gòu)成的乘法器比用組合電路直接設(shè)計(jì)的同樣功能的電路的資源(邏輯宏單元LCs)耗用要小許多,由編譯報(bào)告可知,前者是52,后者是169。 實(shí) 驗(yàn) 與 設(shè) 計(jì) 圖8-3 8位乘法器邏輯原理圖 實(shí) 驗(yàn) 與 設(shè) 計(jì) 圖8-4 8位移位相加乘法器運(yùn)算邏輯波形圖 從波形圖圖8-4可見,當(dāng)9FH和FDH相乘時(shí),第1個(gè)時(shí)鐘上升沿后,其移位相加的結(jié)果(在REG16B端口)是4F80H,第8個(gè)時(shí)鐘上升沿后,最終相乘結(jié)果是9D23H。 【例8-24】 LIBRARY IEEE; - 8位右移寄存器
4、USE IEEE.STD_LOGIC_1164.ALL;ENTITY SREG8B IS PORT ( CLK, LOAD : IN STD_LOGIC; DIN : IN STD_LOGIC_VECTOR(7 DOWNTO 0); QB : OUT STD_LOGIC );END SREG8B;ARCHITECTURE behav OF SREG8B IS SIGNAL REG8 : STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN PROCESS (CLK, LOAD) BEGIN IF CLKEVENT AND CLK = 1 THEN IF LOAD = 1 THE
5、N REG8 = DIN; ELSE REG8(6 DOWNTO 0) = REG8(7 DOWNTO 1); END IF; END IF; END PROCESS; QB = REG8(0); - 輸出最低位END behav; 【例8-25】 LIBRARY IEEE; -8位加法器USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ADDER8B IS PORT ( CIN : IN STD_LOGIC; A , B : IN STD_LOGIC_VECTOR(7 DOWNTO 0); S : OUT S
6、TD_LOGIC_VECTOR(7 DOWNTO 0); COUT : OUT STD_LOGIC );END ADDER8B;ARCHITECTURE behav OF ADDER8B IS SIGNAL SINT, AA,BB : STD_LOGIC_VECTOR(8 DOWNTO 0);BEGINAA=0&A;BB=0&B; SINT=AA+BB+CIN;S=SINT(7 DOWNTO 0); COUT=SINT(8);END behav;【例8-26】 LIBRARY IEEE; -1位乘法器USE IEEE.STD_LOGIC_1164.ALL;ENTITY ANDARITH IS
7、- 選通與門模塊 PORT ( ABIN : IN STD_LOGIC; DIN : IN STD_LOGIC_VECTOR(7 DOWNTO 0); DOUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );END ANDARITH;ARCHITECTURE behav OF ANDARITH ISBEGIN PROCESS(ABIN, DIN) BEGIN FOR I IN 0 TO 7 LOOP - 循環(huán),完成8位與1位運(yùn)算 DOUT(I) = DIN(I) AND ABIN; END LOOP; END PROCESS;END behav;【例8-27】LIB
8、RARY IEEE; -16位鎖存器/右移寄存器USE IEEE.STD_LOGIC_1164.ALL;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG16B IS - 16位鎖存器 PORT (CLK, CLR : IN STD_LOGIC; D : IN STD_LOGIC_VECTOR(8 DOWNTO 0); Q : OUT STD_LOGIC_VECTOR(15 DOWNTO 0) );END REG16B;ARCHITECTURE behav OF REG16B IS SIGNAL R16S : STD_LOGIC_VECTOR
9、(15 DOWNTO 0);BEGIN PROCESS(CLK, CLR) 接下頁 接上頁BEGIN IF CLR=1 THEN R16S=0000000000000000;-時(shí)鐘到來時(shí),鎖存輸入值,并右移低8位ELSIF CLKEVENT AND CLK=1 THEN R16S(6 DOWNTO 0) =R16S(7 DOWNTO 1);-右移低8位 R16S(15 DOWNTO 7) = D; - 將輸入鎖到高8位 END IF; END PROCESS; Q = R16S;END behav;【例8-28】LIBRARY IEEE; -運(yùn)算控制模塊USE IEEE.STD_LOGIC_1
10、164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ARICTL IS PORT (CLK, START : IN STD_LOGIC; CLKOUT,RSTALL, ARIEND : OUT STD_LOGIC );END ARICTL;ARCHITECTURE behav OF ARICTL IS SIGNAL CNT4B : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN RSTALL = START; PROCESS(CLK, START) BEGIN 接下頁 接上頁IF START = 1 THEN CNT4B = 00
11、00; ELSIF CLKEVENT AND CLK = 1 THEN IF CNT4B 8 THEN CNT4B = CNT4B + 1; END IF; END IF; END PROCESS; PROCESS(CLK, CNT4B, START) BEGIN IF START = 0 THEN IF CNT4B 8 THEN CLKOUT = CLK; ARIEND = 0; ELSE CLKOUT = 0; ARIEND = 1; END IF; ELSE CLKOUT = CLK; ARIEND = 0; END IF; END PROCESS;END behav;【例8-29】LI
12、BRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;use ieee.std_logic_unsigned.all;ENTITY MULTI8X8 IS - 8位乘法器頂層設(shè)計(jì) PORT ( CLKk,hkey, START : IN STD_LOGIC; A, B : IN STD_LOGIC_VECTOR(7 DOWNTO 0); mmax : out STD_LOGIC_VECTOR(3 DOWNTO 0); ARIEND : OUT STD_LOGIC; DOUT : OUT STD_LOGIC_VECTOR(15 DOWNTO 0) );END MULTI8
13、X8;ARCHITECTURE struc OF MULTI8X8 ISCOMPONENT ARICTL PORT ( CLK : IN STD_LOGIC; START : IN STD_LOGIC; 接下頁 CLKOUT : OUT STD_LOGIC; RSTALL : OUT STD_LOGIC; ARIEND : OUT STD_LOGIC );END COMPONENT;COMPONENT ANDARITH PORT ( ABIN : IN STD_LOGIC; DIN : IN STD_LOGIC_VECTOR(7 DOWNTO 0); DOUT : OUT STD_LOGIC_
14、VECTOR(7 DOWNTO 0) );END COMPONENT;COMPONENT ADDER8B PORT (CIN : IN STD_LOGIC; A, B : IN STD_LOGIC_VECTOR(7 DOWNTO 0); S : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); COUT : OUT STD_LOGIC );END COMPONENT;接下頁COMPONENT SREG8B PORT ( CLK : IN STD_LOGIC; LOAD : IN STD_LOGIC; DIN : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
15、 QB : OUT STD_LOGIC );END COMPONENT;COMPONENT REG16B PORT ( CLK : IN STD_LOGIC; CLR : IN STD_LOGIC; D : IN STD_LOGIC_VECTOR(8 DOWNTO 0); Q : OUT STD_LOGIC_VECTOR(15 DOWNTO 0) );END COMPONENT; SIGNAL GNDINT, INTCLK,RSTALL,NEWSTART, QB,clk : STD_LOGIC; SIGNAL ANDSD : STD_LOGIC_VECTOR(7 DOWNTO 0); SIGN
16、AL count,maxx : STD_LOGIC_VECTOR(3 DOWNTO 0); 接下頁SIGNAL DTBIN : STD_LOGIC_VECTOR(8 DOWNTO 0); SIGNAL DTBOUT : STD_LOGIC_VECTOR(15 DOWNTO 0);BEGIN DOUT = DTBOUT; GNDINT = 0;PROCESS(CLK,START)BEGINIF START=1 THEN NEWSTART=1;ELSIF CLK=0THEN NEWSTART=0; END IF;END PROCESS;process(hkey)beginif(hkeyevent
17、and hkey=1)thenmaxx=maxx+1;end if;end process;接下頁mmax=maxx;process(clkk)beginif clkkevent and clkk=1thenif(countmaxx)thencount=count+1;else count=0000;clk CLK, START = NEWSTART, -FOR THE BETTERCLKOUT = INTCLK, RSTALL = RSTALL, ARIEND = ARIEND ); U2 : SREG8B PORT MAP( CLK = INTCLK, LOAD = RSTALL, DIN
18、=B,QB=QB); 接下頁U3 : ANDARITH PORT MAP(ABIN = QB, DIN = A,DOUT = ANDSD);U4 : ADDER8B PORT MAP(CIN = GNDINT, A=DTBOUT(15 DOWNTO 8),B=ANDSD, S = DTBIN(7 DOWNTO 0), COUT = DTBIN(8) ); U5 : REG16B PORT MAP(CLK = INTCLK, CLR = RSTALL,D=DTBIN, Q=DTBOUT );END struc;實(shí) 驗(yàn) 與 設(shè) 計(jì) (3) 實(shí)驗(yàn)內(nèi)容1:根據(jù)給出的乘法器邏輯原理圖及其各模塊的VHDL
19、描述,在MAX+plusII上完成全部設(shè)計(jì),包括編輯、編譯、綜合和仿真操作等。以87H乘以F5H為例,進(jìn)行仿真,對(duì)仿真波形作出詳細(xì)解釋,包括對(duì)8個(gè)工作時(shí)鐘節(jié)拍中,每一節(jié)拍乘法操作的方式和結(jié)果,對(duì)照波形圖給以詳細(xì)說明,根據(jù)頂層設(shè)計(jì)例8-29,結(jié)合圖8-3,畫出乘法器的詳細(xì)電路原理框圖。 (4) 實(shí)驗(yàn)內(nèi)容2:編程下載,進(jìn)行實(shí)驗(yàn)驗(yàn)證。實(shí)驗(yàn)電路選擇No.1,8位乘數(shù)用鍵2、鍵1輸入;8位被乘數(shù)用鍵4和鍵3輸入;16位乘積可由4個(gè)數(shù)碼管(數(shù)碼管8、7、6、5)顯示;用鍵8輸入CLK,鍵7輸入START(注意,START由高到低是清0,由低到高電平是允許乘法計(jì)算)。詳細(xì)觀察每一時(shí)鐘節(jié)拍的運(yùn)算結(jié)果,并與仿真
20、結(jié)果進(jìn)行比較。 實(shí) 驗(yàn) 與 設(shè) 計(jì) (5) 實(shí)驗(yàn)內(nèi)容3:乘法時(shí)鐘連接實(shí)驗(yàn)系統(tǒng)上的連續(xù)脈沖,如clock0,設(shè)計(jì)一個(gè)此乘法器的控制模塊,接受實(shí)驗(yàn)系統(tǒng)上的連續(xù)脈沖,如clock0,當(dāng)給定啟動(dòng)/清0信號(hào)后,能自動(dòng)發(fā)出CLK信號(hào)驅(qū)動(dòng)乘法運(yùn)算,當(dāng)8個(gè)脈沖后自動(dòng)停止(例8-28)。 (6) 實(shí)驗(yàn)內(nèi)容4:設(shè)計(jì)一個(gè)純組合電路的8X8等于16位的乘法器和一個(gè)LPM乘法器(選擇不同的流水線方式),具體說明并比較這幾種乘法器的邏輯資源占用情況和運(yùn)行速度情況。 (7) 實(shí)驗(yàn)報(bào)告:根據(jù)例8-24至例8-29,詳細(xì)分析圖8-3中個(gè)模塊的邏輯功能,及其他們工作原理,詳細(xì)記錄并分析實(shí)驗(yàn)2和實(shí)驗(yàn)3的過程和結(jié)果,完成實(shí)驗(yàn)報(bào)告。
21、實(shí) 驗(yàn) 與 設(shè) 計(jì) 8-2 樂曲硬件演奏電路設(shè)計(jì)(1) 實(shí)驗(yàn)?zāi)康模簩W(xué)習(xí)利用實(shí)驗(yàn)5-4的數(shù)控分頻器設(shè)計(jì)硬件樂曲演奏電路。(2) 實(shí)驗(yàn)原理:主系統(tǒng)由3個(gè)模塊組成,例8-30是頂層設(shè)計(jì)文件,其內(nèi)部有3個(gè)功能模塊(如圖8-5所示):TONETABA.VHD、NOTETABS.VHD和SPEAKER.VHD。與利用微處理器(CPU或MCU)來實(shí)現(xiàn)樂曲演奏相比,以純硬件完成樂曲演奏電路的邏輯要復(fù)雜得多,如果不借助于功能強(qiáng)大的EDA工具和硬件描述語言,僅憑傳統(tǒng)的數(shù)字邏輯技術(shù),即使最簡(jiǎn)單的演奏電路也難以實(shí)現(xiàn)。本實(shí)驗(yàn)設(shè)計(jì)項(xiàng)目作為“梁?!睒非葑嚯娐返膶?shí)現(xiàn),其工作原理是這樣的:實(shí) 驗(yàn) 與 設(shè) 計(jì) 我們知道,組成樂
22、曲的每個(gè)音符的發(fā)音頻率值及其持續(xù)的時(shí)間是樂曲能連續(xù)演奏所需的兩個(gè)基本要素,問題是如何來獲取這兩個(gè)要素所對(duì)應(yīng)的數(shù)值以及通過純硬件的手段來利用這些數(shù)值實(shí)現(xiàn)所希望樂曲的演奏效果。圖8-5中,模塊U1類似于彈琴的人的手指;U2類似于琴鍵;U3類似于琴弦或音調(diào)發(fā)聲器。下面首先來了解圖8-5的工作原理: 1、音符的頻率可以由圖8-5中的SPEAKERA獲得,這是一個(gè)數(shù)控分頻器(其詳細(xì)工作原理可參考實(shí)驗(yàn)5-4)。由其clk端輸入一具有較高頻率(這里是12MHz)的信號(hào),通過SPEAKERA分頻后由SPKOUT輸出,由于直接從數(shù)控分頻器中出來的輸出信號(hào)是脈寬極窄的脈沖式信號(hào),為了有利于驅(qū)動(dòng)揚(yáng)聲器,需另加一個(gè)D
23、觸發(fā)器以均衡其占空比,但這時(shí)的頻率將實(shí) 驗(yàn) 與 設(shè) 計(jì) 是原來的1/2。SPEAKERA對(duì)clk輸入信號(hào)的分頻比由11位預(yù)置數(shù)Tone10.0決定 。SPKOUT的輸出頻率將決定每一音符的音調(diào),這樣,分頻計(jì)數(shù)器的預(yù)置值Tone10.0 與SPKOUT的輸出頻率,就有了對(duì)應(yīng)關(guān)系。例如在TONETABA模塊中若取Tone10.0=1036,將發(fā)音符為“3”音的信號(hào)頻率。 2、音符的持續(xù)時(shí)間須根據(jù)樂曲的速度及每個(gè)音符的節(jié)拍數(shù)來確定,圖8-5中模塊TONETABA 的功能首先是為SPEAKERA提供決定所發(fā)音符的分頻預(yù)置數(shù),而此數(shù)在SPEAKER輸入口停留的時(shí)間即為此音符的節(jié)拍值。模塊TONETABA
24、 是樂曲簡(jiǎn)譜碼對(duì)應(yīng)的分頻預(yù)置數(shù)查表電路,其中設(shè)置了“梁?!睒非恳舴鶎?duì)應(yīng)的分頻預(yù)置數(shù),共13個(gè),每一音符的停留時(shí)間由音樂節(jié)拍和音調(diào)發(fā)生器模塊NOTETABS實(shí) 驗(yàn) 與 設(shè) 計(jì) 的clk的輸入頻率決定,在此為4Hz。這13個(gè)值的輸出由對(duì)應(yīng)于TONETABA 的4位輸入值Index3.0確定,而Index3.0 最多有16種可選值。輸向TONETABA中Index3.0的值ToneIndex3.0的輸出值與持續(xù)的時(shí)間由模塊NOTETABS 決定。3、在NOTETABS 中設(shè)置了一個(gè)8位二進(jìn)制計(jì)數(shù)器(計(jì)數(shù)最大值為138),作為音符數(shù)據(jù)ROM的地址發(fā)生器。這個(gè)計(jì)數(shù)器的計(jì)數(shù)頻率選為4Hz,即每一計(jì)數(shù)
25、值的停留時(shí)間為0.25秒,恰為當(dāng)全音符設(shè)為1秒時(shí),四四拍的4分音符持續(xù)時(shí)間。例如,NOTETABS 在以下的VHDL邏輯描述中,“梁?!睒非牡谝粋€(gè)音符為“3”,此音在邏輯中停留了4個(gè)時(shí)鐘節(jié)拍,即1秒時(shí)間,相應(yīng)地,所對(duì)應(yīng)的“3”音符分頻預(yù)置值為1036,在SPEAKERA 的輸入端停留了1秒。隨著NOTETABS中的計(jì)數(shù)器實(shí) 驗(yàn) 與 設(shè) 計(jì) 按4Hz的時(shí)鐘速率作加法計(jì)數(shù)時(shí),即隨地址值遞增時(shí),音符數(shù)據(jù)ROM 中的音符數(shù)據(jù)將從 ROM中通過ToneIndex3.0端口輸向TONETABA 模塊,“梁?!睒非烷_始連續(xù)自然地演奏起來了。 (3) 實(shí)驗(yàn)內(nèi)容1:定制例8-33的NoteTabs模塊中的音
26、符數(shù)據(jù)ROM“music”。該ROM中的音符數(shù)據(jù)已列在例8-34中。注意該例數(shù)據(jù)表中的數(shù)據(jù)位寬、深度和數(shù)據(jù)的表達(dá)類型。最后對(duì)該ROM進(jìn)行仿真,確認(rèn)例8-34中的音符數(shù)據(jù)已經(jīng)進(jìn)入其中。(4) 實(shí)驗(yàn)內(nèi)容2:根據(jù)給出的乘法器邏輯原理圖及其各模塊的VHDL描述,在MAX+plusII上完成全部設(shè)計(jì),包括編輯、編譯、綜合和仿真操作等。給出仿真波形,并作出詳細(xì)說明。 實(shí) 驗(yàn) 與 設(shè) 計(jì) (5) 實(shí)驗(yàn)內(nèi)容3:硬件驗(yàn)證。先將引腳鎖定,使CLK12MHz與clock9相接,接受12MHz時(shí)鐘頻率(輸入待分頻聲調(diào)頻率12MHz,在實(shí)驗(yàn)板上的“高頻組”處,用短路帽分別連接clock9 和“12MHz”);CLK8H
27、z 與clock2相接,接受4Hz頻率(在實(shí)驗(yàn)板上的“低頻組”處,用短路帽分別連接Clock2 和“4Hz”);發(fā)音輸出SPKOUT接Speaker;與演奏發(fā)音相對(duì)應(yīng)的簡(jiǎn)譜碼輸出顯示可由CODE1在數(shù)碼管5顯示;HIGH1為高八度音指示,可由發(fā)光管D5指示,最后向目標(biāo)芯片下載適配后的SOF邏輯設(shè)計(jì)文件。實(shí)驗(yàn)電路結(jié)構(gòu)圖為NO.1。(6) 實(shí)驗(yàn)內(nèi)容4:填入新的樂曲,如“采茶舞曲”、或其它熟悉的樂曲。操作步驟如下: 1、根據(jù)所填樂曲可能出現(xiàn)的音符,修改例8-34的音符數(shù)據(jù)表格,同時(shí)注意每一音符的節(jié)拍長(zhǎng)短, 實(shí) 驗(yàn) 與 設(shè) 計(jì) 2、如果樂曲比較長(zhǎng),可增加模塊NOTETABA 中計(jì)數(shù)器的位數(shù),如9位時(shí)可
28、達(dá)512個(gè)基本節(jié)拍。(7) 實(shí)驗(yàn)內(nèi)容5:爭(zhēng)取可以在一個(gè)ROM裝上多首歌曲,可手動(dòng)或自動(dòng)選擇歌曲。(8) 實(shí)驗(yàn)內(nèi)容6:根據(jù)此項(xiàng)實(shí)驗(yàn)設(shè)計(jì)一個(gè)電子琴,硬件測(cè)試可用電路結(jié)構(gòu)圖NO.1。(9) 思考題1:例8-31中的進(jìn)程DelaySpkS對(duì)揚(yáng)聲器發(fā)聲有什么影響? (10) 思考題2:在電路上應(yīng)該滿足哪些條件,才能用數(shù)字器件直接輸出的方波驅(qū)動(dòng)揚(yáng)聲器發(fā)聲?實(shí) 驗(yàn) 與 設(shè) 計(jì) (11) 實(shí)驗(yàn)報(bào)告:用仿真波形和電路原理圖,詳細(xì)敘述硬件電子琴的工作原理及其4個(gè)VHDL文件中相關(guān)語句的功能,敘述硬件實(shí)驗(yàn)情況。 圖8-5 硬件樂曲演奏電路結(jié)構(gòu) 樂曲演奏電路的VHDL邏輯描述如下: 【例8-30】LIBRARY IE
29、EE; - 硬件演奏電路頂層設(shè)計(jì)USE IEEE.STD_LOGIC_1164.ALL;ENTITY Songer IS PORT ( CLK12MHZ : IN STD_LOGIC; -音調(diào)頻率信號(hào) CLK8HZ : IN STD_LOGIC; -節(jié)拍頻率信號(hào) CODE1 : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);- 簡(jiǎn)譜碼輸出顯示 HIGH1 : OUT STD_LOGIC; -高8度指示 SPKOUT : OUT STD_LOGIC );-聲音輸出 END;ARCHITECTURE one OF Songer IS COMPONENT NoteTabs PO
30、RT ( clk : IN STD_LOGIC; ToneIndex : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) ); 接下頁END COMPONENT; COMPONENT ToneTaba PORT ( Index : IN STD_LOGIC_VECTOR (3 DOWNTO 0) ; CODE : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) ; HIGH : OUT STD_LOGIC; Tone : OUT STD_LOGIC_VECTOR (10 DOWNTO 0) ); END COMPONENT; COMPONENT Spea
31、kera PORT ( clk : IN STD_LOGIC; Tone : IN STD_LOGIC_VECTOR (10 DOWNTO 0); SpkS : OUT STD_LOGIC ); END COMPONENT; SIGNAL Tone : STD_LOGIC_VECTOR (10 DOWNTO 0); SIGNAL ToneIndex : STD_LOGIC_VECTOR (3 DOWNTO 0); 接下頁BEGINu1 : NoteTabs PORT MAP (clk=CLK8HZ, ToneIndex=ToneIndex);u2 : ToneTaba PORT MAP (In
32、dex=ToneIndex,Tone=Tone,CODE=CODE1,HIGH=HIGH1);u3 : Speakera PORT MAP(clk=CLK12MHZ,Tone=Tone, SpkS=SPKOUT );END;【例8-31】LIBRARY IEEE;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY Speakera IS 接下頁P(yáng)ORT ( clk : IN STD_LOGIC; Tone : IN STD_LOGIC_VECTOR (10 DOWNTO 0); SpkS
33、 : OUT STD_LOGIC );END;ARCHITECTURE one OF Speakera IS SIGNAL PreCLK, FullSpkS : STD_LOGIC;BEGIN DivideCLK : PROCESS(clk) VARIABLE Count4 : STD_LOGIC_VECTOR (3 DOWNTO 0) ; BEGIN PreCLK 11 THEN PreCLK = 1; Count4 := 0000; ELSIF clkEVENT AND clk = 1 THEN Count4 := Count4 + 1; END IF; 接下頁END PROCESS; G
34、enSpkS : PROCESS(PreCLK, Tone)- 11位可預(yù)置計(jì)數(shù)器 VARIABLE Count11 : STD_LOGIC_VECTOR (10 DOWNTO 0);BEGIN IF PreCLKEVENT AND PreCLK = 1 THEN IF Count11 = 16#7FF# THEN Count11 := Tone ; FullSpkS = 1; ELSE Count11 := Count11 + 1; FullSpkS = 0; END IF; END IF; END PROCESS; DelaySpkS : PROCESS(FullSpkS)-將輸出再2分頻
35、,展寬脈沖,使揚(yáng)聲器有足夠功率發(fā)音 VARIABLE Count2 : STD_LOGIC;BEGIN IF FullSpkSEVENT AND FullSpkS = 1 THEN Count2 := NOT Count2; 接下頁IF Count2 = 1 THEN SpkS = 1; ELSE SpkS Tone=11111111111 ; CODE=0000; HIGH Tone=01100000101 ; CODE=0001; HIGH Tone=01110010000 ; CODE=0010; HIGH Tone=10000001100 ; CODE=0011; HIGH Tone=
36、10010101101 ; CODE=0101; HIGH Tone=10100001010 ; CODE=0110; HIGH Tone=10101011100 ; CODE=0111; HIGH Tone=10110000010 ; CODE=0001; HIGH Tone=10111001000 ; CODE=0010; HIGH Tone=11000000110 ; CODE=0011; HIGH Tone=11001010110 ; CODE=0101; HIGH Tone=11010000100 ; CODE=0110; HIGH Tone=11011000000 ; CODE=0
37、001; HIGH NULL; 接下頁END CASE; END PROCESS;END;【例8-33】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY NoteTabs IS PORT ( clk : IN STD_LOGIC; ToneIndex : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) );END;ARCHITECTURE one OF NoteTabs IS接下頁COMPONE
38、NT MUSIC -音符數(shù)據(jù)ROM PORT(address : IN STD_LOGIC_VECTOR (7 DOWNTO 0); inclock : IN STD_LOGIC ; q : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);END COMPONENT; SIGNAL Counter : STD_LOGIC_VECTOR (7 DOWNTO 0);BEGIN CNT8 : PROCESS(clk) BEGIN IF Counter=138 THEN Counter = 00000000; ELSIF (clkEVENT AND clk = 1) THEN Co
39、unter Counter , q=ToneIndex, inclock=clk); END;【例8-34】WIDTH = 4 ; -“梁?!睒非葑鄶?shù)據(jù)DEPTH = 256 ;ADDRESS_RADIX = DEC ;DATA_RADIX = DEC ;CONTENT BEGIN -注意實(shí)用文件中要展開以下數(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:
40、 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:
41、 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:1
42、2 ;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 ;實(shí) 驗(yàn) 與 設(shè) 計(jì) 8-3 乒
43、乓球游戲電路設(shè)計(jì) 以下8個(gè)VHDL文件是一個(gè)乒乓球游戲電路的完整設(shè)計(jì)。其中,模塊tennis是頂層設(shè)計(jì),在MAX+PLUSII中可設(shè)其為工程文件;ball是模擬乒乓球行進(jìn)路徑的發(fā)光管亮燈控制模塊,在游戲中,以一排發(fā)光管交替發(fā)光指示乒乓球的行進(jìn)路徑,其行進(jìn)的速度可由輸入的時(shí)鐘信號(hào)clk控制;board是乒乓板接球控制模塊,即當(dāng)發(fā)光管亮到最后一個(gè)的瞬間,若檢測(cè)到對(duì)應(yīng)的表示球拍的鍵的信號(hào),立即將“球”反向運(yùn)行,如果此瞬間沒有接到鍵信號(hào),將給出出錯(cuò)鳴叫,同時(shí)為對(duì)方記1分,并將記分顯示出來;cou4和cou10分別是失球計(jì)數(shù)器的高低位計(jì)數(shù)模塊;mway是乒乓球行進(jìn)方向控制模塊,主要由發(fā)球鍵控制;soun
44、d是失球提示發(fā)聲模塊。實(shí)驗(yàn)要求如下:實(shí) 驗(yàn) 與 設(shè) 計(jì) (1) 實(shí)驗(yàn)內(nèi)容1:根據(jù)給出的各模塊的VHDL描述,完成全部設(shè)計(jì),包括編輯、編譯、綜合和仿真操作等,給出仿真波形和完整電路的原理圖框圖,并就各模塊的功能作出詳細(xì)說明。頂層設(shè)計(jì)例8-35的各端口功能(選擇電路結(jié)構(gòu)圖NO.3):bain和bbin分別為左右球拍控制信號(hào)可分別由鍵8和鍵1控制;clr是清0控制,可由鍵7控制;clk是乒乓球的行進(jìn)速度時(shí)鐘(即發(fā)光管的亮燈傳遞速度),可接clock2,4Hz;souclk失球提示發(fā)聲時(shí)鐘,可接clock5,1024Hz;ballout7.0指示球路行進(jìn)情況,可用8個(gè)發(fā)光管擔(dān)任,即發(fā)光管D1、D2、.
45、、D8擔(dān)任;countbh3.0和countbl3.0可接數(shù)碼管7和6,分別指示左邊球手的得分的高位和低位;countah3.0和countal3.0 可接數(shù)碼管3和2,分別指示右邊球手的得分的高位和低位;lamp接數(shù)碼管7的一個(gè)段,指示clock2速度;speaker接蜂鳴器,指示失球提示。 實(shí) 驗(yàn) 與 設(shè) 計(jì) (2) 實(shí)驗(yàn)內(nèi)容2:硬件測(cè)試。操作步驟:選電路模式NO.3(用琴鍵方式);clock5接1024Hz,為失球提示提供聲響頻率;clock1接4Hz,乒乓球行進(jìn)提供時(shí)鐘信號(hào);選手甲的模擬球拍是鍵8,選手乙的模擬球拍是鍵1,可由一方先發(fā)球(按鍵);雙方失球分?jǐn)?shù)分別顯示于數(shù)碼管3/2和數(shù)碼
46、管7/6。 (3) 實(shí)驗(yàn)內(nèi)容3:完善以上設(shè)計(jì),使之更符合乒乓球運(yùn)動(dòng)的各項(xiàng)規(guī)則。乒乓球游戲電路的完整設(shè)計(jì)的VHDL描述如下:【例8-35】LIBRARY IEEE; -乒乓球游戲頂層文件use ieee.std_logic_1164.all;entity TENNIS isport(bain,bbin,clr,clk,souclk:in std_logic;ballout:out std_logic_vector(7 downto 0);countah,countal,countbh,countbl:out std_logic_vector(3 downto 0);lamp,speaker:ou
47、t std_logic);end;architecture ful of TENNIS iscomponent sound port (clk,sig,en:in std_logic;sout:out std_logic);end component;component ballctrl 接下頁port(clr,bain,bbin,serclka,serclkb,clk:in std_logic;bdout,serve,serclk,ballclr,ballen:out std_logic);end component;component ballport(clk,clr,way,en:in
48、std_logic;ballout:out std_logic_vector(7 downto 0);end component;component board port (ball,net,bclk,serve:in std_logic;couclk,serclk:out std_logic);end component;component cou10 port(clk,clr:in std_logic;cout:out std_logic;qout:out std_logic_vector(3 downto 0);接下頁end component;component cou4 port(c
49、lk,clr:in std_logic;cout:out std_logic;qout:out std_logic_vector(3 downto 0);end component;component mway port(servea,serveb:in std_logic;way:out std_logic);end component;signal net,couclkah,couclkal,couclkbh,couclkbl,cah,cbh:std_logic;signal serve,serclka,serclkb,serclk,ballclr,bdout,way,ballen:std
50、_logic;signal bbll:std_logic_vector( 7 downto 0);beginnet=bbll(4); ballout=bbll; lamp=clk;接下頁uah:cou4 port map (couclkah,clr,cah,countah);ual:cou10 port map (couclkal,clr,couclkah,countal);ubh:cou4 port map (couclkbh,clr,cbh,countbh);ubl:cou10 port map (couclkbl,clr,couclkbh,countbl);ubda:board port
51、 map (bbll(0),net,bain,serve,couclkal,serclka);ubdb:board port map (bbll(7),net,bbin,serve,couclkbl,serclkb);ucpu:ballctrl port map (clr,bain,bbin,serclka,serclkb,clk,bdout,serve,serclk,ballclr,ballen);uway:mway port map (serclka,serclkb,way);uball: ball port map (clk,ballclr,way,ballen,bbll);usound
52、:sound port map(souclk,ballen,bdout,speaker);end;【例8-36】library ieee;use ieee.std_logic_1164.all;entity sound is port (clk:in std_logic;-發(fā)聲時(shí)鐘sig:in std_logic;-正確接球信號(hào)en:in std_logic;-球拍接球脈沖sout:out std_logic);-提示聲輸出,接小喇叭end sound;architecture ful of sound isbeginsout=clk and (not sig) and en;-球拍接球,沒接
53、到時(shí),發(fā)提示聲end;【例8-37】library ieee; -總控制模塊use ieee.std_logic_1164.all;entity ballctrl isport(clr:in std_logic;-系統(tǒng)復(fù)位bain:in std_logic;-左球拍bbin:in std_logic;-右球拍serclka:in std_logic;-左拍準(zhǔn)確接球或發(fā)球serclkb:in std_logic;-右拍準(zhǔn)確接球或發(fā)球clk:in std_logic;-乒乓球燈移動(dòng)時(shí)鐘bdout:out std_logic;-球拍接球脈沖serve:out std_logic;-發(fā)球狀態(tài)信號(hào)ser
54、clk:out std_logic;-球拍正確接球信號(hào)ballclr:out std_logic;-乒乓球燈清零信號(hào)ballen:out std_logic);-乒乓球燈使能接下頁end ballctrl;architecture ful of ballctrl issignal bd:std_logic;signal ser:std_logic;beginbd=bain or bbin;ser=serclka or serclkb; serclk=ser;-球拍正確接球信號(hào)bdout=bd;-球拍接球脈沖process(clr,clk,bd)beginif(clr=1 ) then-系統(tǒng)復(fù)位
55、serve=1;-系統(tǒng)處在發(fā)球狀態(tài)ballclr=1;-乒乓球燈清零else-系統(tǒng)正常接下頁if(bd=1)then -球拍發(fā)球或接球時(shí)ballclr=1;-乒乓球燈清零if(ser=1) then-球拍發(fā)球或準(zhǔn)確接球ballen=1;-乒乓球燈使能允許serve=0;-系統(tǒng)處在接球狀態(tài)else ballen=0; serve=1; -系統(tǒng)處在發(fā)球狀態(tài)end if;else ballclr=0;-沒發(fā)球或接球時(shí)乒乓球燈不清零end if;end if;end process;end;接下頁【例8-38】 -乒乓球燈模塊library ieee;use ieee.std_logic_1164.a
56、ll;use ieee.std_logic_unsigned.all;entity ball isport(clk:in std_logic;-乒乓球燈前進(jìn)時(shí)鐘clr:in std_logic;-乒乓球燈清零way:in std_logic;-乒乓球燈前進(jìn)方向en:in std_logic;-乒乓球燈使能ballout:out std_logic_vector(7 downto 0);-乒乓球燈end ball;architecture ful of ball issignal lamp:std_logic_vector(9 downto 0);begin接下頁process(clk,clr,en)beginif(clr=1) then lamp=1000000001; -清零elsif en=0 thenelsif (clkevent and clk=1) then-使能允許,乒乓球燈前進(jìn)時(shí)鐘上升沿if(way=1) then lamp(9 downto 1)=lamp(8 downto 0);lamp(0)=0;-乒乓球燈右移else lamp(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年山東省職教高考《職測(cè)》核心考點(diǎn)必刷必練試題庫(含答案)
- 《鄉(xiāng)村振興促進(jìn)法》參考試題庫80題(含答案)
- 《公務(wù)員法》考試題庫500題(含答案)
- 2025年江蘇農(nóng)林職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測(cè)試近5年常考版參考題庫含答案解析
- 預(yù)防與解決勞動(dòng)糾紛
- 人工智能應(yīng)用開發(fā)合同
- 幼兒園紙張活動(dòng)策劃方案模板五篇
- 建筑施工合同管理培訓(xùn).x
- 租賃房屋租賃合同
- 企業(yè)業(yè)務(wù)咨詢服務(wù)簡(jiǎn)單合同
- 2023年四川省公務(wù)員錄用考試《行測(cè)》真題卷及答案解析
- 機(jī)電一體化系統(tǒng)設(shè)計(jì)-第5章-特性分析
- 2025年高考物理復(fù)習(xí)壓軸題:電磁感應(yīng)綜合問題(原卷版)
- 鑄鋁焊接工藝
- 《社區(qū)康復(fù)》課件-第六章 骨關(guān)節(jié)疾病、損傷患者的社區(qū)康復(fù)實(shí)踐
- 2024年湖南省公務(wù)員考試行政職業(yè)能力測(cè)驗(yàn)真題
- 攀巖運(yùn)動(dòng)之繩結(jié)技巧課程
- 防打架毆斗安全教育課件
- 采購(gòu)行業(yè)的swot分析
- 石家莊長(zhǎng)安區(qū)幼兒園信息統(tǒng)計(jì)表
- 最終稿(教學(xué)評(píng)一致)課件
評(píng)論
0/150
提交評(píng)論