在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

數字信號處理-DDS IP應用實例

CHANBAEK ? 來源:FPGA and ICer ? 作者:Vuko ? 2023-05-24 10:46 ? 次閱讀

前言

本文根據DDS的相關手冊構建仿真工程,包括單通道工程、多通道工程、使用DDS進行混頻操作。

單通道IP配置

新建一個空白工程,FPGA型號任意,添加DDS IP到工程中,雙擊打開配置項界面。 該界面可以配置DDS的相關配置選項和基本的一些參數。 這里重點說下常配置的參數。

  • 系統時鐘:為DDS工作的系統時鐘。
  • 通道數量:根據設計需求選擇通道數量。
  • 無雜散動態范圍(SFDR):這里輸入對應數值可以進行計算出輸出DDS數據的位寬,N代表DDS輸出的位寬數。 利用下面公式可以對45進行換算,經過計算N=7.47,向上取整得到輸出位寬為8。
  • 頻率分辨率 :頻率分辨率用于控制最小的分辨辨精度。

圖片

配置完成基本信息配置下一頁,基本保持默認即可,這里只想查看波形,所以相位輸出就關閉。

圖片

第三頁配置保持默認即可。

圖片

第四頁輸出頻率配置,這里設置輸出10M

圖片

在總結也中可以看到輸出信號的相關信息,這里可以簡要計算下phase width的28Bits如何來的。 該參數和DDS的工作頻率以及啟用通道,還有頻率分辨率有關。 通過下述式子,可以變形求得當前設置下Frequency Resolution。 DDS時鐘為100MHz,通道為1,相位位寬28Bits,換算得到頻率分辨率為0.37252902984619140625。 向上取整數,則得到當前設置的0.4Hz的分辨率。 已知頻率分辨率也可以換算位寬,不過此時得到的位寬是按2的次方去取整。

圖片

同時根據前面的相關參數可以計算向量增量。 帶入設置的參數可計算到增量的數值大小。

圖片

單通道實例

頂層調用

按上述IP配置配置完成后在top層進行實例化,然后即可完成單通道DDS的調用使用。 頂層模塊調用代碼如下:

module top(
    input clk
    );

    wire m_axis_data_tvalid_ch1;
    wire [7:0] m_axis_data_tdata_ch1;
    //單通道測試
    dds_compiler_0 ch1_dds(
    .aclk(clk),                              // input wire aclk
    .m_axis_data_tvalid(m_axis_data_tvalid_ch1),  // output wire m_axis_data_tvalid
    .m_axis_data_tdata(m_axis_data_tdata_ch1)    // output wire [7 : 0] m_axis_data_tdata
    );
endmodule

編寫仿真

編寫testbench,由于頂層只給了一個時鐘的輸入端口,所以只需要對時鐘進行仿真設計,單通道DDS測試如下:

