如何验证CAN FD协议的一致性?

解读

面试官问“如何验证CAN FD协议的一致性”,并不是想听“跑个CAN FD VIP”这么简单。国内SoC项目里,CAN FD往往挂在AXI/APB总线上,作为车规MCU的“一票否决”外设,一致性验证必须覆盖协议层、寄存器层、PHY/IO层、场景层四重维度。面试官真正想确认的是:

  1. 你是否能把“协议一致性”拆成可量化、可追踪的验证目标;
  2. 能否在SystemVerilog/UVM环境里,把ISO 11898-1:2015、ISO 16845-2018的条文变成可执行的covergroup、coverpoint、assertion;
  3. 是否具备定位“边界-异步-错误注入”三角问题的实战经验,比如采样点漂移、Transmitter Delay Compensation、Bus-off恢复、FD与Classic混跑等;
  4. 能否给出国内流片前sign-off checklist,让质量部、客户、第三方实验室(如中国汽研、中汽研华诚)一次通过。

知识点

  1. 协议层:ISO 11898-1:2015 8.5~8.9帧格式、DLC编码、Stuff Count、CRC17/CRC21、ACK Slot、ESI、BRS、FDF;ISO 16845-2018 一致性测试套件的12类118条测试用例。
  2. 寄存器层:CAN FD Core寄存器映射(含过滤、FIFO、TTCAN、TSSC)、Tx Event FIFO、ECC中断、时钟域crossing(CANCLK/PCLK/AXI)。
  3. PHY/IO层:采样点设置(SP 70–90%)、Transmitter Delay Compensation(TDCO、TDCF)、SJW、Loopback、Silent模式、GPIO复用、共模扼流圈仿真模型。
  4. 验证方法学:UVM-SV + CAN FD VIP(Siemens、Synopsys、Cadence)、Formal App(Questa FEV、VC Formal)、硬件加速(Zynq UltraScale+ FPGA原型 + 真实CAN FD节点)、错误注入(Bus fault、Bit flipping、Stuck-at、Transient pulse)、Coverage Driven:协议covergroup、功能covergroup、代码coverage、Toggle、FSM、Assertion coverage。
  5. 国内车规要求:AEC-Q100 Grade1温度、EMC-CI 200V、ISO 7637-2 Pulse5a、功能安全ISO 26262 ASIL-B/D,验证报告需满足NMPA(国家药监局)/CATARC备案格式。

答案

我会把“CAN FD协议一致性验证”拆成五步,每一步都给出可落地的UVM组件、断言、覆盖率及sign-off标准,确保国内第三方实验室一次通过。

第一步:制定验证计划VP(Verification Plan)

  • 依据ISO 16845-2018把118条官方测试用例映射到功能场景,再叠加车规场景(冷启动-40°C、125°C、低电池电压9V、Jump Start 24V)。
  • 用Excel-to-CSV脚本自动导入到JIRA,每条用例对应一条covergroup,做到“一条用例一行covergroup”,方便质量部审计。

第二步:搭建UVM环境

  • 使用Synopsys CAN FD VIP做DUT的“黄金模型”,但把VIP的timing模型关掉,只用协议包,防止“VIP自己跟自己一致”的假pass。
  • 在VIP和DUT之间插入Monitor+Scoreboard,实时比较帧ID、DLC、Data、CRC、ACK、ESI、BRS,任何一位不匹配立即停仿真并dump fsdb。
  • 对寄存器接口,用UVM_REG构建CAN FD寄存器模型,加入后门访问和前门随机化,确保在总线压力最大时寄存器读写依然正确。

第三步:协议级断言与形式验证

  • 用SVA覆盖关键协议时序:FDF位后必须连续监测到r0、BRS、ESI;Stuff Count必须等于每4位固定插入的Stuff Bit数;CRC17/CRC21计算与硬件完全对齐。
  • 把上述断言打包成Formal Testbench,跑Questa FEV 24小时,目标:无unreachable cover、无vacuous pass、无假阴性。
  • 对Bus-off恢复路径,用Formal证明:从TEC>255到128次11位空闲,DUT必须回到Error Active,且恢复时间≤1.2 ms@1 Mbps。

第四步:错误注入与边界场景

  • 在物理层用Verilog force给CANH/CANL注入共模-12V、瞬态200ns脉冲,检查DUT是否进入Bus-off并正确恢复。
  • 利用FPGA原型搭建4节点闭环,真实CAN FD收发器TJA1044,跑125°C温箱72小时,记录重发次数、ACK错误、CRC错误,要求误帧率<10^-8。
  • 采样点漂移测试:以1%步进从70%漂到90%,在每个采样点用VIP发延迟Bit,确保DUT仍能正确采样;记录最小裕量(国内项目经验:≥2 Tq即可通过中汽研)。

第五步:覆盖率收敛与sign-off

  • 协议covergroup:118条ISO 16845用例全部cover,额外补充20条车规极限场景,合计coverpoint 836个,全部达到100%。
  • 代码coverage:行覆盖≥99.5%,分支覆盖≥98%,FSM覆盖100%,无waive。
  • 功能安全:对ASIL-B级别,跑1亿个CAN FD帧无功能失效;对ASIL-D,跑10亿帧并用FMEDA插入90%单点故障,确认安全机制100%触发。
  • 输出《CAN FD协议一致性验证报告》中文版,含第三方实验室签字栏,直接用于NMPA备案;同时交付VCD+FSDB+Coverage HTML,质量部审计时间≤2人日。

拓展思考

  1. 如果芯片同时支持CAN XL(CiA 610-1),如何复用现有CAN FD环境?——可把VIP升级到CAN XL模式,保留原covergroup架构,仅新增256 Byte DLC、CRC32覆盖点,实现“一套环境,两套协议”。
  2. 国内客户要求“零成本通过EMC”,如何在验证阶段提前暴露EMC风险?——可在FPGA原型阶段用Lecroy示波器测CANH/CANL共模瞬态,把瞬态波形转成Verilog force,反向注入仿真,提前优化驱动强度与斜率控制寄存器。
  3. 面对RISC-V内核+自研CAN FD控制器,如何证明“无死锁”?——可把CAN FD TX/RX FIFO深度、中断、DMA握手信号全部拉到Formal,设“任意时刻复位+任意帧发送”组合,证明系统可在32个CAN位时间内退出死锁,满足ISO 26262的FTTI要求。