射频定时发送器基本功能模块的设计
时间:07-24
来源:互联网
点击:
射频定时发送器是射频控制模块中的一个重要组成部分,用于产生需要定时发送的射频控制信号:AD_ON(模数转换信号)、DA_ON(数模转换信号)、APC(自动功率控制信号)、AGC(自动增益控制信号)和AFC(自动频率控制信号),再通过选择两个SPI接口RF_SPI和AD_SPI把控制信号定时地传送到射频发送模块。射频定时发送器需要完成的四种基本功能分别是:定时发送、竞争发送、数据采样时钟分频,以及APC_burst模式,如图1所示,本文将详细阐述这些基本功能模块的设计原理。
图1 射频定时发送器功能结构图
定时发送模块
射频定时发送器的主要功能就是定时传输射频控制信息,为了满足此功能,需要在模块中设计两个FIFO:DATA FIFO用于存储射频控制信息;TIME FIFO用于存储时间信息。模块中设定当系统帧计数器与TIME FIFO中存储的某一时间相同时,就把与这个时间对应的射频控制信息发送出去。因此还需设计一个模块,判断当帧计数器的值等于FIFO_time(FIFO中存储的时间)时,产生使能信号(read_en, fifo_read_en, time_int)发送信息,工作流程如图2所示。
图2 定时发送射频控制信息设计流程图
FIFO
该模块中将设计两个FIFO,它们将需要发送的射频控制信息及其发送时间缓存起来,设计用FIFO进行存储的目的是将这两种信息一一对应起来,避免发送的时候出错。
define data_fifo
module data_fifo (rst_,clk,we_i,rd_i, addwr_i,addrd_i,fifo_data_i,fifo_data_o);
1) 首先定义该模块的信号线:输入信号为rst_ (复位信号)、clk(标准时钟)、 we_i(写信号)、 rd_i(读信号)、addwr_i[4:0](写FIFO地址)、 addrd_i[4:0](读FIFO地址)和fifo_data_i[11:0](写入FIFO的值);输出信号为fifo_data_o[11:0] (FIFO输出值)。
2) 再定义一个宽度为12位、深度为32的FIFO:reg [11:0] register_fifo[0:31];
3) 设计写FIFO的情况:以clk为参考时钟,首先判断复位信号,当复位信号为低时,对FIFO进行复位:if(!rst_) register_fifo[0......31]
图3 FIFO读/写操作仿真图
竞争发送模块
芯片在空闲情况下,可能会有空闲状态的射频控制信息(idle_data)需要发送,当芯片唤醒后则应优先发送该信息。但当芯片唤醒后产生的射频控制信息fifo_data与idle_data在同一时刻发送时,就会出现竞争发送的情况。因此,在设计该模块时限定当idle_en(空闲使能信号)与pllon(pll时钟使能信号)同时拉高时,发送idle_data中的相应比特来取代fifo_data中的相应比特,如图4所示。
图4 射频定时发送器在空闲情况下的工作流程
transfer idle_data and fifo_data:
module idle_time(fifo_ data,pllon,idle_en,idle_data,rfctrl_o);
1) 定义该模块的信号线:输入信号为fifo_data[11:0](FIFO中存储的射频控制信息)、idle_data (空闲时需发送的射频控制信息)、idle_en、pllon;输出信号为rfctrl_o(最后输出的射频控制信息)。
2) 下面对需发送的控制信息进行逻辑组合。其敏感电平是pllon、fifo_data、idle_data和idle_en,即当上述电平中任意一个发生变化时,就执行下面的语句:
always @(pllon or fifo_data or idle_data or idle_en)//组合逻辑电路
begin
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
竞争发送的仿真结果如图5所示:在pllon没有被拉高的情况下,rfctrl_o发送的就是fifo_data的值,只有当pllon被拉高的条件下才会有竞争发送的情况。
数据采样时钟分频模块
为了数据发送同步,射频定时发送器输出数据的频率应与外接模块保持一致,射频定时发送器采样发送数据的时钟是系统时钟的分频时钟。因此,产生分频时钟和采样使能信号是该模块设计的关键所在,并要求每次对发送数据的采样都应发生在分频时钟的上升沿。
generator ad_clk and send ad_sdatao:
module drv_clk(rst_,clk,frq_ drv,ad_sclk,spi_en,rfctrl_data,ad_datao);
1) 定义该模块的信号线:输入信号为rst_、 clk、 frq_drv(分频系数)、rfctrl_data(射频控制信息);输出信号为ad_sclk(分频时钟)、ad_sdatao(发送数据)。
2) 以clk为基准时钟,定义一个reg[3:0] count计数器对clk的上升沿进行计数。当count=frq_drv-1时,ad_sclk进行反转并对count清零,这样就产生了分频时钟。
3) 该模块设计要求每次对发送数据的采样都应发生在分频时钟的上升沿。但为了避免产生异步,对数据进行采样时不能以产生的ad_sclk为标准,应仍以clk为基准时钟。即在每8个clk时钟的上升沿发送1位的rfctrl_data,并由高位到低位发送,这样采样时就不会出现毛刺,能做到较好的同步。
always @(posedge clk or negedge rst_)
begin
count
图5 竞争发送仿真图
图1 射频定时发送器功能结构图
定时发送模块
射频定时发送器的主要功能就是定时传输射频控制信息,为了满足此功能,需要在模块中设计两个FIFO:DATA FIFO用于存储射频控制信息;TIME FIFO用于存储时间信息。模块中设定当系统帧计数器与TIME FIFO中存储的某一时间相同时,就把与这个时间对应的射频控制信息发送出去。因此还需设计一个模块,判断当帧计数器的值等于FIFO_time(FIFO中存储的时间)时,产生使能信号(read_en, fifo_read_en, time_int)发送信息,工作流程如图2所示。
图2 定时发送射频控制信息设计流程图
FIFO
该模块中将设计两个FIFO,它们将需要发送的射频控制信息及其发送时间缓存起来,设计用FIFO进行存储的目的是将这两种信息一一对应起来,避免发送的时候出错。
define data_fifo
module data_fifo (rst_,clk,we_i,rd_i, addwr_i,addrd_i,fifo_data_i,fifo_data_o);
1) 首先定义该模块的信号线:输入信号为rst_ (复位信号)、clk(标准时钟)、 we_i(写信号)、 rd_i(读信号)、addwr_i[4:0](写FIFO地址)、 addrd_i[4:0](读FIFO地址)和fifo_data_i[11:0](写入FIFO的值);输出信号为fifo_data_o[11:0] (FIFO输出值)。
2) 再定义一个宽度为12位、深度为32的FIFO:reg [11:0] register_fifo[0:31];
3) 设计写FIFO的情况:以clk为参考时钟,首先判断复位信号,当复位信号为低时,对FIFO进行复位:if(!rst_) register_fifo[0......31]
图3 FIFO读/写操作仿真图
竞争发送模块
芯片在空闲情况下,可能会有空闲状态的射频控制信息(idle_data)需要发送,当芯片唤醒后则应优先发送该信息。但当芯片唤醒后产生的射频控制信息fifo_data与idle_data在同一时刻发送时,就会出现竞争发送的情况。因此,在设计该模块时限定当idle_en(空闲使能信号)与pllon(pll时钟使能信号)同时拉高时,发送idle_data中的相应比特来取代fifo_data中的相应比特,如图4所示。
图4 射频定时发送器在空闲情况下的工作流程
transfer idle_data and fifo_data:
module idle_time(fifo_ data,pllon,idle_en,idle_data,rfctrl_o);
1) 定义该模块的信号线:输入信号为fifo_data[11:0](FIFO中存储的射频控制信息)、idle_data (空闲时需发送的射频控制信息)、idle_en、pllon;输出信号为rfctrl_o(最后输出的射频控制信息)。
2) 下面对需发送的控制信息进行逻辑组合。其敏感电平是pllon、fifo_data、idle_data和idle_en,即当上述电平中任意一个发生变化时,就执行下面的语句:
always @(pllon or fifo_data or idle_data or idle_en)//组合逻辑电路
begin
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
竞争发送的仿真结果如图5所示:在pllon没有被拉高的情况下,rfctrl_o发送的就是fifo_data的值,只有当pllon被拉高的条件下才会有竞争发送的情况。
数据采样时钟分频模块
为了数据发送同步,射频定时发送器输出数据的频率应与外接模块保持一致,射频定时发送器采样发送数据的时钟是系统时钟的分频时钟。因此,产生分频时钟和采样使能信号是该模块设计的关键所在,并要求每次对发送数据的采样都应发生在分频时钟的上升沿。
generator ad_clk and send ad_sdatao:
module drv_clk(rst_,clk,frq_ drv,ad_sclk,spi_en,rfctrl_data,ad_datao);
1) 定义该模块的信号线:输入信号为rst_、 clk、 frq_drv(分频系数)、rfctrl_data(射频控制信息);输出信号为ad_sclk(分频时钟)、ad_sdatao(发送数据)。
2) 以clk为基准时钟,定义一个reg[3:0] count计数器对clk的上升沿进行计数。当count=frq_drv-1时,ad_sclk进行反转并对count清零,这样就产生了分频时钟。
3) 该模块设计要求每次对发送数据的采样都应发生在分频时钟的上升沿。但为了避免产生异步,对数据进行采样时不能以产生的ad_sclk为标准,应仍以clk为基准时钟。即在每8个clk时钟的上升沿发送1位的rfctrl_data,并由高位到低位发送,这样采样时就不会出现毛刺,能做到较好的同步。
always @(posedge clk or negedge rst_)
begin
count
图5 竞争发送仿真图
- WCDMA与TD-SCDMA终端射频测试差异性分析(01-04)
- 可以应对移动电话的设计挑战的GPS导航系统(01-11)
- 无线射频技术应用大有作为(02-19)
- 直放站的指标调试及整体测试(03-02)
- 无线电发射设备杂散发射的测试方法探讨(03-12)
- 基于CC1020的无线通信模块设计(03-24)