一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

3天內不再提示

XILINX FPGA IP之DDS Compiler_ip例化仿真

CHANBAEK ? 來源: FPGA自學筆記分享 ? 作者: FPGA自學筆記分享 ? 2023-09-07 18:31 ? 次閱讀

之前的文章對dds ip 的結構、精度、參數(shù)、接口進行了詳細的說明,本文通過例化仿真對該IP的實際使用進行演示。本文例化固定模式和可配置模式兩種模式分別例化ip并仿真,說明該IP的應用。

1、固定模式:

該模式下IP的參數(shù)設置如下圖,時鐘頻率設置為100Mhz,兩個通道時分復用,SFDR 60dB.

圖片

然后相位、相位偏差全部選擇固定模式,

圖片

輸出頻率配置為1Mhz和2Mhz:

圖片

設置完之后再summary這里可以看到該IP的實現(xiàn)細節(jié),輸出位寬10bit,2ch,沒ch的時鐘速率是50Mhz,使用一個M18K的BROM實現(xiàn)查找表等等的一些細節(jié)。

圖片

additional summary里邊可以看到相應的頻率控制字和實際精度,因為當前設置的時標準模式不是柵格(rasterized)模式,所以輸出是有頻偏的。

圖片

上述設置生成的IP端口如下,輸入端口為時鐘復位信號,輸出sin cos和phase值。

dds_compiler_0 your_instance_name (
  .aclk(aclk),                                // input wire aclk
  .aresetn(aresetn),                          // input wire aresetn
  .m_axis_data_tvalid(m_axis_data_tvalid),    // output wire m_axis_data_tvalid
  .m_axis_data_tdata(m_axis_data_tdata),      // output wire [31 : 0] m_axis_data_tdata
  .m_axis_phase_tvalid(m_axis_phase_tvalid),  // output wire m_axis_phase_tvalid
  .m_axis_phase_tdata(m_axis_phase_tdata)    // output wire [31 : 0] m_axis_phase_tdata
);

這個IP的tb就非常簡單了,只有提供時鐘復位即可,但是輸出時時分復用的,所以tb對輸出信號進行了處理將兩路輸出分開了,方便波形觀察,如下:

