亚洲天堂网_国产中出_日韩激情网_97se.com_中国亚洲老少妇色视频

項目展示分類
MATLAB算法仿真 SIMULINK仿真 FPGA工程開發 機器學習 視覺識別系統 網絡開發 通信/信號處理 語音智能處理 新算法預研 信息論/編碼譯碼 人工智能 其他項目

微信:HuangL1121
Q Q:1224848052
團隊:嘉興麥特萊博軟件開發工作室
地址:嘉興港區
 
FPGA工程開發
基于FPGA的高精度DDS設計和測試
來源:本站    日期:2022/9/30    瀏覽量:2281  

功能描述:

        DDS的工作過程為:在參考時鐘fc的作用下,相位累加器對頻率控制字FCW進行線性累加,將其高W位作為地址碼通過波形查值表ROM變換,產生D位對應信號波形的數字序列,再由數模轉換器DAC將其轉化為階梯模擬電壓波形后由具有內插作用的低通濾波器LPF將其平滑為連續的正弦波形作為輸出。
       這里,我們主要考慮的方法是基于一種差值的方法來實現高位寬的ROM值輸出。具體的方法如下所示:

       首先,設計一個深度為2^16的小ROM。這個作為頻率控制字的高16位的輸入腳。作為輸出的基本頻率信號,通過這個方式,輸出的正弦信號的分辨率為:457.763671875Hz。以這個頻率分辨率的信號作為粗DDS輸出信號。

        首先按原高16位的值輸入到ROM中得到一組數據,然后在此基礎上,加上1作為一組新的頻率控制字輸入到ROM,得到第二組數據。那么根據算法可知,這兩組數據的差值為457.763671875Hz。

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date:    18:47:07 03/24/2012 
// Design Name: 
// Module Name:    dds_tops 
// Project Name: 
// Target Devices: 
// Tool versions: 
// Description: 
//
// Dependencies: 
//
// Revision: 
// Revision 0.01 - File Created
// Additional Comments: 
//
//
module dds_tops(
                i_clk, //100M
i_rst,
o_carrier_slow,
o_carrier_fast,
o_lmda,
o_carrier
            );
 
parameter DDS_VALUE = 48'd25893420468932;  //10.11911000Mhz
 
 
 
input              i_clk;
input              i_rst;
output signed[15:0]o_carrier_slow;
output signed[15:0]o_carrier_fast;
output       [15:0]o_lmda;
output signed[15:0]o_carrier;
 
 
 
 
//產生慢頻率載波
//產生慢頻率載波
reg[13:0]Address_slow;
always @(posedge i_clk or posedge i_rst)
begin
     if(i_rst)
  begin
  Address_slow <= 14'd0;
  end
else begin
     Address_slow <= Address_slow + DDS_VALUE[47:34];
     end
end
rom_dds rom_dds_u1(
.clka  (i_clk),
.rsta  (i_rst),
.addra (Address_slow),
.douta (o_carrier_slow)
);
 
 
 
//產生快頻率載波
//產生快頻率載波
reg[13:0]Address_fast;
always @(posedge i_clk or posedge i_rst)
begin
     if(i_rst)
  begin
  Address_fast <= 14'd0;
  end
