8.2 FPGA 与 ASIC:两条实现路线 本节摘要:同一份 RTL,落在 FPGA 上走综合、适配、时序分析、比特流四步;做成 ASIC 走综合、布局布线、时钟树、签核等更多步。两条路线共用 RTL 与约束的思想,但工程节奏完全不同:FPGA 可反复烧写、当天见结果,ASIC 一次定稿、不可回退。 可综合资格审过了,接下来选实现路线。FPGA 与 ASIC 是硬件落地的两条路:前者在可重构的现成芯片上部署,后者定制一颗专用芯片。同一份 RTL 两条路都能走,但流程、周期、成本结构天差地别——这一节把两条路线的工序并排铺开。 FPGA 路线:当天见结果的循环 FPGA 的基本盘是查找表加触发器的可编程阵列:任何组合函数都可以烧进查找表,触发器存状态,可编程互连把它们接起来。
本节摘要:同一份 RTL,落在 FPGA 上走综合、适配、时序分析、比特流四步;做成 ASIC 走综合、布局布线、时钟树、签核等更多步。两条路线共用 RTL 与约束的思想,但工程节奏完全不同:FPGA 可反复烧写、当天见结果,ASIC 一次定稿、不可回退。
可综合资格审过了,接下来选实现路线。FPGA 与 ASIC 是硬件落地的两条路:前者在可重构的现成芯片上部署,后者定制一颗专用芯片。同一份 RTL 两条路都能走,但流程、周期、成本结构天差地别——这一节把两条路线的工序并排铺开。
FPGA 的基本盘是查找表加触发器的可编程阵列:任何组合函数都可以烧进查找表,触发器存状态,可编程互连把它们接起来。流程四步:综合阶段,工具把 RTL 逻辑化简后映射到目标器件的查找表单元;适配阶段决定每个单元落在芯片的哪个物理位置、互连走哪条线路——布线延迟在 FPGA 里占比很大,同一份代码换个布局,时序结果可能差出一截;时序分析按真实布线结果核算每条路径;收敛后生成比特流,烧进芯片立即可跑。
FPGA 的工程魅力在循环快:改一行代码到板上看到效果,短则几分钟。代价是效率与成本——查找表实现的电路比专用硅片慢得多、功耗大得多,单片成本在大批量下远高于 ASIC。所以 FPGA 的典型角色是原型验证、小批量产品、算法探索与协议还未冻结的领域。
ASIC 把 RTL 定制成真正的硅片:综合映射到标准单元库(工艺厂提供的与或非触发器单元),布局布线在裸片上物理实现,时钟树综合保证时钟到达每个触发器的偏差可控,最后经过物理验证与时序签核交付版图给晶圆厂。工序多、每道工序都有专业工具与专业团队,设计周期以月计;掩膜版与流片费用高昂,但大批量下单颗成本极低,性能功耗比是 FPGA 难以望其项背的。
两条路线对 RTL 设计者的要求差异集中在三点。其一,ASIC 的修改成本是流片级的,验证与评审的严格度完全不同——FPGA 上可以试错的理念,到了 ASIC 就是事故流程。其二,跨时钟域与复位这类物理敏感设计,FPGA 工具会内置部分保护与矫正,ASIC 则完全依赖设计者自己写对。其三,ASIC 需要「可测性设计」——扫描链、内建自测试等结构要在 RTL 阶段预留,FPGA 通常不管这些。

时序约束文件告诉工具「你的设计要在什么条件下跑」:时钟频率与占空比、输入输出端口相对时钟的延迟预算、多周期路径与伪路径的豁免声明。工具的全部努力都围绕约束展开——没有约束的综合与时序分析是漫无目的的。
# 时钟:周期 10 纳秒,占空比一半 create_clock -period 10.000 -name sys_clk [get_ports clk] # 输入延迟:外部数据相对时钟最晚 3 纳秒到达 set_input_delay 3.0 -clock sys_clk [all_inputs] # 输出延迟:内部数据到外部最晚 2.5 纳秒稳定 set_output_delay 2.5 -clock sys_clk [all_outputs] # 伪路径:跨异步时钟域的路径,交给同步器,不做时序分析 set_false_path -from [get_clocks clk_a] -to [get_clocks clk_b]
约束写法的三条纪律:时钟必须定义准确(后续一切时序计算的基准);伪路径必须谨慎——把真问题豁免掉等于对工具撒谎,时序报告看着干净、板上照样出错,第 6 章的同步器就是伪路径的正确豁免对象;约束与设计同步演进,时钟改频、接口改协议,约束文件是变更评审的必查项。
案例展开:一个约束缺失引发的「假收敛」。 背景:某 FPGA 项目时序报告全部通过,上板后数据通路偶发错乱。操作:检查约束文件,发现新加的外部存储器接口忘记添加输入延迟约束——工具按零延迟假设分析该接口,报告自然全绿;补上真实延迟约束后重新分析,该接口路径大量违例。结果:按违例报告调整接口逻辑(输出寄存器前移、关键路径打拍),重新收敛后上板稳定。解读:时序报告的可信度完全取决于约束的完备性——「报告全绿」的含义是「在你声明的条件下达标」,约束漏声明,绿就是假的。物理层的错误在仿真里几乎不可见,约束审计是唯一的防线。变式:把「新增接口必须同步登记约束」写进流程清单,代码评审时约束变更与代码变更同审,这类案子就从源头掐灭。
是常见路径但不是必经路径。FPGA 原型的价值在「用真实速度跑真实数据」——仿真跑一秒的数据,板上秒级就能跑完,协议互操作、系统联调只有这条路能做。但它不能替代 ASIC 的严格验证:FPGA 工具悄悄修掉的跨时钟域问题、查找表结构掩盖的时序形态,到了 ASIC 全部原形毕露。正确的定位是互补:FPGA 验系统行为,ASIC 流程验设计本身,两者的验证清单不同,谁也替代不了谁。
核心逻辑不用,边界设施要。可综合子集在两条路线上是共通的,这也正是 RTL 作为「寄存器传输级」抽象的价值。但存储器、时钟资源、IO 寄存器这些平台专属资源,各家的推理规则和例化方式不同——工程做法是把平台相关的部分隔离到独立的适配层模块,核心算法与协议逻辑保持平台中立。换平台时只重写适配层,这正是分层设计在硬件领域的投影。
先看报告再回答。违例路径若是「约束确实合理、路径确实太长」,改代码——打拍、切流水、改结构;违例路径若是「约束本身过紧或写错」(比如把伪路径当真路径分析),改约束。最忌讳的处置是不看路径细节直接放宽约束——报告绿了、问题还在板上等你自己。约束是需求的事实陈述,不是收敛失败时的泄压阀。
流程走通了,工程还剩一个永恒的裁量题:面积、功耗、速度怎么换。下一节算这笔账。