半导体是一种常规情况下介于导电与不导电之间的材料.它能在一定条件下转换为导体或者说绝缘体,半导体不仅引起了电子工业的革命,而且彻底的改变了我们人类的生产、生活方式。

上一篇 | 下一篇

射频定时发送器基本功能模块的设计

发布: 2008-7-10 09:20 | 作者: admin | 来源: | 查看: 2次

  引言

  射频定时发送器是射频控制模块中的一个重要组成部分,用于产生需要定时发送的射频控制信号:AD_ON(模数转换信号)、DA_ON(数模转换信号)、APC(自动功率控制信号)、AGC(自动增益控制信号)和AFC(自动频率控制信号),再通过选择两个SPI接口RF_SPI和AD_SPI把控制信号定时地传送到射频发送模块。射频定时发送器需要完成的四种基本功能分别是:定时发送、竞争发送、数据采样时钟分频,以及APC_burst模式,本文将详细阐述这些基本功能模块的设计原理。

  定时发送模块

  射频定时发送器的主要功能就是定时传输射频控制信息,为了满足此功能,需要在模块中设计两个FIFO:DATA FIFO用于存储射频控制信息;T1ME FIFO用于存储时间信息。模块中设定当系统帧计数器与TIME FIFO中存储的某一时间相同时,就把与这个时间对应的射频控制信息发送出去。因此还需设计一个模块,判断当帧计数器的值等于FIFO_time(FIFO中存储的时间)时,产生使能信号(read_en,fifo_read_en,time_int)发送信息。

  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[O];

  2) 定义fifo_read_en信号在time_int被拉高后延迟一个clk拉高,再延迟一个clk拉低,即assignfifo_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′bl;

  FIFO读写操作的仿真结果如图3所示,对FIFO的读/写操作分别由we_i和rd_i(fifo_read_en)控制,而计算读FIFO的地址由read_en控制,这样就能保证在每次取FIFO值之前其所在地址已经被计算完成。

字号: | 推荐给好友

 

评分:0

我来说两句

seccode