else begin
     Address_fast <= Address_fast + (DDS_VALUE[47:34] + 14'd1);
     end
end
rom_dds rom_dds_u2(
.clka  (i_clk),
.rsta  (i_rst),
.addra (Address_fast),
.douta (o_carrier_fast)
);
 
 
wire [47:0]slow_DDS;
wire [47:0]fast_DDS;
 
assign slow_DDS = {DDS_VALUE[47:34],34'd0};
assign fast_DDS = {DDS_VALUE[47:34]+1'b1,34'd0};
 
//進行lmda估計
//進行lmda估計
wire is_larger1;
 
lmda_check lmda_check_u(
.i_clk      (i_clk), 
.i_rst      (i_rst), 
.i_slow_DDS (slow_DDS), 
.i_jizh_DDS (DDS_VALUE), 
.i_fast_DDS (fast_DDS), 
.o_lmda     (), 
.o_lmdas    (o_lmda),
.is_larger1 (is_larger1),
//test
.diff1      (),
.diff2      (),
.divs       ()
  );
 
//進行差值,得到最后的計算結果
//lmda > 1 :((1/lmda) * fmax + fmin)/(1+(1/lmda))
//lmda < 1 :(fmax + lmda*fmin)/(1+lmda)
 
//計算1+lmda or 1+(1/lmda)
 
//lmda_roms lmda_roms_u(
// .clka  (i_clk),
// .rsta  (i_rst),
// .addra (o_lmda), // Bus [13 : 0] 
// .douta (douta)
// ); // Bus [15 : 0] 
 
wire signed[31:0]carrier_fast_lmda;
wire signed[31:0]carrier_slow_lmda;
 
multer multer_u1(
.clk  (i_clk),
.a    (o_carrier_fast),  
.b    (o_lmda),  
.sclr (i_rst),
.p    (carrier_fast_lmda)
);  
 
multer multer_u2(
.clk  (i_clk),
.a    (o_carrier_slow),  
.b    (o_lmda),  
.sclr (i_rst),
.p    (carrier_slow_lmda)
);  
 
 
reg signed[31:0]r1;
reg signed[31:0]r2;
reg signed[31:0]r3;
 
always @(posedge i_clk or posedge i_rst)
begin
     if(i_rst)
  begin
  r1 <= 32'd0;
  r2 <= 32'd0;
  r3 <= 32'd0;
  end
else begin
          if(is_larger1 == 1'b1)
begin
       r1 <=   carrier_fast_lmda;
       r2 <=  {o_carrier_slow,o_carrier_slow[15],o_carrier_slow[15],o_carrier_slow[15],o_carrier_slow[15]
                       ,o_carrier_slow[15],o_carrier_slow[15],o_carrier_slow[15],o_carrier_slow[15]
  ,o_carrier_slow[15],o_carrier_slow[15],o_carrier_slow[15],o_carrier_slow[15]
  ,o_carrier_slow[15],o_carrier_slow[15],o_carrier_slow[15],o_carrier_slow[15]   
  };
       r3 <=  r1[31:1] + r2[31:1];  
end
  else begin
       r1 <=  carrier_slow_lmda;
       r2 <= {o_carrier_fast,o_carrier_fast[15],o_carrier_fast[15],o_carrier_fast[15],o_carrier_fast[15]
                      ,o_carrier_fast[15],o_carrier_fast[15],o_carrier_fast[15],o_carrier_fast[15]
                ,o_carrier_fast[15],o_carrier_fast[15],o_carrier_fast[15],o_carrier_fast[15]
                ,o_carrier_fast[15],o_carrier_fast[15],o_carrier_fast[15],o_carrier_fast[15]  
};
       r3 <=  r1[31:1] + r2[31:1];
          end   
     end
end
 
assign o_carrier = r3[31:15];
 
endmodule
在FPGA中,首先使用MODELSIM進行仿真,得到的仿真結果如下所示: 





 

 
   上一篇: MATLAB代做-217維特比譯碼的FPGA實現    下一篇: 沒有下一篇了    
   相關閱讀
· 基于FPGA的高精度DDS設計和測試 2022/9/30
· MATLAB代做-217維特比譯碼的FPGA實現 2021/2/11
· MATLAB代做-高精度物體輪廓提取算法 2020/2/16
· 正式承接人工智能相關項目課題以及各類研究型科研任務 2019/12/20
· MATLAB代做-基于深度卷積神經網絡的圖像去噪方法 2019/10/30
· MATLAB代做-高密度人員檢測算法的仿真 2019/8/29
· matlab專業代做★深度學習-人工智能在自動駕駛中的應 2019/8/17
· MATLAB代做|FPGA代做-FPGA擊敗GPU和GP 2019/8/3
· FPGA代做|MATLAB代做★【轉】OPEN AI L 2019/7/28
· matlab專業代做★【轉】仿生螞蟻機器人面世,分工協力 2019/7/13
Copyright 2017-2025 © 嘉興麥特萊博軟件開發工作室
  • 網站備案號:浙ICP備18008591號-1