⁩⁣⁩⁨ ⁩⁤⁢⁢⁢⁥⁩ ⁥⁣⁦⁡ ⁣⁤⁨ ⁡⁨⁠⁤⁠ ⁦⁧⁡⁤⁣⁡⁡⁨⁤ 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.14AD采集--明(míng)德揚科教(minyingyiyuan.com)

發(fà)布(bù)时(shí)間(jiān):2020-07-06   作者(zhě):admin 浏覽量(liàng):
第(dì)十(shí)五(wǔ)章(zhāng) AD采集

第(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)1LSB1/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~7AD_OTRAD_CLK

表(biǎo)3.15-1AD9280與(yǔ)FPGA的(de)相連(lián)信(xìn)号(hào)
AD9280管(guǎn)脚
原理图(tú)信(xìn)号(hào)
FPGA管(guǎn)脚
作用(yòng)
CLK
AD_CLK
AD9280的(de)工作时(shí)鐘(zhōng),最(zuì)大是(shì)32MHz
OTR
AD_OTR
超过(guò)電(diàn)壓範圍指示信(xìn)号(hào)
D7
AD_D7
AD轉(zhuǎn)換後(hòu)的(de)數字(zì)值。
D6
AD_D6
D5
AD_D5
D4
AD_D4
D3
AD_D3
D2
AD_D2
D1
AD_D1
D0
AD_D0

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)。

第(dì)2节(jié) 設計(jì)目标(biāo)

延續至(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ú)

第(dì)3节(jié) 設計(jì)实現(xiàn)
接下(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)MODESLEEPCLK1WRT1DB7~0P1管(guǎn)脚。想(xiǎng)要(yào)采集AD9280,就(jiù)需要(yào)控制AD9280的(de)CLKD0~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);8ad_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)keydac_modedac_sleepdac_clkadac_wradac_daad_clk和(hé)ad_in,其中(zhōng)dac_daad_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ì)
器件(jiàn)
DA9709管(guǎn)脚
AD9280管(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]
U1
CLK
AD_CLK
L6
ad_clk
D7
AD_D7
N5
ad_in[7]
D6
AD_D6
M4
ad_in[6]
D5
AD_D5
M5
ad_in[5]
D4
AD_D4
R6
ad_in[4]
D3
AD_D3
T5
ad_in[3]
D2
AD_D2
U7
ad_in[2]
D1
AD_D1
V5
ad_in[1]
D0
AD_D0
V6
ad_in[0]
X1
SYS_CLK
G1
clk
K1
SYS_RST
AB12
rst_n
sw0
SW_D0
AA3
key[2]
sw1
SW_D1
AB3
key[1]
sw2
SW_D2
AB5
key[0]

module的(de)名稱定(dìng)義为(wèi)ad_prj,已知該設計(jì)有(yǒu)10个(gè)信(xìn)号(hào):clkrst_nkeydac_modedac_sleepdac_clkadac_wradac_daad_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ǒ)示:
1
2
3
4
5
6
7
8
9
module ad_prj(
clk  ,
rst_n  ,
           key       ,
dac_mode ,
dac_clka  ,
dac_da  ,
dac_wra  ,
dac_sleep,
ad_clk  ,
ad_in
           );

随後(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)inputdac_da为(wèi)8位的(de)輸出(chū)信(xìn)号(hào)outputdac_modedac_clkadac_wradac_sleep为(wèi)1位輸出(chū)信(xìn)号(hào)outputad_clk为(wèi)1位輸出(chū)信(xìn)号(hào)outputad_in为(wèi)8位輸入(rù)信(xìn)号(hào)inputkey为(wèi)3位輸入(rù)信(xìn)号(hào)input。綜上(shàng)所(suǒ)述,補充輸入(rù)輸出(chū)端口(kǒu)定(dìng)義的(de)代(dài)碼如(rú)下(xià):
1
2
3
4
5
6
7
input             clk  ;
input             rst_n  ;
input [ 3-1:0]     key        ;
output            dac_mode ;
output            dac_clka  ;
output [ 8-1:0]    dac_da  ;
output            dac_wra  ;
output            dac_sleep ;
output            ad_clk  ;
input  [8-1:0]      ad_in     ;

