RM新时代网站-首页

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

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

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

DDS信號生成模塊的Verilog實現(xiàn)

CHANBAEK ? 來源:新???/span> ? 作者:陳一偉 ? 2023-11-08 14:39 ? 次閱讀

直接數(shù)字頻率合成器(Direct Digital Synthesizer,DDS),是一種頻率合成技術(shù),具有相對帶寬大、頻率轉(zhuǎn)換速度快、相位分辨率高、連續(xù)性好等優(yōu)點,在數(shù)字信號處理中常用于調(diào)制信號的生成,模塊設(shè)計較為簡單,頻率、相位容易控制,多用于無線通信領(lǐng)域。

DDS發(fā)生器的組成原理精髓在于對“模板”信號在單個周期內(nèi)的采樣,在系統(tǒng)工作頻率一定的情況下,輸出信號頻率和周期內(nèi)的取樣點數(shù)有著直接的關(guān)系,舉個栗子,假設(shè)基波信號 U(t)=sin(2pift+θ )=sin( 2pit ) ,* 在0~2Π內(nèi)

等分周期,在相同的系統(tǒng)時鐘下采用不同的抽樣點數(shù)進行抽樣,如下圖所示:

圖片

以*Π/4 *為步進在單個周期內(nèi)抽樣

圖片

以*Π/8 *為步進在單個周期內(nèi)抽樣

圖片

可以很明顯看出,相同系統(tǒng)時鐘下使用不同的抽樣點數(shù),可以得到不同的輸出頻率;基本組成架構(gòu)如下,系統(tǒng)時鐘驅(qū)動頻率控制字(抽樣間隔)逐次累加生成存儲著基波數(shù)據(jù)ROM的對應(yīng)抽樣地址,相位控制字主要用來決定基波的起始相位;

圖片

FPGA中開辟一塊Block RAM用于存儲對應(yīng)的“模板”信號,也就是要輸周期信號的一個完整周期,輸出數(shù)據(jù)位數(shù)決定采樣波形存儲ROM的寬度,數(shù)據(jù)深度與采樣精度有關(guān),累加器用于按頻率控制字步長控制等間隔采樣精度,相位寄存器用于鎖定波形發(fā)生起始的位置,生成的周期數(shù)列作為ROM表的驅(qū)動地址,完成對"模板"信號不同頻率的抽樣;

圖片

模塊設(shè)計前需要先準(zhǔn)備ROM初始化文件“ .coe ”,生成方式可以使用工具或者MATLAB,下面是個人使用的一個基于MATLAB的coe文件生成代碼;

clc;clear;close all;  
width = 10;  
depth = 2048;  
t = linspace(0,2*pi,depth);  
sin_val = sin(t);  
% %cos_val = cos(t); 
plot(t,sin_val,'--');
 sin_val = fix(sin_val*(2^width-1)/2 + 0.5); %四舍五入  
% %cos_val = fix(cos_val*(2^width-1)/2 + 0.5);


