对于空、满标志的置位和复位,设计中采用异步比较的方法实现。如图6所示,aempty_n和afull_n是由异步信号比较产生的。aempty_n有效(低电平)是由读指针增加引起的,所以它是发生在读时钟的上升沿;aempty_n信号释放(无效)是由写指针增加引起的,所以它发生在写时钟的上升沿。类似地,afull_n信号变为有效(低电平)是由写指针增加引起的,所以它发生在写时钟的上升沿;释放(无效)是由读指针增加引起的,所以它发生在读时钟的上升沿。空状态标志是用于阻止下一个读时钟周期继续读取数据,aempty_n的有效沿(下降沿)与读时钟同步,但是它的上升沿却与写时钟同步,所以aempty_n的上升沿要经过同步器才能传递到读时钟域中。afull_n信号与此类似。
(3)Camera Link接口匹配逻辑:Camera Link接口有基本架构(Base Configuration)、中阶架构(Medium Configuration)及完整架构(Full Configuration)3种。设计中采用基本架构,配置A口和B口作为图像数据的输入,其中A口、B口都为8 bit;控制信号使用帧有效信号FVAL和行有效信号LVAL。当FVAL和LVAL信号都为高电平时,数据在图像时钟信号的控制下依次发送。
由于对FIFO的读要严格按照控制信号的时序,依次将写入到双端口RAM中的像素数据读出,也就是当帧有效信号FVAL为高电平,行有效信号LVAL由低电平跳变到高电平时,读出的是该行的第一个像素数据;并依次按照行频和帧频将像素数据发送到Camera Link接口中。所以要解决以下几个问题:
首先是读时钟信号与写时钟信号的匹配问题。设计中采用分频器将系统时钟分频,并与写时钟相近,作为读时钟,这样可以避免频繁产生空、满信号。
其次,读操作控制信号的确定。通常的设计中,读出数据和读地址加一都在读使能信号的控制下完成。但设计中增加FVAL和LVAL信号后,数据的读出和读地址的增加都是在LVAL和FVAL信号为高时完成,因此就不能用通常设计中的读使能信号作为读操作的控制信号,设计中用LVAL做为读操作的控制信号,从图1中也可以看出。这样,当LVAL为高电平时,就可以实现每次地址加一,读出一个数据。当LVAL为低电平时,地址不增加,数据也不被读出。
最后,FVAL和LVAL信号的产生。设计中通过计数来实现,那么触发计数的信号如何选取呢?通过上面分析知道,读地址的增加和数据的读出都是在LVAL信号的控制下完成的,而LVAL信号也要与读出的数据一一对应,也就是说LVAL计数每次加一就会有一个数据读出,所以采用通常设计中的读使能信号作为LVAL和FVAL计数的触发信号,便可以实现Camera Link接口的控制信号对图像数据的控制。
4 验证结果
将程序下载到FPGA中,使用开发工具Quartus II6.0中自带的逻辑分析仪SignalTap对FIFO中的信号进行采样监测,采样结果如图7、图8所示。结果表明信号时序准确,数据和地址无毛刺现象。从图7可以看出,当LVAL信号为低时,读地址不增加并停止读,满足时序要求。图8中rdata为读出数据,值为0~9,lval_count为LVAL信号的计数寄存器,计数值为0~369,其中高电平为0~319。从图中看出:读出数据值和lval_count的尾数值一一对应,也就是说LVAL与读出数据一一对应。结果表明其可以为Camera Link接口提供稳定的数据及控制信号。
本文设计了一种异步FIFO,并成功应用在Camera Link接口中。分析和解决了异步FIFO设计中存在的2个关键问题:用高速的格雷码指针作为读写地址编码,有效降低了亚稳态出现的概率;通过划分地址空间和增加标志位解决了空、满信号问题。同时还解决了与Camera Link接口的时序匹配问题。设计中增加了电路的面积,但避免了复杂的组合逻辑,提高了系统的工作频率。
参考文献
[1] 夏宇闻.Verilog数字系统设计教程[M].北京航空航天大学出版社,2003.
[2] 魏芳,刘志军,马克杰.基于Verilog HDL的异步FIFO设计与实现[J].电子技术应用,2006(7):97-99.
[3] 陈骥,王鑫,曹久大.高速CCD激光移位传感器[J].光学精密工程,2008(4):611-616.
[4] 刘洪波,龙娟.异步FIFO状态判断的研究与设计[J].微电子学与计算机,2007,24(3).
[5] 黄平,何虎刚,徐定杰.导航接收机的非对称异步FIFO设计[J].弹箭与制导学报,2008,28(1).
[6] 万秋华,孙莹,王树浩,等.双读数系统的航天级绝对式光电编码器设计[J].光学精密工程,2009(6):52-57.