第(dì)1节(jié) 項目背景
1.1 AD轉(zhuǎn)換
AD轉(zhuǎn)換就(jiù)是(shì)模數轉(zhuǎn)換。顧名思(sī)義,即是(shì)将模拟信(xìn)号(hào)轉(zhuǎn)換成(chéng)數字(zì)信(xìn)号(hào)。其類(lèi)型主(zhǔ)要(yào)包(bāo)括積分(fēn)型、逐次(cì)逼近(jìn)型、并行比較型/串并行型、Σ-Δ調制型、電(diàn)容阵(zhèn)列逐次(cì)比較型及(jí)壓頻變(biàn)換型。
A/D轉(zhuǎn)換器用(yòng)来(lái)通(tòng)过(guò)一(yī)定(dìng)的(de)電(diàn)路(lù)将模拟量(liàng)轉(zhuǎn)變(biàn)为(wèi)數字(zì)量(liàng)。模拟量(liàng)可(kě)以(yǐ)是(shì)電(diàn)壓、電(diàn)流等電(diàn)信(xìn)号(hào),也(yě)可(kě)以(yǐ)是(shì)壓力、温(wēn)度(dù)、湿(shī)度(dù)、位移、聲音(yīn)等非(fēi)電(diàn)信(xìn)号(hào)。但在(zài)進(jìn)行A/D轉(zhuǎn)換前(qián),輸入(rù)到(dào)A/D轉(zhuǎn)換器的(de)輸入(rù)信(xìn)号(hào)必須經(jīng)由(yóu)各(gè)種(zhǒng)傳感(gǎn)器将各(gè)種(zhǒng)物(wù)理量(liàng)轉(zhuǎn)換成(chéng)電(diàn)壓信(xìn)号(hào)。
AD轉(zhuǎn)換的(de)技術(shù)指标(biāo),一(yī)般有(yǒu)如(rú)下(xià)幾(jǐ)項:
1. 分(fēn)辨率(Resolution) :指數字(zì)量(liàng)變(biàn)化(huà)一(yī)个(gè)最(zuì)小量(liàng)时(shí)模拟信(xìn)号(hào)的(de)變(biàn)化(huà)量(liàng),定(dìng)義为(wèi)滿刻度(dù)與(yǔ)2^n的(de)比值。分(fēn)辨率又稱精度(dù),通(tòng)常以(yǐ)數字(zì)信(xìn)号(hào)的(de)位數来(lái)表(biǎo)示。
2. 轉(zhuǎn)換速率(Conversion Rate):指完成(chéng)從模拟信(xìn)号(hào)到(dào)數字(zì)信(xìn)号(hào)AD的(de)一(yī)次(cì)轉(zhuǎn)換所(suǒ)需时(shí)間(jiān)的(de)倒數。積分(fēn)型AD的(de)轉(zhuǎn)換时(shí)間(jiān)是(shì)毫(háo)秒(miǎo)級,屬低速AD;逐次(cì)比較型AD是(shì)微秒(miǎo)級,屬中(zhōng)速AD;全(quán)并行/串并行型AD可(kě)达(dá)到(dào)納秒(miǎo)級。而(ér)采樣(yàng)时(shí)間(jiān)則是(shì)另(lìng)外(wài)一(yī)个(gè)概念,是(shì)指两(liǎng)次(cì)轉(zhuǎn)換的(de)間(jiān)隔。为(wèi)了(le)保證轉(zhuǎn)換的(de)正(zhèng)确完成(chéng),采樣(yàng)速率 (Sample Rate)必須小于(yú)或(huò)等于(yú)轉(zhuǎn)換速率。有(yǒu)的(de)設計(jì)师(shī)習慣将轉(zhuǎn)換速率在(zài)數值上(shàng)等同(tóng)于(yú)采樣(yàng)速率,这(zhè)一(yī)做法也(yě)是(shì)可(kě)以(yǐ)接受的(de)。轉(zhuǎn)換速率常用(yòng)單位是(shì)ksps和(hé)Msps,表(biǎo)示每秒(miǎo)采樣(yàng)千(qiān)/百(bǎi)万(wàn)次(cì)(kilo / Million Samples per Second)。
3. 量(liàng)化(huà)誤差 (Quantizing Error) :指由(yóu)于(yú)AD的(de)有(yǒu)限分(fēn)辨率而(ér)引起的(de)誤差,即有(yǒu)限分(fēn)辨率AD的(de)階(jiē)梯(tī)狀轉(zhuǎn)移特(tè)性(xìng)曲(qū)線(xiàn)與(yǔ)无限分(fēn)辨率AD(理想(xiǎng)AD)的(de)轉(zhuǎn)移特(tè)性(xìng)曲(qū)線(xiàn)(直(zhí)線(xiàn))之間(jiān)的(de)最(zuì)大偏差。其通(tòng)常是(shì)1个(gè)或(huò)半个(gè)最(zuì)小數字(zì)量(liàng)的(de)模拟變(biàn)化(huà)量(liàng),表(biǎo)示为(wèi)1LSB、1/2LSB。
4. 偏移誤差(Offset Error) :輸入(rù)信(xìn)号(hào)为(wèi)零(líng)时(shí)輸出(chū)信(xìn)号(hào)不(bù)为(wèi)零(líng)的(de)值,可(kě)外(wài)接電(diàn)位器調至(zhì)最(zuì)小。
5. 滿刻度(dù)誤差(Full Scale Error) :滿度(dù)輸出(chū)时(shí)对(duì)應(yìng)的(de)輸入(rù)信(xìn)号(hào)與(yǔ)理想(xiǎng)輸入(rù)信(xìn)号(hào)值之差。
6. 線(xiàn)性(xìng)度(dù)(Linearity) :实際轉(zhuǎn)換器的(de)轉(zhuǎn)移函(hán)數與(yǔ)理想(xiǎng)直(zhí)線(xiàn)的(de)最(zuì)大偏移,但不(bù)包(bāo)括上(shàng)述三(sān)種(zhǒng)誤差。
其它(tā)指标(biāo):絕对(duì)精度(dù)(Absolute Accuracy) 、相对(duì)精度(dù)(Relative Accuracy)、微分(fēn)非(fēi)線(xiàn)性(xìng)、單調性(xìng)和(hé)无錯碼、總(zǒng)諧波(bō)失真(zhēn)(Total Harmonic Distotortion縮写THD)和(hé)積分(fēn)非(fēi)線(xiàn)性(xìng),在(zài)此(cǐ)不(bù)進(jìn)行一(yī)一(yī)具體(tǐ)描述。
1.2 開(kāi)發(fà)板AD原理图(tú)
至(zhì)簡設計(jì)法開(kāi)發(fà)板上(shàng)板载32Mhz轉(zhuǎn)換速率、8bit高(gāo)速AD芯片(piàn)AD9280,滿足各(gè)種(zhǒng)信(xìn)号(hào)的(de)采集,用(yòng)戶可(kě)以(yǐ)利用(yòng)其实現(xiàn)各(gè)種(zhǒng)常見(jiàn)濾波(bō)算法的(de)实現(xiàn)。開(kāi)發(fà)板中(zhōng)AD芯片(piàn)的(de)实際位置如(rú)下(xià)所(suǒ)示。

图(tú)3.15-1教学板中(zhōng)的(de)AD接口(kǒu)

图(tú)3.15-2AD9280的(de)原理图(tú)
上(shàng)图(tú)是(shì)AD9280的(de)原理图(tú),與(yǔ)FPGA相連(lián)的(de)信(xìn)号(hào)有(yǒu):AD_D0~7、AD_OTR、AD_CLK。
表(biǎo)3.15-1AD9280與(yǔ)FPGA的(de)相連(lián)信(xìn)号(hào)
1.3 AD9280的(de)控制时(shí)序
AD9280的(de)控制时(shí)序如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.15-3AD9280控制时(shí)序

图(tú)3.15-4AD9280的(de)时(shí)序參數

图(tú)3.15-5AD9280的(de)最(zuì)大时(shí)鐘(zhōng)
由(yóu)图(tú)3.15- 3可(kě)以(yǐ)看(kàn)出(chū),每个(gè)时(shí)鐘(zhōng)AD完成(chéng)一(yī)次(cì)轉(zhuǎn)換,但会(huì)延遲3个(gè)时(shí)鐘(zhōng)才輸出(chū)。例如(rú)图(tú)中(zhōng)第(dì)一(yī)个(gè)时(shí)鐘(zhōng)采集到(dào)S1,并对(duì)S1進(jìn)行模數轉(zhuǎn)換,經(jīng)过(guò)3个(gè)时(shí)鐘(zhōng)後(hòu)輸出(chū)DATA1,这(zhè)个(gè)DATA1即为(wèi)S1所(suǒ)應(yìng)对(duì)的(de)數字(zì)值。
由(yóu)參數时(shí)序可(kě)以(yǐ)看(kàn)出(chū),时(shí)鐘(zhōng)最(zuì)大值是(shì)32MHz。以(yǐ)上(shàng)就(jiù)是(shì)AD9280的(de)工作原理,可(kě)以(yǐ)發(fà)現(xiàn)AD9280的(de)控制非(fēi)常簡單,設置不(bù)超过(guò)32MHz的(de)时(shí)鐘(zhōng)後(hòu)对(duì)其采集就(jiù)行了(le)。
延續至(zhì)簡設計(jì)法的(de)設計(jì)特(tè)色(sè),開(kāi)始一(yī)个(gè)新的(de)設計(jì)之前(qián)依旧(jiù)要(yào)首先(xiān)明(míng)确設計(jì)目标(biāo)。設計(jì)目标(biāo)是(shì)整个(gè)設計(jì)的(de)核心(xīn)靈魂,後(hòu)續的(de)每个(gè)步驟與(yǔ)操作都是(shì)圍繞設計(jì)目标(biāo)進(jìn)行展(zhǎn)開(kāi)的(de)。至(zhì)簡設計(jì)法旨在(zài)讓設計(jì)师(shī)在(zài)設計(jì)过(guò)程中(zhōng)按照最(zuì)中(zhōng)的(de)簡單快(kuài)捷的(de)方(fāng)式实現(xiàn)每个(gè)步驟和(hé)思(sī)路(lù),明(míng)确設計(jì)目标(biāo)正(zhèng)是(shì)为(wèi)了(le)讓後(hòu)面(miàn)的(de)每个(gè)階(jiē)段(duàn)的(de)工作都有(yǒu)意(yì)義,而(ér)不(bù)去(qù)進(jìn)行不(bù)必要(yào)的(de)工程展(zhǎn)開(kāi),这(zhè)樣(yàng)一(yī)来(lái)可(kě)以(yǐ)少(shǎo)走(zǒu)很多(duō)彎路(lù)。对(duì)于(yú)初学者(zhě)来(lái)说(shuō),学習階(jiē)段(duàn)好(hǎo)習慣的(de)養成(chéng)可(kě)以(yǐ)为(wèi)之後(hòu)的(de)工程师(shī)生(shēng)涯打(dǎ)下(xià)堅实的(de)基礎。所(suǒ)以(yǐ)再次(cì)強(qiáng)調,在(zài)最(zuì)開(kāi)始設計(jì)前(qián)一(yī)定(dìng)要(yào)将設計(jì)目标(biāo)分(fēn)析透徹,認真(zhēn)思(sī)考本(běn)次(cì)設計(jì)最(zuì)終(zhōng)想(xiǎng)要(yào)实現(xiàn)什麼(me)目的(de),达(dá)到(dào)什麼(me)效果(guǒ),然後(hòu)再投入(rù)到(dào)設計(jì)中(zhōng)去(qù)。
本(běn)設計(jì)将開(kāi)發(fà)板上(shàng)的(de)AD接口(kǒu)與(yǔ)DA接口(kǒu)相連(lián)接,FPGA産生(shēng)正(zhèng)弦信(xìn)号(hào)後(hòu)将該正(zhèng)弦信(xìn)号(hào)輸出(chū)給(gěi)DA通(tòng)道(dào)A,經(jīng)过(guò)环(huán)回(huí)後(hòu),給(gěi)回(huí)AD9280的(de)輸入(rù)端。FPGA采集AD9280的(de)數據(jù)後(hòu)使用(yòng)signaltap采集數字(zì)信(xìn)号(hào),其实現(xiàn)結構如(rú)下(xià)图(tú)所(suǒ)示。
图(tú)3.15-6AD采集的(de)实現(xiàn)結構
正(zhèng)弦信(xìn)号(hào)的(de)産生(shēng)方(fāng)式與(yǔ)“FIR濾波(bō)器的(de)設計(jì)”方(fāng)式一(yī)致(zhì),正(zhèng)弦信(xìn)号(hào)的(de)頻率受開(kāi)發(fà)板上(shàng)的(de)3个(gè)撥碼開(kāi)關(guān)控制,用(yòng)3位信(xìn)号(hào)key表(biǎo)示,即一(yī)共(gòng)可(kě)以(yǐ)産生(shēng)8種(zhǒng)頻率。正(zhèng)弦信(xìn)号(hào)的(de)頻率約为(wèi)100KHz * (key+1)。當key值为(wèi)0时(shí)産生(shēng)約100KHz的(de)正(zhèng)弦信(xìn)号(hào),當key值为(wèi)1时(shí)産生(shēng)約200KHz的(de)正(zhèng)弦波(bō),當key值为(wèi)7时(shí)産生(shēng)約800KHz的(de)正(zhèng)弦波(bō)。FPGA産生(shēng)25MHz的(de)时(shí)鐘(zhōng),将其傳輸給(gěi)AD9280,即AD采樣(yàng)率为(wèi)25M。在(zài)設計(jì)中(zhōng)将这(zhè)一(yī)时(shí)鐘(zhōng)作为(wèi)SIGNALTAP的(de)采樣(yàng)时(shí)鐘(zhōng)来(lái)观察AD9280傳輸过(guò)来(lái)的(de)數據(jù)波(bō)形。
本(běn)次(cì)設計(jì)使用(yòng)到(dào)的(de)DA9709和(hé)AD9280連(lián)接示意(yì)如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.15-7教学板連(lián)接示意(yì)图(tú)
上(shàng)板效果(guǒ)图(tú)如(rú)下(xià)图(tú)所(suǒ)示,(用(yòng)signaltap抓取(qǔ)波(bō)形),想(xiǎng)要(yào)观看(kàn)完整上(shàng)板演示視頻效果(guǒ)的(de)读(dú)者(zhě)朋友可(kě)以(yǐ)登陸至(zhì)簡設計(jì)法官网(wǎng)查看(kàn):WWWXXXXX。

