0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Xilinx DDS IP核的使用和參數(shù)配置

Hack電子 ? 來源:Hack電子 ? 2024-10-25 16:54 ? 次閱讀

前言

RAM實現(xiàn)一個DDS,從原理上來說很簡單,在實際使用的時候,可能沒有直接使用官方提供的IP核來的方便。這個博客就記錄一下,最近使用到的這個DDS IP。

1 基于相位截斷的DDS

DDS IP核的內(nèi)部的基本結(jié)構(gòu)如下圖所示,主要是一個基于相位截斷的DDS。在數(shù)字信號處理中,經(jīng)常會使用到DDS,其內(nèi)部主要有一個相位累加器,一個ROM存儲這正弦波的查找表。相位累加器在時鐘的作用下對相位進行累加,每次的累加值是通過phase increment 來指定的。累加得到的結(jié)果,通過量化器,取其高位,低位舍去,再將這個量化后的相位值,輸出到查找表,從查找表中得到最終的波形。

8b3f686e-9041-11ef-a511-92fbcf53809c.png

DDS的最終輸出的信號的頻率和系統(tǒng)時鐘,相位寬度和相位自增量之間滿足如下關(guān)系:

其中ΔΘ 是相位自增量,BΘ(n)是相位的位寬,也就對應(yīng)這查找表的深度為2^BΘ(n)

8b5786b0-9041-11ef-a511-92fbcf53809c.png

手冊中也給出了一個例子,來舉例說明DDS的輸出頻率和這幾個系統(tǒng)參數(shù)之間的關(guān)系,其中系統(tǒng)時鐘120MHz,相位寬度為10bit,相位增量為12,輸出的頻率通過上面的式子就可以計算出來。

8b7a67de-9041-11ef-a511-92fbcf53809c.png

在實際的工程中,一般希望DDS能夠生成不停頻率的信號,例如在DDC或者DUC中,希望產(chǎn)生一個高頻的載波頻率,通常使用DDS來產(chǎn)生一個高頻的正弦信號。因此在實際使用的時候更加關(guān)注DDS的相位增量。因為通過控制相位增量就能過后產(chǎn)生不同的頻率。相位增量的計算公式如下。

8b979a02-9041-11ef-a511-92fbcf53809c.png

下面以一個具體的例子來說明DDS是如何工作的。

2 DDS IP的使用和參數(shù)配置

在配置這一TAB,需要設(shè)置系統(tǒng)的時鐘,這個時鐘也就是上面公式當中的參考時鐘,然后可以選通道數(shù)和模式,這里就保持默認就可以了。

再之后就是期望最終生成的信號的一些參數(shù)的設(shè)置。可選選擇系統(tǒng)參數(shù)模式,或者選擇硬件參數(shù)模式,一般都選擇系統(tǒng)參數(shù)模式,直接方便。

在系統(tǒng)參數(shù)中,動態(tài)范圍最終對應(yīng)這輸出信號的幅度,其計算公式如下:20lg(Amp),其中AMP就是信號的幅度。比如下圖中,動態(tài)范圍為72,那么他就可以表示幅度為4096的一個正弦信號。[20lg(4096)] = 72dB;

在下面是頻率分辨率,對應(yīng)這最小的頻率變化,是由系統(tǒng)時鐘和相位深度計算得到的,比如系統(tǒng)時鐘40MHz,相位寬度為32bit,那么計算的頻率分辨率就是[40*106/(232)] = 0.01。

8bb16ea0-9041-11ef-a511-92fbcf53809c.png

在實現(xiàn)這一TAB,可以設(shè)置相位增量是固定的還是可以更改的,相位增量能夠控制輸出的正余弦信號的頻率,這里選擇可更改的,便于在之后的使用中生成不同頻率的信號。需要注意的時候,生成的信號需要滿足奈奎斯特抽樣定理,也就是抽樣時鐘必須是被采樣信號頻率的兩倍。以這個例子來說,系統(tǒng)時鐘為40M,那么,最多可以生成頻率為20MHz的正余弦信號。

除了相位自增量外,初始的相位也是可以通過參數(shù)來修改的,在這里就默認不修改了。

在輸出信號的時候,可以同時輸出正余弦信號,這在正交調(diào)制解調(diào)的過程中十分有用。

除此之外,還可以輸出當前的相位。

8bcbdd9e-9041-11ef-a511-92fbcf53809c.png

在具體實現(xiàn)這一TAB中,保持默認就可以,是用來配置接口。根據(jù)手冊上描述的,可以選擇這些信號來生成不同類型的接口。這些接口都是AXI-Stream 類型的接口,只需要滿足AXIS的規(guī)則就好了。

8bfdbdb4-9041-11ef-a511-92fbcf53809c.png

8c29a19a-9041-11ef-a511-92fbcf53809c.png

