第二章:核心架构解析——逻辑单元、存储器与时钟资源
各位好,欢迎来到第二章。上一章我们聊了MachXO系列的整体定位,今天咱们深入看看芯片内部到底是怎么工作的。说白了,FPGA就是一堆可配置的逻辑块加上互联线,但不同厂家的实现细节差别很大。我个人习惯,选型之前一定要把这几块核心资源吃透,不然项目后期容易踩坑。
2.1 逻辑单元:LUT4与LUT5的差异
先讲最基础的——查找表(LUT)。MachXO系列用的是LUT4和LUT5混合架构。什么意思呢?就是芯片里既有4输入查找表,也有5输入查找表。
LUT4:4个输入,1个输出。能实现任意4输入布尔函数。说白了,就是一块16×1的SRAM,输入地址选通,输出对应值。
LUT5:5个输入,1个输出。能实现任意5输入布尔函数。这是一块32×1的SRAM。
你可能会问:为什么不用统一的LUT6?嗯,这里有个权衡。LUT5比LUT4多一个输入,面积大约大60%,但逻辑密度提升有限。MachXO定位在低功耗、低成本,所以混合使用两种LUT,既能满足大多数逻辑需求,又不浪费面积。
关键参数对比
| 资源类型 | 输入数 | 实现函数 | 典型应用 |
|---|---|---|---|
| LUT4 | 4 | 任意4输入布尔函数 | 简单状态机、译码器 |
| LUT5 | 5 | 任意5输入布尔函数 | 复杂组合逻辑、加法器 |
我在项目中遇到过一个问题:用LUT4实现一个5输入的多路选择器,结果综合工具自动拆成了两个LUT4级联,时序一下就崩了。后来换成LUT5,一个搞定。所以,写代码时心里要有数——哪些逻辑适合用LUT5,别全扔给工具去优化。
2.2 嵌入式存储器(EBR)
EBR是MachXO的硬核存储器块。每个EBR是9Kbit的SRAM,可以配置成多种模式:单口RAM、双口RAM、ROM、FIFO等。
EBR的主要特性:
- 容量:9Kbit/块(其中8Kbit数据,1Kbit校验位)
- 位宽可配:×1、×2、×4、×9、×18、×36
- 支持字节写使能
- 支持同步/异步读写
我记得第一次用MachXO做视频缓存,需要一块16K×8的帧缓冲。查手册发现每个EBR是9Kbit,算了一下需要16块。但实际布线时发现,位宽配置成×18比×9更省资源。为什么呢?因为×18模式下,每个EBR能提供18位数据,而地址深度减半。你想想看,如果数据位宽刚好是18的倍数,用×18模式能省一半的EBR数量。
个人经验:配置EBR时,优先考虑位宽匹配,而不是容量匹配。我曾经为了省一个EBR,硬把32位数据拆成两个16位存储,结果控制逻辑多用了20个LUT,得不偿失。
2.3 分布式RAM
分布式RAM,说白了就是用LUT搭出来的存储器。MachXO的每个LUT4都可以配置成16×1的RAM,LUT5可以配置成32×1的RAM。
分布式RAM vs EBR:
- 分布式RAM:容量小(几十到几百bit),但延迟低(1个时钟周期),适合做寄存器文件、小FIFO
- EBR:容量大(几K到几十Kbit),但延迟高(2-3个时钟周期),适合做数据缓存、帧缓冲
我建议:小于64bit的存储用分布式RAM,大于1Kbit的用EBR。中间那档(64bit~1Kbit)看时序要求——如果对延迟敏感,用分布式RAM;如果对面积敏感,用EBR。
注意:分布式RAM不支持异步读写!我曾经在项目里用分布式RAM做跨时钟域同步,结果数据老出错。查了半天才发现,分布式RAM的读操作是同步的,写操作虽然是异步的,但读地址必须寄存。后来老老实实换成了EBR加双口模式。
2.4 PLL与DLL详解
时钟资源是FPGA的命脉。MachXO系列提供了两种时钟管理模块:PLL(锁相环)和DLL(延迟锁定环)。
PLL:
- 输入频率范围:10MHz~400MHz(具体看型号)
- 输出频率范围:可倍频/分频
- 支持相位偏移:0°、90°、180°、270°
- 支持动态重配置
DLL:
- 输入频率范围:10MHz~267MHz
- 不支持倍频,只能分频
- 支持精细相位偏移(步进约50ps)
- 功耗比PLL低
你可能会问:什么时候用PLL,什么时候用DLL?我的经验是:
- 需要倍频 → 用PLL
- 需要精细相位调整 → 用DLL
- 低功耗场景 → 用DLL
- 需要动态调频 → 用PLL
我曾经在一个接口设计里,需要把50MHz时钟倍频到200MHz,同时产生一个90°相移的时钟。PLL直接搞定,输出两路时钟,一路0°,一路90°,干净利落。但如果只需要把时钟延迟几个纳秒,DLL更合适,功耗只有PLL的1/3左右。
时钟资源使用建议
| 场景 | 推荐方案 | 原因 |
|---|---|---|
| 需要倍频 | PLL | DLL不支持倍频 |
| 需要精细相位 | DLL | 步进更小,精度更高 |
| 低功耗设计 | DLL | 功耗比PLL低60%以上 |
| 动态频率切换 | PLL | 支持动态重配置 |
2.5 知识体系总览
下面这张图是我画的MachXO核心资源关系图,帮你理清思路:
这张图把MachXO的核心资源分成了三大块:逻辑单元、存储器和时钟资源。每一块下面又细分了具体类型和应用场景。你选型的时候,对着这张图看,基本就知道该关注哪些参数了。
好了,第二章就到这里。核心架构这部分内容比较多,但都是基本功。下一章我们会讲怎么根据这些资源参数来做具体的选型评估,到时候会结合几个实际案例来分析。
公众号:蓝海资料掘金营,微信deep3321