浅谈芯片验证方法的演进过程

描述

文章来源:学习那些事

原文作者:前路漫漫

本文介绍了芯片验证方法演进的过程。

概述

回溯 20 世纪 90 年代,当时行业内接触的芯片主要包括 Z80、8031、8080/8086 等经典 CPU,以及 74 系列编码器、译码器、多路选择器等专用逻辑芯片。在那个技术发展阶段,相关从业者的核心需求仅在于掌握这些芯片的使用方法,对于其底层设计原理以及对应的测试验证流程,既缺乏深入探索的条件,也没有足够的重视。与此同时,PAL/GAL、CPLD 以及 FPGA 等可编程芯片的出现,为硬件技术人员打开了自主设计硬件的广阔空间。不过受限于当时的技术环境,设计手段还处于较为原始的状态 ——Verilog 语言在国内尚未得到广泛推广与应用,工程师们主要依靠逻辑表达式、卡诺图以及原理图来完成硬件逻辑的设计工作。尽管这种设计方式相对简陋,但彼时的设计人员凭借对器件特性和逻辑原理的深刻理解,在逻辑资源极为有限的约束条件下,能够进行精细化的设计实践,不仅清晰掌握每个逻辑门、每个触发器的具体使用情况,对每一条逻辑的执行过程也了如指掌。值得注意的是,这一阶段尚未形成 “芯片验证” 的明确概念,相关的硬件检测工作统一被称为 “硬件测试” 或 “芯片测试”,如图 1 所示即为当时众多企业广泛采用的芯片测试平台。

芯片验证

图1

早期的芯片测试平台构造极为原始:通过面包板来固定芯片和各类电子元器件,再利用导线将这些芯片与元器件按照设计需求连接起来,构成完整的测试电路;采用拨码开关作为手动输入设备,用于产生测试所需的各类信号;通过发光二极管、数码显示管等简单器件来直观展示输出信号的状态,以此判断芯片的工作情况。随着可编程器件的集成规模不断扩大,逻辑编程语言也迎来了快速发展期,Verilog、VHDL 等硬件描述语言相继诞生并逐渐成熟。自此,芯片设计进入了全新阶段,工程师可以采用类似编写 C 语言的编程方式来设计硬件逻辑。具体流程为:使用 Verilog 语言完成逻辑设计后,经过编译综合、布局布线等一系列步骤,将设计好的逻辑烧写到 FPGA 芯片中,随后在专门搭建的硬件单板上开展测试工作。与此同时,芯片测试手段也实现了大幅革新:借助信号发生器可以精准产生测试所需的各类输入信号,利用示波器、逻辑分析仪等专业仪器能够实时观测并分析输出信号的波形与数据,图 2 所示为该时期大规模逻辑芯片的典型测试平台。需要指出的是,上述两类测试平台均依赖物理硬件和专用测试仪器来开展工作,不仅制作成本高昂,测试周期漫长,而且测试的完备性与覆盖度在很大程度上依赖于设备的性能与配置,存在明显的局限性。

芯片验证

图2

逻辑仿真器

逻辑仿真器的出现,彻底改变了芯片测试与验证的传统模式,为行业带来了方法与手段上的革命性改进。借助专业的软件工具,工程师无需依赖物理硬件,仅在普通 PC 或服务器上即可完成芯片的全流程测试与验证工作。这一转变不仅大幅降低了测试平台的搭建与维护成本,更有效缩短了芯片的整体开发周期。在逻辑仿真器应用初期,工程师可以直接使用 Verilog 语言编写简单的验证平台,例如构造系统复位信号、系统时钟信号以及一系列符合测试需求的激励信号,也可以通过读取文件中的 Vector 向量数据来驱动芯片的输入信号。仿真过程中的输入输出结果,都能够在专用的波形查看器软件中进行清晰展示与精准测量。此时的芯片验证平台完成了从硬件环境到软件环境的根本性转变,芯片测试不再受限于昂贵的硬件设备,许多原本需要物理实现的部件都可以通过软件进行模拟,验证的灵活性与便捷性得到了极大增强,图 3 所示为一个典型的芯片仿真软件平台。

芯片验证

图3

