中國電子測試雜志官網正式上線

RFAD模塊的功能與設計概述

應用基礎 admin 2703℃ 0評論

1.       引言


RFAD是射頻控制信息A/D轉換模塊中的一個重要組成部分,其用于產生需要定時的射頻控制信號,如:AD_ONDA_ON,通過選擇兩個SPI接口RF_SPIAD_SPI把控制信號定時地發送到射頻控制模塊中的其他相應模塊中,如:FIR模塊[1]。該模塊在整個射頻控制中有著非常重要的作用,本文將詳細闡述其基本功能和設計原理。如圖1-1介紹了RFAD的功能結構:



1-1 RFAD 功能結構圖


2.       定時發送射頻控制信息


   RFAD的主要功能是定時傳輸射頻控制信息,在此模塊中設計了兩個FIFO DATA FIFO用于存儲射頻控制信息, TIME FIFO用于存儲時間信息。模塊中將設定當系統幀計數器與TIME FIFO中對應的時間相同時,與這個時間對應的射頻控制信息就應被發送出去[2] ,設計流程如下圖所示:



2-1定時發送射頻控制信息設計流程圖


l         設計存儲射頻控制信息模塊


該模塊的設計中將定義兩個FIFOfirst in first out),分別用于存儲時間信息和射頻控制信息。如例2-1將說明如何定義data_fifo(用于存儲射頻控制信息)以及如何對fifo進行讀/寫操作:


eg2-1define data_fifo


module  data_fifo (rst_,clk,wr_i,rd_i,wr_addr,rd_addr,fifo_data_i,fifo_data_o);


input         rst_ ,clk, wr_i,rd_i;                       


input         [4:0]         wr_addr, [4:0]     rd_addr;    


input        [11:0]      fifo_data_i;


output [11:0]     fifo_data_o;       


reg                 [11:0]      fifo_data_o;


// 定義12bit,深度為32FIFO


reg     [11:0]      register_fifo[0:31]; 


//下面設計寫fifo的情況


always @(posedge clk or negedge rst_)


begin


if(!rst_)  //復位信號到來時,復位fifo中的每一位。


begin


register_fifo[0]<=12’b0;   


end


else if(wr_i==1’b1)//寫信號使能時,根據寫地址,把射頻控制信息寫入fifo


register_fifo[wr_addr]<=fifo_data_i;


end


//下面設計讀fifo的情況


always @(posedge clk or negedge rst_)


begin


if (!rst_)


fifo_data_o<=12’b0;


else if (rd_i==1’b1)


//讀信號使能時,根據讀地址,把射頻控制信息從fifo中取出來


fifo_data_o<=register_fifo[addrd_i]; 


end


endmodule


l         定時發送模塊設計


在上例中的fifo/寫使能信號都是由外部模塊驅動的,因此需要設計一個模塊用于確定何時使能讀/寫信號,即當time_fifo中存儲的時間信息與幀計數器相同時,需使能讀/寫使能信號輸出data_fifo存儲的射頻控制信息。如例2-2所示:


    eg2-2:define transfer time


module time_count(rst_,clk,fifo_time,framc,read_en,fifo_read_en);


input rst_, clk;


input [15:0] fifo_time,[15:0] framc;


output read_en;//該信號使能,讀地址累加


output fifo_read_en;//該信號使能,data_fifo輸出射頻控制信號


reg  time_int;


reg[1:0]  time_int_delay;


assign fifo_read_en = time_int |(time_int_delay[0]);


assgin read_en      = time_int_delay[0] |(time_int_delay[1]);


//read_enfifo_read_en延遲一個clk使能


always @(posedge clk or negedge rst_)


begin


if(!rst_)


time_int <= 1’b0;


else if(fifo_time == framc)// time_fifo中存儲的時間信息等于framc(幀計數器)


time_int <= 1’b1;        //time_int被使能


else


time_int <= 1’b0;


end


always @(posedge clk or negedge rst_)


begin


if(!rst_)


time_int_delay[1:0] <= 2’b0;


else


time_int_delay[0] <= time_int;


time_int_delay[1] <= time_int_delay[0];


end


endmodule


l         競爭發送模塊設計


chip idle情況下,將有RF控制信息(此時為idle_data)需要發送,當chip喚醒后則應優先發送idle_data。若idle_data與控制信息在同一時刻發送,則存在競爭發送的情況。因此該模塊限定了當idle_enpllon信號同時拉高時,rfctrl要發送idle_data中的相應比特,從而取代fifo_data中相應比特的發送。如圖2-2所示:


2-2 RFAD idle情況下工作流程圖


Verilog設計舉例如例2-3所示:


eg2-3:transfer idle_data and fifo_data:


module idle_time(fifo_data,pllon,idle_en,idle_data,rfctrl_o);


input [5:0] fifo_data,[5:0] idle_data,[5:0]idle_en;


input  pllon;


output [5:0] rfctrl_o;


reg[5:0] rfctrl_o;


