第(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ù)值。
至(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_CLKA、DA_CLKB、DAC_DA7~0、DAC_DB7~0、DA_WRA、DA_WRB 、DAC_MODE和(hé)DAC_SLEEP。
表(biǎo)3.12-1DAC芯片(piàn)與(yǔ)FPGA相連(lián)管(guǎn)脚及(jí)其作用(yòng)
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_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ú)的(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)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ù)保持(chí)不(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))等參數如(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)2ns;tH时(shí)間(jiān)为(wèi)至(zhì)少(shǎo)1.5ns;tLPW、tCPW时(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ì)
由(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)。
在(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)括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):
使用(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_n,dac_mode、dac_sleep、dac_clka、dac_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ì)
将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ǒ)示:
随後(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)input;dac_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_mode,dac_clka,dac_wra,dac_sleep是(shì)1位輸出(chū)信(xìn)号(hào)output。綜上(shàng)所(suǒ)述,補充輸入(rù)輸出(chū)端口(kǒu)定(dìng)義,其具體(tǐ)代(dài)碼如(rú)下(xià):
首先(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ù)值
根(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ù)值
綜上(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à)。
由(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à):
接下(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à):
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à):
完成(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à):
此(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à):
接下(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à):
那(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.25MHz(cnt3=0)是(shì)每16个(gè)點(diǎn)選擇一(yī)次(cì);頻率为(wèi)3.125MHz(cnt3=1)是(shì)每8个(gè)點(diǎn)選擇一(yī)次(cì);頻率为(wèi)1.5625MHz(cnt3=2)是(shì)每4个(gè)點(diǎn)選擇一(yī)次(cì);頻率为(wèi)781250Hz(cnt3=3)是(shì)每2个(gè)點(diǎn)選擇一(yī)次(cì);頻率为(wèi)390625Hz(cnt3=4)是(shì)每1个(gè)點(diǎn)選擇一(yī)次(cì);頻率为(wèi)195312.5Hz(cnt3=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à):
最(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 = ~clk;dac_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í)DA、DB两(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à):
至(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)reg。cnt0計(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à):
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,用(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à):
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ì)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à):
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,用(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à):
變(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)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à):
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à):
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à):
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à):
完成(chéng)代(dài)碼後(hòu),在(zài)最(zuì)後(hòu)一(yī)行写下(xià)endmodule。
至(zhì)此(cǐ),整个(gè)代(dài)碼的(de)設計(jì)工作已經(jīng)完成(chéng)。完整版的(de)工程代(dài)碼如(rú)下(xià):
第(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”。
图(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ì)

图(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)志
完成(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)。
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ì)
写出(chū)頂层代(dài)碼:
聲明(míng)輸入(rù)輸出(chū)屬性(xìng):
計(jì)算采樣(yàng)點(diǎn)对(duì)應(yìng)幅度(dù)值:
表(biǎo)3.12- 4DAC輸出(chū)采樣(yàng)點(diǎn)对(duì)應(yìng)幅度(dù)值
分(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:
設計(jì)輸出(chū)了(le)幾(jǐ)个(gè)點(diǎn)的(de)計(jì)數器cnt1:
設計(jì)計(jì)數2个(gè)正(zhèng)弦波(bō)的(de)計(jì)數器cnt2:
設計(jì)産生(shēng)6種(zhǒng)不(bù)同(tóng)頻率正(zhèng)弦波(bō)的(de)計(jì)數器cnt3:
設計(jì)變(biàn)量(liàng)x和(hé)y:
設計(jì)dac_da信(xìn)号(hào):
設計(jì)sin_data信(xìn)号(hào):
設計(jì)addr信(xìn)号(hào):
設計(jì)dac_sleep、dac_wra、dac_clka、dac_mode信(xìn)号(hào):
至(zhì)此(cǐ),主(zhǔ)體(tǐ)程序已經(jīng)完成(chéng),接下(xià)来(lái)是(shì)将module補充完整。
首先(xiān)来(lái)定(dìng)義信(xìn)号(hào)類(lèi)型。cnt0、add_cnt0、end_cnt0的(de)信(xìn)号(hào)定(dìng)義如(rú)下(xià):
cnt1、add_cnt1和(hé)end_cnt1的(de)信(xìn)号(hào)定(dìng)義如(rú)下(xià):
cnt2、add_cnt2和(hé)end_cnt2的(de)信(xìn)号(hào)定(dìng)義如(rú)下(xià):
cnt3、add_cnt3和(hé)end_cnt3的(de)信(xìn)号(hào)定(dìng)義如(rú)下(xià):
變(biàn)量(liàng)x,y的(de)信(xìn)号(hào)定(dìng)義如(rú)下(xià):
addr的(de)信(xìn)号(hào)定(dìng)義如(rú)下(xià):
sin_data的(de)信(xìn)号(hào)定(dìng)義如(rú)下(xià):
dac_da、dac_sleep、dac_wra、dac_clka、dac_mode的(de)信(xìn)号(hào)定(dìng)義如(rú)下(xià):
在(zài)代(dài)碼的(de)最(zuì)後(hòu)一(yī)行写下(xià)endmodule
完整版的(de)工程代(dài)碼如(rú)下(xià):
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)
新建工程後(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)志
按照如(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)
至(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)行交流讨論。








