新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 激光告警系统的异步FIFO设计

激光告警系统的异步FIFO设计

作者:时间:2017-06-05来源:网络收藏

快速在片激光告警接收系统中,A/D信号采样频率与中数据处理系统的工作频率往往不一致,因此在这种情况下,为避免数据丢失,需要设计一种数据缓存。本文采用Verilog HDL语言设计了一种(时钟周期和相位相互独立),它不仅提供数据缓冲,而且能够实现不同时钟域间的转换等功能。

1 激光告警接收系统的数据采样和处理

对于高速在片激光告警接收系统,具有较高的采样速率、低功耗、体积小以及相应的高抗干扰性能是提高其成功获取敌方激光武器有效数据的关键,而采用线性CMOS芯片和提高系统的集成度是实现小体积、低功耗的最经济、最有效的途经。本系统采用Xilinx公司Spartan-Ⅲ系列芯片XC3S1500,设计完成缓存,包括采集控制电路、FFT数据处理、时钟控制信号、接口电路等。激光告警接收系统的数据采样和处理框图如图1所示。


2 设计

本文引用地址:http://www.eepw.com.cn/article/201706/349249.htm

异步FIFO由读、写地址逻辑,存储单元和空满标志逻辑四部分组成,如图2所示。由图2可以看出,整个系统分为两个独立的时钟域(读时钟域和写时钟域),FIFO的存储介质为一块双口RAM,可以同时进行读写操作。在写时钟域部分,由写地址逻辑生成写控制信号和写地址;在读时钟域部分,由读地址逻辑生成读控制信号和读地址。空满标志信号,由写指针和读指针通过异步比较器相互比较生成。对于异步FIFO设计主要有以下两个难点:一是如何同步异步信号,避免触发器亚稳态的产生;二是如何根据FIFO的指针信号正确地判断FIFO的空满状态[1]。

2.1 亚稳态问题的解决

在数字电路中,触发器需要满足setup/hold时间要求。当一个信号被寄存器锁存时,如果信号和时钟之间不能满足这个要求,data2端的值就是不确定的,这个过程称为亚稳态。如图3所示为常用异步时钟和亚稳态[2]。

在异步FIFO中,由于时钟之间周期和相位完全独立,因此数据的丢失概率不为零。尽管亚稳态无法彻底消除,但是可以通过下面方法将其降低到一个可以接受的范围之内。

(1)对读地址/写地址采用Gray码设计。这是因为采用二进制计数时所有位都可能变化,不利于跨时钟域的同步。例如,3位二进制数从3变到4(即011~100)时,所有位都发生了变化,而Gray码的特点是每次只有一个数据位变化。由于同步多个异步输入信号出现亚稳态的概率远远大于同步一个异步信号的概率,因此,写地址指针和读地址指针均采用Gray码计数器,可以保证一个时钟域的指针尽可能安全地被转换到另一个时钟域,有效避免了亚稳态。

(2)采用触发器来同步异步输入信号,如图4中的两级触发器,可以将出现亚稳态几率降低到一个很小的程度。

不过,使用这种方法会增加一级延时。为了充分利用器件资源,提高系统运行速度,同时有效地避免亚稳定状态,结合系统实际应用,本设计采用Gray码设计读写地址。

2.2 空满状态的判断

在异步FIFO设计中,正确地产生“空”/“满”标志是最困难的部分,主要有两个问题:(1)异步时钟域问题,由上分析可知,可采用Gray码计数器解决;(2)因为FIFO“空”/“满”都表明读/写指针相等,因此必须准确区分是读“空”还是写“满”。“空”、“满”状态的产生需要两个条件:①对方向的判定:即判定具体是写地址指针将要接近读地址指针,还是读地址指针将要接近写地址指针;②读写地址是否相等[4]。

解决办法:将FIFO地址空间按最高两位划分成4个象限,每当读/写地址相等时,通过对最高两位译码以产生正确的“空”/“满”标志。

