国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Vivado DDS IP核使用、仿真、多相處理和相關計算驗證

這篇具有很好參考價值的文章主要介紹了Vivado DDS IP核使用、仿真、多相處理和相關計算驗證。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

第一次學,查詢了很多CSDN網頁,也問了組里的技術專家,得到了很多指導。把我的個人學習筆記在這里保存記錄分享,如果有問題歡迎大家批評指正。也歡迎大家點贊評論收藏,一起進步!

1 DDS IP核的配置

創(chuàng)建工程,在IP核配置頁面選擇DDS compiler 6.0。對IP核進行配置。

vivado中ddsip核詳解,tcp/ip,fpga開發(fā),學習

如圖所示配置參數。

Configuration(配置)頁面,Configuration Options 有三個選項,分別是相位產生器和SIN COS查找表、單獨的相位產生器、單獨的sin/cos,一般選擇第一個,利用IP核生成一個頻率相位可調的正余弦發(fā)生器。

將System Clock系統(tǒng)時鐘設置為250MHz,Number of Channels通道數設為1,Parameter Selection(參數選擇)主要分為Hardware Parameter 和 System Parameter兩種。

在System Parameter模式下,配置頁面需要配置系統(tǒng)參數設置。共有Spurious Free Dynamic Range(SFDR)、Frequency Resolution(頻率分辨率)、Noise Shaping(需不需要整形噪聲選擇自動模式就行)三項。其中SFDR與輸出數據位寬相關,見手冊表格。

vivado中ddsip核詳解,tcp/ip,fpga開發(fā),學習

Hardware Parameter模式下,Noise Shaping噪聲整形選項一般選擇None。Phase width指的是輸出的相位寬度信息,output width 指的是輸出的數據位寬;相位位寬選擇32位,數據位寬采用16位。

Implementation頁面,Phase Increment Programmability與Phase Offset Programmability,相位增量(即頻率控制字)和相位偏移量(即相位控制字)控制模式選擇,一般選擇可編程模式,該模式下在valid有效時可對相位增量和相位偏移量進行配置;Output sin、cos、sin&cos根據需要選擇即可。如圖所示:

vivado中ddsip核詳解,tcp/ip,fpga開發(fā),學習

在Summary中檢查配置無誤:

vivado中ddsip核詳解,tcp/ip,fpga開發(fā),學習

2 單路正弦信號的產生

事實上,任何周期信號都可以分解為一系列正弦或余弦信號之和,正弦信號是關于相位的一個周期函數。相位和幅值的一一對應關系就好比存儲器中地址和存儲內容的關系,如果把一個周期內每個相位對應的幅度值存入存儲器當中,那么對于任意頻率的正弦信號,在任意時刻,只要已知相位Φ(t),也就知道地址,就可通過查表得到s(t)。

相位累加器在每個時鐘脈沖輸入時,把頻率控制字累加一次,相位累加器的輸出數據就是信號的相位,用輸出的數據作為波形存儲器(ROM)的相位取樣地址,這樣就可以把存取在波形存儲器內的波形抽樣值經查找表查處,完成相位到幅值的轉換。頻率控制字相當于Φ(t)中的2πfc,相位控制字相當于Φ(t)中的θ0。

由于相位累加器字長的限制,相位累加器累加到一定值后,其輸出將會溢出,這樣波形存儲器的地址就會循環(huán)一次,即意味著輸出波形循環(huán)一周。故改變頻率控制字即相位增量,就可以改變相位累加器的溢出時間,在時鐘頻率不變的條件下就可以改變輸出頻率。改變查表尋址的時鐘頻率,同樣也可以改變輸出波形的頻率。

為了獲得較高的頻率分辨率,則只有增加相位累加器的字長N。

這部分參考了部分CSDN內容。

原文鏈接:https://blog.csdn.net/u014586651/article/details/88830115

相位累加器的字長為N,就將一個完整周期的正弦波的相位均勻分割為vivado中ddsip核詳解,tcp/ip,fpga開發(fā),學習個離散相位。如果想將頻率提高到2 = 點數變?yōu)?/span>1/2(隔一個點輸出一個波形)。事實上,DDS滿足:

vivado中ddsip核詳解,tcp/ip,fpga開發(fā),學習

其中,fout是輸出頻率,fclk是系統(tǒng)工作時鐘的頻率,FTW是頻率控制字,N是相位累加器的位數。對于一個IP核生成一路信號,其滿足:

vivado中ddsip核詳解,tcp/ip,fpga開發(fā),學習

其中,fout為輸出頻率,fclk為輸入ip的時鐘。Δθ為相位增量(頻率控制字),Bθ(n)為頻率精度位數、輸出相位數據的寬度(Phase Width),計算公式滿足:

vivado中ddsip核詳解,tcp/ip,fpga開發(fā),學習

其中Δf為頻率精度,對應IP核中Frequncy Resolution。

相位控制字滿足:

vivado中ddsip核詳解,tcp/ip,fpga開發(fā),學習

其中θ為相位偏移量,N為相位累加器的位數。

在IP Symbol中檢查IP核的端口,對IP核進行配置和例化。

代碼如下所示:

module simu(
  );
  
  reg clk;
  reg [63:0]pinc_sin;
  reg en_pinc;
  
  initial begin
  pinc_sin={32'd715827883,32'h0fffffff};
  en_pinc=1; //必須為1才有效
  clk=0;
  end
  
  always #2 clk=~clk;
  
  wire [15:0]dout_dds;
  wire data_tvalid;
  
dds_compiler_0 name(
    .aclk(clk),
    .s_axis_config_tvalid(en_pinc),//控制字有效信號,為1時控制字才有用。
    .s_axis_config_tdata(pinc_sin),
    .m_axis_data_tvalid(data_tvalid),
    .m_axis_data_tdata(dout_dds));

endmodule

其中,pinc_sin采用位拼接的方式配置頻率控制字和相位控制字,本實驗初相偏差π/3,根據相位控制字計算公式,poff=(π/3)*2^32/2π= 32'd715827883,頻率控制字選擇32'h0fffffff,仿真可以輸出正弦波形。

vivado中ddsip核詳解,tcp/ip,fpga開發(fā),學習

3 多相DDS

在第二節(jié)中已經實現了輸出250MHz的正弦波形,現在將使用多相處理,用四路250MHz的正弦波形構建一個1GHz的正弦波形。

vivado中ddsip核詳解,tcp/ip,fpga開發(fā),學習

基本原理如上圖所示,在一個上升沿內并行產生四個相位,再進行相應的相幅轉換。圖中1-4分別代表四路信號。由圖可知,對于一路信號而言,其頻率控制字FTW’=4FTW,每一路信號之間有一個FTW的相位差。

配置四個與第二節(jié)完全相同的DDS核:

vivado中ddsip核詳解,tcp/ip,fpga開發(fā),學習

simu代碼如下所示:

module simu(

? );



? reg clk;

? reg [63:0]pinc_sin_0;

? reg [63:0]pinc_sin_1;

? reg [63:0]pinc_sin_2;

? reg [63:0]pinc_sin_3;



? reg en_pinc_0;

? reg en_pinc_1;

? reg en_pinc_2;

? reg en_pinc_3;



? reg [15:0]q0;



? //存儲波形數據輸出為csv文件

? integer file_0;

? integer file_1;

? integer file_2;

? integer file_3;

????



? initial begin

? //對四個dds賦值,每個間隔dds相差FTW。頻率控制字FTW'=4FTW

? pinc_sin_0={32'd715827883,32'h03fffffc};??
? //h0fffffff=d268435455;h00ffffff=16777215;h03fffffc=d67108860

? pinc_sin_1={32'd732605098,32'h03fffffc};

? pinc_sin_2={32'd749382313,32'h03fffffc};

? pinc_sin_3={32'd766159528,32'h03fffffc};



? en_pinc_0=16'd1;

? en_pinc_1=16'd1;

? en_pinc_2=16'd1;

? en_pinc_3=16'd1; //必須為1才有效



? clk=16'd0;

? q0=16'd0;



? file_0=$fopen("E:/study2022/dds2/data_0.csv","w");

