【文章內(nèi)容簡(jiǎn)介】
WHEN 29=INDEX0=00000100。 3 WHEN 30=INDEX0=00000010。 2 WHEN 31=INDEX0=00000010。 2 END CASE。 ELSE INDEX0=INDEX2。 END IF。 END PROCESS。 音調(diào)發(fā)生模塊音調(diào)發(fā)生模塊的作用是產(chǎn)生音階的分頻預(yù)置值。當(dāng) 8 位發(fā)聲控制輸入信號(hào)中的某一位為高電平時(shí),則對(duì)應(yīng)某一音階的數(shù)值將輸出,該數(shù)值即為該音階的分頻預(yù)置值,分頻預(yù)置值控制數(shù)控分頻模塊進(jìn)行分頻,由此可得到每個(gè)音階對(duì)應(yīng)的頻率。圖 是音調(diào)發(fā)生模塊的原理圖: TONE[]INDEX[] HIGH CODE[] 圖 音調(diào)發(fā)生模塊原理圖音調(diào)發(fā)生模塊可以由 VHDL 語(yǔ)言來(lái)實(shí)現(xiàn),下面是一段主要代碼: BEGIN CASE INDEX ISWHEN00000001=TONE0=773。CODE=1001111。HIGH=39。139。WHEN00000010=TONE0=912。CODE=0010010。HIGH=39。139。WHEN00000100=TONE0=1036。CODE=0000110。HIGH=39。139。WHEN00001000=TONE0=1116。CODE=1001100。HIGH=39。139。WHEN00010000=TONE0=1197。CODE=0100100。HIGH=39。039。WHEN00100000=TONE0=1290。CODE=0100000。HIGH=39。039。WHEN01000000=TONE0=1372。CODE=0001111。HIGH=39。039。WHEN10000000=TONE0=1410。CODE=0000000。HIGH=39。039。WHEN OTHERS=TONE=2047。CODE=0000001。HIGH=39。039。 END CASE。 END PROCESS。 數(shù)控分頻模塊在對(duì)計(jì)算機(jī)組成原理的學(xué)習(xí)中,我們知道數(shù)控分頻器的功能是在輸入端輸入不同數(shù)據(jù)時(shí),對(duì)輸入時(shí)鐘產(chǎn)生不同的分頻比,輸出不同頻率的時(shí)鐘,以改變輸出信號(hào)的頻率。本設(shè)計(jì)中數(shù)控分頻模塊是利用并行預(yù)置數(shù)的減法計(jì)數(shù)器對(duì)時(shí)基脈沖進(jìn)行分頻,得到與7 七個(gè)音符相對(duì)應(yīng)的頻率。數(shù)控分頻模塊原理圖如圖 所示:CLK1 SPKSTONE1[] 圖 數(shù)控分頻模塊原理圖其主要 VHDL 代碼如下所示: BEGINPROCESS(CLK1) VARIABLE COUNT:INTEGER RANGE 0 TO 8。BEGIN IF(CLK39。EVENT AND CLK1=39。139。)THEN COUTNT:=COUNT +1。 IF COUNT=2 THEN PRECLK=39。139。 ELSE COUNT=4 THEN PRECLK=39。039。COUTN:=0。 END IF。 END IF。END PROCESS。PROCESS(PRECLK,TONE1) VARIABLE COUNT11:INTEGER RANGE 0 TO 2047。 BEGIN IF(PRECLK39。EVENT AND PRECLK=39。139。)THEN IF COUNT11TONE1 THEN COUNT11:=COUNT11 +1。FULLSPKS=39。139。 ELSE COUNT11:=0。FULLSPKS=39。039。 END IF。 END IF。 END PROCESS。 頂層設(shè)計(jì)把以上設(shè)計(jì)的各個(gè)模塊進(jìn)行整合,最后我們得到了系統(tǒng)的整個(gè)工作原理圖,如圖:3.10 簡(jiǎn)易電子琴的工作原理圖完成整個(gè)系統(tǒng)頂層設(shè)計(jì)的主要 VHDL 代碼如下: ARCHITECTURE ART OF DIANZIQIN IS COMPONENT AUTO PORT(CLK: IN STD_LOGIC。 AUTO: IN STD_LOGIC。 INDEX2:IN STD_LOGIC_VECTOR(7 DOWNTO 0)。 INDEX0:OUT STD_LOGIC_VECTOR(7 DOWNTO 0))。 END COMPONENT。 COMPONENT TONE PORT ( INDEX: IN STD_LOGIC_VECTOR(7 DOWNTO 0)。 CODE: OUT STD_LOGIC_VECTOR(6 DOWNTO 0)。 HIGH: OUT STD_LOGIC。 TONE0:OUT INTEGER RANGE 0 TO 2047)。 END COMPONENT。 COMPONENT FENPIN PORT(CLK1: IN STD_LOGIC。 TONE1: IN INTEGER RANGE 0 TO 2047。 SPKS: OUT STD_LOGIC)。 END COMPONET。 4 系統(tǒng)仿真樂(lè)曲自動(dòng)演奏模塊由 VHDL 語(yǔ)言實(shí)現(xiàn)后,其仿真圖如圖 所示。圖 樂(lè)曲自動(dòng)演奏模塊的仿真音調(diào)發(fā)生模塊由 VHDL 實(shí)現(xiàn)后,其仿真圖如圖 所示。圖 音調(diào)發(fā)生模塊仿真圖數(shù)控分頻模塊由 VHDL 程序?qū)崿F(xiàn)后,其仿真圖如圖 所示。 圖 數(shù)控分頻模塊仿真圖最后進(jìn)一步利用 VHDL 完成對(duì)整個(gè)系統(tǒng)的頂層設(shè)計(jì),其仿真圖如 所示: 圖 簡(jiǎn)易電子琴整個(gè)系統(tǒng)的仿真圖 5 結(jié)束語(yǔ)通過(guò)兩個(gè)多周的緊張工作,終于完成了簡(jiǎn)易電子琴的設(shè)計(jì),這個(gè)課程設(shè)計(jì)使我受益匪淺,他使我了解了硬件設(shè)計(jì)的整個(gè)流程,并且加深了我對(duì)計(jì)算機(jī)組成原理這門(mén)的課內(nèi)容的理解,通過(guò)這個(gè)課程設(shè)計(jì),不僅使我了解了組成原理的脊髓,而且使我對(duì)VHDL 語(yǔ)言從陌生到初步理解,擴(kuò)充的我的知識(shí)面。這個(gè)課程設(shè)計(jì)也培養(yǎng)了我們的耐心和毅力,一個(gè)小小的錯(cuò)誤就會(huì)導(dǎo)致結(jié)果的不正確,而對(duì)錯(cuò)誤的檢查要求我要有足夠的耐心,由于這個(gè)課程設(shè)計(jì)也使我積累了一些經(jīng)驗(yàn),相信這些經(jīng)驗(yàn)在我以后的學(xué)習(xí)工作中會(huì)有很大的作用。此課程設(shè)計(jì)也使我了解了VH