always @(pllon or fifo_data or idle_data or idle_en)//組合邏輯電路


begin


  if(!pllon)


    rfctrl_o[5:0] = fifo_data[5:0];


  else


//即當pllon拉高時且idle_en的相應bit位為1時,輸出idle_data的相應bit,否則輸出fifo_data的相應bit


         rfctrl_o[0] = (idle_en[0])?idle_data[0]:fifo_data[0];


         rfctrl_o[1] = (idle_en[1])?idle_data[1]:fifo_data[1];


         rfctrl_o[2] = (idle_en[2])?idle_data[2]:fifo_data[2];


         rfctrl_o[3] = (idle_en[3])?idle_data[3]:fifo_data[3];


         rfctrl_o[4] = (idle_en[4])?idle_data[4]:fifo_data[4];


     end


end


endmodule


3.       產生數據采樣分頻時鐘


RFAD發送數據的頻率需與外接模塊如:FIR保持一致,RFAD采樣發送數據的時鐘是系統時鐘的分頻時鐘,其關系如圖3-1所示。因此產生分頻時鐘和采樣使能信號是該模塊設計的關鍵,如圖3-2所示:



3-1   設置分頻系數=4sclkclk之間的關系


3-2   spi_en =0,CKE=1CKP=0配置下發送數據采樣波形


產生分頻時鐘及發送數據時序設計思路如例3-1所示,下圖為仿真結果圖:



3-3 產生Sclk及發送Rf_data仿真結果圖


eg3-1: generator drv_clk and send rfctrl_data:


module drv_clk(rst_,clk,frq_drv,sclk,spi_en,rfctrl_data,Rf_data_o);


input clk,rst_;           //系統時鐘


input[3:0] frq_drv;      //分頻系數


input[11:0] rfctrl_data; //需要發送的射頻信息


output     Rf_data_o;  //發送數據信號線


output sclk,spi_en;


reg[3:0] count;


//產生數據采樣分頻時鐘


always @(posedge clk or negedge rst_)


begin


   if(!rst_)


     count[3:0] <= 4’b0;


     sclk <= 1’b0;


   else


   begin


     count <= count+1;


     if(count == frq_drv – 1)  //count計數到分頻系數-1時,sclk變相


    begin


          sclk <= ~sclk;


     end


   end


end


//發送射頻控制信息


always @(posedge clk or negedge rst_)


begin


   if(!rst_)


    count[3:0] <= 4’b0;


    Rf_data_o <= 1’b0;


   else


   begin


    count <= count+1


    if(count == 2*frq_drv1


    begin


       Rf_data <= rfctrl_data[11]; //每次發送rfctrl_data的最高bit


       rfctrl_data[11:0] <= {rfctrl_data[10:0], 1’b0};//然后rfctrl_data[11:0]左移一位


    end


end


endmodule


4.       burst發送模式設計


為了使發送功率更加穩定,此模塊在發送APC(自動功率控制)時提供了burst模式,即把一次性需要發送的功率分為幾步發送出去,并規定了每步發送的功率=step_value*para,這樣就避免在發送功率控制信息時產生突激[4]。仿真結果如圖4-1所示:



4-1 APCburst方式下發送數據仿真結果時序圖


burst的設計思路如例4-1所示:


eg4-1 burst step design:


module burst(rst_,clk,apc_flag,step0,step1,step2,para,burstout,burst_en);


input rst_,clk,flag;


input  [11:0]step0,[11:0]step1,[11:0]step2;//每步所需發送的功率值


input  [11:0]para;//每步功率的增益


otput[15:0] burstout;//最后每步發送的功率值= para * step_value


input burst_en;


wire [15:0] burstout;


reg  [11:0] step_value;


reg  [1:0]  step_count;//記錄目前發送的步數


assign burstout = step_value*para;


always @(posedge clk or negedge rst_)


begin


   if(!rst_)


   step_value[11:0] <= 12’b0;


   else


   begin


      case(step_count)


       2’b00: step_value[11:0]<=  step0[11:0];


       2’b01: step_value[11:0]<=  step1[11:0];


       2’b10: step_value[11:0]<=  step2[11:0];


     ndcase


   end


end


//計算step_count


always @(burst_en)


begin


   step_count <= step_count+1;


end


endmodule


5.       總結


RFAD作為射頻控制模塊中的重要部分,能夠定時發送射頻控制信息,并能根據實際情況調整發送模式。設計該模塊最重要的三個方面即:定時發送射頻控制信息,產生采樣發送數據時鐘分頻和設計burst發送模式。本文對以上三大功能的設計方案做了基本介紹,希望對RFAD設計人員有所幫助。

轉載請注明:電子測試 » RFAD模塊的功能與設計概述

喜歡 (3)or分享 (0)
發表我的評論
取消評論
表情

Hi,您需要填寫昵稱和郵箱!

  • 昵稱 (必填)
  • 郵箱 (必填)
  • 網址
香蕉影视下载app污-香蕉永久免费视频-香蕉污软件app下载