加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權(quán)保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • 1 DDS IP概述
    • 2 DDS IP 架構(gòu)
    • 3 DDS IP 配置
    • 4 FPGA 實驗
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

Vivado DDS IP核仿真

02/18 17:10
4324
閱讀需 16 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

1 DDS IP概述

直接數(shù)字合成器(DDS)或數(shù)控振蕩器(NCO)是許多數(shù)字通信系統(tǒng)中的重要部件。正交合成器用于構(gòu)造數(shù)字下變頻器和上變頻器、解調(diào)器,并實現(xiàn)各種類型的調(diào)制方案,包括PSK(相移鍵控)、FSK(頻移鍵控(frequency shift keying))和MSK(minimum shift keyed)。

數(shù)字生成復(fù)數(shù)或?qū)崝?shù)正弦曲線采用查找表方案。查找表存儲正弦曲線的樣本。數(shù)字積分器用于生成合適的相位自變量,該相位自變量由查找表映射到期望的輸出波形。簡單的用戶界面接受系統(tǒng)級參數(shù),例如所需的輸出頻率和所生成波形的雜散抑制。

?相位生成器和SIN/COS查找表可以單獨生成,也可以與可選抖動一起生成,以提供完整的DDS解決方案。
?光柵化功能消除了相位截斷產(chǎn)生的相位噪聲。
?正弦、余弦或正交輸出。
?可選的累積相位的每通道重新同步。
?查找表可以存儲在分布式或塊RAM中。
?可選相位抖動擴展譜線能量,以獲得更大的雜散自由動態(tài)范圍(SFDR)。
?相位抖動或泰勒級數(shù)校正選項使用最少的FPGA資源提供高動態(tài)范圍信號。支持18dB到150dB的SFDR。
?多達16個獨立的時分復(fù)用信道。
?使用高達48位相位累加器的精細(xì)頻率分辨率,帶有DSP切片或FPAGA邏輯選項。
?3位至26位帶符號輸出采樣精度

IP 文檔連接:PG141

2 DDS IP 架構(gòu)


3 DDS IP 配置

(1)Component Name 可以修改IP核名字

(2)Configuration options 配置選項:這里我們選擇phase generator and sin cos LUT

(3)system clock(系統(tǒng)時鐘) 100MHz(范圍0.01—1000MHZ);通過奈奎斯特定理可知,最大輸出的頻率為50MHz,實際測得輸出最大頻率為50MHz,當(dāng)輸出的頻率超過25MHz的時候頻率就開始不穩(wěn)定;要想輸出更大的頻率,可以通過增加系統(tǒng)時鐘來實現(xiàn);

(4)Number of channels(通道數(shù)選擇) 1;最多可以選擇16個通道輸出,本項目為實現(xiàn)任意可調(diào)頻率輸出只用到單通道輸出即可;

(5)Frequency per channel (每通道頻率)100MHz;通過系統(tǒng)時鐘除以通道數(shù)得到每通道的頻率;

(6)Parameter selection (參數(shù)選擇) system parameters;系統(tǒng)參數(shù),為了更精確的輸出任意頻率,選擇系統(tǒng)參數(shù)模式;

(7)Spurious free dynamic range(偽動態(tài)自由范圍)48(決定輸出正余弦數(shù)據(jù)位寬n,范圍為6*(n-1)~6*n,后面選擇正弦或者余弦輸出時位寬為8位,如果正余弦同時輸出則位寬為16位,正弦為高8位,余弦為低8位)

(9)Frequency resolution(頻率分辨率) 0.02910383045673370361328125(決定相位位寬,由相位位寬函數(shù)可得出頻率分辨率,分辨率越精確,可調(diào)輸出頻率越精確,相位位寬函數(shù)在后面講到)

(10)Noise shaping(噪聲整形):控制是否相位截斷、抖動或泰勒級數(shù)校正使用;

1)Phase increment programmability(相位增量可編程性)
Fixed(固定模式);固定輸出頻率,不可任意調(diào)整;
Programmable(可編程模式);根據(jù)設(shè)計需求選擇相位增量可編程模式,通過頻率輸出函數(shù)可知,輸入不同相位增量時可輸出不同頻率,頻率輸出函數(shù)后面講到;
Streaming(流水模式);

(2)Phase offset programmability
None(無);選擇無相位偏移;
Fixed(固定模式);固定相位偏移;
Programmable(可編程模式);可以調(diào)整波形相位;
Streaming(流水模式);

(3)Output selection(輸出選擇)
Sine and cosine(正弦和余弦);如果用到正弦和余弦同時輸出,則高8位表示正弦輸出,低8位表示余弦輸出;
Sine(正弦);選擇正弦輸出即可;
Cosine (余弦);

(4)Polarity (極性)沒用上,不用選;
Negative sine(負(fù)極性正弦);
Negative cosine(負(fù)極性余弦);