? file_1=$fopen("E:/study2022/dds2/data_1.csv","w");

? file_2=$fopen("E:/study2022/dds2/data_2.csv","w");

? file_3=$fopen("E:/study2022/dds2/data_3.csv","w");

? end



? always #2 clk=~clk;



? wire [15:0]dout_dds_0;

? wire [15:0]dout_dds_1;

? wire [15:0]dout_dds_2;

? wire [15:0]dout_dds_3;

? wire data_tvalid_0;

? wire data_tvalid_1;

? wire data_tvalid_2;

? wire data_tvalid_3;



?? always @(posedge clk)begin

??? if(q0 < 16'd4000)begin

??????? $fwrite(file_0,"%h\n",dout_dds_0);

??????? $fwrite(file_1,"%h\n",dout_dds_1);

??????? $fwrite(file_2,"%h\n",dout_dds_2);

??????? $fwrite(file_3,"%h\n",dout_dds_3);

??????? q0 <= q0 + 16'd1;

??? end

??? else begin

??????? q0 <= q0;

??????? $fclose(file_0);

??????? $fclose(file_1);

??????? $fclose(file_2);

??????? $fclose(file_3);

??? end

? end



dds_compiler_0 name0(

??? .aclk(clk),

??? .s_axis_config_tvalid(en_pinc_0),???? //相位控制字有效信號,同。

??? .s_axis_config_tdata(pinc_sin_0),

??? .m_axis_data_tvalid(data_tvalid_0),

??? .m_axis_data_tdata(dout_dds_0));



dds_compiler_1 name1(

??? .aclk(clk),

??? .s_axis_config_tvalid(en_pinc_1),???? //相位控制字有效信號,同。

??? .s_axis_config_tdata(pinc_sin_1),

??? .m_axis_data_tvalid(data_tvalid_1),

??? .m_axis_data_tdata(dout_dds_1));



dds_compiler_2 name2(

??? .aclk(clk),

??? .s_axis_config_tvalid(en_pinc_2),???? //相位控制字有效信號,同。

??? .s_axis_config_tdata(pinc_sin_2),

??? .m_axis_data_tvalid(data_tvalid_2),

??? .m_axis_data_tdata(dout_dds_2));

???

dds_compiler_3 name3(

??? .aclk(clk),

??? .s_axis_config_tvalid(en_pinc_3),???? //相位控制字有效信號,同。

??? .s_axis_config_tdata(pinc_sin_3),

??? .m_axis_data_tvalid(data_tvalid_3),

??? .m_axis_data_tdata(dout_dds_3));??

Endmodule

代碼中對頻率控制字、相位控制字進行了相關配置,并將輸出的四路信號的相關點的數據存為csv文件。

實驗波形圖如圖所示:

vivado中ddsip核詳解,tcp/ip,fpga開發(fā),學習

計算驗證一下,FTW’=4TFW=67108860,fclk=250*10^6,N=32。

理論上的fout=FTW’*fclk/2^N=67108860*250*10^6/2^32=3.9062*10^6Hz。

觀察波形圖,輸出信號周期為500ns-244ns=256ns,fout=1/256ns=3.9062*10^6Hz,相吻合,頻率控制字設置無誤。

相位初相能觀察到π/3的初相,不同信號之間能觀察到一個FTW的相差,頻率控制字設置無誤。

vivado中ddsip核詳解,tcp/ip,fpga開發(fā),學習

vivado中ddsip核詳解,tcp/ip,fpga開發(fā),學習

將保存的信號csv文件導入Matlab,對其進行交叉拼接處理,并繪制拼好后的正弦數組的頻譜圖。

vivado中ddsip核詳解,tcp/ip,fpga開發(fā),學習

相關Matlab代碼如下所示:

%讀取波形數值

%num_0 = xlsread('E:/study2022/dds/data_0.xlsx',1,'B1:B511')

%num_1 = xlsread('E:/study2022/dds/data_1.xlsx',1,'B1:B511')

%num_2 = xlsread('E:/study2022/dds/data_2.xlsx',1,'B1:B511')

%num_3 = xlsread('E:/study2022/dds/data_3.xlsx',1,'B1:B511')



%16進制轉化為10進制數

data_0=hex2dec(data0)

data_1=hex2dec(data1)

data_2=hex2dec(data2)

data_3=hex2dec(data3)



%交叉合并(拼接)

merge=[data_0'

????? data_1'

????? data_2'

????? data_3'];

merge=reshape(merge,[],1); %[]=length(data_0)+length(data_1)+length(data_2)+length(data_3)



%把矩陣merge轉化為csv文件

csvwrite('E:/study2022/dds2/merge.csv',merge);



%畫圖

for i=1:15960

??? if merge(i)>32768

??????? merge(i)=merge(i)-65536;? %將

??? else

??? i=i+1;

??? end

end

plot(merge)



%對畫出的圖像做FFT觀察頻譜

ff=20*log10(abs(fft(merge(1:15960))));

%ff2=abs(fft(merge(1:15960)));



plot(ff)

%plot(ff2)

其中,讀取波形數值部分可以用MATLAB自帶的導入工具:

vivado中ddsip核詳解,tcp/ip,fpga開發(fā),學習

繪圖結果如下圖所示:

vivado中ddsip核詳解,tcp/ip,fpga開發(fā),學習

?vivado中ddsip核詳解,tcp/ip,fpga開發(fā),學習

N個采樣點經過FFT變換后得到N個點的以復數形式記錄的FFT結果。

假設采樣頻率為Fs,采樣點數為N。那么FFT運算的結果就是N個復數(或N個點),每一個復數就對應著一個頻率值以及該頻率信號的幅值和相位。

第一個點對應的頻率為0Hz(即直流分量),最后一個點N的下一個點對應采樣頻率Fs。其中任意一個采樣點n所代表的信號頻率:Fn=(n-1)*Fs/N。

對實驗數據進行驗證,理論上輸出頻率為fout=3.9062MHz,根據圖可觀察后計算,真實輸出頻率fout=10^6*63/16000=3.9375MHz,考慮到繪圖誤差,數據在可控范圍內,整體實驗成功。文章來源地址http://www.zghlxwxcb.cn/news/detail-785964.html

到了這里,關于Vivado DDS IP核使用、仿真、多相處理和相關計算驗證的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 基于vivado DDS ip核的DDS信號發(fā)生器(可調頻調相)

    基于vivado DDS ip核的DDS信號發(fā)生器(可調頻調相)

    基于Vivado DDS ip核的DDS信號發(fā)生器: 在Vivado軟件中調出DDS ip核進行設置,很多參數可以參考xilinx官方手冊,比較重要的是System Clock系統(tǒng)時鐘和Phase Widh相位寬度的設置,這是最終得到波形的頻率和相位所需要的基礎參數,在這里我分別設置為50Mhz和16bit。 在implementation頁面設置頻

    2024年02月12日
    瀏覽(18)
  • 【FPGA】 十二、Vivado DDS IP核實現掃頻信號

    【FPGA】 十二、Vivado DDS IP核實現掃頻信號

    文章目錄 前言 一、DDS IP核概述 二、DDS IP核配置 三、調用DDS IP核 總結 ? ? 在我前面的工程中,都是一些比較通用的設計工程,沒有用到哪一家的IP核,所以代碼具有很好的移植性;今天我就來講一下基于Xilinx廠家的芯片做一期DDS的設計與驗證,這里我所采用的EDA工具是Viva

    2024年02月03日
    瀏覽(33)
  • Vivado關于dds IP核實現任意頻率的正余弦波輸出

    Vivado關于dds IP核實現任意頻率的正余弦波輸出

    目錄 一、dds IP核的創(chuàng)建與參數配置 1、創(chuàng)建dds IP核 2、參數配置 3、可編程輸入設置 4、詳細的設置 5、輸出頻率設置 6、配置總結 7、輸出增量和對應頻率總結 二、相關數據計算 1、DDS輸出波形頻率fout、相位增量?Θ、頻率分辨率?f、相位位寬BΘ(n)相關函數計算 2、舉例 三、

    2024年02月02日
    瀏覽(24)
  • 手把手教你在Vivado創(chuàng)建一個RAM的IP核并使用ILA工具驗證

    手把手教你在Vivado創(chuàng)建一個RAM的IP核并使用ILA工具驗證

    RAM的英文全稱是Random Access Memory,即隨機存取存儲器,它可以隨時把數據寫入任一指定地址的存儲單元,也可以隨時從任一指定地址中讀出數據,其讀寫速度是由時鐘頻率決定的。RAM主要用來存放程序及程序執(zhí)行過程中產生的中間數據、運算結果等。 單端口:只有一個端口,

    2024年01月25日
    瀏覽(35)
  • 關于FPGA(Vivado)后仿真相關問題的探討

    關于FPGA(Vivado)后仿真相關問題的探討

    ????????FPGA后仿真時,相比于功能仿真增加了門延時和布線延時,相對于門級仿真增加了布線延時,因此后仿真相比于功能仿真具有不同的特點。 ? ? ? ? 下面所示的代碼在功能仿真時是正確的的,但在后仿真時,似乎是有問題的。功能很簡單,當delay為高電平時,a與

    2024年02月08日
    瀏覽(18)
  • 多相濾波器MATLAB仿真---抽取&插值

    多相濾波器MATLAB仿真---抽取&插值

    多相濾波器MATLAB仿真---抽取插值 目錄 前言 一、什么是多相濾波器? 二、抽取 1.不考慮濾波器延時下的抽取 2.考慮濾波器延時下的抽取 三、插值 參考文獻 總結 ? ?語音信號多相濾波器是我上學期末做的一個課設,過了許久,在此僅僅簡單記錄一下,以特定的D值和I值展示一

    2024年02月01日
    瀏覽(35)
  • xilinx FPGA 除法器ip核(divider)的學習和仿真(Vivado)

    xilinx FPGA 除法器ip核(divider)的學習和仿真(Vivado)

    在設計中,經常出現除法運算, 實現方法 : 1、移位操作 2、取模取余 3、調用除法器IP核 4、查找表 簡單學習除法器IP。 網上很多IP翻譯文檔,不詳細介紹,記錄幾個重要的點: 1、三種算法模式(不同模式所消耗的資源類型不同) 2、分清除數和被除數;余數模式的選擇 3、延

    2024年04月28日
    瀏覽(291)
  • FPGA學習筆記(五):DDS IP核的使用

    FPGA學習筆記(五):DDS IP核的使用

    ?1. 打開VIVADO,點擊IP Catalog ? ?2.搜索DDS,選擇DDS Compiler ? ?3. 配置參數 (1) 設置主頻頻率 50MHz ? (2) 選擇sine,并且勾選Has Phase Out(相位輸出) ? ?(3) 勾選Output TREDAY ?(4) 輸入頻率 ? ?(5) 同上述步驟,再加一個DDS IP核 4. 測試文件? ?5. 結果展示 ? ? ? ?

    2024年02月11日
    瀏覽(23)
  • 具于xilinx FPGA的可動態(tài)配置DDS頻率控制字的DDS IP核使用例程詳解

    具于xilinx FPGA的可動態(tài)配置DDS頻率控制字的DDS IP核使用例程詳解

    本文用于講解xilinx IP 的dds ip examples(動態(tài)配置頻率)的功能說明,方便使用者快速上手。 本examples 是月隱編寫的針對DDS的使用demo,實現通過vio控制頻率控制字來調整DDS的輸出頻率,為大家演示一個可動態(tài)配置DDS頻率的例程。 例程的平臺: 1) 硬件平臺:XC7Z020CLG484-2 2) FP

    2024年02月02日
    瀏覽(31)
  • vivado CORDIC ip核計算arctan記錄

    vivado CORDIC ip核計算arctan記錄

    本文主要記錄自己使用vivado CORDIC ip 核計算arctan的過程。 下面是我測試工程的具體配置。 要計算arctan需要在 Functional Selection 選擇為“Arc Tan”,結構默認為并行結構。 Pipelining Mode 可以設置為最大值(Maximum)、最優(yōu)值(Optimal)和不設置流水線(No pipelining即純組合邏輯實現)

    2024年02月07日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包