电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

异步FIFO设计

异步FIFO设计_第1页
1/8
异步FIFO设计_第2页
2/8
异步FIFO设计_第3页
3/8
异步FIFO 设计文档 一、概述 在大规模 ASIC 或 FPGA 设计中,多时钟系统往往是不可避免的,这样就产生了不同时钟域数据传输的问题,其中一个比较好的解决方案就是使用异步FIFO 来作不同时钟域数据传输的缓冲区,这们既可以使相异时钟域数据传输的时序要求变得宽松,也提高了它们之间的传输效率。此文内容就是阐述异步FIFO的设计。 二、设计原理 2.1 结构框图 Fig. 2.1.1 如上图所示的同步模块 synchronize to write clk,其作用是把读时钟域的读指针 rd_ptr 采集到写时钟(wr_clk)域,然后和写指针 wr_ptr 进行比较从而产生或撤消写满标志位 wr_full;类似地,同步模块 synchronize to read clk 的作用是把写时钟域的写指针 wr_ptr 采集到读时钟域,然后和读指针 rd_ptr 进行比较从而产生或撤消读空标志位 rd_empty。 另外还有写指针 wr_ptr 和写满标志位 wr_full 产生模块,读指针 rd_ptr 和读空标志位 rd_empty产生模块,以及双端口存储 RAM 模块。 2.2 二进制计数器存在的问题 异步FIFO 读写指针需要在数学上的操作和比较才能产生准确的空满标志位,但由于读写指针属于不同的时钟域及读写时钟相位关系的不确定性,同步模块采集另一时钟域的指针时,此指针有可能正处在跳变的过程中,如图Fig.2.2.1所示,那么采集到的值很有可能是不期望的值,当然,不期望的错误结果也会随之发生。 Fig. 2.2.1 上图中,rd_ptr2sy nc 3 和4 以及4 和5 之间的中间态是由于到各寄存器的时钟rd_clk 存在偏差而引起的。二进制的递增操作,在大多数情况下都会有两位或者两以上的bit 位在同一个递增操作内发生变化,但由于实际电路中会存在时钟偏差和不同的路径延时,二进制计数器在自增时会不可避免地产生错误的中间结果,如图Fig.2.2.2。 Fig.2.2.2 上图是Fig.2.2.1 的电路原型以及局部波形的放大。由于rd_clk 上升沿到达三寄存器的时间各不相同,这就导致了rd_ptr2sy nc 的值从3’b011 跳变3’b100 的过程中经历了3’b111 和3’b101,直到最后一个时钟(rd_clk0)沿的到来rd_ptr2sy nc才跳变到正确结果3’b100。中间结果的持续的时间虽然相对短暂,但是这些不正确的结果完全有可能被其它时钟域的同步模块采集到而产生错误的动作,见上图。 由此可见,要避免中间结果的产生,其中一个可行的方案就是使被同步模块采集的数据递变时,每次只有一个bit 位发生改变。格雷码计数器就是一个不错的选...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

异步FIFO设计

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部