FPGA设计中,跨时钟域问题的处理
今天和大侠简单聊一聊FPGA设计中跨时钟域问题的处理,话不多说,上货。
跨时钟域处理是FPGA设计中经常遇到的问题,而如何处理好跨时钟域间的数据,可以说是每个FPGA初学者的必修课。如果是还在校的本科生,跨时钟域处理也是面试中经常常被问到的一个问题。
本次主要介绍3种跨时钟域处理的方法,这3种方法可以说是FPGA界最常用也最实用的方法,这三种方法包含了单bit和多bit数据的跨时钟域处理,学会这3招之后,对于FPGA相关的跨时钟域数据处理便可以手到擒来。
介绍的3种方法跨时钟域处理方法如下:
- 1、打两拍;
- 2、异步双口RAM;
- 3、格雷码转换。
第一种方法:打两拍
大家很清楚,处理跨时钟域的数据有单bit和多bit之分,而打两拍的方式常见于处理单bit数据的跨时钟域问题。
打两拍的方式,其实说白了,就是定义两级寄存器,对输入的数据进行延拍。如下图所示:
应该很多人都会问,为什么是打两拍呢,打一拍、打三拍行不行呢?
先简单说下两级寄存器的原理:两级寄存是一级寄存的平方,两级并不能完全消除亚稳态的影响,但是提高了可靠性减少其发生概率。总的来讲,就是一级概率很大,三级改善不大。
这样说可能还是有很多人不够完全理解,那么请看下面的时序示意图