第二章:核心架构解析——逻辑单元、存储器与时钟资源

各位好,欢迎来到第二章。上一章我们聊了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核心架构资源关系图 MachXO FPGA 核心架构 逻辑单元 (LUT4/LUT5) 存储器 (EBR + 分布式RAM) 时钟资源 (PLL + DLL) LUT4: 4输入 LUT5: 5输入 EBR: 9Kbit/块 分布式RAM: LUT实现 PLL: 倍频/分频 简单组合逻辑 复杂逻辑/加法器 数据缓存/FIFO 寄存器文件/小FIFO 时钟生成/相位调整 选型核心:根据应用场景匹配资源类型

这张图把MachXO的核心资源分成了三大块:逻辑单元、存储器和时钟资源。每一块下面又细分了具体类型和应用场景。你选型的时候,对着这张图看,基本就知道该关注哪些参数了。

好了,第二章就到这里。核心架构这部分内容比较多,但都是基本功。下一章我们会讲怎么根据这些资源参数来做具体的选型评估,到时候会结合几个实际案例来分析。


公众号:蓝海资料掘金营,微信deep3321