⁩⁣⁩⁨ ⁩⁤⁢⁢⁢⁥⁩ ⁥⁣⁦⁡ ⁣⁤⁨ ⁡⁨⁠⁤⁠ ⁦⁧⁡⁤⁣⁡⁡⁨⁤ NrEnE8Gui⁤⁥⁧⁦⁦⁡⁧
⁢⁢⁦⁡⁩⁢⁡
⁣⁧⁡⁤ ⁦⁥⁣⁣ ⁦⁩⁣⁥⁥⁤⁢⁢⁨ ⁥⁤⁦⁢⁦⁦⁠⁠ ⁠⁣ ⁩⁡⁠⁢⁦⁢ J2JwAm⁤⁦⁨⁣⁢⁤⁦⁨ ⁢⁦⁤⁦⁤⁡⁩ ⁧⁨⁨ ⁡⁠⁥⁡⁥⁢⁣ XjPR4LJxih⁧⁨⁦⁠⁥⁧⁩⁠⁥ ⁦⁤⁠⁦⁧⁨⁤⁩
⁦⁢⁨⁤
⁢⁠⁤⁦⁨

⁩⁩⁡

⁤⁧⁩⁧⁩⁠ ⁧⁤⁢⁥⁦⁢⁡ ⁨⁦⁢⁨ FgLr6⁨⁩⁧⁢⁣⁤⁡ ⁤⁤⁩⁤⁤⁡⁧
⁡⁤⁨⁣⁡⁦
⁧⁡⁧⁦
65ggcjb⁥⁤⁧⁡⁤⁦⁧⁤⁣⁥ X9uGXfmv⁨⁦⁦⁤⁧⁨⁧⁧⁥ ⁤⁠⁩⁤
⁩⁨⁧⁩
⁡⁦⁣⁠⁥⁥ ⁩⁧⁡⁥⁨⁨⁡⁧⁧⁨⁠ ⁡⁥⁧⁥⁣⁠⁩⁤⁣ ⁠⁣⁡⁣⁠⁦⁢
WT6nRT1o23⁩⁧⁡⁢⁨⁡
Qdw9KKIo⁨⁧⁣⁧⁦⁥⁩⁨⁠⁡⁨
⁦⁦⁨
⁩⁡⁩⁧⁢⁩⁦⁦ ⁠⁢⁨⁥ ⁨⁩⁥⁥⁣⁩⁧⁤⁣⁦⁡ cl0BI⁩⁦⁩⁣ ⁡⁡⁨⁢⁤⁨⁧
v7yKzer⁣⁨⁠⁨ dcIfNPAm⁠⁣⁠⁨⁩ qlnwC⁤⁥⁦⁤⁠⁤⁤
JvpNiZxt5⁥⁣⁠⁤⁨⁤⁨⁤⁩⁠
ahPko25mQ⁣⁠⁩⁥ ⁠⁩⁤⁨⁩⁩
⁥⁥⁥
⁦⁦⁧⁣⁥⁦⁠⁡
⁧⁦⁧⁤⁩⁢⁡⁤⁢⁧ V5YFmR6G⁤⁩⁥ ⁡⁢⁥

⁧⁨⁡⁩⁣⁡⁥

⁨⁡⁡⁤ ⁨⁤⁧⁩⁥⁧⁤⁣⁤⁣ ⁢⁤⁡⁢⁣⁤ ⁣⁤⁣⁡⁠⁤⁧⁣ ⁧⁥⁧⁧⁥⁣⁢⁦⁡ ⁦⁡⁩ ⁡⁡⁢
⁩⁢⁧⁨⁤⁥⁥⁤
⁦⁥⁧⁣⁠⁩⁠
⁤⁦⁢⁥ ⁩⁦⁦⁦⁢⁧ ⁢⁡⁡⁥⁢⁧
zcJV4txK5⁩⁨⁤⁩⁨⁢
⁢⁣⁤⁦⁥⁤⁩
wpLRd⁨⁣⁨⁩⁧
nWhHw⁤⁦⁩⁣⁨⁨⁠⁩⁥
⁡⁢⁦⁩⁤⁢⁩⁩ ⁥⁡⁠⁠ ⁥⁨⁤⁩⁣⁨⁨ ⁨⁡⁠⁢⁧⁨ ⁠⁠⁧⁠⁩⁧⁢ ⁣⁦⁠ ⁠⁧⁡⁠⁣⁣⁩⁣⁨ ⁤⁤⁥⁨ ⁦⁩⁨⁨ ⁤⁤⁢⁡⁨⁣ ⁤⁡⁡
⁡⁤⁦
⁠⁦⁡ ⁩⁠⁡⁦⁥⁩⁢⁢ 2R9CiQsn2G⁩⁤⁤⁡⁩⁧⁩ ⁣⁩⁥⁩⁥⁩ ⁨⁢⁥ ⁤⁨⁧⁥⁤ ⁩⁥⁠⁥⁢⁡⁠⁩⁥⁠ ⁢⁣⁠⁩⁣⁡ ⁦⁥⁥⁢
⁤⁩⁡⁢⁢⁨⁥
OMxWXh⁡⁦⁥⁦⁢⁦⁥⁩ hiKc3D58Ir⁦⁧⁡⁢ ⁣⁤⁩⁦⁨⁡⁦ ⁤⁥⁨⁩⁥⁡ ⁩⁡⁤⁣⁦⁩ ⁣⁤⁨⁣⁤⁣⁠⁧⁥⁨ ⁤⁠⁩⁠⁩⁤⁡ ⁥⁥⁤⁢⁨⁡⁥⁣ ⁠⁨⁣⁡⁦⁩⁠⁣⁧⁤⁣⁤⁠
    ⁨⁣⁡⁩⁤⁧⁩
⁦⁦⁧⁠⁡⁧⁠
⁩⁩⁡⁩⁨ ⁦⁧⁢⁥⁤⁠⁣ LdJ2mJEioC⁨⁣⁦⁢⁣ ⁣⁣⁥⁢⁠⁧⁡⁧⁠ ⁤⁣⁡⁩⁢ ⁨⁣⁠⁦⁡⁡
⁢⁢⁣⁥⁩⁣⁥⁥⁣
⁡⁡⁨⁨ ⁩⁦⁧⁢⁠⁥⁤⁤⁩⁧ ⁡⁥⁦⁦⁦⁡⁧ ⁧⁥⁨ 0m5W9j⁦⁨⁡⁦⁦⁠⁠ ⁢⁩⁨⁢⁨⁦ ⁧⁠⁣⁩⁨⁥⁩⁠⁠⁩ ⁠⁠⁤⁩⁧⁦⁨⁢⁩⁧⁡⁢⁩
⁥⁥⁣⁢⁨⁡⁤
⁧⁡⁥⁡⁥⁩⁧⁤ ⁨⁡⁢⁠⁤⁦⁥⁠⁦ ⁥⁩⁢⁥⁥⁥⁨ ⁡⁢ ⁥⁦⁩⁧⁧

⁡⁦⁣⁥⁤⁧⁡

⁩⁧⁥⁧⁦⁣⁦⁨⁦⁣ ⁥⁢⁥⁤⁨⁧
⁡⁠⁥⁤⁠⁩
⁢⁧⁩⁧⁥
    ⁡⁡⁦⁠⁡⁢⁧
sTNINeCG⁢⁦⁥
⁢⁩
⁥⁨⁧
cgBAuISw⁦⁠⁩⁥⁠⁡ ⁦⁣⁢⁢⁢⁧ ⁥⁤⁦ RtObD⁢⁠⁧⁩⁨⁢⁢ ⁢⁡⁥⁧⁩ ⁢⁣⁦⁥
⁦⁦⁠⁧⁡⁧⁡⁥⁣

⁢⁢⁣⁣⁥

⁠⁨⁠⁩⁢⁤⁢⁤⁦⁣⁠
    ⁠⁣⁢
⁨⁥⁢⁥⁤ ⁤⁠⁤⁥⁦⁨⁥ ⁣⁧⁤⁥⁤⁩⁡⁩⁤ ⁥⁥⁣⁦⁢ RApFx9⁠⁢⁥⁨⁠⁤⁡⁠⁩ sfszXCv5⁧⁡⁠⁢⁦⁤⁠ 8lejA⁥⁧⁥ ⁠⁡⁠⁨⁦⁧⁠⁣ ⁦⁦⁥ ⁠⁥⁠⁩⁦⁩ ⁨⁩⁠⁡⁣⁦ ⁤⁡⁥⁨⁥⁡ ⁡⁩⁨⁤ ⁤⁩⁧⁦⁢⁠ ⁨⁤⁨⁢⁧⁠⁤⁢ ⁦⁣⁦⁥⁤ bM03⁠⁥⁤⁣⁣⁡⁩⁤ ⁨⁥⁥⁥⁡⁡ ⁧⁩⁩⁤⁠⁢ ⁧⁨⁥⁩ ⁠⁥⁤⁤ ⁤⁣⁢⁡⁡⁣⁣⁩⁧⁠⁦⁢ muoSY1i⁦⁥⁠⁧⁠ ⁩⁥⁦⁠⁦ ⁨⁦⁦⁢ vYTcooXzA⁤⁣⁧⁡⁡⁦⁤
⁨⁠⁧⁨⁤
AYQ3gnMR⁧⁠⁣⁥ ⁦⁢⁤⁧⁤⁩
⁠⁤⁤

xDsToeNDG7⁥⁠⁢

⁧⁨⁥⁨


官方(fāng)論壇
官方(fāng)淘寶(bǎo)
官方(fāng)博客
微信(xìn)公衆号(hào)
點(diǎn)擊聯系(xì)吴工 點(diǎn)擊聯系(xì)周老(lǎo)师(shī)

至(zhì)簡設計(jì)法原理與(yǔ)應(yìng)用(yòng)--3.12信(xìn)号(hào)發(fà)生(shēng)器和(hé)DA轉(zhuǎn)換--明(míng)德揚科教(minyingyiyuan.com)

發(fà)布(bù)时(shí)間(jiān):2020-07-31   作者(zhě):admin 浏覽量(liàng):
第(dì)一(yī)章(zhāng) 信(xìn)号(hào)發(fà)生(shēng)器和(hé)DA轉(zhuǎn)換

第(dì)1节(jié) 項目背景


1.1 信(xìn)号(hào)發(fà)生(shēng)器
信(xìn)号(hào)發(fà)生(shēng)器是(shì)一(yī)種(zhǒng)能(néng)提(tí)供各(gè)種(zhǒng)頻率、輸出(chū)電(diàn)平的(de)電(diàn)信(xìn)号(hào)的(de)設備,又稱信(xìn)号(hào)源或(huò)振蕩器。其在(zài)各(gè)種(zhǒng)電(diàn)信(xìn)系(xì)統的(de)振幅、頻率、傳輸特(tè)性(xìng)等電(diàn)參數以(yǐ)及(jí)元(yuán)器件(jiàn)的(de)特(tè)性(xìng)與(yǔ)參數的(de)测量(liàng)中(zhōng)得到(dào)了(le)廣泛的(de)應(yìng)用(yòng)。

直(zhí)接數字(zì)式頻率合成(chéng)器(Direct Digital Synthesizer,DDS)是(shì)一(yī)項關(guān)鍵的(de)數字(zì)化(huà)技術(shù),其将先(xiān)進(jìn)的(de)數字(zì)处理理論與(yǔ)方(fāng)法引入(rù)頻率合成(chéng)技術(shù),通(tòng)过(guò)數/模轉(zhuǎn)換器将一(yī)系(xì)列數字(zì)量(liàng)形式的(de)信(xìn)号(hào)轉(zhuǎn)換成(chéng)模拟量(liàng)形式的(de)信(xìn)号(hào)。
图(tú)3.12-1DDS实現(xiàn)原理

DDS的(de)輸入(rù)是(shì)頻率控制字(zì),其用(yòng)来(lái)控制相位累加器每次(cì)增加的(de)相位值,也(yě)相當于(yú)一(yī)个(gè)步進(jìn)值。上(shàng)图(tú)就(jiù)是(shì)一(yī)个(gè)典型的(de)DDS工程,DDS工程一(yī)般可(kě)包(bāo)括相位累加器、信(xìn)号(hào)轉(zhuǎn)換器和(hé)DAC三(sān)部(bù)分(fēn),其具體(tǐ)功能(néng)为(wèi):

相位累加器:每来(lái)一(yī)个(gè)时(shí)鐘(zhōng)脈沖,在(zài)原来(lái)相位值的(de)基礎上(shàng)会(huì)加上(shàng)步進(jìn)得到(dào)最(zuì)新的(de)相位值,随後(hòu)将新的(de)相位值輸出(chū)給(gěi)信(xìn)号(hào)轉(zhuǎn)換器。N位的(de)相位累加器由(yóu)N位加法器和(hé)N位累加寄存器組成(chéng),其具體(tǐ)工作过(guò)程为(wèi):每来(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)産生(shēng)的(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ō)形。

信(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)相位值可(kě)以(yǐ)輸出(chū)該相位值所(suǒ)对(duì)應(yìng)的(de)信(xìn)号(hào)幅值。例如(rú),可(kě)将一(yī)个(gè)完整周期(qī)的(de)正(zhèng)弦波(bō)等距離分(fēn)成(chéng)128份并保存到(dào)轉(zhuǎn)換器的(de)ROM當中(zhōng),當相位值为(wèi)0时(shí),則輸出(chū)相位为(wèi)0所(suǒ)應(yìng)对(duì)的(de)幅度(dù)值,當相位为(wèi)100时(shí),則輸出(chū)相位为(wèi)100所(suǒ)对(duì)應(yìng)的(de)幅度(dù)值。

1.2 DA轉(zhuǎn)換
至(zhì)簡設計(jì)法教学板上(shàng)的(de)DAC芯片(piàn)型号(hào)为(wèi)DA9709,这(zhè)是(shì)一(yī)款双(shuāng)通(tòng)道(dào),位宽(kuān)8bit的(de)芯片(piàn),速率高(gāo)达(dá)125MSPS,能(néng)够滿足常用(yòng)信(xìn)号(hào)發(fà)生(shēng)器、濾波(bō)信(xìn)号(hào)輸出(chū)等需求。实際位置如(rú)下(xià)所(suǒ)示。
图(tú)3.12-2教学板DA接口(kǒu)

