王朝百科
分享
 
 
 

RFAD

王朝百科·作者佚名  2011-06-10  
宽屏版  字体: |||超大  

RFAD(射频A/D控制信息定时发送器)。1. 引言RFAD是射频控制信息A/D转换模块中的一个重要组成部分,其用于产生需要定时的射频控制信号,如:AD_ON,DA_ON,通过选择两个SPI接口RF_SPI和AD_SPI把控制信号定时地发送到射频控制模块中的其他相应模块中,如:FIR模块[1]。该模块在整个射频控制中有着非常重要的作用,本文将详细阐述其基本功能和设计原理。如图1-1介绍了RFAD的功能结构:

图1-1 RFAD 功能结构图2. 定时发送射频控制信息RFAD的主要功能是定时传输射频控制信息,在此模块中设计了两个FIFO: DATA FIFO用于存储射频控制信息, TIME FIFO用于存储时间信息。模块中将设定当系统帧计数器与TIME FIFO中对应的时间相同时,与这个时间对应的射频控制信息就应被发送出去[2] ,设计流程如下图所示:

图2-1定时发送射频控制信息设计流程图

l 设计存储射频控制信息模块

该模块的设计中将定义两个FIFO(first in first out),分别用于存储时间信息和射频控制信息。如例2-1将说明如何定义data_fifo(用于存储射频控制信息)以及如何对fifo进行读/写操作:

eg2-1:define 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,深度为32的FIFO

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_en比fifo_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_en与pllon信号同时拉高时,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

endmodule3. 产生数据采样分频时钟RFAD发送数据的频率需与外接模块如:FIR保持一致,RFAD采样发送数据的时钟是系统时钟的分频时钟,其关系如图3-1所示。因此产生分频时钟和采样使能信号是该模块设计的关键,如图3-2所示:

图3-1 设置分频系数=4时sclk和clk之间的关系

图3-2 在spi_en =0,CKE=1,CKP=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_drv-1)

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

endmodule4. burst发送模式设计为了使发送功率更加稳定,此模块在发送APC(自动功率控制)时提供了burst模式,即把一次性需要发送的功率分为几步发送出去,并规定了每步发送的功率=step_value*para,这样就避免在发送功率控制信息时产生突激[4]。仿真结果如图4-1所示:

图4-1 APC在burst方式下发送数据仿真结果时序图

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

endmodule5. 总结RFAD作为射频控制模块中的重要部分,能够定时发送射频控制信息,并能根据实际情况调整发送模式。设计该模块最重要的三个方面即:定时发送射频控制信息,产生采样发送数据时钟分频和设计burst发送模式。本文对以上三大功能的设计方案做了基本介绍,希望对RFAD设计人员有所帮助。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
如何用java替换看不见的字符比如零宽空格&#8203;十六进制U+200B
 干货   2023-09-10
网页字号不能单数吗,网页字体大小为什么一般都是偶数
 干货   2023-09-06
java.lang.ArrayIndexOutOfBoundsException: 4096
 干货   2023-09-06
Noto Sans CJK SC字体下载地址
 干货   2023-08-30
window.navigator和navigator的区别是什么?
 干货   2023-08-23
js获取referer、useragent、浏览器语言
 干货   2023-08-23
oscache遇到404时会不会缓存?
 干货   2023-08-23
linux下用rm -rf *删除大量文件太慢怎么解决?
 干货   2023-08-08
刀郎新歌破世界纪录!
 娱乐   2023-08-01
js实现放大缩小页面
 干货   2023-07-31
生成式人工智能服务管理暂行办法
 百态   2023-07-31
英语学习:过去完成时The Past Perfect Tense举例说明
 干货   2023-07-31
Mysql常用sql命令语句整理
 干货   2023-07-30
科学家复活了46000年前的虫子
 探索   2023-07-29
英语学习:过去进行时The Past Continuous Tense举例说明
 干货   2023-07-28
meta name="applicable-device"告知页面适合哪种终端设备:PC端、移动端还是自适应
 干货   2023-07-28
只用css如何实现打字机特效?
 百态   2023-07-15
css怎么实现上下滚动
 干货   2023-06-28
canvas怎么画一个三角形?
 干货   2023-06-28
canvas怎么画一个椭圆形?
 干货   2023-06-28
canvas怎么画一个圆形?
 干货   2023-06-28
canvas怎么画一个正方形?
 干货   2023-06-28
中国河南省郑州市金水区蜘蛛爬虫ip大全
 干货   2023-06-22
javascript简易动态时间代码
 干货   2023-06-20
感谢员工的付出和激励的话怎么说?
 干货   2023-06-18
 
>>返回首页<<
 
 
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有