在輸出頻率這一TAB,可以輸入期望的輸出頻率,若有多個通道,可以選擇給多個通道設(shè)定初始的頻率輸出值。這個期望頻率在前面選擇了相位增量式可編程的時候就沒什么用了。因為最終輸出的信號的頻率是通過相位增量來控制的。

8c573524-9041-11ef-a511-92fbcf53809c.png

到這里這個IP基本就配置完了??梢钥匆幌驴偨Y(jié),和最終輸出信號的接口信息。需要特別注意的就是輸出的正余弦信號在輸出總線上所占據(jù)的bit‘位。DDS IP通過一個AXIS接口同時輸出正弦信號和余弦信號。就比如在這個例子中,m_axis_data[11:0]傳輸?shù)木褪怯嘞倚盘?,其中m_axis_data[11]是余弦信號的符號位。

m_axis_data[27:16]傳輸?shù)氖钦倚盘?,其中m_axis_data[27]是正弦信號的符號位。

8c851bce-9041-11ef-a511-92fbcf53809c.png

3 DDS IP測試

寫個Testbench測試一下:

`timescale1ns/1ps
moduletb_test_dds();

regclk;
reg[31:0]frequency;
regfreq_vld;
wirem_axis_data_tvalid;
wire[31:0]m_axis_data_tdata;
wiredds_vld;
wire[11:0]dds_cos;
wire[11:0]dds_sin;

assigndds_vld=m_axis_data_tvalid;
assigndds_cos=m_axis_data_tdata[11:0];
assigndds_sin=m_axis_data_tdata[27:16];

//parameterSYS_CLK=40000000;//systemclock40M
//parameterCLK_6M=6000000;//frequency6M
//parameterCLK_400K=400000;//frequency400K
//parameterCLK_2M=2000000;//frquency2M
//parameterPHASE_WIDTH=32;//相位寬度為32bit

//clock
initialbegin
clk=0;
forever#(12.5)clk=~clk;//40Msystemclokc
end

initialbegin
frequency='d0;
freq_vld=1'b0;
repeat(3000)@(posedgeclk);

//產(chǎn)生一個頻率為400KHz的復指數(shù)
frequency=32'd42949672;//CLK_400K*(2^PHASE_WIDTH)/SYS_CLK
freq_vld=1'b1;
@(posedgeclk)
freq_vld=1'b0;

repeat(3000)@(posedgeclk);

//產(chǎn)生一個頻率為4MHz的復指數(shù)
frequency=32'd214748364;//CLK_4M*(2^PHASE_WIDTH)/SYS_CLK
freq_vld=1'b1;
@(posedgeclk)
freq_vld=1'b0;

repeat(3000)@(posedgeclk);

//產(chǎn)生一個頻率為6M的復指數(shù)
frequency=32'd644245094;//CLK_6M*(2^PHASE_WIDTH)/SYS_CLK
freq_vld=1'b1;
@(posedgeclk)
freq_vld=1'b0;


end


dds_compiler_0inst_dds(
.aclk(clk),//inputwireaclk
.s_axis_config_tvalid(freq_vld),//inputwires_axis_config_tvalid
.s_axis_config_tdata(frequency),//inputwire[31:0]s_axis_config_tdata
.m_axis_data_tvalid(m_axis_data_tvalid),//outputwirem_axis_data_tvalid
.m_axis_data_tdata(m_axis_data_tdata)//outputwire[31:0]m_axis_data_tdata
);
endmodule

可以看到生成了不同頻率的正余弦信號。一開時的時候。沒有給出相位增量,所以固定輸出2M的信號,之后給出了相位增量后,輸出了400K 信號。

8cac5e32-9041-11ef-a511-92fbcf53809c.png

8cce230a-9041-11ef-a511-92fbcf53809c.png

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Xilinx
    +關(guān)注

    關(guān)注

    71

    文章

    2167

    瀏覽量

    121398
  • DDS
    DDS
    +關(guān)注

    關(guān)注

    21

    文章

    634

    瀏覽量

    152658
  • IP核
    +關(guān)注

    關(guān)注

    4

    文章

    327

    瀏覽量

    49497

原文標題:Xilinx DDS IP使用

文章出處:【微信號:Hack電子,微信公眾號:Hack電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    我用的是xilinx ISE 12.4 ,想問一個關(guān)于dds IP 的問題

    我想調(diào)用dds IP,調(diào)用出來后,在填寫信息的第一頁有一個系統(tǒng)時鐘的填寫欄,在倒數(shù)第三頁有一個輸出頻率的填寫欄(最大2M),我想問這兩個填寫內(nèi)容有什么關(guān)系嗎?求高手解答(最好把12.4這個版本的
    發(fā)表于 02-18 09:20

    基于FPGA的IPDDS信號發(fā)生器如何用IP

    我畢業(yè)設(shè)計要做一個基于FPGA的IPDDS信號發(fā)生器,但是我不會用DDSIP,有沒有好人
    發(fā)表于 03-10 11:46

    xilinx dds IP輸出能不能改為無符號數(shù)

    xilinx dds IP輸出能不能改為無符號數(shù),因為一般DA轉(zhuǎn)化器只能轉(zhuǎn)化正數(shù)
    發(fā)表于 09-29 18:30

    ip使用問題

    我調(diào)用了一個ip 在下載到芯片中 有一個time-limited的問題 在完成ip破解之后 還是無法解決 但是我在Google上的找到一個解決方法就是把
    發(fā)表于 05-17 10:28

    xilinx FPGA的FFT IP的調(diào)用

    有沒有大神可以提供xilinx FPGA的FFT IP的調(diào)用的verilog 的參考程序,最近在學習FFT的IP的使用,但是仿真結(jié)果有問
    發(fā)表于 12-25 17:05

    Xilinx系列FPGA芯片IP詳解

    `Xilinx系列FPGA芯片IP詳解(完整高清書簽版)`
    發(fā)表于 06-06 13:15

    如何使用DDS IP生成任意波形?

    一個DDS應(yīng)用,我想使用Xilinx DDS IP內(nèi)核生成任意波形,但我看到的是DDS只能生成正弦或余弦波形數(shù)據(jù)。你知道如何用其他數(shù)據(jù)替換正
    發(fā)表于 02-12 08:07

    各位大佬,xilinx ip的各個參數(shù)的含義從哪里看啊

    各位大佬,xilinx ip的各個參數(shù)的含義從哪里看啊
    發(fā)表于 05-30 10:37

    基于FPGA的DDS IP設(shè)計方案

    以Altera公司的Quartus Ⅱ 7.2作為開發(fā)工具,研究了基于FPGA的DDS IP設(shè)計,并給出基于Signal Tap II嵌入式邏輯分析儀的仿真測試結(jié)果。將設(shè)計的DDS
    發(fā)表于 04-05 16:04 ?85次下載
    基于FPGA的<b class='flag-5'>DDS</b> <b class='flag-5'>IP</b><b class='flag-5'>核</b>設(shè)計方案

    Xilinx Vivado的使用詳細介紹(3):使用IP

    IPIP Core) Vivado中有很多IP核可以直接使用,例如數(shù)學運算(乘法器、除法器、浮點運算器等)、信號處理(FFT、DFT、DDS
    發(fā)表于 02-08 13:08 ?2288次閱讀
    <b class='flag-5'>Xilinx</b> Vivado的使用詳細介紹(3):使用<b class='flag-5'>IP</b><b class='flag-5'>核</b>

    淺析Vivado的IPDDS使用方式及注意事項

    vivado提供了DDS IP核可以輸出正余弦波形,配置方法如下
    的頭像 發(fā)表于 04-27 15:52 ?1w次閱讀
    淺析Vivado的<b class='flag-5'>IP</b><b class='flag-5'>核</b><b class='flag-5'>DDS</b>使用方式及注意事項

    關(guān)于XilinxDDS IP的運用與講解

    本次項目我們主要是為了講解DDS,所以我們使用了混頻這個小項目來講解。DDS自己手寫是比較簡單且靈活,但是Xilinx給我們提供了相應(yīng)的IP
    的頭像 發(fā)表于 04-27 16:00 ?6714次閱讀
    關(guān)于<b class='flag-5'>Xilinx</b>中<b class='flag-5'>DDS</b> <b class='flag-5'>IP</b>的運用與講解

    關(guān)于Ultra96的Xilinx DDS編譯器IP教程

    電子發(fā)燒友網(wǎng)站提供《關(guān)于Ultra96的Xilinx DDS編譯器IP教程.zip》資料免費下載
    發(fā)表于 12-13 10:17 ?1次下載
    關(guān)于Ultra96的<b class='flag-5'>Xilinx</b> <b class='flag-5'>DDS</b>編譯器<b class='flag-5'>IP</b>教程

    Xilinx Vivado DDS IP使用方法

    DDS(Direct Digital Frequency Synthesizer) 直接數(shù)字頻率合成器,本文主要介紹如何調(diào)用XilinxDDS IP
    的頭像 發(fā)表于 07-24 11:23 ?4984次閱讀
    <b class='flag-5'>Xilinx</b> Vivado <b class='flag-5'>DDS</b> <b class='flag-5'>IP</b>使用方法

    如何申請xilinx IP的license

    在使用FPGA的時候,有些IP是需要申請后才能使用的,本文介紹如何申請xilinx IP的license。
    的頭像 發(fā)表于 10-25 16:48 ?340次閱讀
    如何申請<b class='flag-5'>xilinx</b> <b class='flag-5'>IP</b><b class='flag-5'>核</b>的license