4.3 可编程逻辑器件与FPGA


4.3 可编程逻辑器件与FPGA

本节摘要:当逻辑功能从"出厂烧死"进化到"随时重写",数字电路的开发方式被彻底改写。本节沿 PAL、GAL、CPLD 到 FPGA 的演化线索,讲清查找表架构为何能扮演任意组合逻辑,介绍硬件描述语言这门"以文字造电路"的工艺及其开发流程,并用一块替代停产旧器件的实战项目展示完整走位。

被写死的逻辑有多疼

上一节的表决器用一片通用门芯片实现,代价是换需求就换板子。工业界曾经的主流做法更进一步:把整个控制逻辑做进一片可编程阵列逻辑 PAL——内部的与或阵列通过烧断熔丝定形,比十几个门芯片紧凑得多。但熔丝是一次性的,烧错一颗整片报废;后来带电擦除的 GAL 解决了重写问题,又输在规模太小:几十个宏单元塞不进真正的系统级设计。疼点始终如一:逻辑大了之后,一次修改的成本高到无法迭代。

FPGA 的出现把这口气彻底松开。它的基本单元不是现成的门,而是一格一格的查找表 LUT——本质是一块小号真值表存储器:把任意三输入、四输入甚至六输入函数的真值表预存进去,地址即输入、数据即输出,于是"实现一个逻辑函数"退化成"往存储器里写一行配置"。配上触发器、进位链和遍布全片的可编程布线海,成千上万个这样的格子可以随时组织成任何时序电路。掉电易失的 SRAM 工艺让重写次数近乎无限,每次上电由外部闪存自动装载一遍配置流。

硬件描述语言:给电路写自述文件

配套的革命发生在表达方式上。工程师不再逐个画门,而是用 Verilog 或 VHDL 这样的语言描述行为与结构,综合工具负责翻译成具体的门级网络。与软件最不同的一点必须拧过来认识:语句描述的是同时存在的硬件,不是依次执行的步骤——两行赋值意味着两条各自常开的通路,而不是先后两次运算。时序逻辑靠 always 块配合时钟沿触发建模,经典的二分频计数器短短几行:

// 一个简单的四位计数器 加按键清零 module counter4 ( input wire clk, // 时钟输入 input wire rst_n, // 低电平有效的复位 input wire clr, // 手动清零按键 output reg [3:0] cnt // 当前计数值 ); always @(posedge clk or negedge rst_n) begin if (!rst_n) cnt <= 4'b0000; // 异步复位 归零 else if (clr) cnt <= 4'b0000; // 按键按下也归零 else cnt <= cnt + 1'b1; // 每个时钟沿加一 end endmodule

开发流程是一条流水线:编写代码 → 综合成网表 → 布局布线落到具体资源 → 生成比特流 → 下载验证。中途每一环都有仿真手段可查,尤其在综合之前的行为级仿真就能发现九成逻辑错误——这比焊完才发现少烧好几根头发。

维度 CPLD FPGA
基本单元 与或阵列 宏单元 查找表 触发器阵列
存储工艺 多为非易失 常见 SRAM 需外配加载
上电时延 即时 数毫秒配置等待
规模 几百到几千门 百万门起步直至千万
典型用途 地址译码 上电胶合逻辑 大型状态机 DSP 图像处理

选型的粗规矩一句话:小而要立刻活、用 CPLD;大而要并行算、用 FPGA。介于两者之间的胶合逻辑现在大量被微控制器顺手吞掉了。

案例:抢救一台控制器停产的旧设备

背景是一家食品厂的贴标机主控板损坏,核心是一片二十年前的一次性 OTP 器件,型号早已停产且没有源代码。备件渠道报价离谱,交期遥遥无期。团队决定用现代 FPGA 板卡重建该片的功能,再以适配座形式装回原插座。

