快速在片激光告警接纳体系中,A/D信号采样频率与FPGA中数据处理体系的作业频率往往不一致,因而在这种状况下,为防止数据丢掉,需求规划一种数据缓存。本文选用Verilog HDL言语规划了一种异步FIFO(时钟周期和相位彼此独立),它不只供给数据缓冲,而且能够完结不一起钟域间的转化等功用。
1 激光告警接纳体系的数据采样和处理
关于高速在片激光告警接纳体系,具有较高的采样速率、低功耗、体积小以及相应的高抗搅扰功用是进步其成功获取敌方激光兵器有用数据的要害,而选用线性CMOS芯片和进步体系的集成度是完结小体积、低功耗的最经济、最有用的途经。本体系选用Xilinx公司Spartan-Ⅲ系列芯片XC3S1500,规划完结异步FIFO缓存,包含收集操控电路、FFT数据处理、时钟操控信号、接口电路等。激光告警接纳体系的数据采样和处理框图如图1所示。
2 异步FIFO规划
异步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中的两级触发器,能够将呈现亚稳态几率降低到一个很小的程度。
不过,运用这种办法会添加一级延时。为了充分使用FPGA器材资源,进步体系运转速度,一起有用地防止亚安稳状况,结合体系实践使用,本规划选用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占用FPGA(XC3S1500)芯片内部资源的状况。由表1可知,FIFO模块完结后,还有很多的资源能够使用,因而剩下资源可用于完结FFT数据处理、收集操控、显现等功用,从而在一块芯片上完结多种功用,可有用削减激光告警接纳机的体积,朝小型化开展。
4 体系波形仿真
读写时钟异步使得FIFO存储器的输入和输出数据速率不持平,在读操作时钟频率高于写操作时钟频率时,或许呈现“读空”状况;当写操作时钟频率高于读操作时钟频率时,或许呈现“写满”状况。在高速在片激光告警接纳体系中,数据读取时钟比写时钟要高,本文选取第一种状况进行仿真。无论是“读空”仍是“写空”,关于异步FIFO来说,读取的数据必定等于写入的数据。使用Modelsim SE 6.0仿真软件进行仿真,其波形如图7所示。成果标明,该规划是正确的。
本文提出的FIFO规划办法处理了不一起钟域间的数据缓冲和时钟转化功用问题,防止了数据的丢掉;经过运用Gray码计数器一次只改换一位的特色,有用地同步了异步信号,防止了亚稳态的发生;与二进制计数器比较,还能削减线路切换,从而削减功率的耗费[3];选用Verilog HDL言语描绘规划,可移植性好、生成的硬件电路面积小、速度快、体系可靠性高。现在,该FIFO规划现已在所研发的激光告警接纳体系中得到使用。