3.2 正(zhèng)弦信(xìn)号(hào)設計(jì)
将正(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ù)值
采樣(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

定(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)碼:
  1. always  @(*)begin

  2.     case(addr)

  3.           0: sin_data = 8'h7F;

  4.           1: sin_data = 8'h85;

  5.           2: sin_data = 8'h8C;

  6.           3: sin_data = 8'h92;

  7.           4: sin_data = 8'h98;

  8.           5: sin_data = 8'h9E;

  9.           6: sin_data = 8'hA4;

  10.           7: sin_data = 8'hAA;

  11.           8: sin_data = 8'hB0;

  12.           9: sin_data = 8'hB6;

  13.          10: sin_data = 8'hBC;

  14.          11: sin_data = 8'hC1;

  15.          12: sin_data = 8'hC6;

  16.          13: sin_data = 8'hCB;

  17.          14: sin_data = 8'hD0;

  18.          15: sin_data = 8'hD5;

  19.          16: sin_data = 8'hDA;

  20.          17: sin_data = 8'hDE;

  21.          18: sin_data = 8'hE2;

  22.          19: sin_data = 8'hE6;

  23.          20: sin_data = 8'hEA;

  24.          21: sin_data = 8'hED;

  25.          22: sin_data = 8'hF0;

  26.          23: sin_data = 8'hF3;

  27.          24: sin_data = 8'hF5;

  28.          25: sin_data = 8'hF7;

  29.          26: sin_data = 8'hF9;

  30.          27: sin_data = 8'hFB;

  31.          28: sin_data = 8'hFC;

  32.          29: sin_data = 8'hFD;

  33.          30: sin_data = 8'hFE;

  34.          31: sin_data = 8'hFE;

  35.          32: sin_data = 8'hFE;

  36.          33: sin_data = 8'hFE;

  37.          34: sin_data = 8'hFE;

  38.          35: sin_data = 8'hFD;

  39.          36: sin_data = 8'hFC;

  40.          37: sin_data = 8'hFA;

  41.          38: sin_data = 8'hF8;

  42.          39: sin_data = 8'hF6;

  43.          40: sin_data = 8'hF4;

  44.          41: sin_data = 8'hF1;

  45.          42: sin_data = 8'hEF;

  46.          43: sin_data = 8'hEB;

  47.          44: sin_data = 8'hE8;

  48.          45: sin_data = 8'hE4;

  49.          46: sin_data = 8'hE0;

  50.          47: sin_data = 8'hDC;

  51.          48: sin_data = 8'hD8;

  52.          49: sin_data = 8'hD3;

  53.          50: sin_data = 8'hCE;

  54.          51: sin_data = 8'hC9;

  55.          52: sin_data = 8'hC4;

  56.          53: sin_data = 8'hBE;

  57.          54: sin_data = 8'hB9;

  58.          55: sin_data = 8'hB3;

  59.          56: sin_data = 8'hAD;

  60.          57: sin_data = 8'hA7;

  61.          58: sin_data = 8'hA1;

  62.          59: sin_data = 8'h9B;

  63.          60: sin_data = 8'h95;

  64.          61: sin_data = 8'h8F;

  65.          62: sin_data = 8'h89;

  66.          63: sin_data = 8'h82;

  67.          64: sin_data = 8'h7D;

  68.          65: sin_data = 8'h77;

  69.          66: sin_data = 8'h70;

  70.          67: sin_data = 8'h6A;

  71.          68: sin_data = 8'h64;

  72.          69: sin_data = 8'h5E;

  73.          70: sin_data = 8'h58;

  74.          71: sin_data = 8'h52;

  75.          72: sin_data = 8'h4C;

  76.          73: sin_data = 8'h46;

  77.          74: sin_data = 8'h41;

  78.          75: sin_data = 8'h3C;

  79.          76: sin_data = 8'h36;

  80.          77: sin_data = 8'h31;

  81.          78: sin_data = 8'h2C;

  82.          79: sin_data = 8'h28;

  83.          80: sin_data = 8'h23;

  84.          81: sin_data = 8'h1F;

  85.          82: sin_data = 8'h1B;

  86.          83: sin_data = 8'h17;

  87.          84: sin_data = 8'h14;

  88.          85: sin_data = 8'h11;

  89.          86: sin_data = 8'hE ;

  90.          87: sin_data = 8'hB ;

  91.          88: sin_data = 8'h9 ;

  92.          89: sin_data = 8'h7 ;

  93.          90: sin_data = 8'h5 ;

  94.          91: sin_data = 8'h3 ;

  95.          92: sin_data = 8'h2 ;

  96.          93: sin_data = 8'h1 ;

  97.          94: sin_data = 8'h1 ;

  98.          95: sin_data = 8'h1 ;

  99.          96: sin_data = 8'h1 ;

  100.          97: sin_data = 8'h1 ;

  101.          98: sin_data = 8'h2 ;

  102.          99: sin_data = 8'h3 ;

  103.         100: sin_data = 8'h4 ;

  104.         101: sin_data = 8'h6 ;

  105.         102: sin_data = 8'h7 ;

  106.         103: sin_data = 8'hA ;

  107.         104: sin_data = 8'hC ;

  108.         105: sin_data = 8'hF ;

  109.         106: sin_data = 8'h12;

  110.         107: sin_data = 8'h15;

  111.         108: sin_data = 8'h19;

  112.         109: sin_data = 8'h1D;

  113.         110: sin_data = 8'h21;

  114.         111: sin_data = 8'h25;

  115.         112: sin_data = 8'h2A;

  116.         113: sin_data = 8'h2E;

  117.         114: sin_data = 8'h33;

  118.         115: sin_data = 8'h38;

  119.         116: sin_data = 8'h3E;

  120.         117: sin_data = 8'h43;

  121.         118: sin_data = 8'h49;

  122.         119: sin_data = 8'h4E;

  123.         120: sin_data = 8'h54;

  124.         121: sin_data = 8'h5A;

  125.         122: sin_data = 8'h60;

  126.         123: sin_data = 8'h67;

  127.         124: sin_data = 8'h6D;

  128.         125: sin_data = 8'h73;

  129.         126: sin_data = 8'h79;

  130.         127: sin_data = 8'h7F;

  131. endcase

  132. end
複制代(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à):
  1. always  @(posedge clk or negedge rst_n)begin

  2.     if(rst_n==1'b0)begin

  3. addr_tmp<= 0;

  4.     end

  5.     else if(key==0) begin

  6. addr_tmp<= addr_tmp + 262;

  7.     end

  8.     else if(key==1) begin

  9. addr_tmp<= addr_tmp + 524;

  10.     end

  11.     else if(key==2) begin

  12. addr_tmp<= addr_tmp + 786;

  13.     end

  14.     else if(key==3) begin

  15. addr_tmp<= addr_tmp + 1029;

  16.     end

  17.     else if(key==4) begin

  18. addr_tmp<= addr_tmp + 1311;

  19.     end

  20.     else if(key==5) begin

  21. addr_tmp<= addr_tmp + 1573;

  22.     end

  23.     else if(key==6) begin

  24. addr_tmp<= addr_tmp + 1835;

  25.     end

  26.     else begin

  27. addr_tmp<= addr_tmp + 2097;

  28.     end

  29. end
複制代(dài)碼


而(é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à):
1
assign addr = addr_tmp>>10 ;

3.3 DA接口(kǒu)信(xìn)号(hào)設計(jì)
接下(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à):
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ì)信(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à):
1
2
3
assign dac_sleep = 0        ;
assign dac_wra   = dac_clka ;
assign dac_clka  = ~clk      ;

至(zhì)此(cǐ),主(zhǔ)體(tǐ)程序已經(jīng)完成(chéng)。

3.4 信(xìn)号(hào)定(dì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)wireaddr值最(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ǒ)示。
1
wire    [6:0]    addr    ;

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à):
1
reg   [16:0]    addr_tmp    ;

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à):
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

依旧(jiù)在(zài)編輯模式下(xià)輸入(rù)“ Reg8”“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 ;

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à):
1
wire                        ad_clk  ;

至(zhì)此(cǐ),整个(gè)代(dài)碼的(de)設計(jì)工作已經(jīng)完成(chéng)。完整版的(de)工程代(dài)碼如(rú)下(xià):
  1. module ad_prj(

  2. clk  ,

  3. rst_n  ,

  4.            key       ,

  5. dac_mode ,

  6. dac_clka  ,

  7. dac_da  ,

  8. dac_wra  ,

  9. dac_sleep,

  10. ad_clk  ,

  11. ad_in

  12.            );

  13. input             clk  ;

  14. input             rst_n  ;

  15. input [ 3-1:0]     key        ;

  16. output            dac_mode ;

  17. output            dac_clka  ;

  18. output [ 8-1:0]    dac_da  ;

  19. output            dac_wra  ;

  20. output            dac_sleep ;

  21. output            ad_clk  ;

  22. input  [8-1:0]      ad_in     ;



  23. wire    [6:0]    addr    ;

  24. reg   [16:0]    addr_tmp    ;

  25. reg   [7:0]    sin_data    ;

  26. reg   [7:0]    dac_da    ;

  27. wire          dac_sleep  ;

  28. wire          dac_wra  ;

  29. wire          dac_clka  ;

  30. wire          dac_mode ;

  31. wire          ad_clk  ;



  32. always  @(*)begin

  33.     case(addr)

  34.           0: sin_data = 8'h7F;

  35.           1: sin_data = 8'h85;

  36.           2: sin_data = 8'h8C;

  37.           3: sin_data = 8'h92;

  38.           4: sin_data = 8'h98;

  39.           5: sin_data = 8'h9E;

  40.           6: sin_data = 8'hA4;

  41.           7: sin_data = 8'hAA;

  42.           8: sin_data = 8'hB0;

  43.           9: sin_data = 8'hB6;

  44.          10: sin_data = 8'hBC;

  45.          11: sin_data = 8'hC1;

  46.          12: sin_data = 8'hC6;

  47.          13: sin_data = 8'hCB;

  48.          14: sin_data = 8'hD0;

  49.          15: sin_data = 8'hD5;

  50.          16: sin_data = 8'hDA;

  51.          17: sin_data = 8'hDE;

  52.          18: sin_data = 8'hE2;

  53.          19: sin_data = 8'hE6;

  54.          20: sin_data = 8'hEA;

  55.          21: sin_data = 8'hED;

  56.          22: sin_data = 8'hF0;

  57.          23: sin_data = 8'hF3;

  58.          24: sin_data = 8'hF5;

  59.          25: sin_data = 8'hF7;

  60.          26: sin_data = 8'hF9;

  61.          27: sin_data = 8'hFB;

  62.          28: sin_data = 8'hFC;

  63.          29: sin_data = 8'hFD;

  64.          30: sin_data = 8'hFE;

  65.          31: sin_data = 8'hFE;

  66.          32: sin_data = 8'hFE;

  67.          33: sin_data = 8'hFE;

  68.          34: sin_data = 8'hFE;

  69.          35: sin_data = 8'hFD;

  70.          36: sin_data = 8'hFC;

  71.          37: sin_data = 8'hFA;

  72.          38: sin_data = 8'hF8;

  73.          39: sin_data = 8'hF6;

  74.          40: sin_data = 8'hF4;

  75.          41: sin_data = 8'hF1;

  76.          42: sin_data = 8'hEF;

  77.          43: sin_data = 8'hEB;

  78.          44: sin_data = 8'hE8;

  79.          45: sin_data = 8'hE4;

  80.          46: sin_data = 8'hE0;

  81.          47: sin_data = 8'hDC;

  82.          48: sin_data = 8'hD8;

  83.          49: sin_data = 8'hD3;

  84.          50: sin_data = 8'hCE;

  85.          51: sin_data = 8'hC9;

  86.          52: sin_data = 8'hC4;

  87.          53: sin_data = 8'hBE;

  88.          54: sin_data = 8'hB9;

  89.          55: sin_data = 8'hB3;

  90.          56: sin_data = 8'hAD;

  91.          57: sin_data = 8'hA7;

  92.          58: sin_data = 8'hA1;

  93.          59: sin_data = 8'h9B;

  94.          60: sin_data = 8'h95;

  95.          61: sin_data = 8'h8F;

  96.          62: sin_data = 8'h89;

  97.          63: sin_data = 8'h82;

  98.          64: sin_data = 8'h7D;

  99.          65: sin_data = 8'h77;

  100.          66: sin_data = 8'h70;

  101.          67: sin_data = 8'h6A;

  102.          68: sin_data = 8'h64;

  103.          69: sin_data = 8'h5E;

  104.          70: sin_data = 8'h58;

  105.          71: sin_data = 8'h52;

  106.          72: sin_data = 8'h4C;

  107.          73: sin_data = 8'h46;

  108.          74: sin_data = 8'h41;

  109.          75: sin_data = 8'h3C;

  110.          76: sin_data = 8'h36;

  111.          77: sin_data = 8'h31;

  112.          78: sin_data = 8'h2C;

  113.          79: sin_data = 8'h28;

  114.          80: sin_data = 8'h23;

  115.          81: sin_data = 8'h1F;

  116.          82: sin_data = 8'h1B;

  117.          83: sin_data = 8'h17;

  118.          84: sin_data = 8'h14;

  119.          85: sin_data = 8'h11;

  120.          86: sin_data = 8'hE ;

  121.          87: sin_data = 8'hB ;

  122.          88: sin_data = 8'h9 ;

  123.          89: sin_data = 8'h7 ;

  124.          90: sin_data = 8'h5 ;

  125.          91: sin_data = 8'h3 ;

  126.          92: sin_data = 8'h2 ;

  127.          93: sin_data = 8'h1 ;

  128.          94: sin_data = 8'h1 ;

  129.          95: sin_data = 8'h1 ;

  130.          96: sin_data = 8'h1 ;

  131.          97: sin_data = 8'h1 ;

  132.          98: sin_data = 8'h2 ;

  133.          99: sin_data = 8'h3 ;

  134.         100: sin_data = 8'h4 ;

  135.         101: sin_data = 8'h6 ;

  136.         102: sin_data = 8'h7 ;

  137.         103: sin_data = 8'hA ;

  138.         104: sin_data = 8'hC ;

  139.         105: sin_data = 8'hF ;

  140.         106: sin_data = 8'h12;

  141.         107: sin_data = 8'h15;

  142.         108: sin_data = 8'h19;

  143.         109: sin_data = 8'h1D;

  144.         110: sin_data = 8'h21;

  145.         111: sin_data = 8'h25;

  146.         112: sin_data = 8'h2A;

  147.         113: sin_data = 8'h2E;

  148.         114: sin_data = 8'h33;

  149.         115: sin_data = 8'h38;

  150.         116: sin_data = 8'h3E;

  151.         117: sin_data = 8'h43;

  152.         118: sin_data = 8'h49;

  153.         119: sin_data = 8'h4E;

  154.         120: sin_data = 8'h54;

  155.         121: sin_data = 8'h5A;

  156.         122: sin_data = 8'h60;

  157.         123: sin_data = 8'h67;

  158.         124: sin_data = 8'h6D;

  159.         125: sin_data = 8'h73;

  160.         126: sin_data = 8'h79;

  161.         127: sin_data = 8'h7F;

  162. endcase

  163. end



  164. always  @(posedge clk or negedge rst_n)begin

  165.     if(rst_n==1'b0)begin

  166. addr_tmp<= 0;

  167.     end

  168.     else if(key==0) begin

  169. addr_tmp<= addr_tmp + 262;

  170.     end

  171.     else if(key==1) begin

  172. addr_tmp<= addr_tmp + 524;

  173.     end

  174.     else if(key==2) begin

  175. addr_tmp<= addr_tmp + 786;

  176.     end

  177.     else if(key==3) begin

  178. addr_tmp<= addr_tmp + 1029;

  179.     end

  180.     else if(key==4) begin

  181. addr_tmp<= addr_tmp + 1311;

  182.     end

  183.     else if(key==5) begin

  184. addr_tmp<= addr_tmp + 1573;

  185.     end

  186.     else if(key==6) begin

  187. addr_tmp<= addr_tmp + 1835;

  188.     end

  189.     else begin

  190. addr_tmp<= addr_tmp + 2097;

  191.     end

  192. end



  193. assign addr = addr_tmp>>10 ;



  194. always  @(posedge clk or negedge rst_n)begin

  195.     if(rst_n==1'b0)begin

  196. dac_da<= 0;

  197.     end

  198.     else begin

  199. dac_da<= 255 - sin_data;

  200.     end

  201. end



  202. assign dac_sleep = 0        ;

  203. assign dac_wra   = dac_clka ;

  204. assign dac_clka  = ~clk      ;



  205. endmodule
複制代(dài)碼


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

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)

4.2 綜合
編譯界面(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)

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.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ì)
器件(jiàn)
DA9709管(guǎn)脚
AD9280管(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]
U1
CLK
AD_CLK
L6
ad_clk
D7
AD_D7
N5
ad_in[7]
D6
AD_D6
M4
ad_in[6]
D5
AD_D5
M5
ad_in[5]
D4
AD_D4
R6
ad_in[4]
D3
AD_D3
T5
ad_in[3]
D2
AD_D2
U7
ad_in[2]
D1
AD_D1
V5
ad_in[1]
D0
AD_D0
V6
ad_in[0]
X1
SYS_CLK
G1
clk
K1
SYS_RST
AB12
rst_n
sw0
SW_D0
AA3
key[2]
sw1
SW_D1
AB3
key[1]
sw2
SW_D2
AB5
key[0]