操作第一步是逆向提取真值表。借来一台尚存的同型主板作金标准,用逻辑分析仪同时夹住芯片全部引脚,录制设备在手动慢动作模式下各种工况下的波形。第二步归纳时序关系:反复比对录波后确认该片只有两位内部状态(对应步进电机两相的先后顺序),输入是传感器脉冲与方向信号,属于米利型时序机,行为完全可以用一张状态转移表穷举。第三步建立工程:将状态图写成 Verilog 模块——两个 process 分别承担次态译码与输出寄存,仿真台用录波数据回灌验证八百多组序列无一失配。第四步落板调试:引脚约束逐一对照适配座的管脚映射表,下载后先空跑逻辑分析仪旁听对比新旧行为一致,再连接真实负载限流试运行两小时。第五步固化收尾:配置镜像写入板上串行闪存,上电自动加载,整机交付。

结果超出预期:重建件成本不到外购备件的十分之一,逻辑层留有裕量,顺势把原来需要的两片外围缓冲器一并吸收进同一颗 FPGA,板卡元件数反而下降。解读层面的经验同样值钱——逆向的关键资产不是仪器而是录制的原始数据,它既是设计的输入也是验收的标准,全程先建模再动手才敢碰生产设备;对一次性老器件而言,"黑盒等价"就是法律意义上的正确,不需要也无法还原内部结构。

变式空间顺着三个方向铺开。其一,同样的逆向套路可用于把多片中小规模标准逻辑收缩成单颗器件,降低采购与备货风险,业内叫逻辑整合。其二,往功能里加则要以浮动的时钟域为戒——跨时钟路径不加同步器是 ASIC 与 FPGA 通用的第一杀手,初学者几乎人人中招一次才算毕业。其三,若想体验全套生态而不购硬件,各家厂商的免费综合工具都提供纯仿真模式,本节的计数器从写到跑通一个下午足够。

新手必立的三条纪律

进入这个领域之前,先把三条保命纪律贴在工位上。其一,时钟要少而干净:整个设计尽量由一个主时钟驱动,确需第二个时钟域时,跨域的每一个信号都必须经过两级触发器同步器或握手协议,图省事的直接连线就是未来某个深夜死机的伏笔。其二,复位要想清楚:异步复位的释放时刻若与时钟沿竞争,状态机可能在开机瞬间走进非法态;成熟做法是复位同步释放——异步拉低、同步抬升,让出发动作本身也守规矩。其三,学会读静态时序报告:综合工具会告诉你每条路径的最坏裕量是正是负,负值即意味着该路径在极限工艺角下必然出错;不要等板子偶发异常才想起这份报告,它本该在下载前就把风险摊在桌面上。

这三条之外还有一层工程组织维度:版本管理对硬件工程的约束比软件更苛刻——一份改了引脚却没更新约束文件的代码可以让配置镜像直接烧错管脚。把每一次生成的比特流与对应源码版本、约束文件绑定归档,是从业余爱好迈向职业开发的第一道门槛;本案项目交付时附上的那份"录波数据加版本清单"档案包,日后在一次硬件迭代争议里成了唯一可信的时间证人。

💡 把 FPGA 想成一盒可无限擦写的乐高,而不是一块更高级的芯片:真正学会的不是某一家的软件操作,而是"把时间切成拍子、把并发写成组件"这套思路。

打包带走五句:

  • 演化主线一步不离用户之痛:一次性、可擦除、大规模,三代各解一代痛点。
  • 查找表是真值表的物理化身:任意函数变成一行存储器写入。
  • HDL 描述的是并存的硬件:行为不是顺序执行的脚本。
  • CPLD 抢答、FPGA 主战:按规模与时延特征分工。
  • 逆向工程的底气来自录波数据:它是规格书也是验收单。

至此,思考的语言、感官的桥梁、重构的海已凑齐一套完整的数字方法论。下一章调转船头去看电子电工版图的另一半——不再计较毫伏与兆赫,而在千瓦与公里的尺度上运筹能量。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U