为了到达牢靠的数据传输,凭借存储器来完结跨时钟域通讯也是很常用的手法。在前期的跨时钟域规划中,在两个处理器间增加一个双口RAM或许FIFO来完结相互间的数据交换是很常见的做法。现在的FPGA大都集成了一些用户可灵敏装备的存储块,因而,运用开发商供给的免费IP核能够很便当的嵌入一些常用的存储器来完结跨时钟域数据传输的使命。运用内嵌存储器和运用外部扩展存储器的根本原理是相同的,如图1所示。
图1 凭借存储器的跨时钟域传输
双口RAM更适合于需求互通讯的规划,只需两边对地址做好恰当的分配,那么剩余的作业仅仅操控好存储器的读写时序。FIFO自身的特性(先进先出)决议了它更适合于单向的数据传输。总归,凭借存储器进行跨时钟域传输的最大优点在于,规划者不需求再花时刻和精力考虑怎么处理同步问题,因为这些作业都交给了存储器,咱们也不必关怀存储器内部究竟运用了怎样的作业机制来处理抵触问题(当然了,存储芯片内部肯定是有一套完善的同步处理机制)。咱们能够把更多的时刻花在数据流以及存储器接口的操控上。凭借存储器的另一个优势,它能够大大提高通信两边的数据吞吐率,它不像握手信号和逻辑同步处理机制那样在同步规划上消耗太多的时钟周期,它的速度瓶颈根本便是存储器自身的速度上限。不过,在得到便当的一起,咱们也不得不以支付更多的Money作为价值。
下文将要点讨论异步FIFO在跨时钟域通讯中的运用。常见的异步FIFO接口如图2所示,FIFO两边会有相对独立的两套操控总线。若写入恳求wrreq在写入时钟wrclk的上升沿处于有用状况,那么FIFO将在该时钟沿将锁存写入数据总线wrdata。同理,若读恳求rdreq在读时钟rdclk的上升沿处于有用状况,那么FIFO将把数据放置到读数据总线rddata上,外部逻辑一般鄙人一个有用时钟沿读取该数据。
FIFO一般还会有指示内部状况的一些接口信号,如图2中的空标志位empty、满标志位full,乃至还会有用多位数据线表明的FIFO当时数据量,这些状况标志确保了读写操控不呈现空读和满写的状况。铲除信号aclr在某些运用中也是需求的,它在有用时能够铲除当时FIFO的数据,让FIFO复位到一个空的状况。
图2 常见异步FIFO接口
如图3所示,在特权同学规划过的一个SDRAM操控器中,就运用了两个FIFO。因为SDRAM需求守时预改写,而且每次读写时开始操控的时刻开支相对大一些,因而选用页读写的方法能够大大的进步数据吞吐量,而页读写方法需求对数据做一些缓存处理。别的,该SDRAM操控器地点的工程中触及了多个时钟域。在写入SDRAM端是一个25MHz的时钟,在读SDRAM端是一个50MHz的时钟,而SDRAM的操控则运用了100MHz的时钟。虽然实践工程里这三个时钟的相位联系固定,可是不做很多周期束缚也很简单引起问题。
终究,挑选在SDRAM操控器的写入端和读出端各运用一个异步FIFO,这既处理了数据缓存的问题,也能有用的完结跨时钟域的信号传输。
图3 用两个FIFO规划的SDRAM操控器
责任编辑:gt