随着芯片功能需求的不断增加,验证平台的功能也需要持续拓展。后续,TCL、Perl 等脚本语言开始被用于编写更为复杂的激励信号,而 C/C++ 等高级编程语言则被用来扩充验证平台的功能模块。但必须明确的是,这些语言并非专为芯片验证场景设计的专用语言:Verilog 语言的核心定位是逻辑设计,其附带的验证功能相对薄弱,难以满足复杂场景的验证需求;TCL、Perl 作为通用脚本语言,虽然易于学习和掌握,能够应对部分基础验证需求,但在功能适用性上与专业验证场景的匹配度不高,执行效率也相对较低;C/C++ 作为通用编程语言,语法复杂、学习门槛高,对于验证人员而言掌握难度较大,且针对芯片验证场景的适配性不足,难以充分发挥其优势。值得强调的是,芯片测试平台的软件化转型带来了一项至关重要的改变 —— 实现了芯片测试平台的高度自动化,这是以往以手工操作为主的传统硬件测试平台无法比拟的核心优势,极大提升了测试效率与准确性。

SystemVerilog 语言的诞生

为了满足日益复杂的芯片验证需求,产业界开始致力于研发专用的验证语言,先后推出了 Vera、E 语言和 SystemVerilog 等多款产品。Vera 语言是业界首款专门为芯片验证而生的专用语言,采用面向对象的编程思想,具备较强的验证能力。但该语言为 Synopsys 公司独家所有,仅能与 VCS 仿真器集成使用,导致其在国内的推广与应用受到极大限制,使用者寥寥无几,笔者也仅对其有初步了解,并未获得实际应用的机会。随着 SystemVerilog 语言的推出与普及,Vera 语言逐渐失去了市场竞争力,逐步退出了历史舞台。E 语言则是由一线验证人员主导发明的语言,其创新性地采用了功能覆盖率驱动的随机测试方法,从理论层面系统回答了如何解决芯片验证充分性这一行业核心难题。E 语言的出现是芯片验证领域的一次重大技术进步,其提出的功能覆盖率驱动的随机测试方法,凭借科学性与实用性,一经推出便得到了业界的广泛认可与积极应用。笔者在 2003 年左右开始接触 E 语言,并在随后的数年时间里对其进行了深入的研究与探索,还将其核心功能成功集成到自主研发的验证平台中,为实际项目提供了有力支撑。然而,E 语言在商业推广与生态建设方面存在不足,这也间接催生了 SystemVerilog 语言的诞生。SystemVerilog 语言充分借鉴并继承了 E 语言中功能覆盖率及随机约束的核心语法特点,成为了 E 语言的理想替代品。加之其背后强大的商业推广与生态建设力度,SystemVerilog 逐渐在市场中占据主导地位,成为当前芯片验证领域的主流语言。

但需要明确的是,“如何开展验证” 本质上是一个技术实现层面的问题,仅有专用的验证语言是远远不够的。这就如同拥有了砖瓦、石材等各类建筑材料,并不意味着一定能够建造出符合需求的房屋 —— 不同客户的需求存在差异,不同建筑师的设计理念与能力也各不相同,最终建造出的房屋自然会存在天壤之别。同理,要完成不同类型、不同复杂度芯片的验证工作,也需要具备针对性的验证架构与平台作为支撑,以满足多样化的验证需求。经过大量实际项目的实践与探索,产业界逐步总结并形成了一套相对成熟的验证参考架构。在各类芯片中,通信类芯片因其功能复杂、接口繁多,对验证平台的性能、稳定性与兼容性等方面提出了更高的要求。而能够满足通信类芯片验证需求的平台架构,具备良好的扩展性与灵活性,通过适当的简化、裁剪与适配,完全可以应用到其他相对简单的芯片验证场景中,具备广泛的适用性。

详细功能

具体来看,该验证参考架构的核心设计思路包括两方面:首先,验证平台需要采用分层设计的理念,将整体功能划分为不同层级,明确各层级的核心职责;其次,在分层设计的基础上,进一步开展模块化设计,而模块化设计的前提是清晰定义各模块之间的接口标准与调用关系。基于这一思路,芯片仿真验证平台构建了包含 6 层结构的完整架构,分别为功能层、软件层、覆盖率用例层、数据层、调度层、信号层,各层的具体功能与交互逻辑如图 4 所示。

芯片验证

图4

各层的详细功能如下:

覆盖率用例层:核心职责是明确并定义验证过程中需要覆盖的各类测试点和典型应用场景,为验证工作划定清晰的范围与目标;