若写指针比读指针滞后一个象限,则FIFO为“接近满”状态,此时置标志“direction”为1,并且锁存其值,相应等式为:

wire disrest_n=~((wptr[n]^rptr[n-1]))~((wptr[n-1])^rptr[n] ))

若写指针比读指针超前一个象限,则FIFO为“接近空”状态,此时置标志“direction”为0,并且锁定其值,相应等式为:

wire dirclr_n=~((~(wptr[n]^rptr[n-1])(wptr[n-1]^rptr[n]))∣~wrst_n

3 模块设计的Verilog实现[3-4]

3.1 存储模块RAM

为增加设计的可移植性,本设计的存储单元没有采用ISE8.1软件中的IP核,而是通过Verilog HDL语句设计一个二维数组,通过修改参数可得到相应数据宽度的输入/输出存储空间。主要语句如下:

module dp_ram(rdata,wdata,waddr,raddr,wclken,wclk);
parameter DATA_WIDTH=12;
parameter ADDR_WIDTH=10;
parameter DEPTH=1ADDR_WIDTH;
always @(posedge wclk)
if (wclken) MEM[waddr]=wdata;
assign rdata=MEM[raddr];
endmodule

3.2 读/写、空/满标志逻辑模块

读写地址设计中引用了Gray码,因Gray码是一种在相邻计数之间只有一位发生变化的编码方式,用Gray码做地址计数可以消除在电路中的模糊现象,避免亚稳态。Gray码可以借助二进制计数器实现。

3.3 异步比较器

异步比较器用于判断比较读指针、写指针的大小,输出控制信号,判断存储器中数据是“接近满”还是“接近空”。其主要程序语句如下:

module async_cmp(aempty_n,afull_n,wptr,rptr,wrst_n);
always @(posedge high or negedge dirset_n or negedge dirclr_n)
if (!dirclr_n) direction = 1'b0;
else if (!dirset_n) direction = 1'b1;
else direction = high;
endmodule

3.4 异步FIFO模块及RTL级硬件电路[5]

利用Verilog硬件设计描述语言,在Xilinx公司ISE 8.1软件开发环境中编译后得出如图5所示的异步FIFO模块。

采用综合工具Synplify Pro软件对该设计进行综合,得出RTL级硬件电路结果图如图6所示。

3.5 芯片资源利用

表1列出了设计高速在片激光告警接收系统的异步FIFO占用(XC3S1500)芯片内部资源的情况。由表1可知,FIFO模块完成后,还有大量的资源可以利用,因此剩余资源可用于实现FFT数据处理、采集控制、显示等功能,从而在一块芯片上完成多种功能,可有效减少激光告警接收机的体积,朝小型化发展。


4 系统波形仿真

读写时钟异步使得FIFO存储器的输入和输出数据速率不相等,在读操作时钟频率高于写操作时钟频率时,可能出现“读空”状态;当写操作时钟频率高于读操作时钟频率时,可能出现“写满”状态。在高速在片激光告警接收系统中,数据读取时钟比写时钟要高,本文选取第一种情况进行仿真。无论是“读空”还是“写空”,对于异步FIFO来说,读取的数据一定等于写入的数据。利用Modelsim SE 6.0仿真软件进行仿真,其波形如图7所示。结果表明,该设计是正确的。

本文提出的FIFO设计方法解决了不同时钟域间的数据缓冲和时钟转换功能问题,避免了数据的丢失;通过运用Gray码计数器一次只变换一位的特点,有效地同步了异步信号,避免了亚稳态的产生;与二进制计数器相比,还能减少线路切换,进而减少功率的消耗[3];采用Verilog HDL语言描述设计,可移植性好、生成的硬件电路面积小、速度快、系统可靠性高。目前,该FIFO设计已经在所研制的激光告警接收系统中得到应用。



评论


相关推荐

技术专区

关闭