3. 紫光同创FPGA芯片架构详解

紫光同创作为国产FPGA的重要厂商,其产品线覆盖了从低成本、低功耗到高性能、高带宽的多个应用场景。其中,Logos系列(如Logos-2)与Compa系列(如Compa-2)是当前工业控制、通信、视频接口和AI边缘计算中最常用的两个家族。要真正用好一颗FPGA,不能只停留在编写RTL代码层面,必须深入理解其底层物理架构:可编程逻辑单元(PLC)如何组织、时钟网络如何布线、IO资源如何配置,以及硬核IP(如DDR控制器、SerDes)在芯片中的物理位置。本章将围绕这两大系列,从资源分布、时钟网络、IO资源三个维度进行深度拆解,帮助开发者建立“从芯片物理视角反推逻辑设计”的工程思维。

紫光同创FPGA架构对比:Logos-2 vs Compa-2 Logos-2 (低成本/低功耗) 可编程逻辑单元 PLC (6输入LUT+2FF) + 分布式RAM + 移位寄存器 DSP Slice 18x18 乘法器 + 48bit累加 Block RAM 18Kb / 36Kb 真双口 全局时钟网络 GCLK x16, 区域时钟 x8 PLL x4 输入范围 5MHz~500MHz IO资源 (HR Bank) HP Bank: 1.2V~1.8V HR Bank: 1.8V~3.3V 支持LVCMOS/LVDS/SSTL DDR3/DDR3L 硬核PHY ADC硬核 (可选) 1MSPS, 12bit Compa-2 (高性能/高带宽) 可编程逻辑单元 PLC (6输入LUT+2FF) + 分布式RAM + 移位寄存器 DSP Slice (更强) 18x19 乘法器 + 48bit累加 Block RAM 18Kb / 36Kb 真双口 全局时钟网络 GCLK x24, 区域时钟 x12 PLL x8 + MMCM 输入范围 5MHz~800MHz IO资源 (HP+HR) HP Bank: 1.2V~1.8V HR Bank: 1.8V~3.3V 支持LVCMOS/LVDS/SSTL/HSUL DDR3/DDR4 硬核PHY SerDes 硬核 最高 6.6Gbps, PCIe Gen2 资源密度 递增 逻辑单元 DSP BRAM 时钟 IO 硬核IP

上图从宏观层面展示了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 Slice56 个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%时,时序收敛难度会急剧上升。建议遵循以下评估流程:

  1. 估算逻辑资源:RTL代码中,一个always块中的if-else语句通常消耗1-2个LUT,一个32位计数器消耗约16个LUT+16个FF。
  2. 估算存储资源:将所有FIFO、RAM、ROM的深度与位宽相乘,再除以18Kb(Logos)或36Kb(Compa),得到BRAM块数。
  3. 估算DSP资源:每个乘法器消耗1个DSP,每个乘加运算(MAC)消耗1个DSP。注意,如果使用浮点运算,需要额外消耗逻辑资源进行定点化转换。
  4. IO约束检查:确认所需IO数量是否超过芯片封装的总IO数,且需注意Bank电压是否兼容。
风险提示:Compa系列虽然资源多,但其功耗也显著高于Logos系列。如果项目对功耗有严格要求(如手持设备),即使Compa资源有富余,也应优先考虑Logos系列,并通过优化代码结构来适配资源。

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。

实际操作步骤:

  1. 在PDS(紫光同创开发软件)中新建工程,选择PGL25G芯片。
  2. 编写RTL代码,将Line Buffer例化为RAM_18K原语,并设置为“真双口”模式。
  3. 综合后查看资源报告,发现LUT消耗了18K,占比75%,超出预期。
  4. 优化:将部分组合逻辑改为流水线寄存器,减少LUT的扇出;将乘法器改为DSP原语MULT18X18,避免综合器将其推断为LUT乘法器。
  5. 优化后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)。
经验之谈:在布局时,尽量将同一时钟域的逻辑放在芯片的同一区域内,以减少时钟偏斜。PDS的“Floorplanning”工具可以手动约束逻辑位置,但初学者建议先让工具自动布局,仅在时序违例时进行干预。

3.2.3 案例拆解:多时钟域视频处理系统

一个典型的视频处理系统包含三个时钟域:像素时钟(148.5MHz)、DDR读写时钟(400MHz)、CPU配置时钟(100MHz)。

初始现象:系统运行不稳定,偶尔出现图像撕裂。

分析过程:通过示波器测量,发现像素时钟的抖动达到150ps,超出FPGA IO的容忍范围。进一步检查原理图,发现像素时钟源(晶振)的输出串联了一个100Ω电阻,导致信号反射。

解决方案:

  1. 移除串联电阻,改为0Ω直连。
  2. 在FPGA的时钟输入引脚旁添加100nF滤波电容。
  3. 在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颗粒为例,配置步骤如下:

  1. 在PDS中创建DDR3 IP核,选择数据位宽(如16bit)、Bank数量(1个)。
  2. 根据DDR3颗粒的型号,设置CAS延迟(如CL=11)、时序参数(tRCD、tRP)。
  3. 在管脚约束文件中,将DDR3的时钟、地址、数据引脚分配到FPGA的HP Bank,并设置IO标准为SSTL15。
  4. 设置DQS信号为差分对,并启用内部的DQS_TERM端接电阻。
常见误区:不要将DDR3信号连接到HR Bank。HR Bank的电压最低只能到1.8V,而DDR3L的标准电压是1.35V,DDR3是1.5V。虽然1.8V Bank可以勉强工作,但会导致信号完整性严重劣化,甚至损坏芯片。

3.3.3 案例拆解:LVDS接口的PCB布局与FPGA配置

某项目需要接收外部LVDS摄像头数据,速率为 720p@60fps,像素时钟为74.25MHz,4通道MIPI CSI-2接口。

关键输入参数:MIPI差分对阻抗要求100Ω±10%,FPGA的LVDS引脚内部有100Ω差分端接电阻,但MIPI规范要求外部端接。

实际操作:

  1. 在原理图中,MIPI的D0P/D0N连接到FPGA的LVDS对引脚,并在靠近FPGA引脚处放置100Ω电阻。
  2. 在PDS中,将IO标准设置为LVDS_25(如果Bank电压为2.5V)或LVDS_18(如果Bank电压为1.8V)。
  3. 启用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%