数据层:根据覆盖率用例层设定的约束条件,自动生成符合要求的随机元数据,并将这些零散的元数据按照统一标准封装成相应的数据包,为后续的激励生成提供基础;

调度层:依据端口的配置信息与测试需求,对数据层生成的数据包进行合理调度与分发,准确发送到对应的激励模块,确保测试流程的有序推进;

信号层:根据待验证设计(DUV)对外暴露的接口类型,划分为不同类型的专用端口,即激励发送 TxBFM、数据接收 RxBFM、读写 rwBFM。其中,激励发送 TxBFM 的作用是将调度器送来的数据包转换为 DUV 能够识别和接收的信号时序;数据接收 RxBFM 负责将 DUV 输出的原始信号时序转换为功能层可以处理的标准化数据包;读写 rwBFM 则实现驱动软件的读写数据与 DUV 的读写信号时序之间的双向转换,保障数据交互的一致性;

功能层:主要包含 DUV 的行为参考模型(BRM)和用于记录预期结果的记分牌(Scoreboard)。BRM 接收调度器输出的数据包,通过模拟 DUV 的工作逻辑计算出预期的结果数据包,并将其存储在 Scoreboard 中;Scoreboard 则从 DUV 获取实际的输出结果,与存储的预期结果进行逐一比对,判断验证是否通过;

软件层:芯片的正常工作与功能实现往往需要软件驱动的支持,软件引擎(Software Engine,SE)的核心功能是将驱动 Driver 发出的读写指令,通过读写 rwBFM 传递给 DUV,实现对 DUV 内部寄存器的数据配置与数据读取操作,为芯片功能验证提供软件层面的支撑。

芯片验证平台进行划分

若按照技术发展的代际特征对芯片验证平台进行划分,可将其分为以下六代:

第一代芯片测试平台:即图 1 所示的芯片测试平台,是最为原始的芯片测试方案,完全依赖基础元器件与手动操作完成测试;

第二代芯片测试平台:对应图 2 所示的大规模逻辑芯片测试平台,在专业硬件设备与测试仪器的支持下开展芯片测试,也是目前行业内广泛应用的典型 FPGA测试平台;

第三代芯片仿真验证平台:如图 3 所示的芯片仿真软件平台,标志着验证工作彻底摆脱了对物理硬件设备的依赖,完全采用软件模拟仿真的手段进行芯片验证。该代平台的主要特征是借助 TCL、Perl、C/C++ 等各类通用编程语言及相关软件工具,使芯片仿真验证的自动化水平得到了大幅提升;

第四代芯片仿真验证平台:如图 4 所示的芯片仿真验证平台架构,是在第三代平台的基础上逐步发展而来,形成了标准化的验证方法学与统一的验证平台架构,并引入了 Vera、E 语言、SystemVerilog 等专用验证语言,目前仍是行业内占主导地位的仿真验证平台;

第五代芯片模拟器(Emulator):这是基于大规模 FPGA 或专用 ASIC 芯片构建的硬件加速器,其本质上是第二代芯片测试平台的技术升级产物。该代模拟器有机结合了第二代硬件测试平台的稳定性与第四代仿真验证平台的自动化优势,在验证规模、自动化程度、仿真速度等方面均实现了质的提升;

第六代芯片仿真验证平台:作为面向未来的新一代仿真验证方案,其核心优势在于支持多核、多机并行验证,能够使仿真速度得到突破性提升。该平台采用验证代码与设计代码分离的架构设计,两类代码各自独立进行多核并行加速,从根本上解决了资源争抢问题。其中,PVM 验证平台是第六代芯片仿真验证平台的基础实现形态,其核心设计思路是将验证代码与设计代码进行分离,使验证代码在其他独立内核上执行,避免与设计代码争夺 CPU 运算资源;进一步按照功能组件对验证代码进行拆分,再分配到不同内核上并行执行;若在 PVM 验证平台的基础上,将多个仿真进程分配到不同服务器上协同执行,即可实现分布式仿真,这类平台被定义为 DVM 验证平台。除了核心的仿真加速能力外,第六代芯片仿真验证平台还具备松耦合、易集成的重要特征:测试用例可根据具体验证需求灵活定制验证平台,且整个定制过程无需进行编译操作,极大提升了验证效率与灵活性。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分