介紹
直接數(shù)字合成器 (DDS) 是軟件定義無(wú)線電和數(shù)字通信系統(tǒng)中的關(guān)鍵工具,因?yàn)樗鼈兲峁┝艘环N在數(shù)字域中生成復(fù)雜信號(hào)的方法,該信號(hào)也是可變的。
雖然 DDS 背后的理論相當(dāng)簡(jiǎn)單,但第一次在 FPGA 中實(shí)現(xiàn)它可能有點(diǎn)挑戰(zhàn),這就是為什么我想創(chuàng)建這個(gè)項(xiàng)目作為一個(gè)簡(jiǎn)單的示例,說(shuō)明如何使用Xilinx DDS Compiler IP并把它運(yùn)行在 Ultra96 板上的可編程邏輯中。
DDS 也稱為數(shù)控振蕩器 (NCO),包含正弦波數(shù)據(jù)值的查找表,該表接收給定的相位值并輸出正弦波的適當(dāng)數(shù)據(jù)/幅度值。
該輸入值決定了輸出波形的頻率,值越小,DDS 通過正弦查找表的步進(jìn)越慢,輸出波形的頻率越低。
相反,輸入值越高,DDS 步進(jìn)查找表的速度越快,輸出波形的頻率也越高。此輸入值通常稱為調(diào)諧字,但在 Xilinx DDS Compiler IP 中,它稱為相位增量。
如上圖所示,此相位增量值 (Δθ) 越大,DDS 圍繞表示復(fù)雜波形的單位圓的步進(jìn)速度越快。當(dāng) M 加倍時(shí),生成的復(fù)雜波形的頻率也加倍,因?yàn)樗@單位圓的步進(jìn)速度是原來(lái)的兩倍。與該單位圓的相位值相關(guān)的數(shù)據(jù)點(diǎn)存儲(chǔ)在 DDS 的查找表中。
在這一點(diǎn)上,我們可以看到 DDS 的主要優(yōu)勢(shì)之一:我們可以快速、平滑地改變輸出波形的頻率,只需告訴 DDS 多快步進(jìn)查找表的輸入值(又名 - 多快繞單位圓移動(dòng))。
輸入相位增量值不斷添加到自身 (A1 & D1) 以生成所需輸出波形的每個(gè)瞬時(shí)值,從而從查找表 (T1) 中獲得該瞬時(shí)相位值的適當(dāng)數(shù)據(jù)值/幅度。
為了演示 DDS 及其輸出波形頻率變化的難易程度,我決定使用簡(jiǎn)單的線性調(diào)頻波形比較合適。線性調(diào)頻是指正弦波以一個(gè)頻率開始,然后在一段時(shí)間內(nèi)線性增加或減少(有時(shí)也稱為掃描)。
決定在 26 us的時(shí)間內(nèi)以 1MHz 的步長(zhǎng)從 1MHz 到 25MHz 進(jìn)行簡(jiǎn)單的線性調(diào)頻(時(shí)鐘是 100MHz,每個(gè)時(shí)鐘周期 10 ns,我隨機(jī)選擇讓 DDS 編譯器輸出每個(gè)頻率 1 us只是為了在邏輯分析器窗口中容易看到它)。
通過遞歸地將 1MHz 的相位增量值添加到自身,然后將其作為輸入提供給 Xilinx DDS Compiler IP ,這實(shí)現(xiàn)了從 1MHz 到 FPGA 結(jié)構(gòu)時(shí)鐘一半的線性調(diào)頻(在 ILA 中采樣時(shí)保留奈奎斯特規(guī)則)以 1MHz 為步長(zhǎng)。選擇只提高到 25MHz,這樣整個(gè) chirp 就可以立即顯示在我的屏幕上進(jìn)行截圖,但我的結(jié)構(gòu)時(shí)鐘設(shè)置為 100MHz,所以可以降低到 50MHz。
使用 PG141 中的以下等式為 B 列中的每個(gè)輸出波形頻率計(jì)算了 C 列中的相位增量值:
然后我將 C 列中的相位增量值轉(zhuǎn)換為十六進(jìn)制以去除小數(shù)位,因?yàn)槲沂窃?Verilog 中編寫此代碼的。我創(chuàng)建了 E 列和 F 列以表明相位增量的差異確實(shí)導(dǎo)致了與 1MHz 相同的十六進(jìn)制值。
接下來(lái)就是搭建工程進(jìn)行驗(yàn)證,詳細(xì)的搭建過程就不展示了,可以在最后的工程中找到,在工程中主要有以下IP:
1 - Xilinx DDS Compiler IP;
2 - 連接 DDS 的 AXI Stream 從設(shè)備和主設(shè)備的邏輯;
3 - 一個(gè)集成邏輯分析儀 (ILA) IP,用于查看 DDS 的輸出波形。
在 Vivado 的 Flow Navigator 列下,打開 IP 庫(kù)并搜索“DDS”。當(dāng) DDS Compiler IP 出現(xiàn)在 IP 存儲(chǔ)庫(kù)的列表中時(shí)雙擊它,將彈出一個(gè)對(duì)話框。單擊“Customize IP”按鈕,將出現(xiàn) DDS 編譯器的配置窗口。
在如上所示的第一個(gè)選項(xiàng)卡中,為了我們的目的,保留所有默認(rèn)設(shè)置。
在第二個(gè)選項(xiàng)卡下,為相位增量和偏移可編程性選擇AXI Stream 接口。
同樣關(guān)于 DDS 編譯器的 AXI Stream 接口,在詳細(xì)實(shí)施選項(xiàng)卡下,選中“Output TREADY”框。在處理 AXI Stream 時(shí),TREADY 信號(hào)是一個(gè)必要的信號(hào)。
在加ILA的時(shí)候,一共加了4個(gè)探頭監(jiān)測(cè)DDS從接口的輸入相位增量值和DDS主接口的輸出數(shù)據(jù)和相位值。將芯片的深度設(shè)置為 65536。
實(shí)例化 ILA 和 DDS IP 后,編寫了簡(jiǎn)單狀態(tài)機(jī)來(lái)創(chuàng)建 AXI Stream 接口,將相位增量值輸入到 DDS,然后等待 1 us,然后將 1MHz 步長(zhǎng)添加到相位增量值并將其輸入到DDS。
該狀態(tài)機(jī)還保持計(jì)數(shù),在達(dá)到 25MHz 的相位增量值后,在下一次迭代中從 1MHz 開始返回。
這個(gè)簡(jiǎn)單的 AXI Stream 接口狀態(tài)機(jī)在許多不同的應(yīng)用程序中都非常方便。主要邏輯步驟是:
1 - 設(shè)置初始值。
2 - 在目標(biāo) IP 的從屬接口上將 Tvalid 信號(hào)設(shè)置為高電平。
3 - 設(shè)置要在目標(biāo) IP 的從接口上輸入的數(shù)據(jù)值(DDS 的相位增量值)。
4 - 檢查來(lái)自目標(biāo) IP 從接口的 Tready 信號(hào),驗(yàn)證它已準(zhǔn)備好接收下一個(gè)數(shù)據(jù)值。
生成新的比特流后,打開 FPGA 開發(fā)板的電源并連接到其 JTAG 端口。
在 Vivado 的 Flow Navigator 中,選擇Open Hardware Manager ,然后選擇Open Target和Autodetect選項(xiàng)。Hardware Manager與 FPGA 建立連接后,選擇Program Device選項(xiàng)并指定剛剛生成的比特流。
成功下載后,ILA 窗口將出現(xiàn),單擊即時(shí)捕獲按鈕(帶有 >> 字符的藍(lán)色按鈕),將看到 DDS 的波形。
ILA 頂部的圖是 DDS 輸出的實(shí)際正弦波形,下面的圖是它的瞬時(shí)相位值。第三張圖是輸入到 DDS 的相位增量值。
底部的十六進(jìn)制值只是狀態(tài)機(jī)狀態(tài),用于演示每個(gè)狀態(tài)如何與 DDS 控制關(guān)聯(lián)。
審核編輯:劉清
-
FPGA
+關(guān)注
關(guān)注
1630文章
21799瀏覽量
606212 -
DDS
+關(guān)注
關(guān)注
21文章
636瀏覽量
152952 -
NCO
+關(guān)注
關(guān)注
0文章
22瀏覽量
24703 -
數(shù)字合成器
+關(guān)注
關(guān)注
1文章
9瀏覽量
7502
原文標(biāo)題:Xilinx DDS Compiler IP 使用教程
文章出處:【微信號(hào):Open_FPGA,微信公眾號(hào):OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
![](https://file1.elecfans.com/web2/M00/84/66/wKgZomRmBcGAOlPNAADhZDHFwEk114.png)
#硬聲創(chuàng)作季 #FPGA Xilinx入門-22B DDS結(jié)構(gòu)的FPGA實(shí)現(xiàn)-2
在SoPC上實(shí)現(xiàn)的波形發(fā)生器
如何使用Xilinx DDS Compiler IP并把它運(yùn)行在Ultra96板上的可編程邏輯中?
基于FPGA的DDS信號(hào)源設(shè)計(jì)與實(shí)現(xiàn)
在Xilinx_FPGA上快速實(shí)現(xiàn)_JESD204B協(xié)議
Xilinx TCP_IP協(xié)議實(shí)現(xiàn)
在FPGA上實(shí)現(xiàn)CRC算法的程序
基于TCP/IP通信技術(shù)在Xilinx FPGA上的實(shí)現(xiàn)
![基于TCP/<b class='flag-5'>IP</b>通信技術(shù)<b class='flag-5'>在</b><b class='flag-5'>Xilinx</b> <b class='flag-5'>FPGA</b><b class='flag-5'>上</b>的<b class='flag-5'>實(shí)現(xiàn)</b>](https://file.elecfans.com/web2/M00/49/A9/pYYBAGKhvEqALMKSAABFD0BSxOw829.png)
FPGA VI中不同的Xilinx內(nèi)核生成器IP設(shè)計(jì)實(shí)現(xiàn)與子模板說(shuō)明
Xilinx Logicore IP直接數(shù)字合成器DDS的用戶手冊(cè)免費(fèi)下載
![<b class='flag-5'>Xilinx</b> Logicore <b class='flag-5'>IP</b>直接數(shù)字合成器<b class='flag-5'>DDS</b>的用戶手冊(cè)免費(fèi)下載](https://file.elecfans.com/web1/M00/A5/BB/o4YBAF117ZOAH0-1AADjv_Cawcw318.png)
關(guān)于Xilinx中DDS IP的運(yùn)用與講解
![關(guān)于<b class='flag-5'>Xilinx</b>中<b class='flag-5'>DDS</b> <b class='flag-5'>IP</b>的運(yùn)用與講解](https://file.elecfans.com/web1/M00/EC/B6/o4YBAGCHxJeAfuGtAAAc0Qy6Uv8129.png)
關(guān)于Ultra96的Xilinx DDS編譯器IP教程
![關(guān)于Ultra96的<b class='flag-5'>Xilinx</b> <b class='flag-5'>DDS</b>編譯器<b class='flag-5'>IP</b>教程](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
Xilinx Vivado DDS IP使用方法
![<b class='flag-5'>Xilinx</b> Vivado <b class='flag-5'>DDS</b> <b class='flag-5'>IP</b>使用方法](https://file1.elecfans.com/web2/M00/8D/94/wKgZomS97fWAWk2vAAJAMU9WiXY264.jpg)
Xilinx DDS IP核的使用和參數(shù)配置
![<b class='flag-5'>Xilinx</b> <b class='flag-5'>DDS</b> <b class='flag-5'>IP</b>核的使用和參數(shù)配置](https://file1.elecfans.com/web1/M00/F3/B4/wKgZoWcbXXCATrZhAAAai_rONMA247.png)
評(píng)論