异步FIFO综合资源实测:深度与位宽档位矩阵,面积为什么只看存储位数
专题导航:异步FIFO设计全景。前置要求:已读支柱页全景。下一篇:常见坑点排查。本文数据来自工程包 async-fifo-mini 同一套 RTL 的逐档真实综合(yosys 0.33,
make matrix可复现)。
一、实验方法
- 被测件:工程包
rtl/async_fifo.v(参数化深度/位宽,格雷码指针 + 两级同步); - 综合:yosys
synth→stat取 cell 数;时序压力用ltp报出的最长拓扑路径级数衡量; - 变量:深度(4/16/64)、位宽(8/32/128),共 7 档独立实跑;
- 每档 log 带
# command:/# date:/# host-toolchain:三行头,原始输出随工程包脚本可完整复现。
一个口径要先说清:generic 综合不带工艺库时延模型,yosys sta 对通用单元报 No timing paths found,所以本文不给纳秒级 slack——那不是这套流程能诚实产出的数。关键路径级数(寄存器到寄存器之间串的逻辑级数)与工艺无关,同样能回答「哪一档时序更紧张」。
二、深度档位实测(位宽 8)
| 深度 | cell 数 | 关键路径级数 | 备注 |
|---|---|---|---|
| 4 | 156 | 37 | 控制逻辑占比高,存储很小 |
| 16 | 555 | 54 | 深度×4,cell×3.6 |
| 64 | 1985 | 72 | 深度再×4,cell 再×3.6,级数继续涨 |
三、位宽档位实测(深度 16)
| 位宽 | cell 数 | 关键路径级数 | 备注 |
|---|---|---|---|
| 8 | 555 | 54 | 基准档 |
| 32 | 1661 | 54 | 位宽×4,cell×3.0,级数不变 |
| 128 | 6077 | 45 | 位宽×16,cell×10.9,级数反而略降 |
把两张表画成图,线性关系一眼可见;橙色那根是下一节的对照档。
7 档汇总日志原文:
exp-log
depth width cells longest_path_ns slack_ns critical_path_ltp_levels
4 8 156 NA NA 37
4 32 396 NA NA 34
16 8 555 NA NA 54
16 32 1661 NA NA 54
64 8 1985 NA NA 72
64 32 6547 NA NA 72
16 128 6077 NA NA 45四、关键对照:16×128 对 64×32,等存储位数
这两档存储总量完全相同(都是 2048 bit),但形状相反:一个宽而浅、一个窄而深。实测 cell 数 6077 对 6547,差 7%——面积几乎只由存储总位数决定,深度与位宽的拆分方式影响很小。真正不同的是关键路径级数:窄而深那档 72 级,宽而浅只有 45 级,深度加深把指针比较与存储读出的逻辑链拉长了。
五、输出打拍与 BRAM:本文为什么不出数
输出寄存变体与 BRAM/LUTRAM 推断对照,都依赖具体工艺与厂商原语:generic 综合既不会推断出 BRAM,也给不出打拍前后的纳秒级 slack。这两个问题留给厂商流程(Vivado/Quartus)实测才有意义,本文不拿 generic 数据硬答。方向性结论仍然成立:打拍是拿一拍延迟换时序,小深度用 BRAM 浪费且引入读出延迟——但要量化,请用对应器件的工程跑。
六、怎么读这些数(分析框架)
- 深度与位宽对面积都近似线性,因为存储体占主导;深度每翻 4 倍 cell 约翻 3.6 倍,位宽每翻 4 倍约翻 3 倍,控制逻辑(指针、同步链)在小档位占比更高,所以比例略小于 4。
- 时序压力的变量是深度不是位宽:级数随深度 37→54→72 单调上涨,位宽从 8 加到 32 级数纹丝不动,128 档甚至略降——宽总线是并行不是串行,不加深逻辑链。
- 形状可以自由换:面积预算不变时,「宽而浅」比「窄而深」时序更宽松,但深度还承担削峰吸收突发的职责,不能只为时序砍深度。
- 要纳秒级结论就换流程:generic 矩阵负责趋势与选型方向,签核级 slack 请走厂商工具。
实验环境
- 机器/系统:Mac(Intel)/ macOS,实验在 geek-eda:0.2 Docker 容器内执行
- 工具版本:Yosys 0.33(容器内置,generic
synth流程) - 日期:2026-10-30
- 完整命令:工程包 async-fifo-mini 中
make matrix,逐档执行 yosyssynth → stat → ltp - 原始记录:本文汇总表为原始输出,逐档完整日志随
make matrix复现
总结
异步FIFO的参数选择不是拍脑袋:深度看突发与速率差,位宽看数据通路,输出打拍看读侧时序,存储方式看深度拐点——本文的实测矩阵就是给这四个决策提供数据支点。