色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

DDS-IP核的理論知識和應用案例

CHANBAEK ? 來源:工程實驗室 ? 作者:工程實驗室 ? 2023-08-22 16:30 ? 次閱讀

DDS,Director Digital Synthesis,直接頻率合成技術,是指通過固定頻率的參考時鐘(采樣時鐘)生成指定頻率的正余弦信號。采用FPGA配合DAC芯片,可以實現頻率、相位可調的模擬信號用于一些特定的領域。

01、DDS-IP核理論部分

1.1、4個重要概念

PINC, Phase Increase,頻率控制字,用于生成期望頻率的波形數據;

POFF, Phase Offset,相位控制字,用于生成期望初始相位的波形數據;

Spurious Free Dynamic Range (dB),無雜散動態范圍,用于調整正弦和余弦輸出數據的位寬,假設需要的正弦和余弦輸出數據的位寬是16bit,動態范圍的數值設置為16*6 = 96 ;

Frequency Resolution(Hz),頻率分辨率,IP核輸出正余弦信號能夠達到的最小頻率。參考時鐘/采樣時鐘(f_clk)、頻率控制字(delta_theta)、輸出頻率(f_out),三個變量之間的計算關系如下:

圖片

上述公式中2^n(公式中的分母),n取決于頻率分辨率,分辨率越小,n的數值越大,頻率控制字(delta_theta)的位寬越大。圖片

相位控制字與位寬n之間的關系如下:

POFF = phase * (2^n-1)/360,比如期望輸出的正弦波初始相位是90度,那么POFF = 90* (2^n-1)/360 = (2^n-1)/4。

1.1.1、輸出信號的頻率f_out和頻率控制字delta_theta之間的關系

前面的公式:

圖片 假設系統的參考時鐘是f_clk=250MHz, 通過公式易知,頻率控制字delta_theta的取值范圍還是0 ~ 2^n,對應輸出信號的頻率,其取值范圍是0~f_clk。根據采樣定理,所產生的信號頻率不能超過時鐘頻率(采樣時鐘頻率,250Mhz)的一半,在實際應用中,為了保證信號的輸出質量,輸出頻率不要高于時鐘頻率的33%,以免混疊或諧波落入有用輸出頻帶內。

1.2、DDS-IP 核配置

step1:在Ip-catalog中搜索dds,找到 DDS Compiler。

圖片

step2:設置PINC/POFF的數據形式,Fixed-Programmable-Streaming。

三種模式的區別如下:

Fixed是固定相位增量,IP核運行過程中不可更改,即輸出的信號頻率固定不變;

Programmable可編程,可在DDS運行過程中隨時寫入頻率控制字改變輸出波形的頻率,用于偶爾改變頻率;

Streaming應用于頻繁改變頻率。

圖片

輸出信號如果勾選為正弦和余弦信號,輸出信號的結果如下:高位bit31:16為正弦信號,低位bit15:0為余弦信號。

圖片

step3:IP核復位信號

圖片

step4:IP核配置summary

圖片

02、DDS-IP核應用部分

2.1 、使用DDS-IP 核合成高頻信號

工程需求 :參考時鐘是250MHz,使用8路DDS合成具備2G采樣率的信號,輸出到DAC芯片。

解決方案 :參考時鐘是250MHz,周期為4ns,2G采樣率的信號,采樣周期為0.5ns,使用DDS-IP核輸出250MHz的信號,相鄰2個采樣點之間的時間間隔是4ns,要滿足2G采樣率,原始4ns的周期內需要有8個采樣點,DDS-IP核的信號輸出通過移相實現,每個DDS-IP核移相的大小為頻率控制字的1/8。

2.2、代碼實現

