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