sin_val(find(sin_val< 0))=sin_val(find(sin_val< 0)) + 2^width; %求補碼 
addr = [0:depth - 1];  
file = fopen('sin1024.coe','wt');  
fprintf(file,'MEMORY_INITIALIZATION_RADIX=10;n);
fprintf(file,'MEMORY_INITIALIZATION_VECTOR=n');


for i=1:depth  
    fprintf(file,'%04X : %04X;n',addr(i), sin_val(i)); 

end  
fprintf(file,'END;n');  
fclose(file);

模塊設(shè)計為便于修改添加部分參數(shù)定義,在有不同位寬需求時可以只修改參數(shù)和ROM模塊IP即可實現(xiàn);頻率計算公式不在推到,直接給出:

圖片

其中K為頻率控制字,N為相位累加器位寬,f0為模塊輸出頻率,fC為系統(tǒng)時鐘頻率;舉個例子,設(shè)系統(tǒng)時鐘為50Mhz,相位寬度10Bit,要輸出1Mhz的信號,則K=(2^101)/50; *設(shè)計代碼如下,使用時只需添加ROM模塊的IP,然后就可以例化工程使用:

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: nhike
// Engineer: chenyivi
// 
// Create Date: 2019/11/03 19:25:35
// Design Name:DDS_ROM_IP 
// Module Name: DDS_ROM
// Project Name: DDS_ROM_IP
// Target Devices: zynq7010
// Tool Versions:1.0 
// Description: WaveFrom
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////




module DDS_ROM(
    clk,          //系統(tǒng)時鐘
    rst_n,        //系統(tǒng)復(fù)位
    Freword,      //頻率控制參數(shù)
    Phaword,      //初始相位控制參數(shù)
    WaveDataOut    //輸出信號
  );

  parameter   FrequencyBitWidth = 32;       
  parameter   PhaseBitWidth =10;
  parameter   DataOutBitWidth= 10;

  input clk;
  input rst_n;
  input   [FrequencyBitWidth-1:0] Freword;
  input   [PhaseBitWidth-1:0]    Phaword;
  output   [DataOutBitWidth-1:0]   WaveDataOut;

  reg   [FrequencyBitWidth-1:0]  Freword_temp;
  reg   [PhaseBitWidth-1:0]    Phaword_temp;
  wire   [PhaseBitWidth-1:0]    WaveAddData;

  always@(posedge clk or negedge rst_n)begin    //data latch.
    if(!rst_n)begin
      Freword_temp <= 32'b0;
      Phaword_temp <= 10'b0;
      end
    else begin
      Freword_temp <= Freword;
      Phaword_temp <= Phaword;  
      end
  end

  reg [FrequencyBitWidth-1:0] cnt;

  always @(posedge clk or negedge rst_n)begin    //Sampling control.
    if(!rst_n)
      cnt <= 0;
    else
      cnt <= cnt + Freword_temp;
  end

  assign WaveAddData = cnt[FrequencyBitWidth-1:FrequencyBitWidth-(DataOutBitWidth + 1)] + Phaword_temp;   //Data precision interception

  WaveRom WaveRomBase (
    .clka(clk),   
    .addra(WaveAddData),  
    .douta(WaveDataOut)  
  );

endmodule

下面是仿真結(jié)果和RTL:

圖片

圖片

以上實現(xiàn)均在Vivado中驗證,Quartus使用方法與上述一致;

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

    關(guān)注

    0

    文章

    273

    瀏覽量

    25356
  • 頻率合成器
    +關(guān)注

    關(guān)注

    5

    文章

    219

    瀏覽量

    32350
  • 無線通信
    +關(guān)注

    關(guān)注

    58

    文章

    4564

    瀏覽量

    143496
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1351

    瀏覽量

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

    關(guān)注

    21

    文章

    633

    瀏覽量

    152630
收藏 人收藏

    評論

    相關(guān)推薦

    Verilog實現(xiàn)DDS正弦波發(fā)生器

    DDS 同 DSP(數(shù)字信號處理)一樣,是一項關(guān)鍵的數(shù)字化技術(shù)。DDS 是直接數(shù)字式頻率合成器(Direct Digital Synthesizer)的英文縮寫。與傳統(tǒng)的頻率合成器相比,DDS
    的頭像 發(fā)表于 12-22 09:48 ?1223次閱讀
    <b class='flag-5'>Verilog</b><b class='flag-5'>實現(xiàn)</b><b class='flag-5'>DDS</b>正弦波發(fā)生器

    DDSVERILOG原代碼

    DDSVERILOG原代碼
    發(fā)表于 08-11 09:35

    基于Verilog HDL的DDS設(shè)計與仿真

    基于Verilog HDL的DDS設(shè)計與仿真
    發(fā)表于 08-19 23:15

    Verilog通過DDS合成正弦波信號

    。而存儲每一個幅度的比特數(shù)決定了幅度的量化誤差??梢酝ㄟ^Quartus II的IP核資源創(chuàng)建。Verilog編寫的DDS模塊主要由三部分組成,一、相位累加器,用于決定輸出信號頻率的范圍
    發(fā)表于 03-22 23:42

    急急急?。?!各位大神幫幫忙!怎么用Verilog控制DDS芯片AD9852

    ,看了網(wǎng)上的資料,都是Verilog通過內(nèi)部模塊實現(xiàn)DDS。希望大神們給點給我個控制程序,讓我參考一下。大恩大德,不勝感激!實在很急
    發(fā)表于 04-25 21:56

    請問怎么用Verilog寫一個DDS產(chǎn)生Chirp線性調(diào)頻信號

    有沒有前輩用Verilog寫一個DDS產(chǎn)生Chirp線性調(diào)頻信號,方便的話能不能給個代碼,我的郵箱是year2015@126.com,
    發(fā)表于 09-11 17:35

    基于DDS實現(xiàn)信號的頻譜分析

    1 引言 直接數(shù)字頻率合成(DDS)是近幾年一種新型的頻率合成法,其具有頻率切換速度快,頻率分辨率高,以及便于集成等優(yōu)點。在此,設(shè)計了基于DDS的頻譜分析儀,該頻譜分析儀依據(jù)外差原理,被測信號與本征頻率混頻,
    發(fā)表于 05-31 08:01

    使用AD9739A生成信號,用FPGA的DDS生成信號,為什么諧波特別明顯?

    使用AD9739A生成信號,用FPGA的DDS生成信號,見圖,諧波特別明顯,尤其是3次諧波,購買的是AD9739_FMC的評估板,下圖中產(chǎn)生
    發(fā)表于 12-07 07:57

    基于FPGA的DDS調(diào)頻信號的研究與實現(xiàn)

    本文從DDS 基本原理出發(fā),利用FPGA 來實現(xiàn)DDS 調(diào)頻信號的產(chǎn)生,重點介紹了其原理和電路設(shè)計,并給出了FPGA 設(shè)計的仿真和實驗,實驗結(jié)果表明該設(shè)計是行之有效的。直接數(shù)字頻率
    發(fā)表于 06-26 17:29 ?72次下載

    基于FPGA的DDS信號源設(shè)計與實現(xiàn)

    基于FPGA的DDS信號源設(shè)計與實現(xiàn) 利用DDS和 FPGA 技術(shù)設(shè)計一種信號發(fā)生器.介紹了該信號
    發(fā)表于 02-11 08:48 ?225次下載

    DDS在羅盤測試信號產(chǎn)生模塊中的應(yīng)用

    本文在對DDS原理和AD9854芯片研究的基礎(chǔ)上,介紹了一種羅盤測試信號產(chǎn)生模塊的設(shè)計方案。通過單片機對DDS芯片的控制,可以產(chǎn)生正弦波信號
    發(fā)表于 07-31 10:45 ?12次下載

    基于DDS信號發(fā)生器設(shè)計

    基于dds函數(shù)信號發(fā)生器,用單片機及dds實現(xiàn)正玄波,三角波,矩形波的產(chǎn)生
    發(fā)表于 01-11 14:55 ?21次下載

    DDS多波信號發(fā)生器的實現(xiàn)

    詳細介紹了直接數(shù)字頻率合成器(DDS)的工作原理、基本結(jié)構(gòu)。在參考DDS 相關(guān)文獻的基礎(chǔ)上,提出了符合結(jié)構(gòu)的DDS 設(shè)計方案,利用DDS 技術(shù)設(shè)計了一種高頻率精度的多波形
    發(fā)表于 11-22 14:35 ?0次下載

    基于Verilog實現(xiàn)DDS任意波形發(fā)生器

    DDS是從相位的概念直接合成所需波形的一種頻率合成技術(shù)。不僅可以產(chǎn)生不同頻率的正弦波,而且可以控制波形的初始相位。本文為大家介紹基于Verilog實現(xiàn)DDS任意波形發(fā)生器。
    發(fā)表于 01-08 11:58 ?6841次閱讀
    基于<b class='flag-5'>Verilog</b><b class='flag-5'>實現(xiàn)</b>的<b class='flag-5'>DDS</b>任意波形發(fā)生器

    如何自動生成verilog代碼

    介紹幾種自動生成verilog代碼的方法。
    的頭像 發(fā)表于 11-05 11:45 ?287次閱讀
    如何自動<b class='flag-5'>生成</b><b class='flag-5'>verilog</b>代碼
    RM新时代网站-首页