时钟域以及跨时钟域的概念
通俗地讲,时钟域就是时钟的管辖范围(电路中由同一个时钟信号控制的区域),在谁的管辖范围之内的逻辑就由谁来提供时钟。这样一来,跨时钟域就是数据在不同时钟域之间的交互。由于从一个时钟域到另一个时钟域,时钟快慢及相位可能不同,这样就可能导致一系列的问题,典型的问题就是引起亚稳态,更为严重者数据直接丢失。因此要对CDC信号进行处理。
跨时钟域的信号处理主要分为两种:
1.单bit信号的CDC处理
2.多bit信号的CDC处理
多bit信号的CDC处理
-
异步fifo
FIFO概念
异步FIFO是处理多比特信号跨时钟域的最常用方法,简单来说,异步FIFO是双口RAM的一个封装而已,其存储容器本质上还是一个RAM,只不过对其添加了某些控制,使其能够实现先进先出的功能,由于这个功能十分的实用,因此得以广泛应用。其缺点是只能顺序写入,顺序读出数据,数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指针的地址。
异步FIFO的实现架构框图
关于异步FIFO的设计方法有比较多种,但殊途同归,其重难点在于其空满信号的判断,它涉及到内部跨时钟域细节的实现、格雷码的转换以及空满信号的比较等。这一点我会专门对异步FIFO的设计进行分享,当然也只是笔者的一种思路。不过在FPGA设计中,由于异步FIFO已经很成熟,各大厂家有专门的IP核供使用,一般不用自己设计。但其却是面试中逃不掉的系列,所以掌握其设计要点还是很重要的。
异步FIFO为什么可以解决CDC问题?
异步FIFO具有独立的读写时钟,因此可以实现不同时钟域数据的传输(快到慢或者慢到快均可)。因为内部信号的跨时钟域问题已经在设计中解决,所以可以直接将异步FIFO当作处理跨时钟域处理的方法。
2.握手同步
在这种方案中,无论源时钟和目的时钟之间的时钟周期比如何,都采用请求和确认机制来保证正确的数据采样到目的时钟域。
面试时一般能把异步FIFO相关原理解释清楚就够了,想进一步研究的,这里给出网上查找的相关设计代码以供参考。
握手同步实现框图
文章同步发布在微信公众号:IC码农。分享日常所学和基础知识,分享历年大厂笔试题,EDA工具和培训视频,学习交流群,欢迎关注。