1. FIFO基础概念:同步FIFO与异步FIFO的区别,FIFO深度与宽度的定义,空满标志的基本原理
大家好,我是做数字IC设计的老工程师了。今天咱们聊聊FIFO的基础概念。说实话,FIFO这玩意儿在芯片设计里太常见了,几乎每个项目都能碰到。我刚开始接触FIFO时,也觉得不就是个缓存嘛,后来踩了不少坑才真正理解它的精髓。
1.1 什么是FIFO?
FIFO,全称是First In First Out,先进先出。说白了,就是个数据缓冲器。你往里面写数据,它按顺序存着,你读的时候,最早写进去的数据最先出来。就像排队买奶茶,先来的人先拿到。
但FIFO不只是个简单的队列。在数字IC里,它要解决一个核心问题:跨时钟域的数据传输。我做过一个项目,两个模块工作在不同频率下,一个跑200MHz,一个跑150MHz,数据怎么传?用FIFO就对了。
1.2 同步FIFO vs 异步FIFO
这是FIFO分类里最基础、也最重要的区分。我当年面试新人,第一个问题就问这个。
| 对比项 | 同步FIFO | 异步FIFO |
|---|---|---|
| 读写时钟 | 同一个时钟 | 不同时钟域 |
| 应用场景 | 同频模块间缓冲 | 跨时钟域数据传递 |
| 设计复杂度 | 低,容易实现 | 高,需处理亚稳态 |
| 空满判断 | 直接比较读写指针 | 需同步指针后再比较 |
同步FIFO,读写都在同一个时钟域下。实现起来简单,我一般直接用寄存器搭,或者用SRAM加控制逻辑。空满标志的判断也直接——比较读写指针地址就行。
异步FIFO,这个就有点意思了。读写时钟不同,比如读时钟是100MHz,写时钟是75MHz。这时候问题来了:你怎么知道FIFO里有没有数据?你怎么知道满了没有?
核心难点:异步FIFO的空满判断,需要把写指针同步到读时钟域,或者把读指针同步到写时钟域。这个同步过程会引入延迟,处理不好就会出错。
我记得有一次,一个同事设计的异步FIFO在仿真时好好的,上板就出问题。查了两天才发现,他同步指针时用了两级触发器,但没考虑格雷码转换。嗯,这个坑我后面会详细讲。
1.3 FIFO深度与宽度
这两个参数,决定了FIFO的存储能力。
- 宽度(Width):一次能存多少位数据。比如宽度8位,就是一次存一个字节。宽度32位,就是一次存一个字。
- 深度(Depth):能存多少个数据。深度16,就是能存16个数据。深度1024,就是能存1024个。
举个例子:一个FIFO深度64、宽度32,那它总共能存64×32=2048位数据。但注意,深度和宽度不是随便选的。我见过有人把深度设成1000,结果地址线要10根,浪费资源。深度最好是2的幂次方,比如16、32、64、128,这样地址编码简单,指针回绕也方便。
我的经验:选深度时,先算算最坏情况下的数据积压量。比如写时钟比读时钟快,那FIFO深度至少要能容纳写时钟比读时钟多写的数据量。我一般会再加20%的余量,防止突发情况。
1.4 空满标志的基本原理
空满标志,是FIFO的灵魂。没有它,你根本不知道什么时候该读、什么时候该写。
空标志(empty):FIFO里没有数据了。这时候读操作会读出无效数据,所以读使能必须拉低。
满标志(full):FIFO里存满了。这时候写操作会覆盖旧数据,所以写使能必须拉低。
判断空满,核心是比较读写指针。但这里有个细节:
- 同步FIFO:直接比较读写指针地址。相等就是空,差一个深度就是满。
- 异步FIFO:需要把指针转换成格雷码,再同步到对端时钟域,然后比较。
为什么要用格雷码?因为格雷码相邻两个值只有一位变化。同步时即使出现亚稳态,也最多错一位,不会导致指针跳变。我当年第一次做异步FIFO,没注意这个,结果空满标志乱跳,数据全丢了。从那以后,格雷码就成了我的标配。
注意:空满标志的判断,一定要考虑指针回绕的情况。比如深度16,写指针从15写到0,读指针还在5,这时候FIFO不是空的,也不是满的。需要额外加一个标志位来区分。
1.5 知识体系总览
下面这张图,是我自己画的FIFO基础概念结构图。你看一眼,就能把今天讲的内容串起来。
这张图把今天的内容都串起来了。你看,FIFO基础概念分三大块:同步vs异步、深度与宽度、空满标志。每一块下面又有具体的知识点。我建议你把这个图记在脑子里,以后设计FIFO时,按图索骥就行。
1.6 小结
好了,今天的内容就这些。总结一下:
- 同步FIFO和异步FIFO,核心区别在时钟域。同步的简单,异步的复杂。
- 深度和宽度,决定了FIFO能存多少数据。深度选2的幂次方,宽度按数据位宽来。
- 空满标志,靠比较读写指针实现。异步FIFO要用格雷码同步指针。
这些概念看着简单,但实际项目中很容易出错。我建议你动手写个简单的同步FIFO代码,跑跑仿真,感受一下空满标志的变化。下一章,我会讲FIFO的读写指针设计,那才是真正的硬核内容。
可可精品资料库