版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第8章數(shù)字系統(tǒng)設(shè)計(jì)實(shí)例8.1數(shù)字密碼鎖電路設(shè)計(jì)8.2IIR濾波器電路設(shè)計(jì)8.3簡(jiǎn)單電子琴電路設(shè)計(jì)8.4交通信號(hào)燈控制器電路設(shè)計(jì)8.1數(shù)字密碼鎖電路設(shè)計(jì)
8.1.1系統(tǒng)設(shè)計(jì)要求
(1)密碼輸入:每按下一個(gè)數(shù)字鍵,就輸入一個(gè)數(shù)值,并在顯示器上顯示出該數(shù)值,同時(shí)將先前輸入的數(shù)據(jù)依次左移一個(gè)數(shù)字位置。
(2)密碼清除:按下“清除”鍵可清除前面所有輸入的值。
(3)密碼更改:按下“更改”鍵可將目前的數(shù)碼設(shè)定成新的密碼。
(4)密碼上鎖:按下“上鎖”鍵可將密碼鎖定。
(5)密碼解鎖:按下“解鎖”鍵首先檢查輸入的密碼是否正確,密碼正確即開鎖。8.1.2系統(tǒng)設(shè)計(jì)
根據(jù)系統(tǒng)設(shè)計(jì)要求,系統(tǒng)設(shè)計(jì)采用自頂向下的設(shè)計(jì)方法。頂層設(shè)計(jì)采用原理圖設(shè)計(jì)方式,系統(tǒng)整體設(shè)計(jì)原理圖如圖8-1所示。它由密碼鎖輸入模塊(SR)、密碼鎖控制模塊(CTRL)和譯碼顯示模塊(YM)三部分組成。圖8-1系統(tǒng)的整體組裝設(shè)計(jì)原理圖8.1.3模塊設(shè)計(jì)與實(shí)現(xiàn)
1.密碼鎖輸入模塊
(1)時(shí)序產(chǎn)生電路。時(shí)序產(chǎn)生電路中使用三種不同頻率的工作脈沖波形,即系統(tǒng)時(shí)鐘脈沖、彈跳消除取樣信號(hào)和鍵盤掃描信號(hào)。
(2)鍵盤掃描電路。鍵盤掃描電路的作用是提供鍵盤掃描信號(hào),掃描信號(hào)變化的順序依次為1110→1101→1011→0111
→1110…。圖8-2鍵盤掃描示意圖當(dāng)鍵盤掃描信號(hào)為1110時(shí),按鍵位置分別為011(“1”鍵按下)、101(“2”鍵按下)、110(“3”鍵按下);當(dāng)鍵盤掃描信號(hào)為1101時(shí),按鍵位置分別為011(“4”鍵按下)、101(“5”鍵按下)、110(“6”鍵按下);當(dāng)鍵盤掃描信號(hào)為1011時(shí),按鍵位置分別為011(“7”鍵按下)、101(“8”鍵按下)、110(“9”鍵按下);當(dāng)鍵盤掃描信號(hào)為0111時(shí),按鍵位置分別為011(“*”鍵按下)、101(“0”鍵按下)、110(“#”鍵按下)。
(3)鍵盤譯碼電路。上述鍵盤中的按鍵分為數(shù)字按鍵和功能按鍵,每個(gè)功能按鍵可能負(fù)責(zé)不同的功能,例如“清除”鍵、“上鎖”鍵和“解鎖”鍵等。數(shù)字按鍵主要是用來(lái)輸入數(shù)字的。但是鍵盤所產(chǎn)生的輸出是無(wú)法直接拿來(lái)用作密碼鎖控制電路的輸入的;另外,不同的按鍵具有不同的功能,所以必須有鍵盤譯碼電路來(lái)規(guī)劃每個(gè)按鍵的輸出形式,以便執(zhí)行相應(yīng)的動(dòng)作。①按鍵存儲(chǔ)電路。因?yàn)槊看螔呙钑?huì)產(chǎn)生新的按鍵數(shù)據(jù),可能會(huì)覆蓋前面的數(shù)據(jù),所以需要一個(gè)按鍵存儲(chǔ)電路,將整個(gè)鍵盤掃描完畢的結(jié)果記錄下來(lái)。本設(shè)計(jì)采用串入串出移位寄存器實(shí)現(xiàn)按鍵存儲(chǔ)電路。②各按鍵位置與數(shù)碼關(guān)系如表8-1所示。其中“*”為“上鎖”鍵,“#”為“清除/解鎖”鍵。若按下的是數(shù)字鍵,則譯成相對(duì)應(yīng)的BCD碼;若按下的是功能鍵,則譯成四位數(shù)的碼字,并由密碼鎖控制電路給出相應(yīng)的動(dòng)作。根據(jù)上述分析,密碼輸入電路的VHDL源程序(SR.VHD)如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;ENTITYSRIS
PORT(CLK_IN:INSTD_LOGIC;--時(shí)鐘信號(hào)
KEY_IN:INSTD_LOGIC_VECTOR(2DOWNTO0); --按鍵輸入信號(hào)
DATA_N:OUTSTD_LOGIC_VECTOR(3DOWNTO0); --數(shù)字鍵數(shù)據(jù)
DATA_F:OUTSTD_LOGIC_VECTOR(3DOWNTO0); --功能鍵數(shù)據(jù)
FLAG_N:OUTSTD_LOGIC;--數(shù)字鍵數(shù)據(jù)標(biāo)志
FLAG_F:OUTSTD_LOGIC;--功能鍵數(shù)據(jù)標(biāo)志
CQD:OUTSTD_LOGIC;--鍵盤輸入采樣時(shí)鐘
KSEL:OUTSTD_LOGIC_VECTOR(3DOWNTO0);
--鍵盤掃描信號(hào)
CSR:OUTSTD_LOGIC_VECTOR(1DOWNTO0)); --按鍵行號(hào)00,01,10,11
ENDENTITYSR;
ARCHITECTUREARTOFSRIS
SIGNALC_QD:STD_LOGIC;
SIGNALC_SR:STD_LOGIC_VECTOR(1DOWNTO0);
SIGNALN,F:STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALFN,FF:STD_LOGIC;
SIGNALSEL:STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALQ:STD_LOGIC_VECTOR(5DOWNTO0);
SIGNALC:STD_LOGIC_VECTOR(2DOWNTO0);
BEGIN --內(nèi)部連接
DATA_N<=N; --數(shù)字鍵譯碼值寄存器
DATA_F<=F;
FLAG_N<=FN; --數(shù)字鍵標(biāo)志值數(shù)據(jù)
FLAG_F<=FF;
CQD<=C_QD; --鍵盤輸入采樣時(shí)鐘
CSR<=C_SR; --按鍵位置
KSEL<=SEL; --鍵盤掃描信號(hào)
C(0)<=KEY_IN(0); --按鍵輸入寄存器(鍵盤矩陣的輸出)
C(1)<=KEY_IN(1);
C(2)<=KEY_IN(2);COUNTER:BLOCKIS; --鍵盤掃描模塊(計(jì)數(shù)器)
BEGIN
PROCESS(CLK_IN)IS
BEGIN
IF(CLK_IN'EVENTANDCLK_IN='1')THEN
Q<=Q+1;
ENDIF;
C_QD<=Q(3); --鍵盤輸入采樣時(shí)鐘
C_SR<=Q(5DOWNTO4); --確定鍵盤掃描行號(hào)
ENDPROCESS;
SEL<="1110"WHENC_SR=00ELSE;--掃描“0”行
"1101"WHENC_SR=01ELSE
"1011"WHENC_SR=10ELSE
"0111"WHENC_SR=11ELSE
"1111";
ENDBLOCKCOUNTER;
KEY_DECODER:BLOCK;--鍵盤譯碼模塊
SIGNALZ:STD_LOGIC_VECTOR(4DOWNTO0);
--按鍵位置
BEGIN
PROCESS(C_QD);--鍵盤采樣時(shí)鐘觸發(fā)
BEGIN
Z<=C_SR&C;
--按鍵位置<掃描行>(2位)&按鍵輸入<讀出列>(3位)
IF(C_QD'EVENTANDC_QD='1')THEN
CASEZIS
WHEN"11101"=>N<="0000"; --數(shù)字鍵“0”
WHEN"00011"=>N<="0001"; --數(shù)字鍵“1”
WHEN"00101"=>N<="0010";
WHEN"00110"=>N<="0011";
WHEN"01011"=>N<="0100";
WHEN"01101"=>N<="0101";
WHEN"01110"=>N<="0110";
WHEN"10011"=>N<="0111";
WHEN"10101"=>N<="1000";
WHEN"10110"=>N<="1001"; --數(shù)字鍵“9”
WHENOTHERS=>N<="1111";
ENDCASE;
ENDIF;
IF(C_QD'EVENTANDC_QD='1')THEN
CASEZIS
WHEN"11011"=>F<="0100"; --功能鍵“*”
WHEN"11110"=>F<="0001"; --功能鍵“#”
WHENOTHERS=>F<="1000";
ENDCASE;
ENDIF;
ENDPROCESS;
FN<=NOT(N(3)ANDN(2)ANDN(1)ANDN(0)); --數(shù)字鍵標(biāo)志
FF<=F(2)ORF(0); --功能鍵標(biāo)志
ENDBLOCKKEY_DECODER;
ENDARCHITECTUREART;
2.密碼鎖控制模塊
1)數(shù)字按鍵輸入的相應(yīng)控制
(1)如果按下數(shù)字鍵,第一個(gè)數(shù)字會(huì)從顯示器的最右端開始顯示,此后每新按下一個(gè)數(shù)字,顯示器上的數(shù)字必須左移一位,以便將新的數(shù)據(jù)顯示出來(lái)。
(2)假如要更改輸入的數(shù)字,可以按“倒退”鍵來(lái)清除前面輸入的一個(gè)數(shù)字,或者按“清除”鍵清除所有輸入數(shù)字,再重新輸入四位數(shù)。
(3)由于這里設(shè)計(jì)的是一個(gè)四位電子密碼鎖,所以當(dāng)輸入的數(shù)字鍵超過4個(gè)時(shí),電路不予理會(huì),而且不再顯示第四個(gè)以后的數(shù)字。
2)功能按鍵輸入的相應(yīng)控制
(1)“清除”鍵:清除所有的輸入數(shù)字,即作歸零動(dòng)作。
(2)“上鎖”鍵:按下此鍵時(shí)可將密碼鎖上鎖(上鎖前必須設(shè)置四位數(shù)字密碼)。
(3)“解鎖”鍵:按下此鍵會(huì)檢查輸入的密碼是否正確,若密碼正確無(wú)誤則解鎖。下面給出密碼鎖控制模塊的VHDL源程序(CTRL.VHD):
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYCTRLIS
PORT(DATA_N:INSTD_LOGIC_VECTOR(3DOWNTO0); --數(shù)字鍵數(shù)據(jù)
DATA_F:INSTD_LOGIC_VECTOR(3DOWNTO0); --功能鍵數(shù)據(jù)
FLAG_N:INSTD_LOGIC;--數(shù)字鍵數(shù)據(jù)標(biāo)志
FLAG_F:INSTD_LOGIC;--功能鍵數(shù)據(jù)標(biāo)志
MIMAIN:BUFFERSTD_LOGIC;--密碼輸入標(biāo)志
SETIN:BUFFERSTD_LOGIC;--密碼設(shè)置標(biāo)志
OLD:BUFFERSTD_LOGIC;--舊密碼設(shè)置標(biāo)志
CQD:INSTD_LOGIC;--鍵盤輸入采樣時(shí)鐘
ENLOCK:OUTSTD_LOGIC;--開鎖信號(hào)
DATA_BCD:OUTSTD_LOGIC_VECTOR(15DOWNTO0));
--BCD數(shù)據(jù)
ENDENTITYCTRL;ARCHITECTUREARTOFCTRLIS
SIGNALACC,REG:STD_LOGIC_VECTOR(15DOWNTO0);
--ACC暫存鍵入的信息,REG存儲(chǔ)輸入的密碼
BEGIN
PROCESS(CQD,FLAG_F)IS
BEGIN
IF(CQD'EVENTANDCQD='0')THEN
IFFLAG_F='1'THEN
IF(DATA_F="0100")THEN
ACC<="1111111111111111"; --功能鍵“*”
MIMAIN<='0';SETIN<='0';OLD<='0';
ELSIF(DATA_F="0001")THEN
IF(MIMAIN='0'ANDSETIN='0')THEN
CASEACC(7DOWNTO0)IS
WHEN"00010001"=>ENLOCK<='1';--開鎖信號(hào)
WHEN"10011001"=>MIMAIN<='1';--密碼輸入標(biāo)志
ACC<="1111111111111111";
WHEN"01010101"=>SETIN<='1';--密碼設(shè)置標(biāo)志
ACC<="1111111111111111";
OLD<='1';
WHENOTHERS=>NULL;
ENDCASE;
ELSIF(MIMAIN=‘1’)THEN
IFACC=REGTHEN;--密碼核對(duì)
ENLOCK<='0';
MIMAIN<='0';
ELSE
MIMAIN<='0';
ENDIF;
ELSIF(SETIN='1')THEN
IF(OLD='1')THEN
IF(ACC=REG)THEN
OLD<='0';
ELSE
SETIN<='0';
OLD<='0';
ENDIF;
ELSE
IF(ACC<“1001100110011001”)THEN;
--BCD碼小于“9999”為有效碼
REG<=ACC; --密碼存儲(chǔ)
SETIN<='0';
ENDIF;
ENDIF;
ENDIF;
ENDIF;
ELSIFFLAG_N=‘1’THEN
ACC<=ACC(11DOWNTO0)&DATA_N;
--實(shí)現(xiàn)數(shù)位左移
ENDIF;
ENDIF;
ENDPROCESS;
DATA_BCD<=ACC;
ENDARCHITECTUREART;
3.譯碼顯示模塊
譯碼顯示模塊的主要功能是將輸入的數(shù)字通過數(shù)碼管顯示出來(lái),根據(jù)數(shù)碼顯示電路的原理,很容易得到數(shù)字密碼鎖譯碼顯示電路的VHDL設(shè)計(jì)程序(YM.VHD):
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYYMIS
PORT(DATA_BCD:INSTD_LOGIC_VECTOR(3DOWNTO0);
DOUT7:OUTSTD_LOGIC_VECTOR(6DOWNTO0));
ENDENTITYYM;ARCHITECTUREARTOFYMIS
BEGIN
PROCESS(DATA_BCD)
BEGIN
CASEDATA_BCDIS
WHEN"0000"=>DOUT7<="0111111";--顯示字形“0”
WHEN"0001"=>DOUT7<="0000110";--顯示字形“1”
WHEN"0010"=>DOUT7<="1011011";
WHEN"0011"=>DOUT7<="1001111";
WHEN"0100"=>DOUT7<="1100110";
WHEN"0101"=>DOUT7<="1101101";
WHEN"0110"=>DOUT7<="1111101";
WHEN"0111"=>DOUT7<="0000111";
WHEN"1000"=>DOUT7<="1111111";
WHEN“1001”=>DOUT7<=“1101111”;
WHENOTHERS=>DOUT7<=“0000000”;
ENDCASE;
ENDPROCESS;
ENDARCHITECTUREART;8.1.4波形仿真
1.密碼鎖輸入模塊的仿真波形
密碼鎖輸入模塊仿真波形如圖8-3所示。圖8-3密碼鎖輸入模塊仿真波形
2.密碼鎖控制模塊的仿真波形
密碼鎖控制模塊仿真波形如圖8-4所示。圖8-4密碼鎖控制模塊仿真波形
3.密碼鎖譯碼模塊的仿真波形
密碼鎖譯碼模塊仿真波形如圖8-5所示。圖8-5密碼鎖譯碼模塊仿真波形
4.密碼鎖系統(tǒng)總體仿真圖
(1)設(shè)置新密碼部分。初始出廠時(shí)設(shè)置的密碼為“0000”,用戶重新設(shè)置為“0062”。頂層模塊仿真波形1如圖8-6所示。圖8-6頂層模塊仿真波形1
(2)上鎖部分。按下“#”表示上鎖,設(shè)置完畢后上鎖鍵(ENLOCK)有效。頂層模塊仿真波形2如圖8-7所示。圖8-7頂層模塊仿真波形2(3)解鎖但輸入錯(cuò)誤。當(dāng)按下“0692”、“*”時(shí),上鎖鍵(ENLOCK)仍然有效,表示輸入密碼有錯(cuò)誤,沒有解開密碼。頂層模塊仿真波形3如圖8-8所示。圖8-8頂層模塊仿真波形3
(4)解鎖且輸入正確。當(dāng)按下“0062”、“*”時(shí),上鎖鍵(ENLOCK)無(wú)效,表示輸入的密碼正確,解開密碼。頂層模塊仿真波形4如圖8-9所示。圖8-9頂層模塊仿真波形48.2IIR濾波器電路設(shè)計(jì)
8.2.1概述
IIR濾波器傳輸函數(shù)的一般形式為
(8-1)其差分方程的一般形式為(8-2)常用的IIR數(shù)字濾波器實(shí)現(xiàn)方法有如下幾種:①采用在通用計(jì)算機(jī)系統(tǒng)中加上專用的加速處理機(jī)實(shí)現(xiàn);②利用DSP芯片實(shí)現(xiàn);③采用普通硬件組合實(shí)現(xiàn);④采用EDA技術(shù)和FPGA/CPLD器件實(shí)現(xiàn)。在這幾種方法中,利用EDA加FPGA/CPLD的方法具有速度快、成本低、效率高等優(yōu)點(diǎn)。通常利用EDA技術(shù)和FPGA/CPLD實(shí)現(xiàn)IIR數(shù)字濾波器有如下幾種方法:
①利用VHDL實(shí)現(xiàn);
②利用LPM設(shè)計(jì)方法;
③利用DSPBulider實(shí)現(xiàn);
④利用IP核實(shí)現(xiàn)。8.2.2IIR濾波器設(shè)計(jì)方案
式(8-2)的二階形式如下:(8-3)這樣就可以將任意階的IIR濾波器通過若干二階網(wǎng)絡(luò)(也稱為濾波器的二階基本節(jié))級(jí)聯(lián)起來(lái),如圖8-10所示。圖8-10級(jí)聯(lián)二階IIR網(wǎng)絡(luò)對(duì)于每一個(gè)二階基本節(jié),可以通過轉(zhuǎn)置直接Ⅱ型結(jié)構(gòu)加以實(shí)現(xiàn),如圖8-11所示。圖8-11二階基本節(jié)直接Ⅱ型結(jié)構(gòu)采用這種級(jí)聯(lián)結(jié)構(gòu)實(shí)現(xiàn)IIR濾波器的優(yōu)點(diǎn)是每一個(gè)基本節(jié)只是關(guān)系到濾波器的某一對(duì)極點(diǎn)和一對(duì)零點(diǎn),調(diào)整系數(shù)ai,只單獨(dú)地調(diào)整了濾波器第i對(duì)零點(diǎn),而不影響其他任何零、極點(diǎn)。同樣,調(diào)整bi系數(shù),也只單獨(dú)調(diào)整了第i對(duì)極點(diǎn)。因此,這種結(jié)構(gòu)便于準(zhǔn)確地實(shí)現(xiàn)濾波器的零、極點(diǎn),也便于調(diào)整濾波器的頻率響應(yīng)性能。假設(shè)要設(shè)計(jì)一個(gè)4階IIR濾波器,則采用MATLAB實(shí)現(xiàn)IIR濾波器的源代碼如下:
FilterOrder=4;
[FeedForward,FeedBack]=ellip(FilterOrder,3,50,300/500);
figure(1);
freqz(FeedForward,FeedBack);
title(‘FrequencyResponse(fullprecisioncoefficients)’);
[z,p,k]=tf2zp(FeedForward,FeedBack);
SecOrd=zp2sos(z,p,k);可得
SecOrd=[0.1116 0.2086 0.1116 1.0000 -0.53620.4138
1.00001.4239 1.0000 1.0000 0.50990.8690]
則可得該濾波器的二階差分方程的系數(shù)如表8-2所示,幅頻響應(yīng)如圖8-12所示。圖8-12IIR幅頻響應(yīng)8.2.3IIR濾波器實(shí)現(xiàn)
1.設(shè)計(jì)方案
式(8-3)所對(duì)應(yīng)的二階節(jié)系統(tǒng)函數(shù)的差分方程為(8-4)
2.主要功能模塊設(shè)計(jì)
1)輸入控制單元
將輸入數(shù)據(jù)送入輸入寄存器中,其VHDL描述如下:
input_reg_process:PROCESS(clk)
BEGIN
IFclk‘eventANDclk=’1‘THEN
IFreset=’1‘THEN
input_register<=0.0000000000000000E+000;
ELSIFclk_en=‘1’THEN
input_register<=x;
ENDIF;
ENDIF;
ENDPROCESSinput_reg_process;
scale1<=input_register*scaleconst1;
2)移位單元
將輸入寄存器上一時(shí)刻的數(shù)據(jù)送入delay_section1(0),同時(shí)又將delay_section1(0)上一時(shí)刻的數(shù)據(jù)送入delay_section1(1),其VHDL描述如下:
delay_process_section1:PROCESS(clk)
BEGIN
IFclk‘eventANDclk=’1‘THEN
IFreset=’1‘THEN
delay_section1(0TO1)<=(OTHERS=>
0.0000000000000000E+000);
ELSIFclk_en=‘1’THEN
delay_section1(0)<=a1sum1;
delay_section1(1)<=delay_section1(0);
ENDIF;
ENDIF;
ENDPROCESSdelay_process_section1;
3)乘加單元
先將系數(shù)與其相關(guān)數(shù)據(jù)相乘,再進(jìn)行相加,其VHDL描述如下:
PROCESS(scale1,delay_section1,a1sum1)
BEGIN
inputconv1<=scale1;
a2mul1<=delay_section1(0)*coeff_a2_section1;
a3mul1<=delay_section1(1)*coeff_a3_section1;
b1mul1<=a1sum1;
b2mul1<=delay_section1(0)*coeff_b2_section1;
b3mul1<=delay_section1(1);
a2sum1<=inputconv1-a2mul1;
a1sum1<=a2sum1-a3mul1;
b2sum1<=b1mul1+b2mul1;
b1sum1<=b2sum1+b3mul1;
scale2<=b1sum1*scaleconst2;
4)輸出控制單元
將輸出數(shù)據(jù)送入輸出寄存器輸出,其VHDL描述如下:
output_register_process:PROCESS(clk)
BEGIN
IFclk‘eventANDclk=’1‘THEN
IFreset=’1‘THEN
output_register<=0.0000000000000000E+000
ELSIFclk_enable=‘1’THEN
output_register<=output_typeconvert;
ENDIF;
ENDIF;
ENDPROCESSoutput_register_process;
result<=output_register;將設(shè)計(jì)好的各模塊按照二階節(jié)電路連接,即構(gòu)成4階IIR濾波器其中一個(gè)二階節(jié),同理再設(shè)計(jì)另一個(gè)二階節(jié)濾波器,然
后連接起來(lái)即構(gòu)成一個(gè)4階的IIR濾波器,其波形仿真如圖8-13所示。圖8-13IIR濾波器波形仿真8.2.4IIR濾波器的其他FPGA/CPLD實(shí)現(xiàn)方案
1.基于LPM的IIR濾波器設(shè)計(jì)
(1)?LPM乘加器的VHDL源文件如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
LIBRARYaltera_mf;
USEaltera_mf.all;
ENTITYfmaddIS
PORT(aclr3:INSTD_LOGIC:=‘0’;
clock0:INSTD_LOGIC:='1';
dataa_0:INSTD_LOGIC_VECTOR(17DOWNTO0):
=(OTHERS=>'0');
dataa_1:INSTD_LOGIC_VECTOR(17DOWNTO0):
=(OTHERS=>'0');
dataa_2:INSTD_LOGIC_VECTOR(17DOWNTO0):
=(OTHERS=>'0');
datab_0:INSTD_LOGIC_VECTOR(17DOWNTO0):
=(OTHERS=>'0');
datab_1:INSTD_LOGIC_VECTOR(17DOWNTO0):
=(OTHERS=>'0');
datab_2:INSTD_LOGIC_VECTOR(17DOWNTO0):
=(OTHERS=>'0');
ena0:INSTD_LOGIC:='1';
result:OUTSTD_LOGIC_VECTOR(37DOWNTO0));
ENDfmadd;ARCHITECTURESYNOFfmaddIS
SIGNALsub_wire0:STD_LOGIC_VECTOR(37DOWNTO0);
SIGNALsub_wire1:STD_LOGIC_VECTOR(17DOWNTO0);
SIGNALsub_wire2:STD_LOGIC_VECTOR(53DOWNTO0);
SIGNALsub_wire3:STD_LOGIC_VECTOR(17DOWNTO0);
SIGNALsub_wire4:STD_LOGIC_VECTOR(17DOWNTO0);SIGNALsub_wire5:STD_LOGIC_VECTOR(17DOWNTO0);
SIGNALsub_wire6:STD_LOGIC_VECTOR(53DOWNTO0);
SIGNALsub_wire7:STD_LOGIC_VECTOR(17DOWNTO0);
SIGNALsub_wire8:STD_LOGIC_VECTOR(17DOWNTO0);
COMPONENTaltmult_add
GENERIC(
addnsub_multiplier_aclr1:STRING;
addnsub_multiplier_pipeline_aclr1:STRING;
addnsub_multiplier_pipeline_register1:STRING;
addnsub_multiplier_register1:STRING;
dedicated_multiplier_circuitry:STRING;
input_aclr_a0:STRING;
input_aclr_a1:STRING;
input_aclr_a2:STRING;
input_aclr_b0:STRING;
input_aclr_b1:STRING;
input_aclr_b2:STRING;
input_register_a0:STRING;
input_register_a1:STRING;
input_register_a2:STRING;
input_register_b0:STRING;
input_register_b1:STRING;
input_register_b2:STRING;
input_source_a0:STRING;
input_source_a1:STRING;
input_source_a2:STRING;
input_source_b0:STRING;
input_source_b1:STRING;
input_source_b2:STRING;
intended_device_family:STRING;
lpm_type:STRING;
multiplier1_direction:STRING;
multiplier_aclr0:STRING;
multiplier_aclr1:STRING;
multiplier_aclr2:STRING;
multiplier_register0:STRING;
multiplier_register1:STRING;
multiplier_register2 :STRING;
number_of_multipliers:NATURAL;
output_aclr:STRING;
output_register:STRING;
port_addnsub1:STRING;
port_signa:STRING;
port_signb:STRING;
representation_a:STRING;
representation_b:STRING;
signed_aclr_a:STRING;
signed_aclr_b:STRING;
signed_pipeline_aclr_a:STRING;
signed_pipeline_aclr_b:STRING;
signed_pipeline_register_a:STRING;
signed_pipeline_register_b:STRING;
signed_register_a:STRING;
signed_register_b:STRING;
width_a:NATURAL;
width_b:NATURAL;
width_result:NATURAL);
PORT(dataa:INSTD_LOGIC_VECTOR(53DOWNTO0);
datab:INSTD_LOGIC_VECTOR(53DOWNTO0);
clock0:INSTD_LOGIC;
aclr3:INSTD_LOGIC;
ena0:INSTD_LOGIC;
result:OUTSTD_LOGIC_VECTOR(37DOWNTO0));
ENDCOMPONENT;
BEGIN
sub_wire8<=datab_2(17DOWNTO0);
sub_wire7<=datab_0(17DOWNTO0);
sub_wire4<=dataa_2(17DOWNTO0);
sub_wire3<=dataa_1(17DOWNTO0);
result<=sub_wire0(37DOWNTO0);
sub_wire1<=dataa_0(17DOWNTO0);
sub_wire2<=sub_wire4(17DOWNTO0)&sub_wire3(17DOWNTO0)&
?sub_wire1(17DOWNTO0);
sub_wire5<=datab_1(17DOWNTO0);
sub_wire6<=sub_wire8(17DOWNTO0)&sub_wire5(17DOWNTO0)&
sub_wire7(17DOWNTO0);
altmult_add_component:altmult_add
GENERICMAP(
addnsub_multiplier_aclr1=>"ACLR3",
addnsub_multiplier_pipeline_aclr1=>"ACLR3",
addnsub_multiplier_pipeline_register1=>"CLOCK0",
addnsub_multiplier_register1=>"CLOCK0",
dedicated_multiplier_circuitry=>"AUTO",
input_aclr_a0=>"ACLR3",
input_aclr_a1=>"ACLR3",
input_aclr_a2=>"ACLR3",
input_aclr_b0=>"ACLR3",
input_aclr_b1=>"ACLR3",
input_aclr_b2=>"ACLR3",
input_register_a0=>"CLOCK0",
input_register_a1=>"CLOCK0",
input_register_a2=>"CLOCK0",
input_register_b0=>"CLOCK0",
input_register_b1=>"CLOCK0",
input_register_b2=>"CLOCK0",
input_source_a0=>"DATAA",
input_source_a1=>"DATAA",
input_source_a2=>"DATAA",
input_source_b0=>"DATAB",
input_source_b1=>"DATAB",
input_source_b2=>"DATAB",
intended_device_family=>"FLEX10K",
lpm_type=>"altmult_add",
multiplier1_direction=>"ADD",
multiplier_aclr0=>"ACLR3",
multiplier_aclr1=>"ACLR3",
multiplier_aclr2=>"ACLR3",
multiplier_register0=>"CLOCK0",
multiplier_register1=>"CLOCK0",
multiplier_register2=>"CLOCK0",
number_of_multipliers=>3,
output_aclr=>"ACLR3",
output_register=>"CLOCK0",
port_addnsub1=>"PORT_UNUSED",
port_signa=>"PORT_UNUSED",
port_signb=>"PORT_UNUSED",
representation_a=>"SIGNED",
representation_b=>"SIGNED",
signed_aclr_a=>"ACLR3",
signed_aclr_b=>"ACLR3",
signed_pipeline_aclr_a=>"ACLR3",
signed_pipeline_aclr_b=>"ACLR3",
signed_pipeline_register_a=>"CLOCK0",
signed_pipeline_register_b=>"CLOCK0",
signed_register_a=>"CLOCK0",
signed_register_b=>"CLOCK0",
width_a=>18,
width_b=>18,
width_result=>38)
PORTMAP(
dataa=>sub_wire2,
datab=>sub_wire6,
clock0=>clock0,
aclr3=>aclr3,
ena0=>ena0,
result=>sub_wire0
);
ENDSYN;
(2)?LPM加法器的VHDL源程序如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
LIBRARYlpm;
USElpm.ALL;ENTITYadderIS
PORT(dataa:INSTD_LOGIC_VECTOR(17DOWNTO0);
datab:INSTD_LOGIC_VECTOR(17DOWNTO0);
cout :OUTSTD_LOGIC;
overflow :OUTSTD_LOGIC;
result:OUTSTD_LOGIC_VECTOR(17DOWNTO0));
ENDadder;ARCHITECTURESYNOFadderIS
SIGNALsub_wire0:STD_LOGIC;
SIGNALsub_wire1:STD_LOGIC;
SIGNALsub_wire2:STD_LOGIC_VECTOR(17DOWNTO0);
COMPONENTlpm_add_sub
GENERIC(lpm_direction:STRING;
lpm_hint :STRING;
lpm_type :STRING;
lpm_width:NATURAL );
PORT(dataa :INSTD_LOGIC_VECTOR(17DOWNTO0);
datab:INSTD_LOGIC_VECTOR(17DOWNTO0);
overflow :OUTSTD_LOGIC;
cout :OUTSTD_LOGIC;
result:OUTSTD_LOGIC_VECTOR(17DOWNTO0));
ENDCOMPONENT;
BEGIN
overflow<=sub_wire0;
cout<=sub_wire1;
result<=sub_wire2(17DOWNTO0);
lpm_add_sub_component:lpm_add_sub
GENERICMAP(lpm_direction=>"ADD",
lpm_hint=>"ONE_INPUT_IS_CONSTANT=NO,CIN_USED=NO",
lpm_type=>"LPM_ADD_SUB",
lpm_width=>18)
PORTMAP(dataa=>dataa,
datab=>datab,
overflow=>sub_wire0,
cout=>sub_wire1,
result=>sub_wire2);
ENDSYN;
(3)二階節(jié)IIR濾波器模塊iir_1的VHDL構(gòu)造體源程序如下:
ARCHITECTUREtranslatedOFiir_1IS
COMPONENTadder
PORT(dataa:INSTD_LOGIC_VECTOR(17DOWNTO0);
datab:INSTD_LOGIC_VECTOR(17DOWNTO0);
result:OUTSTD_LOGIC_VECTOR(17DOWNTO0);
cout:OUTSTD_LOGIC;
overflow:OUTSTD_LOGIC);
ENDCOMPONENT;
SIGNALcoef_b1:STD_LOGIC_VECTOR(DLY_WIDTH-1DOWNTO0);
SIGNALcoef_b2:STD_LOGIC_VECTOR(DLY_WIDTH-1DOWNTO0);
SIGNALcoef_a0:STD_LOGIC_VECTOR(DLY_WIDTH-1DOWNTO0);
SIGNALcoef_a1:STD_LOGIC_VECTOR(DLY_WIDTH-1DOWNTO0);
SIGNALcoef_a2:STD_LOGIC_VECTOR(DLY_WIDTH-1DOWNTO0);
SIGNALcoef_a2:STD_LOGIC_VECTOR(DLY_WIDTH-1DOWNTO0);
SIGNALresult_xhdl1:STD_LOGIC_VECTOR(OUTPUT_WIDTH-1DOWNTO0);
SIGNALfeedback_fp_xhdl2:STD_LOGIC_VECTOR(OUTPUT_WIDTH-2DOWNTO0);
SIGNALwn_xhdl3:STD_LOGIC_VECTOR(DLY_WIDTH01-DOWNTO0);
SIGNALfeedback_xhdl4:STD_LOGIC_VECTOR(DLY_WIDTH01-1DOWNTO0);COMPONENTfmaddIS
PORT(clock0:INSTD_LOGIC;
dataa_0:INSTD_LOGIC_VECTOR(17DOWNTO0);
aclr3:INSTD_LOGIC;
datab_0:INSTD_LOGIC_VECTOR(17DOWNTO0);
dataa_2:INSTD_LOGIC_VECTOR(17DOWNTO0);
datab_1:INSTD_LOGIC_VECTOR(17DOWNTO0);
ena0:INSTD_LOGIC;
datab_2:INSTD_LOGIC_VECTOR(17DOWNTO0);
result:OUTSTD_LOGIC_VECTOR(37DOWNTO0));ENDCOMPONENT;
COMPONENTtmaddIS
PORT(clock0:INSTD_LOGIC;
dataa_0:INSTD_LOGIC_VECTOR(17DOWNTO0);
aclr3:INSTD_LOGIC;
datab_0:INSTD_LOGIC_VECTOR(17DOWNTO0);
datab_1:INSTD_LOGIC_VECTOR(17DOWNTO0);
ena0:INSTD_LOGIC;
result:OUTSTD_LOGIC_VECTOR(36DOWNTO0));ENDCOMPONENT;
BEGIN
result<=result_xhdl1;
feedback_fp<=feedback_fp_xhdl2;
wn<=wn_xhdl3;
feedback<=feedback_xhdl4;
coef_b1<=conv_STD_LOGIC_VECTOr(-b1,18);
coef_b2<=conv_STD_LOGIC_VECTOR(-b2,18);
coef_a0<=conv_STD_LOGIC_VECTOR(a0,18);
coef_a1<=conv_STD_LOGIC_VECTOR(a1,18);
coef_a2<=conv_STD_LOGIC_VECTOR(a2,18);
feedback_xhdl4<=feedback_fp_xhdl2(27DOWNTO10);
four_mult_add_inst:fmadd
PORTMAP(
clock0=>clk,
aclr3=>reset,
ena0=>clken,
dataa_0=>wn_xhdl3,
dataa_2=>wn_xhdl3,
datab_0=>coef_a1,
datab_1=>coef_a2,
datab_2=>coef_a0,
result=>result_xhdl1);
two_mult_add_inst:tmadd
PORTMAP(
clock0=>clk,
dataa_0=>wn_xhdl3,
aclr3=>reset,
datab_0=>coef_b1,
datab_1=>coef_b2,
ena0=>clken,
result=>feedback_fp_xhdl2);
adder_inst:adder
PORTMAP(
dataa=>x,
datab=>feedback_xhdl4,
result=>wn_xhdl3,
cout=>open,
overflow=>open);
ENDtranslated;總體設(shè)計(jì)的構(gòu)造體VHDL源程序如下:
ARCHITECTUREtranslatedOFiir_topIS
SIGNALout_1:BIT_VECTOR(OUTPUT_WIDTH-1DOWNTO0);
SIGNALpzeros:BIT_VECTOR(F_BITS-1DOWNTO0);
SIGNALxn:BIT_VECTOR(DLY_WIDTH-1DOWNTO0);
SIGNALresult_w:BIT_VECTOR(OUTPUT_WIDTH-1DOWNTO0);
SIGNALxn_reg:BIT_VECTOR(DLY_WIDTH-1DOWNTO0);
SIGNALin_2:BIT_VECTOR(DLY_WIDTH-1DOWNTO0);
SIGNALresult_xhdl1:BIT_VECTOR(OUTPUT_WIDTH-1DOWNTO0);COMPONENTiir_1is
PORT(reset:INBIT;
clk:INBIT;
clken:INBIT;
x:INBIT_VECTOR(INPUT_WIDTH-1DOWNTO0);
result:OUTBIT_VECTOR(OUTPUT_WIDTH-1DOWNTO0);
feedback_fp:OUTBIT_VECTOR(OUTPUT_WIDTH-2DOWNTO0);
feedback:OUTBIT_VECTOR(DLY_WIDTH-1DOWNTO0);
wn:OUTBIT_VECTOR(DLY_WIDTH-1DOWNTO0));
ENDCOMPONENT;
BEGIN
result<=result_xhdl1;
pzeros<=“0000”;
xn<=x(INPUT_WIDTH-1)&x(INPUT_WIDTH-1DOWNTO0)&pzeros
(F_BITS-1DOWNTO0);
PROCESS
BEGIN
WAITUNTIL(clk'EVENTANDclk='1');
IF(reset='1')THEN
xn_reg<=(OTHERS=>'0');
result_xhdl1<=(OTHERS=>'0');
in_2<=(OTHERS=>'0');
ELSE
IF(clken='1')THEN
xn_reg<=xn;
result_xhdl1<=result_w;
in_biquad2<=out_1(27DOWNTO10);
ENDIF;
ENDIF;
ENDPROCESS;
base_iir_1:iir_1
GENERICMAP(a0=>a10,
a1=>a11,
a2=>a12,
b1=>b11,
b2=>b12)
PORTMAP(clk=>clk,
clken=>clken,
reset=>reset,
x=>xn_reg,
result=>out_1);
base_iir_2:iir_1
GENERICMAP(a0=>a20,
a1=>a21,
a2=>a22,
b1=>b21,
b2=>b22)
PORTMAP(clk=>clk,
clken=>clken,
reset=>reset,
x=>in_2,
result=>result_w);
ENDtranslated;
2.基于DSPBuilder的IIR濾波器設(shè)計(jì)
(1)在MATLAB/Simulink中進(jìn)行設(shè)計(jì)輸入,即在MATLAB的Simulink環(huán)境中建立一個(gè)mdl模型文件,用圖形方式調(diào)用AlteraDSPBuilder和其他Simulink庫(kù)中的圖形模塊(Block),構(gòu)成系統(tǒng)級(jí)或算法級(jí)設(shè)計(jì)框圖(或稱Simulink設(shè)計(jì)模型)。DSPBuilder模塊庫(kù)如圖8-14所示。圖8-14DSPBuilder模塊庫(kù)
(2)利用Simulink強(qiáng)大的圖形化仿真、分析功能,分析此設(shè)計(jì)模型的正確性,完成模型仿真。
(3)打開SingalCompiler,選定對(duì)應(yīng)器件,把模型轉(zhuǎn)成VHDL文件,并在SignalCompiler中選擇Quartus?Ⅱ進(jìn)行綜合。
(4)適配下載。在QuartusⅡ中打開SignalCompiler建立的Quartus項(xiàng)目文件,選擇具體器件,鎖定管腳,完成適配后下載至FPGADSP開發(fā)板中。
3.基于IP核的IIR濾波器設(shè)計(jì)
Altera以及其他FPGA廠商提供了IIRFilterCore。IIR濾波器核既可以與DSPBuilder銜接開發(fā),也可以在Quartus?Ⅱ中直接使用。下面主要介紹在Quartus?Ⅱ中使用IPCore的方法。在QuatusⅡ中使用IP核設(shè)計(jì)IIR濾波器步驟如下:
(1)配置Quartus?Ⅱ以便使用IIR濾波器核。打開Quartus?Ⅱ集成環(huán)境,新建一個(gè)項(xiàng)目。選擇菜單“Assignments”→“Settings”,打開Quartus?Ⅱ的設(shè)置對(duì)話框,在對(duì)話框的左側(cè)選擇“UserLibraries(用戶庫(kù))”,如圖8-15所示。圖8-15IP核配置
(2)使用IIR濾波器核。首先完成IIR濾波器核的安裝配置,然后按照第2章給出的類似的方法,定制使用IIR濾波器核。具體步驟如下:
①打開MegaWizardPlug-InManager。選擇菜單“Tools”→
“MegaWizardPlug-InManager”,接著打開MegaCore向?qū)?。在窗口的左?cè)選中“IIRFilterv1.3.3”,在右側(cè)選擇實(shí)現(xiàn)時(shí)的HDL類型,并輸入生成IIR濾波器核的名字,如圖8-16所示。圖8-16選擇IIR濾波器核②選擇IIR濾波器結(jié)構(gòu)。Altera的IIR濾波器核對(duì)這三種IIR結(jié)構(gòu)都是支持的。圖8-17是IIR濾波器結(jié)構(gòu)設(shè)置對(duì)話框,在這里我們選擇了級(jí)聯(lián)型(Cascaded)進(jìn)行實(shí)現(xiàn),濾波器階數(shù)設(shè)為4。圖8-17選擇濾波器結(jié)構(gòu)③導(dǎo)入濾波器系數(shù)。這里我們使用MATLAB的FDATool來(lái)完成濾波器系數(shù)的計(jì)算,再通過圖8-18所示的對(duì)話框?qū)?通過文件)濾波系數(shù)。圖8-18導(dǎo)入濾波器系數(shù)
(3)?IIR濾波系數(shù)的量化。IIR系數(shù)必須進(jìn)行量化處理,如圖8-19所示。在這里設(shè)置了輸入信號(hào)的位寬為13位,系數(shù)位寬為10位,采用自動(dòng)方式讓IIRCompiler具體決定系數(shù)的歸一化問題。圖8-19量化IIR濾波系數(shù)
(4)?IIR濾波器的具體實(shí)現(xiàn)。為了提高IIR濾波器的性能,同時(shí)減少IIR濾波器耗費(fèi)的資源,有時(shí)需要對(duì)IIR濾波器實(shí)現(xiàn)時(shí)的某些細(xì)節(jié)進(jìn)行調(diào)整,如圖8-20所示。圖8-20IIR濾波器調(diào)整
(5)設(shè)置仿真參數(shù)。這一步主要設(shè)置仿真模型及測(cè)試信號(hào),如圖8-21所示。圖8-21仿真參數(shù)設(shè)置經(jīng)過前面幾個(gè)步驟,即完成了基于IP核的IIR濾波器的設(shè)計(jì),點(diǎn)擊“Finish”按鈕完成設(shè)計(jì),系統(tǒng)自動(dòng)輸出相關(guān)文件,如圖8-22所示。圖8-22輸出設(shè)計(jì)文件8.3簡(jiǎn)單電子琴電路設(shè)計(jì)
8.3.1系統(tǒng)設(shè)計(jì)要求
(1)設(shè)計(jì)一個(gè)簡(jiǎn)單的八音符(1,2,3,4,5,6,7,8,其中8表示高音1)電子琴,可通過按鍵輸入來(lái)控制音響。
(2)演奏時(shí)可以選擇是手動(dòng)演奏(鍵盤輸入)還是自動(dòng)演奏已存入的樂曲。
(3)能夠自動(dòng)演奏多首樂曲,且每首樂曲可重復(fù)演奏。8.3.2系統(tǒng)設(shè)計(jì)
簡(jiǎn)單電子琴電路的原理方框圖如圖8-23所示,其主要由以下幾個(gè)模塊組成:
(1)基準(zhǔn)頻率產(chǎn)生器。該電路由晶振和反相器CC4069構(gòu)成時(shí)鐘脈沖振蕩器。振蕩器輸出頻率為4MHz,作為系統(tǒng)的基準(zhǔn)頻率。圖8-23簡(jiǎn)單電子琴電路原理方框圖
(2)自動(dòng)演奏及鍵盤編碼模塊。該模塊主要實(shí)現(xiàn)兩大功能:鍵盤輸入編碼及樂曲自動(dòng)演奏。該模塊可對(duì)系統(tǒng)時(shí)鐘4MHz的信號(hào)(CLK)分頻得到4Hz的自動(dòng)演奏地址計(jì)數(shù)頻率,用來(lái)控制每個(gè)音階之間的停頓時(shí)間;地址計(jì)數(shù)器的計(jì)數(shù)范圍為0~63,音樂存儲(chǔ)模塊中音符的最大地址用于完成自動(dòng)演奏樂曲的地址累加,同時(shí)實(shí)現(xiàn)樂曲循環(huán)演奏;記錄所選樂曲的樂譜,根據(jù)樂譜產(chǎn)生發(fā)聲控制輸出INDEX0信號(hào)。
(3)聲音輸出控制模塊。該模塊主要電路為數(shù)控分頻器。CLK輸入系統(tǒng)的基準(zhǔn)頻率為4MHz,TONE1接TONE來(lái)的分頻預(yù)置數(shù),SPKS輸出端接音色產(chǎn)生器,輸出各音符所對(duì)應(yīng)頻率的聲音信號(hào)。
(4)音符產(chǎn)生電路模塊。該模塊的作用是產(chǎn)生各音符的分頻預(yù)置值。根據(jù)各音符名與頻率的關(guān)系(如表8-3所示)以及聲音輸出控制模塊(FENPIN)中數(shù)控分頻器的設(shè)計(jì),分別計(jì)算出高音區(qū)、中音區(qū)、低音區(qū)不同音符的分頻預(yù)置數(shù)。
(5)各類開關(guān)按鍵及琴鍵。初步設(shè)計(jì)出自動(dòng)演奏及鍵盤編碼模塊、各類開關(guān)按鍵及琴鍵等聲音輸出控制模塊、音符產(chǎn)生電路模塊,再設(shè)計(jì)頂層電路。8.3.3模塊設(shè)計(jì)與實(shí)現(xiàn)
1.自動(dòng)演奏模塊(YANZOU)設(shè)計(jì)
樂曲演奏是通過記譜的方式來(lái)記錄一段音樂,它可以極大地減少存儲(chǔ)容量。聲音的頻譜范圍一般在幾十到幾千赫茲,利用程序來(lái)控制FPGA芯片輸出一定頻率的矩形波,配上一些必要的外圍電路就可以發(fā)出相應(yīng)頻率的聲音。樂曲中的每一個(gè)音符對(duì)應(yīng)著一個(gè)確定的頻率,因此,想要發(fā)出不同音符的音調(diào),只要能控制輸出相應(yīng)音符的頻率即可。樂曲都是由一連串音符組成的,因此按照樂曲的樂譜依次輸出這些音符所對(duì)應(yīng)的頻率,就可以通過揚(yáng)聲器連續(xù)播放這些音符所對(duì)應(yīng)的音樂。要準(zhǔn)確地演奏一首樂曲,僅僅讓揚(yáng)聲器發(fā)聲是不夠的,還必須準(zhǔn)確地控制樂曲的節(jié)奏,即每個(gè)音符的持續(xù)時(shí)間,也就是節(jié)拍。音樂存儲(chǔ)模塊的作用是產(chǎn)生音符發(fā)聲控制輸入INDEX。當(dāng)AUTO?=?“0”時(shí),由存儲(chǔ)在此模塊中的8位二進(jìn)制數(shù)作為發(fā)聲控制輸入,可自動(dòng)演奏樂曲。此模塊的VHDL程序包括三個(gè)進(jìn)程:第一個(gè)進(jìn)程為分頻器,實(shí)現(xiàn)4Hz的分頻;第二個(gè)進(jìn)程為地址計(jì)數(shù)器,計(jì)數(shù)范圍為0~63,表示音樂存儲(chǔ)模塊中音符的最大地址數(shù),該進(jìn)程完成自動(dòng)演奏樂曲的地址累加。同時(shí)實(shí)現(xiàn)樂曲循環(huán)演奏;第三個(gè)進(jìn)程主要用來(lái)記錄所選樂曲的樂譜,根據(jù)樂譜產(chǎn)生8位發(fā)聲控制輸出INDEX0信號(hào),當(dāng)AUTO為“0”時(shí),將存儲(chǔ)在此模塊中的8位二進(jìn)制數(shù)作為發(fā)聲控制信號(hào),自動(dòng)演奏樂曲。在記
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2030年中國(guó)碳酸二甲酯行業(yè)運(yùn)行形勢(shì)分析及項(xiàng)目可行性研究報(bào)告
- 2024-2030年中國(guó)硫酸氧釩行業(yè)產(chǎn)量預(yù)測(cè)及發(fā)展可行性研究報(bào)告
- 2024-2030年中國(guó)礦冶磁電設(shè)備行業(yè)發(fā)展?fàn)顩r規(guī)劃分析報(bào)告
- 節(jié)慶活動(dòng)臨時(shí)景觀照明方案
- 三位數(shù)除以一位數(shù)過關(guān)測(cè)驗(yàn)?zāi)M題大全附答案
- 醫(yī)院醫(yī)德考評(píng)公開透明制度
- 2024城市基礎(chǔ)設(shè)施建設(shè)合同協(xié)議
- 2024年修訂版:煤倉(cāng)場(chǎng)地租賃合同
- 2024年度房屋買賣合同房屋交付及價(jià)款支付
- 2024年度文化旅游開發(fā)合同
- 軟巖隧道設(shè)計(jì)
- PEP小學(xué)六年級(jí)英語(yǔ)上冊(cè)選詞填空專題訓(xùn)練
- 部編版道德與法治四年級(jí)上冊(cè)第一單元作業(yè)設(shè)計(jì)
- SB/T 10379-2012速凍調(diào)制食品
- GB/T 9754-2007色漆和清漆不含金屬顏料的色漆漆膜的20°、60°和85°鏡面光澤的測(cè)定
- 甲狀腺癌NCCN指南中文版2021.v2
- GB/T 28726-2012氣體分析氦離子化氣相色譜法
- GB/T 14100-2016燃?xì)廨啓C(jī)驗(yàn)收試驗(yàn)
- 晨鳴紙業(yè)財(cái)務(wù)報(bào)表分析
- 2023年山東省春季高考財(cái)經(jīng)類專業(yè)知識(shí)試題
- 四年級(jí)安全教育教案洪水來(lái)了巧逃生
評(píng)論
0/150
提交評(píng)論