3. 紫光同创FPGA芯片架构详解
紫光同创作为国产FPGA的重要厂商,其产品线覆盖了从低成本、低功耗到高性能、高带宽的多个应用场景。其中,Logos系列(如Logos-2)与Compa系列(如Compa-2)是当前工业控制、通信、视频接口和AI边缘计算中最常用的两个家族。要真正用好一颗FPGA,不能只停留在编写RTL代码层面,必须深入理解其底层物理架构:可编程逻辑单元(PLC)如何组织、时钟网络如何布线、IO资源如何配置,以及硬核IP(如DDR控制器、SerDes)在芯片中的物理位置。本章将围绕这两大系列,从资源分布、时钟网络、IO资源三个维度进行深度拆解,帮助开发者建立“从芯片物理视角反推逻辑设计”的工程思维。
上图从宏观层面展示了Logos-2与Compa-2在芯片资源布局上的核心差异。可以看到,Compa系列在时钟资源、IO Bank数量以及高速串行收发器(SerDes)方面明显优于Logos系列。但这仅仅是“冰山一角”,接下来我们将深入芯片内部,逐一剖析这些资源的具体分布规律与使用要点。
3.1 可编程逻辑资源分布与选型逻辑
3.1.1 核心原理:PLC、DSP与BRAM的三维矩阵
紫光同创FPGA的逻辑资源并非均匀分布,而是按照“列”(Column)的方式排列。以Logos-2为例,其内部结构可以看作由多个“可配置逻辑块(CLB)”列、“DSP列”和“Block RAM列”交替排列组成。每一个CLB内部包含2个PLC(Programmable Logic Cell),每个PLC由一个6输入查找表(LUT6)、两个触发器(FF)以及进位链(Carry Chain)构成。这种排列方式决定了布线资源的走向:同一列内的逻辑单元互联延迟最小,跨列互联延迟较大。
对于Compa系列,其逻辑单元结构与Logos类似,但在DSP单元上做了增强。Compa-2的DSP支持18x19位有符号乘法,并且增加了预加法器(Pre-adder),非常适合实现FIR滤波器中的对称系数运算。而Logos-2的DSP仅支持18x18乘法,虽然也能实现大多数功能,但在做复数乘法或高阶FIR时,会消耗更多的DSP数量。
| 资源类型 | Logos-2 (如PGL25G) | Compa-2 (如PGT30G) | 工程影响 |
|---|---|---|---|
| 可编程逻辑单元 (PLC) | 约 24K | 约 30K | 决定逻辑容量,LUT/FF比例约 2:1 |
| DSP Slice | 56 个 | 96 个 | 决定乘加运算并行度 |
| Block RAM (18Kb) | 60 个 | 120 个 | 决定数据缓存与FIFO深度 |
| 全局时钟 (GCLK) | 16 对 | 24 对 | 决定时钟域数量上限 |
| PCIe Gen2 Hard IP | 无 | 1 个 (x4) | 决定是否需外接PHY芯片 |
| SerDes (6.6G) | 无 | 4 通道 | 决定是否支持SFP+光口或PCIe |
3.1.2 判断方法:如何快速评估资源是否够用?
在项目选型阶段,不能只看LUT数量。一个常见的误区是:“我的设计用了15K LUT,所以选24K LUT的芯片就够了”。实际上,由于布局布线的拥挤效应,当LUT利用率超过70%时,时序收敛难度会急剧上升。建议遵循以下评估流程:
- 估算逻辑资源:RTL代码中,一个always块中的if-else语句通常消耗1-2个LUT,一个32位计数器消耗约16个LUT+16个FF。
- 估算存储资源:将所有FIFO、RAM、ROM的深度与位宽相乘,再除以18Kb(Logos)或36Kb(Compa),得到BRAM块数。
- 估算DSP资源:每个乘法器消耗1个DSP,每个乘加运算(MAC)消耗1个DSP。注意,如果使用浮点运算,需要额外消耗逻辑资源进行定点化转换。
- IO约束检查:确认所需IO数量是否超过芯片封装的总IO数,且需注意Bank电压是否兼容。
3.1.3 案例拆解:视频缩放器资源分配实战
假设我们需要设计一个1080p@60Hz的视频缩放器,输入为YUV422格式,输出为RGB888。该设计包含:一行缓存(Line Buffer)、双线性插值模块、色彩空间转换模块。
初始目标:在Logos-2 (PGL25G) 上实现,要求LUT利用率低于60%,BRAM利用率低于80%。
关键参数分析:
- 一行1920像素的YUV422数据,每像素2字节,需要 1920*2 = 3840 字节。使用双端口RAM实现,需要 3840*8 / 1024 = 30Kb。若使用18Kb BRAM,需要2块。
- 双线性插值需要4个乘法器,每个乘法器消耗1个DSP,共4个DSP。
- 色彩空间转换需要3x3矩阵乘法,共9个乘法器,但可复用插值模块的DSP,通过时分复用实现,最终消耗6个DSP。
实际操作步骤:
- 在PDS(紫光同创开发软件)中新建工程,选择PGL25G芯片。
- 编写RTL代码,将Line Buffer例化为
RAM_18K原语,并设置为“真双口”模式。 - 综合后查看资源报告,发现LUT消耗了18K,占比75%,超出预期。
- 优化:将部分组合逻辑改为流水线寄存器,减少LUT的扇出;将乘法器改为DSP原语
MULT18X18,避免综合器将其推断为LUT乘法器。 - 优化后LUT降至13K,占比54%,满足要求。
复盘经验:在资源紧张时,优先检查是否有多余的LUT被用作了乘法器或移位寄存器。紫光同创的PDS工具中,可以通过“Technology Map Viewer”查看LUT的具体实现方式。
3.2 时钟网络架构与低抖动设计
3.2.1 核心原理:全局时钟树与区域时钟
时钟是FPGA设计中“心跳”。紫光同创FPGA的时钟网络分为三个层级:全局时钟(GCLK)、区域时钟(RCLK)和本地时钟(LCLK)。GCLK覆盖整个芯片,由专用的时钟输入引脚或PLL输出驱动,到达每个触发器的延迟偏差(Skew)极小,通常小于0.1ns。RCLK仅覆盖芯片的1/4区域,延迟稍大,但布线更灵活。LCLK则是逻辑单元内部的局部时钟,用于高速计数器的级联。
对于Compa系列,其时钟网络增加了“时钟动态重配置”功能,允许在运行中通过AXI4-Lite接口改变PLL的分频系数,而无需重新加载比特流。这对于需要动态变频的通信系统非常有用。
3.2.2 判断方法:如何选择时钟资源?
在PDS中,时钟资源的分配通常由工具自动完成,但开发者需要关注以下约束:
- 时钟输入引脚:必须使用专用的MRCC或SRCC引脚,不能使用普通IO作为时钟输入,否则会引入额外抖动。
- PLL使用:每个PLL可以输出最多6路时钟,但需注意PLL的输入频率范围。Logos-2的PLL输入范围为5MHz~500MHz,Compa-2为5MHz~800MHz。
- 跨时钟域:如果设计中存在多个异步时钟,必须使用异步FIFO或握手信号,不能直接使用两级触发器同步(对于单bit信号可以,但对于多bit总线必须使用FIFO)。
3.2.3 案例拆解:多时钟域视频处理系统
一个典型的视频处理系统包含三个时钟域:像素时钟(148.5MHz)、DDR读写时钟(400MHz)、CPU配置时钟(100MHz)。
初始现象:系统运行不稳定,偶尔出现图像撕裂。
分析过程:通过示波器测量,发现像素时钟的抖动达到150ps,超出FPGA IO的容忍范围。进一步检查原理图,发现像素时钟源(晶振)的输出串联了一个100Ω电阻,导致信号反射。
解决方案:
- 移除串联电阻,改为0Ω直连。
- 在FPGA的时钟输入引脚旁添加100nF滤波电容。
- 在PDS中,将像素时钟设置为“全局时钟”约束,确保其走GCLK网络。
结果对比:修改后,时钟抖动降至80ps,图像撕裂现象消失。
3.3 IO资源与高速接口设计
3.3.1 核心原理:Bank划分与电平标准
FPGA的IO引脚被划分为多个Bank,每个Bank的VCCIO电压可以独立设置。Logos-2提供HR(High Range)Bank,支持1.8V~3.3V;Compa-2同时提供HR和HP(High Performance)Bank,HP Bank支持1.2V~1.8V,适合高速DDR接口。每个IO引脚内部包含输入缓冲器、输出缓冲器、可编程上拉/下拉电阻,以及可选的串行端接电阻(Rs)。
对于差分信号(如LVDS),FPGA内部有专用的差分对引脚,必须成对使用。紫光同创的IO还支持伪差分模式,即使用两个单端IO配合外部电阻实现差分输入,但速率受限。
3.3.2 操作流程:DDR3接口的IO约束配置
以Compa-2连接DDR3颗粒为例,配置步骤如下:
- 在PDS中创建DDR3 IP核,选择数据位宽(如16bit)、Bank数量(1个)。
- 根据DDR3颗粒的型号,设置CAS延迟(如CL=11)、时序参数(tRCD、tRP)。
- 在管脚约束文件中,将DDR3的时钟、地址、数据引脚分配到FPGA的HP Bank,并设置IO标准为
SSTL15。 - 设置DQS信号为差分对,并启用内部的
DQS_TERM端接电阻。
3.3.3 案例拆解:LVDS接口的PCB布局与FPGA配置
某项目需要接收外部LVDS摄像头数据,速率为 720p@60fps,像素时钟为74.25MHz,4通道MIPI CSI-2接口。
关键输入参数:MIPI差分对阻抗要求100Ω±10%,FPGA的LVDS引脚内部有100Ω差分端接电阻,但MIPI规范要求外部端接。
实际操作:
- 在原理图中,MIPI的D0P/D0N连接到FPGA的LVDS对引脚,并在靠近FPGA引脚处放置100Ω电阻。
- 在PDS中,将IO标准设置为
LVDS_25(如果Bank电压为2.5V)或LVDS_18(如果Bank电压为1.8V)。 - 启用
DIFF_TERM属性,使FPGA内部端接电阻生效,与外部电阻并联后总阻抗接近50Ω(单端对地)。
结果与复盘:实测眼图清晰,误码率低于1e-12。经验是:对于MIPI这类高速信号,外部端接电阻必不可少,不能完全依赖FPGA内部端接,因为内部电阻精度只有±20%,而外部电阻可以做到±1%。
3.4 常见误区与设计复盘
| 误区点 | 错误认知 | 正确做法 |
|---|---|---|
| 资源评估 | 只看LUT数量,忽略DSP/BRAM | 按“乘法器/存储器”优先评估 |
| 时钟设计 | 所有时钟都用PLL输出 | 低频时钟(<50MHz)可直接使用IO时钟 |
| IO使用 | 任意IO都可接DDR | 必须使用HP Bank且需查手册确认支持 |
| 功耗控制 | Compa系列性能好,直接选用 | 评估静态功耗,Compa比Logos高约30% |