【正文】
的不太了解,初涉VHDL語(yǔ)言以致很多語(yǔ)法和語(yǔ)言基本結(jié)構(gòu)、算法生疏,運(yùn)用不靈活,在編寫(xiě)源程序上遇到很大難題,而且在編譯運(yùn)行程序時(shí)對(duì)出錯(cuò)的語(yǔ)句理解不到位,難于下手修改錯(cuò)誤語(yǔ)句,這使得在設(shè)計(jì)程序時(shí)遇到很大的阻礙,此外,VHDL語(yǔ)言的數(shù)據(jù)類(lèi)型很容易造成混淆,比如IN STD_LOGIC_VECTOR(7 DOWNTO 0)語(yǔ)句,它有時(shí)既可以認(rèn)為是從7下降到0,也可認(rèn)為是從0上升到7,當(dāng)輸入有多位時(shí),這就容易造成在讀懂仿真波形圖時(shí)讀位數(shù)倒置,使仿真現(xiàn)象與理論結(jié)果相出入。銚銻縵嚌鰻鴻鋟謎諏涼鏗穎報(bào)嚴(yán)鮑蠅。能夠借此機(jī)會(huì)了解到部分EDA技術(shù)的知識(shí)和學(xué)習(xí)運(yùn)用其中一種硬件描述語(yǔ)言VHDL編程實(shí)現(xiàn)各種常用器件的功能,這是在哪堂講課上都得不到的一筆財(cái)富。這就提醒我們?cè)谄綍r(shí)的學(xué)習(xí)生活中不能一味埋頭于面前的課本知識(shí),畢竟當(dāng)今社會(huì)競(jìng)爭(zhēng)越發(fā)激烈,而學(xué)校能教授的東西有限,要想在人才市場(chǎng)中脫穎而出就只能靠我們自己。[4] 齊洪喜,. 北京:清華大學(xué)出版社,2004[5] 潘松,黃繼業(yè). EDA技術(shù)實(shí)用教程. 北京:科學(xué)出版社,2002附錄1:樂(lè)曲自動(dòng)演奏源程序清單程序名稱(chēng):程序功能:采用VHDL語(yǔ)言編程產(chǎn)生8位發(fā)聲控制輸入信號(hào)。USE 。 鍵盤(pán)輸入/自動(dòng)演奏綻萬(wàn)璉轆娛閬蟶鬮綰瀧恒蟬轅紗魚(yú)臚。 INDEX0: OUT STD_LOGIC_VECTOR(7 DOWNTO 0))。 定義信號(hào)計(jì)數(shù)器,有32個(gè)信號(hào)元素鎦詩(shī)涇艷損樓紲鯗餳類(lèi)礙穡鰳責(zé)髕鵲。BEGIN IF AUTO=39。039。139。 ELSIF COUNT=8 THEN CLK2=39。END IF。EVENT AND CLK2=39。END IF。039。 3 WHEN 2=INDEX0=00000100。 5 WHEN 6=INDEX0=00010000。 8 WHEN 10=INDEX0=10000000。 2 WHEN 14=INDEX0=00000001。 5 WHEN 18=INDEX0=00001000。 3 WHEN 22=INDEX0=00000010。 5 WHEN 26=INDEX0=00001000。 3 WHEN 30=INDEX0=00000010。ELSE INDEX0=INDEX2。END BEHAVIORAL。USE 。 CODE: OUT STD_LOGIC_VECTOR(6 DOWNTO 0)。 音符的分頻系數(shù)陽(yáng)簍埡鮭罷規(guī)嗚舊巋錟麗鮑軫溈騫硨。HIGH=39。CODE=0010010。WHEN00000100=TONE0=1036。懨俠劑鈍觸樂(lè)鷴燼觶騮揚(yáng)銥鯊臘騖韋。139。HIGH=39。CODE=0100000。WHEN01000000=TONE0=1372。麩肅鵬鏇轎騍鐐縛縟糶爾攤鱘嫗騅鐳。039。HIGH=39。END PROCESS。USE 。 TONE1: IN INTEGER RANGE 0 TO 2047。ARCHITECTURE ART OF FENPIN IS SIGNAL PRECLK:STD_LOGIC。BEGINIF(CLK139。 判斷計(jì)數(shù)器取值為1攙閿頻嶸陣澇諗譴隴瀘鐙澮蹤島騁檻。039。END IF。到2047HzBEGIN IF(PRECLK39。 IF COUNT11TONE1 THEN 若計(jì)數(shù)器11值小于音符信號(hào)1偽澀錕攢鴛擋緬鐒鈞錠鈴鉍蹌鏟驊擷。 計(jì)數(shù)器加1,音頻信號(hào)為1緦徑銚膾齲轎級(jí)鏜撟廟耬癬紇徑驕鄰。END IF。VARIABLE COUNT2:STD_LOGIC:=39。EVENT AND FULLSPKS=39。IF COUNT2=39。ELSE SPKS=39。END PROCESS。USE 。 系統(tǒng)時(shí)鐘信號(hào)榿貳軻謄壟該檻鯔塏賽緯闥糝鍔駕躦。 音符顯示信號(hào)嶁硤貪塒廩袞憫倉(cāng)華糲饃勵(lì)騮詡駐賭。 高低音節(jié)信號(hào)劇妝諢貰攖蘋(píng)塒呂侖廟痙湯籪糶駒責(zé)。ARCHITECTURE ART OF DIANZIQIN ISCOMPONENT AUTO 引用 AUTO元件鰻順褸悅漚縫囅屜鴨騫鬩藶騍擯駟謔。 INDEX2: IN STD_LOGIC_VECTOR(7 DOWNTO 0)。END COMPONENT。 HIGH: OUT STD_LOGIC。PORT(CLK1: IN STD_LOGIC。SIGNAL TONE2:INTEGER RANGE 0 TO 2047。BEGINU0:AUTOPORTMAP(CLK=CLK32MHZ,INDEX2=INDEX1,INDEX0=INDX,AUTO=HANDTOAUTO)。生模塊U2:FENPINPORT MAP(CLK1=CLK32MHZ,TONE1=TONE2,SPKS=SPKOUT)。13 / 13。END ART。U1:TONEPORTMAP(INDEX=INDX,TONE0=TONE2,CODE=CODE1,HIGH=HIGH1)。SIGNAL INDX:STD_LOGIC_VECTOR(7 DOWNTO 0)。 SPKS: OUT STD_LOGIC)。END COMPONENT。PORT(INDEX: IN STD_LOGIC_VECTOR(7 DOWNTO 0)。 INDEX0: OUT STD_LOGIC_VECTOR(7 DOWNTO 0))。 AUTO: IN STD_LOGIC。 音頻信號(hào)臠龍訛驄椏業(yè)變墊羅蘄囂馱廣閏駙孫。 鍵盤(pán)輸入信號(hào)該櫟諼碼戇沖巋鳧薩錠謨贛贅眾騶嶠。 鍵盤(pán)輸入/自動(dòng)演奏信號(hào)邁蔦賺陘賓唄擷鷦訟湊幟結(jié)廢擴(kuò)駑彎。USE 。附錄4:頂層設(shè)計(jì)源程序清單程序名稱(chēng):程序功能:采用VHDL語(yǔ)言編寫(xiě)主程序調(diào)用3個(gè)子程序,實(shí)現(xiàn)樂(lè)曲演奏的功能。END IF。THENSPKS=39。)THEN 音頻信號(hào)輸出上升沿有效時(shí)鏃鋝過(guò)潤(rùn)啟婭澗駱讕瀘載撻贏禱驛懼。 定義變量計(jì)數(shù)器2,初值為0癘騏鏨農(nóng)剎貯獄顥幗騮鴣詼驤齔駘輸。END PROCESS。FULLSPKS=39。FULLSPKS=39。139。PROCESS(PRECLK,TONE1)VARIABLE COUNT11:INTEGER RANGE 0 TO 2047。 時(shí)基脈沖為0,計(jì)數(shù)器清零趕輾雛紈顆鋝討躍滿賺蜆騍純蠅驪銬。139。139。BEGINPROCESS(CLK1)VARIABLE COUNT:INTEGER RANGE 0 TO 8。 音符分頻系數(shù)END ENTITY FENPIN。USE 。附錄3:數(shù)控分頻源程序清單程序名稱(chēng):程序功能:采用VHDL語(yǔ)言編程對(duì)時(shí)基脈沖進(jìn)行分頻,得到8個(gè)音符相對(duì)應(yīng)的頻率。風(fēng)攆鮪貓鐵頻鈣薊糾廟誑繃紙鯉騏鍔。WHEN OTHERS =