【從零開(kāi)始走進(jìn)FPGA】教你什么才是真正的任意分頻

發(fā)布時(shí)間:2016-2-19 09:04    發(fā)布者:designapp
關(guān)鍵詞: FPGA , DDS
  一、為啥要說(shuō)任意分頻
  也許FPGA中的第一個(gè)實(shí)驗應該是分頻實(shí)驗,而不是流水燈,或者LCD1602的"Hello World"顯示,因為分頻的思想在FPGA中極為重要。當初安排流水燈,只是為了能讓大家看到效果,來(lái)激發(fā)您的興趣(MCU的學(xué)習也是如此)。
  在大部分的教科書(shū)中,都會(huì )提到如何分頻,包括奇數分頻,偶數分頻,小數分頻等。有些教科書(shū)中也會(huì )講到任意分頻(半分頻,任意分數分頻)原理,用的是相位與的電路,并不能辦到50%的占空比,也不是很靈活。
  但沒(méi)有一本教科書(shū)會(huì )講到精準,淺顯易懂的高精度任意分頻原理(至少Bingo沒(méi)看到過(guò)),同時(shí)也沒(méi)有一種設計能用同一個(gè)電路實(shí)現任意頻率的控制。Bingo對于當年做的任意波形發(fā)生器時(shí)候的相位累加器原理,從中受到啟發(fā),總結出高精度任意頻率合成的重要思維,在此貢獻給大家,希望對大家有用。
  二、任意分頻原理以及性能
  1. DDS相位累加器
  (1)DDS合成流程
  首先講訴DSS(直接頻率合成法)的原理。
  DDS是重要的頻率合成方法,在波形發(fā)生器中有極其重要的應用。DDS主要由以下幾部分組成:
  a) 相位累加器
  b) RAM數據讀取
  c) D/A轉換器
  d) 低通濾波器
  見(jiàn)如下流程圖:直接頻率合成法的流程圖,有固定模塊,輸入頻率控制器,輸出固定頻率的波形。
  


  此電路最主要模塊是相位累加器,通過(guò)相位累加器循環(huán)計數,循環(huán)讀取RAM的數據,從而得到固定頻率的波形數據。
  (2)相位累加器原理
  


  相位累加原理流程如上所示:
  輸入頻率控制字,根據算法,來(lái)實(shí)現相位的變化,分析如下所示:
  假定FPGA基準頻率為50MHz,即基準頻率:

(MHz)

  假定計數器為32位計數器,即

;

  K為頻率控制字,則相位輸出的頻率為:

(1)

  即

(2)

  根據相位累加原理,以及RAM緩存讀取數據,每一次

的循環(huán),RAM數據間隔K讀取一次。

  當K=1的時(shí)候,公式能輸出最小頻率,根據公式(1):
  


  所以,最小波形頻率步進(jìn)為0.011655Hz。
  當fo=1Hz的時(shí)候,根據公式(2)
  


  所以,每Hz的增減,K的步進(jìn)為85.90。
  當K=N/2的時(shí)候,公式能輸出最大頻率(因為每個(gè)CLK跳變一次),此時(shí),根據公式(1),得到



  


  因此,根據頻率控制字K的變化,能輸出及固定頻率的波形。
  2. 任意頻率分頻原理
  在FPGA中某些應用場(chǎng)合,對頻率要求比較高的情況下,用相位累加器原理來(lái)生成固定頻率的方法,未嘗不可。
  


  我們規定,對Cnt進(jìn)行對半50%拆分,具體如下:
  (1)當

的時(shí)候,

,即低電平;

  (2)當

的時(shí)候,fo=1,即高電平。

  同上:
  


  


  


  


  


  在FPGA中應用,Verilog代碼如下所示:
  /***************************************************
  * Module Name : clk_generator
  * Engineer : Crazy Bingo
  * Target Device : EP2C8Q208C8
  * Tool versions : Quartus II 9.1SP1
  * Create Date : 2011-6-25
  * Revision : v1.0
  * Description :
  **************************************************/
  /*************************************************
  fc = 50MHz 50*10^6
  fo = fc*K/(2^32)
  K = fo*(2^32)/fc
  = fo*(2^32)/(50*10^6)
  **************************************************/
  module clk_generator
  #
  (
  parameter FREQ_WORD = 32'd8590 //1KHz
  )
  (
  input clk, //50MHz
  input rst_n, //clock reset
  output reg clk_out
  );
  //--------------------------------------
  reg [31:0] max_value;
  always@(posedge clk or negedge rst_n)
  begin
  if(!rst_n)
  max_value <= 1'b0;
  else
  max_value <= max_value + FREQ_WORD;
  end
  //--------------------------------------
  always@(posedge clk or negedge rst_n)
  begin
  if(!rst_n)
  clk_out <= 1'b0;
  else
  begin
  if(max_value < 32'h7FFF_FFFF)
  clk_out <= 1'b0;
  else
  clk_out <= 1'b1;
  end
  end
  endmodule
  本代碼由Bingo從DDS相位累加器中,相應移植總結出來(lái)的任意頻率分頻原理,本模塊應用在多個(gè)對頻率精準度要求比較高的工程中(如UART中,要得到115200Hz的bps,用這種任意分頻的原理來(lái)得到精準的方法,一定程度上能夠提高數據傳輸的準確率)。
  在DDS中的相位累加器的任意分頻原理,在一般工程中同樣可以應用。在某些應用場(chǎng)合,還是值得考慮的。本應用純屬Bingo個(gè)人主觀(guān)應用,如有異議,請聯(lián)系本人。
                               
               
本文地址:http://selenalain.com/thread-160919-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页