該芯片(piàn)采用(yòng)48引脚小型LQFP封(fēng)裝(zhuāng),具有(yǒu)高(gāo)交流、直(zhí)流性(xìng)能(néng)。DA9709原理图(tú)及(jí)其與(yǔ)FPGA的(de)連(lián)接图(tú)如(rú)下(xià)所(suǒ)示。
图(tú)3.12-3教学板DA9709原理图(tú)

图(tú)3.12-4教学板DA9709與(yǔ)FPGA連(lián)接图(tú)

其中(zhōng)DAC芯片(piàn)與(yǔ)FPGA相連(lián)的(de)信(xìn)号(hào)为(wèi):DA_CLKADA_CLKBDAC_DA7~0DAC_DB7~0DA_WRADA_WRB DAC_MODE和(hé)DAC_SLEEP
表(biǎo)3.12-1DAC芯片(piàn)與(yǔ)FPGA相連(lián)管(guǎn)脚及(jí)其作用(yòng)
DA9709管(guǎn)脚
原理图(tú)信(xìn)号(hào)
FPGA管(guǎn)脚
作用(yòng)
MODE
DAC_MODE
Y4
DA9709的(de)工作模式。當为(wèi)高(gāo)電(diàn)平时(shí),表(biǎo)示双(shuāng)通(tòng)道(dào)模式,此(cǐ)时(shí)通(tòng)过(guò)DADB两(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í),DA9709進(jìn)入(rù)睡眠模式,此(cǐ)时(shí)不(bù)工作。
當低電(diàn)平时(shí),DA9709是(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.3 DA9709的(de)时(shí)序
DA9709的(de)控制时(shí)序如(rú)下(xià)图(tú)所(suǒ)示。
图(tú)3.12-5DA9709接口(kǒu)时(shí)序图(tú)

在(zài)双(shuāng)通(tòng)道(dào)模式中(zhōng)通(tòng)道(dào)A和(hé)通(tòng)道(dào)B如(rú)同(tóng)两(liǎng)个(gè)独立的(de)DA芯片(piàn)。其中(zhōng)DA_CLKADAC_DA7~0DAC_WR_A用(yòng)于(yú)控制通(tòng)道(dào)ADA_CLKBDA_DB7~0DA_WRB用(yòng)于(yú)控制通(tòng)道(dào)B

以(yǐ)控制通(tòng)道(dào)A为(wèi)例,按照时(shí)序图(tú)的(de)要(yào)求先(xiān)将數據(jù)輸出(chū)到(dào)DAC_DA7~0,經(jīng)过(guò)ts时(shí)間(jiān)後(hòu)将DAC_WRA和(hé)DA_CLKA拉高(gāo),此(cǐ)时(shí)DAC可(kě)以(yǐ)将數據(jù)鎖存,經(jīng)过(guò)一(yī)段(duàn)时(shí)間(jiān)後(hòu)輸出(chū)數據(jù)所(suǒ)对(duì)應(yìng)的(de)電(diàn)流,其經(jīng)过(guò)電(diàn)路(lù)轉(zhuǎn)換可(kě)以(yǐ)變(biàn)成(chéng)对(duì)應(yìng)的(de)模拟電(diàn)壓值。

时(shí)序图(tú)中(zhōng)要(yào)注意(yì)以(yǐ)下(xià)幾(jǐ)點(diǎn)(數據(jù)手(shǒu)册有(yǒu)詳细(xì)说(shuō)明(míng)):

1. DA_CLKA超前(qián)或(huò)者(zhě)同(tóng)时(shí)與(yǔ)DA_WRA由(yóu)0變(biàn)1

2. 查詢數據(jù)手(shǒu)册可(kě)知:图(tú)中(zhōng)tSDAC_WRA上(shàng)升(shēng)沿前(qián)數據(jù)保持(chí)不(bù)變(biàn)的(de)时(shí)間(jiān))、tHDAC_WRA上(shàng)升(shēng)沿後(hòu)數據(jù)保持(chí)不(bù)變(biàn)的(de)时(shí)間(jiān))、tLPWDAC_WRA的(de)高(gāo)電(diàn)平时(shí)間(jiān))、tCPWDAC_CLKA的(de)高(gāo)電(diàn)平时(shí)間(jiān))等參數如(rú)图(tú)3.12- 6所(suǒ)示。從图(tú)中(zhōng)可(kě)以(yǐ)看(kàn)到(dào)tS的(de)时(shí)間(jiān)为(wèi)至(zhì)少(shǎo)2nstH时(shí)間(jiān)为(wèi)至(zhì)少(shǎo)1.5nstLPWtCPW时(shí)間(jiān)为(wèi)至(zhì)少(shǎo)3.5ns。在(zài)進(jìn)行設計(jì)时(shí)可(kě)以(yǐ)将这(zhè)些數值設置的(de)稍大一(yī)些從而(ér)留有(yǒu)一(yī)定(dìng)的(de)裕量(liàng)。
图(tú)3.12-6DA9709时(shí)序參數
通(tòng)道(dào)B的(de)时(shí)序要(yào)求與(yǔ)通(tòng)道(dào)A相同(tóng),僅控制信(xìn)号(hào)有(yǒu)所(suǒ)區(qū)别。

在(zài)設計(jì)之前(qián),除了(le)了(le)解(jiě)數字(zì)接口(kǒu)时(shí)序還(huán)需要(yào)清(qīng)楚數字(zì)量(liàng)與(yǔ)模拟電(diàn)壓幅值之間(jiān)的(de)轉(zhuǎn)換關(guān)系(xì)。至(zhì)簡設計(jì)法教学板的(de)DA9709的(de)两(liǎng)个(gè)通(tòng)道(dào)均支持(chí)0.48~2.2V的(de)電(diàn)壓輸出(chū),这(zhè)一(yī)輸出(chū)電(diàn)壓與(yǔ)輸入(rù)數據(jù)的(de)關(guān)系(xì)可(kě)用(yòng)下(xià)面(miàn)的(de)公式進(jìn)行表(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
表(biǎo)3.12-2通(tòng)道(dào)輸出(chū)電(diàn)壓與(yǔ)輸入(rù)數據(jù)的(de)对(duì)應(yìng)關(guān)系(xì)
DAC_DA/B
輸出(chū)電(diàn)壓V
DAC_DA/B
輸出(chū)電(diàn)壓V
0
2.2
64
1.77
8
2.15
128
1.34
16
2.02
192
0.91
32
1.99
255
0.48

由(yóu)公式可(kě)見(jiàn),輸出(chū)電(diàn)壓與(yǔ)DAC_DA/B的(de)值成(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)注意(yì)的(de)是(shì),此(cǐ)範圍的(de)電(diàn)壓是(shì)由(yóu)于(yú)外(wài)圍硬(yìng)件(jiàn)電(diàn)路(lù)特(tè)性(xìng)的(de)原因(yīn)導致(zhì)的(de),不(bù)同(tóng)電(diàn)路(lù)对(duì)應(yìng)的(de)電(diàn)壓範圍有(yǒu)所(suǒ)不(bù)同(tóng)。

第(dì)2节(jié) 設計(jì)目标(biāo)
在(zài)正(zhèng)式学習本(běn)設計(jì)之前(qián),带(dài)領同(tóng)学们(men)先(xiān)来(lái)确定(dìng)設計(jì)的(de)功能(néng)目标(biāo)。在(zài)此(cǐ)再次(cì)強(qiáng)調明(míng)确設計(jì)目标(biāo)的(de)重(zhòng)要(yào)性(xìng),至(zhì)簡設計(jì)法旨在(zài)用(yòng)最(zuì)直(zhí)接最(zuì)簡潔的(de)方(fāng)法来(lái)达(dá)到(dào)預期(qī)功能(néng)。想(xiǎng)要(yào)实現(xiàn)这(zhè)一(yī)效果(guǒ)就(jiù)必須非(fēi)常清(qīng)晰地(dì)明(míng)确功能(néng)預期(qī)。如(rú)果(guǒ)不(bù)清(qīng)楚最(zuì)終(zhōng)想(xiǎng)要(yào)达(dá)到(dào)什麼(me)效果(guǒ),那(nà)麼(me)後(hòu)續的(de)讨論就(jiù)沒(méi)有(yǒu)任何的(de)意(yì)義。

本(běn)設計(jì)中(zhōng)采用(yòng)采樣(yàng)率大于(yú)100M的(de)示波(bō)器,将其連(lián)接到(dào)開(kāi)發(fà)板上(shàng),控制DA輸出(chū)不(bù)同(tóng)頻率的(de)正(zhèng)弦波(bō),示波(bō)器顯示出(chū)对(duì)應(yìng)波(bō)形。輸出(chū)方(fāng)式如(rú)下(xià):

連(lián)續輸出(chū)2个(gè)周期(qī)为(wèi)6.25MHz的(de)正(zhèng)弦波(bō),每个(gè)正(zhèng)弦波(bō)輸出(chū)8个(gè)采樣(yàng)點(diǎn);
連(lián)續輸出(chū)2个(gè)周期(qī)为(wèi)3.125MHz的(de)正(zhèng)弦波(bō),每个(gè)正(zhèng)弦波(bō)輸出(chū)16个(gè)采樣(yàng)點(diǎn);
連(lián)續輸出(chū)2个(gè)周期(qī)为(wèi)1.5625MHz的(de)正(zhèng)弦波(bō),每个(gè)正(zhèng)弦波(bō)輸出(chū)32个(gè)采樣(yàng)點(diǎn);
連(lián)續輸出(chū)2个(gè)周期(qī)为(wèi)781250Hz的(de)正(zhèng)弦波(bō),每个(gè)正(zhèng)弦波(bō)輸出(chū)64个(gè)采樣(yàng)點(diǎn);
連(lián)續輸出(chū)2个(gè)周期(qī)为(wèi)390625Hz的(de)正(zhèng)弦波(bō),每个(gè)正(zhèng)弦波(bō)輸出(chū)128个(gè)采樣(yàng)點(diǎn);
連(lián)續輸出(chū)2个(gè)周期(qī)为(wèi)195312.5Hz的(de)正(zhèng)弦波(bō),每个(gè)正(zhèng)弦波(bō)輸出(chū)128个(gè)采樣(yàng)點(diǎn)。
正(zhèng)弦波(bō)的(de)最(zuì)高(gāo)電(diàn)壓是(shì)2.2V,最(zuì)低電(diàn)壓是(shì)0.48V

開(kāi)發(fà)板連(lián)接示意(yì)图(tú)如(rú)下(xià)所(suǒ)示。

图(tú)3.12-7開(kāi)發(fà)板連(lián)接方(fāng)式


示波(bō)器的(de)連(lián)接示意(yì)图(tú)如(rú)下(xià)所(suǒ)示。

图(tú)3.12-8信(xìn)号(hào)發(fà)生(shēng)器連(lián)接效果(guǒ)图(tú)


信(xìn)号(hào)發(fà)生(shēng)器産生(shēng)正(zhèng)弦波(bō)效果(guǒ)图(tú)如(rú)下(xià)所(suǒ)示,每種(zhǒng)頻率的(de)正(zhèng)弦波(bō)連(lián)續出(chū)現(xiàn)2次(cì)且正(zhèng)弦波(bō)的(de)周期(qī)逐漸變(biàn)大

图(tú)3.12-9信(xìn)号(hào)發(fà)生(shēng)器産生(shēng)的(de)正(zhèng)弦波(bō)效果(guǒ)图(tú)


FPGA內(nèi)部(bù)設定(dìng)頻率会(huì)與(yǔ)示波(bō)器顯示頻率存在(zài)一(yī)定(dìng)偏差,这(zhè)屬于(yú)正(zhèng)常現(xiàn)象(xiàng)。以(yǐ)下(xià)是(shì)各(gè)个(gè)頻率下(xià)的(de)波(bō)形顯示效果(guǒ):

示波(bō)器顯示頻率为(wèi)6.25MHz时(shí)正(zhèng)弦波(bō):

图(tú)3.12-10f=6.25MHz效果(guǒ)图(tú)

示波(bō)器顯示頻率为(wèi)3.125MHz时(shí)正(zhèng)弦波(bō):

图(tú)3.12-11f=3.125MHz效果(guǒ)图(tú)

示波(bō)器顯示頻率为(wèi)1.5625MHz时(shí)正(zhèng)弦波(bō):

图(tú)3.12-12f=1.5625MHz效果(guǒ)图(tú)

示波(bō)器顯示頻率为(wèi)781250Hz时(shí)正(zhèng)弦波(bō):

图(tú)3.12-13f=781250Hz效果(guǒ)图(tú)

示波(bō)器顯示頻率为(wèi)390625Hz时(shí)正(zhèng)弦波(bō):

图(tú)3.12-14f=390625Hz效果(guǒ)图(tú)

示波(bō)器顯示頻率为(wèi)195312.5Hz时(shí)正(zhèng)弦波(bō):

图(tú)3.12-15f=195312.5Hz效果(guǒ)图(tú)


可(kě)以(yǐ)登陸至(zhì)簡設計(jì)法官网(wǎng)查看(kàn)上(shàng)板的(de)演示效果(guǒ)視頻:www.minyingyiyuan.com/xxxx

第(dì)3节(jié) 設計(jì)实現(xiàn)
本(běn)节(jié)依旧(jiù)会(huì)分(fēn)享詳细(xì)的(de)步驟與(yǔ)解(jiě)析以(yǐ)便初学者(zhě)在(zài)学会(huì)原理的(de)情(qíng)況下(xià)掌握設計(jì)方(fāng)法。希望读(dú)者(zhě)学会(huì)的(de)不(bù)僅是(shì)單个(gè)案(àn)例的(de)設計(jì),還(huán)有(yǒu)操作过(guò)程中(zhōng)的(de)一(yī)些設計(jì)理念及(jí)原理。希望同(tóng)学们(men)可(kě)以(yǐ)通(tòng)过(guò)本(běn)書(shū)掌握独立設計(jì)并完成(chéng)工程的(de)能(néng)力,将至(zhì)簡設計(jì)法運用(yòng)到(dào)今後(hòu)的(de)工作中(zhōng)去(qù)。已經(jīng)掌握了(le)原理,只(zhī)想(xiǎng)複習回(huí)顧設計(jì)步驟的(de)同(tóng)学也(yě)可(kě)以(yǐ)選擇直(zhí)接閱读(dú)第(dì)五(wǔ)节(jié)簡化(huà)版步驟分(fēn)享。在(zài)此(cǐ)读(dú)者(zhě)可(kě)根(gēn)據(jù)个(gè)人(rén)的(de)情(qíng)況選擇学習方(fāng)式。

3.1 頂层接口(kǒu)
新建目录(lù):D:mdy_bookdds_da,并該目录(lù)中(zhōng)新建一(yī)个(gè)名为(wèi)dds_da.v的(de)文(wén)件(jiàn)。用(yòng)GVIM打(dǎ)開(kāi)後(hòu)開(kāi)始編写代(dài)碼。这(zhè)里(lǐ)再次(cì)強(qiáng)調,建議初学者(zhě)不(bù)要(yào)对(duì)路(lù)徑名和(hé)文(wén)件(jiàn)名進(jìn)行其它(tā)更(gèng)改,請按照本(běn)書(shū)提(tí)供的(de)名稱進(jìn)行設置。因(yīn)为(wèi)更(gèng)改後(hòu)可(kě)能(néng)会(huì)出(chū)現(xiàn)中(zhōng)文(wén)路(lù)徑、空格路(lù)徑等非(fēi)法路(lù)徑問(wèn)題(tí),或(huò)者(zhě)有(yǒu)些文(wén)件(jiàn)名更(gèng)改後(hòu)会(huì)出(chū)現(xiàn)報錯的(de)現(xiàn)象(xiàng),而(ér)初学者(zhě)并不(bù)能(néng)很好(hǎo)的(de)發(fà)現(xiàn)并解(jiě)決問(wèn)題(tí)。因(yīn)此(cǐ)建議先(xiān)按照要(yào)求更(gèng)名保存,在(zài)多(duō)做了(le)幾(jǐ)个(gè)工程、熟悉了(le)各(gè)个(gè)步驟後(hòu),再進(jìn)行自(zì)己更(gèng)名的(de)操作。希望同(tóng)学们(men)不(bù)要(yào)想(xiǎng)當然,一(yī)时(shí)的(de)细(xì)心(xīn)会(huì)避免後(hòu)續出(chū)現(xiàn)的(de)一(yī)系(xì)列問(wèn)題(tí)。

分(fēn)析設計(jì)目标(biāo)可(kě)知在(zài)本(běn)設計(jì)中(zhōng)需要(yào)FPGA産生(shēng)控制DA9709的(de)電(diàn)壓,令DA9709的(de)通(tòng)道(dào)A産生(shēng)所(suǒ)对(duì)應(yìng)的(de)正(zhèng)弦波(bō),其具體(tǐ)要(yào)控制的(de)信(xìn)号(hào)包(bāo)括MODESLEEPCLK1WRT1DB7~0P1管(guǎn)脚。根(gēn)據(jù)設計(jì)目标(biāo)的(de)要(yào)求,整个(gè)工程需要(yào)以(yǐ)下(xià)信(xìn)号(hào):

使用(yòng)时(shí)鐘(zhōng)信(xìn)号(hào)clk連(lián)接到(dào)晶振来(lái)表(biǎo)示50M的(de)时(shí)鐘(zhōng)輸入(rù);使用(yòng)複位信(xìn)号(hào)rst_n連(lián)接到(dào)按鍵来(lái)表(biǎo)示工程的(de)複位;使用(yòng)dac_mode信(xìn)号(hào)連(lián)接到(dào)DA9709的(de)MODE管(guǎn)脚来(lái)控制其工作模式;使用(yòng)dac_sleep信(xìn)号(hào)連(lián)接到(dào)DA9709的(de)SLEEP管(guǎn)脚来(lái)控制其睡眠模式;使用(yòng)dac_clka信(xìn)号(hào)連(lián)接到(dào)DA9709的(de)CLK1管(guǎn)脚来(lái)控制通(tòng)道(dào)A的(de)时(shí)鐘(zhōng);使用(yòng)dac_wra信(xìn)号(hào)連(lián)接到(dào)DA9709的(de)WRT1管(guǎn)脚来(lái)控制通(tòng)道(dào)A的(de)写使能(néng);使用(yòng)8位信(xìn)号(hào)dac_da連(lián)接到(dào)DA9709的(de)DB7~0P1管(guǎn)脚来(lái)控制通(tòng)道(dào)A的(de)写數據(jù)。

綜上(shàng)所(suǒ)述,本(běn)設計(jì)一(yī)共(gòng)需要(yào)7个(gè)信(xìn)号(hào),时(shí)鐘(zhōng)信(xìn)号(hào)clk,複位信(xìn)号(hào)rst_ndac_modedac_sleepdac_clkadac_wra和(hé)dac_da;其中(zhōng)dac_da信(xìn)号(hào)位宽(kuān)为(wèi)1,其他(tā)信(xìn)号(hào)的(de)位宽(kuān)都是(shì)1。信(xìn)号(hào)和(hé)硬(yìng)件(jiàn)的(de)对(duì)應(yìng)關(guān)系(xì)如(rú)下(xià)表(biǎo)所(suǒ)示。
表(biǎo)3.12-3信(xìn)号(hào)和(hé)管(guǎn)脚關(guān)系(xì)
器件(jiàn)
DA9709管(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,将以(yǐ)上(shàng)7个(gè)信(xìn)号(hào)写入(rù)在(zài)模块(kuài)接口(kǒu)列表(biǎo)中(zhōng),具體(tǐ)頂层代(dài)碼如(rú)下(xià)所(suǒ)示:
1
2
3
4
5
6
7
8
9
module dds_da[size=9.5000pt](
clk  ,
rst_n  ,
dac_mode ,
dac_clka  ,
dac_da  ,
dac_wra  ,
dac_sleep
           );

随後(hòu)聲明(míng)信(xìn)号(hào)的(de)輸入(rù)輸出(chū)屬性(xìng)。这(zhè)里(lǐ)需要(yào)聲明(míng)对(duì)于(yú)FPGA来(lái)说(shuō)这(zhè)一(yī)信(xìn)号(hào)屬于(yú)輸入(rù)還(huán)是(shì)輸出(chū),如(rú)果(guǒ)是(shì)輸入(rù)信(xìn)号(hào),則聲明(míng)其为(wèi)input,如(rú)果(guǒ)是(shì)輸出(chū)信(xìn)号(hào),則聲明(míng)其为(wèi)output。在(zài)本(běn)設計(jì)中(zhōng),由(yóu)于(yú)clk是(shì)外(wài)部(bù)的(de)晶振輸入(rù)給(gěi)FPGA的(de),因(yīn)此(cǐ)在(zài)FPGA中(zhōng)clk是(shì)1位的(de)輸入(rù)信(xìn)号(hào)input;同(tóng)樣(yàng)地(dì),rst_n是(shì)外(wài)部(bù)按鍵給(gěi)FPGA的(de),因(yīn)此(cǐ)在(zài)FPGA中(zhōng)rst_n也(yě)是(shì)1位的(de)輸入(rù)信(xìn)号(hào)inputdac_da是(shì)FPGA産生(shēng)用(yòng)来(lái)控制DA9709的(de)信(xìn)号(hào),因(yīn)此(cǐ)其为(wèi)8位的(de)輸出(chū)信(xìn)号(hào)output,同(tóng)理,dac_modedac_clkadac_wradac_sleep是(shì)1位輸出(chū)信(xìn)号(hào)output。綜上(shàng)所(suǒ)述,補充輸入(rù)輸出(chū)端口(kǒu)定(dìng)義,其具體(tǐ)代(dài)碼如(rú)下(xià):
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ì)
首先(xiān),来(lái)分(fēn)析一(yī)下(xià)DAC的(de)輸出(chū),以(yǐ)頻率为(wèi)195312.5Hz的(de)正(zhèng)弦波(bō)为(wèi)例進(jìn)行講解(jiě)。在(zài)这(zhè)个(gè)頻率下(xià),一(yī)个(gè)完整的(de)正(zhèng)弦波(bō)持(chí)續时(shí)間(jiān)是(shì)T=1/f1/195312.5Hz=0.00000512s=5120ns。設計(jì)目标(biāo)中(zhōng)要(yào)求每个(gè)波(bō)形周期(qī)要(yào)等間(jiān)隔輸出(chū)128个(gè)點(diǎn),因(yīn)此(cǐ)每隔5120ns/128=40ns就(jiù)要(yào)輸出(chū)一(yī)个(gè)點(diǎn)。由(yóu)于(yú)工程輸入(rù)的(de)时(shí)鐘(zhōng)是(shì)50MHz,其周期(qī)是(shì)20ns,故每隔40ns/20ns=2个(gè)时(shí)鐘(zhōng)就(jiù)要(yào)輸出(chū)一(yī)个(gè)點(diǎn)。确定(dìng)了(le)輸出(chū)數據(jù)的(de)周期(qī)後(hòu)需要(yào)明(míng)确每个(gè)點(diǎn)輸出(chū)數值,從而(ér)实現(xiàn)輸出(chū)指定(dìng)的(de)電(diàn)壓幅值。为(wèi)了(le)簡化(huà)思(sī)想(xiǎng),可(kě)以(yǐ)先(xiān)假定(dìng)輸出(chū)數字(zì)值與(yǔ)DAC輸出(chū)電(diàn)壓成(chéng)正(zhèng)比。

衆所(suǒ)周知,正(zhèng)弦信(xìn)号(hào)的(de)數学表(biǎo)达(dá)式是(shì)y=sin(x),周期(qī)为(wèi)2π。由(yóu)于(yú)其等間(jiān)隔分(fēn)为(wèi)128个(gè)點(diǎn),所(suǒ)以(yǐ)可(kě)表(biǎo)示为(wèi)y=sin(2π*i/128)。由(yóu)于(yú)这(zhè)款DAC采用(yòng)8位原碼輸入(rù),不(bù)能(néng)有(yǒu)負數,因(yīn)此(cǐ)将标(biāo)準正(zhèng)弦信(xìn)号(hào)向(xiàng)上(shàng)平移一(yī)个(gè)坐标(biāo)将其變(biàn)为(wèi)y=sin(2π*i/128)+1。这(zhè)里(lǐ)還(huán)需要(yào)注意(yì)一(yī)點(diǎn),當輸出(chū)最(zuì)大值255时(shí)應(yìng)正(zhèng)好(hǎo)对(duì)應(yìng)最(zuì)大電(diàn)壓幅值,即保證y的(de)最(zuì)大值为(wèi)255,可(kě)将公式表(biǎo)示成(chéng):y=(sin(2π*i/128)+1)*255/2其中(zhōng)i的(de)範圍为(wèi)0~127,将該公式命名为(wèi)公式一(yī),按照公式可(kě)以(yǐ)得到(dào)128个(gè)點(diǎn)的(de)幅度(dù)值如(rú)下(xià)表(biǎo)所(suǒ)示。

表(biǎo)3.12-4DAC輸出(chū)采樣(yàng)點(diǎn)对(duì)應(yìng)幅度(dù)值
采樣(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

根(gēn)據(jù)輸出(chū)電(diàn)壓與(yǔ)輸出(chū)數字(zì)量(liàng)數值的(de)關(guān)系(xì)可(kě)知两(liǎng)者(zhě)成(chéng)反(fǎn)比,因(yīn)此(cǐ)DAC_DA = 255 - sin_data。这(zhè)就(jiù)是(shì)最(zuì)終(zhōng)輸出(chū)給(gěi)DA芯片(piàn)的(de)數據(jù)值,即dac_da信(xìn)号(hào)。

綜上(shàng)所(suǒ)述,想(xiǎng)要(yào)産生(shēng)頻率为(wèi)195312.5Hz的(de)正(zhèng)弦波(bō),即每隔2个(gè)时(shí)鐘(zhōng)FPGA輸出(chū)信(xìn)号(hào)dac_da,需要(yào)先(xiān)每隔1个(gè)點(diǎn)從表(biǎo)3.12- 4選出(chū)sin_data,再通(tòng)过(guò)(255-sin_data)得到(dào)dac_da,共(gòng)輸出(chū)128个(gè)點(diǎn),組成(chéng)一(yī)个(gè)最(zuì)大電(diàn)壓值2.2V,最(zuì)小電(diàn)壓值0.48V的(de)正(zhèng)弦波(bō)。将同(tóng)樣(yàng)的(de)操作重(zhòng)複两(liǎng)次(cì)即可(kě)連(lián)續輸出(chū)2个(gè)周期(qī)正(zhèng)弦波(bō)。

按照相同(tóng)的(de)方(fāng)法来(lái)分(fēn)析頻率为(wèi)6.25MHz的(de)正(zhèng)弦波(bō)。可(kě)知一(yī)个(gè)頻率为(wèi)6.25MHz的(de)正(zhèng)弦波(bō)周期(qī)等于(yú)1/6.25MHz=0.0000016s=160ns。設計(jì)目标(biāo)中(zhōng)要(yào)求一(yī)个(gè)周期(qī)輸出(chū)8个(gè)點(diǎn),即每隔160ns/8=20ns輸出(chū)一(yī)个(gè)點(diǎn)。由(yóu)于(yú)工程的(de)輸入(rù)时(shí)鐘(zhōng)是(shì)50MHz,周期(qī)是(shì)20ns,本(běn)設計(jì)中(zhōng)每隔20ns/20ns=1个(gè)时(shí)鐘(zhōng)就(jiù)要(yào)輸出(chū)一(yī)个(gè)點(diǎn)。因(yīn)此(cǐ)産生(shēng)頻率为(wèi)6.25MHz的(de)正(zhèng)弦波(bō)需要(yào)每隔1个(gè)时(shí)鐘(zhōng)輸出(chū)一(yī)个(gè)電(diàn)壓值,共(gòng)輸出(chū)8个(gè)點(diǎn)組成(chéng)一(yī)个(gè)正(zhèng)弦波(bō),根(gēn)據(jù)設計(jì)要(yào)求本(běn)設計(jì)需要(yào)連(lián)續産生(shēng)2个(gè)相同(tóng)頻率正(zhèng)弦波(bō)。

接下(xià)来(lái)計(jì)算每个(gè)點(diǎn)对(duì)應(yìng)的(de)幅度(dù)值。開(kāi)發(fà)板的(de)輸出(chū)電(diàn)壓在(zài)0.48~2.2V之間(jiān),最(zuì)低值是(shì)0.48V,最(zuì)高(gāo)值是(shì)2.2V。将一(yī)个(gè)标(biāo)準的(de)正(zhèng)弦波(bō)向(xiàng)上(shàng)移動(dòng)1个(gè)單位,使其範圍變(biàn)成(chéng)0~2後(hòu)等間(jiān)隔取(qǔ)8个(gè)點(diǎn)采樣(yàng)點(diǎn)i,則采樣(yàng)點(diǎn)間(jiān)隔为(wèi)2*π*i/8,使用(yòng)代(dài)碼表(biǎo)示为(wèi)2*pi/8。用(yòng)8位信(xìn)号(hào)sin_data表(biǎo)示相應(yìng)采樣(yàng)點(diǎn)的(de)幅度(dù)值,其表(biǎo)示方(fāng)式为(wèi):sin_data=(sin(2*pi/8)+1)*(255/2)=(sin(2*pi*16/128) + 1) * (255/2)i的(de)範圍为(wèi)0~7,此(cǐ)处将該公式命名为(wèi)公式二(èr)。

計(jì)算出(chū)的(de)公式二(èr)对(duì)應(yìng)值如(rú)下(xià)表(biǎo)所(suǒ)示。可(kě)以(yǐ)看(kàn)出(chū):sin_data值在(zài)表(biǎo)3.12- 4中(zhōng)有(yǒu)所(suǒ)體(tǐ)現(xiàn),但并不(bù)是(shì)表(biǎo)3.12- 4的(de)連(lián)續值,而(ér)是(shì)每間(jiān)隔16个(gè)點(diǎn)進(jìn)行一(yī)次(cì)取(qǔ)值,共(gòng)取(qǔ)8个(gè)。观察設計(jì)目标(biāo)可(kě)以(yǐ)發(fà)現(xiàn)最(zuì)多(duō)需要(yào)出(chū)現(xiàn)的(de)采樣(yàng)點(diǎn)數量(liàng)为(wèi)128,在(zài)前(qián)文(wén)中(zhōng)其对(duì)應(yìng)幅度(dù)值均已列出(chū),在(zài)整个(gè)設計(jì)中(zhōng)可(kě)以(yǐ)參考此(cǐ)表(biǎo)格,在(zài)不(bù)同(tóng)的(de)波(bō)形中(zhōng)取(qǔ)对(duì)應(yìng)的(de)采樣(yàng)點(diǎn)。

表(biǎo)3.12-5公式二(èr)得到(dào)的(de)对(duì)應(yìng)幅度(dù)值
采樣(yàng)點(diǎn)i
sin_data
16進(jìn)制)
采樣(yàng)點(diǎn)i
sin_data
16進(jìn)制)
0
7F
4
23
1
DA
5
1
2
FE
6
2A
3
7D
7
7F


綜上(shàng)所(suǒ)述,想(xiǎng)要(yào)産生(shēng)頻率为(wèi)6.25MHz的(de)正(zhèng)弦波(bō),即每隔1个(gè)时(shí)鐘(zhōng)FPGA輸出(chū)信(xìn)号(hào)dac_da。需要(yào)先(xiān)每隔16个(gè)點(diǎn)從表(biǎo)3.12- 4取(qǔ)值得到(dào)sin_data,再通(tòng)过(guò)(255-sin_data)得到(dào)dac_da。共(gòng)輸出(chū)8个(gè)點(diǎn)組成(chéng)一(yī)个(gè)正(zhèng)弦波(bō),每次(cì)連(lián)續輸出(chū)2个(gè)正(zhèng)弦波(bō)。

掌握了(le)設計(jì)方(fāng)法則按照这(zhè)个(gè)思(sī)路(lù)分(fēn)析所(suǒ)有(yǒu)需求如(rú)下(xià):

連(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)FPGA輸出(chū)信(xìn)号(hào)dac_da,一(yī)共(gòng)輸出(chū)128个(gè)點(diǎn)組成(chéng)一(yī)个(gè)正(zhèng)弦波(bō),每次(cì)連(lián)續産生(shēng)2个(gè)正(zhèng)弦波(bō)。dac_da的(de)産生(shēng)方(fāng)式为(wèi),從表(biǎo)3.12- 4得到(dào)sin_data,再通(tòng)过(guò)(255-sin_data)得到(dào)dac_da

連(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)FPGA輸出(chū)信(xìn)号(hào)dac_da,一(yī)共(gòng)輸出(chū)128个(gè)點(diǎn)組成(chéng)一(yī)个(gè)正(zhèng)弦波(bō),每次(cì)連(lián)續産生(shēng)2个(gè)正(zhèng)弦波(bō)。dac_da的(de)産生(shēng)方(fāng)式为(wèi),每隔1个(gè)點(diǎn)從表(biǎo)3.12- 4取(qǔ)值得到(dào)sin_data,再通(tòng)过(guò)(255-sin_data)得到(dào)dac_da

連(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)FPGA輸出(chū)信(xìn)号(hào)dac_da,一(yī)共(gòng)輸出(chū)64个(gè)點(diǎn)組成(chéng)一(yī)个(gè)正(zhèng)弦波(bō),每次(cì)連(lián)續産生(shēng)2个(gè)正(zhèng)弦波(bō)。dac_da的(de)産生(shēng)方(fāng)式为(wèi),每隔2个(gè)點(diǎn)從表(biǎo)3.12- 4取(qǔ)值得到(dào)sin_data,再通(tòng)过(guò)(255-sin_data)得到(dào)dac_da

依次(cì)類(lèi)推,連(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)FPGA輸出(chū)信(xìn)号(hào)dac_da,一(yī)共(gòng)輸出(chū)8个(gè)點(diǎn)組成(chéng)一(yī)个(gè)正(zhèng)弦波(bō),每次(cì)連(lián)續産生(shēng)2个(gè)正(zhèng)弦波(bō);dac_da的(de)産生(shēng)方(fāng)式为(wèi),每隔16个(gè)點(diǎn)從表(biǎo)3.12- 4取(qǔ)值得到(dào)sin_data,再通(tòng)过(guò)(255-sin_data)得到(dào)dac_da

可(kě)以(yǐ)看(kàn)出(chū)取(qǔ)值方(fāng)法是(shì)有(yǒu)規律的(de),按照至(zhì)簡設計(jì)法中(zhōng)的(de)變(biàn)量(liàng)法思(sī)想(xiǎng),可(kě)以(yǐ)将上(shàng)文(wén)所(suǒ)述功能(néng)概括为(wèi):每隔x个(gè)时(shí)鐘(zhōng)輸出(chū)一(yī)个(gè)數值,一(yī)共(gòng)輸出(chū)y个(gè)點(diǎn)組成(chéng)一(yī)个(gè)正(zhèng)弦波(bō),每次(cì)連(lián)續産生(shēng)2个(gè)正(zhèng)弦波(bō)。根(gēn)據(jù)設計(jì)目标(biāo)可(kě)以(yǐ)得知一(yī)共(gòng)需要(yào)産生(shēng)6種(zhǒng)不(bù)同(tóng)頻率的(de)正(zhèng)弦波(bō),因(yīn)此(cǐ)需要(yào)一(yī)个(gè)計(jì)數器来(lái)進(jìn)行種(zhǒng)類(lèi)計(jì)數。

下(xià)面(miàn)按照變(biàn)量(liàng)思(sī)路(lù)来(lái)逐句(jù)設計(jì)相應(yìng)代(dài)碼。從“每隔x个(gè)时(shí)鐘(zhōng)輸出(chū)一(yī)个(gè)數值”这(zhè)一(yī)規律可(kě)知,需要(yào)使用(yòng)一(yī)个(gè)計(jì)數器cnt0来(lái)進(jìn)行时(shí)鐘(zhōng)計(jì)數。

至(zhì)簡設計(jì)法中(zhōng)計(jì)數器只(zhī)考慮两(liǎng)个(gè)因(yīn)素:加1条(tiáo)件(jiàn)和(hé)計(jì)數數量(liàng),只(zhī)要(yào)确定(dìng)相應(yìng)邏輯,就(jiù)可(kě)以(yǐ)完成(chéng)計(jì)數器代(dài)碼設計(jì)。首先(xiān)确定(dìng)計(jì)數器cnt0的(de)加1条(tiáo)件(jiàn):由(yóu)于(yú)該計(jì)數器在(zài)不(bù)停地(dì)計(jì)數,永遠(yuǎn)不(bù)停止,因(yīn)此(cǐ)可(kě)以(yǐ)認为(wèi)其加1条(tiáo)件(jiàn)是(shì)一(yī)直(zhí)有(yǒu)效的(de),可(kě)写成(chéng)assign add_cnt0==1。

这(zhè)里(lǐ)可(kě)能(néng)会(huì)有(yǒu)读(dú)者(zhě)提(tí)出(chū)疑問(wèn):加1条(tiáo)件(jiàn)的(de)概念是(shì)什麼(me)?这(zhè)里(lǐ)以(yǐ)停車位来(lái)進(jìn)行比喻,一(yī)般情(qíng)況下(xià)对(duì)每个(gè)停車位置会(huì)進(jìn)行对(duì)應(yìng)編号(hào),但是(shì)如(rú)果(guǒ)某个(gè)位置上(shàng)放(fàng)置了(le)一(yī)块(kuài)石(dàn)头(tóu)无法作为(wèi)停車位时(shí),該位置就(jiù)不(bù)能(néng)獲得对(duì)應(yìng)的(de)編号(hào)。反(fǎn)之則可(kě)以(yǐ)認为(wèi)停車位編号(hào)的(de)加1条(tiáo)件(jiàn)就(jiù)是(shì):对(duì)應(yìng)位置上(shàng)沒(méi)有(yǒu)石(dàn)头(tóu),其可(kě)以(yǐ)繼續的(de)進(jìn)行編号(hào),即assign add_cnt0 = 沒(méi)有(yǒu)石(dàn)头(tóu)。因(yīn)此(cǐ)如(rú)果(guǒ)在(zài)設計(jì)中(zhōng)計(jì)數器一(yī)直(zhí)沒(méi)有(yǒu)阻礙地(dì)進(jìn)行計(jì)數工作,就(jiù)可(kě)以(yǐ)認为(wèi)加1条(tiáo)件(jiàn)是(shì)一(yī)直(zhí)有(yǒu)效的(de)。

接下(xià)来(lái)确定(dìng)計(jì)數器cnt0的(de)計(jì)數數量(liàng),從前(qián)文(wén)總(zǒng)結得到(dào)的(de)規律“每x个(gè)时(shí)鐘(zhōng)輸出(chū)一(yī)个(gè)數值”可(kě)知計(jì)數器每數x个(gè)完成(chéng)一(yī)次(cì)計(jì)數,因(yīn)此(cǐ)这(zhè)里(lǐ)cnt0的(de)計(jì)數數量(liàng)为(wèi)x。

确定(dìng)好(hǎo)了(le)加1条(tiáo)件(jiàn)和(hé)計(jì)數數量(liàng)後(hòu)開(kāi)始進(jìn)行代(dài)碼編写。相信(xìn)各(gè)位往常都是(shì)一(yī)行行輸入(rù)代(dài)碼,但是(shì)至(zhì)簡設計(jì)法有(yǒu)一(yī)个(gè)小技巧,可(kě)以(yǐ)为(wèi)編写代(dài)碼省(shěng)去(qù)不(bù)少(shǎo)时(shí)間(jiān),并且一(yī)定(dìng)程度(dù)上(shàng)降低了(le)代(dài)碼的(de)出(chū)錯率。至(zhì)簡設計(jì)法将日(rì)常代(dài)碼中(zhōng)常用(yòng)到(dào)的(de)固定(dìng)部(bù)分(fēn)做成(chéng)了(le)模板,進(jìn)行代(dài)碼編程时(shí)可(kě)以(yǐ)調用(yòng)相應(yìng)模板後(hòu)根(gēn)據(jù)邏輯輸入(rù)对(duì)應(yìng)設計(jì)的(de)變(biàn)量(liàng)将代(dài)碼補充完整。这(zhè)里(lǐ)就(jiù)可(kě)以(yǐ)用(yòng)模板編写計(jì)數器代(dài)碼,感(gǎn)受一(yī)下(xià)这(zhè)个(gè)炫酷的(de)功能(néng)。

在(zài)命令模式下(xià)輸入(rù)“:Mdyjsq”,點(diǎn)擊回(huí)車後(hòu)就(jiù)調出(chū)了(le)对(duì)應(yìng)模板,如(rú)下(xià)图(tú)所(suǒ)示。将本(běn)案(àn)例中(zhōng)的(de)變(biàn)量(liàng)填到(dào)模板里(lǐ)面(miàn),就(jiù)可(kě)以(yǐ)得到(dào)完整正(zhèng)确的(de)計(jì)數器代(dài)碼。

图(tú)3.12-16至(zhì)簡設計(jì)法調用(yòng)計(jì)數器代(dài)碼模板


補充完整後(hòu)得到(dào)計(jì)數器cnt0的(de)代(dài)碼如(rú)下(xià)。
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
[size=9.5000pt]
assign add_cnt0 = 1;
assign end_cnt0 = add_cnt0 && cnt0== x-1;

由(yóu)“一(yī)共(gòng)輸出(chū)y个(gè)點(diǎn)”可(kě)以(yǐ)确定(dìng)還(huán)需要(yào)一(yī)个(gè)計(jì)數器cnt1来(lái)計(jì)數輸出(chū)的(de)點(diǎn)數。已知在(zài)x个(gè)时(shí)鐘(zhōng)的(de)时(shí)候輸出(chū)对(duì)應(yìng)的(de)y个(gè)點(diǎn),因(yīn)此(cǐ)cnt1的(de)加1条(tiáo)件(jiàn)是(shì)“數到(dào)x个(gè)时(shí)鐘(zhōng)”,即end_cnt0。該計(jì)數器數完对(duì)應(yìng)的(de)y後(hòu)就(jiù)可(kě)以(yǐ)進(jìn)入(rù)下(xià)一(yī)个(gè)循环(huán)。繼續調用(yòng)至(zhì)簡設計(jì)法模板,在(zài)命令模式下(xià)輸入(rù)“:Mdyjsq”,點(diǎn)擊回(huí)車,就(jiù)調出(chū)了(le)对(duì)應(yìng)模板,将“add_cnt1”和(hé)“end_cnt1”補充完整,得到(dào)計(jì)數器cnt2的(de)代(dài)碼如(rú)下(xià):
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
[size=9.5000pt]
assign add_cnt1 = end_cnt0;
assign end_cnt1 = add_cnt1 && cnt1== y-1;

接下(xià)来(lái),由(yóu)“每个(gè)要(yào)産生(shēng)要(yào)連(lián)續産生(shēng)2个(gè)正(zhèng)弦波(bō)”可(kě)以(yǐ)看(kàn)出(chū)需要(yào)一(yī)个(gè)計(jì)數器cnt2来(lái)計(jì)數2个(gè)正(zhèng)弦波(bō)。已知一(yī)个(gè)正(zhèng)弦波(bō)由(yóu)y个(gè)點(diǎn)組成(chéng),數完y个(gè)點(diǎn)後(hòu)進(jìn)入(rù)到(dào)下(xià)一(yī)个(gè)正(zhèng)弦波(bō),因(yīn)此(cǐ)cnt2的(de)加1条(tiáo)件(jiàn)是(shì)“數到(dào)y个(gè)”,即“end_cnt1”。該計(jì)數器一(yī)共(gòng)要(yào)數2个(gè)正(zhèng)弦波(bō),随後(hòu)進(jìn)入(rù)到(dào)下(xià)一(yī)个(gè)波(bō)形,因(yīn)此(cǐ)其計(jì)數數量(liàng)为(wèi)2。繼續調用(yòng)至(zhì)簡設計(jì)法模板,在(zài)命令模式下(xià)輸入(rù)“:Mdyjsq”,點(diǎn)擊回(huí)車後(hòu)調出(chū)对(duì)應(yìng)模板,将“add_cnt1”和(hé)“end_cnt1”補充完整,得到(dào)計(jì)數器cnt2的(de)代(dài)碼如(rú)下(xià):
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
[size=9.5000pt]
assign add_cnt2 = end_cnt1;
assign end_cnt2 = add_cnt2 && cnt2== 2-1;

cnt2是(shì)産生(shēng)每2个(gè)相同(tóng)波(bō)形所(suǒ)需要(yào)的(de)計(jì)數器,但整个(gè)設計(jì)從全(quán)局(jú)来(lái)看(kàn)一(yī)共(gòng)需要(yào)産生(shēng)6種(zhǒng)不(bù)同(tóng)頻率的(de)正(zhèng)弦波(bō),因(yīn)此(cǐ)還(huán)需要(yào)一(yī)个(gè)計(jì)數器cnt3来(lái)進(jìn)行6種(zhǒng)正(zhèng)弦波(bō)的(de)計(jì)數。每産生(shēng)2个(gè)相同(tóng)正(zhèng)弦波(bō)後(hòu)進(jìn)入(rù)到(dào)下(xià)一(yī)个(gè)波(bō)形,因(yīn)此(cǐ)cnt3的(de)加1条(tiáo)件(jiàn)是(shì)“産生(shēng)完2个(gè)正(zhèng)弦波(bō)”,即“end_cnt2”。由(yóu)設計(jì)目标(biāo)可(kě)知需要(yào)數6次(cì)才能(néng)完成(chéng)所(suǒ)有(yǒu)的(de)波(bō)形,因(yīn)此(cǐ)其結束(shù)条(tiáo)件(jiàn)是(shì)“數到(dào)6个(gè)”。調用(yòng)至(zhì)簡設計(jì)法模板,在(zài)命令模式下(xià)輸入(rù)“:Mdyjsq”,點(diǎn)擊回(huí)車調出(chū)对(duì)應(yìng)模板,将“add_cnt1”和(hé)“end_cnt1”補充完整,得到(dào)計(jì)數器cnt3的(de)代(dài)碼如(rú)下(xià):
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
[size=9.5000pt]
assign add_cnt3 = end_cnt2;
assign end_cnt3 = add_cnt3 && cnt3== 6-1;

完成(chéng)了(le)所(suǒ)有(yǒu)的(de)計(jì)數器後(hòu)来(lái)考慮一(yī)下(xià)其中(zhōng)的(de)變(biàn)量(liàng)x和(hé)y,前(qián)文(wén)中(zhōng)變(biàn)量(liàng)x和(hé)y進(jìn)行了(le)定(dìng)義,其中(zhōng)x表(biǎo)示從表(biǎo)中(zhōng)每x个(gè)數據(jù)後(hòu)輸出(chū)一(yī)个(gè)數據(jù),y表(biǎo)示一(yī)个(gè)正(zhèng)弦波(bō)周期(qī)的(de)采樣(yàng)點(diǎn)數。x和(hé)y的(de)值都根(gēn)據(jù)正(zhèng)弦波(bō)的(de)頻率發(fà)生(shēng)變(biàn)化(huà),即都與(yǔ)計(jì)數器cnt3數值有(yǒu)關(guān)。根(gēn)據(jù)題(tí)意(yì)和(hé)至(zhì)簡設計(jì)法中(zhōng)的(de)變(biàn)量(liàng)設計(jì)方(fāng)法可(kě)将cnt3與(yǔ)对(duì)應(yìng)的(de)x和(hé)y值都列出(chū)来(lái),得到(dào)x和(hé)y的(de)代(dài)碼如(rú)下(xià):
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

此(cǐ)时(shí)可(kě)以(yǐ)将其它(tā)的(de)信(xìn)号(hào)補充完整。首先(xiān)来(lái)看(kàn)信(xìn)号(hào)dac_da。前(qián)文(wén)有(yǒu)講到(dào)dac_da信(xìn)号(hào)都是(shì)通(tòng)过(guò)(255-sin_data)得到(dào)的(de),因(yīn)此(cǐ)可(kě)以(yǐ)确定(dìng)dac_da的(de)代(dài)碼表(biǎo)示,調用(yòng)至(zhì)簡設計(jì)法模板,在(zài)編輯模式下(xià)輸入(rù)“Shixu2”,補充完整得到(dào)dac_da的(de)代(dài)碼如(rú)下(xià):
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)是(shì)sin_data信(xìn)号(hào)。sin_data是(shì)根(gēn)據(jù)实際情(qíng)況計(jì)算出(chū)来(lái)的(de),如(rú)果(guǒ)依次(cì)去(qù)計(jì)算每个(gè)信(xìn)号(hào)就(jiù)比較複雜,因(yīn)此(cǐ)这(zhè)里(lǐ)使用(yòng)查表(biǎo)法,直(zhí)接将計(jì)算好(hǎo)的(de)值列出(chū)来(lái),sin_data可(kě)以(yǐ)直(zhí)接在(zài)表(biǎo)3.12- 4中(zhōng)進(jìn)行選擇。由(yóu)于(yú)不(bù)同(tóng)的(de)頻率值下(xià)其選擇的(de)方(fāng)式有(yǒu)所(suǒ)不(bù)同(tóng),可(kě)以(yǐ)定(dìng)義一(yī)个(gè)選擇信(xìn)号(hào)addr,通(tòng)过(guò)控制好(hǎo)addr從而(ér)便捷地(dì)獲得sin_data的(de)值。sin_data的(de)具體(tǐ)代(dài)碼表(biǎo)示如(rú)下(xià):
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132

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

那(nà)麼(me)addr信(xìn)号(hào)又該如(rú)何設計(jì)呢?邏輯信(xìn)号(hào)addr用(yòng)以(yǐ)控制選擇數據(jù)的(de)地(dì)址,而(ér)不(bù)同(tóng)頻率正(zhèng)弦波(bō)的(de)地(dì)址控制方(fāng)式不(bù)同(tóng)。根(gēn)據(jù)設計(jì)目标(biāo)可(kě)以(yǐ)知道(dào)頻率为(wèi)6.25MHzcnt3=0)是(shì)每16个(gè)點(diǎn)選擇一(yī)次(cì);頻率为(wèi)3.125MHzcnt3=1)是(shì)每8个(gè)點(diǎn)選擇一(yī)次(cì);頻率为(wèi)1.5625MHzcnt3=2)是(shì)每4个(gè)點(diǎn)選擇一(yī)次(cì);頻率为(wèi)781250Hzcnt3=3)是(shì)每2个(gè)點(diǎn)選擇一(yī)次(cì);頻率为(wèi)390625Hzcnt3=4)是(shì)每1个(gè)點(diǎn)選擇一(yī)次(cì);頻率为(wèi)195312.5Hzcnt3=5)是(shì)每1个(gè)點(diǎn)選擇一(yī)次(cì),共(gòng)計(jì)128个(gè)采樣(yàng)點(diǎn)。

前(qián)文(wén)設計(jì)中(zhōng)已經(jīng)完善了(le)所(suǒ)有(yǒu)的(de)計(jì)數器,可(kě)用(yòng)cnt3表(biǎo)示不(bù)同(tóng)的(de)頻率,cnt1表(biǎo)示需要(yào)發(fà)送的(de)第(dì)幾(jǐ)个(gè)數,其代(dài)碼表(biǎo)示如(rú)下(xià):

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

翻譯成(chéng)RTL後(hòu)可(kě)以(yǐ)得到(dào)addr的(de)代(dài)碼表(biǎo)示如(rú)下(xià):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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

最(zuì)後(hòu)完成(chéng)dac_sleep信(xìn)号(hào)的(de)設計(jì)。由(yóu)于(yú)DA一(yī)直(zhí)工作,因(yīn)此(cǐ)dac_sleep始終(zhōng)为(wèi)0;为(wèi)了(le)滿足tS的(de)时(shí)間(jiān)要(yào)求,可(kě)以(yǐ)讓dac_clka = ~clkdac_wra信(xìn)号(hào)可(kě)以(yǐ)與(yǔ)dac_clka相同(tóng);dac_mode信(xìn)号(hào)用(yòng)于(yú)控制DA9709的(de)模式,當其为(wèi)高(gāo)電(diàn)平时(shí)表(biǎo)示双(shuāng)通(tòng)道(dào)模式,此(cǐ)时(shí)DADB两(liǎng)組信(xìn)号(hào)分(fēn)别独立控制两(liǎng)个(gè)通(tòng)道(dào)。至(zhì)簡設計(jì)法的(de)理念是(shì):在(zài)能(néng)实現(xiàn)功能(néng)的(de)前(qián)提(tí)下(xià),設計(jì)越簡單越好(hǎo)。因(yīn)此(cǐ)本(běn)設計(jì)選用(yòng)双(shuāng)通(tòng)道(dào)模式,令dac_mode始終(zhōng)为(wèi)1。代(dài)碼表(biǎo)示如(rú)下(xià):
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)。


3.3 信(xìn)号(hào)定(dìng)義
接下(xià)来(lái)是(shì)将module補充完整,首先(xiān)来(lái)定(dìng)義信(xìn)号(hào)類(lèi)型。很多(duō)读(dú)者(zhě)会(huì)搞不(bù)清(qīng)楚reg和(hé)wire該如(rú)何判斷,在(zài)進(jìn)行判斷时(shí)總(zǒng)産生(shēng)多(duō)餘的(de)聯想(xiǎng),比如(rú)認为(wèi)reg就(jiù)是(shì)寄存器,wire是(shì)線(xiàn);或(huò)者(zhě)認为(wèi)reg会(huì)綜合成(chéng)寄存器,wire不(bù)会(huì)綜合成(chéng)寄存器。在(zài)此(cǐ)再次(cì)強(qiáng)調,这(zhè)些聯想(xiǎng)其实和(hé)信(xìn)号(hào)是(shì)reg型還(huán)是(shì)wire型都并无關(guān)系(xì),因(yīn)此(cǐ)在(zài)進(jìn)行信(xìn)号(hào)類(lèi)型的(de)判斷时(shí)不(bù)需要(yào)做任何的(de)聯想(xiǎng),只(zhī)要(yào)記(jì)住一(yī)个(gè)規則“用(yòng)always实現(xiàn)的(de)是(shì)reg型,其他(tā)都是(shì)wire”就(jiù)可(kě)以(yǐ)了(le)。

cnt0是(shì)用(yòng)always産生(shēng)的(de)信(xìn)号(hào),因(yīn)此(cǐ)類(lèi)型为(wèi)regcnt0計(jì)數的(de)最(zuì)大值为(wèi)15,需要(yào)用(yòng)5根(gēn)線(xiàn)表(biǎo)示,即位宽(kuān)是(shì)5位。

關(guān)于(yú)信(xìn)号(hào)位宽(kuān)的(de)獲取(qǔ),在(zài)这(zhè)里(lǐ)至(zhì)簡設計(jì)法分(fēn)享一(yī)个(gè)非(fēi)常实用(yòng)的(de)技巧:打(dǎ)開(kāi)計(jì)算器,點(diǎn)擊“查看(kàn)”,選擇“程序員”模式,在(zài)“十(shí)進(jìn)制”下(xià)将信(xìn)号(hào)值輸入(rù)進(jìn)去(qù),就(jiù)会(huì)獲得对(duì)應(yìng)的(de)信(xìn)号(hào)位宽(kuān)。利用(yòng)这(zhè)一(yī)方(fāng)法将cnt0的(de)最(zuì)大計(jì)數值15輸入(rù)到(dào)計(jì)算器中(zhōng),如(rú)下(xià)图(tú)所(suǒ)示,可(kě)以(yǐ)看(kàn)到(dào)其位宽(kuān)为(wèi)5
图(tú)3.12-17通(tòng)过(guò)計(jì)算器獲取(qǔ)信(xìn)号(hào)位宽(kuān)

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,用(yòng)1根(gēn)線(xiàn)表(biǎo)示即可(kě)。編輯模式下(xià)輸入(rù)“Wire1”調用(yòng)至(zhì)簡設計(jì)法模板,補充完整後(hòu)得到(dào)代(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)regcnt1計(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,用(yòng)1根(gēn)線(xiàn)表(biǎo)示即可(kě)。

編輯模式下(xià)輸入(rù)Reg8”和(hé)“Wire1”調用(yòng)至(zhì)簡設計(jì)法模板,補充完整後(hòu)得到(dào)代(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)regcnt2計(jì)數的(de)最(zuì)大值为(wèi)7,需要(yào)用(yòng)3根(gēn)線(xiàn)表(biǎo)示,即位宽(kuān)是(shì)3位。

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,用(yòng)1根(gēn)線(xiàn)表(biǎo)示即可(kě)。

編輯模式下(xià)輸入(rù)Reg3”和(hé)“Wire1”調用(yòng)至(zhì)簡設計(jì)法模板,補充完整後(hòu)得到(dào)代(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)regcnt3計(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,用(yòng)1根(gēn)線(xiàn)表(biǎo)示即可(kě)。

編輯模式下(xià)輸入(rù)Reg3”和(hé)“Wire1”調用(yòng)至(zhì)簡設計(jì)法模板,補充完整後(hòu)得到(dào)代(dài)碼如(rú)下(xià):
1
2
3
reg    [2:0]                 cnt3     ;
wire                        add_cnt3 ;
wire                        end_cnt3 ;

變(biàn)量(liàng)xy是(shì)用(yòng)always方(fāng)式設計(jì)的(de),因(yīn)此(cǐ)類(lèi)型为(wèi)regx最(zuì)大值为(wèi)2,需要(yào)2根(gēn)線(xiàn)来(lái)表(biǎo)示,y最(zuì)大值为(wèi)128,需要(yào)用(yòng)8根(gēn)線(xiàn)表(biǎo)示,即位宽(kuān)为(wèi)8。編輯模式下(xià)輸入(rù)“Reg2”“Wire8”調用(yòng)至(zhì)簡設計(jì)法模板,補充完整後(hòu)得到(dào)代(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ào)用(yòng)7根(gēn)線(xiàn)表(biǎo)示,即位宽(kuān)为(wèi)7,代(dài)碼表(biǎo)示如(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òng)8根(gēn)線(xiàn)表(biǎo)示,因(yīn)此(cǐ)位宽(kuān)为(wèi)8。編輯模式下(xià)輸入(rù)“Reg8”調用(yòng)至(zhì)簡設計(jì)法模板,補充完整後(hòu)得到(dào)代(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

編輯模式下(xià)輸入(rù)Reg8”和(hé)“Wire1”調用(yòng)至(zhì)簡設計(jì)法模板,補充完整後(hòu)得到(dào)代(dài)碼如(rú)下(xià):
1
reg   [7:0]    dac_da    ;
wire          dac_sleep  ;
wire          dac_wra  ;
wire          dac_clka  ;
wire          dac_mode ;

完成(chéng)代(dài)碼後(hòu),在(zài)最(zuì)後(hòu)一(yī)行写下(xià)endmodule
1
endmodule

至(zhì)此(cǐ),整个(gè)代(dài)碼的(de)設計(jì)工作已經(jīng)完成(chéng)。完整版的(de)工程代(dài)碼如(rú)下(xià):
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
module dds_da(
clk  ,
rst_n  ,
dac_mode ,
dac_clka  ,
dac_da  ,
dac_wra  ,
dac_sleep
           );
input             clk  ;
input             rst_n  ;
output            dac_mode  ;
output            dac_clka  ;
output [ 8-1:0]   dac_da  ;
output            dac_wra  ;
output            dac_sleep ;
[size=9.5000pt]
reg    [3:0]      cnt0      ;
wire              add_cnt0  ;
wire              end_cnt0  ;
reg    [7:0]      cnt1      ;
wire              add_cnt1  ;
wire              end_cnt1  ;
reg    [2:0]      cnt2      ;
wire              add_cnt2  ;
wire              end_cnt2  ;
reg    [2:0]      cnt3      ;
wire              add_cnt3  ;
wire              end_cnt3  ;
reg    [3:0]      x         ;
reg    [7:0]      y         ;
[size=9.5000pt]
reg    [6:0]      addr      ;
reg    [7:0]      sin_data  ;
[size=9.5000pt]
reg    [7:0]      dac_da    ;
wire              dac_sleep  ;
wire              dac_wra  ;
reg              dac_clka  ;
reg              dac_clka_ff0   ;
wire              dac_mode ;
[size=9.5000pt]
[size=9.5000pt]
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
[size=9.5000pt]
assign add_cnt0 = 1;
assign end_cnt0 = add_cnt0 && cnt0== x-1;
[size=9.5000pt]
[size=9.5000pt]
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
[size=9.5000pt]
assign add_cnt1 = end_cnt0;
assign end_cnt1 = add_cnt1 && cnt1== y-1;
[size=9.5000pt]
[size=9.5000pt]
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
[size=9.5000pt]
assign add_cnt2 = end_cnt1;
assign end_cnt2 = add_cnt2 && cnt2== 2-1;
[size=9.5000pt]
[size=9.5000pt]
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
[size=9.5000pt]
assign add_cnt3 = end_cnt2;
assign end_cnt3 = add_cnt3 && cnt3== 6-1;
[size=9.5000pt]
[size=9.5000pt]
always  @(*)begin
    if(cnt3==0)begin
        x = [size=9.5000pt]1  ;
        y = 8  ;
    end
    else if(cnt3==1)begin
        x = [size=9.5000pt]1  ;
        y = 16   ;
    end
    else if(cnt3==2)begin
        x = [size=9.5000pt]1  ;
        y = 32  ;
    end
    else if(cnt3==3)begin
        x = [size=9.5000pt]1  ;
        y = 64  ;
    end
    else if(cnt3==4)begin
        x = [size=9.5000pt]1  ;
        y = 128 ;
    end
    else begin
        x = [size=9.5000pt]2  ;
        y = 128 ;
    end
end
[size=9.5000pt]
[size=9.5000pt]
always  @(posedge clk or negedge rst_n)begin
    if(rst_n==1'b0)begin
dac_da<= 0;
    end
    else if(end_cnt0)begin
dac_da<= 255 - sin_data;
    end
end
[size=9.5000pt]
always  @(posedge clk or negedge rst_n)begin
[size=9.5000pt]        if(rst_n==1'b0)begin
dac_clka<= 0;
    end
    else if(add_cnt0 && cnt0==x/2-1)begin
[size=9.5000pt]        [size=9.5000pt]        dac_clka<= 1;
    end
    else if(end_cnt0)begin
[size=9.5000pt]        [size=9.5000pt]        dac_clka<= 0;
    end
end
[size=9.5000pt]
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
[size=9.5000pt]
[size=9.5000pt]
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
[size=9.5000pt]
[size=9.5000pt]
assign dac_sleep = 0        ;
assign dac_wra   = dac_clka ;
assign dac_mode = 1         ;
[size=9.5000pt]
endmodule



第(dì)4节(jié) 綜合與(yǔ)上(shàng)板


4.1 新建工程
打(dǎ)開(kāi)软(ruǎn)件(jiàn)Quartus Ⅱ,點(diǎn)擊“File”下(xià)拉列表(biǎo)中(zhōng)的(de)New Project Wzard...新建工程選項,如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.12-18Quartus新建工程


随後(hòu)会(huì)出(chū)現(xiàn)Quartus新建工程介紹,如(rú)下(xià)图(tú)所(suǒ)示,直(zhí)接點(diǎn)擊“Next”。
 file:///C:UsersxkdnAppDataLocalTempksohtml9760wps13.jpg
图(tú)3.12-19Quartus新建工程介紹


此(cǐ)时(shí)出(chū)現(xiàn)的(de)是(shì)工程文(wén)件(jiàn)夾、工程名、頂层模块(kuài)名設置界面(miàn),如(rú)图(tú)3.12- 20所(suǒ)示。設置目录(lù)为(wèi):D:/mdy_book/dds_da,工程名和(hé)頂层名为(wèi)dds_da。再次(cì)強(qiáng)調,为(wèi)了(le)避免初学者(zhě)在(zài)後(hòu)續操作中(zhōng)發(fà)生(shēng)程序跳出(chū)未知錯誤的(de)問(wèn)題(tí),強(qiáng)烈建議設置的(de)文(wén)件(jiàn)目录(lù)和(hé)工程名稱與(yǔ)本(běn)書(shū)保持(chí)一(yī)致(zhì)。設置完成(chéng)後(hòu)點(diǎn)擊“Next”。

图(tú)3.12-20QUARTUS新建工程設置名稱


新建工程類(lèi)型設置如(rú)下(xià)图(tú)所(suǒ)示,選擇“Empty project”,然後(hòu)點(diǎn)擊“Next”。

图(tú)3.12-21QUARTUS新建工程類(lèi)型


接下(xià)来(lái)進(jìn)行文(wén)件(jiàn)添加,其界面(miàn)如(rú)下(xià)图(tú)所(suǒ)示。點(diǎn)擊右(yòu)側的(de)“Add”按鈕,選擇之前(qián)写好(hǎo)的(de)“dds_da.v”文(wén)件(jiàn),可(kě)以(yǐ)看(kàn)到(dào)界面(miàn)下(xià)方(fāng)会(huì)顯示出(chū)文(wén)件(jiàn),随後(hòu)點(diǎn)擊“Next”。

图(tú)3.12-22QUARTUS添加文(wén)件(jiàn)


图(tú)3.12- 23为(wèi)芯片(piàn)選擇页(yè)面(miàn),選擇“Cyclone ⅣE”,在(zài)芯片(piàn)型号(hào)選擇处選擇“EP4CE15F23C8”,之後(hòu)點(diǎn)擊“Next”。

图(tú)3.12-23QUARTUS選擇芯片(piàn)型号(hào)



图(tú)3.12- 24为(wèi)QUARTUS設置工具界面(miàn),不(bù)必做任何修改,直(zhí)接點(diǎn)擊“Next”。

图(tú)3.12-24QUARTUS設置工具界面(miàn)


QUARTUS新建工程彙總(zǒng)界面(miàn)如(rú)下(xià)图(tú)所(suǒ)示,可(kě)以(yǐ)看(kàn)到(dào)新建工程的(de)彙總(zǒng)情(qíng)況,點(diǎn)擊“Finish”,完成(chéng)新建工程。

图(tú)3.12-25QUARTUS新建工程彙總(zǒng)界面(miàn)


4.2 綜合
新建工程步驟完成(chéng)後(hòu),就(jiù)会(huì)出(chū)現(xiàn)如(rú)下(xià)图(tú)所(suǒ)示的(de) QUARTUS新建工程後(hòu)界面(miàn)。

图(tú)3.12-26QUARTUS新建工程後(hòu)界面(miàn)


點(diǎn)擊編譯按鈕,可(kě)以(yǐ)对(duì)整个(gè)工程進(jìn)行編譯。編譯成(chéng)功的(de)界面(miàn)如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.12-27QUARTUS編譯後(hòu)界面(miàn)


4.3 配置管(guǎn)脚
下(xià)面(miàn)需要(yào)对(duì)相應(yìng)管(guǎn)脚進(jìn)行配置。如(rú)下(xià)图(tú)所(suǒ)示,在(zài)菜單欄中(zhōng)選中(zhōng)“Assignments”,然後(hòu)選擇“Pin Planner”,随後(hòu)就(jiù)会(huì)弹出(chū)配置管(guǎn)脚的(de)窗(chuāng)口(kǒu)。

图(tú)3.12-28QUARTUS配置管(guǎn)脚選項


在(zài)配置窗(chuāng)口(kǒu)最(zuì)下(xià)方(fāng)中(zhōng)的(de)“location”一(yī)列,參考信(xìn)号(hào)和(hé)管(guǎn)脚關(guān)系(xì),按照表(biǎo)3.12- 3中(zhōng)最(zuì)右(yòu)两(liǎng)列配置好(hǎo)FPGA管(guǎn)脚,配置管(guǎn)理来(lái)源參見(jiàn)管(guǎn)脚配置环(huán)节(jié),最(zuì)終(zhōng)配置的(de)結果(guǒ)如(rú)图(tú)3.12-29。配置完成(chéng)後(hòu),關(guān)閉Pin Planner,软(ruǎn)件(jiàn)自(zì)動(dòng)会(huì)保存管(guǎn)脚配置信(xìn)息。

表(biǎo)3.12-3信(xìn)号(hào)和(hé)管(guǎn)脚關(guān)系(xì)
器件(jiàn)
DA9709管(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


图(tú)3.12-29 QUARTUS配置管(guǎn)脚

4.4 再次(cì)綜合
再次(cì)打(dǎ)開(kāi)“QUARTUS”软(ruǎn)件(jiàn),在(zài)菜單欄中(zhōng)選中(zhōng)“Processing”,然後(hòu)選擇“Start Compilation”,再次(cì)对(duì)整个(gè)工程進(jìn)行編譯和(hé)綜合,如(rú)图(tú)3.12- 30所(suǒ)示。

图(tú)3.12-30QUARTUS編譯選項


當出(chū)現(xiàn)如(rú)下(xià)图(tú)所(suǒ)示的(de) QUARTUS編譯成(chéng)功标(biāo)志,就(jiù)说(shuō)明(míng)編譯綜合成(chéng)功。

图(tú)3.12-31QUARTUS編譯成(chéng)功标(biāo)志


4.5 連(lián)接開(kāi)發(fà)板
完成(chéng)編譯後(hòu)開(kāi)始進(jìn)行上(shàng)板調試操作,按照下(xià)图(tú)的(de)方(fāng)式将下(xià)载器接入(rù)電(diàn)腦USB接口(kǒu),接上(shàng)開(kāi)發(fà)板電(diàn)源,将開(kāi)發(fà)板ADDA接口(kǒu)與(yǔ)示波(bō)器相連(lián)接,然後(hòu)按下(xià)開(kāi)發(fà)板下(xià)方(fāng)藍(lán)色(sè)開(kāi)關(guān)。
 图(tú)3.12-32開(kāi)發(fà)板連(lián)接图(tú)

4.6 上(shàng)板
打(dǎ)開(kāi)QUARTUS界面(miàn),單擊界面(miàn)中(zhōng)的(de)“file:///C:UsersxkdnAppDataLocalTempksohtml9760wps27.jpg”,則会(huì)弹出(chū)配置界面(miàn)。在(zài)界面(miàn)中(zhōng)點(diǎn)擊“add file”添加“.sof”文(wén)件(jiàn)後(hòu)點(diǎn)擊“Start”,会(huì)在(zài)“Progress”出(chū)現(xiàn)顯示進(jìn)度(dù)。

图(tú)3.12-33QUARTUS界面(miàn)


QUARTUS下(xià)载程序界面(miàn)如(rú)下(xià)图(tú)所(suǒ)示,當進(jìn)度(dù)条(tiáo)到(dào)100%提(tí)示成(chéng)功後(hòu),即可(kě)在(zài)示波(bō)器上(shàng)观察到(dào)相應(yìng)的(de)現(xiàn)象(xiàng)。

图(tú)3.12-34QUARTUS下(xià)载程序界面(miàn)


下(xià)载完成(chéng)後(hòu),如(rú)果(guǒ)操作无誤此(cǐ)时(shí)可(kě)以(yǐ)在(zài)示波(bō)器上(shàng)看(kàn)到(dào)对(duì)應(yìng)的(de)波(bō)形。如(rú)果(guǒ)沒(méi)有(yǒu)顯示成(chéng)功,就(jiù)需要(yào)返回(huí)檢查一(yī)下(xià)連(lián)接是(shì)否到(dào)位,接口(kǒu)有(yǒu)沒(méi)有(yǒu)連(lián)接錯誤,代(dài)碼是(shì)否編写正(zhèng)确。如(rú)果(guǒ)无法自(zì)己完成(chéng)錯誤排查的(de)話(huà),可(kě)以(yǐ)重(zhòng)新按照步驟操作一(yī)遍(biàn),相信(xìn)一(yī)定(dìng)会(huì)达(dá)到(dào)想(xiǎng)要(yào)的(de)效果(guǒ)。

第(dì)5节(jié) 簡化(huà)版步驟分(fēn)享
这(zhè)里(lǐ)依旧(jiù)会(huì)分(fēn)享簡化(huà)版的(de)步驟,方(fāng)便掌握基礎原理後(hòu)進(jìn)行反(fǎn)複操作複習。


5.1 設計(jì)实現(xiàn)


5.1.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)後(hòu)開(kāi)始編写代(dài)碼。

确定(dìng)頂层信(xìn)号(hào)。信(xìn)号(hào)和(hé)硬(yìng)件(jiàn)的(de)对(duì)應(yìng)關(guān)系(xì)图(tú)見(jiàn)表(biǎo)3.12- 3。
表(biǎo)3.12-3信(xìn)号(hào)和(hé)管(guǎn)脚關(guān)系(xì)
器件(jiàn)
DA9709管(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

写出(chū)頂层代(dài)碼:
1
2
3
4
5
6
7
8
9
module dds_da[size=9.5000pt](
clk  ,
rst_n  ,
dac_mode ,
dac_clka  ,
dac_da  ,
dac_wra  ,
dac_sleep
           );

聲明(míng)輸入(rù)輸出(chū)屬性(xìng):
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 ;

5.1.2 信(xìn)号(hào)設計(jì)
計(jì)算采樣(yàng)點(diǎn)对(duì)應(yìng)幅度(dù)值:
表(biǎo)3.12- 4DAC輸出(chū)采樣(yàng)點(diǎn)对(duì)應(yìng)幅度(dù)值
采樣(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

分(fēn)析設計(jì)目标(biāo)可(kě)知:每隔x个(gè)时(shí)鐘(zhōng)輸出(chū)一(yī)个(gè)電(diàn)壓值,共(gòng)輸出(chū)y个(gè)點(diǎn)組成(chéng)一(yī)个(gè)正(zhèng)弦波(bō),每次(cì)連(lián)續産生(shēng)2个(gè)正(zhèng)弦波(bō)。

設計(jì)表(biǎo)示數了(le)幾(jǐ)个(gè)时(shí)鐘(zhōng)的(de)計(jì)數器cnt0:
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
[size=9.5000pt]
assign add_cnt0 = 1;
assign end_cnt0 = add_cnt0 && cnt0== x-1;

設計(jì)輸出(chū)了(le)幾(jǐ)个(gè)點(diǎn)的(de)計(jì)數器cnt1:
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
[size=9.5000pt]
assign add_cnt1 = end_cnt0;
assign end_cnt1 = add_cnt1 && cnt1== y-1;

設計(jì)計(jì)數2个(gè)正(zhèng)弦波(bō)的(de)計(jì)數器cnt2:
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
[size=9.5000pt]
assign add_cnt2 = end_cnt1;
assign end_cnt2 = add_cnt2 && cnt2== 2-1;

設計(jì)産生(shēng)6種(zhǒng)不(bù)同(tóng)頻率正(zhèng)弦波(bō)的(de)計(jì)數器cnt3
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
[size=9.5000pt]
assign add_cnt3 = end_cnt2;
assign end_cnt3 = add_cnt3 && cnt3== 6-1;

設計(jì)變(biàn)量(liàng)x和(hé)y:
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

設計(jì)dac_da信(xìn)号(hào):
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

設計(jì)sin_data信(xìn)号(hào):
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132

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

設計(jì)addr信(xìn)号(hào):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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

設計(jì)dac_sleepdac_wradac_clkadac_mode信(xìn)号(hào):
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補充完整。

5.1.3 信(xìn)号(hào)定(dìng)義
首先(xiān)来(lái)定(dìng)義信(xìn)号(hào)類(lèi)型。cnt0add_cnt0end_cnt0的(de)信(xìn)号(hào)定(dìng)義如(rú)下(xià):
1
2
3
reg    [4:0]                 cnt0      ;
wire                        add_cnt0  ;
wire                        end_cnt0  ;

cnt1add_cnt1和(hé)end_cnt1的(de)信(xìn)号(hào)定(dìng)義如(rú)下(xià):
1
2
3
reg    [7:0]                 cnt1      ;
wire                        add_cnt1  ;
wire                        end_cnt1  ;

cnt2add_cnt2和(hé)end_cnt2的(de)信(xìn)号(hào)定(dìng)義如(rú)下(xià):
1
2
3
reg    [2:0]                 cnt2      ;
wire                        add_cnt2  ;
wire                        end_cnt2  ;

cnt3add_cnt3和(hé)end_cnt3的(de)信(xìn)号(hào)定(dìng)義如(rú)下(xià):
1
2
3
reg    [2:0]                 cnt3     ;
wire                        add_cnt3 ;
wire                        end_cnt3 ;

變(biàn)量(liàng)xy的(de)信(xìn)号(hào)定(dìng)義如(rú)下(xià):
1
2
reg    [1:0]      x      ;
reg    [7:0]      y      ;

addr的(de)信(xìn)号(hào)定(dìng)義如(rú)下(xià):
1
reg   [6:0]    addr    ;

sin_data的(de)信(xìn)号(hào)定(dìng)義如(rú)下(xià):
1
reg   [7:0]    sin_data    ;

dac_dadac_sleepdac_wradac_clka、dac_mode的(de)信(xìn)号(hào)定(dìng)義如(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

完整版的(de)工程代(dài)碼如(rú)下(xià):
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
module dds_da(
clk  ,
rst_n  ,
dac_mode ,
dac_clka  ,
dac_da  ,
dac_wra  ,
dac_sleep
           );
input             clk  ;
input             rst_n  ;
output            dac_mode  ;
output            dac_clka  ;
output [ 8-1:0]   dac_da  ;
output            dac_wra  ;
output            dac_sleep ;
[size=9.5000pt]
reg    [3:0]      cnt0      ;
wire              add_cnt0  ;
wire              end_cnt0  ;
reg    [7:0]      cnt1      ;
wire              add_cnt1  ;
wire              end_cnt1  ;
reg    [2:0]      cnt2      ;
wire              add_cnt2  ;
wire              end_cnt2  ;
reg    [2:0]      cnt3      ;
wire              add_cnt3  ;
wire              end_cnt3  ;
reg    [3:0]      x         ;
reg    [7:0]      y         ;
[size=9.5000pt]
reg    [6:0]      addr      ;
reg    [7:0]      sin_data  ;
[size=9.5000pt]
reg    [7:0]      dac_da    ;
wire              dac_sleep  ;
wire              dac_wra  ;
reg              dac_clka  ;
reg              dac_clka_ff0   ;
wire              dac_mode ;
[size=9.5000pt]
[size=9.5000pt]
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
[size=9.5000pt]
assign add_cnt0 = 1;
assign end_cnt0 = add_cnt0 && cnt0== x-1;
[size=9.5000pt]
[size=9.5000pt]
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
[size=9.5000pt]
assign add_cnt1 = end_cnt0;
assign end_cnt1 = add_cnt1 && cnt1== y-1;
[size=9.5000pt]
[size=9.5000pt]
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
[size=9.5000pt]
assign add_cnt2 = end_cnt1;
assign end_cnt2 = add_cnt2 && cnt2== 2-1;
[size=9.5000pt]
[size=9.5000pt]
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
[size=9.5000pt]
assign add_cnt3 = end_cnt2;
assign end_cnt3 = add_cnt3 && cnt3== 6-1;
[size=9.5000pt]
[size=9.5000pt]
always  @(*)begin
    if(cnt3==0)begin
        x = [size=9.5000pt]1  ;
        y = 8  ;
    end
    else if(cnt3==1)begin
        x = [size=9.5000pt]1  ;
        y = 16   ;
    end
    else if(cnt3==2)begin
        x = [size=9.5000pt]1  ;
        y = 32  ;
    end
    else if(cnt3==3)begin
        x = [size=9.5000pt]1  ;
        y = 64  ;
    end
    else if(cnt3==4)begin
        x = [size=9.5000pt]1  ;
        y = 128 ;
    end
    else begin
        x = [size=9.5000pt]2  ;
        y = 128 ;
    end
end
[size=9.5000pt]
[size=9.5000pt]
always  @(posedge clk or negedge rst_n)begin
    if(rst_n==1'b0)begin
dac_da<= 0;
    end
    else if(end_cnt0)begin
dac_da<= 255 - sin_data;
    end
end
[size=9.5000pt]
always  @(posedge clk or negedge rst_n)begin
[size=9.5000pt]        if(rst_n==1'b0)begin
dac_clka<= 0;
    end
    else if(add_cnt0 && cnt0==x/2-1)begin
[size=9.5000pt]        [size=9.5000pt]        dac_clka<= 1;
    end
    else if(end_cnt0)begin
[size=9.5000pt]        [size=9.5000pt]        dac_clka<= 0;
    end
end
[size=9.5000pt]
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
[size=9.5000pt]
[size=9.5000pt]
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
[size=9.5000pt]
[size=9.5000pt]
assign dac_sleep = 0        ;
assign dac_wra   = dac_clka ;
assign dac_mode = 1         ;
[size=9.5000pt]
endmodule
[size=9.5000pt]



5.2 綜合與(yǔ)上(shàng)板

5.2.1 新建工程
下(xià)一(yī)步新建工程和(hé)上(shàng)板查看(kàn)現(xiàn)象(xiàng)。打(dǎ)開(kāi)软(ruǎn)件(jiàn)“Quartus”,在(zài)“Project”菜單中(zhōng)選擇“Add/Remove File to Project”,弹出(chū)文(wén)件(jiàn)窗(chuāng)口(kǒu)。
图(tú)3.12-18Quartus新建工程

直(zhí)接點(diǎn)擊“Next”。

图(tú)3.12-19 Quartus新建工程介紹


此(cǐ)时(shí)会(huì)出(chū)現(xiàn)的(de)是(shì)工程文(wén)件(jiàn)夾、工程名、頂层模块(kuài)名設置界面(miàn)(目录(lù)为(wèi):D:/mdy_book/dds_da,工程名和(hé)頂层名为(wèi)dds_da),完成(chéng)設置後(hòu)點(diǎn)擊Next”。

图(tú)3.12-20 QUARTUS新建工程設置名稱


選擇“Empty project”後(hòu)點(diǎn)擊“Next”。

图(tú)3.12-21 QUARTUS新建工程類(lèi)型


點(diǎn)擊右(yòu)側的(de)“Add”按鈕後(hòu)選擇“dds_da.v”文(wén)件(jiàn),随後(hòu)點(diǎn)擊“Next”完成(chéng)文(wén)件(jiàn)添加。

图(tú)3.12-22 QUARTUS添加文(wén)件(jiàn)


对(duì)芯片(piàn)型号(hào)進(jìn)行選擇,在(zài)“Device family”選項中(zhōng)選擇“Cyclone ⅣE”,“Available devices”選項下(xià)選擇“EP4CE15F23C8”随後(hòu)點(diǎn)擊“Next”。

图(tú)3.12-23 QUARTUS選擇芯片(piàn)型号(hào)


直(zhí)接點(diǎn)擊“Next”。

图(tú)3.12-24 QUARTUS設置工具界面(miàn)


點(diǎn)擊“Finish”,完成(chéng)新建工程。

图(tú)3.12-25 QUARTUS新建工程彙總(zǒng)界面(miàn)


5.2.2 綜合
新建工程後(hòu)界面(miàn)如(rú)下(xià)图(tú)所(suǒ)示,點(diǎn)擊“編譯”。

图(tú)3.12-26 QUARTUS新建工程後(hòu)界面(miàn)


編譯成(chéng)功界面(miàn)如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.12-27 QUARTUS編譯後(hòu)界面(miàn)



5.2.3 配置管(guǎn)脚
進(jìn)行管(guǎn)脚配置,在(zài)菜單欄中(zhōng)點(diǎn)擊“Assignments”後(hòu)點(diǎn)擊“Pin Planner”,此(cǐ)时(shí)弹出(chū)配置管(guǎn)脚的(de)窗(chuāng)口(kǒu)。

图(tú)3.12-28 QUARTUS配置管(guǎn)脚選項


在(zài)配置窗(chuāng)口(kǒu)“location”根(gēn)據(jù)信(xìn)号(hào)和(hé)管(guǎn)脚關(guān)系(xì)配置管(guǎn)脚,配置完成(chéng)關(guān)閉“Pin Planner”即可(kě)自(zì)動(dòng)保存配置信(xìn)息。

图(tú)3.12-29 QUARTUS配置管(guǎn)脚



5.2.4 再次(cì)綜合
再次(cì)打(dǎ)開(kāi)“QUARTUS”软(ruǎn)件(jiàn),在(zài)菜單欄中(zhōng)選擇“Processing”,随後(hòu)點(diǎn)擊“Start Compilation”再次(cì)進(jìn)行綜合。

图(tú)3.12-30 QUARTUS編譯選項


出(chū)現(xiàn) QUARTUS 編譯成(chéng)功标(biāo)志时(shí)表(biǎo)示此(cǐ)次(cì)編譯成(chéng)功。
图(tú)3.12-31 QUARTUS編譯成(chéng)功标(biāo)志

5.2.5 連(lián)接開(kāi)發(fà)板
按照如(rú)下(xià)图(tú)所(suǒ)示的(de)方(fāng)法将下(xià)载器接入(rù)電(diàn)腦USB接口(kǒu),接上(shàng)開(kāi)發(fà)板電(diàn)源,開(kāi)發(fà)板ADDA接口(kǒu)與(yǔ)示波(bō)器相連(lián)接,然後(hòu)按下(xià)開(kāi)發(fà)板下(xià)方(fāng)藍(lán)色(sè)開(kāi)關(guān)。

图(tú)3.12-32開(kāi)發(fà)板連(lián)接图(tú)


5.2.6 上(shàng)板
打(dǎ)開(kāi) QUARTUS 界面(miàn)後(hòu)單擊“file:///C:UsersxkdnAppDataLocalTempksohtml9760wps45.jpg  ”图(tú)标(biāo)。

图(tú)3.12-33QUARTUS界面(miàn)


點(diǎn)擊“add file”,添加.sof文(wén)件(jiàn),完成(chéng)添加後(hòu)點(diǎn)擊“Start”,在(zài)“Progress”会(huì)顯示進(jìn)度(dù)。進(jìn)度(dù)条(tiáo)顯示“100%”为(wèi)成(chéng)功,可(kě)观察示波(bō)器現(xiàn)象(xiàng)。

图(tú)3.12-34 QUARTUS下(xià)载程序界面(miàn)


第(dì)6节(jié) 擴展(zhǎn)練習
至(zhì)此(cǐ),DA轉(zhuǎn)換設計(jì)已經(jīng)分(fēn)享完畢,相信(xìn)同(tóng)学们(men)已經(jīng)可(kě)以(yǐ)完全(quán)掌握这(zhè)一(yī)設計(jì)。那(nà)麼(me)在(zài)掌握这(zhè)項工程後(hòu)可(kě)以(yǐ)多(duō)做一(yī)些思(sī)考,嘗試在(zài)工程原理不(bù)變(biàn)的(de)基礎上(shàng)進(jìn)行一(yī)定(dìng)的(de)數據(jù)調整,試着改變(biàn)産生(shēng)波(bō)的(de)周期(qī)和(hé)采樣(yàng)點(diǎn)等參數,挑戰一(yī)下(xià)独立完成(chéng)多(duō)个(gè)設計(jì)。也(yě)欢迎有(yǒu)更(gèng)多(duō)思(sī)路(lù)和(hé)想(xiǎng)法的(de)同(tóng)学前(qián)往至(zhì)簡設計(jì)法論壇進(jìn)行交流讨論。

   相關(guān)推薦
   拓展(zhǎn)閱读(dú)
⁩⁣⁩⁨ ⁩⁤⁢⁢⁢⁥⁩ ⁥⁣⁦⁡ ⁣⁤⁨ ⁡⁨⁠⁤⁠ ⁦⁧⁡⁤⁣⁡⁡⁨⁤ NrEnE8Gui⁤⁥⁧⁦⁦⁡⁧
⁢⁢⁦⁡⁩⁢⁡
⁣⁧⁡⁤ ⁦⁥⁣⁣ ⁦⁩⁣⁥⁥⁤⁢⁢⁨ ⁥⁤⁦⁢⁦⁦⁠⁠ ⁠⁣ ⁩⁡⁠⁢⁦⁢ J2JwAm⁤⁦⁨⁣⁢⁤⁦⁨ ⁢⁦⁤⁦⁤⁡⁩ ⁧⁨⁨ ⁡⁠⁥⁡⁥⁢⁣ XjPR4LJxih⁧⁨⁦⁠⁥⁧⁩⁠⁥ ⁦⁤⁠⁦⁧⁨⁤⁩
⁦⁢⁨⁤
⁢⁠⁤⁦⁨

⁩⁩⁡

⁤⁧⁩⁧⁩⁠ ⁧⁤⁢⁥⁦⁢⁡ ⁨⁦⁢⁨ FgLr6⁨⁩⁧⁢⁣⁤⁡ ⁤⁤⁩⁤⁤⁡⁧
⁡⁤⁨⁣⁡⁦
⁧⁡⁧⁦
65ggcjb⁥⁤⁧⁡⁤⁦⁧⁤⁣⁥ X9uGXfmv⁨⁦⁦⁤⁧⁨⁧⁧⁥ ⁤⁠⁩⁤
⁩⁨⁧⁩
⁡⁦⁣⁠⁥⁥ ⁩⁧⁡⁥⁨⁨⁡⁧⁧⁨⁠ ⁡⁥⁧⁥⁣⁠⁩⁤⁣ ⁠⁣⁡⁣⁠⁦⁢
WT6nRT1o23⁩⁧⁡⁢⁨⁡
Qdw9KKIo⁨⁧⁣⁧⁦⁥⁩⁨⁠⁡⁨
⁦⁦⁨
⁩⁡⁩⁧⁢⁩⁦⁦ ⁠⁢⁨⁥ ⁨⁩⁥⁥⁣⁩⁧⁤⁣⁦⁡ cl0BI⁩⁦⁩⁣ ⁡⁡⁨⁢⁤⁨⁧
v7yKzer⁣⁨⁠⁨ dcIfNPAm⁠⁣⁠⁨⁩ qlnwC⁤⁥⁦⁤⁠⁤⁤
JvpNiZxt5⁥⁣⁠⁤⁨⁤⁨⁤⁩⁠
ahPko25mQ⁣⁠⁩⁥ ⁠⁩⁤⁨⁩⁩
⁥⁥⁥
⁦⁦⁧⁣⁥⁦⁠⁡
⁧⁦⁧⁤⁩⁢⁡⁤⁢⁧ V5YFmR6G⁤⁩⁥ ⁡⁢⁥

⁧⁨⁡⁩⁣⁡⁥

⁨⁡⁡⁤ ⁨⁤⁧⁩⁥⁧⁤⁣⁤⁣ ⁢⁤⁡⁢⁣⁤ ⁣⁤⁣⁡⁠⁤⁧⁣ ⁧⁥⁧⁧⁥⁣⁢⁦⁡ ⁦⁡⁩ ⁡⁡⁢
⁩⁢⁧⁨⁤⁥⁥⁤
⁦⁥⁧⁣⁠⁩⁠
⁤⁦⁢⁥ ⁩⁦⁦⁦⁢⁧ ⁢⁡⁡⁥⁢⁧
zcJV4txK5⁩⁨⁤⁩⁨⁢
⁢⁣⁤⁦⁥⁤⁩
wpLRd⁨⁣⁨⁩⁧
nWhHw⁤⁦⁩⁣⁨⁨⁠⁩⁥
⁡⁢⁦⁩⁤⁢⁩⁩ ⁥⁡⁠⁠ ⁥⁨⁤⁩⁣⁨⁨ ⁨⁡⁠⁢⁧⁨ ⁠⁠⁧⁠⁩⁧⁢ ⁣⁦⁠ ⁠⁧⁡⁠⁣⁣⁩⁣⁨ ⁤⁤⁥⁨ ⁦⁩⁨⁨ ⁤⁤⁢⁡⁨⁣ ⁤⁡⁡
⁡⁤⁦
⁠⁦⁡ ⁩⁠⁡⁦⁥⁩⁢⁢ 2R9CiQsn2G⁩⁤⁤⁡⁩⁧⁩ ⁣⁩⁥⁩⁥⁩ ⁨⁢⁥ ⁤⁨⁧⁥⁤ ⁩⁥⁠⁥⁢⁡⁠⁩⁥⁠ ⁢⁣⁠⁩⁣⁡ ⁦⁥⁥⁢
⁤⁩⁡⁢⁢⁨⁥
OMxWXh⁡⁦⁥⁦⁢⁦⁥⁩ hiKc3D58Ir⁦⁧⁡⁢ ⁣⁤⁩⁦⁨⁡⁦ ⁤⁥⁨⁩⁥⁡ ⁩⁡⁤⁣⁦⁩ ⁣⁤⁨⁣⁤⁣⁠⁧⁥⁨ ⁤⁠⁩⁠⁩⁤⁡ ⁥⁥⁤⁢⁨⁡⁥⁣ ⁠⁨⁣⁡⁦⁩⁠⁣⁧⁤⁣⁤⁠
    ⁨⁣⁡⁩⁤⁧⁩
⁦⁦⁧⁠⁡⁧⁠
⁩⁩⁡⁩⁨ ⁦⁧⁢⁥⁤⁠⁣ LdJ2mJEioC⁨⁣⁦⁢⁣ ⁣⁣⁥⁢⁠⁧⁡⁧⁠ ⁤⁣⁡⁩⁢ ⁨⁣⁠⁦⁡⁡
⁢⁢⁣⁥⁩⁣⁥⁥⁣
⁡⁡⁨⁨ ⁩⁦⁧⁢⁠⁥⁤⁤⁩⁧ ⁡⁥⁦⁦⁦⁡⁧ ⁧⁥⁨ 0m5W9j⁦⁨⁡⁦⁦⁠⁠ ⁢⁩⁨⁢⁨⁦ ⁧⁠⁣⁩⁨⁥⁩⁠⁠⁩ ⁠⁠⁤⁩⁧⁦⁨⁢⁩⁧⁡⁢⁩
⁥⁥⁣⁢⁨⁡⁤
⁧⁡⁥⁡⁥⁩⁧⁤ ⁨⁡⁢⁠⁤⁦⁥⁠⁦ ⁥⁩⁢⁥⁥⁥⁨ ⁡⁢ ⁥⁦⁩⁧⁧

⁡⁦⁣⁥⁤⁧⁡

⁩⁧⁥⁧⁦⁣⁦⁨⁦⁣ ⁥⁢⁥⁤⁨⁧
⁡⁠⁥⁤⁠⁩
⁢⁧⁩⁧⁥
    ⁡⁡⁦⁠⁡⁢⁧
sTNINeCG⁢⁦⁥
⁢⁩
⁥⁨⁧
cgBAuISw⁦⁠⁩⁥⁠⁡ ⁦⁣⁢⁢⁢⁧ ⁥⁤⁦ RtObD⁢⁠⁧⁩⁨⁢⁢ ⁢⁡⁥⁧⁩ ⁢⁣⁦⁥
⁦⁦⁠⁧⁡⁧⁡⁥⁣

⁢⁢⁣⁣⁥

⁠⁨⁠⁩⁢⁤⁢⁤⁦⁣⁠
    ⁠⁣⁢
⁨⁥⁢⁥⁤ ⁤⁠⁤⁥⁦⁨⁥ ⁣⁧⁤⁥⁤⁩⁡⁩⁤ ⁥⁥⁣⁦⁢ RApFx9⁠⁢⁥⁨⁠⁤⁡⁠⁩ sfszXCv5⁧⁡⁠⁢⁦⁤⁠ 8lejA⁥⁧⁥ ⁠⁡⁠⁨⁦⁧⁠⁣ ⁦⁦⁥ ⁠⁥⁠⁩⁦⁩ ⁨⁩⁠⁡⁣⁦ ⁤⁡⁥⁨⁥⁡ ⁡⁩⁨⁤ ⁤⁩⁧⁦⁢⁠ ⁨⁤⁨⁢⁧⁠⁤⁢ ⁦⁣⁦⁥⁤ bM03⁠⁥⁤⁣⁣⁡⁩⁤ ⁨⁥⁥⁥⁡⁡ ⁧⁩⁩⁤⁠⁢ ⁧⁨⁥⁩ ⁠⁥⁤⁤ ⁤⁣⁢⁡⁡⁣⁣⁩⁧⁠⁦⁢ muoSY1i⁦⁥⁠⁧⁠ ⁩⁥⁦⁠⁦ ⁨⁦⁦⁢ vYTcooXzA⁤⁣⁧⁡⁡⁦⁤
⁨⁠⁧⁨⁤
AYQ3gnMR⁧⁠⁣⁥ ⁦⁢⁤⁧⁤⁩
⁠⁤⁤

xDsToeNDG7⁥⁠⁢

⁧⁨⁥⁨