(5)Implementation options(實現(xiàn)選項)
Memory type(內(nèi)存類型:它控制SIN/COS查找表的實現(xiàn)):auto默認(rèn)選擇自動、distribution rom(分布rom)、block rom(塊rom)
Optimization goal(優(yōu)化目標(biāo):選擇控制實現(xiàn)決策的目標(biāo)是最高速度還是最低資源):auto默認(rèn)選擇自動、area(區(qū)域)、speed(速度)
DSP48 use(控制相位累加器和后續(xù)添加階段(相位偏移或抖動噪聲添加)的實現(xiàn)):minimal(默認(rèn)最?。aximal(最大)


4 FPGA 實驗

調(diào)用DDS IP核實現(xiàn)掃頻信號,我這里設(shè)計的掃頻范圍是1KHz–10KHz,通過控制頻率控制字來更改輸出的波形的頻率,讓其在1KHz到10KHz直接變化,又讓其從10KHz變化到1KHz。

DDS_top:

module dds_top(
   input wire aclk,
   input wire reset_n,
   
   output       valid,
   output signed [7:0] sin,
   output signed [7:0] cos
    );
    

wire s_axis_phase_tvalid;
wire [31 : 0] s_axis_phase_tdata;
wire s_axis_config_tvalid;
wire [31 : 0] s_axis_config_tdata;

wire m_axis_data_tvalid;
wire [15 : 0] m_axis_data_tdata;//輸出為16位,高8位是sin波形,低8位是cos波
wire m_axis_phase_tvalid;
wire [31 : 0] m_axis_phase_tdata;
 
 
 assign valid = m_axis_data_tvalid;
 assign sin =m_axis_data_tdata[15:8];
 assign cos =m_axis_data_tdata[7:0];  
 
dds_ctl Udds_ctl(
        .aclk(aclk),//100mhz
        .reset_n(reset_n),
    
        .phase_tvalid(s_axis_phase_tvalid),
        .phase_tdata(s_axis_phase_tdata),
        .config_tvalid(s_axis_config_tvalid),
        .config_tdata(s_axis_config_tdata)
    );
    
     
dds_compiler_0 UDDS (
  .aclk(aclk),                                  // input wire aclk
  .s_axis_phase_tvalid(s_axis_phase_tvalid),    // input wire s_axis_phase_tvalid
  .s_axis_phase_tdata(s_axis_phase_tdata),      // input wire [31 : 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 [31 : 0] s_axis_config_tdata
  .m_axis_data_tvalid(m_axis_data_tvalid),      // output wire m_axis_data_tvalid
  .m_axis_data_tdata(m_axis_data_tdata),        // output wire [15 : 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
);
endmodule

dds_ctl

//config_tdata -- detla=Fout*2^32/Fclk
module dds_ctl(
    input aclk,//100mhz
    input reset_n,
    
   output wire          phase_tvalid,
   output wire [31 : 0] phase_tdata,
   output wire          config_tvalid,
   output wire [31 : 0] config_tdata
    );

//參數(shù)定義
parameter F_word_1KHz   = 32'hA7C5  ;//1KHz頻率控制字 M = 1_000*2^32/100_000_000
parameter F_word_10KHz  = 32'h68DB8 ;//10KHz頻率控制字 M = 10_000*2^32/100_000_000
parameter F_word_change = 32'h1     ;//1KHz-10KHz變化精度
//信號定義
reg    [31:0]    config_data_reg    ;//頻率控制字寄存器
reg              max_flag           ;//當(dāng)頻率控制字最大時,拉高
//max_flag
always @(posedge aclk or negedge reset_n)begin
    if(!reset_n)begin
        max_flag <= 1'b0;
    end
    else if(config_data_reg >= F_word_10KHz)begin
        max_flag <= 1'b1;
    end
    else if(config_data_reg == F_word_1KHz)begin
        max_flag <= 1'b0;
    end
end
 
 
//控制頻率控制字均勻變化
always @(posedge aclk or negedge reset_n)begin
    if(!reset_n)begin
        config_data_reg <= F_word_1KHz;
    end
    else if(max_flag == 1'b1)begin
        config_data_reg <= config_data_reg - F_word_change;
    end
    else begin
        config_data_reg <= config_data_reg + F_word_change;
    end
end
//輸出
assign phase_tvalid = 1'b1;
assign phase_tdata = 32'h0;//設(shè)置相位控制字為0
assign config_tvalid = 1'b1;
assign config_tdata = config_data_reg;
  
    
endmodule

tb

`timescale 1ns / 1ps

module tb(

    );

   reg aclk;
   reg reset_n;
   
   wire       valid;
   wire signed [7:0] sin;
   wire signed [7:0] cos;
   
   initial begin
     aclk =0;
     reset_n =0;
     #1000;
     reset_n =1;
   
   end
   
   always #(5) aclk =~aclk;
       
dds_top Udds_top(
        .aclk(aclk),
        .reset_n(reset_n),
   
        .valid(valid),
        .sin(sin),
        .cos(cos)
    );
    
    
endmodule

仿真波形:

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風(fēng)險等級 參考價格 更多信息
EP4CE30F23C8N 1 Altera Corporation Field Programmable Gate Array, 1803 CLBs, 472.5MHz, 28848-Cell, PBGA484, 23 X 23 MM, 1 MM PITCH, LEAD FREE, FBGA-484

ECAD模型

下載ECAD模型
$39.92 查看
XC2C384-10FTG256I 1 AMD Xilinx Flash PLD, 10ns, 384-Cell, CMOS, PBGA256, 17 X 17 MM, 1 MM PITCH, LEAD FREE, FTBGA-256
$596.21 查看
10M08SCE144C8G 1 Intel Corporation Field Programmable Gate Array, 8000-Cell, CMOS, PQFP144, 22 X 22 MM, 0.50 MM PITCH, ROHS COMPLIANT, PLASTIC, EQFP-144

ECAD模型

下載ECAD模型
$17.46 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

lee
lee

從數(shù)字出發(fā),走進圖像世界,聆聽音頻的美妙旋律。從電路出發(fā),實現(xiàn)美妙的算法,展示代碼的美奐。從知識到實現(xiàn),歡迎大家關(guān)注公眾號FPGA開源工作室。