邏輯代碼頂層,模擬DAC芯片內部2G采樣時鐘信號,對8路DDS-IP核的輸出信號連續采樣,合成高頻信號。
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2021/06/09 19:15:35
// Design Name: 
// Module Name: dds_ctrl
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////
module  dds_ctrl(
input   wire                sclk, 
input    wire               sclk_2gHz,
input   wire                rst_n, 
input   wire               s_axis_phase_tvalid,                    //  初始相位控制字     
input   wire  [23:0]       s_axis_phase_tdata, 
input   wire               s_axis_config_tvalid, 
input   wire  [23:0]       s_axis_config_tdata,                     //  頻率控制字      
output  wire               m_axis_data_tvalid0, 
output  wire  [15:0]       m_axis_data_tdata0, 
output  wire               m_axis_data_tvalid1, 
output  wire  [15:0]       m_axis_data_tdata1,
output  wire               m_axis_data_tvalid2, 
output  wire  [15:0]       m_axis_data_tdata2,
output  wire               m_axis_data_tvalid3, 
output  wire  [15:0]       m_axis_data_tdata3,
output  wire               m_axis_data_tvalid4, 
output  wire  [15:0]       m_axis_data_tdata4,
output  wire               m_axis_data_tvalid5, 
output  wire  [15:0]       m_axis_data_tdata5,
output  wire               m_axis_data_tvalid6, 
output  wire  [15:0]       m_axis_data_tdata6,
output  wire               m_axis_data_tvalid7, 
output  wire  [15:0]       m_axis_data_tdata7,
output  wire               analog_data_valid,
output  wire  [127:0]      analog_data_128bit,
output  reg    [2:0]            cnt,
output  reg   [15:0]        sample_data
);

 wire [23: 0]    config_pinc_0;
 wire [23: 0]    config_poff_0;
 wire [23: 0]    config_pinc_1;
 wire [23: 0]    config_poff_1;
 wire [23: 0]    config_pinc_2;
 wire [23: 0]    config_poff_2;
 wire [23: 0]    config_pinc_3;
 wire [23: 0]    config_poff_3;
 wire [23: 0]    config_pinc_4;
 wire [23: 0]    config_poff_4;
 wire [23: 0]    config_pinc_5;
 wire [23: 0]    config_poff_5;
 wire [23: 0]    config_pinc_6;
 wire [23: 0]    config_poff_6;
 wire [23: 0]    config_pinc_7;
 wire [23: 0]    config_poff_7; 

 assign  analog_data_valid   =  m_axis_data_tvalid0 |m_axis_data_tvalid1 |  m_axis_data_tvalid2 |m_axis_data_tvalid3 | m_axis_data_tvalid4 |m_axis_data_tvalid5 |  m_axis_data_tvalid6 |  m_axis_data_tvalid7;   

 assign  analog_data_128bit ={  m_axis_data_tdata0,     
                                m_axis_data_tdata1,
                                m_axis_data_tdata2,
                                m_axis_data_tdata3,
                                m_axis_data_tdata4,
                                m_axis_data_tdata5,
                                m_axis_data_tdata6,                               
                                m_axis_data_tdata7 
                                }; 

 mux1_8        inst_mux1_8  (
.sclk             (sclk),
.rst_n            (rst_n) ,    
.config_pinc    (s_axis_config_tdata) ,                    //    頻率控制字 
.config_poff    (s_axis_phase_tdata),                      //    初始相位控制字  
.poff_dds_ctrl  (s_axis_config_tdata),  
.config_pinc_0  (config_pinc_0)  ,
.config_poff_0  (config_poff_0)  , 
.config_pinc_1  (config_pinc_1)  ,
.config_poff_1  (config_poff_1)  ,
.config_pinc_2  (config_pinc_2)  ,
.config_poff_2  (config_poff_2)  ,
.config_pinc_3  (config_pinc_3)   ,
.config_poff_3  (config_poff_3)   ,
.config_pinc_4  (config_pinc_4)   ,
.config_poff_4  (config_poff_4)   ,
.config_pinc_5  (config_pinc_5)   ,
.config_poff_5  (config_poff_5)   ,
.config_pinc_6  (config_pinc_6)    ,
.config_poff_6  (config_poff_6)   ,
.config_pinc_7  (config_pinc_7)   ,
.config_poff_7  (config_poff_7)
  );  

  dds_compiler_0      your_instance_name0 (
  .aclk(sclk),                                   // input wire aclk
  .aresetn(rst_n),                               // input wire aresetn
  .s_axis_phase_tvalid(s_axis_phase_tvalid),     // input wire s_axis_phase_tvalid
  .s_axis_phase_tdata(config_poff_0),            // input wire [23 : 0] s_axis_phase_tdata
  .s_axis_config_tvalid(s_axis_config_tvalid),   // input wire s_axis_config_tvalid
  .s_axis_config_tdata(config_pinc_0),           // input wire [23 : 0] s_axis_config_tdata
  .m_axis_data_tvalid(m_axis_data_tvalid0),      // output wire m_axis_data_tvalid
  .m_axis_data_tdata(m_axis_data_tdata0)         // output wire [15 : 0] m_axis_data_tdata
);  
  dds_compiler_0       your_instance_name1 (
  .aclk(sclk),                                    // input wire aclk
  .aresetn(rst_n),                                // input wire aresetn  
  .s_axis_phase_tvalid(s_axis_phase_tvalid),      // input wire s_axis_phase_tvalid
  .s_axis_phase_tdata(config_poff_1),             // input wire [23 : 0] s_axis_phase_tdata
  .s_axis_config_tvalid(s_axis_config_tvalid),    // input wire s_axis_config_tvalid
  .s_axis_config_tdata(config_pinc_1),            // input wire [23 : 0] s_axis_config_tdata
  .m_axis_data_tvalid(m_axis_data_tvalid1),       // output wire m_axis_data_tvalid
  .m_axis_data_tdata(m_axis_data_tdata1)          // output wire [15 : 0] m_axis_data_tdata
);   

    dds_compiler_0       your_instance_name2 (
  .aclk(sclk),                                   // input wire aclk
  .aresetn(rst_n),                               // input wire aresetn
  .s_axis_phase_tvalid(s_axis_phase_tvalid),     // input wire s_axis_phase_tvalid
  .s_axis_phase_tdata(config_poff_2),            // input wire [23 : 0] s_axis_phase_tdata
  .s_axis_config_tvalid(s_axis_config_tvalid),   // input wire s_axis_config_tvalid
  .s_axis_config_tdata(config_pinc_2),           // input wire [23 : 0] s_axis_config_tdata
  .m_axis_data_tvalid(m_axis_data_tvalid2),       // output wire m_axis_data_tvalid
  .m_axis_data_tdata(m_axis_data_tdata2)          // output wire [15 : 0] m_axis_data_tdata
);    
  dds_compiler_0       your_instance_name3 (
  .aclk(sclk),                                   // input wire aclk
   .aresetn(rst_n),                            // input wire aresetn
  .s_axis_phase_tvalid(s_axis_phase_tvalid),     // input wire s_axis_phase_tvalid
  .s_axis_phase_tdata(config_poff_3),       // input wire [23 : 0] s_axis_phase_tdata
  .s_axis_config_tvalid(s_axis_config_tvalid),   // input wire s_axis_config_tvalid
  .s_axis_config_tdata(config_pinc_3),     // input wire [23 : 0] s_axis_config_tdata
  .m_axis_data_tvalid(m_axis_data_tvalid3),       // output wire m_axis_data_tvalid
  .m_axis_data_tdata(m_axis_data_tdata3)         // output wire [15 : 0] m_axis_data_tdata
);   

    dds_compiler_0       your_instance_name4 (
  .aclk(sclk),                                   // input wire aclk
  .aresetn(rst_n),                            // input wire aresetn 
  .s_axis_phase_tvalid(s_axis_phase_tvalid),     // input wire s_axis_phase_tvalid
  .s_axis_phase_tdata(config_poff_4),       // input wire [23 : 0] s_axis_phase_tdata
  .s_axis_config_tvalid(s_axis_config_tvalid),   // input wire s_axis_config_tvalid
  .s_axis_config_tdata(config_pinc_4),     // input wire [23 : 0] s_axis_config_tdata
  .m_axis_data_tvalid(m_axis_data_tvalid4),       // output wire m_axis_data_tvalid
  .m_axis_data_tdata(m_axis_data_tdata4)         // output wire [15 : 0] m_axis_data_tdata
);   


  dds_compiler_0       your_instance_name5 (
  .aclk(sclk),                                   // input wire aclk
  .aresetn(rst_n),                               // input wire aresetn
  .s_axis_phase_tvalid(s_axis_phase_tvalid),     // input wire s_axis_phase_tvalid
  .s_axis_phase_tdata(config_poff_5),            // input wire [23 : 0] s_axis_phase_tdata
  .s_axis_config_tvalid(s_axis_config_tvalid),   // input wire s_axis_config_tvalid
  .s_axis_config_tdata(config_pinc_5),            // input wire [23 : 0] s_axis_config_tdata
  .m_axis_data_tvalid(m_axis_data_tvalid5),       // output wire m_axis_data_tvalid
  .m_axis_data_tdata(m_axis_data_tdata5)          // output wire [15 : 0] m_axis_data_tdata
);   

    dds_compiler_0        your_instance_name6 (
  .aclk(sclk),                                   // input wire aclk
  .aresetn(rst_n),                            // input wire aresetn
  .s_axis_phase_tvalid(s_axis_phase_tvalid),     // input wire s_axis_phase_tvalid
  .s_axis_phase_tdata(config_poff_6),            // input wire [23 : 0] s_axis_phase_tdata
  .s_axis_config_tvalid(s_axis_config_tvalid),   // input wire s_axis_config_tvalid
  .s_axis_config_tdata(config_pinc_6),            // input wire [23 : 0] s_axis_config_tdata
  .m_axis_data_tvalid(m_axis_data_tvalid6),       // output wire m_axis_data_tvalid
  .m_axis_data_tdata(m_axis_data_tdata6)         // output wire [15 : 0] m_axis_data_tdata
);   
   dds_compiler_0        your_instance_name7 (
  .aclk(sclk),                                     // input wire aclk
  .aresetn(rst_n),                            // input wire aresetn
  .s_axis_phase_tvalid(s_axis_phase_tvalid),       // input wire s_axis_phase_tvalid
  .s_axis_phase_tdata(config_poff_7),             // input wire [23 : 0] s_axis_phase_tdata
  .s_axis_config_tvalid(s_axis_config_tvalid),    // input wire s_axis_config_tvalid
  .s_axis_config_tdata(config_pinc_7),             // input wire [23 : 0] s_axis_config_tdata
  .m_axis_data_tvalid(m_axis_data_tvalid7),        // output wire m_axis_data_tvalid
  .m_axis_data_tdata(m_axis_data_tdata7)          // output wire [15 : 0] m_axis_data_tdata
);   
reg   [15:0]             sample_data; 
//(* keep = "true" *)  reg    [2:0]             cnt;
always @(posedge sclk_2gHz or negedge rst_n)   begin
 if (~rst_n)  begin 
     cnt     <=     3'b0;  
 end
 else if (analog_data_valid == 1'b1) begin
        if (cnt == 3'd7)  begin 
         cnt     <=     3'b0;  
        end   
        else    begin 
        cnt      <=  cnt  +   1'b1;  
        end 
 end 
 else      begin
     cnt     <=     3'b0;  
 end    
end 


always @(posedge sclk_2gHz  or  negedge rst_n )   begin
 if (~rst_n)  begin 
    sample_data    <=     16'b0;  
 end
 else begin
    case (cnt)  
       3'd0:  sample_data    <=    m_axis_data_tdata0;       
       3'd1:  sample_data    <=    m_axis_data_tdata1;       
       3'd2:  sample_data    <=    m_axis_data_tdata2;        
       3'd3:  sample_data    <=    m_axis_data_tdata3;          
       3'd4:  sample_data    <=    m_axis_data_tdata4;        
       3'd5:  sample_data    <=    m_axis_data_tdata5;        
       3'd6:  sample_data    <=    m_axis_data_tdata6;        
       3'd7:  sample_data    <=    m_axis_data_tdata7;             
    endcase  
  end  
end   
endmodule

DDS-IP核移相實現過程

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2021/06/09 19:20:43
// Design Name: 
// Module Name: mux1_8
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////
module mux1_8(
input    wire             sclk,
input    wire             rst_n,    
input    wire [23: 0]     config_pinc,             //   頻率控制字 
input    wire [23: 0]     config_poff,             //   初始相位控制字  
input    wire [23: 0]     poff_dds_ctrl,           //   dds 相位偏移控制
output    wire [23: 0]    config_pinc_0,
output    wire [23: 0]    config_poff_0,
output    wire [23: 0]    config_pinc_1,
output    wire [23: 0]    config_poff_1,
output    wire [23: 0]    config_pinc_2,
output    wire [23: 0]    config_poff_2,
output    wire [23: 0]    config_pinc_3,
output    wire [23: 0]    config_poff_3,
output    wire [23: 0]    config_pinc_4, 


output    wire [23: 0]    config_poff_4,
output    wire [23: 0]    config_pinc_5,
output    wire [23: 0]    config_poff_5,
output    wire [23: 0]    config_pinc_6,
output    wire [23: 0]    config_poff_6,
output    wire [23: 0]    config_pinc_7,
output    wire [23: 0]    config_poff_7
    );

/*---------------  DDS 相位偏移作為輸入參數傳入 ------------------*/   
// localparam           poff_dds_ctrl       =      4194303 ;                     //  2^22-1      


//localparam           poff_dds_ctrl          =    176161    ;                            //   10Mhz 2^22-1  360度 的 1/25-周期(167773)   
// localparam            poff_dds_ctrl        =    335544    ;                            //   20Mhz 
// localparam            poff_dds_ctrl        =    838861    ;                            //   50Mhz  
// localparam            poff_dds_ctrl        =    1677721    ;                          //   100 Mhz  
// localparam            poff_dds_ctrl        =    4194303 > > 1   ;                     //   125 Mhz --(2097151) 
// localparam             poff_dds_ctrl       =     2642415   ;                         //   150 Mhz   
// localparam            poff_dds_ctrl        =    4194303 > > 2   ;                     //   250 Mhz  


assign     config_pinc_0  =    config_pinc;  
assign     config_pinc_1  =    config_pinc;      
assign     config_pinc_2  =    config_pinc;  
assign     config_pinc_3  =    config_pinc;          
assign     config_pinc_4  =    config_pinc;  
assign     config_pinc_5  =    config_pinc;          
assign     config_pinc_6  =    config_pinc;  
assign     config_pinc_7  =    config_pinc;      


assign      config_poff_0   =    config_poff; 
assign      config_poff_1   =    config_poff+ (poff_dds_ctrl > > 3); 
assign      config_poff_2   =    config_poff+ (poff_dds_ctrl > > 3) + (poff_dds_ctrl > > 3);     
assign      config_poff_3   =    config_poff+ (poff_dds_ctrl > > 3) + (poff_dds_ctrl > > 3) + (poff_dds_ctrl > > 3);    
assign      config_poff_4   =    config_poff+ (poff_dds_ctrl > > 3) + (poff_dds_ctrl > > 3) + (poff_dds_ctrl > > 3) + (poff_dds_ctrl > > 3);  
assign      config_poff_5   =    config_poff+ (poff_dds_ctrl > > 3) + (poff_dds_ctrl > > 3) + (poff_dds_ctrl > > 3) + (poff_dds_ctrl > > 3) + (poff_dds_ctrl > > 3); 
assign      config_poff_6   =    config_poff+ (poff_dds_ctrl > > 3) +  (poff_dds_ctrl > > 3) + (poff_dds_ctrl > > 3) + (poff_dds_ctrl > > 3) + (poff_dds_ctrl > > 3) + (poff_dds_ctrl > > 3);  
assign      config_poff_7   =    config_poff+ (poff_dds_ctrl > > 3) + (poff_dds_ctrl > > 3) + (poff_dds_ctrl > > 3) + (poff_dds_ctrl > > 3) + (poff_dds_ctrl > > 3) + (poff_dds_ctrl > > 3) + (poff_dds_ctrl > > 3);    
endmodule

仿真激勵文件

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2021/06/08 19:56:44
// Design Name: 
// Module Name: tb_top
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////
module tb_top(
);
reg                 aclk;
reg                sclk_2gHz;
reg                 rst_n;
reg                 s_axis_phase_tvalid;
reg  [23:0]         s_axis_phase_tdata; 
reg                 s_axis_config_tvalid; 
reg  [23:0]         s_axis_config_tdata; 
wire                m_axis_data_tvalid0; 
wire                m_axis_data_tvalid1; 
wire                m_axis_data_tvalid2; 
wire                m_axis_data_tvalid3; 
wire                m_axis_data_tvalid4; 
wire                m_axis_data_tvalid5; 
wire                m_axis_data_tvalid6; 
wire                m_axis_data_tvalid7; 
wire  [15:0]        m_axis_data_tdata0; 
wire  [15:0]        m_axis_data_tdata1; 
wire  [15:0]        m_axis_data_tdata2; 
wire  [15:0]        m_axis_data_tdata3;
wire  [15:0]        m_axis_data_tdata4;
wire  [15:0]        m_axis_data_tdata5; 
wire  [15:0]        m_axis_data_tdata6;
wire  [15:0]        m_axis_data_tdata7; 
wire                analog_data_valid;
wire  [127:0]       analog_data_128bit;    
wire  [15:0]        sample_data;
wire      [2:0]            cnt;


 initial       begin 
s_axis_config_tvalid         =        1'b1;  


//s_axis_config_tdata            =         24'd16777;                           //  ---1 MHZ 頻率控制字 
//s_axis_config_tdata            =         24'd167770;                          //  ---10MHZ 頻率控制字 ---  由頻率分辨率決定 ---   (10*10^6*2^22)/250*10^6 =  (0.0167772)* 10*10^6  =  167770 
//s_axis_config_tdata              =         24'd335540;                          //  ---20MHZ 頻率控制字 


//s_axis_config_tdata        =        24'd838850;                         //  ---50MHZ 頻率控制字 
//s_axis_config_tdata        =       24'd1677700;                         //  ---100MHZ 頻率控制字 
//s_axis_config_tdata        =       24'd2097125;                          //  ---125MHZ 頻率控制字 
//s_axis_config_tdata        =       24'd2516550;                         //  ---150MHZ 頻率控制字 
s_axis_config_tdata        =        24'd4194250;                        //  ---250MHZ 頻率控制字    
//s_axis_config_tdata        =        4194250 < < 1;                       //  ---500MHZ 頻率控制字    


//s_axis_phase_tdata                 =            24'd0;                                   //  --- 相位控制字  - 0度 
s_axis_phase_tdata               =            24'd524288;                            //   --- 相位控制字  - 45度   
//s_axis_phase_tdata                 =            24'd1048576;                           //   --- 相位控制字  - 90度     
s_axis_phase_tvalid                  =            1'b1;   
rst_n       =  0;
#10
rst_n       =  1;


//#1000
//s_axis_phase_tdata          =      24'd1048576;              //  --- 相位控制字  - 90度 
//#500
//s_axis_phase_tdata          =      24'd524288;              // --- 相位控制字  - 45度                    
end   

initial
begin
    aclk = 0;    forever #2 aclk = ~aclk;
end    


initial
begin
    sclk_2gHz = 0;    forever #0.25  sclk_2gHz = ~sclk_2gHz;
end 



  dds_ctrl        your_dds_ctrl (
  .sclk(aclk),                                     // input wire aclk
  .sclk_2gHz(sclk_2gHz),
  .rst_n(rst_n),
  .s_axis_phase_tvalid(s_axis_phase_tvalid),      // input wire s_axis_phase_tvalid
  .s_axis_phase_tdata(s_axis_phase_tdata),        // input wire [23 : 0] s_axis_phase_tdata
  .s_axis_config_tvalid(s_axis_config_tvalid),    // input wire s_axis_config_tvalid
  .s_axis_config_tdata(s_axis_config_tdata),      // input wire [23 : 0] s_axis_config_tdata
  .m_axis_data_tvalid0(m_axis_data_tvalid0),      // output wire m_axis_data_tvalid
  .m_axis_data_tdata0(m_axis_data_tdata0),        // output wire [15 : 0] m_axis_data_tdata
  .m_axis_data_tvalid1(m_axis_data_tvalid1),  
  .m_axis_data_tdata1(m_axis_data_tdata1),        // output wire [15 : 0] m_axis_data_tdata
  .m_axis_data_tvalid2(m_axis_data_tvalid2),  
  .m_axis_data_tdata2(m_axis_data_tdata2),        // output wire [15 : 0] m_axis_data_tdata
  .m_axis_data_tvalid3(m_axis_data_tvalid3),
  .m_axis_data_tdata3(m_axis_data_tdata3),        // output wire [15 : 0] m_axis_data_tdata
  .m_axis_data_tvalid4(m_axis_data_tvalid4),
  .m_axis_data_tdata4(m_axis_data_tdata4),        // output wire [15 : 0] m_axis_data_tdata
  .m_axis_data_tvalid5(m_axis_data_tvalid5),
  .m_axis_data_tdata5(m_axis_data_tdata5),        // output wire [15 : 0] m_axis_data_tdata
  .m_axis_data_tvalid6(m_axis_data_tvalid6),
  .m_axis_data_tdata6(m_axis_data_tdata6),        // output wire [15 : 0] m_axis_data_tdata
  .m_axis_data_tvalid7(m_axis_data_tvalid7),
  .m_axis_data_tdata7(m_axis_data_tdata7),        // output wire [15 : 0] m_axis_data_tdata
  .analog_data_valid(analog_data_valid),
  .analog_data_128bit(analog_data_128bit),
  .cnt(cnt),
  .sample_data(sample_data)
);      
endmodule

2.3、仿真驗證結果

圖片

圖2-3-1、生成50Mhz正弦波信號,采樣率為2G

圖片

圖2-3-2、生成100Mhz正弦波信號,采樣率為2G

圖片

圖2-3-3、生成250Mhz正弦波信號,采樣率為2G

2.4、仿真驗證總結

1、單個DDS調制模塊在使用的時候,如果輸出頻率高于采用時鐘頻率的一半時候,DDS輸出信號會失真。比如設置輸出頻率超過時鐘頻率的一半(大于125Mhz),導致單個DDS輸出信號失真。實驗發現盡管單個DDS輸出信號失真,整合后的輸出信號(8路DDS移相后輸出)仍然可以保證設置的信號頻率,比如圖2-3-3中單個DDS輸出信號失真,但是合成后的信號依然質量較高;

2、每個DDS-IP核移相的大小為頻率控制字的1/8,頻率控制字的位寬為24bits,頻率分辨率為100hz, 即整個DDS模塊可以輸出頻率為100hz或者100hz整數倍的波形數據。頻率控制字的位寬決定了頻率分辨率的大小,頻率控制字的位寬越大,DDS輸出信號的頻率分辨率越小,系統輸出信號的頻率范圍越寬。

2.5、板級測試結果

圖片

圖2-5-1 50Mhz正弦波信號,通過采樣率為2G的DAC芯片輸出模擬信號

圖片

圖2-5-2 250Mhz正弦波信號,通過采樣率為2G的DAC芯片輸出模擬信號

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

    關注

    1629

    文章

    21729

    瀏覽量

    603012
  • 時鐘
    +關注

    關注

    10

    文章

    1733

    瀏覽量

    131451
  • DDS
    DDS
    +關注

    關注

    21

    文章

    633

    瀏覽量

    152631
  • IP核
    +關注

    關注

    4

    文章

    327

    瀏覽量

    49485
  • 輸出信號
    +關注

    關注

    0

    文章

    281

    瀏覽量

    11858
收藏 人收藏

    評論

    相關推薦

    波導理論知識

    波導理論知識 學習資料! 
    發表于 11-03 08:36

    開關電源開發人員所需具備的理論知識實踐技能和工程素質

    ` 本帖最后由 eehome 于 2013-1-5 09:56 編輯 開關電源開發人員所需具備的理論知識 目錄1:開發一個開關電源產品所需要的技能和專業理論知識2:開發一個開關電源產品所需要進行的各種優化和折中3:保證開關電源產品一次開發成功所需具備的工程素質開關電源
    發表于 11-24 15:36

    初學者需要具備哪些理論知識

    初學者需要具備哪些理論知識????????我想請問我需要學習哪些知識,看那些書籍能夠學好單片機
    發表于 09-27 14:22

    基于FPGA的IPDDS信號發生器如何用IP

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

    ip使用問題

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

    檢測技術基礎理論知識

    檢測技術基礎理論知識
    發表于 11-27 14:51

    氣動理論知識-SMC品質管理課培訓教材

    氣動理論知識-SMC品質管理課培訓教材
    發表于 02-02 15:32 ?26次下載

    USB接口的基礎理論知識

    USB接口的基礎理論知識 USB的重要關鍵字:
    發表于 10-15 13:08 ?958次閱讀
    USB接口的基礎<b class='flag-5'>理論知識</b>

    基于FPGA的DDS IP設計方案

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

    開關電源的理論知識

    開關電源的理論知識 - 張興柱博士,下來看看。
    發表于 03-31 10:26 ?0次下載

    維修電工中級理論知識試卷分享

    本文主要內容是維修電工的中級理論知識。
    發表于 10-11 15:52 ?26次下載
    維修電工中級<b class='flag-5'>理論知識</b>試卷分享

    電信傳輸理論知識詳解

    本文詳細介紹了電信傳輸理論知識(新編)。
    發表于 11-16 15:57 ?3次下載
    電信傳輸<b class='flag-5'>理論知識</b>詳解

    學好電子技術關鍵是理論知識和實踐動手能力

    學習電子技術必須 “理論+實踐”。如果只學理論知識而不動手操作,則收效甚微;如果只進行實踐操作而不學習理論知識,效果也不明顯。因此,學好電子技術必須做到學習理論知識的同時又鍛煉實踐動手
    的頭像 發表于 12-26 11:04 ?7369次閱讀

    變頻器的故障分析和解決 實踐檢驗、理論知識及維修水平

    變頻器的故障分析和解決不僅需要實踐檢驗,還需要掌握相關變頻器相關的理論知識,理論分析與維修實踐相結合以達到較高的維修水平,維修人員需要學習的相關理論知識
    的頭像 發表于 07-17 08:54 ?4222次閱讀
    變頻器的故障分析和解決 實踐檢驗、<b class='flag-5'>理論知識</b>及維修水平

    Xilinx DDS IP的使用和參數配置

    用RAM實現一個DDS,從原理上來說很簡單,在實際使用的時候,可能沒有直接使用官方提供的IP來的方便。這個博客就記錄一下,最近使用到的這個DDS
    的頭像 發表于 10-25 16:54 ?775次閱讀
    Xilinx <b class='flag-5'>DDS</b> <b class='flag-5'>IP</b><b class='flag-5'>核</b>的使用和參數配置
    主站蜘蛛池模板: 久久性综合亚洲精品电影网| 久久久久琪琪精品色| 中文无码字慕在线观看| 无修肉动漫在线观看影片| 欧美性appstin孕妇| 暖暖免费观看日本在线视频 | 樱桃视频高清免费观看在线播放| 涩涩视频下载| 日本六九视频| 日本高清天码一区在线播放| 热99re久久精品国产首页| 恋夜直播午夜秀场最新| 国产亚洲精品视频亚洲香蕉视| 日本夜夜夜| 男生互捏jiji的故事| 欧美午夜免费观看福利片| 人人看人人看| 无修肉动漫在线观看影片| 亚洲男人天堂网| 国内精品自产拍在线少密芽| 国产AV精品白浆一区二| 放射源分类办法| 国产成人免费片在线视频观看| 北岛玲手机在线观看视频观看| 本庄优花aⅴ全部在线影片| no视频在线观看| 国产成人精品免费青青草原app| 把英语老师强奷到舒服动态图| 99久久综合| 趁老师睡着吃她的奶水| 被公疯狂玩弄的漂亮人妻| 出租屋交换人妻 全文| 国产精品A久久久久久久久| 国产精品99久久久久久AV| 国产亚洲精品久久精品录音 | 午夜亚洲动漫精品AV网站| 亚洲精品久久久久中文字幕二区| 97午夜伦伦电影理论片| 99久久婷婷国产麻豆精品电影| 成片在线看一区二区草莓| 国内精品久久久久久西瓜色吧|