图(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)

4.5 連(lián)接開(kāi)發(fà)板
完成(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ú)

4.5.1 設置SIGNALTAP
編譯通(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 Entryall 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ǔ)

4.5.2 用(yòng)SIGNALTAP观察
为(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 設計(jì)实現(xià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ì)
器件(jiàn)
DA9709管(guǎn)脚
AD9280管(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]
U1
CLK
AD_CLK
L6
ad_clk
D7
AD_D7
N5
ad_in[7]
D6
AD_D6
M4
ad_in[6]
D5
AD_D5
M5
ad_in[5]
D4
AD_D4
R6
ad_in[4]
D3
AD_D3
T5
ad_in[3]
D2
AD_D2
U7
ad_in[2]
D1
AD_D1
V5
ad_in[1]
D0
AD_D0
V6
ad_in[0]
X1
SYS_CLK
G1
clk
K1
SYS_RST
AB12
rst_n
sw0
SW_D0
AA3
key[2]
sw1
SW_D1
AB3
key[1]
sw2
SW_D2
AB5
key[0]

写出(chū)頂层代(dài)碼如(rú)下(xià):
1
2
3
4
5
6
7
8
9
module ad_prj(
clk  ,
rst_n  ,
           key       ,
dac_mode ,
dac_clka  ,
dac_da  ,
dac_wra  ,
dac_sleep,
ad_clk  ,
ad_in
           );

聲明(míng)輸入(rù)輸出(chū)屬性(xìng)代(dài)碼如(rú)下(xià):
1
2
3
4
5
6
7
input             clk  ;
input             rst_n  ;
input [ 3-1:0]     key        ;
output            dac_mode ;
output            dac_clka  ;
output [ 8-1:0]    dac_da  ;
output            dac_wra  ;
output            dac_sleep ;
output            ad_clk  ;
input  [8-1:0]      ad_in     ;

5.1.2 正(zhèng)弦信(xìn)号(hào)設計(jì)
采樣(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ù)值
采樣(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

設計(jì)sin_data信(xìn)号(hào):
  1. always  @(*)begin

  2.     case(addr)

  3.           0: sin_data = 8'h7F;

  4.           1: sin_data = 8'h85;

  5.           2: sin_data = 8'h8C;

  6.           3: sin_data = 8'h92;

  7.           4: sin_data = 8'h98;

  8.           5: sin_data = 8'h9E;

  9.           6: sin_data = 8'hA4;

  10.           7: sin_data = 8'hAA;

  11.           8: sin_data = 8'hB0;

  12.           9: sin_data = 8'hB6;

  13.          10: sin_data = 8'hBC;

  14.          11: sin_data = 8'hC1;

  15.          12: sin_data = 8'hC6;

  16.          13: sin_data = 8'hCB;

  17.          14: sin_data = 8'hD0;

  18.          15: sin_data = 8'hD5;

  19.          16: sin_data = 8'hDA;

  20.          17: sin_data = 8'hDE;

  21.          18: sin_data = 8'hE2;

  22.          19: sin_data = 8'hE6;

  23.          20: sin_data = 8'hEA;

  24.          21: sin_data = 8'hED;

  25.          22: sin_data = 8'hF0;

  26.          23: sin_data = 8'hF3;

  27.          24: sin_data = 8'hF5;

  28.          25: sin_data = 8'hF7;

  29.          26: sin_data = 8'hF9;

  30.          27: sin_data = 8'hFB;

  31.          28: sin_data = 8'hFC;

  32.          29: sin_data = 8'hFD;

  33.          30: sin_data = 8'hFE;

  34.          31: sin_data = 8'hFE;

  35.          32: sin_data = 8'hFE;

  36.          33: sin_data = 8'hFE;

  37.          34: sin_data = 8'hFE;

  38.          35: sin_data = 8'hFD;

  39.          36: sin_data = 8'hFC;

  40.          37: sin_data = 8'hFA;

  41.          38: sin_data = 8'hF8;

  42.          39: sin_data = 8'hF6;

  43.          40: sin_data = 8'hF4;

  44.          41: sin_data = 8'hF1;

  45.          42: sin_data = 8'hEF;

  46.          43: sin_data = 8'hEB;

  47.          44: sin_data = 8'hE8;

  48.          45: sin_data = 8'hE4;

  49.          46: sin_data = 8'hE0;

  50.          47: sin_data = 8'hDC;

  51.          48: sin_data = 8'hD8;

  52.          49: sin_data = 8'hD3;

  53.          50: sin_data = 8'hCE;

  54.          51: sin_data = 8'hC9;

  55.          52: sin_data = 8'hC4;

  56.          53: sin_data = 8'hBE;

  57.          54: sin_data = 8'hB9;

  58.          55: sin_data = 8'hB3;

  59.          56: sin_data = 8'hAD;

  60.          57: sin_data = 8'hA7;

  61.          58: sin_data = 8'hA1;

  62.          59: sin_data = 8'h9B;

  63.          60: sin_data = 8'h95;

  64.          61: sin_data = 8'h8F;

  65.          62: sin_data = 8'h89;

  66.          63: sin_data = 8'h82;

  67.          64: sin_data = 8'h7D;

  68.          65: sin_data = 8'h77;

  69.          66: sin_data = 8'h70;

  70.          67: sin_data = 8'h6A;

  71.          68: sin_data = 8'h64;

  72.          69: sin_data = 8'h5E;

  73.          70: sin_data = 8'h58;

  74.          71: sin_data = 8'h52;

  75.          72: sin_data = 8'h4C;

  76.          73: sin_data = 8'h46;

  77.          74: sin_data = 8'h41;

  78.          75: sin_data = 8'h3C;

  79.          76: sin_data = 8'h36;

  80.          77: sin_data = 8'h31;

  81.          78: sin_data = 8'h2C;

  82.          79: sin_data = 8'h28;

  83.          80: sin_data = 8'h23;

  84.          81: sin_data = 8'h1F;

  85.          82: sin_data = 8'h1B;

  86.          83: sin_data = 8'h17;

  87.          84: sin_data = 8'h14;

  88.          85: sin_data = 8'h11;

  89.          86: sin_data = 8'hE ;

  90.          87: sin_data = 8'hB ;

  91.          88: sin_data = 8'h9 ;

  92.          89: sin_data = 8'h7 ;

  93.          90: sin_data = 8'h5 ;

  94.          91: sin_data = 8'h3 ;

  95.          92: sin_data = 8'h2 ;

  96.          93: sin_data = 8'h1 ;

  97.          94: sin_data = 8'h1 ;

  98.          95: sin_data = 8'h1 ;

  99.          96: sin_data = 8'h1 ;

  100.          97: sin_data = 8'h1 ;

  101.          98: sin_data = 8'h2 ;

  102.          99: sin_data = 8'h3 ;

  103.         100: sin_data = 8'h4 ;

  104.         101: sin_data = 8'h6 ;

  105.         102: sin_data = 8'h7 ;

  106.         103: sin_data = 8'hA ;

  107.         104: sin_data = 8'hC ;

  108.         105: sin_data = 8'hF ;

  109.         106: sin_data = 8'h12;

  110.         107: sin_data = 8'h15;

  111.         108: sin_data = 8'h19;

  112.         109: sin_data = 8'h1D;

  113.         110: sin_data = 8'h21;

  114.         111: sin_data = 8'h25;

  115.         112: sin_data = 8'h2A;

  116.         113: sin_data = 8'h2E;

  117.         114: sin_data = 8'h33;

  118.         115: sin_data = 8'h38;

  119.         116: sin_data = 8'h3E;

  120.         117: sin_data = 8'h43;

  121.         118: sin_data = 8'h49;

  122.         119: sin_data = 8'h4E;

  123.         120: sin_data = 8'h54;

  124.         121: sin_data = 8'h5A;

  125.         122: sin_data = 8'h60;

  126.         123: sin_data = 8'h67;

  127.         124: sin_data = 8'h6D;

  128.         125: sin_data = 8'h73;

  129.         126: sin_data = 8'h79;

  130.         127: sin_data = 8'h7F;

  131. endcase

  132. end
複制代(dài)碼

設計(jì)addr信(xìn)号(hào):
  1. always  @(posedge clk or negedge rst_n)begin
  2.     if(rst_n==1'b0)begin
  3. addr_tmp<= 0;
  4.     end
  5.     else if(key==0) begin
  6. addr_tmp<= addr_tmp + 262;
  7.     end
  8.     else if(key==1) begin
  9. addr_tmp<= addr_tmp + 524;
  10.     end
  11.     else if(key==2) begin
  12. addr_tmp<= addr_tmp + 786;
  13.     end
  14.     else if(key==3) begin
  15. addr_tmp<= addr_tmp + 1029;
  16.     end
  17.     else if(key==4) begin
  18. addr_tmp<= addr_tmp + 1311;
  19.     end
  20.     else if(key==5) begin
  21. addr_tmp<= addr_tmp + 1573;
  22.     end
  23.     else if(key==6) begin
  24. addr_tmp<= addr_tmp + 1835;
  25.     end
  26.     else begin
  27. addr_tmp<= addr_tmp + 2097;
  28.     end
  29. end
複制代(dài)碼

設計(jì)addr_tmp信(xìn)号(hào):
1
assign addr = addr_tmp>>10 ;

5.1.3 DA接口(kǒu)信(xìn)号(hào)設計(jì)
設計(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ì)dac_sleep信(xìn)号(hào):
1
2
3
assign dac_sleep = 0        ;
assign dac_wra   = dac_clka ;
assign dac_clka  = ~clk      ;

至(zhì)此(cǐ),主(zhǔ)體(tǐ)程序已經(jīng)完成(chéng),接下(xià)来(lái)是(shì)将module補充完整。

5.1.4 信(xìn)号(hào)定(dìng)義
首先(xiān)定(dìng)義信(xìn)号(hào)類(lèi)型,addr信(xìn)号(hào)的(de)定(dìng)義代(dài)碼表(biǎo)示如(rú)下(xià):
1
wire    [6:0]    addr    ;

addr_tmp信(xìn)号(hào)的(de)定(dìng)義代(dài)碼表(biǎo)示如(rú)下(xià):
1
reg   [16:0]    addr_tmp    ;

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

dac_dadac_sleepdac_wradac_clka、dac_mode信(xìn)号(hào)的(de)定(dìng)義代(dài)碼表(biǎo)示如(rú)下(xià):
1
reg   [7:0]    dac_da    ;
wire          dac_sleep  ;
wire          dac_wra  ;
wire          dac_clka  ;
wire          dac_mode ;

ad_clk信(xìn)号(hào)的(de)定(dìng)義代(dài)碼表(biǎo)示如(rú)下(xià):
1
wire                        ad_clk  ;

完整版的(de)工程代(dài)碼如(rú)下(xià):
  1. module ad_prj(
  2. clk  ,
  3. rst_n  ,
  4.            key       ,
  5. dac_mode ,
  6. dac_clka  ,
  7. dac_da  ,
  8. dac_wra  ,
  9. dac_sleep,
  10. ad_clk  ,
  11. ad_in
  12.            );
  13. input             clk  ;
  14. input             rst_n  ;
  15. input [ 3-1:0]     key        ;
  16. output            dac_mode ;
  17. output            dac_clka  ;
  18. output [ 8-1:0]    dac_da  ;
  19. output            dac_wra  ;
  20. output            dac_sleep ;
  21. output            ad_clk  ;
  22. input  [8-1:0]      ad_in     ;
  23. wire    [6:0]    addr    ;
  24. reg   [16:0]    addr_tmp    ;
  25. reg   [7:0]    sin_data    ;
  26. reg   [7:0]    dac_da    ;
  27. wire          dac_sleep  ;
  28. wire          dac_wra  ;
  29. wire          dac_clka  ;
  30. wire          dac_mode ;
  31. wire          ad_clk  ;
  32. always  @(*)begin
  33.     case(addr)
  34.           0: sin_data = 8'h7F;
  35.           1: sin_data = 8'h85;
  36.           2: sin_data = 8'h8C;
  37.           3: sin_data = 8'h92;
  38.           4: sin_data = 8'h98;
  39.           5: sin_data = 8'h9E;
  40.           6: sin_data = 8'hA4;
  41.           7: sin_data = 8'hAA;
  42.           8: sin_data = 8'hB0;
  43.           9: sin_data = 8'hB6;
  44.          10: sin_data = 8'hBC;
  45.          11: sin_data = 8'hC1;
  46.          12: sin_data = 8'hC6;
  47.          13: sin_data = 8'hCB;
  48.          14: sin_data = 8'hD0;
  49.          15: sin_data = 8'hD5;
  50.          16: sin_data = 8'hDA;
  51.          17: sin_data = 8'hDE;
  52.          18: sin_data = 8'hE2;
  53.          19: sin_data = 8'hE6;
  54.          20: sin_data = 8'hEA;
  55.          21: sin_data = 8'hED;
  56.          22: sin_data = 8'hF0;
  57.          23: sin_data = 8'hF3;
  58.          24: sin_data = 8'hF5;
  59.          25: sin_data = 8'hF7;
  60.          26: sin_data = 8'hF9;
  61.          27: sin_data = 8'hFB;
  62.          28: sin_data = 8'hFC;
  63.          29: sin_data = 8'hFD;
  64.          30: sin_data = 8'hFE;
  65.          31: sin_data = 8'hFE;
  66.          32: sin_data = 8'hFE;
  67.          33: sin_data = 8'hFE;
  68.          34: sin_data = 8'hFE;
  69.          35: sin_data = 8'hFD;
  70.          36: sin_data = 8'hFC;
  71.          37: sin_data = 8'hFA;
  72.          38: sin_data = 8'hF8;
  73.          39: sin_data = 8'hF6;
  74.          40: sin_data = 8'hF4;
  75.          41: sin_data = 8'hF1;
  76.          42: sin_data = 8'hEF;
  77.          43: sin_data = 8'hEB;
  78.          44: sin_data = 8'hE8;
  79.          45: sin_data = 8'hE4;
  80.          46: sin_data = 8'hE0;
  81.          47: sin_data = 8'hDC;
  82.          48: sin_data = 8'hD8;
  83.          49: sin_data = 8'hD3;
  84.          50: sin_data = 8'hCE;
  85.          51: sin_data = 8'hC9;
  86.          52: sin_data = 8'hC4;
  87.          53: sin_data = 8'hBE;
  88.          54: sin_data = 8'hB9;
  89.          55: sin_data = 8'hB3;
  90.          56: sin_data = 8'hAD;
  91.          57: sin_data = 8'hA7;
  92.          58: sin_data = 8'hA1;
  93.          59: sin_data = 8'h9B;
  94.          60: sin_data = 8'h95;
  95.          61: sin_data = 8'h8F;
  96.          62: sin_data = 8'h89;
  97.          63: sin_data = 8'h82;
  98.          64: sin_data = 8'h7D;
  99.          65: sin_data = 8'h77;
  100.          66: sin_data = 8'h70;
  101.          67: sin_data = 8'h6A;
  102.          68: sin_data = 8'h64;
  103.          69: sin_data = 8'h5E;
  104.          70: sin_data = 8'h58;
  105.          71: sin_data = 8'h52;
  106.          72: sin_data = 8'h4C;
  107.          73: sin_data = 8'h46;
  108.          74: sin_data = 8'h41;
  109.          75: sin_data = 8'h3C;
  110.          76: sin_data = 8'h36;
  111.          77: sin_data = 8'h31;
  112.          78: sin_data = 8'h2C;
  113.          79: sin_data = 8'h28;
  114.          80: sin_data = 8'h23;
  115.          81: sin_data = 8'h1F;
  116.          82: sin_data = 8'h1B;
  117.          83: sin_data = 8'h17;
  118.          84: sin_data = 8'h14;
  119.          85: sin_data = 8'h11;
  120.          86: sin_data = 8'hE ;
  121.          87: sin_data = 8'hB ;
  122.          88: sin_data = 8'h9 ;
  123.          89: sin_data = 8'h7 ;
  124.          90: sin_data = 8'h5 ;
  125.          91: sin_data = 8'h3 ;
  126.          92: sin_data = 8'h2 ;
  127.          93: sin_data = 8'h1 ;
  128.          94: sin_data = 8'h1 ;
  129.          95: sin_data = 8'h1 ;
  130.          96: sin_data = 8'h1 ;
  131.          97: sin_data = 8'h1 ;
  132.          98: sin_data = 8'h2 ;
  133.          99: sin_data = 8'h3 ;
  134.         100: sin_data = 8'h4 ;
  135.         101: sin_data = 8'h6 ;
  136.         102: sin_data = 8'h7 ;
  137.         103: sin_data = 8'hA ;
  138.         104: sin_data = 8'hC ;
  139.         105: sin_data = 8'hF ;
  140.         106: sin_data = 8'h12;
  141.         107: sin_data = 8'h15;
  142.         108: sin_data = 8'h19;
  143.         109: sin_data = 8'h1D;
  144.         110: sin_data = 8'h21;
  145.         111: sin_data = 8'h25;
  146.         112: sin_data = 8'h2A;
  147.         113: sin_data = 8'h2E;
  148.         114: sin_data = 8'h33;
  149.         115: sin_data = 8'h38;
  150.         116: sin_data = 8'h3E;
  151.         117: sin_data = 8'h43;
  152.         118: sin_data = 8'h49;
  153.         119: sin_data = 8'h4E;
  154.         120: sin_data = 8'h54;
  155.         121: sin_data = 8'h5A;
  156.         122: sin_data = 8'h60;
  157.         123: sin_data = 8'h67;
  158.         124: sin_data = 8'h6D;
  159.         125: sin_data = 8'h73;
  160.         126: sin_data = 8'h79;
  161.         127: sin_data = 8'h7F;
  162. endcase
  163. end
  164. always  @(posedge clk or negedge rst_n)begin
  165.     if(rst_n==1'b0)begin
  166. addr_tmp<= 0;
  167.     end
  168.     else if(key==0) begin
  169. addr_tmp<= addr_tmp + 262;
  170.     end
  171.     else if(key==1) begin
  172. addr_tmp<= addr_tmp + 524;
  173.     end
  174.     else if(key==2) begin
  175. addr_tmp<= addr_tmp + 786;
  176.     end
  177.     else if(key==3) begin
  178. addr_tmp<= addr_tmp + 1029;
  179.     end
  180.     else if(key==4) begin
  181. addr_tmp<= addr_tmp + 1311;
  182.     end
  183.     else if(key==5) begin
  184. addr_tmp<= addr_tmp + 1573;
  185.     end
  186.     else if(key==6) begin
  187. addr_tmp<= addr_tmp + 1835;
  188.     end
  189.     else begin
  190. addr_tmp<= addr_tmp + 2097;
  191.     end
  192. end
  193. assign addr = addr_tmp>>10 ;
  194. always  @(posedge clk or negedge rst_n)begin
  195.     if(rst_n==1'b0)begin
  196. dac_da<= 0;
  197.     end
  198.     else begin
  199. dac_da<= 255 - sin_data;
  200.     end
  201. end
  202. assign dac_sleep = 0        ;
  203. assign dac_wra   = dac_clka ;
  204. assign dac_clka  = ~clk      ;
  205. endmodule
複制代(dài)碼


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

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)

5.2.3 配置管(guǎ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)

5.2.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)志,則说(shuō)明(míng)編譯綜合成(chéng)功。
图(tú)3.15- 24 編譯成(chéng)功界面(miàn)

5.2.5 連(lián)接開(kāi)發(fà)板
完成(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ú)

5.2.6 設置SIGNALTAP
編譯通(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 Entryall 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ǔ)

5.2.7 用(yòng)SIGNALTAP观察
为(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ō)

第(dì)6节(jié) 擴展(zhǎn)練習
至(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)行交流讨論。

   相關(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⁥⁠⁢

⁧⁨⁥⁨