`timescale 1ns/100ps
module tb_dds_fix_normal ;


reg             aclk                = 'd0;
reg             aresetn             = 'd0;
wire            m_axis_data_tvalid  ;
wire [31 : 0]   m_axis_data_tdata   ;
wire            m_axis_phase_tvalid ;
wire [31 : 0]   m_axis_phase_tdata  ;


always #1 aclk = ~aclk;




initial
    begin
        #100;
        aresetn =1'b1;
    end




dds_compiler_0 dds_compiler_0 (
  .aclk                     (aclk                   ), // input wire aclk
  .aresetn                  (aresetn                ), // input wire aresetn
  .m_axis_data_tvalid       (m_axis_data_tvalid     ), // output wire m_axis_data_tvalid
  .m_axis_data_tdata        (m_axis_data_tdata      ), // output wire [31 : 0] m_axis_data_tdata
  .m_axis_phase_tvalid      (m_axis_phase_tvalid    ), // output wire m_axis_phase_tvalid
  .m_axis_phase_tdata       (m_axis_phase_tdata     )  // output wire [31 : 0] m_axis_phase_tdata
);


reg             S_ch0_valid ;
reg   [15:0]    S_ch0_cos   ;
reg   [15:0]    S_ch0_sin   ;
reg   [31:0]    S_ch0_pha   ;
reg   [15:0]    S_ch1_cos   ;
reg   [15:0]    S_ch1_sin   ;
reg   [31:0]    S_ch1_pha   ;


always @(posedge aclk)
    if(!aresetn)
        S_ch0_valid <= 1'b1;
    else if(m_axis_data_tvalid)
        S_ch0_valid <= ~S_ch0_valid;


always @(posedge aclk)
    if(S_ch0_valid)
        begin
            S_ch0_cos <= m_axis_data_tdata[15:0]  ;
            S_ch0_sin <= m_axis_data_tdata[31:16] ;
            S_ch0_pha <= m_axis_phase_tdata       ;
            S_ch1_cos <= S_ch1_cos                ;
            S_ch1_sin <= S_ch1_sin                ;
            S_ch1_pha <= S_ch1_pha                ;
        end
    else
        begin
            S_ch0_cos <= S_ch0_cos                ;
            S_ch0_sin <= S_ch0_sin                ;
            S_ch0_pha <= S_ch0_pha                ;
            S_ch1_cos <= m_axis_data_tdata[15:0]  ;
            S_ch1_sin <= m_axis_data_tdata[31:16] ;
            S_ch1_pha <= m_axis_phase_tdata       ;
        end
    
endmodule

仿真波形如下:

圖片

2、相位可配置模式:

該模式將相位偏差和相位步進設置為axi配置模式,如下圖,其它配置保持不變:

圖片

生成的端口如下,該模式下增加了config端口,用于phase信息的配置:

dds_compiler_cfg your_instance_name (
  .aclk(aclk),                                                        // input wire aclk
  .aresetn(aresetn),                                                  // input wire aresetn
  .s_axis_config_tvalid(s_axis_config_tvalid),                        // input wire s_axis_config_tvalid
  .s_axis_config_tdata(s_axis_config_tdata),                          // input wire [31 : 0] s_axis_config_tdata
  .s_axis_config_tlast(s_axis_config_tlast),                          // input wire s_axis_config_tlast
  .m_axis_data_tvalid(m_axis_data_tvalid),                            // output wire m_axis_data_tvalid
  .m_axis_data_tdata(m_axis_data_tdata),                              // output wire [31 : 0] m_axis_data_tdata
  .m_axis_phase_tvalid(m_axis_phase_tvalid),                          // output wire m_axis_phase_tvalid
  .m_axis_phase_tdata(m_axis_phase_tdata),                            // output wire [15 : 0] m_axis_phase_tdata
  .event_s_config_tlast_missing(event_s_config_tlast_missing),        // output wire event_s_config_tlast_missing
  .event_s_config_tlast_unexpected(event_s_config_tlast_unexpected)  // output wire event_s_config_tlast_unexpected
);

這時,需要對tb進行相應的修改,增加config的配置,如下,新增一個11bit的計數(shù)器,計滿后對兩個通道的phase值進行翻倍:

reg             aclk                = 'd0;
reg             aresetn             = 'd0;
reg             s_axis_config_tvalid= 'd0;
reg  [31 : 0]   s_axis_config_tdata = {{16'd1310},{16'd1310}};
reg             s_axis_config_tlast = 'd0;


wire            m_axis_data_tvalid  ;
wire [31 : 0]   m_axis_data_tdata   ;
wire            m_axis_phase_tvalid ;
wire [15 : 0]   m_axis_phase_tdata  ;


always #1 aclk = ~aclk;




initial
    begin
        #100;
        aresetn =1'b1;
    end


reg  [10:0] S_clk_cnt   ;


always @(posedge aclk)
    if(!aresetn)
        S_clk_cnt <= 'd3;
    else
        S_clk_cnt <= S_clk_cnt + 'd1;


always @(posedge aclk)
    s_axis_config_tvalid <= ((S_clk_cnt==0)||(S_clk_cnt==1));


always @(posedge aclk)
    s_axis_config_tlast <= (S_clk_cnt==1);


always @(posedge aclk)
    if(s_axis_config_tvalid)
        s_axis_config_tdata <= s_axis_config_tdata + s_axis_config_tdata;




dds_compiler_cfg your_instance_name (
  .aclk                             (aclk                           ), // input wire aclk
  .aresetn                          (aresetn                        ), // input wire aresetn
  .s_axis_config_tvalid             (s_axis_config_tvalid           ), // input wire s_axis_config_tvalid
  .s_axis_config_tdata              (s_axis_config_tdata            ), // input wire [31 : 0] s_axis_config_tdata
  .s_axis_config_tlast              (s_axis_config_tlast            ), // input wire s_axis_config_tlast
  .m_axis_data_tvalid               (m_axis_data_tvalid             ), // output wire m_axis_data_tvalid
  .m_axis_data_tdata                (m_axis_data_tdata              ), // output wire [31 : 0] m_axis_data_tdata
  .m_axis_phase_tvalid              (m_axis_phase_tvalid            ), // output wire m_axis_phase_tvalid
  .m_axis_phase_tdata               (m_axis_phase_tdata             ), // output wire [15 : 0] m_axis_phase_tdata
  .event_s_config_tlast_missing     (event_s_config_tlast_missing   ), // output wire event_s_config_tlast_missing
  .event_s_config_tlast_unexpected  (event_s_config_tlast_unexpected)  // output wire event_s_config_tlast_unexpected 
);

仿真結果如下如,可以看到隨著phase步進的不斷累加,兩個通道的輸出頻率也在不斷增加.

圖片

好了,本文就寫的這里,希望通著這一系列的文章能幫助大家深入理解并正確使用DDS IP,詳細的仿真過程可參考B站視頻。

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

    關注

    1642

    文章

    21920

    瀏覽量

    612052
  • Xilinx
    +關注

    關注

    73

    文章

    2179

    瀏覽量

    123918
  • 仿真
    +關注

    關注

    51

    文章

    4212

    瀏覽量

    135065
  • DDS
    DDS
    +關注

    關注

    22

    文章

    648

    瀏覽量

    153781
收藏 人收藏

    評論

    相關推薦

    XILINX FPGA IPClocking Wizard詳解

    鎖相環(huán)基本上是每一個fpga工程必不可少的模塊,之前文檔xilinx 7 系列FPGA時鐘資源對xilinx fpga的底層時鐘資源做過說明
    發(fā)表于 06-12 17:42 ?6710次閱讀
    <b class='flag-5'>XILINX</b> <b class='flag-5'>FPGA</b> <b class='flag-5'>IP</b><b class='flag-5'>之</b>Clocking Wizard詳解

    XILINX FPGA IPMMCM PLL DRP時鐘動態(tài)重配詳解

    上文XILINX FPGA IPClocking Wizard詳解說到時鐘IP的支持動態(tài)重配的,本節(jié)介紹通過DRP進行MMCM PLL的重
    發(fā)表于 06-12 18:24 ?1.3w次閱讀
    <b class='flag-5'>XILINX</b> <b class='flag-5'>FPGA</b> <b class='flag-5'>IP</b><b class='flag-5'>之</b>MMCM PLL DRP時鐘動態(tài)重配詳解

    Xilinx FPGA IPBlock Memory Generator仿真

    上文對BMG ip的基本情況進行了簡單的描述,本文通過仿真來實際使用功能一下這個IP。
    的頭像 發(fā)表于 11-14 18:24 ?2276次閱讀
    <b class='flag-5'>Xilinx</b> <b class='flag-5'>FPGA</b> <b class='flag-5'>IP</b><b class='flag-5'>之</b>Block Memory Generator<b class='flag-5'>仿真</b>

    IP core調用DDS

    ISE軟件,使用IP core調用DDS,產(chǎn)生正弦載波,使用調頻200M時鐘做為DDS輸入,功能仿真沒問題,但后仿真卻不顯示波形,只是一根紅
    發(fā)表于 03-20 20:37

    xilinx FPGA的FFT IP核的調用

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

    如何使用Xilinx DDS Compiler IP并把它運行在Ultra96板上的可編程邏輯中?

    中實現(xiàn)它可能有點挑戰(zhàn),這就是為什么我想創(chuàng)建這個項目作為一個簡單的示例,說明如何使用Xilinx DDS Compiler IP并把它運行在 Ultra96 板上的可編程邏輯中。
    發(fā)表于 02-08 15:39

    基于FPGADDS IP核設計方案

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

    Xilinx DDR控制器MIG IP核的仿真

    DDR對于做項目來說,是必不可少的。一般用于數(shù)據(jù)緩存和平滑帶寬。今天介紹下Xilinx DDR控制器MIG IP核的仿真。
    的頭像 發(fā)表于 11-26 15:02 ?9014次閱讀
    <b class='flag-5'>Xilinx</b> DDR控制器MIG <b class='flag-5'>IP</b>核的<b class='flag-5'>例</b><b class='flag-5'>化</b>及<b class='flag-5'>仿真</b>

    IP和幾個基于FPGA芯片實現(xiàn)的Demo工程

    本文接續(xù)上一篇《FPGA雜記基礎篇》,繼續(xù)為大家分享IP和幾個基于FPGA芯片實現(xiàn)的Demo工程。I
    的頭像 發(fā)表于 12-24 12:58 ?1416次閱讀

    關于XilinxDDS IP的運用與講解

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

    關于Ultra96的Xilinx DDS編譯器IP教程

    電子發(fā)燒友網(wǎng)站提供《關于Ultra96的Xilinx DDS編譯器IP教程.zip》資料免費下載
    發(fā)表于 12-13 10:17 ?1次下載
    關于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ù)字頻率合成器,本文主要介紹如何調用XilinxDDS IP核生成某一頻率的Sin和Cos信號
    的頭像 發(fā)表于 07-24 11:23 ?6075次閱讀
    <b class='flag-5'>Xilinx</b> Vivado <b class='flag-5'>DDS</b> <b class='flag-5'>IP</b>使用方法

    XILINX FPGA IPFIFO Generator仿真

    上文XILINX FPGA IPFIFO對XILINX FIFO Generator IP的特
    的頭像 發(fā)表于 09-07 18:31 ?2447次閱讀
    <b class='flag-5'>XILINX</b> <b class='flag-5'>FPGA</b> <b class='flag-5'>IP</b><b class='flag-5'>之</b>FIFO Generator<b class='flag-5'>例</b><b class='flag-5'>化</b><b class='flag-5'>仿真</b>

    如何申請xilinx IP核的license

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

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

    用RAM實現(xiàn)一個DDS,從原理上來說很簡單,在實際使用的時候,可能沒有直接使用官方提供的IP核來的方便。這個博客就記錄一下,最近使用到的這個DDS IP。
    的頭像 發(fā)表于 10-25 16:54 ?2715次閱讀
    <b class='flag-5'>Xilinx</b> <b class='flag-5'>DDS</b> <b class='flag-5'>IP</b>核的使用和參數(shù)配置