CN118536445B - 一种用于芯片仿真的方法和计算设备 - Google Patents
一种用于芯片仿真的方法和计算设备 Download PDFInfo
- Publication number
- CN118536445B CN118536445B CN202410941791.1A CN202410941791A CN118536445B CN 118536445 B CN118536445 B CN 118536445B CN 202410941791 A CN202410941791 A CN 202410941791A CN 118536445 B CN118536445 B CN 118536445B
- Authority
- CN
- China
- Prior art keywords
- configuration
- register
- chip
- constraint
- file
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/34—Circuit design for reconfigurable circuits, e.g. field programmable gate arrays [FPGA] or programmable logic devices [PLD]
- G06F30/343—Logical level
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2111/00—Details relating to CAD techniques
- G06F2111/04—Constraint-based CAD
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Evolutionary Computation (AREA)
- Geometry (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Design And Manufacture Of Integrated Circuits (AREA)
Abstract
本发明提供一种用于芯片仿真的方法和计算设备,所述方法包括提取驱动软件的寄存器配置,所述寄存器配置用于配置芯片的寄存器,并按所述寄存器的有效域段提取配置信息;将从所述驱动软件的寄存器配置中提取到的有效域段转换为用于电子验证平台的随机约束文件;将随机约束文件加入到仿真的约束列表;运行仿真,根据所述随机约束文件得到约束求解结果;根据所述约束求解结果确定是否继续仿真。通过本发明的方法可以定位芯片配置错误的问题,筛选有效的芯片问题,提高了投入产出比。
Description
技术领域
本发明涉及芯片及电子系统设计技术领域,具体涉及一种用于芯片仿真的方法。
背景技术
芯片的最终交付需要伴随着配套的软件驱动,以便用户能够有效地使用和配置芯片。软件驱动是沟通操作系统和芯片硬件之间的桥梁,确保硬件设备能被操作系统正确识别和使用。软件驱动是按照芯片的使用手册,配置不同的芯片寄存器来实现的,因此,驱动软件在真正交付前都需要和芯片进行联合测试,使用真实芯片样片或者FPGA/EMU(现场可编程门阵列/仿真器)搭建的平台,让驱动软件在平台上运行,测试驱动软件在芯片上的功能是否正确。同时,驱动软件对应的是实际的使用场景,这也是通过实际使用场景来验证芯片功能的重要步骤。
目前定位这类软硬件联合仿真问题,需要软件驱动编写人员、芯片设计、芯片验证、芯片硬件人员协同定位,逐个排查可能的原因。如果在样片/FPGA/EMU平台上无法找到原因,还需要在EDA验证环境上构造相同的验证场景,进行问题的复现和定位。
理论上,无论是FPGA/EMU还是样片的平台进行测试时,芯片已经经过大量的验证,遗漏的问题不会很多,但每个问题都可能是实际使用中的重要问题,因此会受到很高的重视,每次出现问题都会优先投入人力处理。但在实际执行中,需要定位的大部分是软件本身的问题,其中,配置不符合芯片要求导致的问题占很大一部分,这部分问题实际是对芯片的使用理解错误,并不是芯片本身问题,但却占用了大量的资源和调试时间。
为此,需要一种技术方案,解决联合仿真问题效率低,占用大量人力、时间的问题。
发明内容
本发明旨在提供一种用于芯片仿真的方法,所述方法可以解决联合仿真问题效率低的问题,减少人力成本、缩短问题定位的时间。
根据本发明的一方面,提供一种用于芯片仿真的方法,包括:
提取驱动软件的寄存器配置,所述寄存器配置用于配置芯片的寄存器,并按所述寄存器的有效域段提取配置信息;
将从所述驱动软件的寄存器配置中提取到的有效域段转换为用于电子验证平台的随机约束文件;
将所述随机约束文件加入到仿真的约束列表;
运行仿真,根据所述随机约束文件得到约束求解结果;
根据所述约束求解结果确定是否继续仿真。
根据一些实施例,提取所述驱动软件的寄存器配置包括:
将所述驱动软件提供的二进制验证文件进行加载仿真至所述寄存器配置完成,通过波形数值截取工具获得所述驱动软件的寄存器配置;或
所述驱动软件提供二进制验证文件的反汇编文件,提取所述反汇编文件的关键字得到所述驱动软件的寄存器配置;或
使用所述驱动软件独立生成的配置。
根据一些实施例,所述运行仿真包括:
利用所述随机约束文件控制随机产生一组寄存器配置值,并加载至寄存器传输级代码以进行仿真。
根据一些实施例,将从所述驱动软件的寄存器配置中提取到的有效域段转换为随机约束文件,包括:
将所述驱动软件的应用层面的程序代码和逻辑关系转换为芯片底层的验证环境平台可识别的随机约束。
根据一些实施例,还包括:
将所述驱动软件的寄存器配置转换为所述寄存器的有效域段;
统计每个有效域段的配置次数;
根据所述配置次数对配置的所述寄存器进行优化。
根据一些实施例,还包括:
将所述随机约束文件转换为可立即执行的程序语言,从而进行配置合法性检查。
根据一些实施例,将从所述驱动软件的寄存器配置中提取到的有效域段转换为随机约束文件,包括:
提取所述有效域段的具体配置值;
基于验证环境平台的随机配置文件,利用所述具体配置值对所述随机配置文件包含的芯片中的所有寄存器配置域段赋值,从而得到所述验证环境平台的随机约束文件。
根据一些实施例,将生成的实时随机约束文件加入到仿真的约束列表包括:
使用文件列表或者引用的方式来加入约束列表。
根据一些实施例,根据约束求解结果确定是否继续仿真,包括:
如果错误是由于配置不符合芯片要求引起,则在开始仿真求解约束报错后停止仿真;
如果错误不是由于配置不符合芯片要求引起,则约束求解不报错从而仿真继续执行。
根据本发明的另一方面,提供一种计算设备,包括处理器,以及存储器,存储有计算机程序,当所述计算机程序被所述处理器执行时,使得所述处理器执行如上任一项所述的方法。
根据本发明的另一方面,提供一种非瞬时性计算机可读存储介质,其上存储有计算机可读指令,当所述指令被处理器执行时,使得所述处理器执行如上任一项所述的方法。
本示例实施例的用于芯片仿真的方法,通过从软件配置中提取到的有效域段,并转换为随机约束文件,通过随机约束文件得到约束结果求解,根据约束求解结果确定是否继续仿真,该高效的做法,能有效地筛选出测试向量,避免无效或冗余的仿真运行,优化了资源利用,可以系统地定位和解决芯片配置问题,提高设计的可靠性和验证效率。通过约束求解可以快速筛选出驱动软件的配置错误问题,对于非法配置的错误,可定位错误的具体位置,提升了效率,减少了人力和时间的消耗,并可避免因人为疏忽或误解而引入的错误,提高测试的准确性和可靠性。
本示例实施例通过定位芯片配置错误类问题的方法,可以利用现有的验证环境验证使用的随机约束条件,不必重新开发检查工具,使用难度低,重用性好。即使针对非配置非法问题,提取的配置也可以直接用于验证环境上复现问题,无需再构造新的用例来复现问题和定位问题,提升了效率,减少了问题复现的难度。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本发明。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍。
图1示出根据示例实施例定位配置的方法流程图。
图2示出根据示例实施例提取驱动软件的寄存器配置的方法流程图。
图3示出根据示例实施例芯片配置的方法流程图。
图4示出根据本发明示例实施例的计算设备的框图。
具体实施方式
现在将参考附图更全面地描述示例实施例。然而,示例实施例能够以多种形式实施,且不应被理解为限于在此阐述的实施例;相反,提供这些实施例使得本发明将全面和完整,并将示例实施例的构思全面地传达给本领域的技术人员。在图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。
此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本发明的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本发明的技术方案而没有特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本发明的各方面。
附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
应理解,虽然本文中可能使用术语第一、第二、第三等来描述各种组件,但这些组件不应受这些术语限制。这些术语乃用以区分一组件与另一组件。因此,下文论述的第一组件可称为第二组件而不偏离本发明概念的教示。如本文中所使用,术语“及/或”包括相关联的列出项目中的任一个及一或多者的所有组合。
本发明所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,并且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准,并提供有相应的操作入口,供用户选择授权或者拒绝。
本领域技术人员可以理解,附图只是示例实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的,因此不能用于限制本发明的保护范围。
在描述本发明实施例之前,对本发明实施例涉及到的一些术语或概念进行解释说明。
EDA(Electronic Design Automation),电子设计自动化,EDA验证环境是集成电路(IC)和系统级设计中用于验证硬件设计功能正确性、性能及其它特性的软件和方法的集合,在现代芯片设计流程中确保设计在实际制造前能够满足预定要求。
RTL,寄存器传输级,是数字电路设计中一个核心的概念,用于描述同步数字电路的操作抽象级别。这种描述方式主要关注数据在硬件寄存器、存储器、组合逻辑装置和总线等逻辑单元之间的流动及其逻辑代数运作方式。
随机约束文件,用于电子验证平台,是一种用于指导随机生成测试激励或测试场景的文件,它通过设置一系列规则和条件来定义测试数据的范围和特性。
SV(System Verilog),建立在Verilog基础上,通过引入面向对象编程等特性,显著扩展了设计和验证的能力,适用于复杂的设计验证项目。基于SystemVerilog,验证工程师可以创建具有高度自动化和可重用性的验证环境。
RM(reference model),参考模型指的是golden的模型,该模型用来产生标准结果。在集成电路设计和软件测试中,参考模型是一个预设的、可靠的模型,用于生成特定的标准结果,这些结果随后用作比较的基准,以验证其他模型或系统的正确性和效能。参考模型通常基于精确的算法和数据构建,能够准确地模拟现实世界的行为或系统的性能。
bin文件,即二进制文件(Binary File),是一种以二进制格式存储数据的计算机文件。这类文件通常不包含任何文本格式的内容,而是由机器代码、图像、声音或其他特定格式的原始数据构成。
联合仿真(Co-Simulation)是一种电子设计自动化(EDA)技术,它允许在硬件描述语言(HDL)仿真环境中同时仿真硬件系统和软件/算法。这种仿真方式结合了硬件行为级或寄存器传输级(RTL)仿真与软件模型,使得设计者能够在硬件尚未实际制造前,对包含硬件和嵌入式软件的整个系统进行测试和验证。
芯片最终交付后需要有软件驱动才能使用,软件驱动是按照芯片的使用手册,配置不同的芯片寄存器来实现的。如果编写软件驱动的人员不理解或者没有注意芯片手册中的一些条件,可能导致写出来的驱动不符合芯片的要求,在运行中会出现问题,甚至无法运行。出现运行错误后就需要定位问题的原因,查看是软件配置问题还是芯片功能问题。
随着芯片规模越来越大,软件驱动配置芯片的步骤和内容也越来越复杂,这使得配置错误的情况更加普遍。目前定位这类软硬件联合仿真问题,需要软件驱动编写人员、芯片设计、芯片验证、芯片硬件人员协同定位,逐个排查可能的原因。如果在样片/FPGA/EMU平台上无法找到原因,还需要在EDA验证环境上构造相同的验证场景,进行问题的复现和定位。由于驱动可能不仅作用于当前芯片,还会穿插各种CPU指令、外部芯片控制等内容,配置复杂,EDA只能尝试根据场景描述寻找相关配置,准确复现场景较为困难,通常解决问题的周期较长。
单纯的芯片模块验证的配置,会按照芯片支持和使用的最大可能性来设置约束条件,这些条件会经过多次的评审,并会和功能覆盖率一起来度量对芯片功能验证的完备性。因此,可以理解为这些约束条件就是芯片使用的约束条件,符合这些约束条件的配置,是符合芯片本身的设计要求的。反之,如果配置组合不满足这些约束要求,则不符合芯片的设计要求,很可能会导致运行失败。
芯片验证仿真的第一步,就是产生芯片配置,在仿真最开始就进行约束的求解,得到一套满足芯片使用约束的配置,通常这个过程都很快,只占芯片仿真时间的10%,但是构建这套约束限制的过程耗时很长,需要讨论、评审和不断迭代,还需要对芯片内部有深刻的理解,这可能会耗时几周甚至更久的时间,并且芯片规模越大,耗时越久。因此,通常只有芯片验证会构建完整的约束限制文件。
产生所述芯片配置后,还需要通过一定的方式,将配置传入RTL,开始仿真。
在EDA芯片验证过程中,芯片的配置可以通过bin文件加载到RTL代码所包含的CPU,然后CPU运行下发配置,该方式理论上可以直接使用软件驱动提供的bin文件,但是EDA仿真的效率相对于FPGA/EMU/样片来说,要慢成千上万倍,可能很难直接使用原始的bin文件,必须经过简化处理;并且此时带有CPU的RTL,代码规模大,仿真会很慢。
芯片的配置也可以是通过EDA验证环境下发,即验证环境模拟CPU将值写入不同的配置寄存器,该方式是EDA验证的主要配置方式,仿真速度快,易于控制。但是,该方式无法直接使用软件配置文件,需要根据软件配置文件,重新构造EDA用例。
因此,软件驱动的流程要让EDA验证复现,一种方法是要优化C代码流程,简化操作,然后输出bin文件给EDA,带CPU进行仿真,此时仿真效率会很低;另一种方法是提取软件的配置值,编写新的EDA验证用例,使用EDA环境来下发配置,复现问题场景。
在当前芯片EDA验证流程中,主要使用覆盖率驱动的随机验证的方法。所述方法需要根据芯片规格、可配置的寄存器以及配置之间的关联,对每个可配置寄存器的配置内容进行限制和约束。然后在仿真时,在限制和约束的范围内随机产生一套可用的芯片配置,并验证该配置下的芯片功能是否正确。最后根据功能覆盖率,确认随机产生的配置组合,已经覆盖了所有芯片支持的可能的配置组合,从而证明已经对芯片的功能完成了验证。
现有方法采用联合仿真问题和实测平台定位,通过EDA验证复现问题。联合仿真是验证复杂电子系统设计中的一项关键技术,允许硬件描述语言(如Verilog或VHDL)编写的硬件模型与用高级语言(如C/C++)实现的软件模型在同一个仿真环境中协同工作。
在实测平台(如样片/Silicon Sample、FPGA原型、Emulation Platform)上定位问题时,需要细致地重建问题发生的场景,包括所有相关的硬件配置、软件交互和环境因素,这本身就是一个复杂繁琐的过程,且需要软件工程师、硬件工程师、芯片设计工程师、芯片系统验证工程师等跨学科团队的紧密合作,虽然多职能团队有助于全面分析问题,但也增加了沟通成本和协调难度。
现有方法的工作流程包括:在样片(Silicon bring-up)、FPGA原型验证或Emulation环境中发现问题,通过实际运行软件或测试向量,观察到异常行为或测试失败;读取debug寄存器,尝试定位,硬件工程师和芯片系统验证工程师通过调试接口读取芯片内部的debug寄存器状态,初步判断问题可能发生的模块或原因;提取出错实测平台测试用例的芯片配置,芯片系统验证工程师和硬件工程师通过记录或导出导致问题出现的具体芯片配置状态,包括但不限于寄存器设置、输入信号序列等。
根据配置信息,在EDA验证平台构造测试用例,芯片系统验证工程师、芯片模块验证工程师利用EDA工具(如UVM等),根据提取的实测平台配置信息,编写或调整测试bench,以重现相同或相似的芯片配置环境;尝试在EDA平台复现问题,芯片系统验证工程师、芯片模块验证工程师协同操作,如果涉及到软件交互还需要软件工程师,在EDA仿真环境下运行构造的测试用例,观察是否能重现实测平台上的错误现象;在EDA平台定位问题,芯片系统验证工程师、芯片设计工程师利用EDA工具提供的高级调试功能(如波形查看、断点设置、信号跟踪等),精确定位问题发生的具体位置。
人工查看发现是芯片寄存器配置错误,芯片系统验证工程师、芯片设计工程师通过仔细审查仿真结果和对比设计规范,识别出是由于寄存器配置不当而非设计缺陷引起的问题;改正配置,在EDA平台再次仿真,芯片系统验证工程师根据发现的错误配置,调整测试用例中的寄存器设置,重新运行仿真,验证问题是否因配置修改而消失;确认问题已解决,所有相关工程师确认经过配置调整后的仿真结果符合预期,问题不再复现,然后可能需要在实测平台上再次验证修复效果,确保问题得到彻底解决。
通过软硬件协同工作,利用EDA验证复现问题、人工查看芯片寄存器配置错误并进行更改,这一流程涉及多学科交叉合作,多个专业工程师的长时间投入也意味着高昂的人力成本。如果在问题定位过程中消耗了大量资源,却发现问题是出自非芯片本身的因素,这无疑会大大降低整个项目的投入产出比。
为此,本发明提出一种技术方案,对于联合仿真,提取软件配置后转换为SV约束文件,加载约束文件到EDA验证环境仿真。如果约束求解出错,可自动找出错误配置,修改配置后重新仿真,直至确认问题已解决。根据示例实施例的方案,只需要投入软件工程师和芯片系统验证工程师即可,解决问题周期可缩短至4小时甚至更短。
图1示出根据示例实施例用于芯片仿真的方法流程图。
实际芯片产品应用是由高层的软件来调用的,比如linux跑在cpu上。但是最终转换到底层,是由驱动软件把上层软件的指令,变成一组寄存器读写操作,通过改变配置寄存器的值,来实现驱动芯片工作的目的。
在S101,提取驱动软件的寄存器配置。
根据一些实施例,驱动软件提供C语言代码编译后的bin文件给验证工程师,加载到EDA环境中的仿真CPU进行仿真,仿真过程只用执行到CPU配置完芯片的寄存器即可。然后通过verdi工具的波形数值截取工具,将CPU输出的总线接口进行截取,获得地址和数值的总线访问组合。所述地址代表一个配置寄存器,所述数值则是写入寄存器的配置值。软件驱动配置是指由芯片的驱动软件产生的一套寄存器值,通过将这些值配置到对应的寄存器中,来让芯片工作。
在S103,按有效域段提取配置信息。
根据一些实施例,参照芯片的寄存器手册,每个寄存器都有特定含义,所述有效域段根据芯片的寄存器手册确定,每个寄存器具有特定的有效域段。不同位宽的寄存器内部被划分为n个子部分,每个子部分负责不同的功能含义,每个含义所占用的寄存器宽度为一个域段,所述域段包括预留或未使用域段。所述有效域段具有相同或不同的宽度。芯片会按一定的地址位宽进行总线对齐,比如32bit,所以访问寄存器会有一个最小粒度,比如这里的32bit,但是在32bit寄存器内,可能不止一个含义,每个含义所占用的寄存器宽度,称为一个域段;并且可能会有无效bit,比如32bit的偏移地址配置寄存器,其中最高bit代表偏移功能的使能开关,最低8bit代表偏移的地址,其余部分不使用,则该寄存器包含两个有效域段,即开关使能和偏移地址。因此,本文中的有效域段表示具有特定含义的寄存器位宽。
按有效域段提取配置信息,即根据寄存器内的有效域段,找到对应的寄存器配置值。比如CPU写了地址0x20,值为0x8000_0008,如果该寄存器刚好是上述距离的偏移地址配置寄存器,则可以提取到偏移开关=1,偏移地址=8。
根据一些实施例,得到总线的地址+数值访问后,将地址+数值用脚本修改为UVM_RAL的访问格式,配合对应寄存器的UVM_RAL模型,进行仿真,写入地址后即可自动修改对应域段的值。比如上述地址偏移功能配置寄存器在UVM_RAL中名称为offset_cfg_reg,则上述过程可以表示为:offset_cfg_reg.write(status, addr, value, UVM_FRONTDOOR)。其中status和UVM_FRONTDOOR为UVM语法固定格式,addr为上述的0x20,value为上述的值0x8000_0008。即可通过UVM_FIELD访问到对应的域段:offset_cfg_reg.offset_en = 1,offset_cfg_reg.offset_addr= 8。
优选的,使用一个空的验证环境结构来处理UVM_RAL:只搭建了环境框架的验证环境,编译通过可以进行仿真。这样的环境运行速度快,方便提取UVM_RAL的信息。
在S105,将从驱动软件的寄存器配置中提取到的有效域段转换为随机约束文件。
根据一些实施例,提取所述有效域段的具体配置值,利用所述具体配置值对所述随机配置文件包含的芯片中的所有寄存器配置域段赋值,从而得到System Verilog的随机约束文件。使用验证环境平台的随机配置文件,所述随机配置文件包含芯片中的所有寄存器配置域段,将驱动软件应用层面的程序代码和逻辑关系转换为芯片底层的SystemVerilog可识别的随机约束。
比如上述的地址和使能,即可转换为:
constraint offset_tc_constraint {
chip_reg_cfg.m_offset_en == 1;
chip_reg_cfg.m_offset_addr == 8;
}
其中,
chip_reg_cfg是EDA验证环境使用的随机配置文件,包含了芯片中的所有寄存器配置域段;
m_offset_en和m_offset_addr与寄存器的offset_en和offset_addr域段相对应。
在S107,将生成的随机约束文件加入到仿真的约束列表。
根据一些实施例,要将新生成的约束文件加入到仿真或综合约束列表中,可以使用filelist或者include的方式来加入约束列表。并确保约束文件的格式和内容设计相兼容,避免引入新的命名冲突等可能的问题。在添加约束后,重新进行编译,验证约束是否正确应用且没有引入新的错误。
在S109,运行仿真,对约束结果求解,根据约束求解结果确定是否继续仿真。
根据一些实施例,利用所述随机约束文件控制随机产生一组寄存器配置值,并加载至寄存器传输级代码以进行仿真,例如加载至RTL代码所包含的中央处理器进行仿真。对约束结果求解,如果错误是由于配置不符合芯片要求引起,则在开始仿真求解约束后就会报错,并且仿真工具(如VCS、IES)会显示具体出现冲突的约束。比如EDA环境约束中,m_offset_addr>= 32。则该约束和上述chip_reg_cfg.m_offset_addr == 8相冲突,就会在仿真初始时刻报错,所需仿真时间小于完整运行一条用例的10%。此时即可快速确认问题的根源。
根据约束求解结果确定是否继续仿真,如果错误不是由于配置不符合芯片要求引起,则约束求解不会报错,仿真可以继续执行。因为使用了软件的相同配置,可以直接复现出现问题的场景,进行后续的问题定位。此时配置是由EDA验证环境下发,相比直接使用bin文件和CPU仿真,仿真效率会大大提高。
对于配置不符合芯片约束的错误问题,修改对应的冲突的配置,并进行记录。然后重新仿真,直到所有冲突解决。将记录的修改项反馈给软件编写的技术人员,修改软件驱动,在样片/PFGA/EMU平台继续测试。
对于非配置不符合芯片约束的错误,仿真继续运行直到出现错误,可以在EDA平台上进行分析和定位。同时,可以同步在样片/PFGA/EMU平台进行问题定位。因为是非配置冲突问题,最终无论是发现软件流程错误还是芯片功能错误,都有较高的实际价值。
图2示出根据示例实施例提取驱动软件的寄存器配置的方法流程图。
在S201,将驱动软件提供二进制验证文件进行加载仿真至所述寄存器配置完成,通过波形数值截取工具获得所述驱动软件的寄存器配置。
根据一些实施例,通过所述驱动软件提供程序代码编译后的二进制文件是最直接的方式,即开发者编写驱动程序源代码后,通过编译器将其转换成可执行的二进制文件,所述二进制文件包含了驱动的所有功能实现,可以直接安装在操作系统上,让操作系统识别和控制硬件设备。
通过EDA验证准备有可执行的仿真断点,比如VCS工具支持的ucli-save和ucli-restore命令,可以从之前save的节点继续仿真。当将所述save节点设置在芯片初始化后,开始发起配置前,则每次更换bin文件,只用后门加载bin文件到芯片的存储空间,从断点开始仿真即可,无需进行重新编译、芯片上下电、芯片初始化等过程。
根据一些实施例,提取所述驱动软件的寄存器配置也可以对反汇编文件进行提取,所述驱动软件提供二进制验证文件的反汇编文件,提取所述反汇编文件的关键字得到所述驱动软件的寄存器配置;或使用驱动软件代码独立生成特定格式的相关配置,使用所述驱动软件独立生成的配置。为了理解或修改现有驱动的行为,可能是开源驱动的定制,或出于逆向工程的目的,会对已有的驱动二进制文件进行反汇编,对反汇编文件进行提取可以揭示驱动内部的工作逻辑和配置结构,从而允许高级用户修改驱动的行为或提取配置信息。
驱动开发过程中,有时会包含一个配置脚本或工具,可以从驱动源代码或配置文件中提取信息,并自动生成特定格式的配置文件,所述配置文件可能用于简化部署过程,无需深入代码即可调整驱动参数,比如设备初始化参数、工作模式、性能调优选项等。使用驱动软件代码独立生成特定格式的相关配置可以增强灵活性和可维护性,便于在不同的环境中部署同一驱动程序。软件提供C语言的反汇编文件,通过脚本提取反汇编文件的关键字,得到地址和数据值的内容,每个地址就代表一个配置寄存器,数值则是写入寄存器的配置值。
其余步骤与上述S103~S109相同。
驱动软件的寄存器配置涵盖了从编译时的默认设置到运行时的动态调整,以及通过高级技术手段进行的定制和优化,每一步都是为了确保驱动能够高效、稳定地服务于目标硬件和操作系统环境。
单纯的芯片模块验证的配置,会按照芯片支持和使用的最大可能性来设置约束条件,这些条件会经过多次的评审,并会和功能覆盖率一起来度量对芯片功能验证的完备性。因此,可以理解为这些约束条件就是芯片使用的约束条件,符合这些约束条件的配置,是符合芯片本身的设计要求的。反之,如果配置组合不满足这些约束要求,则不符合芯片的设计要求,很可能会导致运行失败。
因为这些约束按芯片的最大支持范围设定的,因此,芯片在实际的使用中采用的配置内容,应该是这些约束条件所能产生的配置组合的子集。比如显示芯片支持的最大计算量是3840*2160(4K),支持小于这个值的所有配置,但是应用于普通显示器时,只会使用配置为1920*1080或者更低的配置,这个实际的配置范围,是芯片功能最大范围的子集,在芯片验证时,会按照3840*2160作为边界,来编写随机约束。
根据一些实施例,芯片A支持卷积和矩阵乘法两种功能,相关的寄存器域段共有300个。其中,矩阵乘法时宽度支持带offset偏移,偏移长度最大127,最小64;卷积运算时也支持offset偏移,但只支持最大100,最小40,两条约束都在EDA环境的随机约束当中。
软件测试人员使用16384*16384个数据进行运算,开启offset功能,offset配置为102。配置矩阵乘法使能后测试通过。修改用例配置为卷积场景,发现测试失败,表现为其中25个数据计算错误,没有明显规律,直接定位很困难。
软件提供编译后的bin文件给系统验证工程师,使用仿真断点直接继续仿真,使用verdi方式提取了CPU接口的写地址和写数据,通过一个空环境来编写UVM_RAL写操作并仿真,通过打印信息,得到各个配置域段的值。通过脚本将提取到的域段值,转换为SystemVerilog随机约束,则其中会存在“offset_addr==102”的一条约束,将提取的新约束和EDA环境原本约束一同加入仿真,会在开始执行约束求解时报错,“offset_addr==102”和“100>=offset_addr>=40”无法同时成立,找到问题原因,修改offset_addr在[40:100]之间,测试通过。
根据本示例实施例,可以快速筛选出驱动软件的配置错误问题,对于非法配置的错误,可定位错误的具体位置,提升了效率,减少了人力和时间的消耗。
根据一些实施例,在上述实施例中,offset_addr符合要求,依然出现错误。
EDA使用合并的约束产生的配置继续仿真,复现了错误。其中,查看仿真log中的uvm_error,第一个错误发生在RTL数据3762和RM的不同。定位该次计算的波形和打印log,发现该次计算时,上一个计算还没有结束,软件应该要等待上次计算结束,再发起新的计算,找到问题原因,修改软件流程,增加一个等待步骤,问题解决。
上述问题仅靠样片/FPGA很难定位,但在EDA上可以看到每一拍的波形,定位效率很高。利用本发明的用于芯片仿真的方法,EDA验证使用随机约束条件,不必重新开发检查工具,使用难度低,重用性好。即使是非配置非法问题,提取的配置也可以直接用于EDA环境上复现问题,无需再构造新的用例来复现问题和定位问题,提升了效率,减少了问题复现的难度。
图3示出根据示例实施例用于芯片配置优化的方法流程图。
在S301,将所述驱动软件的寄存器配置转换为所述寄存器的有效域段。
根据一些实施例,深入分析驱动软件的源代码或配置文件,识别出所有对硬件寄存器进行读写操作的部分,所述操作通常涉及对特定寄存器地址的访问,以配置或查询硬件状态,将软件中的配置项一一映射到对应的硬件寄存器域上。
在S303,统计每个有效域段的配置次数。
根据一些实施例,在驱动软件中增加日志记录功能,跟踪每一次对硬件寄存器的写操作,包括寄存器地址、写入的值以及发生时间等信息。收集足够长时间的日志数据,通过脚本或工具分析这些数据,统计每个寄存器域段被配置更改的频次。
在S305,根据所述配置次数对配置的所述寄存器进行优化。
根据一些实施例,分析统计结果,根据配置次数对配置的寄存器进行优化,包括找出配置次数极低的寄存器域段,配置次数极低意味着软件配置与硬件实现之间存在不匹配,或者是不必要的频繁配置。如果多个不常改变的寄存器域段总是同时或关联地被设置,考虑合并为单个寄存器或命令,减少配置调用次数,对于几乎不变的寄存器,考虑将其默认值设置为最常用的配置,减少初始化和动态配置的需求。根据配置频率,可能还需要考虑硬件逻辑的优化,如移除未使用或极少使用的功能模块,以减少芯片面积和功耗。
本示例实施例将软件驱动测试的全部配置都转换为寄存器域段,并统计每个域段的配置次数,和芯片所有的寄存器域段做比较,根据配置次数的多少对配置寄存器进行优化。比如经常一起配置的寄存器,是否可以优化到一个地址中,减少配置次数,并且确认每次配置的原因,是否有多余的配置过程;此外,对于从来没有配置过的寄存器域段,是否为冗余寄存器,是否可以进行优化。
通过调整驱动软件,减少对不必要寄存器的频繁读写,优化配置序列,减少实时配置的计算负担,实现对硬件寄存器配置的精细化管理和优化,不仅提高了系统性能,还有助于降低功耗和提高软件的可维护性。
根据一些实施例,在软件驱动代码中增加寄存器的打印,将配置的寄存器域段名和值打印到单独的log中。将EDA验证的System Verilog约束文件转换为可立即执行的程序语言,比如python。这样无需编译等步骤,也无需linux服务器,在windows就可以快速进行配置合法性检查。
根据一些实施例,下述python代码执行后会立刻报错,可以实现实时调试:
offset_addr=102#提取的软件配置值;
If offset_addr>100 or offset_addr<40:#SV环境约束范围取反,比如约束为[40:100],这里则是<40和>100;
print(“error!! offset_address is not illegal”)
通过本示例实施例定位芯片配置错误类问题的方法,可以快速筛选出驱动软件的配置错误问题,对于非法配置的错误,可定位错误的具体位置,提升了效率,减少了人力和时间的消耗。且本示例实施例的方法可以利用现有EDA验证使用的随机约束条件,不必重新开发检查工具,使用难度低,重用性好,无需再构造新的用例来复现问题和定位问题,提高了效率,减少了问题复现的难度。
图4示出根据本发明示例实施例的计算设备的框图。
如图4所示,计算设备30包括处理器12和存储器14。计算设备30还可以包括总线22、网络接口16以及I/O接口18。处理器12、存储器14、网络接口16以及I/O接口18可以通过总线22相互通信。
处理器12可以包括一个或多个通用CPU(Central Processing Unit,处理器)、微处理器、或专用集成电路等,用于执行相关程序指令。根据一些实施例,计算设备30还可包括为处理器12进行加速的高性能显示适配器(GPU)20。
存储器14可以包括易失性存储器形式的机器系统可读介质,例如随机存取存储器(RAM)、只读存储器(ROM)和/或高速缓存存储器。存储器14用于存储包含指令的一个或多个程序以及数据。处理器12可读取存储在存储器14中的指令以执行上述根据本发明实施例的方法。
计算设备30也可以通过网络接口16与一个或者多个网络通信。该网络接口16可以是无线网络接口。
总线22可以为包括地址总线、数据总线、控制总线等。总线22提供了各组件之间交换信息的通路。
需要说明的是,在具体实施过程中,计算设备30还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
本发明还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述方法的步骤。计算机可读存储介质可以包括但不限于任何类型的盘,包括软盘、光盘、DVD、CD-ROM、微型驱动器以及磁光盘、ROM、RAM、EPROM、EEPROM、DRAM、VRAM、闪速存储器设备、磁卡或光卡、纳米系统(包括分子存储器IC)、网络存储设备、云存储设备,或适合于存储指令和/或数据的任何类型的媒介或设备。
本发明实施例还提供一种计算机程序产品,该计算机程序产品包括存储计算机程序的非瞬时性计算机可读存储介质,该计算机程序可操作来使计算机执行如上述方法实施例中记载的任何一种方法的部分或全部步骤。
本领域的技术人员可以清楚地了解到本发明的技术方案可借助软件和/或硬件来实现。本说明书中的“单元”和“模块”是指能够独立完成或与其他部件配合完成特定功能的软件和/或硬件,其中硬件例如可以是现场可编程门阵列、集成电路等。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本发明所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些服务接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
以上具体地展示和描述了本发明的示例性实施例。应可理解的是,本发明不限于这里描述的详细结构、设置方式或实现方法;相反,本发明意图涵盖包含在所附条款的精神和范围内的各种修改和等效设置。
Claims (10)
1.一种用于芯片仿真的方法,其特征在于,包括:
提取驱动软件的寄存器配置,所述寄存器配置用于配置芯片的寄存器,并按所述寄存器的有效域段提取配置信息,其中所述配置信息为所述有效域段的具体配置值;
将从所述驱动软件的寄存器配置中提取到的有效域段的所述具体配置值转换为用于电子验证平台的随机约束文件;
将所述随机约束文件加入到仿真的约束列表;
运行仿真,根据所述随机约束文件得到约束求解结果;
根据所述约束求解结果确定是否继续仿真。
2.根据权利要求1所述的方法,其特征在于,提取所述驱动软件的寄存器配置包括:
将所述驱动软件提供的二进制验证文件进行加载仿真至所述寄存器配置完成,通过波形数值截取工具获得所述驱动软件的寄存器配置;或
所述驱动软件提供二进制验证文件的反汇编文件,提取所述反汇编文件的关键字得到所述驱动软件的寄存器配置;或
使用所述驱动软件独立生成的配置。
3.根据权利要求1所述的方法,其特征在于,所述运行仿真包括:
利用所述随机约束文件控制随机产生一组寄存器配置值,并加载至寄存器传输级代码以进行仿真。
4.根据权利要求1所述的方法,其特征在于,将从所述驱动软件的寄存器配置中提取到的有效域段转换为随机约束文件,包括:
将所述驱动软件的应用层面的程序代码和逻辑关系转换为芯片底层的验证环境平台可识别的随机约束。
5.根据权利要求1所述的方法,其特征在于,还包括:
将所述驱动软件的寄存器配置转换为所述寄存器的有效域段;
统计每个所述有效域段的配置次数;
根据所述配置次数对配置的所述寄存器进行优化。
6.根据权利要求1所述的方法,其特征在于,还包括:
将所述随机约束文件转换为可立即执行的程序语言,从而进行配置合法性检查。
7.根据权利要求1所述的方法,其特征在于,将从所述驱动软件的寄存器配置中提取到的有效域段转换为随机约束文件,包括:
提取所述有效域段的具体配置值;
基于验证环境平台的随机配置文件,利用所述具体配置值对所述随机配置文件包含的芯片中的所有寄存器配置域段赋值,从而得到所述验证环境平台的随机约束文件。
8.根据权利要求1所述的方法,其特征在于,将生成的实时随机约束文件加入到仿真的约束列表包括:
使用文件列表或者引用的方式来加入约束列表。
9.根据权利要求1所述的方法,其特征在于,根据约束求解结果确定是否继续仿真,包括:
如果错误是由于配置不符合芯片要求引起,则在开始仿真求解约束报错后停止仿真;
如果错误不是由于配置不符合芯片要求引起,则约束求解不报错从而仿真继续执行。
10.一种计算设备,其特征在于,包括:
处理器;以及
存储器,存储有计算机程序,当所述计算机程序被所述处理器执行时,使得所述处理器执行如权利要求1-9中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410941791.1A CN118536445B (zh) | 2024-07-15 | 2024-07-15 | 一种用于芯片仿真的方法和计算设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410941791.1A CN118536445B (zh) | 2024-07-15 | 2024-07-15 | 一种用于芯片仿真的方法和计算设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN118536445A CN118536445A (zh) | 2024-08-23 |
CN118536445B true CN118536445B (zh) | 2024-09-20 |
Family
ID=92386231
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410941791.1A Active CN118536445B (zh) | 2024-07-15 | 2024-07-15 | 一种用于芯片仿真的方法和计算设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN118536445B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118708175B (zh) * | 2024-08-30 | 2024-10-29 | 英诺达(成都)电子科技有限公司 | 参数配置方法、装置、设备、存储介质及程序产品 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115496035A (zh) * | 2022-11-21 | 2022-12-20 | 瀚博半导体(上海)有限公司 | 芯片的验证方法、装置、芯片、电子设备和介质 |
CN116992805A (zh) * | 2023-08-01 | 2023-11-03 | 上海砹芯科技有限公司 | 基于生成式约束模型的芯片验证系统、方法及验证设备 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102902834B (zh) * | 2011-07-29 | 2015-12-09 | 炬芯(珠海)科技有限公司 | 一种soc芯片的验证方法及系统 |
CN117556749A (zh) * | 2023-10-11 | 2024-02-13 | 鼎道智芯(上海)半导体有限公司 | 芯片验证方法、测试用例的复用方法及装置 |
-
2024
- 2024-07-15 CN CN202410941791.1A patent/CN118536445B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115496035A (zh) * | 2022-11-21 | 2022-12-20 | 瀚博半导体(上海)有限公司 | 芯片的验证方法、装置、芯片、电子设备和介质 |
CN116992805A (zh) * | 2023-08-01 | 2023-11-03 | 上海砹芯科技有限公司 | 基于生成式约束模型的芯片验证系统、方法及验证设备 |
Also Published As
Publication number | Publication date |
---|---|
CN118536445A (zh) | 2024-08-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8924937B1 (en) | Method and system for generating verification information and tests for software | |
US8782580B2 (en) | Executing a hardware simulation and verification solution | |
CN115841089A (zh) | 一种基于uvm的系统级芯片验证平台及验证方法 | |
US8234617B2 (en) | Method and system for re-using digital assertions in a mixed signal design | |
US7237210B2 (en) | Methods, systems and media for managing functional verification of a parameterizable design | |
CN117094269B (zh) | 一种验证方法、装置、电子设备及可读存储介质 | |
CN118536445B (zh) | 一种用于芯片仿真的方法和计算设备 | |
CN101263498A (zh) | 用于集成电路设计仿真的断言的开发 | |
US7437282B2 (en) | Method and apparatus to provide alternative stimulus to signals internal to a model actively running on a logic simulation hardware emulator | |
Civera et al. | New techniques for efficiently assessing reliability of SOCs | |
Kamath et al. | A comprehensive multi-voltage design platform for system-level validation of standard cell library | |
TWI427496B (zh) | 製造積體電路的模型的方法和系統 | |
US8869080B2 (en) | Automatically identifying resettable flops for digital designs | |
Patel et al. | Method and Apparatus for Bug Free Rapid Silicon Bringup | |
Habinc et al. | Using VHDL for board level simulation | |
US7461364B2 (en) | Methods and readable media for using relative positioning in structures with dynamic ranges | |
CN110704260A (zh) | 一种用于处理器io寄存器测试激励的可重用方法 | |
de Wit | Comparison of Feature Verification and Directed Verification Coverage | |
CN118297009B (zh) | 一种基于内嵌仿真验证的逻辑综合处理方法、装置及计算机可读存储介质 | |
Huang et al. | FPGA-Based Emulation for Accelerating Transient Fault Reduction Analysis | |
CN119716490A (zh) | 一种芯片功耗的测试方法、装置、设备和介质 | |
Hashempour et al. | An integrated environment for design verification of ATE systems | |
Magdy et al. | A CAD Tool of Adaptive Coverage Exclusions for Complex Industrial HDL Designs | |
CN119088365A (zh) | 一种性能仿真模型构建方法、装置和性能仿真方法 | |
Zhao et al. | Parallel stimulus generation based on model checking for coherence protocol verification |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |