尧图精选

FPGA硬件在环验证:仿真与真实芯片之间的关键桥梁

🕒 发布时间:2026/9/8 22:44:53 📁 来源:尧图网络
先说个我自己的翻车经历。之前调一块图像信号处理芯片RTL仿真、系统级模型仿真做了整整一个月功能覆盖率拉到90%以上报告全绿。板子回来一上电720p分辨率下直接花屏而且只在画面右侧出现条纹时有时无。当时第一反应是sensor配置不对换了几种配置依然复现。后来才意识到问题根本不在功能逻辑在我验证的方式——我测的是“芯片的模型”不是“芯片本身”。从那以后我把FPGA硬件在环验证当成项目标配FPGA模拟真实外部环境真实芯片作为被测对象直接接入。这篇文章就把我实践里的踩坑和心得完整写出来给做芯片验证、嵌入式系统调试和FPGA开发的朋友一个参考。在很多团队里“验证”这个词默认等于“仿真”。跑通一个testbench拉一堆波形看一眼覆盖率就敢签板。但你有没有想过一个问题仿真器里的芯片响应是开发人员用代码写出来的“理想行为”可真实芯片是一块有物理特性的硅片它有时序偏差、有电气噪声、有引脚串扰、有上电毛刺。这些非理想特征恰恰是系统集成时最容易导致死机、花屏、乱码、偶发异常的根源。而FPGA硬件在环验证要解决的就是把这个“模型和现实之间的缝隙”填上。1. 仿真模型的“理想国”和真实芯片的“人间烟火”1.1 为什么模型总会在某个时刻骗你模型本身没有错它错在“太干净”。数字仿真里信号跳变是零延迟的一个D触发器的Q端在时钟上升沿之后立刻更新而在真实芯片里Q端的跳变要经历管脚到内部逻辑的传播延迟这个延迟还随着电压、温度、工艺角变化。模型里总线上的地址和数据是严格对齐的真实芯片里地址信号和数据信号可能因为走线长度不同到达时间差出几个纳秒。这不是说仿真没有价值恰恰相反仿真在早期功能验证中效率极高。问题在于仿真的抽象层级决定了它看不见物理世界的东西。如果你验证的目的是“确认逻辑正确”仿真是够用的如果你验证的目的是“确认芯片能在这个系统里稳定工作”那就必须在物理层面做测试这就是硬件在环验证存在的理由。我做过一个对比实验同一段FMC读时序在仿真模型里地址建立时间的裕量是3.5ns看起来非常安全但把同一块STM32H743接上FPGA用逻辑分析仪实测地址信号从FPGA管脚出去经过PCB走线、连接器、再到芯片引脚建立时间裕量只剩不到1ns。假如再把温度拉到70度芯片管脚输入延迟变大直接采错地址。这种问题仿真模型永远不可能告诉你因为模型里根本没有“PCB走线”和“管脚寄生电容”这两个概念。1.2 真实芯片和仿真模型的行为差异清单我整理了一张表做硬件在环验证时我几乎每隔一段时间就会回来对照一次看当前的问题是否属于这些差异的某种表现形式。维度仿真模型里的表现真实芯片上的表现对验证结果的影响信号跳变理想0/1瞬间切换有上升沿/下降沿时间有过冲和振铃边沿缓慢可能导致后级误采样时序关系固定延迟确定性执行随PVT变化存在时钟抖动建立/保持时间裕量不可控亚稳态基本不体现真实存在尤其在异步信号采样时不加同步器会导致随机死机上电行为寄存器直接赋初值有复杂的上电序列和复位释放过程需要真实复位电路配合总线竞争模型里不会同时驱动真实双向总线存在驱动重叠风险可能烧毁管脚或产生总线冲突温度漂移恒定25度或固定条件温升后IO电平、延迟都会漂移高温环境下偶发failure引脚噪声无噪声概念有串扰、地弹、电源纹波高速接口误码率上升这张表不是说模型没用而是说模型和真实芯片的分工不同模型帮你把功能逻辑快速迭代到99%正确真实芯片帮你把那剩下的1%物理域问题暴露出来。FPGA硬件在环验证恰好是把这两者衔接起来的技术路径——被测对象用真实芯片环境用可编程的FPGA来模拟两边一对接你能看到真实芯片在可控环境下的真实反应。2. FPGA硬件在环到底解决了什么“真问题”2.1 一个直观的理解方式真车测试而不是模拟器刷圈把芯片当成一辆车仿真就像在游戏模拟器里刷圈速——路况恒定、轮胎抓地力恒定、没有风阻变化你可以无限次重来但永远不知道真车在真实赛道上的操控极限。硬件在环验证则是把真车拉到一条专用赛道上赛道上的每一个弯道、路面起伏、侧风都由FPGA这个“赛道建设方”来布置你可以随时调整赛道的难度去考验车辆的极限。落到具体技术上被测芯片DUT就是那辆“真车”FPGA负责搭建这条“赛道”——也就是芯片运行所需的完整外部环境。这个环境可以是一颗CMOS sensor的MIPI输出、一个Biss-C编码器的位置反馈、一组FMC总线上的外部存储器、一个UART主机、甚至是一堆故意产生的错误信号。在仿真里这些全部是用SystemVerilog/C模型模拟的“理想节点”在硬件在环里FPGA用真实的IO、真实的时序把这些场景造出来让真实芯片去跑。2.2 FPGA在验证平台里的三重身份在硬件在环平台上FPGA同时承担了三个角色理解了这三个角色你就理解了这个平台该怎么设计。环境模拟器。FPGA按照协议规范在管脚上产生芯片需要的时钟、数据、控制信号。比如做图像处理芯片的验证FPGA内部跑一个MIPI D-PHY发送端按指定帧率、分辨率输出测试图像做电机控制芯片的验证FPGA内部实现Biss-C或者绝对值编码器协议把模拟的位置信息实时回传给MCU。这个角色替代的是真实的外设好处是场景可编程、可重复、可极端化——你可以让sensor在某一帧故意缺一行数据观察DUT怎么反应。总线跟踪器。FPGA实时监听DUT与外部存储器/外设之间的总线交互把地址、数据、控制信号采样下来通过ILA或者内部缓存上传到上位机分析。传统逻辑分析仪要接几十根线FPGA内部采样既省事又可以做到很宽的位宽还能在触发条件满足时“冻结现场”——有点像飞机上的黑匣子。故障注入器。这是硬件在环最有价值的地方之一。FPGA可以主动在总线上插入毛刺、拉低某个信号几个周期、把连续的两帧数据之间的空白期突然缩短、故意给错误校验码然后观察DUT的容错逻辑是否正常工作。仿真里做故障注入要改testbench真实系统里做故障注入往往很危险但FPGA在环里做故障注入既安全又精准因为这本质上就是“改FPGA内部逻辑”而不是碰真实硬件。2.3 什么样的项目最值得做硬件在环不是所有项目都需要搭一套完整的硬件在环系统但以下几类项目我强烈建议你尽早把HIL平台提上日程有外部高速接口的芯片/模组比如MIPI、PCIe、Ethernet、DDR控制器。这些接口的物理层行为复杂仿真模型很难完整覆盖信号完整性、时序抖动、电压摆率等问题真实芯片必须接入实际IO才能暴露风险。闭环控制类系统电机控制、电源数字控制、惯性导航解算。这类系统的关键问题在于“真实世界反馈”的时序比如编码器信号延迟、ADC采样时刻抖动这些在仿真里一句“always #10”就带过去了真实系统里要命的往往就是这几个纳秒。长期稳定性测试比如要做72小时不间断运行的压力测试。仿真跑72小时基本不现实硬件在环则可以一直跑下去配合自动检查脚本跑完自动上报异常。需要大量边界场景的协议验证比如加载本地模型做推理的芯片需要模拟各种外部输入格式异常、数据中断、地址越界等场景。FPGA作为环境提供方可以很方便地构造这些边界条件。3. 搭建一套可用的FPGA硬件在环平台选型、架构、连线3.1 硬件选型决策不追求最贵追求匹配关于平台选型很多人一上来就问“用哪块开发板”其实第一个问题应该是“被测芯片的IO环境是什么”。我习惯从三个维度评估接口数量和电平标准。如果DUT大部分是3.3V LVCMOS接口一块主流的Artix-7或者Cyclone 10开发板就足够它们有大量3.3V bank配FMC扩展口接各种小板子方便。如果DUT有LVDS、MIPI、JESD204B这类高速差分接口就需要FPGA的HP bank、GTP/GTY高速收发器这时候要选带高速收发器的型号比如Kintex-7或者是Zynq UltraScale。逻辑资源和片上存储。FPGA要在内部实现一个完整的“虚拟外设世界”这块逻辑消耗不容小觑。以我做过的MIPI sensor模拟器为例仅D-PHY发送逻辑加Line Buffer就会吃掉一个小型FPGA近60%的资源。经验是选型时按你预估逻辑量的2~3倍去选给后期故障注入、多通道监控留空间。调试接口友好度。强烈建议选带片上逻辑分析仪ILA的FPGA工具链比如Xilinx Vivado或者Intel Quartus里的Signal Tap。硬件在环验证的本质是“抓真实芯片在真实环境下的行为”能不能快速触发并观测到关键总线直接决定排查效率。3.2 架构设计把“虚拟外设世界”拆成几个模块一套典型的FPGA硬件在环平台内部逻辑我习惯拆成下面几个模块各模块之间接口清晰方便单独修改和复用。时钟管理模块。用MMCM/PLL生成DUT所需的各种时钟频率同时支持动态调频。动态调频在做“时钟裕量扫描”时特别有用——想知道DUT在哪个频率附近开始出现失败直接把频率往上调不用改代码观察DUT还绷不绷得住。复位序列模块。真实芯片对上电时序很敏感比如核心电压先稳定、IO电压再稳定、复位释放要滞后多少毫秒。在FPGA里把这些步骤做成状态机模拟真实板上电过程比仿真中一根复位信号直接拉高要可靠得多。我曾见过一块芯片在仿真里复位一切正常上板后偶发启动失败最后发现是复位释放时内部锁相环还没锁定加了一个锁定检测才解决——这就是复位序列模块要覆盖的场景。外设模拟器群。根据DUT项目需求实现UART、SPI、I2C、FMC从机、MIPI TX、Biss-C等接口。每个模拟器尽量做成参数化生成比如MIPI的帧率、分辨率、lanes数通过寄存器配置而不是改代码。这样在测试阶段调参数非常快。数据监控与回传。把DUT输出的关键信号、总线事务记录下来通过UART/以太网/JTAG回传到上位机脚本做分析。同时预留ILA探针点出现问题时手动触发抓波形。3.3 连接DUT的关键细节FMC通信实例这里用一个很典型的例子STM32H743通过FMC接口访问FPGA侧的“外部存储器”。这块几乎是热搜里反复出现的组合也很能说明问题。FPGA侧要把自己模拟成一个SRAM类从设备挂在STM32的FMC总线上。这里有几个容易踩的坑地址/数据引脚方向要匹配。FMC是双向总线FPGA侧必须对地址线做输入处理数据线做inout处理。很多人写Verilog时习惯直接用assign data wen ? data_out : 8hzz;但这只是代码层面的做法综合进FPGA后要确认IO引脚是否真的规划成LVTTL/LVCMOS的bidirectional buffer并且方向控制逻辑不能有毛刺否则总线上会出现短暂的驱动重叠。时序约束必须做不能省。下面这段XDC约束是我在FMC连接里经常用的起点具体数值要根据实际PCB延时去算# FMC总线接口约束示例举例实际需按FPGA工具语法调整 # 地址建立时间FMC地址在写信号有效前须稳定 set_input_delay -clock [get_clocks fmc_clk] -max 5.0 [get_ports {fmc_addr[*]}] set_input_delay -clock [get_clocks fmc_clk] -min 1.0 [get_ports {fmc_addr[*]}] # 数据输出延迟FPGA在FMC读周期中给出数据的时间窗口 set_output_delay -clock [get_clocks fmc_clk] -max 6.0 [get_ports {fmc_data[*]}] set_output_delay -clock [get_clocks fmc_clk] -min 2.0 [get_ports {fmc_data[*]}]如果不加这些约束Vivado会默认接口时序非常好综合出的布线可能完全没法在真实芯片的时序要求下工作。这也是很多项目“仿真没事一接真实芯片就挂”的重要原因之一——FPGA内部逻辑没问题但FPGA的IO时序根本没有收敛到DUT能接受的窗口。电平标准要一致。STM32的FMC一般是3.3VArty这类板子的3.3V bank可以直接接但如果DUT是1.8V IO就一定要加电平转换芯片或者选支持1.8V的bank。曾经有人直接把1.8V的IO接到3.3V bank上一次上电就烧了DUT的引脚——硬件在环平台本身是测试设备不能在测试过程中把被测对象搞坏。3.4 调试观测手段怎么布硬件在环验证有一个天然矛盾你既希望DUT“自由地跑”又希望在出问题瞬间能看到DUT内部状态。解决这个矛盾我一般布三层观测最底层FPGA内部ILA触发条件设为“总线协议错误”或“特定地址访问”一旦条件满足ILA抓取前后各1024拍波形相当于把事故现场完整记录下来。中间层FPGA内部的轻量级监控逻辑比如总线事务计数器、错误标志寄存器这些寄存器周期性通过UART上报上位机。跑长稳测试时不需要人盯着波形脚本定时读取寄存器判断状态。最外层示波器/逻辑分析仪接关键管脚。注意要接在高阻探头上探头电容会影响高速信号用普通探头测MIPI这类信号基本是“一测就乱”需要用有源差分探头。4. 实测案例图像处理芯片硬件在环“花屏”排查全链路4.1 项目背景模型全绿真实芯片一上就花这块芯片是一个视频图像处理芯片输入侧是MIPI CSI-2接口内部做ISP处理输出侧是并行DVP接口接显示屏。验证方案里FPGA充当MIPI sensor模拟器按照设定的帧率输出自定义测试图像DUT做ISP处理后把图像数据送到显示端。项目开发阶段我们用芯片厂商的ISP模型做了大量仿真。分辨率从720p到1080p各种光照增益场景全覆盖仿真波形全部正确。这给了团队一个错觉设计应该稳了。结果板子回来后在720p30fps下画面右侧出现规律的竖条纹花屏概率大约5%。而且不是每次都出要跑几分钟到几十分钟才出现一次。4.2 排查链路从现象到根因我当时把排查过程记录成了五步这五步的顺序很关键跳一步就可能绕远路。第一步先排除输入信号源问题。用示波器有源探头抓FPGA输出的MIPI时钟通道和数据通道发现lane间skew大约200ps左右在MIPI规范允许范围内眼图也还干净。用热风枪对着FPGA局部加热模拟高温环境发现MIPI输出指标也没有显著恶化。这一步基本排除了FPGA侧MIPI物理层的嫌疑。第二步对比实验——换真实sensor接上行不行。为了确认是不是“FPGA模拟的sensor信号和真实sensor信号存在某些细微差异”我们直接用一个真实的OV5640接上去结果花屏依旧只是出现频率略低了一点。这时候基本锁定问题不在输入侧而在DUT内部处理链路或者输出侧。第三步用ILA抓DUT配置寄存器总线。DUT的寄存器是通过FMC接口配置的配置完一次之后理论上寄存器值不该被改。但用ILA抓FMC总线时发现某些寄存器在工作过程中会被DUT内部访问改写而且被改写的地址恰好对应ISP的自动增益控制模块。这就是一个非常可疑的点了——如果增益配置寄存器被异常改写图像亮度/色彩会周期性突变视觉上就可能呈现为条纹花屏。第四步为什么仿真没发现回头翻仿真模型模型里的寄存器配置是完美的、可预测的仿真激励里根本没有模拟DUT内部固件主动改寄存器这种行为。这就是“模型和现实之间缝隙”的具体体现——模型按照你的意图行动现实芯片却有自己的一套逻辑。第五步追到根因——固件指针越界。通过FPGA里加的总线事务监控发现DUT内部固件在某种特定中断触发时会对一个结构体数组进行写操作但在特定帧号下写完数组最后一个元素后指针没有回卷继续往下写到了寄存器配置区。这个问题在纯仿真里很难暴露因为仿真里的中断时序是理想化的而真实系统里中断、DMA、总线抢占互相交织把这个边界条件逼了出来。4.3 这个案例给硬件在环验证提了什么醒这个案例的根因虽然最终是在固件层面找到的但如果少了FPGA硬件在环这一步我们很可能还在“MPI接口信号质量”上打转。原因很简单真实芯片跑起来之后系统内的中断、DMA、总线仲裁、寄存器读写会形成一种复杂的交互节奏这种交互节奏只能在实际运行中产生仿真里哪怕写了再复杂的激励脚本也很难复现出那种“偶然冲突”。我后来复盘这个问题的本质是“软件行为和硬件行为之间的边界在真实运行时发生了重叠”。你单独做固件单元测试走不到那个中断分支单独做硬件仿真仿真器里的固件模型又不会产生这种随机时序。只有在硬件在环这个“真实芯片可重构环境”的组合里两者才能碰撞出问题也才能被系统性地捕获。这也是为什么我反复强调这不是一个可选增强功能而是芯片级和系统级验证的必要手段。5. FPGA硬件在环平台调试的禁区与实战技巧5.1 时序约束不收敛一切调试都是白费在仿真里你写always (posedge clk) q d;就完了仿真器不会管你时钟频率能不能收到。但综合成FPGA之后逻辑要放在真实的LUT/FF里走真实的布线。如果你在环平台跑在100MHz以上逻辑又比较密集很轻易就会出现时序违例导致FPGA内部状态机乱跳——这时你很可能会误判成“被测芯片的问题”其实是FPGA自己先崩溃了。我的几个实际经验在综合前做report_clock_intersection看看有没有意外产生的跨时钟域路径。对FPGA内部那些“纯测试逻辑”和“真实环境模拟逻辑”做合理的时序分组不要互相拖累。跑在环测试前先运行一遍位流自检程序让FPGA输出一个已知的方波序列用示波器确认时钟树和关键IO没问题再接入DUT。5.2 跨时钟域与异步信号真实的DUT可不会和你协商时序DUT和FPGA之间有独立时钟域DUT输出的异步信号比如“中断请求”“忙标志”进入FPGA时如果不做同步处理轻则偶发丢事件重则让FPGA内部状态机进入非法状态。这是新手最容易踩的坑。处理异步信号的准则很朴素单比特信号用两级同步器多比特数据信号用握手或异步FIFO如果信号要作为复位用必须额外做复位同步释放。下面是两级同步器的例子// 异步信号同步化示例 reg sync_stage1, sync_stage2; always (posedge clk) begin sync_stage1 async_in; // 第一级可能采到亚稳态 sync_stage2 sync_stage1; // 第二级给亚稳态一整个周期去收敛 end wire async_in_sync sync_stage2;千万不要为了方便直接把异步信号拿来当组合逻辑的使能或者时钟。我看到过有人为了“提高响应速度”把DUT的一个外部信号直接接到了FPGA内部逻辑的时钟端结果该信号上正常存在的毛刺导致FPGA内部计数器乱飞最后排查了两周才发现是同步问题。5.3 电平匹配、驱动强度和串并联电阻小细节大风险做硬件在环平台电平匹配是原则问题。DUT有1.2V、1.8V、2.5V、3.3V、5V多种IOFPGA的bank电压由硬件平台决定混接轻则信号异常重则烧毁管脚。选开发板时优先选bank电压可通过跳线单独配置的类型不同电压域之间用双向电平转换芯片或者隔离芯片去适配。驱动强度也要留意。FPGA IO默认驱动强度有时候比真实外设更强驱动强意味着边沿更陡反射和振铃也会更明显。如果DUT对过冲敏感该串联33Ω~100Ω电阻就得串别嫌麻烦。另外长排线连接FPGA和DUT时建议关键信号做阻抗匹配能走LVDS就走LVDS实在只能走单端的情况下降低速率、加端接电阻别指望几十厘米的杜邦线能在高频下正常工作。5.4 电源和地弹测试环境也会干扰被测对象FPGA在高速翻转时会产生很大的动态电流引起地弹如果FPGA和DUT共用供电/地平面地弹就可能耦合到DUT的IO上造成“测试环境引发的假故障”。这种情况最坑因为它看起来是DUT的问题实际上是你平台的问题。我一般这么处理FPGA和DUT各自使用独立的低压差稳压器LDO供电单点共地DUT的核心电源和IO电源分开滤波DUT附近加足够的去耦电容比如10uF钽电容加100nF陶瓷电容并联。做高速接口时FPGA的IO供电与DUT的IO供电不要用同一路电源避免瞬态电流互相干扰。5.5 那些“看起来不是问题”的工程坑还有一堆零零碎碎的坑每一条都是我或者同行用加班费换来的连接器的接触电阻会随插拔次数变大导致信号质量逐渐劣化测到某一天突然失败先别怀疑设计拿万用表量一下连接器接触电阻。FPGA配置完成后未使用的IO默认状态可能和你的设计预期不一致需要在约束里显式设置PULLUP/PULLDOWN否则悬空引脚可能引入干扰。有些开发板的LED、按键会占用特定IO下载器/JTAG链也会和用户逻辑产生竞争做最终测试前务必核对引脚占用。长稳测试中上位机脚本要加看门狗避免脚本“假死”导致整个测试过程中断而无人察觉。6. 从“能跑”到“测准”自动化回归与数据闭环6.1 把仿真用例迁移成FPGA在环用例的思路做硬件在环验证最忌讳的是“只跑一个happy path”然后宣布验证完成。仿真里的测试用例是一个巨大的资源库但不可能直接把UVM testbench搬到FPGA里因为UVM是基于软件仿真器的机制。我的迁移策略是这样把testbench中那些“验证DUT响应是否正确”的激励生成部分改写成FPGA内的状态机或脚本序列。把“期望输出”的计算部分保留在PC端用Python/MATLAB做参考模型实时接收FPGA回传的DUT输出和参考模型比对。对于随机性较强的激励PC端脚本通过UART/以太网给FPGA下发随机种子FPGA上的激励发生器根据种子产生不同序列。这样既保留了随机验证的特点又做到可复现。6.2 实时比对别等人眼发现问题人眼盯屏幕找问题效率太低而且会漏。我在做图像类芯片验证时会给FPGA设计一个简单的像素差异检测模块DUT输出每一行像素的同时FPGA把该行像素数据通过内部FIFO转给参考模型模型同步生成期望像素两边逐像素比对不一致时立即记录像素坐标和错误类型并抓取上下文信号。这种做法把问题发现时间从“几分钟”压缩到“几个时钟周期”而且在错误出现的瞬间整个现场状态都被保留下来复现和定位难度都大幅降低。做电机控制或者传感器融合类项目时同理FPGA内实现一个卡尔曼滤波器的参考模型实时对比DUT解算出的姿态角误差超过阈值就触发记录。6.3 参数扫描和故障注入要成为常规测试项硬件在环平台最大的优势之一就是能安全地做“边缘测试”。这里我用得最多的是三种时钟频率扫描。用PC脚本通过寄存器控制FPGA内的MMCM动态调整频率从DUT规格范围下限一直往上加每次频率档位维持几分钟看DUT在哪个频率附近开始出现错误。这可以快速找到系统时序裕量的实际边界比你在仿真里拍脑袋设一个“最差PVT”要可信得多。供电电压扫描。配合可编程LDO让DUT的供电电压在一定范围内缓慢变化模拟电池电压跌落或者电源波动。很多芯片在低压临界状态下会有闪断、复位、逻辑异常等问题这种测试在普通功能仿真里完全做不了但恰恰是产品可靠性的关键考验。故障注入。这是硬件在环和“普通开发板调板”之间最大的区别所在。普通调板你只能“等故障出现”硬件在环你可以“制造故障”让FPGA在总线上强制插入一个错误位、拉低某个握手信号几个周期、多给一帧数据或者少给一帧数据、在MIPI序列中间插入一个非法包。观察DUT是否按设计预期做出反应。这部分做扎实了芯片的容错能力和异常处理逻辑才算真正被验证过。6.4 数据闭环每一次跑测都要留痕硬件在环验证跑出来的海量数据如果只拿来“看一眼有没有bug”那就太浪费了。我习惯把每次测试的配置参数、FPGA版本、DUT固件版本、测试时长、错误记录日志全部打包存档并且按日期和分支命名。这样当两周后出现一个“历史上偶尔出现过”的问题时你可以快速检索到当时的配置和现场波形。这个留痕习惯在团队协作中尤其重要。经常有人来问“上次那个花屏是在哪个FPGA版本下复现的”如果没有数据闭环只能凭记忆拍脑袋有了完整的测试记录两分钟就能调出来当时的bitstream哈希和ILA波形文件。这在芯片量产前的最后验证阶段可能会帮你省下几周的时间。回到开头那个花屏问题。最终我们通过硬件在环平台拿到了完整的现场波形、总线事务记录和寄存器改写轨迹定位到了固件指针越界修复后连续运行72小时再没有复现。那一次之后我对验证这件事的看法变了很多仿真依然是效率之王但它是“在模型上验证设计”硬件在环才是“在真实芯片上验证系统”。两者不是替代关系而是接力关系——先用仿真把功能性bug扫干净再靠硬件在环把物理域、系统级的问题暴露出来。如果你正在做一个有真实芯片参与的系统集成项目我建议你从一开始就规划HIL平台的接口而不是等板子回来出了问题再临时补。HIL平台不是一次性耗材它可以在芯片选型阶段用来做方案对比在驱动开发阶段用来提前调试软件在量产阶段用来做抽检和故障复现。越早建设复用的收益越大。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →