APP下载

高速数据的跨时钟域处理方法及验证*

2015-01-01侯宏录齐晶晶

西安工业大学学报 2015年6期
关键词:寄存器指针时钟

侯宏录,齐晶晶

(西安工业大学 光电工程学院,西安710021)

随着微电子技术和图像传感器技术的发展,高速视频采集技术已经广泛应用于航天航空、医学图像分析、现代工业自动化生产、道路交通和科学研究中.高速视频采集系统能够记录肉眼无法分辨的过程,在后期回放过时,将高速过程清晰地展现出来,为数字图像处理、分析和目标识别等提供了依据.高速图像采集和处理系统中包含多个时钟,数据在不同时钟域传输的周期和相位完全独立,因此必须对采集到的数据进行跨时钟域处理才能保证数据的传输无丢失[1].

对于不同时钟域间的数据传输,文献[2]提出了一种基于符号化模型检验工具SMV的异步先进先出队列(First Input First Output,FIFO)的模型验证方法,利用SMV对该系统模型和系统属性进行了验证,有效解决跨时钟域信号传输产生的亚稳态问题;文献[3]提出了一种在FPGA内实现高速异步FIFO的方法;文献[4]利用异步FIFO实现现场可编程逻辑门阵列(Field Programmable Gate Array,FPGA)与数字信号处理器(Digital Signal Processor,DSP)进行数据通信的方案,该方案具有传输速度快、稳定可靠和实现方便的优点;文献[5]主要针对多时钟域下的片上网络的数据同步进行了研究,分析了多时钟域下片上网络跨时钟域数据传输时的亚稳态问题.FPGA内部资源丰富,通常可根据需要将FPGA内部M9K存储器模块配置成单端口、简单双端口、真双端口随机存取存储器(Random Access Memory,RAM)、FIFO缓 冲 器 及 只 读 存 储 器 (Read Only Memory,ROM)[6].利用FPGA 片内存储资源实现的异步FIFO是一种快速有效的解决方案,FPGA内部FIFO比外部FIFO芯片更能提高系统稳定性.

本文为了实现高速视频采集和传输系统中数据的跨时钟域处理,提出了基于FPGA的异步FIFO设计方案.该方案通过两种方式实现:①利用Verilog硬件描述语言(Hardware Description Language,HDL)来实现异步FIFO;②利用QuartusII工具中的宏模块调用实现异步FIFO.通过在高速视频采集和传输系统中的实验,验证了两种方法的正确性.

1 异步FIFO工作原理

异步FIFO是一种先进先出存储器,先进入的数据先读出,读时钟和写时钟互相独立[7].异步FIFO有两套数据线,可在一端进行写操作的同时在另一端进行读操作,在数据顺序传输的同时实现数据的缓存.

1.1 异步FIFO结构

异步FIFO包括写时钟域和读时钟域,异步FIFO的核心是由双端口RAM组成的存储单元.访问FIFO时不需要地址线,只需要数据线和读写控制信号线.在写时钟域,写端口对应写数据信号和写控制信号,写入的数据存储在双端口RAM中;在读时钟域,读端口对应读数据信号和控制信号,数据从双端口RAM中读出并送入下一级[8].异步FIFO最重要的控制信号Full(满)、Empty(空)、Almost Full(将满)、Almost Empty(将空)由写地址和读地址相互比较生成.异步FIFO存储器内部结构如图1所示.

确定异步FIFO的空/满状态需要二进制读指针和写指针的比较.FIFO中的读写指针值随着读写操作的进行不断累加,当计数器满后返回并继续从0开始循环.

图1 异步FIFO存储器内部结构Fig.1 The internal structure of asynchronous FIFO memory

1.2 亚稳态的处理

亚稳态是指触发器无法在规定时间内达到确定状态.当触发器进入亚稳态时,无法预测输出电平,也无法预测何时输出稳定在正确的电平上.在亚稳态期间,触发器输出中间电平或者振荡状态,输出电平沿信号通道上的各个触发器级联式传播下去.

在数字电路中,为了保证每个寄存器的输入信号正确,所有器件的信号传输都有一定的时序要求,输入寄存器的信号必须在时钟沿的寄存器建立时间(Tsu)之前保持稳定,并且持续到时钟沿的寄存器保持时间(Th)之后改变,信号从寄存器的输入到输出需要经过一定的延迟(Tco).此时,系统的每一个寄存器都有一个稳定的状态1或者0,且寄存器的输出电压在下级门电路的噪声容限范围内[9].而如果信号的变化不在Tsu和Th的要求内,寄存器的输出会处在高电平1和低电平0之间,寄存器的输出达到高或者低的稳定状态时需要的时间大于Tco,即输出的电压处在下级门电路的噪声容限范围外时,则寄存器输出处于亚稳态.亚稳态通常发生在跨时钟域传递数据的系统中,由于数据信号可能在任何时间到达异步时钟域的目的寄存器,从而无法保证满足Tsu和Th的要求.

图2所示为跨时钟域传输数据中的异步时钟,前级寄存器的工作时钟为clka,后级寄存器的工作时钟为clkb.当前一级的输入数据发生改变时,后一级电路在读数据的同时可能产生亚稳态.

亚稳态不能够完全消除,只能使其出现的概率降低.由于二进制计数器从一个时钟域到另外一个时钟域同步计数时可能出现计数器的多位同时翻转,经过同步器后的数值产生多种结果,格雷码计数器每次累加操作后只有一个比特发生翻转,因此在进行时钟域转换时,不会出现其他不确定值,以便正确比较读写指针,准确产生空满信号.因此,采用格雷码可有效减少亚稳态的发生.本文在通过Verilog HDL实现异步FIFO时采用格雷码来降低亚稳态的出现概率.

图2 异步时钟Fig.2 Asynchronous clock

1.3 空/满标志

异步FIFO中最重要的控制信号由读写指针相互比较生成.为了保证数据在FIFO中正确写入和读出,避免写满和读空的产生,判读空/满标志位的产生成为异步FIFO设计的关键.

为解决上述问题,对指针进行附加位比较.为读写指针最高位增加一位附加位,当读指针读完存储器中的存储单元后,会向附加位进一,除附加位外的所有位均为零,写指针亦然.若读写地址指针的最高位不同而其余位相同时,表明写地址比读地址多产生了一个循环,即FIFO存储器为满.若读写地址指针所有位都相同时,表明读写地址指针循环次数相等,即FIFO存储器此时状态为空.综上所述,读写地址指针有n位地址空间,其中低n-1位用来存放FIFO的读写地址.

2 异步FIFO的实现

FPGA内部资源丰富,为了简化系统结构,通常可根据需要来配置FPGA内部存储资源.本设计中采用两种方法通过FPGA内部块RAM来实现异步FIFO,用于解决图像采集和处理两个模块不同时钟域的数据传输,异步FIFO缓存图像采集模块传输过来的图像数据,用于下级FPGA控制器按照数据传输格式读取数据,同时将像素数据作跨时钟域处理,系统采集到的图像数据由采集系统82MHz时钟控制写入异步FIFO,图像数据经异步FIFO缓存后,由图像处理模块从异步FIFO中读出.

2.1 Verilog HDL实现异步FIFO

本设计中,数据采集的分辨率为1 280×1 024,每个像素点包含RGB各8位的数据,一行传输的图像数据为1 280个24位的图像数据.异步FIFO接口信号说明见表1~2.

表1 Verilog HDL实现的异步FIFO输入信号Tab.1 The input signal of asynchronous FIFO implemented by Verilog HDL

表2 Verilog HDL实现的异步FIFO输出信号Tab.2 The output signal of asynchronous FIFO implemented by Verilog HDL

结合上文对异步FIFO设计中的关键问题分析,给出Verilog HDL设计中二进制转格雷码及满信号产生的关键代码为

二进制转格雷码

类似可写出空标志位产生模块.

2.2 QuartusII生成异步FIFO

在EDA设计时可直接调用QuartusII软件中内置的宏模块来简化设计过程.本文使用Quartus II中MegaWizard宏模块向导定制FIFO,FPGA器件选择CycloneIV,定制FIFO时需要设置FIFO的数据宽度、深度和类型等参数.

FIFO类型选择异步,数据宽度选择24位,深度选择1 024,即定制1 280个位宽24位存储深度1 024的缓存单元.利用宏模块定制的异步FIFO生成的信号见表3~4.

表3 QuartusII生成的异步FIFO输入信号Tab.3 The input signal of asynchronous FIFO implemented by QuartusII

表4 QuartusII生成的异步FIFO输出信号Tab.4 The output signal of asynchronous FIFO implemented by QuartusII

当写请求wrreq为高电平时,在写时钟wrclk的上升沿,将24位的像素数据data[23:0]在82 MHz时钟周期下写入FIFO的写指针的指向单元,同时写指针加1,写指针指向下一个要写入的数据单元,直到wrreq为低电平或wrfull为高电平时停止写入数据,已写入的数据按行存储.当读请求rdreq为高电平时,在读时钟rd_clk的上升沿,将24位像素数据q[23:0]在50MHz时钟周期下从读指针指向单元读出,同时读指针加1,读指针指向下一个数据单元,直到rdreq为低电平或rdfull为高电平时停止数据读出.

3 异步FIFO性能测试结果及分析

高速视频采集系统结构如图3所示,为了测试本文设计的异步FIFO是否满足要求,首先对设计进行了仿真验证,再将验证后的异步FIFO应用到高速视频采集系统中,通过观察系统显示结果,判断设计出的异步FIFO适合本系统.

图3 系统结构框图Fig.3 The system structure diagram

3.1 逻辑代码仿真验证

使用Verilog HDL编写测试脚本和测试用例,调用第三方软件ModelSim进行仿真验证如图4所示,得到FIFO中的信号输出波形图.图中显示异步FIFO的写入时钟wr_clk频率高于读出时钟rd_clk频率,当写使能wr_en信号为高时,数据在写时钟的上升沿写入RAM.在读出时钟rd_clk的上升沿,当读使能rd_en信号为高时,数据在读时钟的上升沿由RAM中读出.当将满标识信号afull有效时,在时钟信号的下一个上升沿停止写操作,写满wr_full信号有效.当将空标识信号aempty有效时,在时钟信号的下一个上升沿停止读操作,读空rd_full信号有效.

图4 异步FIFO仿真验证Fig.4 The simulation and verification of asynchronous FIFO

3.2 系统性能测试

本设计应用于高速视频采集和传输系统,采集系统输出8路视频数据,数据经过设计的异步FIFO后,传输给FPGA控制板,最后在FPGA控制下图像数据以60Hz的刷新频率显示在液晶显示器上.

采集系统用到的时钟为82MHz,即FIFO的写入时钟应为82MHz.用示波器跟踪数据写入FIFO时的时钟得到波形如图5所示,波形显示为82MHz.

图5 异步FIFO写入时钟Fig.5 The write clock of asynchronous FIFO

FPGA控制板的时钟为50MHz,即FIFO的读出时钟应为50MHz.用示波器跟踪数据从FIFO中读出的时钟得到波形如图6所示,波形显示为50MHz.

图6 异步FIFO读出时钟Fig.6 The read clock of asynchronous FIFO

采用Verilog HDL时序代码和QuartusII工具宏模块定制两种方法实现的异步FIFO经过仿真验证后,在Altera公司Cyclone IV系列的FPGA芯片EP4CGX150DF31上进行实验验证,在满足高速视频采集系统技术指标的前提下,对静态目标进行实时采集,将采集到的图像经过异步FIFO缓存后,通过液晶显示屏观察显示效果.

利用高速视频采集系统拍摄室外行驶的汽车,采集到的图像经异步FIFO做跨时钟域处理后,通过液晶显示器显示,得到4帧连续的图像,如图7所示.由图7可以看出,高速相机采集到的图像数据经过异步FIFO缓存后,在显示器上按照从左向右,从上到下的方式扫描显示出来,与异步FIFO先进先出的工作原理一致.表明本文设计的异步FIFO切实可行.

图7 跨时钟域处理后的图像Fig.7 The image processing of the cross clock domain

3.3 测试结果分析

通过对采集到的高速数据进行跨时钟域处理,从液晶显示器显示的画面可知:异步FIFO性能达到了技术指标要求,但在调试过程中画面出现抖动,经过分析发现在数据写入异步FIFO的过程中同步信号未严格对齐;采集到的高速数据经异步FIFO做跨时钟域处理时,未对采集的曝光进行调整,曝光时间太短,图像显示过暗;本文设计的异步FIFO带有空/满标志位,导致信号通路延时对整个系统工作频率产生制约,为了避免上述问题,可在异步FIFO设计中省略“满”信号,只保留“空”信号产生模块.

4 结 论

1)本文基于高速视频采集和传输系统,提出了异步FIFO储器解决跨时钟域传输数据的解决方案.在分析异步FIFO工作原理的基础上,结合FPGA内部存储资源,采用两种方法实现异步FIFO的设计,分别是Verilog HDL编写逻辑代码实现的异步FIFO和Quartus II中MegaWizard宏模块向导定制的异步FIFO.

2)采用Verilog HDL编写时序代码实现的异步FIFO将二进制的指针改为格雷码,有效减少了数据缓存过程中亚稳态,并在空/满信号产生的同时避免了写满和读空的产生.本文设计的异步FIFO具有良好的通用性和可移植性.通过Quartus II中 MegaWizard宏模块向导定制的异步FIFO快速有效,在结构相对复杂的系统中可大大简化系统结构.

3)对文中设计的异步FIFO,通过实验验证,解决了高速数据采集和传输系统的前后数据传输速率不匹配问题,满足预期设计目标,为后续的研究工作奠定基础.

[1] 卢博,王军.异步FIFO在DSP图像采集系统中的应用[J].单片机与嵌入式系统应用,2015,32(1):57.LU Bo,WANG Jun.Application of Asynchronous FIFO in DSP Image Acquisition System[J].Micro-controllers and Embedded Systems,2015,32(1):57.(in Chinese)

[2] 刘彬.异步FIFO的设计与形式化验证[D].长沙:国防科技大学,2011.LIU Bin.Design and Formal Verification of Asynchronous FIFO[D].Changsha:National University of Defense Technology,2011.(in Chinese)

[3] 黄忠朝,赵于前.一种实现高速异步FIFO的FPGA方法[J].计算机工程与应用,2010,46(3):13.HUANG Zhong-chao,ZHAO Yu-qian.Implementation Method of High Speed Asynchronous FIFO U-sing FPGA[J].Computer Engineering and Applications,2010,46(3):13.(in Chinese)

[4] 胡波,李鹏.异步FIFO在FPGA与DSP通信中的运用[J].电子科技,2011,24(3):53.HU Bo,LI Peng.Application of Asynchronous FIFO in Communication Between FPGA and DSP[J].Electronic Science and Technology,2011,24(3):53.(in Chinese)

[5] 赵文晗.多时钟域下片上网络同步研究[D].成都:电子科技大学,2013.ZHAO Wen-han.Research on Synchronous Multi-Clock-Domain Network-on-Chip[D].Chengdu:University of Electronic Science and Technology of China,2013.(in Chinese)

[6] 施华钧.高效异步FIFO的设计实现[D].长沙:湖南大学,2013.SHI Hua-jun.Design and Implementation of Efficient Asynchronous FIFO[D].Changsha:Hunan University,2013.(in Chinese)

[7] 向厚振,张志杰,王鹏.基于FPGA视频和图像处理系统 的 FIFO 缓 存 技 术 [J].电 视 技 术,2012,36(9):41.XIANG Hou-zhen,ZHANG Zhi-jie,WANG Peng.FIFO Cache Technology in Video and Image Processing System Based on FPGA[J].Video Engineering,2012,36(9):41.(in Chinese)

[8] 庾志衡,叶俊明,邓迪文.基于FPGA与DDR2SDRAM的大容量异步FIFO缓存设计[J].微型机与应用,2011,30(4):34.YU Zhi-heng,YE Jun-ming,DENG Di-wen.A Design of High Speed and Deep Asynchronous FIFO Based on FPGA and DDR2SDRAM[J].Microcomputer &Its Applications,2011,30(4):34.(in Chinese)

[9] 司岚山.一种高速大容量异步FIFO存储器的设计[D].无锡:江南大学,2013.SI Lan-shan.Design of High Speed and Large Capacity Asynchronous FIFO Memory[D].Wuxi:Jiangnan University,2013.(in Chinese)

猜你喜欢

寄存器指针时钟
STM32和51单片机寄存器映射原理异同分析
别样的“时钟”
古代的时钟
垂悬指针检测与防御方法*
Lite寄存器模型的设计与实现
移位寄存器及算术运算应用
为什么表的指针都按照顺时针方向转动
有趣的时钟
时钟会开“花”
浅析C语言指针