本(běn)文(wén)的(de)文(wén)檔編号(hào):000400000024
需要(yào)看(kàn)对(duì)應(yìng)的(de)視頻,請點(diǎn)擊視頻編号(hào):002400000450
1、本(běn)文(wén)檔講述FPGA産生(shēng)正(zhèng)弦波(bō)數據(jù),通(tòng)过(guò)DA轉(zhuǎn)換,然後(hòu)傳到(dào)示波(bō)器進(jìn)行观察
2、801開(kāi)發(fà)板使用(yòng)
1項目背景
1.1信(xìn)号(hào)發(fà)生(shēng)器
信(xìn)号(hào)發(fà)生(shēng)器又稱信(xìn)号(hào)源或(huò)振蕩器,是(shì)一(yī)種(zhǒng)能(néng)提(tí)供各(gè)種(zhǒng)頻率、波(bō)形和(hé)輸出(chū)電(diàn)平電(diàn)信(xìn)号(hào)的(de)設備,在(zài)测量(liàng)各(gè)種(zhǒng)電(diàn)信(xìn)系(xì)統或(huò)電(diàn)信(xìn)設備的(de)振幅特(tè)性(xìng)、頻率特(tè)性(xìng)、傳輸特(tè)性(xìng)及(jí)其它(tā)電(diàn)參數时(shí),以(yǐ)及(jí)测量(liàng)元(yuán)器件(jiàn)的(de)特(tè)性(xìng)與(yǔ)參數时(shí),用(yòng)作测試的(de)信(xìn)号(hào)源或(huò)激勵源,在(zài)生(shēng)産实踐和(hé)科技領域中(zhōng)有(yǒu)着廣泛的(de)應(yìng)用(yòng)。
直(zhí)接數字(zì)式頻率合成(chéng)器(DDS)是(shì)将先(xiān)進(jìn)的(de)數字(zì)处理理論與(yǔ)方(fāng)法引入(rù)頻率合成(chéng)的(de)一(yī)項新技術(shù),它(tā)把一(yī)系(xì)列數字(zì)量(liàng)形式的(de)信(xìn)号(hào)通(tòng)过(guò)數/模轉(zhuǎn)換器轉(zhuǎn)換成(chéng)模拟量(liàng)形式的(de)信(xìn)号(hào)。
图(tú)483
上(shàng)图(tú)是(shì)一(yī)个(gè)典型的(de)DDS工程。DDS一(yī)般可(kě)分(fēn)为(wèi)相位累加器、信(xìn)号(hào)轉(zhuǎn)換器和(hé)DAC。
DDS的(de)輸入(rù)是(shì)頻率控制字(zì),它(tā)用(yòng)来(lái)控制相位累加器每次(cì)增加的(de)相位值,相當于(yú)一(yī)个(gè)步進(jìn)值。
相位累加器:每来(lái)一(yī)个(gè)时(shí)鐘(zhōng)脈沖,就(jiù)会(huì)在(zài)原来(lái)相位值的(de)基礎上(shàng),加上(shàng)頻率控制字(zì)的(de)值,得到(dào)最(zuì)新的(de)相位值,将相位值将輸出(chū)給(gěi)信(xìn)号(hào)轉(zhuǎn)換器。
信(xìn)号(hào)轉(zhuǎn)換器:一(yī)般轉(zhuǎn)換器內(nèi)部(bù)有(yǒu)一(yī)片(piàn)ROM,事(shì)先(xiān)保存了(le)要(yào)産生(shēng)波(bō)形的(de)幅度(dù)值。根(gēn)據(jù)輸入(rù)的(de)的(de)相位值,就(jiù)能(néng)輸出(chū)該相位值所(suǒ)对(duì)應(yìng)的(de)信(xìn)号(hào)幅度(dù)值。例如(rú)将一(yī)个(gè)完整周期(qī)的(de)正(zhèng)弦波(bō)等距離分(fēn)成(chéng)128份,并保存到(dào)轉(zhuǎn)換器的(de)ROM當中(zhōng)。當相位值为(wèi)0时(shí),就(jiù)輸出(chū)相位为(wèi)0所(suǒ)應(yìng)对(duì)的(de)幅度(dù)值;當相位为(wèi)100时(shí),就(jiù)輸出(chū)相位为(wèi)100所(suǒ)对(duì)應(yìng)的(de)幅度(dù)值。
具體(tǐ)的(de)工作过(guò)程是(shì)由(yóu)N位相位累加器、N位加法器和(hé)N位累加寄存器組成(chéng)。每来(lái)一(yī)个(gè)时(shí)鐘(zhōng)脈沖,N位加法器将頻率控制字(zì)K與(yǔ)N位累加寄存器輸出(chū)的(de)累加相位數據(jù)相加,并把相加後(hòu)的(de)結果(guǒ)送至(zhì)累加寄存器的(de)輸入(rù)端。累加寄存器一(yī)方(fāng)面(miàn)将上(shàng)一(yī)时(shí)鐘(zhōng)周期(qī)作用(yòng)後(hòu)所(suǒ)産生(shēng)的(de)新的(de)相位數據(jù)反(fǎn)饋到(dào)加法器的(de)輸入(rù)端,使加法器在(zài)下(xià)一(yī)时(shí)鐘(zhōng)的(de)作用(yòng)下(xià)繼續與(yǔ)頻率控制字(zì)K相加;另(lìng)一(yī)方(fāng)面(miàn)将这(zhè)个(gè)值作为(wèi)取(qǔ)樣(yàng)地(dì)址送入(rù)幅度(dù)/相位轉(zhuǎn)換電(diàn)路(lù),幅度(dù)/相位轉(zhuǎn)換電(diàn)路(lù)根(gēn)據(jù)这(zhè)个(gè)地(dì)址輸出(chū)相應(yìng)的(de)波(bō)形數據(jù)。最(zuì)後(hòu)經(jīng)D/A轉(zhuǎn)換器和(hé) LPF将波(bō)形數據(jù)轉(zhuǎn)換成(chéng)所(suǒ)需要(yào)的(de)模拟波(bō)形。
1.2DA轉(zhuǎn)換
明(míng)德揚教学板板载双(shuāng)通(tòng)道(dào)、125MHz轉(zhuǎn)換速率、8bi的(de)高(gāo)速DA芯片(piàn),滿足常用(yòng)信(xìn)号(hào)發(fà)生(shēng)器、濾波(bō)信(xìn)号(hào)輸出(chū)等需求。实際位置如(rú)下(xià)所(suǒ)示:
图(tú)484
芯片(piàn)型号(hào)是(shì)AD9709,AD9709是(shì)一(yī)款双(shuāng)端口(kǒu)、高(gāo)速、双(shuāng)通(tòng)道(dào)、8位CMOS DAC,其中(zhōng)集成(chéng)两(liǎng)个(gè)高(gāo)品質(zhì)8位TxDAC+®內(nèi)核、一(yī)个(gè)基準電(diàn)壓源和(hé)數字(zì)接口(kǒu)電(diàn)路(lù),采用(yòng)48引脚小型LQFP封(fēng)裝(zhuāng)。它(tā)提(tí)供出(chū)色(sè)的(de)交流和(hé)直(zhí)流性(xìng)能(néng),同(tóng)时(shí)支持(chí)最(zuì)高(gāo)125 MSPS的(de)更(gèng)新速率。
图(tú)485
图(tú)486
與(yǔ)FPGA相連(lián)的(de)信(xìn)号(hào)有(yǒu):DA_CLKA、DA_CLKB、DAC_DB7~0、DAC_DA7~0,DAC_MODE、DAC_SLEEP、DA_WRA和(hé)DA_WRB。
|
AD9709管(guǎn)脚 |
原理图(tú)信(xìn)号(hào) |
FPGA管(guǎn)脚 |
作用(yòng) |
|
MODE |
DAC_MODE |
Y4 |
AD9709的(de)工作模式。當为(wèi)高(gāo)電(diàn)平时(shí),表(biǎo)示双(shuāng)通(tòng)道(dào)模式,此(cǐ)时(shí)通(tòng)过(guò)DA、DB两(liǎng)組信(xìn)号(hào)分(fēn)别独立控制两(liǎng)个(gè)通(tòng)道(dào)。 當为(wèi)低電(diàn)平时(shí),表(biǎo)示使用(yòng)交織模式,此(cǐ)时(shí)僅使用(yòng)一(yī)組信(xìn)号(hào)来(lái)控制两(liǎng)个(gè)通(tòng)道(dào)。 本(běn)案(àn)例使用(yòng)双(shuāng)通(tòng)道(dào)模式,也(yě)就(jiù)是(shì)固定(dìng)为(wèi)高(gāo)電(diàn)平。 |
|
SLEEP |
DAC_SLEEP |
H2 |
睡眠模式。 當高(gāo)電(diàn)平时(shí),AD9709進(jìn)入(rù)睡眠模式,此(cǐ)时(shí)不(bù)工作。 當低電(diàn)平时(shí),AD9709是(shì)正(zhèng)常工作模式。 本(běn)案(àn)例使用(yòng)正(zhèng)常工作模式,固定(dìng)为(wèi)低電(diàn)平。 |
|
CLK1 |
DA_CLKA |
R2 |
控制通(tòng)道(dào)A的(de)工作时(shí)鐘(zhōng)。 |
|
WRT1 |
DA_WRA |
U1 |
通(tòng)道(dào)A的(de)写使能(néng)信(xìn)号(hào) |
|
DB7P1 |
DAC_DA7 |
AA1 |
通(tòng)道(dào)A的(de)写數據(jù)信(xìn)号(hào),用(yòng)于(yú)控制通(tòng)道(dào)A的(de)輸出(chū)電(diàn)壓。 |
|
DB6P1 |
DAC_DA6 |
Y2 |
|
|
DB5P1 |
DAC_DA5 |
Y1 |
|
|
DB4P1 |
DAC_DA4 |
W2 |
|
|
DB3P1 |
DAC_DA3 |
W1 |
|
|
DB2P1 |
DAC_DA2 |
V2 |
|
|
DB1P1 |
DAC_DA1 |
V1 |
|
|
DB0P1 |
DAC_DA0 |
U2 |
|
|
CLK2 |
DA_CLKB |
R1 |
控制通(tòng)道(dào)B的(de)工作时(shí)鐘(zhōng) |
|
WRT2 |
DA_WRB |
P2 |
通(tòng)道(dào)B的(de)写使能(néng)信(xìn)号(hào) |
|
DB7P2 |
DAC_DB7 |
P1 |
通(tòng)道(dào)B的(de)写數據(jù)信(xìn)号(hào),用(yòng)于(yú)控制通(tòng)道(dào)B的(de)輸出(chū)電(diàn)壓。 |
|
DB6P2 |
DAC_DB6 |
N2 |
|
|
DB5P2 |
DAC_DB5 |
N1 |
|
|
DB4P2 |
DAC_DB4 |
M2 |
|
|
DB3P2 |
DAC_DB3 |
M1 |
|
|
DB2P2 |
DAC_DB2 |
J1 |
|
|
DB1P2 |
DAC_DB1 |
J2 |
|
|
DB0P2 |
DAC_DB0 |
H1 |
1.3AD9709的(de)时(shí)序
AD9709的(de)控制时(shí)序如(rú)下(xià)图(tú)。
图(tú)487
在(zài)双(shuāng)通(tòng)道(dào)模式中(zhōng),通(tòng)道(dào)A和(hé)通(tòng)道(dào)B就(jiù)如(rú)两(liǎng)个(gè)独立的(de)DA芯片(piàn)。其中(zhōng)DA_CLKA、DAC_DA7~0、DAC_WR_A用(yòng)于(yú)控制通(tòng)道(dào)A,DA_CLKB、DA_DB7~0、DA_WRB用(yòng)于(yú)控制通(tòng)道(dào)B。
以(yǐ)控制通(tòng)道(dào)A为(wèi)例,时(shí)序图(tú)要(yào)求,要(yào)先(xiān)将數據(jù)輸出(chū)到(dào)DAC_DA7~0,然後(hòu)經(jīng)过(guò)ts时(shí)間(jiān)後(hòu),将DAC_WRA和(hé)DA_CLKA變(biàn)高(gāo),此(cǐ)时(shí)DAC就(jiù)将數據(jù)鎖住,經(jīng)过(guò)一(yī)段(duàn)时(shí)間(jiān)後(hòu),就(jiù)会(huì)輸出(chū)數據(jù)所(suǒ)对(duì)應(yìng)的(de)電(diàn)流,經(jīng)过(guò)電(diàn)路(lù)轉(zhuǎn)換後(hòu)就(jiù)變(biàn)成(chéng)对(duì)應(yìng)電(diàn)壓了(le)。
时(shí)序图(tú)中(zhōng)要(yào)注意(yì)幾(jǐ)點(diǎn)(數據(jù)手(shǒu)册有(yǒu)詳细(xì)说(shuō)明(míng))
1. DA_CLKA并且超前(qián)于(yú)或(huò)者(zhě)同(tóng)时(shí)與(yǔ)DA_WRA由(yóu)0變(biàn)1。
2.图(tú)中(zhōng)tS(DAC_WRA上(shàng)升(shēng)沿前(qián)數據(jù)保持(chí)不(bù)變(biàn)的(de)时(shí)間(jiān))、tH(DAC_WRA上(shàng)升(shēng)沿後(hòu)數據(jù)保值不(bù)變(biàn)的(de)时(shí)間(jiān))、tLPW(DAC_WRA的(de)高(gāo)電(diàn)平时(shí)間(jiān))、tCPW(DAC_CLKA的(de)高(gāo)電(diàn)平时(shí)間(jiān))等參數,查詢數據(jù)手(shǒu)册,可(kě)以(yǐ)得到(dào)如(rú)下(xià)參數表(biǎo)。從表(biǎo)中(zhōng)可(kě)以(yǐ)看(kàn)到(dào)tS的(de)时(shí)間(jiān)至(zhì)少(shǎo)是(shì)2ns;tH时(shí)間(jiān)至(zhì)少(shǎo)是(shì)1.5ns;tLPW、tCPW时(shí)間(jiān)至(zhì)少(shǎo)是(shì)3.5ns。图(tú)中(zhōng)規定(dìng)了(le)至(zhì)少(shǎo),只(zhī)要(yào)大于(yú)要(yào)求都是(shì)可(kě)以(yǐ)的(de)。
图(tú)488
通(tòng)道(dào)B的(de)时(shí)序要(yào)求和(hé)通(tòng)道(dào)A是(shì)相同(tóng)的(de),僅是(shì)控制信(xìn)号(hào)不(bù)同(tóng)。
明(míng)德揚教学板的(de)AD9709的(de)两(liǎng)个(gè)通(tòng)道(dào),均支持(chí)0.48~2.2V的(de)電(diàn)壓輸出(chū),这(zhè)个(gè)輸出(chū)電(diàn)壓與(yǔ)輸入(rù)數據(jù)的(de)關(guān)系(xì),可(kě)用(yòng)下(xià)面(miàn)的(de)公式表(biǎo)示:
通(tòng)道(dào)A的(de)輸出(chū)電(diàn)壓= -1.72 * (DAC_DA /255) + 2.2 V
通(tòng)道(dào)B的(de)輸出(chū)電(diàn)壓= -1.72 * (DAC_DB/255) + 2.2 V
|
DAC_DA/B |
輸出(chū)電(diàn)壓V |
DAC_DA/B |
輸出(chū)電(diàn)壓V |
|
0 |
2.2 |
64 |
|
|
8 |
|
128 |
|
|
16 |
|
192 |
|
|
32 |
|
255 |
0.48 |
由(yóu)公式可(kě)見(jiàn),輸出(chū)電(diàn)壓與(yǔ)DAC_DA/B的(de)值是(shì)成(chéng)線(xiàn)性(xìng)反(fǎn)比例關(guān)系(xì),最(zuì)低電(diàn)壓为(wèi)0.48V,最(zuì)高(gāo)为(wèi)2.2V。需要(yào)指出(chū)的(de)是(shì),由(yóu)于(yú)電(diàn)路(lù)原理图(tú)的(de)原因(yīn)才導致(zhì)電(diàn)壓在(zài)此(cǐ)範圍,不(bù)同(tóng)電(diàn)路(lù)实現(xiàn)是(shì)不(bù)相同(tóng)的(de)。
2設計(jì)目标(biāo)
本(běn)次(cì)案(àn)例将使用(yòng)到(dào)采樣(yàng)率大于(yú)100M的(de)示波(bō)器。将示波(bō)器和(hé)教学板上(shàng)的(de)通(tòng)道(dào)1連(lián)接,如(rú)下(xià)图(tú)所(suǒ)示。
图(tú)489
本(běn)案(àn)例是(shì)要(yào)讓DA輸出(chū)不(bù)同(tóng)頻率的(de)正(zhèng)弦波(bō)。共(gòng)輸出(chū)方(fāng)式如(rú)下(xià):
1.連(lián)續輸出(chū)2个(gè)周期(qī)为(wèi)6.25MHz的(de)正(zhèng)弦波(bō),其中(zhōng)每个(gè)正(zhèng)弦波(bō)輸出(chū)16个(gè)采樣(yàng)點(diǎn);
2.連(lián)續輸出(chū)2个(gè)周期(qī)为(wèi)3.125MHz的(de)正(zhèng)弦波(bō),其中(zhōng)每个(gè)正(zhèng)弦波(bō)輸出(chū)32个(gè)采樣(yàng)點(diǎn);
3.連(lián)續輸出(chū)2个(gè)周期(qī)为(wèi)1.5625MHz的(de)正(zhèng)弦波(bō),其中(zhōng)每个(gè)正(zhèng)弦波(bō)輸出(chū)128个(gè)采樣(yàng)點(diǎn);
4.連(lián)續輸出(chū)2个(gè)周期(qī)为(wèi)781250Hz的(de)正(zhèng)弦波(bō),其中(zhōng)每个(gè)正(zhèng)弦波(bō)輸出(chū)128个(gè)采樣(yàng)點(diǎn);
5.連(lián)續輸出(chū)2个(gè)周期(qī)为(wèi)390625Hz的(de)正(zhèng)弦波(bō),其中(zhōng)每个(gè)正(zhèng)弦波(bō)輸出(chū)128个(gè)采樣(yàng)點(diǎn);
6.連(lián)續輸出(chū)2个(gè)周期(qī)为(wèi)195312.5Hz的(de)正(zhèng)弦波(bō),其中(zhōng)每个(gè)正(zhèng)弦波(bō)輸出(chū)128个(gè)采樣(yàng)點(diǎn)。
重(zhòng)複以(yǐ)上(shàng)的(de)1~7的(de)步驟。
正(zhèng)弦波(bō)的(de)最(zuì)高(gāo)電(diàn)壓是(shì)2.2V,最(zuì)低電(diàn)壓是(shì)0.48V。
示波(bō)器的(de)顯示結果(guǒ)如(rú)下(xià)图(tú)
图(tú)490
上(shàng)图(tú)是(shì)整體(tǐ)效果(guǒ)图(tú),每種(zhǒng)頻率的(de)正(zhèng)弦波(bō)連(lián)續出(chū)現(xiàn)2次(cì),并且正(zhèng)弦波(bō)的(de)周期(qī)越来(lái)越大。
下(xià)图(tú)是(shì)捕捉到(dào)的(de),頻率为(wèi)6.25MHz的(de)正(zhèng)弦波(bō),最(zuì)高(gāo)電(diàn)壓是(shì)2.2V,最(zuì)低電(diàn)壓是(shì)0.48V。
下(xià)图(tú)是(shì)捕捉到(dào)的(de),頻率为(wèi)3.125MHz的(de)正(zhèng)弦波(bō),最(zuì)高(gāo)電(diàn)壓是(shì)2.2V,最(zuì)低電(diàn)壓是(shì)0.48V。
下(xià)图(tú)是(shì)捕捉到(dào)的(de),頻率为(wèi)1.5625MHz的(de)正(zhèng)弦波(bō),最(zuì)高(gāo)電(diàn)壓是(shì)2.2V,最(zuì)低電(diàn)壓是(shì)0.48V。
下(xià)图(tú)是(shì)捕捉到(dào)的(de),頻率为(wèi)390625Hz的(de)正(zhèng)弦波(bō),最(zuì)高(gāo)電(diàn)壓是(shì)2.2V,最(zuì)低電(diàn)壓是(shì)0.48V。
下(xià)图(tú)是(shì)捕捉到(dào)的(de),頻率为(wèi)195312.5Hz的(de)正(zhèng)弦波(bō),最(zuì)高(gāo)電(diàn)壓是(shì)2.2V,最(zuì)低電(diàn)壓是(shì)0.48V。
3設計(jì)实現(xiàn)
3.1頂层接口(kǒu)
新建目录(lù):D:mdy_bookdds_da。在(zài)該目录(lù)中(zhōng),新建一(yī)个(gè)名为(wèi)dds_da.v的(de)文(wén)件(jiàn),并用(yòng)GVIM打(dǎ)開(kāi),開(kāi)始編写代(dài)碼。
我(wǒ)们(men)要(yào)实現(xiàn)的(de)功能(néng),概括起来(lái)就(jiù)是(shì)FPGA産生(shēng)控制AD9709,讓其中(zhōng)的(de)通(tòng)道(dào)A産生(shēng)正(zhèng)弦波(bō)所(suǒ)对(duì)應(yìng)的(de)電(diàn)壓。为(wèi)了(le)控制AD9709的(de)通(tòng)道(dào)A,就(jiù)需要(yào)控制AD9709的(de)MODE、SLEEP、CLK1、WRT1、DB7~0P1管(guǎn)脚。根(gēn)據(jù)設計(jì)目标(biāo)的(de)要(yào)求,整个(gè)工程需要(yào)以(yǐ)下(xià)信(xìn)号(hào):
1.使用(yòng)clk連(lián)接到(dào)晶振,表(biǎo)示50M时(shí)鐘(zhōng)的(de)輸入(rù)。
2.使用(yòng)rst_n連(lián)接到(dào)按鍵,表(biǎo)示複位信(xìn)号(hào)。
3.使用(yòng)dac_mode信(xìn)号(hào)連(lián)接到(dào)AD9709的(de)MODE管(guǎn)脚,用(yòng)来(lái)控制其工作模式。
4.使用(yòng)dac_sleep信(xìn)号(hào)連(lián)接到(dào)AD9709的(de)SLEEP管(guǎn)脚,用(yòng)来(lái)控制其睡眠模式。
5.使用(yòng)dac_clka信(xìn)号(hào)連(lián)接到(dào)AD9709的(de)CLK1管(guǎn)脚,用(yòng)来(lái)控制通(tòng)道(dào)A的(de)时(shí)鐘(zhōng)。
6.使用(yòng)dac_wra信(xìn)号(hào)連(lián)接到(dào)AD9709的(de)WRT1管(guǎn)脚,用(yòng)来(lái)控制通(tòng)道(dào)A的(de)写使能(néng)。
7.使用(yòng)8位信(xìn)号(hào)dac_da連(lián)接到(dào)AD9709的(de)DB7~0P1管(guǎn)脚,用(yòng)来(lái)控制通(tòng)道(dào)A的(de)写數據(jù)。
綜上(shàng)所(suǒ)述,我(wǒ)们(men)这(zhè)个(gè)工程需要(yào)7个(gè)信(xìn)号(hào),时(shí)鐘(zhōng)clk,複位rst_n,dac_mode、dac_sleep、dac_clka、dac_wra和(hé)dac_da,其中(zhōng)dac_da是(shì)8位信(xìn)号(hào),其他(tā)都是(shì)1位信(xìn)号(hào)。下(xià)面(miàn)表(biǎo)格表(biǎo)示了(le)硬(yìng)件(jiàn)電(diàn)路(lù)图(tú)的(de)連(lián)接關(guān)系(xì)。
|
器件(jiàn) |
AD9709管(guǎn)脚 |
原理图(tú)信(xìn)号(hào) |
FPGA管(guǎn)脚 |
FPGA工程信(xìn)号(hào) |
|
U8 |
MODE |
DAC_MODE |
Y4 |
dac_mode |
|
SLEEP |
DAC_SLEEP |
H2 |
dac_sleep |
|
|
CLK1 |
DA_CLKA |
R2 |
dac_clka |
|
|
WRT1 |
DA_WRA |
U1 |
dac_wra |
|
|
DB7P1 |
DAC_DA7 |
AA1 |
dac_da[7] |
|
|
DB6P1 |
DAC_DA6 |
Y2 |
dac_da[6] |
|
|
DB5P1 |
DAC_DA5 |
Y1 |
dac_da[5] |
|
|
DB4P1 |
DAC_DA4 |
W2 |
dac_da[4] |
|
|
DB3P1 |
DAC_DA3 |
W1 |
dac_da[3] |
|
|
DB2P1 |
DAC_DA2 |
V2 |
dac_da[2] |
|
|
DB1P1 |
DAC_DA1 |
V1 |
dac_da[1] |
|
|
DB0P1 |
DAC_DA0 |
U2 |
dac_da[0] |
|
|
CLK2 |
DA_CLKB |
R1 |
|
|
|
WRT2 |
DA_WRB |
P2 |
|
|
|
DB7P2 |
DAC_DB7 |
P1 |
|
|
|
DB6P2 |
DAC_DB6 |
N2 |
|
|
|
DB5P2 |
DAC_DB5 |
N1 |
|
|
|
DB4P2 |
DAC_DB4 |
M2 |
|
|
|
DB3P2 |
DAC_DB3 |
M1 |
|
|
|
DB2P2 |
DAC_DB2 |
J1 |
|
|
|
DB1P2 |
DAC_DB1 |
J2 |
|
|
|
DB0P2 |
DAC_DB0 |
H1 |
|
|
|
X1 |
|
SYS_CLK |
G1 |
clk |
|
K1 |
|
SYS_RST |
AB12 |
rst_n |
将module的(de)名稱定(dìng)義为(wèi)dds_da,代(dài)碼如(rú)下(xià):
|
1 2 3 4 5 6 7 8 9 |
moduledds_da( clk , rst_n , dac_mode , dac_clka , dac_da , dac_wra , dac_sleep ); |
其中(zhōng)clk、rst_n是(shì)1位的(de)輸入(rù)信(xìn)号(hào),dac_da是(shì)8位的(de)輸出(chū)信(xìn)号(hào),dac_mode,dac_clka,dac_wra,dac_sleep是(shì)一(yī)位輸出(chū)信(xìn)号(hào)。
|
1 2 3 4 5 6 7 |
input clk ; input rst_n ; output dac_mode ; output dac_clka ; output [ 8-1:0] dac_da ; output dac_wra ; output dac_sleep ; |
3.2信(xìn)号(hào)設計(jì)
我(wǒ)们(men)先(xiān)分(fēn)析下(xià)DAC的(de)輸出(chū)。以(yǐ)頻率为(wèi)195312.5Hz的(de)正(zhèng)弦波(bō)为(wèi)例,如(rú)下(xià)图(tú)。頻率为(wèi)195312.5Hz,也(yě)就(jiù)是(shì)一(yī)个(gè)正(zhèng)弦波(bō)的(de)周期(qī)是(shì)5120ns。案(àn)例要(yào)求一(yī)个(gè)周期(qī)要(yào)輸出(chū)128个(gè)點(diǎn),那(nà)就(jiù)是(shì)每隔5120/128=40ns要(yào)輸出(chū)一(yī)个(gè)點(diǎn)。考慮到(dào)工程輸入(rù)的(de)时(shí)鐘(zhōng)是(shì)50MHz,周期(qī)是(shì)20ns,那(nà)就(jiù)意(yì)味着每隔2个(gè)时(shí)鐘(zhōng)就(jiù)要(yào)輸出(chū)一(yī)个(gè)點(diǎn)。
綜上(shàng)所(suǒ)述,産生(shēng)頻率頻率为(wèi)195312.5Hz的(de)正(zhèng)弦波(bō),就(jiù)是(shì)每隔2个(gè)时(shí)鐘(zhōng)輸出(chū)一(yī)个(gè)電(diàn)壓值,一(yī)共(gòng)輸出(chū)128个(gè)點(diǎn),組成(chéng)一(yī)个(gè)正(zhèng)弦波(bō)。我(wǒ)们(men)要(yào)連(lián)續産生(shēng)2个(gè)正(zhèng)弦波(bō)。
現(xiàn)在(zài)進(jìn)一(yī)步分(fēn)析下(xià),这(zhè)128个(gè)點(diǎn)所(suǒ)对(duì)應(yìng)電(diàn)壓值是(shì)多(duō)少(shǎo)?由(yóu)于(yú)教学板的(de)輸出(chū)電(diàn)壓在(zài)0.48~2.2V之間(jiān),最(zuì)低值是(shì)0.48V,最(zuì)高(gāo)值是(shì)2.2V。
先(xiān)将一(yī)个(gè)标(biāo)準的(de)正(zhèng)弦波(bō)向(xiàng)上(shàng)平稳1个(gè)單位,使得範圍變(biàn)成(chéng)0~2。然後(hòu)等間(jiān)隔取(qǔ)128个(gè)點(diǎn)(間(jiān)隔为(wèi)2*pi/128),獲取(qǔ)其幅度(dù)值。我(wǒ)们(men)再用(yòng)8位信(xìn)号(hào)sin_data表(biǎo)示这(zhè)些幅度(dù)值,其表(biǎo)示方(fāng)式为(wèi):
sin_data = (sin(2*pi/128) + 1) * (255/2),i为(wèi)0~127 (公式1)
|
采樣(yàng)點(diǎn)i |
sin_data (16進(jìn)制) |
采樣(yàng)點(diǎn)i |
sin_data (16進(jìn)制) |
采樣(yàng)點(diǎn)i |
sin_data (16進(jìn)制) |
采樣(yàng)點(diǎn)i |
sin_data (16進(jìn)制) |
|
0 |
7F |
32 |
FE |
64 |
7D |
96 |
1 |
|
1 |
85 |
33 |
FE |
65 |
77 |
97 |
1 |
|
2 |
8C |
34 |
FE |
66 |
70 |
98 |
2 |
|
3 |
92 |
35 |
FD |
67 |
6A |
99 |
3 |
|
4 |
98 |
36 |
FC |
68 |
64 |
100 |
4 |
|
5 |
9E |
37 |
FA |
69 |
5E |
101 |
6 |
|
6 |
A4 |
38 |
F8 |
70 |
58 |
102 |
7 |
|
7 |
AA |
39 |
F6 |
71 |
52 |
103 |
A |
|
8 |
B0 |
40 |
F4 |
72 |
4C |
104 |
C |
|
9 |
B6 |
41 |
F1 |
73 |
46 |
105 |
F |
|
10 |
BC |
42 |
EF |
74 |
41 |
106 |
12 |
|
11 |
C1 |
43 |
EB |
75 |
3C |
107 |
15 |
|
12 |
C6 |
44 |
E8 |
76 |
36 |
108 |
19 |
|
13 |
CB |
45 |
E4 |
77 |
31 |
109 |
1D |
|
14 |
D0 |
46 |
E0 |
78 |
2C |
110 |
21 |
|
15 |
D5 |
47 |
DC |
79 |
28 |
111 |
25 |
|
16 |
DA |
48 |
D8 |
80 |
23 |
112 |
2A |
|
17 |
DE |
49 |
D3 |
81 |
1F |
113 |
2E |
|
18 |
E2 |
50 |
CE |
82 |
1B |
114 |
33 |
|
19 |
E6 |
51 |
C9 |
83 |
17 |
115 |
38 |
|
20 |
EA |
52 |
C4 |
84 |
14 |
116 |
3E |
|
21 |
ED |
53 |
BE |
85 |
11 |
117 |
43 |
|
22 |
F0 |
54 |
B9 |
86 |
E |
118 |
49 |
|
23 |
F3 |
55 |
B3 |
87 |
B |
119 |
4E |
|
24 |
F5 |
56 |
AD |
88 |
9 |
120 |
54 |
|
25 |
F7 |
57 |
A7 |
89 |
7 |
121 |
5A |
|
26 |
F9 |
58 |
A1 |
90 |
5 |
122 |
60 |
|
27 |
FB |
59 |
9B |
91 |
3 |
123 |
67 |
|
28 |
FC |
60 |
95 |
92 |
2 |
124 |
6D |
|
29 |
FD |
61 |
8F |
93 |
1 |
125 |
73 |
|
30 |
FE |
62 |
89 |
94 |
1 |
126 |
79 |
|
31 |
FE |
63 |
82 |
95 |
1 |
127 |
7F |
通(tòng)道(dào)A的(de)輸出(chū)電(diàn)壓 = -1.72 * (DAC /255) + 2.2 V
公式中(zhōng)可(kě)以(yǐ)看(kàn)到(dào),通(tòng)道(dào)A的(de)輸出(chū)電(diàn)壓是(shì)與(yǔ)DAC_DA成(chéng)線(xiàn)性(xìng)反(fǎn)比例關(guān)系(xì)。为(wèi)了(le)讓通(tòng)道(dào)A的(de)電(diàn)壓正(zhèng)确地(dì)展(zhǎn)現(xiàn)出(chū)正(zhèng)弦波(bō),我(wǒ)们(men)還(huán)需要(yào)做如(rú)下(xià)調整。
DAC_DA = 255 - sin_data
上(shàng)面(miàn)的(de)DAC_DA就(jiù)是(shì)最(zuì)終(zhōng)輸出(chū)給(gěi)DA芯片(piàn)的(de)數據(jù)值,即dac_da信(xìn)号(hào)。
綜上(shàng)所(suǒ)述,産生(shēng)頻率为(wèi)195312.5Hz的(de)正(zhèng)弦波(bō),就(jiù)是(shì)每隔2个(gè)时(shí)鐘(zhōng)輸出(chū)一(yī)个(gè)電(diàn)壓值dac_da。先(xiān)按表(biǎo)XX每隔1个(gè)選出(chū)sin_data,再用(yòng)(255-sin_data)得到(dào)dac_da。一(yī)共(gòng)輸出(chū)128个(gè)點(diǎn),組成(chéng)一(yī)个(gè)正(zhèng)弦波(bō),并且連(lián)續輸出(chū)2个(gè)正(zhèng)弦波(bō)。
以(yǐ)相同(tóng)的(de)分(fēn)析方(fāng)法,分(fēn)析頻率为(wèi)6.25MHz的(de)正(zhèng)弦波(bō)。
頻率为(wèi)6.25MHz,也(yě)就(jiù)是(shì)一(yī)个(gè)正(zhèng)弦波(bō)的(de)周期(qī)是(shì)160ns。案(àn)例要(yào)求一(yī)个(gè)周期(qī)要(yào)輸出(chū)8个(gè)點(diǎn),那(nà)就(jiù)是(shì)每隔160/8=20ns要(yào)輸出(chū)一(yī)个(gè)點(diǎn)。考慮到(dào)工程輸入(rù)的(de)时(shí)鐘(zhōng)是(shì)50MHz,周期(qī)是(shì)20ns,那(nà)就(jiù)意(yì)味着每隔1个(gè)时(shí)鐘(zhōng)就(jiù)要(yào)輸出(chū)一(yī)个(gè)點(diǎn)。
先(xiān)将一(yī)个(gè)标(biāo)準的(de)正(zhèng)弦波(bō)向(xiàng)上(shàng)平稳1个(gè)單位,使得範圍變(biàn)成(chéng)0~2。然後(hòu)等間(jiān)隔取(qǔ)8个(gè)點(diǎn)(間(jiān)隔为(wèi)2*pi/8),獲取(qǔ)其幅度(dù)值。我(wǒ)们(men)再用(yòng)8位信(xìn)号(hào)sin_data表(biǎo)示这(zhè)些幅度(dù)值,其表(biǎo)示方(fāng)式为(wèi):
sin_data = (sin(2*pi/8) + 1) * (255/2),i为(wèi)0~7
= (sin(2*pi*16/128) + 1) * (255/2),i为(wèi)0~7 (公式2)
对(duì)比公式1和(hé)公式2,發(fà)現(xiàn)同(tóng)樣(yàng)可(kě)以(yǐ)由(yóu)表(biǎo)XX得到(dào)相應(yìng)的(de)sin_data,只(zhī)是(shì)此(cǐ)时(shí)間(jiān)隔16个(gè)點(diǎn)取(qǔ)一(yī)个(gè)值,一(yī)共(gòng)取(qǔ)8个(gè)。
綜上(shàng)所(suǒ)述,産生(shēng)頻率为(wèi)6.25MHz的(de)正(zhèng)弦波(bō),就(jiù)是(shì)每隔1个(gè)时(shí)鐘(zhōng)輸出(chū)一(yī)个(gè)電(diàn)壓值dac_da,按表(biǎo)XX中(zhōng)每隔16个(gè)點(diǎn)輸出(chū)一(yī)个(gè)值,再用(yòng)(255-sin_data)得到(dào)dac_da。一(yī)共(gòng)輸出(chū)8个(gè)點(diǎn),組成(chéng)一(yī)个(gè)正(zhèng)弦波(bō),并且連(lián)續産生(shēng)2个(gè)正(zhèng)弦波(bō)。
按同(tóng)樣(yàng)的(de)分(fēn)析方(fāng)法,分(fēn)析其他(tā)頻率。最(zuì)終(zhōng)總(zǒng)結如(rú)下(xià):
1.連(lián)續輸出(chū)2个(gè)周期(qī)为(wèi)6.25MHz的(de)正(zhèng)弦波(bō),其中(zhōng)每个(gè)正(zhèng)弦波(bō)輸出(chū)8个(gè)采樣(yàng)點(diǎn)。
等價于(yú):每隔1个(gè)时(shí)鐘(zhōng)輸出(chū)一(yī)个(gè)電(diàn)壓值dac_da,一(yī)共(gòng)輸出(chū)8个(gè)點(diǎn),組成(chéng)一(yī)个(gè)正(zhèng)弦波(bō),連(lián)續産生(shēng)2个(gè)正(zhèng)弦波(bō)。
dac_da的(de)産生(shēng)方(fāng)式:表(biǎo)XXX每隔16个(gè)選出(chū)得到(dào)sin_data,通(tòng)过(guò)(255-sin_data)得到(dào)dac_da。
2.連(lián)續輸出(chū)2个(gè)周期(qī)为(wèi)3.125MHz的(de)正(zhèng)弦波(bō),其中(zhōng)每个(gè)正(zhèng)弦波(bō)輸出(chū)16个(gè)采樣(yàng)點(diǎn)。
等價于(yú):每隔1个(gè)时(shí)鐘(zhōng)輸出(chū)一(yī)个(gè)電(diàn)壓值dac_da,一(yī)共(gòng)輸出(chū)16个(gè),組成(chéng)一(yī)个(gè)正(zhèng)弦波(bō),連(lián)續産生(shēng)2个(gè)正(zhèng)弦波(bō)。
dac_da的(de)産生(shēng)方(fāng)式:表(biǎo)XXX每隔8个(gè)選出(chū)得到(dào)sin_data,通(tòng)过(guò)(255-sin_data)得到(dào)dac_da。
3.連(lián)續輸出(chū)2个(gè)周期(qī)为(wèi)1.5625MHz的(de)正(zhèng)弦波(bō),其中(zhōng)每个(gè)正(zhèng)弦波(bō)輸出(chū)32个(gè)采樣(yàng)點(diǎn)。
等價于(yú):每隔1个(gè)时(shí)鐘(zhōng)輸出(chū)一(yī)个(gè)電(diàn)壓值dac_da,一(yī)共(gòng)輸出(chū)32个(gè),組成(chéng)一(yī)个(gè)正(zhèng)弦波(bō),連(lián)續産生(shēng)2个(gè)正(zhèng)弦波(bō)。
dac_da的(de)産生(shēng)方(fāng)式:表(biǎo)XXX每隔4个(gè)選出(chū)得到(dào)sin_data,通(tòng)过(guò)(255-sin_data)得到(dào)dac_da。
4.連(lián)續輸出(chū)2个(gè)周期(qī)为(wèi)781250Hz的(de)正(zhèng)弦波(bō),其中(zhōng)每个(gè)正(zhèng)弦波(bō)輸出(chū)64个(gè)采樣(yàng)點(diǎn)。
等價于(yú):每隔1个(gè)时(shí)鐘(zhōng)輸出(chū)一(yī)个(gè)電(diàn)壓值dac_da,一(yī)共(gòng)輸出(chū)64个(gè)點(diǎn),組成(chéng)一(yī)个(gè)正(zhèng)弦波(bō),連(lián)續産生(shēng)2个(gè)正(zhèng)弦波(bō)。
dac_da的(de)産生(shēng)方(fāng)式:表(biǎo)XXX每隔2个(gè)選出(chū)得到(dào)sin_data,通(tòng)过(guò)(255-sin_data)得到(dào)dac_da。
5.連(lián)續輸出(chū)2个(gè)周期(qī)为(wèi)390625Hz的(de)正(zhèng)弦波(bō),其中(zhōng)每个(gè)正(zhèng)弦波(bō)輸出(chū)128个(gè)采樣(yàng)點(diǎn)。
等價于(yú):每隔1个(gè)时(shí)鐘(zhōng)輸出(chū)一(yī)个(gè)電(diàn)壓值dac_da,一(yī)共(gòng)輸出(chū)128个(gè)點(diǎn),組成(chéng)一(yī)个(gè)正(zhèng)弦波(bō),連(lián)續産生(shēng)2个(gè)正(zhèng)弦波(bō)。
dac_da的(de)産生(shēng)方(fāng)式:表(biǎo)XXX每隔1个(gè)選出(chū)得到(dào)sin_data,通(tòng)过(guò)(255-sin_data)得到(dào)dac_da。
6.連(lián)續輸出(chū)2个(gè)周期(qī)为(wèi)195312.5Hz的(de)正(zhèng)弦波(bō),其中(zhōng)每个(gè)正(zhèng)弦波(bō)輸出(chū)128个(gè)采樣(yàng)點(diǎn)。
等價于(yú):每隔2个(gè)时(shí)鐘(zhōng)輸出(chū)一(yī)个(gè)電(diàn)壓值dac_da,一(yī)共(gòng)輸出(chū)128个(gè)點(diǎn),組成(chéng)一(yī)个(gè)正(zhèng)弦波(bō),連(lián)續産生(shēng)2个(gè)正(zhèng)弦波(bō)。
dac_da的(de)産生(shēng)方(fāng)式:表(biǎo)XXX每隔1个(gè)選出(chū)得到(dào)sin_data,通(tòng)过(guò)(255-sin_data)得到(dào)dac_da。
按照至(zhì)簡設計(jì)法中(zhōng)的(de)變(biàn)量(liàng)法思(sī)想(xiǎng),那(nà)麼(me)可(kě)以(yǐ)概括上(shàng)面(miàn)的(de)功能(néng):每隔x个(gè)时(shí)鐘(zhōng)輸出(chū)一(yī)个(gè)電(diàn)壓值,一(yī)共(gòng)輸出(chū)y个(gè)點(diǎn),組成(chéng)一(yī)个(gè)正(zhèng)弦波(bō),每个(gè)要(yào)産生(shēng)要(yào)連(lián)續産生(shēng)2个(gè)正(zhèng)弦波(bō)。由(yóu)于(yú)一(yī)共(gòng)要(yào)産生(shēng)6種(zhǒng)不(bù)同(tóng)頻率的(de)正(zhèng)弦波(bō),所(suǒ)以(yǐ)還(huán)需要(yào)一(yī)个(gè)計(jì)數器来(lái)數6个(gè)。
總(zǒng)結出(chū)上(shàng)面(miàn)的(de)內(nèi)容後(hòu),我(wǒ)们(men)開(kāi)始設計(jì)代(dài)碼。
“每隔x个(gè)时(shí)鐘(zhōng)輸出(chū)一(yī)个(gè)電(diàn)壓值”,所(suǒ)以(yǐ)这(zhè)需要(yào)一(yī)个(gè)計(jì)數器cnt0,加1条(tiáo)件(jiàn)是(shì)“1”,結束(shù)条(tiáo)件(jiàn)是(shì)數到(dào)x个(gè),可(kě)以(yǐ)得到(dào)cnt0的(de)代(dài)碼。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
always @(posedge clk or negedge rst_n)begin if(!rst_n)begin cnt0 <= 0; end else if(add_cnt0)begin if(end_cnt0) cnt0 <= 0; else cnt0 <= cnt0 + 1; end end
assign add_cnt0 = 1; assign end_cnt0 = add_cnt0 && cnt0== x-1; |
“一(yī)共(gòng)輸出(chū)y个(gè)點(diǎn)”,这(zhè)同(tóng)樣(yàng)需要(yào)一(yī)个(gè)計(jì)數器cnt1。注意(yì)的(de)是(shì),由(yóu)于(yú)每个(gè)點(diǎn)維持(chí)x个(gè)时(shí)鐘(zhōng),也(yě)就(jiù)是(shì)cnt1的(de)加1条(tiáo)件(jiàn)是(shì)“數到(dào)x个(gè)时(shí)鐘(zhōng)”,即end_cnt0。結束(shù)条(tiáo)件(jiàn)是(shì):數到(dào)y下(xià)。可(kě)以(yǐ)得到(dào)cnt1的(de)代(dài)碼。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
always @(posedge clk or negedge rst_n)begin if(!rst_n)begin cnt1 <= 0; end else if(add_cnt1)begin if(end_cnt1) cnt1 <= 0; else cnt1 <= cnt1 + 1; end end
assign add_cnt1 = end_cnt0; assign end_cnt1 = add_cnt1 && cnt1== y-1; |
“每个(gè)要(yào)産生(shēng)要(yào)連(lián)續産生(shēng)2个(gè)正(zhèng)弦波(bō)”,这(zhè)也(yě)需要(yào)一(yī)个(gè)計(jì)數器cnt2。一(yī)个(gè)正(zhèng)弦波(bō)由(yóu)y个(gè)點(diǎn)組成(chéng),所(suǒ)以(yǐ)cnt2的(de)加1条(tiáo)件(jiàn)是(shì)“數到(dào)y个(gè)”,即end_cnt1,結束(shù)条(tiáo)件(jiàn)是(shì)“數到(dào)2个(gè)”。可(kě)以(yǐ)得到(dào)cnt2的(de)代(dài)碼:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
always @(posedge clk or negedge rst_n)begin if(!rst_n)begin cnt2 <= 0; end else if(add_cnt2)begin if(end_cnt2) cnt2 <= 0; else cnt2 <= cnt2 + 1; end end
assign add_cnt2 = end_cnt1; assign end_cnt2 = add_cnt2 && cnt2== 2-1; |
由(yóu)于(yú)一(yī)共(gòng)要(yào)産生(shēng)6種(zhǒng)不(bù)同(tóng)頻率的(de)正(zhèng)弦波(bō),所(suǒ)以(yǐ)還(huán)需要(yào)一(yī)个(gè)計(jì)數器cnt3来(lái)數6个(gè)。这(zhè)个(gè)cnt3的(de)加1条(tiáo)件(jiàn)是(shì)“産生(shēng)完2个(gè)正(zhèng)弦波(bō)”,即end_cnt2,結束(shù)条(tiáo)件(jiàn)是(shì)“數到(dào)6个(gè)”。可(kě)以(yǐ)得到(dào)cnt3的(de)代(dài)碼。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
always @(posedge clk or negedge rst_n)begin if(!rst_n)begin cnt3 <= 0; end else if(add_cnt3)begin if(end_cnt3) cnt3 <= 0; else cnt3 <= cnt3 + 1; end end
assign add_cnt3 = end_cnt2; assign end_cnt3 = add_cnt3 && cnt3== 6-1; |
我(wǒ)们(men)定(dìng)義了(le)變(biàn)量(liàng)x和(hé)y,其中(zhōng)x表(biǎo)示相隔的(de)时(shí)鐘(zhōng)數,y表(biǎo)示一(yī)个(gè)正(zhèng)弦波(bō)的(de)采樣(yàng)點(diǎn)數。具體(tǐ)的(de)x和(hé)y是(shì)與(yǔ)正(zhèng)弦波(bō)的(de)不(bù)同(tóng)頻率相關(guān)的(de),也(yě)就(jiù)是(shì)與(yǔ)cnt3相關(guān)。根(gēn)據(jù)題(tí)意(yì)和(hé)至(zhì)簡設計(jì)法中(zhōng)的(de)變(biàn)量(liàng)設計(jì)方(fāng)法,可(kě)以(yǐ)得到(dào)x和(hé)y的(de)代(dài)碼。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
always @(*)begin if(cnt3==0)begin x = 1 ; y = 8 ; end else if(cnt3==1)begin x = 1 ; y = 16 ; end else if(cnt3==2)begin x = 1 ; y = 32 ; end else if(cnt3==3)begin x = 1 ; y = 64 ; end else if(cnt3==4)begin x = 1 ; y = 128 ; end else begin x = 2 ; y = 128 ; end end |
有(yǒu)了(le)計(jì)數器之後(hòu),其他(tā)信(xìn)号(hào)就(jiù)可(kě)以(yǐ)根(gēn)據(jù)計(jì)數器設計(jì)出(chū)来(lái)了(le)。
首先(xiān)看(kàn)信(xìn)号(hào)dac_da。dac_da都是(shì)按(255-sin_data)得到(dào)。那(nà)麼(me)可(kě)以(yǐ)写出(chū)dac_da的(de)代(dài)碼。
|
1 2 3 4 5 6 7 8 |
always @(posedge clk or negedge rst_n)begin if(rst_n==1'b0)begin dac_da <= 0; end else begin dac_da <= 255 - sin_data; end end |
接下(xià)来(lái)看(kàn)sin_data信(xìn)号(hào)。sin_data是(shì)從表(biǎo)XX中(zhōng)選擇出(chū)来(lái)的(de)值,不(bù)同(tóng)的(de)頻率,選擇的(de)方(fāng)式不(bù)同(tóng)。那(nà)麼(me)很自(zì)然是(shì)定(dìng)義一(yī)个(gè)選擇信(xìn)号(hào)addr。我(wǒ)们(men)只(zhī)要(yào)控制好(hǎo)addr,就(jiù)能(néng)方(fāng)便得到(dào)sin_data。
|
1 2 3 4 5 6 7 8 9 |
always @(*)begin case(addr) 0: sin_data = 8'h7F; 1: sin_data = 8'h85; 2: sin_data = 8'h8C; 3: sin_data = 8'h92; 4: sin_data = 8'h98; 5: sin_data = 8'h9E; 6: sin_data = 8'hA4; 7: sin_data = 8'hAA; 8: sin_data = 8'hB0; 9: sin_data = 8'hB6; 10: sin_data = 8'hBC; 11: sin_data = 8'hC1; 12: sin_data = 8'hC6; 13: sin_data = 8'hCB; 14: sin_data = 8'hD0; 15: sin_data = 8'hD5; 16: sin_data = 8'hDA; 17: sin_data = 8'hDE; 18: sin_data = 8'hE2; 19: sin_data = 8'hE6; 20: sin_data = 8'hEA; 21: sin_data = 8'hED; 22: sin_data = 8'hF0; 23: sin_data = 8'hF3; 24: sin_data = 8'hF5; 25: sin_data = 8'hF7; 26: sin_data = 8'hF9; 27: sin_data = 8'hFB; 28: sin_data = 8'hFC; 29: sin_data = 8'hFD; 30: sin_data = 8'hFE; 31: sin_data = 8'hFE; 32: sin_data = 8'hFE; 33: sin_data = 8'hFE; 34: sin_data = 8'hFE; 35: sin_data = 8'hFD; 36: sin_data = 8'hFC; 37: sin_data = 8'hFA; 38: sin_data = 8'hF8; 39: sin_data = 8'hF6; 40: sin_data = 8'hF4; 41: sin_data = 8'hF1; 42: sin_data = 8'hEF; 43: sin_data = 8'hEB; 44: sin_data = 8'hE8; 45: sin_data = 8'hE4; 46: sin_data = 8'hE0; 47: sin_data = 8'hDC; 48: sin_data = 8'hD8; 49: sin_data = 8'hD3; 50: sin_data = 8'hCE; 51: sin_data = 8'hC9; 52: sin_data = 8'hC4; 53: sin_data = 8'hBE; 54: sin_data = 8'hB9; 55: sin_data = 8'hB3; 56: sin_data = 8'hAD; 57: sin_data = 8'hA7; 58: sin_data = 8'hA1; 59: sin_data = 8'h9B; 60: sin_data = 8'h95; 61: sin_data = 8'h8F; 62: sin_data = 8'h89; 63: sin_data = 8'h82; 64: sin_data = 8'h7D; 65: sin_data = 8'h77; 66: sin_data = 8'h70; 67: sin_data = 8'h6A; 68: sin_data = 8'h64; 69: sin_data = 8'h5E; 70: sin_data = 8'h58; 71: sin_data = 8'h52; 72: sin_data = 8'h4C; 73: sin_data = 8'h46; 74: sin_data = 8'h41; 75: sin_data = 8'h3C; 76: sin_data = 8'h36; 77: sin_data = 8'h31; 78: sin_data = 8'h2C; 79: sin_data = 8'h28; 80: sin_data = 8'h23; 81: sin_data = 8'h1F; 82: sin_data = 8'h1B; 83: sin_data = 8'h17; 84: sin_data = 8'h14; 85: sin_data = 8'h11; 86: sin_data = 8'hE ; 87: sin_data = 8'hB ; 88: sin_data = 8'h9 ; 89: sin_data = 8'h7 ; 90: sin_data = 8'h5 ; 91: sin_data = 8'h3 ; 92: sin_data = 8'h2 ; 93: sin_data = 8'h1 ; 94: sin_data = 8'h1 ; 95: sin_data = 8'h1 ; 96: sin_data = 8'h1 ; 97: sin_data = 8'h1 ; 98: sin_data = 8'h2 ; 99: sin_data = 8'h3 ; 100: sin_data = 8'h4 ; 101: sin_data = 8'h6 ; 102: sin_data = 8'h7 ; 103: sin_data = 8'hA ; 104: sin_data = 8'hC ; 105: sin_data = 8'hF ; 106: sin_data = 8'h12; 107: sin_data = 8'h15; 108: sin_data = 8'h19; 109: sin_data = 8'h1D; 110: sin_data = 8'h21; 111: sin_data = 8'h25; 112: sin_data = 8'h2A; 113: sin_data = 8'h2E; 114: sin_data = 8'h33; 115: sin_data = 8'h38; 116: sin_data = 8'h3E; 117: sin_data = 8'h43; 118: sin_data = 8'h49; 119: sin_data = 8'h4E; 120: sin_data = 8'h54; 121: sin_data = 8'h5A; 122: sin_data = 8'h60; 123: sin_data = 8'h67; 124: sin_data = 8'h6D; 125: sin_data = 8'h73; 126: sin_data = 8'h79; 127: sin_data = 8'h7F; endcase end |
接下(xià)来(lái)設計(jì)信(xìn)号(hào)addr。addr是(shì)用(yòng)来(lái)控制選擇數據(jù)的(de)地(dì)址,不(bù)同(tóng)頻率的(de)正(zhèng)弦波(bō)要(yào)求地(dì)址控制方(fāng)式不(bù)同(tóng)。頻率为(wèi)6.25MHz(cnt3=0)是(shì)每隔16个(gè)選擇一(yī)个(gè);頻率为(wèi)3.125MHz(cnt3=1)是(shì)每隔8个(gè)點(diǎn)選擇一(yī)个(gè);頻率为(wèi)1.5625MHz(cnt3=2)是(shì)每隔4个(gè)點(diǎn)選擇一(yī)个(gè);頻率为(wèi)781250Hz(cnt3=3)是(shì)每隔2个(gè)選擇一(yī)个(gè);頻率为(wèi)390625Hz(cnt3=4)是(shì)每隔1个(gè)點(diǎn)選擇一(yī)个(gè);頻率为(wèi)195312.5Hz(cnt3=5)是(shì)每隔1个(gè)選擇一(yī)个(gè),一(yī)共(gòng)發(fà)送128个(gè)。
我(wǒ)们(men)用(yòng)cnt1表(biǎo)示發(fà)送的(de)第(dì)幾(jǐ)个(gè)數。
cnt3==0时(shí),addr = cnt1*16;
cnt3==1时(shí),addr = cnt1*8;
cnt3==2时(shí),addr = cnt1*4;
cnt3==3时(shí),addr = cnt1*2;
cnt3==4时(shí),addr = cnt1*1;
cnt3==5时(shí),addr = cnt1*1。
因(yīn)此(cǐ),可(kě)以(yǐ)写得addr的(de)代(dài)碼
|
1 2 3 |
always @(*)begin if(cnt3==0) addr = cnt1 * 16; else if(cnt3==1) addr = cnt1 * 8; else if(cnt3==2) addr = cnt1 * 4; else if(cnt3==3) addr = cnt1 * 2; else if(cnt3==4) addr = cnt1 * 1; else addr = cnt1 * 1; end |
接下(xià)来(lái)是(shì)信(xìn)号(hào)dac_sleep,AD是(shì)一(yī)直(zhí)工作的(de),所(suǒ)以(yǐ)要(yào)讓dac_sleep一(yī)直(zhí)为(wèi)0。
dac_clka为(wèi)了(le)滿足tS的(de)时(shí)間(jiān)要(yào)求,可(kě)以(yǐ)讓dac_clka = ~clk。
dac_wra可(kě)以(yǐ)與(yǔ)dac_clka相同(tóng)。
dac_mode是(shì)控制AD9709的(de)模式,當为(wèi)高(gāo)電(diàn)平时(shí),表(biǎo)示双(shuāng)通(tòng)道(dào)模式,此(cǐ)时(shí)通(tòng)过(guò)DA、DB两(liǎng)組信(xìn)号(hào)分(fēn)别独立控制两(liǎng)个(gè)通(tòng)道(dào)。在(zài)能(néng)实現(xiàn)功能(néng)的(de)前(qián)提(tí)下(xià),越簡單越好(hǎo),就(jiù)使用(yòng)双(shuāng)通(tòng)道(dào)模式,因(yīn)此(cǐ)令dac_mode一(yī)直(zhí)为(wèi)1。
|
1 2 3 |
assign dac_sleep = 0 ; assign dac_wra = dac_clka ; assign dac_clka = ~clk ; assign dac_mode = 1 ; |
至(zhì)此(cǐ),主(zhǔ)體(tǐ)程序已經(jīng)完成(chéng)。接下(xià)来(lái)是(shì)将module補充完整。
3.3信(xìn)号(hào)定(dìng)義
接下(xià)来(lái)定(dìng)義信(xìn)号(hào)類(lèi)型。
cnt0是(shì)用(yòng)always産生(shēng)的(de)信(xìn)号(hào),因(yīn)此(cǐ)類(lèi)型为(wèi)reg。cnt0計(jì)數的(de)最(zuì)大值为(wèi)15,需要(yào)用(yòng)5根(gēn)線(xiàn)表(biǎo)示,即位宽(kuān)是(shì)5位。add_cnt0和(hé)end_cnt0都是(shì)用(yòng)assign方(fāng)式設計(jì)的(de),因(yīn)此(cǐ)類(lèi)型为(wèi)wire。并且其值是(shì)0或(huò)者(zhě)1,1个(gè)線(xiàn)表(biǎo)示即可(kě)。因(yīn)此(cǐ)代(dài)碼如(rú)下(xià):
|
1 2 3 |
reg [4:0] cnt0 ; wire add_cnt0 ; wire end_cnt0 ; |
cnt1是(shì)用(yòng)always産生(shēng)的(de)信(xìn)号(hào),因(yīn)此(cǐ)類(lèi)型为(wèi)reg。cnt1計(jì)數的(de)最(zuì)大值为(wèi)127,需要(yào)用(yòng)8根(gēn)線(xiàn)表(biǎo)示,即位宽(kuān)是(shì)8位。add_cnt1和(hé)end_cnt1都是(shì)用(yòng)assign方(fāng)式設計(jì)的(de),因(yīn)此(cǐ)類(lèi)型为(wèi)wire。并且其值是(shì)0或(huò)者(zhě)1,1根(gēn)線(xiàn)表(biǎo)示即可(kě)。因(yīn)此(cǐ)代(dài)碼如(rú)下(xià):
|
1 2 3 |
reg [7:0] cnt1 ; wire add_cnt1 ; wire end_cnt1 ; |
cnt2是(shì)用(yòng)always産生(shēng)的(de)信(xìn)号(hào),因(yīn)此(cǐ)類(lèi)型为(wèi)reg。cnt2計(jì)數的(de)最(zuì)大值为(wèi)7,需要(yào)用(yòng)3根(gēn)線(xiàn)表(biǎo)示,即位宽(kuān)是(shì)8位。add_cnt2和(hé)end_cnt2都是(shì)用(yòng)assign方(fāng)式設計(jì)的(de),因(yīn)此(cǐ)類(lèi)型为(wèi)wire。并且其值是(shì)0或(huò)者(zhě)1,1根(gēn)線(xiàn)表(biǎo)示即可(kě)。因(yīn)此(cǐ)代(dài)碼如(rú)下(xià):
|
1 2 3 |
reg [2:0] cnt2 ; wire add_cnt2 ; wire end_cnt2 ; |
cnt3是(shì)用(yòng)always産生(shēng)的(de)信(xìn)号(hào),因(yīn)此(cǐ)類(lèi)型为(wèi)reg。cnt3計(jì)數的(de)最(zuì)大值为(wèi)5,需要(yào)用(yòng)3根(gēn)線(xiàn)表(biǎo)示,即位宽(kuān)是(shì)3位。add_cnt3和(hé)end_cnt3都是(shì)用(yòng)assign方(fāng)式設計(jì)的(de),因(yīn)此(cǐ)類(lèi)型为(wèi)wire。并且其值是(shì)0或(huò)者(zhě)1,1根(gēn)線(xiàn)表(biǎo)示即可(kě)。因(yīn)此(cǐ)代(dài)碼如(rú)下(xià):
|
1 2 3 |
reg [2:0] cnt3 ; wire add_cnt3 ; wire end_cnt3 ; |
變(biàn)量(liàng)x,y是(shì)用(yòng)always方(fāng)式設計(jì)的(de),因(yīn)此(cǐ)類(lèi)型为(wèi)reg,x最(zuì)大值为(wèi)2,要(yào)有(yǒu)2位来(lái)表(biǎo)示,y最(zuì)大值为(wèi)128,要(yào)有(yǒu)8根(gēn)線(xiàn)表(biǎo)示,即位宽(kuān)为(wèi)8,因(yīn)此(cǐ)代(dài)碼如(rú)下(xià),
|
1 2 |
reg [1:0] x ; reg [7:0] y ; |
addr是(shì)用(yòng)always設計(jì)的(de),因(yīn)此(cǐ)類(lèi)型为(wèi)reg。其值最(zuì)大为(wèi)127,一(yī)共(gòng)有(yǒu)7根(gēn)線(xiàn),位宽(kuān)为(wèi)7,故而(ér)代(dài)碼如(rú)下(xià)
|
1 |
reg [6:0] addr ; |
sin_data是(shì)用(yòng)always設計(jì)的(de),因(yīn)此(cǐ)類(lèi)型为(wèi)reg。其最(zuì)大值为(wèi)255,要(yào)有(yǒu)8根(gēn)線(xiàn)表(biǎo)示,位宽(kuān)为(wèi)8,故而(ér)代(dài)碼如(rú)下(xià)
|
1 |
reg [7:0] sin_data ; |
dac_da是(shì)用(yòng)always設計(jì)的(de),因(yīn)此(cǐ)類(lèi)型为(wèi)reg。其位宽(kuān)为(wèi)8;dac_sleep是(shì)用(yòng)assign設計(jì)的(de),因(yīn)此(cǐ)類(lèi)型为(wèi)wire,位宽(kuān)为(wèi)1;dac_wra是(shì)用(yòng)assign設計(jì)的(de),因(yīn)此(cǐ)類(lèi)型为(wèi)wire,位宽(kuān)为(wèi)1;dac_clka是(shì)用(yòng)assign設計(jì)的(de),因(yīn)此(cǐ)類(lèi)型为(wèi)wire,位宽(kuān)为(wèi)1;dac_mode是(shì)用(yòng)assign設計(jì)的(de),因(yīn)此(cǐ)類(lèi)型为(wèi)wire,位宽(kuān)为(wèi)1。故而(ér)代(dài)碼如(rú)下(xià)
|
1 |
reg [7:0] dac_da ; wire dac_sleep ; wire dac_wra ; wire dac_clka ; wire dac_mode ; |
在(zài)代(dài)碼的(de)最(zuì)後(hòu)一(yī)行写下(xià)endmodule
|
1 |
endmodule |
4綜合與(yǔ)上(shàng)板
4.1新建工程
图(tú)491
1.打(dǎ)開(kāi)quartus,點(diǎn)擊File在(zài)File菜單中(zhōng)選擇New Project Wizard....。
图(tú)492
2.弹出(chū)Introduction界面(miàn)選擇Next。
图(tú)493
3.設置工程目录(lù),工程名,頂层模块(kuài)名
工程目录(lù)設置为(wèi):D:mdy_bookdds_da
工程名:dds_da
頂层模块(kuài)名:dds_da
填写完畢後(hòu),點(diǎn)擊next之後(hòu)進(jìn)入(rù)下(xià)一(yī)界面(miàn)。
图(tú)494
工程類(lèi)型界面(miàn),Project Type選擇Empty project,選擇空白工程。點(diǎn)Next進(jìn)入(rù)下(xià)一(yī)个(gè)界面(miàn)。
图(tú)495
4.在(zài)文(wén)件(jiàn)添加界面(miàn),點(diǎn)擊右(yòu)上(shàng)角(jiǎo)的(de)
,在(zài)弹出(chū)来(lái)的(de)窗(chuāng)口(kǒu)中(zhōng),双(shuāng)擊選擇D:mdy_bookdds_da目录(lù)下(xià)的(de)dds_da.v文(wén)件(jiàn)。
图(tú)496
點(diǎn)擊右(yòu)上(shàng)角(jiǎo)的(de)add按鍵
,将文(wén)件(jiàn)添加進(jìn)工程。
图(tú)497
在(zài)主(zhǔ)窗(chuāng)口(kǒu)中(zhōng)会(huì)顯示将dds_da.v加入(rù)了(le)工程。點(diǎn)擊Next,進(jìn)入(rù)下(xià)一(yī)个(gè)界面(miàn)。
图(tú)498
4.器件(jiàn)選擇界面(miàn)。在(zài)Device family这(zhè)一(yī)項之中(zhōng)選擇Cyclone IV E;在(zài)下(xià)部(bù)的(de)Available device選擇EP4CE6F23C8。完成(chéng)後(hòu)直(zhí)接點(diǎn)擊Finish。
4.2綜合
图(tú)499
在(zài)菜單欄中(zhōng),選中(zhōng)Processing,然後(hòu)選擇Start Compilation,開(kāi)始对(duì)整个(gè)工程進(jìn)行編譯和(hé)綜合。
图(tú)500
出(chū)現(xiàn)上(shàng)面(miàn)的(de)界面(miàn),就(jiù)说(shuō)明(míng)編譯綜合成(chéng)功。
|
器件(jiàn) |
AD9709管(guǎn)脚 |
原理图(tú)信(xìn)号(hào) |
FPGA管(guǎn)脚 |
FPGA工程信(xìn)号(hào) |
|
U8 |
MODE |
DAC_MODE |
Y4 |
dac_mode |
|
SLEEP |
DAC_SLEEP |
H2 |
dac_sleep |
|
|
CLK1 |
DA_CLKA |
R2 |
dac_clka |
|
|
WRT1 |
DA_WRA |
U1 |
dac_wra |
|
|
DB7P1 |
DAC_DA7 |
AA1 |
dac_da[7] |
|
|
DB6P1 |
DAC_DA6 |
Y2 |
dac_da[6] |
|
|
DB5P1 |
DAC_DA5 |
Y1 |
dac_da[5] |
|
|
DB4P1 |
DAC_DA4 |
W2 |
dac_da[4] |
|
|
DB3P1 |
DAC_DA3 |
W1 |
dac_da[3] |
|
|
DB2P1 |
DAC_DA2 |
V2 |
dac_da[2] |
|
|
DB1P1 |
DAC_DA1 |
V1 |
dac_da[1] |
|
|
DB0P1 |
DAC_DA0 |
U2 |
dac_da[0] |
|
|
CLK2 |
DA_CLKB |
R1 |
|
|
|
WRT2 |
DA_WRB |
P2 |
|
|
|
DB7P2 |
DAC_DB7 |
P1 |
|
|
|
DB6P2 |
DAC_DB6 |
N2 |
|
|
|
DB5P2 |
DAC_DB5 |
N1 |
|
|
|
DB4P2 |
DAC_DB4 |
M2 |
|
|
|
DB3P2 |
DAC_DB3 |
M1 |
|
|
|
DB2P2 |
DAC_DB2 |
J1 |
|
|
|
DB1P2 |
DAC_DB1 |
J2 |
|
|
|
DB0P2 |
DAC_DB0 |
H1 |
|
|
|
X1 |
|
SYS_CLK |
G1 |
clk |
|
K1 |
|
SYS_RST |
AB12 |
rst_n |
4.3配置管(guǎn)脚
图(tú)501
在(zài)菜單欄中(zhōng),選中(zhōng)Assignments,然後(hòu)選擇Pin Planner,就(jiù)会(huì)弹出(chū)配置管(guǎn)脚的(de)窗(chuāng)口(kǒu)。
图(tú)502
在(zài)配置窗(chuāng)口(kǒu)中(zhōng)的(de)location一(yī)列,可(kě)以(yǐ)填写每个(gè)管(guǎn)脚所(suǒ)对(duì)應(yìng)的(de)FPGA管(guǎn)脚号(hào)。
按上(shàng)面(miàn)配置好(hǎo)每个(gè)信(xìn)号(hào)的(de)管(guǎn)脚,其最(zuì)終(zhōng)效果(guǒ)如(rú)下(xià)图(tú)。
图(tú)503
關(guān)閉Pin Planner,软(ruǎn)件(jiàn)自(zì)動(dòng)会(huì)保存管(guǎn)脚配置信(xìn)息。
4.4再次(cì)綜合
图(tú)504
在(zài)菜單欄中(zhōng),選中(zhōng)Processing,然後(hòu)選擇Start Compilation,開(kāi)始对(duì)整个(gè)工程進(jìn)行編譯和(hé)綜合。
图(tú)505
出(chū)現(xiàn)上(shàng)面(miàn)的(de)界面(miàn),就(jiù)说(shuō)明(míng)編譯綜合成(chéng)功。
4.5連(lián)接開(kāi)發(fà)板
图(tú)506
連(lián)接示意(yì)如(rú)上(shàng)图(tú)所(suǒ)示。将電(diàn)源接上(shàng)開(kāi)發(fà)板;USB BLASTER一(yī)端連(lián)接到(dào)JTAG插口(kǒu),另(lìng)一(yī)端連(lián)到(dào)PC的(de)USB接口(kǒu);将開(kāi)發(fà)板上(shàng)的(de)P7接口(kǒu)與(yǔ)示波(bō)器相連(lián)。最(zuì)後(hòu)再将電(diàn)源打(dǎ)開(kāi)。
4.6上(shàng)板
图(tú)507
在(zài)quartus的(de)Task窗(chuāng)口(kǒu)中(zhōng),右(yòu)鍵Program Device選擇Open進(jìn)入(rù)燒录(lù)界面(miàn)。
图(tú)508
在(zài)上(shàng)面(miàn)的(de)界面(miàn)中(zhōng),默認会(huì)選中(zhōng)文(wén)件(jiàn)output/dds_da.sof,如(rú)果(guǒ)沒(méi)有(yǒu)生(shēng)成(chéng)請看(kàn)XXXX。
在(zài)上(shàng)面(miàn)的(de)界面(miàn)中(zhōng),Hardware Setup的(de)旁邊(biān)会(huì)顯示:USB-Blaster。如(rú)果(guǒ)不(bù)是(shì),請看(kàn)XXXX。
图(tú)509
點(diǎn)擊statr,在(zài)progress这(zhè)一(yī)条(tiáo)顯示100%即表(biǎo)示成(chéng)功,此(cǐ)时(shí)可(kě)以(yǐ)看(kàn)FPGA輸出(chū)效果(guǒ)了(le)。








