射频定时发送器基本功能模块的设计
发布时间:2008/5/28 0:00:00 访问次数:465
摘要:本文介绍了射频控制模块中射频定时发送器的设计方案。射频定时发送器需要完成的四种基本功能包括定时发送、竞争发送、数据采样分频时钟和apc_burst发送模式。文中详细介绍了这四种功能的verilog实现方法。
关键词:射频定时发送器;定时发送;竞争发送;分频时钟;burst模式
引言
射频定时发送器是射频控制模块中的一个重要组成部分,用于产生需要定时发送的射频控制信号: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] <= 12’b0;当rst_不为低且we_i为高时,则对fifo进行写操作:if(we_i == 1’b1) register_fifo[addwr_i] <= fifo_data_i;
4) 设计读fifo的情况:同样以clk为参考时钟,先判断复位信号,当复位信号为低时,对fifo_data_o进行复位:if(!rst_) fifo_data_o<= 12’b0;当rst_不为低且rd_i为高时,则对fifo进行读操作:if(rd_i == 1’b1) fifo_data_o <= regsiter_fifo[addrd_i];
使能信号及中断产生模块
fifo读/写使能信号是由外部模块驱动的,因此需要设计一个模块用于产生控制fifo的读/写信号,并且该模块还需产生时间中断信号用于使能发送器。
define transfer time
module time_count(rst_,clk,fifo _time,framc,read_en,fifo_read _en,time_int);
1) 首先定义该模块的信号线:输入信号为rst_、clk、 fifo_time[15:0](fifo中存储的时间信息)、framc(帧计数器值);输出信号为read_en(fifo地址累加使能信号)、 fifo_read_en(读fifo值使能信号)、time_int(时间中断信号);再定义一个reg [1:0] time_int_delay,用于存储time_int在上一个时钟的信息,如time_int_delay[0] <= time_int; time_int_delay[1] <= time_int_delay[0];
2) 定义fifo_read_en信号在time_int被拉高后延迟一个clk拉高,再延迟一个clk拉低,即assign fifo_read_en = time_int |(time_int_delay[0]);定义read_en信号在time_int被拉高后延迟两个clk后拉高,再延迟一个clk拉低,即 assgin read_en = time_int_delay[0] |(time_int_delay[1])。这样做的目的是控制在当前clk的上升沿到来时取出fifo中当前地址的值,然后在下一个clk的上升沿立即计算出下一次取值的地址,这样就能保证在每一次取值之前其所在的位置已经计算完成,避免了取值出错的情况。
3) 最后定义如何产生time_int信号。time_int产生的条件是:当fifo_time中存储的时间信息等于framc时,time_int被拉高,即被使能,if(fifo_time== framc ) time_int <= 1'b1;
fifo读写操作的仿真结果如图3所示,对fifo的读/写操作分别由we_i和rd_i(fifo_read_en)控制,而计算读fifo的地址由read_en控制,这样就能保证在每次取fifo值之前
摘要:本文介绍了射频控制模块中射频定时发送器的设计方案。射频定时发送器需要完成的四种基本功能包括定时发送、竞争发送、数据采样分频时钟和apc_burst发送模式。文中详细介绍了这四种功能的verilog实现方法。
关键词:射频定时发送器;定时发送;竞争发送;分频时钟;burst模式
引言
射频定时发送器是射频控制模块中的一个重要组成部分,用于产生需要定时发送的射频控制信号: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] <= 12’b0;当rst_不为低且we_i为高时,则对fifo进行写操作:if(we_i == 1’b1) register_fifo[addwr_i] <= fifo_data_i;
4) 设计读fifo的情况:同样以clk为参考时钟,先判断复位信号,当复位信号为低时,对fifo_data_o进行复位:if(!rst_) fifo_data_o<= 12’b0;当rst_不为低且rd_i为高时,则对fifo进行读操作:if(rd_i == 1’b1) fifo_data_o <= regsiter_fifo[addrd_i];
使能信号及中断产生模块
fifo读/写使能信号是由外部模块驱动的,因此需要设计一个模块用于产生控制fifo的读/写信号,并且该模块还需产生时间中断信号用于使能发送器。
define transfer time
module time_count(rst_,clk,fifo _time,framc,read_en,fifo_read _en,time_int);
1) 首先定义该模块的信号线:输入信号为rst_、clk、 fifo_time[15:0](fifo中存储的时间信息)、framc(帧计数器值);输出信号为read_en(fifo地址累加使能信号)、 fifo_read_en(读fifo值使能信号)、time_int(时间中断信号);再定义一个reg [1:0] time_int_delay,用于存储time_int在上一个时钟的信息,如time_int_delay[0] <= time_int; time_int_delay[1] <= time_int_delay[0];
2) 定义fifo_read_en信号在time_int被拉高后延迟一个clk拉高,再延迟一个clk拉低,即assign fifo_read_en = time_int |(time_int_delay[0]);定义read_en信号在time_int被拉高后延迟两个clk后拉高,再延迟一个clk拉低,即 assgin read_en = time_int_delay[0] |(time_int_delay[1])。这样做的目的是控制在当前clk的上升沿到来时取出fifo中当前地址的值,然后在下一个clk的上升沿立即计算出下一次取值的地址,这样就能保证在每一次取值之前其所在的位置已经计算完成,避免了取值出错的情况。
3) 最后定义如何产生time_int信号。time_int产生的条件是:当fifo_time中存储的时间信息等于framc时,time_int被拉高,即被使能,if(fifo_time== framc ) time_int <= 1'b1;
fifo读写操作的仿真结果如图3所示,对fifo的读/写操作分别由we_i和rd_i(fifo_read_en)控制,而计算读fifo的地址由read_en控制,这样就能保证在每次取fifo值之前