`timescale 1ns / 1ps
module tb_top;

// top Parameters
parameter PERIOD  = 10;

// top Inputs
reg   clk                                  = 0 ;

// top Outputs

initial
begin
    forever #(PERIOD/2)  clk=~clk;
end

top  u_top (
    .clk(clk)
);

initial
begin
  #10000;
    $finish;
end

endmodule

編寫完成后直接點擊運行仿真測試即可。

測試結果

運行仿真查看波形結果,將頂層例化模塊的波形添加到波形窗口,可以得到數字模式下的十六進制顯示的數值,可將數值轉化為波形顯示方便觀察。

圖片

設置下數據的進制格式和顯示模式,這里修改通道數據為analog 模式,進制修改為有符號十進制。

圖片

圖片

修改后添加游標,可以觀察到輸出波形周期為100ns,也即10MHz,輸出波形頻率和設置一致。

圖片

多通道實例

重新打開IP配置界面或者新建一個DDS IP,修改通道數,這里設置為3。 使能相位輸出信號,查看下相位變化情況。 因為DDS的IP核多通道之間是分時復用的,所以在細節實現配置界面最好使能通道ID以供進行正常輸出單個通道的信號波形。 其余可以保持默認。

圖片

配置輸出頻率為10MHz、3MHz、4MHz。

圖片

配置完成點擊OK,對模塊進行例化。

頂層調用

頂層模塊調用代碼如下:

module top(
    input clk
    );

    wire m_axis_data_tvalid_ch1;
    wire [7:0] m_axis_data_tdata_ch1;
    
    wire          m_axis_data_tvalid_ch3;
    wire [7 : 0]  m_axis_data_tdata_ch3;
    wire [1 : 0]  m_axis_data_tuser_ch3;
    wire          m_axis_phase_tvalid_ch3;
    wire [31 : 0] m_axis_phase_tdata_ch3;
    wire [1 : 0]  m_axis_phase_tuser_ch3;

    //多通道測試
    dds_compiler_1 multi_ch_dds(
    .aclk(clk),                                // input wire aclk
    .m_axis_data_tvalid(m_axis_data_tvalid_ch3),    // output wire m_axis_data_tvalid
    .m_axis_data_tdata(m_axis_data_tdata_ch3),      // output wire [7 : 0] m_axis_data_tdata
    .m_axis_data_tuser(m_axis_data_tuser_ch3),      // output wire [1 : 0] m_axis_data_tuser
    .m_axis_phase_tvalid(m_axis_phase_tvalid_ch3),  // output wire m_axis_phase_tvalid
    .m_axis_phase_tdata(m_axis_phase_tdata_ch3),    // output wire [31 : 0] m_axis_phase_tdata
    .m_axis_phase_tuser(m_axis_phase_tuser_ch3)    // output wire [1 : 0] m_axis_phase_tuser
    );

仿真測試

仿真文件可以保持單通道測試不變,點擊運行行為級仿真,添加信號波形可觀察到下面的情況。 數據并不是直接得到的正弦波形,而是雜亂無章的。

圖片

放大tuser信號可觀察到,數據和相位通道的tuser信號是周期變化的,這里的tuser信號是代表IP設置中的chen ID,所以是分時復用輸出3個通道的信號所以要編寫簡單邏輯對信號進行分選。

圖片

頂層模塊修改

可根據tuser為判斷條件對輸出數據進行一步寄存,從而得到三個通道的波形數據。 代碼如下:

module top(
    input clk
    );

    //多通道測試
    dds_compiler_1 multi_ch_dds(
    .aclk(clk),                                // input wire aclk
    .m_axis_data_tvalid(m_axis_data_tvalid_ch3),    // output wire m_axis_data_tvalid
    .m_axis_data_tdata(m_axis_data_tdata_ch3),      // output wire [7 : 0] m_axis_data_tdata
    .m_axis_data_tuser(m_axis_data_tuser_ch3),      // output wire [1 : 0] m_axis_data_tuser
    .m_axis_phase_tvalid(m_axis_phase_tvalid_ch3),  // output wire m_axis_phase_tvalid
    .m_axis_phase_tdata(m_axis_phase_tdata_ch3),    // output wire [31 : 0] m_axis_phase_tdata
    .m_axis_phase_tuser(m_axis_phase_tuser_ch3)    // output wire [1 : 0] m_axis_phase_tuser
    );
    reg [7 : 0] data10MHz;
    reg [7 : 0] data3MHz;
    reg [7 : 0] data4MHz;
    always @(posedge clk) begin
        case(m_axis_data_tuser_ch3)
            0:data10MHz<=m_axis_data_tdata_ch3;
            1:data3MHz<=m_axis_data_tdata_ch3;
            2:data4MHz<=m_axis_data_tdata_ch3;
        endcase
     end
    reg [31 : 0] phase10MHz;
    reg [31 : 0] phase3MHz;
    reg [31 : 0] phase4MHz;
    always @(posedge clk) begin
        case(m_axis_data_tuser_ch3)
            0:phase10MHz<=m_axis_phase_tdata_ch3;
            1:phase3MHz<=m_axis_phase_tdata_ch3;
            2:phase4MHz<=m_axis_phase_tdata_ch3;
        endcase
    end

波形如下,從圖中可看出,經過邏輯分選后,三個通道的波形輸出正常,這里可看到相比單通道輸出10MHz信號的正弦波,此時輸出的波形不能從時域中看出正弦波形的周期,原因是當啟用多個通道后,系統鐘要除以通道數量才是對應通道的參考鐘,此時設置了100MHz為工作時鐘,使能3個通道, 所以單個通道的參考鐘為33.333MHz,對于10MHz的信號來說,相當于一個周期僅有三個點,所以無法正常觀察到時域特性,但是頻域特性依舊存在。

圖片

混頻實例

混頻原理

在對輸入中頻信號需要進行頻譜搬移, 需要使用混頻操作, 將頻譜搬移到高頻或者低頻, 其實就好比一輛車開在高速路還是低速路, 高頻低頻就是載波, 承載信息的載體。 在數字信號處理中, 頻譜的搬移就是將一個本震信號和一個輸入信號, 進行混頻, 這樣就可以得到一個復合的信號, 這里通過公式開看這個復合信號。

圖片

這里的α和β就是指的兩個頻率信號,當互相相乘得到兩個頻率信號,一個是α + β,另一個是α – β。 上圖的標識的 fout 信號應該是 f1+f2 和 f1-f2 的復合信號 。

使用多通道實例中輸出的3MHz和4Mhz,進行混頻操作,得到1MHz和7MHz的混合信號。 調用乘法器進行混頻乘法操作。

頂層模塊

module top(
    input clk
    );
    
    wire          m_axis_data_tvalid_ch3;
    wire [7 : 0]  m_axis_data_tdata_ch3;
    wire [1 : 0]  m_axis_data_tuser_ch3;
    wire          m_axis_phase_tvalid_ch3;
    wire [31 : 0] m_axis_phase_tdata_ch3;
    wire [1 : 0]  m_axis_phase_tuser_ch3;

    //多通道測試
    dds_compiler_1 multi_ch_dds(
    .aclk(clk),                                // input wire aclk
    .m_axis_data_tvalid(m_axis_data_tvalid_ch3),    // output wire m_axis_data_tvalid
    .m_axis_data_tdata(m_axis_data_tdata_ch3),      // output wire [7 : 0] m_axis_data_tdata
    .m_axis_data_tuser(m_axis_data_tuser_ch3),      // output wire [1 : 0] m_axis_data_tuser
    .m_axis_phase_tvalid(m_axis_phase_tvalid_ch3),  // output wire m_axis_phase_tvalid
    .m_axis_phase_tdata(m_axis_phase_tdata_ch3),    // output wire [31 : 0] m_axis_phase_tdata
    .m_axis_phase_tuser(m_axis_phase_tuser_ch3)    // output wire [1 : 0] m_axis_phase_tuser
    );
    reg [7 : 0] data10MHz;
    reg [7 : 0] data3MHz;
    reg [7 : 0] data4MHz;
    always @(posedge clk) begin
        case(m_axis_data_tuser_ch3)
            0:data10MHz<=m_axis_data_tdata_ch3;
            1:data3MHz<=m_axis_data_tdata_ch3;
            2:data4MHz<=m_axis_data_tdata_ch3;
        endcase
     end
    reg [31 : 0] phase10MHz;
    reg [31 : 0] phase3MHz;
    reg [31 : 0] phase4MHz;
    always @(posedge clk) begin
        case(m_axis_data_tuser_ch3)
            0:phase10MHz<=m_axis_phase_tdata_ch3;
            1:phase3MHz<=m_axis_phase_tdata_ch3;
            2:phase4MHz<=m_axis_phase_tdata_ch3;
        endcase
    end
    //混頻測試
    wire [15 : 0]  mixer_singal;
    mult_gen_0 mult_mixer (
        .CLK(clk),  // input wire CLK
        .A(data3MHz),      // input wire [7 : 0] A
        .B(data4MHz),      // input wire [7 : 0] B
        .P(mixer_singal)      // output wire [15 : 0] P
    );
endmodule

仿真測試

仿真文件可以保持單通道測試不變,點擊運行行為級仿真,添加信號波形修改波形設置,可得到混頻后的信號效果。

圖片

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

    關注

    15

    文章

    563

    瀏覽量

    46003
  • 仿真
    +關注

    關注

    50

    文章

    4124

    瀏覽量

    133998
  • 分辨率
    +關注

    關注

    2

    文章

    1072

    瀏覽量

    42038
  • 時鐘
    +關注

    關注

    11

    文章

    1747

    瀏覽量

    131803
  • DDS
    DDS
    +關注

    關注

    21

    文章

    636

    瀏覽量

    152941
收藏 人收藏

    評論

    相關推薦

    labview在數字信號中的應用實例

    labview在數字信號中的應用實例
    發表于 04-20 21:25

    數字信號處理(DSP)

    數字信號處理           數字信號處理是20世紀60年代,隨著信息學科和計算
    發表于 01-07 08:10 ?5171次閱讀

    數字信號處理器(DSP)

    數字信號處理器(DSP) 數字信號處理器(digital signal processor, 簡寫 DSP)是一種專用于(通常為實時的)數字信號
    發表于 01-04 10:54 ?3511次閱讀

    FPGA和DDS信號源中的應用

    DDS同DSP(數字信號處理)一樣,是一項關鍵的數字化技術。DDS是直接數字式頻率合成器(Dir
    發表于 06-02 09:23 ?4317次閱讀
    FPGA和<b class='flag-5'>DDS</b>在<b class='flag-5'>信號</b>源中的應用

    基于FPGA數字信號處理

    基于FPGA數字信號處理,本文主要探討了基于FPGA數字信號處理的實現
    發表于 10-30 10:39 ?34次下載

    數字信號處理及應用_王華奎_部分答案

    。這是數字信號處理中的經典內容,也是進一步學習和掌握更多 信號處理理論的基礎。為便于數字信號處理
    發表于 11-17 15:22 ?25次下載

    數字信號處理的FPGA實現

    本書比較全面地闡述了fpga在數字信號處理中的應用問題。本書共分8章,主要內容包括典型fpga器件的介紹、vhdl硬件描述語言、fpga設計中常用軟件簡介、用fpga實現數字信號處理
    發表于 12-23 11:07 ?45次下載

    數字信號處理

    數字信號處理基礎知識 有需要的朋友下來看看
    發表于 12-30 15:08 ?15次下載

    數字信號處理教程

    數字信號處理教程(第二版) 有需要的朋友下來看看
    發表于 12-30 15:07 ?21次下載

    數字信號處理實驗指導書(MATLAB版)

    本書是數字信號處理的必備書籍,里面有大量的信號處理的MATLAB實例
    發表于 04-18 10:28 ?0次下載

    基于FPGA數字信號處理

    基于FPGA數字信號處理
    發表于 12-14 22:08 ?20次下載

    數字信號處理

    數字信號處理實驗報告
    發表于 12-17 16:18 ?5次下載

    數字信號處理選型和介紹

    本文開始對數字信號處理數字信號處理的選型進行了介紹,其次介紹了數字信號處理芯片的選型參數,最后
    的頭像 發表于 02-05 14:02 ?7639次閱讀
    <b class='flag-5'>數字信號</b><b class='flag-5'>處理</b>選型和介紹

    數字信號的產生及處理

    數字信號的產生及處理
    發表于 04-09 15:10 ?10次下載
    <b class='flag-5'>數字信號</b>的產生及<b class='flag-5'>處理</b>

    數字信號處理器概論

    作為數字信號處理的一個實際任務就是要求能夠快速、高效、實時完成處理任務,這就要通過通用或專用的數字信號處理器來完成。因此,
    的頭像 發表于 08-07 16:58 ?4817次閱讀
    主站蜘蛛池模板: 韩彩英三级无删版甜性涩爱 | 欧美性猛交xxxx | 求毛片网站| 奇米狠狠干 | 亚洲男人天堂岛 | 最新国产精品视频免费看 | 5060精品国产福利午夜 | 亚洲伊人精品综合在合线 | 色多多网站 | 女人扒开腿让男人桶到爽 | 91视频看看 | 国产精品黄网站免费观看 | 欧美人与动另类在线 | 污污视频网址 | 美女扒开尿口让男人桶 | 欧美成人eee在线 | 在线视频一区二区三区 | 日本韩国三级视频 | 亚洲色图22p | 婷婷午夜天 | 欧美军同video69视频 | 神马影院午夜在线 | xxxx性xx另类 | 手机在线免费视频 | 欧美巨大xxxx做受中文字幕 | 午夜免费的国产片在线观看 | 天天噜天天射 | 久久天天干 | 色com| 青草青青产国视频在线 | 第四色播日韩第一页 | 性做久久久久久久 | 美女又黄又免费的视频 | 天天撸视频 | 2021久久精品免费观看 | 久久成人国产精品免费 | 欧美福利二区 | 久久精品国波多野结衣 | 又长又大又粗又硬3p免费视频 | 最新国产在线播放 | 女bbbbxxxx另类亚洲 |