本文转载自:FPGA入门到精通
FPGA布线拥塞(Routing Congestion),是指在FPGA布局布线(Place & Route)阶段,设计所需的信号连接需求超过了芯片内部特定区域的物理布线资源容量,导致信号线无法按最优路径连接,甚至完全无法布通的现象。
简单来说,就是芯片内部的“交通堵塞”。
FPGA 内部的连线资源(金属线段、可编程开关矩阵)是预先固定的,并不是有需求就能多造几根。
当把大量逻辑密集塞进同一个区域,而它们之间又有错综复杂的连接时,这片区域的“线路通道”就会被占满,形成拥塞。
一、FPGA布线资源的基本构成
FPGA内部没有固定的金属导线,其互联网络由以下核心部分组成:
布线轨道(Routing Tracks):芯片内水平、垂直走向的金属连线,分为长线(跨区域)、中线、短线(CLB内部)。
开关矩阵(Switch Matrix):连接不同布线轨道的可编程开关,是信号转向、交汇的核心节点。
可编程互联点(PIP):控制信号能否接入特定连线或模块的开关。

二、布线拥塞的主要类型
1、局部拥塞(Local Congestion)
现象:仅发生在芯片的某一小块区域(如某个Slice列、BRAM/DSP周围)。
原因:该区域逻辑密度过高、模块扎堆、高扇出信号集中穿越。
后果:局部绕线变长、时序恶化,是最常见的拥塞类型。
2、全局拥塞(Global Congestion)
现象:整个芯片布线资源普遍紧张,利用率超标。
原因:设计规模过大、总线过多、整体复杂度超出芯片承载能力。
后果:布线时间剧增,甚至直接导致布线失败(“Not all nets routed”)。
3、短线/长线拥塞(Short/Long Wire Congestion)
短线拥塞:CLB内部、相邻单元间的短连线耗尽(常见于进位链、MUXF密集处)。
长线拥estion:跨区域的长连线资源耗尽(常见于多SLR芯片、大量跨模块数据传输)。
三、产生拥塞的核心原因
1、设计与代码层面
高扇出信号(Fanout):复位、时钟使能、总线控制信号等驱动数百个寄存器,占用大量布线资源。
逻辑过于密集:超大模块、深度嵌套的组合逻辑,导致布线需求爆炸。
不合理的资源使用:过度使用进位链、MUXF、DSP/BRAM,且集中排布。
控制集过多:寄存器使用不同的时钟/复位/使能,无法有效打包,浪费布线资源。
2、物理布局层面
布局不合理:相关逻辑单元距离过远,或功能模块过度集中(Hotspot)。
资源分布不均:DSP、BRAM等硬模块在芯片上成列分布,设计未对齐导致绕线复杂。
跨Die/SLR通信:在3D堆叠FPGA(如SSP)中,大量信号跨超逻辑区域(SLR),引发拥塞。
3、工具与约束层面
时序约束过紧:迫使路由器为满足时序而反复尝试,牺牲布通率。
综合/布局参数保守:未开启拥塞驱动优化,布局密度过高。
四、拥塞的典型后果
1、布线失败
布线失败 (unroutable)工具在最大迭代次数后仍有部分信号找不到合法路径,无法生成可下载的比特流。
2、时序恶化
信号被迫绕远路,延迟大增,导致建立/保持时间违例。
3、性能下降
最高工作频率上不去,动态功耗增加。
4、迭代周期变长
每次布局布线耗时数小时,严重影响开发效率。