图(tú)3.15-8AD采集的(de)效果(guǒ)图(tú)
接下(xià)来(lái)就(jiù)進(jìn)入(rù)設計(jì)的(de)实現(xiàn)階(jiē)段(duàn),本(běn)書(shū)会(huì)按照步驟和(hé)原理分(fēn)析與(yǔ)读(dú)者(zhě)分(fēn)享案(àn)例的(de)实現(xiàn)方(fāng)法,考慮到(dào)初学者(zhě)的(de)需要(yào),此(cǐ)部(bù)分(fēn)的(de)內(nèi)容会(huì)比較詳细(xì)。基礎知識掌握得比較牢靠,只(zhī)想(xiǎng)学習此(cǐ)設計(jì)的(de)步驟的(de)同(tóng)学可(kě)以(yǐ)跳过(guò)此(cǐ)部(bù)分(fēn),後(hòu)面(miàn)章(zhāng)节(jié)有(yǒu)簡化(huà)版的(de)步驟分(fēn)享。在(zài)此(cǐ)還(huán)是(shì)建議初学者(zhě)不(bù)要(yào)選擇捷徑,一(yī)定(dìng)按照詳细(xì)分(fēn)析的(de)內(nèi)容進(jìn)行学習,只(zhī)有(yǒu)掌握基礎知識、打(dǎ)好(hǎo)基礎,才可(kě)以(yǐ)從容的(de)独立完成(chéng)項目設計(jì)。
3.1 頂层信(xìn)号(hào)
新建目录(lù):D:\mdy_book\ad_prj。在(zài)該目录(lù)中(zhōng),新建一(yī)个(gè)名为(wèi)ad_prj.v的(de)文(wén)件(jiàn)。用(yòng)GVIM打(dǎ)開(kāi)後(hòu)開(kāi)始編写代(dài)碼。这(zhè)里(lǐ)再次(cì)強(qiáng)調,建議初学者(zhě)按照書(shū)中(zhōng)提(tí)供的(de)文(wén)件(jiàn)路(lù)徑以(yǐ)及(jí)文(wén)件(jiàn)名進(jìn)行設置,避免後(hòu)續跳出(chū)未知錯誤。
确定(dìng)頂层信(xìn)号(hào)。分(fēn)析設計(jì)目标(biāo)可(kě)知本(běn)設計(jì)需要(yào)实現(xiàn)以(yǐ)下(xià)功能(néng):FPGA産生(shēng)控制DA9709的(de)信(xìn)号(hào),令其中(zhōng)的(de)通(tòng)道(dào)A産生(shēng)正(zhèng)弦波(bō)所(suǒ)对(duì)應(yìng)的(de)電(diàn)壓,同(tóng)时(shí)采集AD9280的(de)數據(jù)并观察。在(zài)此(cǐ)过(guò)程中(zhōng),想(xiǎng)要(yào)控制DA9709的(de)通(tòng)道(dào)A,就(jiù)需要(yào)控制DA9709的(de)MODE、SLEEP、CLK1、WRT1、DB7~0P1管(guǎn)脚。想(xiǎng)要(yào)采集AD9280,就(jiù)需要(yào)控制AD9280的(de)CLK、D0~D7管(guǎn)脚。根(gēn)據(jù)設計(jì)需求,共(gòng)需要(yào)10个(gè)信(xìn)号(hào):信(xìn)号(hào)clk連(lián)接到(dào)晶振表(biǎo)示50M时(shí)鐘(zhōng)的(de)輸入(rù);信(xìn)号(hào)rst_n連(lián)接到(dào)按鍵表(biǎo)示複位;3位信(xìn)号(hào)key表(biǎo)示三(sān)位撥碼開(kāi)關(guān);信(xìn)号(hào)dac_mode連(lián)接到(dào)DA9709的(de)MODE管(guǎn)脚用(yòng)来(lái)控制其工作模式;信(xìn)号(hào)dac_sleep連(lián)接到(dào)DA9709的(de)SLEEP管(guǎn)脚用(yòng)来(lái)控制其睡眠模式;信(xìn)号(hào)dac_clka連(lián)接到(dào)DA9709的(de)CLK1管(guǎn)脚用(yòng)来(lái)控制通(tòng)道(dào)A的(de)时(shí)鐘(zhōng);信(xìn)号(hào)dac_wra連(lián)接到(dào)DA9709的(de)WRT1管(guǎn)脚用(yòng)来(lái)控制通(tòng)道(dào)A的(de)写使能(néng);8位信(xìn)号(hào)dac_da連(lián)接到(dào)DA9709的(de)DB7~0P1管(guǎn)脚用(yòng)来(lái)控制通(tòng)道(dào)A的(de)写數據(jù);信(xìn)号(hào)ad_clk連(lián)接到(dào)AD9280的(de)CLK管(guǎn)脚用(yòng)来(lái)作来(lái)采樣(yàng)时(shí)鐘(zhōng);8位ad_in信(xìn)号(hào)連(lián)接到(dào)AD9280的(de)D7~0管(guǎn)脚用(yòng)来(lái)采集數據(jù)。
綜上(shàng)所(suǒ)述,本(běn)設計(jì)一(yī)共(gòng)需要(yào)10个(gè)信(xìn)号(hào):时(shí)鐘(zhōng)信(xìn)号(hào)clk,複位信(xìn)号(hào)rst_n,撥碼開(kāi)關(guān)的(de)輸入(rù)信(xìn)号(hào)key,dac_mode、dac_sleep、dac_clka、dac_wra、dac_da、ad_clk和(hé)ad_in,其中(zhōng)dac_da、ad_in是(shì)8位信(xìn)号(hào),key是(shì)3位信(xìn)号(hào),其他(tā)都是(shì)1位信(xìn)号(hào)。信(xìn)号(hào)和(hé)硬(yìng)件(jiàn)的(de)对(duì)應(yìng)關(guān)系(xì)見(jiàn)下(xià)表(biǎo)所(suǒ)示。
表(biǎo)3.15-2信(xìn)号(hào)和(hé)管(guǎn)脚關(guān)系(xì)
将module的(de)名稱定(dìng)義为(wèi)ad_prj,已知該設計(jì)有(yǒu)10个(gè)信(xìn)号(hào):clk、rst_n、key、dac_mode、dac_sleep、dac_clka、dac_wra、dac_da、ad_clk和(hé)ad_in,将與(yǔ)外(wài)部(bù)相連(lián)接的(de)信(xìn)号(hào)写入(rù)模块(kuài)接口(kǒu)列表(biǎo),具體(tǐ)頂层代(dài)碼如(rú)下(xià)所(suǒ)示:
随後(hòu)聲明(míng)輸入(rù)輸出(chū)屬性(xìng)。这(zhè)里(lǐ)需要(yào)聲明(míng)这(zhè)个(gè)信(xìn)号(hào)对(duì)于(yú)FPGA来(lái)说(shuō)屬于(yú)輸入(rù)還(huán)是(shì)輸出(chū),如(rú)果(guǒ)是(shì)輸入(rù)信(xìn)号(hào)則聲明(míng)其为(wèi)input,如(rú)果(guǒ)是(shì)輸出(chū)則聲明(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为(wèi)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为(wèi)1位輸入(rù)信(xìn)号(hào)input;dac_da为(wèi)8位的(de)輸出(chū)信(xìn)号(hào)output;dac_mode,dac_clka,dac_wra,dac_sleep为(wèi)1位輸出(chū)信(xìn)号(hào)output;ad_clk为(wèi)1位輸出(chū)信(xìn)号(hào)output;ad_in为(wèi)8位輸入(rù)信(xìn)号(hào)input;key为(wèi)3位輸入(rù)信(xìn)号(hào)input。綜上(shàng)所(suǒ)述,補充輸入(rù)輸出(chū)端口(kǒu)定(dìng)義的(de)代(dài)碼如(rú)下(xià):
将正(zhèng)弦信(xìn)号(hào)命名为(wèi)sin_data信(xìn)号(hào),sin_data是(shì)從表(biǎo)3.15- 3中(zhōng)選擇出(chū)来(lái)的(de)值,該表(biǎo)一(yī)共(gòng)有(yǒu)128个(gè)點(diǎn)。具體(tǐ)的(de)采樣(yàng)算法在(zài)前(qián)面(miàn)章(zhāng)节(jié)“信(xìn)号(hào)發(fà)生(shēng)器和(hé)DA轉(zhuǎn)換”中(zhōng)有(yǒu)詳细(xì)描述,这(zhè)里(lǐ)就(jiù)不(bù)再進(jìn)行贅述了(le)。
表(biǎo)3.15-3DAC輸出(chū)采樣(yàng)點(diǎn)对(duì)應(yìng)幅度(dù)值
定(dìng)義一(yī)个(gè)7位的(de)選擇信(xìn)号(hào)addr。只(zhī)要(yào)将addr控制好(hǎo),就(jiù)可(kě)以(yǐ)快(kuài)速得到(dào)sin_data。因(yīn)此(cǐ)可(kě)以(yǐ)写出(chū)下(xià)面(miàn)代(dài)碼:
接下(xià)来(lái)就(jiù)来(lái)确定(dìng)一(yī)下(xià)信(xìn)号(hào)addr。addr是(shì)用(yòng)来(lái)控制選擇數據(jù)的(de)地(dì)址,通(tòng)过(guò)控制addr的(de)增加值,就(jiù)能(néng)産生(shēng)多(duō)種(zhǒng)頻率的(de)正(zhèng)弦波(bō)。以(yǐ)頻率为(wèi)100KHz的(de)正(zhèng)弦信(xìn)号(hào)为(wèi)例。該正(zhèng)弦信(xìn)号(hào)的(de)周期(qī)是(shì)10000ns,本(běn)工程的(de)工作时(shí)鐘(zhōng)是(shì)20ns,也(yě)就(jiù)是(shì)10000/20 = 500个(gè)时(shí)鐘(zhōng)輸出(chū)一(yī)个(gè)正(zhèng)弦信(xìn)号(hào),即500个(gè)时(shí)鐘(zhōng)需要(yào)輸出(chū)128个(gè)點(diǎn),因(yīn)此(cǐ)每个(gè)时(shí)鐘(zhōng)addr增加的(de)值为(wèi)128/500 = 0.256。
按同(tóng)樣(yàng)的(de)分(fēn)析方(fāng)法,可(kě)以(yǐ)得到(dào)其他(tā)信(xìn)号(hào)頻率的(de)addr增加值如(rú)下(xià)所(suǒ)示:
100KHz的(de)正(zhèng)弦信(xìn)号(hào),每个(gè)时(shí)鐘(zhōng)addr增加:128/250 = 0.256
200KHz的(de)正(zhèng)弦信(xìn)号(hào),每个(gè)时(shí)鐘(zhōng)addr增加:128/250 = 0.512
300KHz的(de)正(zhèng)弦信(xìn)号(hào),每个(gè)时(shí)鐘(zhōng)addr增加:128/166.6667 = 0.7679
400KHz的(de)正(zhèng)弦信(xìn)号(hào),每个(gè)时(shí)鐘(zhōng)addr增加:128/125 = 1.024
500KHz的(de)正(zhèng)弦信(xìn)号(hào),每个(gè)时(shí)鐘(zhōng)addr增加:128/100 = 1.28
600KHz的(de)正(zhèng)弦信(xìn)号(hào),每个(gè)时(shí)鐘(zhōng)addr增加:128/83.3333 = 1.5358
700KHz的(de)正(zhèng)弦信(xìn)号(hào),每个(gè)时(shí)鐘(zhōng)addr增加:128/71.4286 = 1.792
800KHz的(de)正(zhèng)弦信(xìn)号(hào),每个(gè)时(shí)鐘(zhōng)addr增加:128/62.5 = 2.048
addr是(shì)表(biǎo)示的(de)是(shì)采樣(yàng)點(diǎn)的(de)值,即0~127的(de)整數,但是(shì)上(shàng)面(miàn)方(fāng)法計(jì)算出(chū)addr的(de)每次(cì)增加值包(bāo)含小數。衆所(suǒ)周知FPGA是(shì)沒(méi)有(yǒu)小數的(de),因(yīn)此(cǐ)可(kě)以(yǐ)将上(shàng)面(miàn)的(de)小數乘以(yǐ)1024後(hòu)取(qǔ)整,这(zhè)樣(yàng)一(yī)来(lái)就(jiù)變(biàn)成(chéng)了(le)每次(cì)要(yào)增加的(de)整數,将結果(guǒ)保存到(dào)addr_tmp中(zhōng)。即:
100KHz的(de)正(zhèng)弦信(xìn)号(hào),每个(gè)时(shí)鐘(zhōng)addr_tmp增加:0.256*1024 = 262.144 ≈ 262
200KHz的(de)正(zhèng)弦信(xìn)号(hào),每个(gè)时(shí)鐘(zhōng)addr_tmp增加:0.512*1024 = 524.288 ≈ 524
300KHz的(de)正(zhèng)弦信(xìn)号(hào),每个(gè)时(shí)鐘(zhōng)addr_tmp增加:0.7679*1024 =786.3296 ≈ 786
400KHz的(de)正(zhèng)弦信(xìn)号(hào),每个(gè)时(shí)鐘(zhōng)addr_tmp增加:1.024*1024 =1028.576 ≈ 1029
500KHz的(de)正(zhèng)弦信(xìn)号(hào),每个(gè)时(shí)鐘(zhōng)addr_tmp增加:1.28*1024 =1310.72 ≈ 1311
600KHz的(de)正(zhèng)弦信(xìn)号(hào),每个(gè)时(shí)鐘(zhōng)addr_tmp增加:1.5358*1024 =1572.6592 ≈1573
700KHz的(de)正(zhèng)弦信(xìn)号(hào),每个(gè)时(shí)鐘(zhōng)addr_tmp增加:1.792*1024 =1835.008 ≈ 1835
800KHz的(de)正(zhèng)弦信(xìn)号(hào),每个(gè)时(shí)鐘(zhōng)addr_tmp增加: 2.048*1024 =2097.152 ≈ 2097
分(fēn)析設計(jì)目标(biāo)可(kě)以(yǐ)知道(dào)上(shàng)面(miàn)8種(zhǒng)頻率信(xìn)号(hào)都是(shì)由(yóu)撥碼信(xìn)号(hào)key控制的(de),因(yīn)此(cǐ)可(kě)以(yǐ)写出(chū)addr_tmp的(de)代(dài)碼如(rú)下(xià):
而(ér)addr_tmp是(shì)小數乘以(yǐ)1024後(hòu)得到(dào)的(de),因(yīn)此(cǐ)最(zuì)終(zhōng)addr_tmp還(huán)需要(yào)除以(yǐ)1024後(hòu)再賦給(gěi)addr。在(zài)設計(jì)中(zhōng)除以(yǐ)1024即信(xìn)号(hào)向(xiàng)右(yòu)移10位。addr_tmp向(xiàng)右(yòu)移10位後(hòu),保留7位結果(guǒ)賦給(gěi)addr就(jiù)可(kě)以(yǐ)了(le)。因(yīn)此(cǐ)addr_tmp位宽(kuān)为(wèi)17位,其代(dài)碼表(biǎo)示如(rú)下(xià):
接下(xià)来(lái)設計(jì)信(xìn)号(hào)dac_da。dac_da是(shì)直(zhí)接輸出(chū)正(zhèng)弦信(xìn)号(hào)的(de),但由(yóu)于(yú)DA的(de)輸出(chū)電(diàn)壓與(yǔ)dac_da是(shì)成(chéng)反(fǎn)比例線(xiàn)性(xìng)關(guān)系(xì),所(suǒ)以(yǐ)dac_da都是(shì)通(tòng)过(guò)(255-sin_data)得到(dào)。写代(dài)碼时(shí)可(kě)以(yǐ)調用(yòng)至(zhì)簡設計(jì)法模板,在(zài)編輯模式下(xià)輸入(rù)“Shixu2”,将其補充完整得到(dào)dac_da的(de)代(dài)碼表(biǎo)示如(rú)下(xià):
接着設計(jì)信(xìn)号(hào)dac_sleep,AD是(shì)一(yī)直(zhí)工作的(de),因(yīn)此(cǐ)dac_sleep一(yī)直(zhí)为(wèi)0;dac_clka为(wèi)了(le)滿足tS的(de)时(shí)間(jiān)要(yào)求,可(kě)以(yǐ)讓dac_clka = ~clk,dac_wra信(xìn)号(hào)可(kě)以(yǐ)與(yǔ)dac_clka相同(tóng),其具體(tǐ)代(dài)碼表(biǎo)示如(rú)下(xià):
至(zhì)此(cǐ),主(zhǔ)體(tǐ)程序已經(jīng)完成(chéng)。
接下(xià)来(lái)将module補充完整首先(xiān)来(lái)定(dìng)義信(xìn)号(hào)類(lèi)型。reg和(hé)wire的(de)判斷很容易搞不(bù)清(qīng)楚總(zǒng)会(huì)有(yǒu)多(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)寄存器。但是(shì)这(zhè)些其实和(hé)reg型還(huán)是(shì)wire型都并无關(guān)系(xì),在(zài)進(jìn)行信(xìn)号(hào)類(lèi)型判斷时(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)。
addr是(shì)用(yòng)assign設計(jì)的(de),因(yīn)此(cǐ)類(lèi)型为(wèi)wire。addr值最(zuì)大为(wèi)127,需要(yào)用(yòng)7根(gēn)線(xiàn)表(biǎo)示,即位宽(kuān)为(wèi)7。
關(guān)于(yú)信(xìn)号(hào)位宽(kuān)的(de)确定(dìng)方(fāng)法,在(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)法将addr的(de)最(zuì)大計(jì)數值127輸入(rù)到(dào)計(jì)算器中(zhōng),如(rú)下(xià)图(tú)所(suǒ)示,可(kě)以(yǐ)看(kàn)到(dào)其位宽(kuān)为(wèi)7。

图(tú)3.15-9通(tòng)过(guò)計(jì)算器獲取(qǔ)信(xìn)号(hào)位宽(kuān)
綜上(shàng)所(suǒ)述,addr的(de)定(dìng)義代(dài)碼如(rú)下(xià)所(suǒ)示。
addr_tmp是(shì)用(yòng)always設計(jì)的(de)信(xìn)号(hào),因(yīn)此(cǐ)類(lèi)型为(wèi)reg。該信(xìn)号(hào)的(de)位宽(kuān)是(shì)17,代(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)示,位宽(kuān)为(wèi)8,这(zhè)里(lǐ)可(kě)以(yǐ)在(zài)編輯模式下(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。
依旧(jiù)在(zài)編輯模式下(xià)輸入(rù)“ Reg8”“Wire1”調用(yòng)至(zhì)簡設計(jì)法模板,補充完整後(hòu)得到(dào)代(dài)碼如(rú)下(xià):
ad_clk是(shì)由(yóu)例化(huà)模块(kuài)輸出(chū)信(xìn)号(hào),非(fēi)always産生(shēng),可(kě)以(yǐ)定(dìng)義为(wèi)wire型,位宽(kuān)只(zhī)有(yǒu)1位。在(zài)編輯模式下(xià)輸入(rù)“Wire1”調用(yòng)至(zhì)簡設計(jì)法模板,補充完整後(hòu)得到(dào)代(dài)碼如(rú)下(xià):
至(zhì)此(cǐ),整个(gè)代(dài)碼的(de)設計(jì)工作已經(jīng)完成(chéng)。完整版的(de)工程代(dài)碼如(rú)下(xià):
4.1 添加文(wén)件(jiàn)
打(dǎ)開(kāi)软(ruǎn)件(jiàn)“Quartus”,點(diǎn)擊“File”菜單下(xià)的(de)“New Project Wizard”,如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.15-10QUARTUS新建工程命令
弹出(chū)“Introduction”界面(miàn)點(diǎn)擊“Next”,如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.15-11QUARTUS新建工程介紹界面(miàn)
設置工程目录(lù)、工程名、頂层模块(kuài)名,其中(zhōng)工程目录(lù)設置为(wèi):D:\mdy_book\ad_prj,工程名設置为(wèi):ad_prj,頂层模块(kuài)名設置为(wèi):ad_prj,填写完畢後(hòu)直(zhí)接點(diǎn)擊“next”,如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.15-12QUARTUS設置新工程路(lù)徑和(hé)名稱
在(zài)設置新工程類(lèi)型界面(miàn)選擇“Empty project”選項,選擇空白工程點(diǎn)擊“Next”,如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.15-13QUARTUS設置新工程類(lèi)型
錯誤!未找(zhǎo)到(dào)引用(yòng)源。接下(xià)来(lái)添加文(wén)件(jiàn),此(cǐ)处不(bù)選擇任何文(wén)件(jiàn),直(zhí)接點(diǎn)擊“Next”,如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.15-14QUARTUS添加文(wén)件(jiàn)到(dào)工程界面(miàn)
随後(hòu)進(jìn)入(rù)芯片(piàn)型号(hào)選擇界面(miàn),選擇“Cyclone ⅣE”,在(zài)芯片(piàn)型号(hào)選擇处選擇“EP4CE15F23C8”,如(rú)下(xià)图(tú)所(suǒ)示,完成(chéng)選擇後(hòu)點(diǎn)擊“Finish”。

图(tú)3.15-15QUARTUS設置新工程的(de)芯片(piàn)型号(hào)
打(dǎ)開(kāi)软(ruǎn)件(jiàn)“Quartus”,在(zài)“Project”菜單中(zhōng)選擇“Add/Remove File to Project”,随後(hòu)会(huì)弹出(chū)文(wén)件(jiàn)窗(chuāng)口(kǒu)。

图(tú)3.15-16添加文(wén)件(jiàn)命令界面(miàn)
點(diǎn)擊右(yòu)上(shàng)角(jiǎo)的(de)
按鈕,在(zài)弹出(chū)来(lái)的(de)窗(chuāng)口(kǒu)中(zhōng)双(shuāng)擊選擇D:\mdy_book\ad_prj目录(lù)下(xià)的(de)“ad_prj.v”和(hé)“my_pll.qip”文(wén)件(jiàn)。點(diǎn)擊“Add”後(hòu)完成(chéng)添加,添加成(chéng)功後(hòu)點(diǎn)擊“OK”關(guān)閉本(běn)窗(chuāng)口(kǒu)。添加文(wén)件(jiàn)成(chéng)功界面(miàn)如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.15-17添加文(wén)件(jiàn)成(chéng)功界面(miàn)
編譯界面(miàn)如(rú)下(xià)图(tú)所(suǒ)示,在(zài)菜單欄中(zhōng)選中(zhōng)“Processing”然後(hòu)選擇“Start Compilation”,開(kāi)始对(duì)整个(gè)工程進(jìn)行編譯和(hé)綜合。

图(tú)3.15-18編譯命令界面(miàn)
當出(chū)現(xiàn)如(rú)下(xià)图(tú)所(suǒ)示的(de)界面(miàn)就(jiù)说(shuō)明(míng)編譯綜合成(chéng)功。

图(tú)3.15-19編譯成(chéng)功界面(mià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.15-20配置管(guǎn)脚命令界面(miàn)
在(zài)配置窗(chuāng)口(kǒu)最(zuì)下(xià)方(fāng)中(zhōng)的(de)“location”一(yī)列,參考表(biǎo)3.2-2信(xìn)号(hào)和(hé)管(guǎn)脚關(guān)系(xì),按照表(biǎo)3.15- 2中(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.15-22。配置完成(chéng)後(hòu),關(guān)閉Pin Planner,软(ruǎn)件(jiàn)自(zì)動(dòng)会(huì)保存管(guǎn)脚配置信(xìn)息。

图(tú)3.15-21配置管(guǎn)脚界面(miàn)
表(biǎo)3.15 - 1信(xìn)号(hào)和(hé)管(guǎn)脚關(guān)系(xì)

图(tú)3.15-22配置管(guǎn)脚成(chéng)功界面(miàn)
[size=13.3333px]
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ú)下(xià)图(tú)所(suǒ)示。

图(tú)3.15-23編譯命令界面(miàn)
當出(chū)現(xiàn)图(tú)3.2-19QUARTUS編譯成(chéng)功标(biāo)志时(shí)就(jiù)说(shuō)明(míng)編譯綜合成(chéng)功。

图(tú)3.15-24編譯成(chéng)功界面(miàn)
完成(chéng)編譯後(hòu)開(kāi)始進(jìn)行上(shàng)板調試操作,開(kāi)發(fà)板連(lián)接方(fāng)式如(rú)下(xià)图(tú)所(suǒ)示。将電(diàn)源接上(shàng)開(kāi)發(fà)板,USB BLASTER一(yī)端連(lián)接到(dào)JTAG插口(kǒu),另(lìng)一(yī)端連(lián)到(dào)PC的(de)USB接口(kǒu)。将開(kāi)發(fà)板上(shàng)的(de)AD接口(kǒu)和(hé)DA两(liǎng)个(gè)通(tòng)道(dào)相連(lián),連(lián)接完成(chéng)後(hòu)再将電(diàn)源打(dǎ)開(kāi)。

图(tú)3.15-25教学板連(lián)接示意(yì)图(tú)
編譯通(tòng)过(guò)後(hòu),點(diǎn)擊“Tools”選項下(xià)的(de)“SingaⅡLogic Analyzer”。

图(tú)3.15-26設置signaltap界面(miàn)
得到(dào)的(de)原始“signaltap”界面(miàn)如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.15-27原始“signaltap”界面(miàn)
點(diǎn)擊“Hardware”中(zhōng)的(de)“Setup”選項,弹出(chū)“Hadware Setup”窗(chuāng)口(kǒu)。在(zài)“Currently selected hardware”選項下(xià)選擇“USB-Blaster [USB0]”,如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.15-28Hadware Setup設置界面(miàn)
點(diǎn)擊“SOF Manager”右(yòu)邊(biān)的(de)三(sān)个(gè)點(diǎn),随後(hòu)会(huì)弹出(chū)文(wén)件(jiàn)選擇窗(chuāng)口(kǒu),如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.15-29弹出(chū)文(wén)件(jiàn)選擇窗(chuāng)口(kǒu)
選擇“ad_prj.sof ”文(wén)件(jiàn),點(diǎn)擊“Open”如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.15-30選擇文(wén)件(jiàn)界面(miàn)
配置时(shí)鐘(zhōng)界面(miàn)如(rú)下(xià)图(tú)所(suǒ)示,點(diǎn)擊“Clock”選項後(hòu)的(de)三(sān)个(gè)點(diǎn)标(biāo)志,“Filter”处選擇下(xià)拉菜單中(zhōng)的(de)“Design Entry(all names)”選項,點(diǎn)擊“list”,在(zài)“Nodes Found”欄選擇“clk”選項,點(diǎn)擊两(liǎng)欄中(zhōng)間(jiān)第(dì)一(yī)个(gè)右(yòu)向(xiàng)箭头(tóu)後(hòu)可(kě)以(yǐ)看(kàn)到(dào)“Selected Nodes”欄出(chū)現(xiàn)对(duì)應(yìng)的(de)“clk”,如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.15-31配置时(shí)鐘(zhōng)界面(miàn)
在(zài)“Sample depth”選項下(xià)拉菜單中(zhōng)選擇1K,如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.15-32采樣(yàng)設置
選擇所(suǒ)有(yǒu)要(yào)抓取(qǔ)的(de)信(xìn)号(hào),選擇完畢後(hòu)點(diǎn)擊“OK”。

图(tú)3.15-33選擇要(yào)抓取(qǔ)的(de)信(xìn)号(hào)
回(huí)到(dào)本(běn)界面(miàn)再次(cì)進(jìn)行編譯。

图(tú)3.15-34再次(cì)進(jìn)行編譯
點(diǎn)擊“SOF Manager”進(jìn)行下(xià)载,如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.15-35下(xià)载界面(miàn)
需要(yào)注意(yì)的(de)是(shì):點(diǎn)擊
按鍵表(biǎo)示抓取(qǔ)一(yī)次(cì),點(diǎn)擊
按鍵表(biǎo)示連(lián)續抓取(qǔ)。
为(wèi)了(le)方(fāng)便查看(kàn)波(bō)形,可(kě)以(yǐ)在(zài)“Hierarchy Display”區(qū)域空白处右(yòu)鍵,點(diǎn)擊“Bus Display Format”選項中(zhōng)的(de)“Unsigned Line Chart”,得到(dào)更(gèng)加细(xì)节(jié)化(huà)的(de)正(zhèng)弦波(bō),如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.15-36细(xì)节(jié)化(huà)观察波(bō)形
100KHz的(de)正(zhèng)弦波(bō)如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.15-37100KHz正(zhèng)弦波(bō)
300kHz的(de)正(zhèng)弦波(bō)如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.15-38 300KHz正(zhèng)弦波(bō)
500KHz的(de)正(zhèng)弦波(bō)如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.15-39 500KHz正(zhèng)弦波(bō)
800KHz的(de)正(zhèng)弦波(bō)如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.15-40 800KHz正(zhèng)弦波(bō)
第(dì)5节(jié) 簡化(huà)版步驟分(fēn)享
这(zhè)里(lǐ)依旧(jiù)会(huì)分(fēn)享簡化(huà)版的(de)步驟,方(fāng)便掌握基礎原理後(hòu)進(jìn)行反(fǎn)複操作複習。
5.1.1 頂层信(xìn)号(hào)
新建目录(lù):D:\mdy_book\ad_prj。在(zài)該目录(lù)中(zhōng),新建一(yī)个(gè)名为(wèi)ad_prj.v的(de)文(wén)件(jiàn),并用(yòng)GVIM打(dǎ)開(kāi),開(kāi)始編写代(dài)碼。
分(fēn)析設計(jì)目标(biāo),确定(dìng)頂层信(xìn)号(hào)。信(xìn)号(hào)和(hé)硬(yìng)件(jiàn)的(de)对(duì)應(yìng)關(guān)系(xì)見(jiàn)表(biǎo)3.15- 2。
表(biǎo)3.15- 2信(xìn)号(hào)和(hé)管(guǎn)脚關(guān)系(xì)
写出(chū)頂层代(dài)碼如(rú)下(xià):
聲明(míng)輸入(rù)輸出(chū)屬性(xìng)代(dài)碼如(rú)下(xià):
采樣(yàng)點(diǎn)对(duì)應(yìng)幅度(dù)值如(rú)下(xià)表(biǎo)所(suǒ)示。
表(biǎo)3.15- 3DAC輸出(chū)采樣(yàng)點(diǎn)对(duì)應(yìng)幅度(dù)值
設計(jì)sin_data信(xìn)号(hào):
設計(jì)addr信(xìn)号(hào):
設計(jì)addr_tmp信(xìn)号(hào):
設計(jì)dac_da信(xìn)号(hào):
設計(jì)dac_sleep信(xìn)号(hào):
至(zhì)此(cǐ),主(zhǔ)體(tǐ)程序已經(jīng)完成(chéng),接下(xià)来(lái)是(shì)将module補充完整。
首先(xiān)定(dìng)義信(xìn)号(hào)類(lèi)型,addr信(xìn)号(hào)的(de)定(dìng)義代(dài)碼表(biǎo)示如(rú)下(xià):
addr_tmp信(xìn)号(hào)的(de)定(dìng)義代(dài)碼表(biǎo)示如(rú)下(xià):
sin_data信(xìn)号(hào)的(de)定(dìng)義代(dài)碼表(biǎo)示如(rú)下(xià):
dac_da、dac_sleep、dac_wra、dac_clka、dac_mode信(xìn)号(hào)的(de)定(dìng)義代(dài)碼表(biǎo)示如(rú)下(xià):
ad_clk信(xìn)号(hào)的(de)定(dìng)義代(dài)碼表(biǎo)示如(rú)下(xià):
完整版的(de)工程代(dài)碼如(rú)下(xià):
5.2.1 添加文(wén)件(jiàn)
打(dǎ)開(kāi)软(ruǎn)件(jiàn)“Quartus”,點(diǎn)擊“File”菜單下(xià)的(de)“New Project Wizard”,如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.15- 10 QUARTUS新建工程命令
點(diǎn)擊“Next”。

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

图(tú)3.15- 12 QUARTUS設置新工程路(lù)徑和(hé)名稱
選擇“Empty project”後(hòu)點(diǎn)擊“Next”。

图(tú)3.15- 13 QUARTUS設置新工程類(lèi)型
錯誤!未找(zhǎo)到(dào)引用(yòng)源。接着是(shì)添加文(wén)件(jiàn)界面(miàn)。此(cǐ)处不(bù)選擇任何文(wén)件(jiàn),直(zhí)接點(diǎn)擊“Next”,如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.15- 14 QUARTUS添加文(wén)件(jiàn)到(dào)工程界面(miàn)
“Device family”選項中(zhōng)選擇“Cyclone ⅣE”,“Available devices”選項下(xià)選擇“EP4CE15F23C8”随後(hòu)點(diǎn)擊“Next”。

图(tú)3.15- 15 QUARTUS設置新工程的(de)芯片(piàn)型号(hào)
再次(cì)打(dǎ)開(kāi)软(ruǎn)件(jiàn)“Quartus”,在(zài)“Project”菜單中(zhōng)選擇“Add/Remove File to Project”,随後(hòu)弹出(chū)文(wén)件(jiàn)窗(chuāng)口(kǒu)。

图(tú)3.15- 16 添加文(wén)件(jiàn)命令界面(miàn)
點(diǎn)擊右(yòu)上(shàng)角(jiǎo)的(de)
按鈕,在(zài)弹出(chū)来(lái)的(de)窗(chuāng)口(kǒu)中(zhōng)双(shuāng)擊選擇D:\mdy_book\ad_prj目录(lù)下(xià)的(de)“ad_prj.v”和(hé)“my_pll.qip”文(wén)件(jiàn)。點(diǎn)擊“Add”添加成(chéng)功後(hòu)點(diǎn)擊“OK”,關(guān)閉本(běn)窗(chuāng)口(kǒu)。

图(tú)3.15- 17 添加文(wén)件(jiàn)成(chéng)功界面(miàn)
5.2.2 綜合
在(zài)菜單欄中(zhōng)選中(zhōng)“Processing”,然後(hòu)選擇“Start Compilation”,開(kāi)始对(duì)整个(gè)工程進(jìn)行編譯和(hé)綜合。

图(tú)3.15- 18 編譯命令界面(miàn)
當出(chū)現(xiàn)下(xià)图(tú)的(de)界面(miàn),則说(shuō)明(míng)編譯綜合成(chéng)功。

图(tú)3.15- 19 編譯成(chéng)功界面(miàn)
配置管(guǎn)脚界面(miàn)如(rú)下(xià)图(tú)所(suǒ)示,在(zài)菜單欄中(zhōng)選中(zhōng)“Assignments”,然後(hòu)選擇“Pin Planner”,随後(hòu)会(huì)弹出(chū)配置管(guǎn)脚的(de)窗(chuāng)口(kǒu)。

图(tú)3.15- 20 配置管(guǎn)脚命令界面(miàn)
在(zài)配置窗(chuāng)口(kǒu)“location”配置管(guǎn)脚,配置完成(chéng)關(guān)閉“Pin Planner”即可(kě)自(zì)動(dòng)保存配置信(xìn)息。

图(tú)3.15- 21 配置管(guǎn)脚界面(miàn)
再次(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ú)下(xià)图(tú)所(suǒ)示。

图(tú)3.15- 23 編譯命令界面(miàn)
當出(chū)現(xiàn)图(tú)3.2-19QUARTUS編譯成(chéng)功标(biāo)志,則说(shuō)明(míng)編譯綜合成(chéng)功。

图(tú)3.15- 24 編譯成(chéng)功界面(miàn)
完成(chéng)編譯後(hòu)開(kāi)始進(jìn)行上(shàng)板調試操作,開(kāi)發(fà)板連(lián)接方(fāng)式如(rú)下(xià)图(tú)所(suǒ)示。将電(diàn)源接上(shàng)開(kāi)發(fà)板,USB BLASTER一(yī)端連(lián)接到(dào)JTAG插口(kǒu),另(lìng)一(yī)端連(lián)到(dào)PC的(de)USB接口(kǒu)。将開(kāi)發(fà)板上(shàng)的(de)AD接口(kǒu)和(hé)DA两(liǎng)个(gè)通(tòng)道(dào)相連(lián),連(lián)接完成(chéng)後(hòu)再将電(diàn)源打(dǎ)開(kāi)。

图(tú)3.15- 25 教学板連(lián)接示意(yì)图(tú)
編譯通(tòng)过(guò)後(hòu),點(diǎn)擊“Tools”選項下(xià)的(de)“SingaⅡLogic Analyzer”。

图(tú)3.15-41設置signaltap界面(miàn)
得到(dào)的(de)原始“signaltap”界面(miàn)如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.15-42原始“signaltap”界面(miàn)
點(diǎn)擊“Hardware”中(zhōng)的(de)“Setup”選項,弹出(chū)“Hadware Setup”窗(chuāng)口(kǒu)。在(zài)“Currently selected hardware”選項下(xià)選擇“USB-Blaster [USB0]”,如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.15-43Hadware Setup設置界面(miàn)
點(diǎn)擊“SOF Manager”右(yòu)邊(biān)的(de)三(sān)个(gè)點(diǎn),随後(hòu)会(huì)弹出(chū)文(wén)件(jiàn)選擇窗(chuāng)口(kǒu),如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.15-44弹出(chū)文(wén)件(jiàn)選擇窗(chuāng)口(kǒu)
選擇“ad_prj.sof ”文(wén)件(jiàn),點(diǎn)擊“Open”如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.15-45選擇文(wén)件(jiàn)界面(miàn)
配置时(shí)鐘(zhōng)界面(miàn)如(rú)下(xià)图(tú)所(suǒ)示,點(diǎn)擊“Clock”選項後(hòu)的(de)三(sān)个(gè)點(diǎn)标(biāo)志,“Filter”处選擇下(xià)拉菜單中(zhōng)的(de)“Design Entry(all names)”選項,點(diǎn)擊“list”,在(zài)“Nodes Found”欄選擇“clk”選項,點(diǎn)擊两(liǎng)欄中(zhōng)間(jiān)第(dì)一(yī)个(gè)右(yòu)向(xiàng)箭头(tóu)後(hòu)可(kě)以(yǐ)看(kàn)到(dào)“Selected Nodes”欄出(chū)現(xiàn)对(duì)應(yìng)的(de)“clk”,如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.15-46配置时(shí)鐘(zhōng)界面(miàn)
在(zài)“Sample depth”選項下(xià)拉菜單中(zhōng)選擇1K,如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.15-47采樣(yàng)設置
選擇所(suǒ)有(yǒu)要(yào)抓取(qǔ)的(de)信(xìn)号(hào),選擇完畢後(hòu)點(diǎn)擊“OK”。

图(tú)3.15-48選擇要(yào)抓取(qǔ)的(de)信(xìn)号(hào)
回(huí)到(dào)本(běn)界面(miàn)再次(cì)進(jìn)行編譯。

图(tú)3.15-49再次(cì)進(jìn)行編譯
點(diǎn)擊“SOF Manager”進(jìn)行下(xià)载,如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.15-50下(xià)载界面(miàn)
需要(yào)注意(yì)的(de)是(shì):點(diǎn)擊
按鍵表(biǎo)示抓取(qǔ)一(yī)次(cì),點(diǎn)擊
按鍵表(biǎo)示連(lián)續抓取(qǔ)。
为(wèi)了(le)方(fāng)便查看(kàn)波(bō)形,可(kě)以(yǐ)在(zài)“Hierarchy Display”區(qū)域空白处右(yòu)鍵,點(diǎn)擊“Bus Display Format”選項中(zhōng)的(de)“Unsigned Line Chart”,得到(dào)更(gèng)加细(xì)节(jié)化(huà)的(de)正(zhèng)弦波(bō),如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.15-51细(xì)节(jié)化(huà)观察波(bō)形
100KHz的(de)正(zhèng)弦波(bō)如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.15-52100KHz正(zhèng)弦波(bō)
300kHz的(de)正(zhèng)弦波(bō)如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.15-53 300KHz正(zhèng)弦波(bō)
500KHz的(de)正(zhèng)弦波(bō)如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.15-54 500KHz正(zhèng)弦波(bō)
800KHz的(de)正(zhèng)弦波(bō)如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.15-55 800KHz正(zhèng)弦波(bō)
至(zhì)此(cǐ),整个(gè)AD采集設計(jì)已經(jīng)分(fēn)享完畢,在(zài)学会(huì)了(le)整个(gè)設計(jì)之後(hòu)可(kě)以(yǐ)展(zhǎn)開(kāi)更(gèng)多(duō)思(sī)考,基于(yú)原理不(bù)變(biàn)的(de)情(qíng)況下(xià)多(duō)做一(yī)些嘗試,比如(rú)更(gèng)改産生(shēng)的(de)正(zhèng)弦波(bō)周期(qī)後(hòu)查看(kàn)展(zhǎn)示效果(guǒ),这(zhè)樣(yàng)可(kě)以(yǐ)幫助同(tóng)学们(men)更(gèng)深刻的(de)掌握本(běn)案(àn)例。也(yě)欢迎有(yǒu)更(gèng)多(duō)思(sī)路(lù)和(hé)想(xiǎng)法的(de)同(tóng)学前(qián)往至(zhì)簡設計(jì)法論壇上(shàng)進(jìn)行交流讨論。








