CN118332982A - 验证方法、验证系统、设备以及存储介质 - Google Patents

验证方法、验证系统、设备以及存储介质 Download PDF

Info

Publication number
CN118332982A
CN118332982A CN202410459044.4A CN202410459044A CN118332982A CN 118332982 A CN118332982 A CN 118332982A CN 202410459044 A CN202410459044 A CN 202410459044A CN 118332982 A CN118332982 A CN 118332982A
Authority
CN
China
Prior art keywords
module
simulation
model
tested
unit
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.)
Pending
Application number
CN202410459044.4A
Other languages
English (en)
Inventor
吴兴涛
赫昆迎
高巍
袁硕
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Haiguang Information Technology Chengdu Co ltd
Original Assignee
Haiguang Information Technology Chengdu Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Haiguang Information Technology Chengdu Co ltd filed Critical Haiguang Information Technology Chengdu Co ltd
Priority to CN202410459044.4A priority Critical patent/CN118332982A/zh
Publication of CN118332982A publication Critical patent/CN118332982A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/32Circuit design at the digital level
    • G06F30/33Design verification, e.g. functional simulation or model checking
    • G06F30/3308Design verification, e.g. functional simulation or model checking using simulation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/32Circuit design at the digital level
    • G06F30/327Logic synthesis; Behaviour synthesis, e.g. mapping logic, HDL to netlist, high-level language to RTL or netlist
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2113/00Details relating to the application field
    • G06F2113/18Chip packaging

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)
  • Debugging And Monitoring (AREA)

Abstract

本公开提供一种验证方法、验证系统、设备以及存储介质。该方法包括:获取待测对象模块,待测对象模块包括待测模块主体,待测模块主体包括第一类型模拟单元与第二类型模拟单元,第一类型模拟单元包括第一模型和第一封装单元,第二类型模拟单元包括第二模型和第二封装单元,第一模型和第二模型通过第一封装单元和第二封装单元通信;获取模拟模块;对第一类型模拟单元和第二类型模拟单元进行预设编译;控制使模拟模块与待测对象模块通信以获取验证结果。本公开通过封装单元将两个类型模拟单元实现通信,并对应设置一定方式的编译顺序,可以快速实现第一模型和第二模型的联合仿真,解决了现有的仿真工具不支持环状连接仿真的问题。

Description

验证方法、验证系统、设备以及存储介质
技术领域
本公开的实施例涉及一种用验证方法、验证系统、设备以及存储介质。
背景技术
芯片验证用于在芯片生产之前基于相应的验证环境,例如验证芯片设计是否符合芯片定义的需求规格,是否包含设计缺陷,并在发现缺陷后及时更正等。目前,随着电子信息产业的急速发展,芯片规模越来越大,芯片验证工作也越来越复杂,芯片验证的重要性也越来越高。如何提供一种仿真验证平台或验证方法,以实现芯片的多个部分的联合验证,成为本领域亟待解决的技术问题。
发明内容
本公开至少一实施例提供了一种验证方法,包括:获取待测对象模块,其中,所述待测对象模块包括待测模块主体,所述待测模块主体包括第一类型模拟单元和第二类型模拟单元,所述第一类型模拟单元包括第一模型以及用于封装所述第一模型的第一封装单元,所述第二类型模拟单元包括第二模型以及用于封装所述第二模型的第二封装单元,所述第一模型和所述第二模型通过所述第一封装单元和所述第二封装单元彼此通信连接;获取模拟模块,其中,所述模拟模块配置为软件模拟环境;对所述第一类型模拟单元和所述第二类型模拟单元进行预设编译;控制使所述模拟模块与所述待测对象模块通信连接,以获取对应所述待测模块主体的验证结果。
例如,在本公开至少一实施例提供的一种验证方法中,所述第一封装单元和所述第二封装单元通过Socket机制实现所述彼此通信连接。
例如,在本公开至少一实施例提供的一种验证方法中,对所述第一类型模拟单元和所述第二类型模拟单元进行预设编译,包括:响应于所述第一类型模拟单元为顶层,所述第二类型模拟单元为次顶层,对所述第一类型模拟单元和所述第二类型模拟单元进行第一编译;或者,响应于所述第二类型模拟单元为顶层,所述第一类型模拟单元为次顶层,对所述第一类型模拟单元和所述第二类型模拟单元进行第二编译;所述第二编译不同于所述第一编译。
例如,在本公开至少一实施例提供的一种验证方法中,所述第一模型包括配置为基于硬件描述语言创建的第一子模型,或者,所述第一模型包括配置为基于硬件描述语言创建的第一子模型以及基于行为建模语言创建的第二子模型;所述第二模型包括配置为基于行为建模语言创建的至少一个第三子模型。
例如,在本公开至少一实施例提供的一种验证方法中,对所述第一类型模拟单元和所述第二类型模拟单元进行第一编译,包括:编译所述第一模型成行为建模语言以生成中间文件。
例如,在本公开至少一实施例提供的一种验证方法中,对所述第一类型模拟单元和所述第二类型模拟单元进行第二编译,包括:设置所述第二编译的编译顺序依次为:编译所述第一模型成行为建模语言以生成中间文件以及编译所述第二模型以生成中间文件,或者,设置所述第二编译的编译顺序依次为:编译所述第一模型中的第二子模型以生成中间文件、编译所述第一模型成行为建模语言以生成中间文件以及编译所述第二模型以生成中间文件。
例如,在本公开至少一实施例提供的一种验证方法中,获取待测对象模块,包括:获取第三封装单元,使得所述第一子模型通过所述第三封装单元与所述第二子模型进行通信连接,以形成所述第一模型,从而获取所述待测对象模块。
例如,本公开至少一实施例提供的一种验证方法还包括:获取存储模块;其中,控制使所述模拟模块与所述待测对象模块通信连接,以获取对应所述待测模块主体的验证结果,包括:控制使所述模拟模块与所述待测对象模块通信连接,以及使所述存储模块分别与所述模拟模块和所述待测对象模块通信连接,使得所述模拟模块至少实现对所述待测模块主体的寄存器的访问和/或实现对所述存储模块的访问,以获取对应所述待测模块主体的所述验证结果。
例如,本公开至少一实施例提供的一种验证方法还包括:获取自测模块,其中,所述自测模块配置为软件模拟环境;控制使所述自测模块分别与所述待测对象模块和所述存储模块通信连接,使得通过所述自测模块至少实现对所述待测模块主体的寄存器的访问和/或实现对所述存储模块的访问,以获取对应所述待测模块主体的所述验证结果。
例如,在本公开至少一实施例提供的一种验证方法中,所述存储模块包括第一主存储单元以及基于所述第一主存储单元创建的第二存储单元;所述模拟模块包括彼此隔离的第一空间和第二空间,第一空间配置作为用于访问所述待测模块主体的寄存器的入口以及所述第二空间配置作为用于访问所述第二存储单元的入口,所述待测对象模块还包括待测主体侧模拟空间;所述第二存储单元与所述第二空间通信连接以及所述第二存储单元分别与所述第一模型和所述第二模型通信连接,所述第一空间与所述待测主体侧模拟空间通过中间路径模块进行通信连接。
例如,在本公开至少一实施例提供的一种验证方法中,所述模拟模块包括内核模式驱动模块以及用户模式驱动模块,其中,所述内核模式驱动模块配置为基于所述第二存储单元映射一段内存空间以供所述用户模式驱动模块的应用程序使用,所述一段内存空间对应于所述第二空间。
例如,在本公开至少一实施例提供的一种验证方法中,所述待测对象模块还包括总线型终点模块和验证平台接口,所述总线型终点模块通过通信总线与所述验证平台接口进行通信连接,所述验证平台接口分别与所述第一封装单元和所述第二封装单元通信连接,所述总线型终点模块包括所述待测主体侧模拟空间,所述模拟模块还包括总线型根组件模块,所述总线型终点模块与所述总线型根组件模块通信连接以接收所述总线型根组件模块发送的操作请求。
例如,本公开至少一实施例提供的一种验证方法还包括:获取主系统模块,其中,所述主系统模块上设置KVM虚拟模块;其中,控制使所述模拟模块与所述待测对象模块通信连接,包括:所述模拟模块被配置为使对应的任务处理为VNC应用,使得所述模拟模块通过VNC机制与所述KVM虚拟模块配合使用,使得所述模拟模块与所述待测对象模块通信连接并且实现所述模拟模块对应的任务与所述待测对象模块对应的操作相对于所述主系统模块是两个不同的任务。
例如,在本公开至少一实施例提供的一种验证方法中,获取对应所述待测模块主体的所述验证结果包括:响应于所述模拟模块的VNC应用正常启动,获取的所述验证结果包括所述模拟模块与所述待测对象模块之间的通信连接正常。
本公开至少一实施例提供了一种验证系统,包括:待测对象模块,其中,所述待测对象模块包括待测模块主体,所述待测模块主体包括第一类型模拟单元和第二类型模拟单元,所述第一类型模拟单元包括第一模型以及用于封装所述第一模型的第一封装单元,所述第二类型模拟单元包括第二模型以及用于封装所述第二模型的第二封装单元;模拟模块,其中,所述模拟模块配置为软件模拟环境,所述模拟模块与所述待测对象模块通信连接;其中,所述第一模型和所述第二模型通过所述第一封装单元和所述第二封装单元实现彼此通信连接,以使得所述第一类型模拟单元和所述第二类型模拟单元进行预设编译。
例如,在本公开至少一实施例提供的一种验证系统中,所述第一封装单元和所述第二封装单元通过Socket机制实现彼此通信连接。
例如,本公开至少一实施例提供的一种验证系统还包括:存储模块,其中,所述存储模块分别与所述模拟模块和所述待测对象模块通信连接,以使所述模拟模块配置为至少实现对所述待测模块主体的寄存器的访问和/或实现对所述存储模块的访问。
例如,本公开至少一实施例提供的一种验证系统还包括自测模块以及用于切换所述自测模块和所述模拟模块的选择模块,所述自测模块配置为软件模拟环境,所述自测模块分别与所述待测对象模块和所述存储模块通信连接,以使得所述自测模块配置为至少实现对所述待测模块主体的寄存器的访问和/或实现对所述存储模块的访问。
本公开至少一实施例提供了一种电子设备,包括:处理器和存储器,其中,所述存储器上存储有计算机程序,所述计算机程序被所述处理器执行时,实现如上文任一项所述的验证方法。
本公开至少一实施例提供了一种计算机可读存储介质,其中,所述存储介质内存储有计算机程序,所述计算机程序被处理器执行时,实现如上述任一示例中所述的验证方法。
附图说明
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本公开一些实施例提供的一种验证系统的框图示意图;
图2为本公开一些实施例提供的一种待测模块主体的框图示意图;
图3为本公开一些实施例提供的一种待测对象模块的架构图;
图4为本公开一些实施例提供的一种验证系统的平台架构示意图;
图5为本公开一些实施例提供的一种存储空间分配的示意图;
图6为本公开一些实施例提供的一种模拟模块的框图示意图;
图7为本公开另一些实施例提供的一种验证系统的框图示意图;
图8为本公开一些实施例提供的一种验证方法的流程图;
图9为本公开一些实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
除非另有定义,本公开实施例使用的所有术语(包括技术和科学术语)具有与本公开所属领域的普通技术人员共同理解的相同含义。还应当理解,诸如在通常字典里定义的那些术语应当被解释为具有与它们在相关技术的上下文中的含义相一致的含义,而不应用理想化或极度形式化的意义来解释,除非本公开实施例明确地这样定义。
本公开实施例中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“一个”、“一”或者“该”等类似词语也不表示数量限制,而是表示存在至少一个。同样,“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。本公开实施例中使用了流程图用来说明根据本公开实施例的方法的步骤。应当理解的是,前面或后面的步骤不一定按照顺序来精确的进行。相反,可以按照倒序或同时处理各种步骤。同时,也可以将其他操作添加到这些过程中,或从这些过程移除某一步或数步。
本公开的发明人发现,对于芯片验证,待测设计(Design Under Test,DUT)可以包括由硬件描述语言(例如SystemVerilog)和用于软件的编程语言(例如C或C++)对应的设计代码实现的部分。例如,联合功能模型具有C语言模型设计(如可称为C模型设计)以及RTL(RegisterTransferLevel,寄存器传输级)模型设计。针对联合功能模型的设计,一般会产生交叉关系或夹层关系(也可称donut,即甜甜圈状态,具有环状的连接),例如一个RTL模型里面包含了一个C模型以及该C模型中还夹杂有RTL模型,从而产生donut这种环状的连接。
一般来说,对于编译器而言,其可直接识别C模型。对于一个RTL模型,编译器一般会先将RTL模型编译成C模型之后使得整体形成C模型,然后再进行下一步处理。但是目前的编译器无法实现很多种的具有模型夹层关系的模式的编译。
本发明的发明人还发现,为了联合功能模型的C模型设计和RTL模型设计并且解决仿真器不支持的donut联合设计问题,目前一些做法有以下几种:第一,将C模型转换为RTL模型,联合仿真;第二,将RTL模型转换为C模型,联合仿真;第三,将C模型和RTL模型分别编译并通过直接编程语言接口DPI(Direct Programming Interface)接口互联。但是这几种方法都有编译复杂以及无法合理解决donut编译问题。
本公开至少一实施例提供了一种验证方法,该方法包括:获取待测对象模块,其中,待测对象模块包括待测模块主体,待测模块主体包括第一类型模拟单元和第二类型模拟单元,第一类型模拟单元包括第一模型以及用于封装第一模型的第一封装单元,第二类型模拟单元包括第二模型以及用于封装第二模型的第二封装单元,第一模型和第二模型通过第一封装单元和第二封装单元彼此通信连接;获取模拟模块,其中,模拟模块配置为软件模拟环境;对第一类型模拟单元和第二类型模拟单元进行预设编译;控制使模拟模块与待测对象模块通信连接,以获取对应待测模块主体的验证结果。
本公开上述实施例的验证方法通过封装单元(wrapper)将第一类型模拟单元(基于硬件描述语言创建的模型,如RTL模型单元)和第二类型模拟单元(基于诸如C或C++的行为建模语言创建的模型,如C模型单元)实现通信,并且对应地设置一定方式的编译顺序,而不再使用单独编译转换,这样可以快速实现第一模型(如RTL模型)和第二模型(如C模型)的联合仿真,解决了现有的仿真工具(如Verilator工具)不支持donut仿真的问题,能够对RTL行为或者C语言行为进行快速替换和升级。
本公开至少一实施例还提供了一种与上述验证方法对应的验证系统。
下面结合附图对本公开的实施例及其示例进行详细说明。例如,下文一些实施例将结合本公开实施例中的附图,在基于Socket机制的基础上,对本公开一些实施例中的技术方案进行清楚、完整地描述。示例地,本公开一些示例提供一种基于Socket机制的芯片混合模型开发和验证系统,详见下文描述。
图1为本公开一些实施例提出的一种验证系统的框图示意图。
例如,如图1所示,本公开的实施例的验证系统包括模拟模块100和待测对象模块200。待测对象模块200是指待测设计(DesignUnderTest,DUT),DUT是一种可测性设计。例如,待测设计DUT通过相应的设计代码实现。模拟模块100配置为软件模拟环境,模拟模块100与待测对象模块200通信连接。例如,模拟模块100可以是QEMU(Quick Emulator),QEMU是一种模拟器,其能够完成用户程序模拟和系统虚拟化模拟。
例如,如图1所示,待测对象模块200包括待测模块主体210,待测模块主体210包括第一类型模拟单元211和第二类型模拟单元212,第一类型模拟单元211包括第一模型201以及用于封装第一模型201的第一封装单元203,第二类型模拟单元212包括第二模型202以及用于封装第二模型202的第二封装单元204。第一模型201和第二模型202通过第一封装单元203和第二封装单元204实现彼此通信连接,以使得第一类型模拟单元211和第二类型模拟单元212进行预设编译。
本公开的实施例中的第一类型模拟单元211和第二类型模拟单元212是两种类型的模拟单元,这两种类型的模拟单元是基于不同描述语言进行创建的模型单元,例如,其中一种类型是至少基于硬件描述语言创建的模型单元,并且另外一种是至少基于行为建模语言(如C语言或C++语言)创建的模型单元。例如,第一类型模拟单元211是一种被封装的硬件描述语言形式的模型单元,第二类型模拟单元212是一种被封装的C/C++语言形式的模型单元。
本公开上述实施例构建的验证系统支持第一模型(如RTL模型)和第二模型(如C模型)的donut仿真环境,解决了现有的仿真工具不支持donut仿真的问题,能够对RTL行为或者C语言行为进行快速替换和升级。本公开的实施例通过构建该仿真环境,方便系统移植、方便快速部署以及模型的快速拓展。
在一些示例中,第一模型201包括配置为基于硬件描述语言创建的第一子模型。在另一些示例中,第一模型201包括配置为基于硬件描述语言创建的第一子模型以及基于行为建模语言创建的第二子模型。
在一些示例中,第二模型202包括配置为基于行为建模语言创建的至少一个第三子模型。
在一些示例中,在第一模型201包括配置为基于硬件描述语言创建的第一子模型以及基于行为建模语言创建的第二子模型时,第一子模型可通过第三封装单元与第二子模型进行通信连接。
需要说明的是,第一模型201的示例可以和第二模型202的示例进行任意的搭配组合,其可根据实际需要进行自由调整,这些可在本公开的实施例的保护范围,即本公开的实施例对待测模块主体中的联合设计的具体布置不作限制。比如,第一模型201至少包括RTL模型(也可称为RTLmodel)以及C模型(本文也可将之替代称为Cmod,Cmod是指C模型的软实现)且第二模型202至少包括C模型。又比如,第一模型201至少包括RTL模型且二模型202至少包括C模型。当然,此仅仅为示例性的,并不为本公开的实施例的限制。
在本公开的实施例中,该验证系统可以替换或升级已有的RTL设计和Cmod设计,并进行功能验证或者具有时序行为的模型验证,从而能够升级功能和提高需求,还能够解决donut编译和混合仿真问题。
例如,本公开的实施例中的硬件描述语言可以包括Verilog、SystemVerilog等,并且行为建模语言可以包括C语言、CPP语言(也可称之为C++语言)、SystemC或TLM2.0等。当然,此仅仅为示例性的,并不为本公开的实施例的限制。
需要说明的是,下文一些实施例主要是以硬件描述语言为Verilog或SystemVerilog以及行为建模语言为C语言或C++语言为例进行说明,但是本公开实施例对此并不做限制,本文不做穷举和赘述。
例如,第一封装单元203和第二封装单元204均是wrapper单元,并且该wrapper单元是一种条件查询封装类。如此,本公开的实施例可以通过增设封装单元来实现RTLmodel和Cmod之间的通信。
在一些示例中,第一封装单元203和第二封装单元203通过Socket机制实现彼此通信连接,从而实现第一模型201和第二模型202之间的通信。
在本公开的实施例中,Socket是一个网络通信的套接字(接口),Socket机制(如TLM Socket)是一种基于TCP/TP协议的通信方式,用于实现不同端之间的数据传输。
本公开的实施例通过采用传输速度较快的Socket机制并且配合一定的编译顺序,可以保证第一模型201(如RTL模型)和第二模型202(如C模型)之间的donut混合仿真。需要说明的是,本公开的实施例也可不仅限于Socket机制,还可以采用其他的通信机制,比如基于信号量或者基于共享内存的通信机制,只要是合适的端到端的网线通信机制均可,这里不做限制和赘述。
本公开一些实施例在对第一类型模拟单元211和第二类型模拟单元212进行预设编译时,可以根据第一类型模拟单元211和第二类型模拟单元212之间的层级关系以及模拟模块的具体设置来确定相应的编译顺序,以保证实现两个类型模拟单元的联合,并且能够解决现有技术中的无法在RTL中出现Cmod或者在Cmod中出现RTL的donut问题。
在一些示例中,在第一类型模拟单元211为顶层且第二类型模拟单元212为次顶层的情况下,可以对第一类型模拟单元211和第二类型模拟单元212进行第一编译,第一编译具有对应的编译顺序。
另一些示例中,在第二类型模拟单元212为顶层且第一类型模拟单元211为次顶层,可以对第一类型模拟单元211和第二类型模拟单元212进行第二编译,第二编译也具有对应的编译顺序。示例地,第二编译不同于第一编译,比如第二编译的编译顺序和第一编译的编译顺序不同。
例如,上述获取的验证结果可以是验证通过,或者验证不通过。
在一些示例中,本公开的实施例的验证系统基于上述获取的验证结果,能够适用于待测对象模块的模型的验证、模型的修改(如二次开发和重新设计)以及重新开发的设计的验证。例如,本公开的实施例的验证系统可以用于在独立验证模型正确性的基础上,通过运行应用程序或者一致性测试集(Conformable Test Set,CTS)来获取一致性是否满足,以充分验证混合仿真的正确性。又例如,本公开的实施例的验证系统也可以用于实现Profiling工具的开发,Profiling是一种测量和分析程序运行时性能的工具。
示例地,在没有单独验证的环境下,可以对现有已经测试过的Cmod和RTLmodel进行自测试。又示例地,在已有Cmod的环境下,替换已有的Cmod设计为RTL设计,达到RTL设计的目的。再示例地,在已有RTL的环境下,替换已有的RTL设计为Cmod设计,达到更新和架构升级的目的。示例地,在已有的环境下,可以执行现有的CTS测试集,并收集覆盖率,达到验证某一个功能或者整个待测设计是否满足功能需求以及功能是否正确的目的。当然,此仅仅为示例性的,并不为本公开的实施例的限制,其可以根据实际需求而定,由于此并非为本公开实施例需要描述的重点,这里不再赘述。
图2为本公开一些实施例提出的一种待测模块主体的框图示意图。
例如,如图2所示,待测模块主体510包括模拟单元511(对应第一类型模拟单元)和模拟单元512(对应第二类型模拟单元)。模拟单元511包括模型501以及用于封装模型501的封装单元503。模拟单元512包括模型502以及用于封装模型502的封装单元504。模型501和模型502通过封装单元503和封装单元504实现彼此通信连接,以使得模拟单元511和模拟单元512进行预设编译。
例如,如图2所示,模型501包括子模型506a以及子模型506b,子模型506a是基于硬件描述语言创建的子模型(如RTL模型),子模型506b是基于C语言或C++语言创建的子模型(即C模型)。例如,如图2所示,子模型506a通过封装单元505与子模型506b进行通信连接。封装单元505是wrapper单元,该封装单元505可以理解为是一个用于通信的转接口。图2示例中的模拟单元511可以理解为是一种wrapper-RTL单元,相当于是在模型501基础之上包一层wrapper。
在一些示例中,模型502包括至少一个基于C语言或C++语言创建的子模型(即模型502包括至少一个C模型)。例如,如图2所示,模型502包括子模型507、子模型508a和子模型508b。子模型507作为模型502中的顶级的子模型且子模型507是基于C语言或C++语言创建的C模型。
在一些示例中,子模型508a和子模型508b是模型502中平级的两个子模型,子模型508a和子模型508b可以分别是TLM(Transaction Level Model,事务级建模)模型以及基于C语言或C++语言创建的C模型。示例地,作为子模型508a的TLM模型也可以是通过C语言或C++语言等写成的模型,该TLM模型可以模拟软件行为,也可以模拟诸如RTL的行为。图2示例中的模拟单元512可以理解为是一种wrapper-Cmod单元,相当于是在模型502基础之上包一层wrapper。
本公开一些实施例在对模拟单元511和模拟单元512进行预设编译时,可以根据模拟单元511和模拟单元512之间的层级关系以及模拟单元的具体设置来确定相应的编译顺序以实现模拟单元511和模拟单元512这两个类型模拟单元的联合仿真,并且能够解决现有技术中的无法在RTL中出现Cmod或者在Cmod中出现RTL的donut问题,从而可以快速得到仿真结果。
例如,对于图2示例,在模拟单元511为顶层且模拟单元512为次顶层的情况下,可以对模拟单元511和模拟单元512进行第一编译,第一编译具有对应的编译顺序。又例如,对于图2示例,在模拟单元512为顶层且模拟单元511为次顶层的情况下,可以对模拟单元511和模拟单元512进行第二编译,第二编译也具有对应的编译顺序。示例地,第二编译不同于第一编译,比如第二编译的编译顺序和第一编译的编译顺序不同。
需要说明的是,图2所示的模拟单元511和模拟单元512之间的层次以及包含关系,或者图1所示的第一类型模拟单元211和第二类型模拟单元212之间的层次以及包含关系仅仅为附图示意性的,而非对本公开的实施例的限制,其可以根据实际需求进行设置,这里不做限制和赘述。
例如,对于模拟单元511为顶层且模拟单元512为次顶层的情况,其可以理解为模拟单元512的模型502包含在模拟单元511的模型501里面,即模拟单元511的模型501里面有模拟单元512的模型502。相应地,模拟单元512为顶层且模拟单元511为次顶层的情况可以理解为模拟单元511的模型501包含在模拟单元512的模型502里面,即模拟单元512的模型502里面有模拟单元511的模型501。
在一些示例中,关于对模拟单元511和模拟单元512进行第一编译,其可以是:编译模型501成行为建模语言(如C语言)以生成中间文件。第一编译是一种直接编译,例如可将作为模型501的整体RTL模型直接转成C语言形式。例如,本公开的实施例的中间文件的形式是软件,如中间文件是.o文件,下文相应地方的中间文件也是如此,后续不再赘述。
在一些示例中,当模型501中包括RTL model形式的子模型和Cmod形式的子模型时,第一编译是直接将wrapper-RTL转成C语言形式,并且在直接将wrapper-RTL变换成C语言过程中,模型501里面的Cmod无需做转换,即相当于将模型501中的RTL model变换成C语言形式,从而实现将模型501转成C语言形式。
在一些示例中,关于对模拟单元511和模拟单元512进行第二编译,当模型501包括基于硬件描述语言创建的子模型时,第二编译的编译顺序依次是:编译模型501成行为建模语言(如C语言)以生成中间文件以及编译模型502以生成中间文件。
在另一些示例中,关于对模拟单元511和模拟单元512进行第二编译,当模型501不仅包括基于硬件描述语言创建的子模型,还包括基于行为建模语言(如C语言)创建的子模型时,第二编译的编译顺序依次是:编译模型501中的子模型506b(如Cmod)以生成中间文件、编译模型501成行为建模语言(如C语言)以生成中间文件以及编译模型502以生成中间文件。
例如,如图2所示,关于对模拟单元511和模拟单元512进行第二编译,若模型501中包括RTL model形式的子模型506a和Cmod形式的子模型506b时,第二编译是先将wrapper-RTL中的Cmod转换出来得到.o文件,然后再将wrapper-RTL转换出来得到.o文件(即也将模型501中的RTLmodel转换出来),最后将外部的wrapper-Cmod转换出来得到.o文件。
本公开上述实施例通过Socket机制可以保证RTL模型和C/C++模型互联,并且通过合理的编译顺序和方法,将有SystemC、TLM、C++、C的混合逻辑实现组成了一套基于Socket机制的模型开发(如GPU模型开发)和设计的验证平台。基于本公开的实施例的验证系统,还可以完成诸如驱动功能验证以及逻辑功能的更新和升级、上层应用验证、上层工具开发等一系列操作。
需要说明的是,图2仅仅是待测模块主体的一种示例,其并不为本公开的实施例的限制,例如,在其他一些实施例中,图2中的子模型508b也可换成一种基于硬件描述语言创建的RTL模型,并且对应的编译顺序进行适应性地调整,这都可根据实际情况进行自由选择,本公开的实施例对此不做限制,此处不再赘述。
例如,如图1所示,本公开的实施例的验证系统还包括仿真验证设备400。例如,仿真验证设备400是硬件。例如,仿真验证设备400是中央处理器(CPU)。当然,此仅仅为示例性的,并不为本公开的限制。
在一些示例中,模拟模块100可以是QEMU,并且本公开的实施例的QEMU运行平台不同,本公开的实施例实现的完全模拟是一套软件开发环境,除了依赖于CPU(或者CPU加显示器,因为仿真需运行在CPU)之外,不需要借助额外的硬件来加速整个QEMU的仿真进度,并且QEMU中可以运行任意CPU模式。
例如,如图1所示,本公开的实施例的验证系统还包括存储模块300(memory,可简称存储或内存),存储模块300分别与模拟模块100和待测对象模块200通信连接,以使模拟模块100配置为至少实现对待测模块主体210的寄存器的访问和/或实现对存储模块300的访问,用以获取对应待测模块主体210的验证结果。例如,存储模块300通过Socket机制分别与模拟模块100和待测对象模块200通信。
例如,存储模块300可以通过相应的设计代码实现。当然,此仅仅为示例性的,并不为本公开的实施例的限制。
本公开的实施例通过模拟PCIE(Peripheral Component Interconnect Express,外设组件互连快速总线,其是一种高速串行计算机扩展总线标准)的Socket行为,可以实现基于PCIE设备的仿真行为,并且通过Socket机制快速实现寄存器配置和数据读写。
图3为本公开一些实施例提供的一种待测对象模块的架构图。图4为本公开一些实施例提供的一种验证系统的平台架构示意图。
例如,如图1-图4所示,存储模块300包括第一主存储单元310(如图4所示的mainmemory)以及基于第一主存储单元310创建的第二存储单元320(如图4所示的dev memory)。示例地,通过第二存储单元320可创建至少一段虚拟内存(例如下文的mmap region)以供上层的应用(例如图4所示的application)使用。
例如,如图4所示,第二存储单元320是共享内存,其可以被待测对象模块200访问,也可以被模拟模块100访问,还可以被自测模块700访问,详见下文。
本公开的实施例通过Socket的工作方式,可以快速实现某一个应用程序的测试,并通过Socket机制下的共享内存方式,完美解决了大块的数据搬运问题,提升了仿真效率。
例如,如图4所示,模拟模块100包括彼此隔离的第一空间101(如图4所示的TLM-socket PCIE-RC bar0,可简称bar0)和第二空间102(如图4所示的TLM-socketbar2,可简称bar2),第一空间101配置作为用于访问待测模块主体210的寄存器的入口以及第二空间102配置作为用于访问第二存储单元320的入口(如作为访问第二存储单元320的读写空间)。
例如,如图4所示,第一空间101和第二空间102可以并行进行访问,本公开的实施例中的读写寄存器和读写存储单元可以分隔开并且并行操作。在一些示例中,第一空间101是具有PCIE(Peripheral Component Interconnect Express)行为的空间,第二空间102是具有PCIE行为的空间。
本公开的实施例通过彼此隔离的两个空间,可以在模拟模块中将数据的读写进行隔离,这样可以根据不同的应用需求,开启不同的存储大小,可以节省存储空间并且保证不同应用需求。
例如,如图4所示,待测对象模块200还包括待测主体侧模拟空间2a如图4所示的TLM-socketPCIE-EPbar0)。
例如,如图4所示,第二存储单元320与第二空间102通信连接。例如,第二存储单元320与第二空间102之间使用的是Socket机制。
例如,如图4所示,第二存储单元320分别与待测模块主体210的第一模型201和第二模型202通信连接。第二存储单元320可以被待测模块主体210访问。例如,第二存储单元320与待测模块主体210的第一模型201和第二模型202之间使用的是Socket机制。
本公开的实施例通过Socket机制通信来实现访问第二存储单元320,使得本公开的实施例能够以较高的传输速度来读写第二存储单元320。
在一些示例中,待测模块主体210的第一模型201和第二模型202与第二存储单元320之间的交互包括:待测模块主体210的第一模型201和第二模型202可从第一模型201和第二模型202获取数据;和/或待测模块主体210的第一模型201和第二模型202向第一模型201和第二模型202提供数据。当然,此仅仅为示例性的,并不为本公开的实施例的限制。
例如,如图4所示,第一空间101与待测主体侧模拟空间2a通过中间路径模块601(如图4所示的bar0 socket path)进行通信连接。由此,第一空间101可以通过中间路径模块601去访问待测主体侧模拟空间2a。例如,如图3和图4所示,在配置寄存器之后,可以通过第一空间101对应的socket机制,经过中间路径模块601来访问至待测主体侧模拟空间2a。
在一些示例中,本公开的实施例实现对待测模块主体210的寄存器的访问,可以通过访问DUT-wrapper 203(和/或204)来实现,并且本公开的实施例实现对存储模块300的访问,可以不经过待测模块主体210,而是可以直接访问存储模块300。
例如,如图4所示,第一空间101与待测主体侧模拟空间2a之间使用的是Socket机制,待测主体侧模拟空间2a与TLM-BUS250(BUS是总线)之间使用的是Socket机制,TLM-BUS250与DUT-wrapper之间使用的是Socket机制。
本公开的实施例通过在待测模块主体侧模拟了具有PCIE设备行为的存储单元,通过共享内存(如上述的dev memory)的方式和模拟模块通信,并在应用程序执行前可以通过应用程序的大小,自行决定存储大小,这种Socket机制可满足大块的存储行为的数据搬运的效率问题,实现了应用程序对存储模块的快速读写。
本公开的实施例的验证系统具有很强的可移植性,Socket机制的入口支持标准的任何AMBA(Advanced Micro-ControllerBusArchitecture,高级微控制器总线架构)总线接口转换,待测设计可以是任何带有AMBA总线接口的设计。
图5为本公开一些实施例提供的一种存储空间分配的示意图。
例如,如图4和图5所示,模拟模块100包括内核模式驱动模块110(如图4所示的KMD,Kernel Mode Driver)以及用户模式驱动模块120(如图4所示的UMD,User ModeDriver),内核模式驱动模块110是一种Linux内核级硬件接口管理的驱动实现,用户模式驱动模块120是一种基于用户层使用的runtime library驱动实现。例如,如图5所示,内核模式驱动模块110配置为基于第二存储单元320映射一段内存空间(如图5所示的mmapregion)以供用户模式驱动模块120的应用程序130使用,这里的一段内存空间对应于第二空间102。
在一些示例中,用户模式驱动模块120的应用程序130包括GPU应用。例如,本公开的实施例可以通过在用户模式驱动层执行GPU不同应用,可以快速得到仿真结果。当然,此仅仅为示例性的,并不为本公开的实施例的限制。
例如,本公开一些实施例提供了一种基于Socket机制的芯片混合模型开发和验证系统,例如可包含对GPU支持的通用计算功能和图形渲染功能的架构设计和验证平台,可以支持Cmod和RTL功能的混合仿真验证,并具有并行开发的基础。当然,此仅仅为示例性的,并不为本公开的实施例的限制。
例如,如图5所示,本公开的实施例可以在内核模式驱动模块中通过mmap方式将存储重新映射一段内存空间(如图5所示的mmap region)给用户模式驱动模块侧的应用程序130使用。在图5的示例中,mmap是一种内存映射文件的方法。需要说明的是,本公开的实施例并不仅限于mmap这种映射方式,还可以是其他合理的映射方式,这里不再穷举和赘述。
本公开的实施例通过添加基于mmap机制的存储行为,并在驱动层添加基于mmap的存储模块内存分配和管理,可以极大提升存储模块的访存行为。
例如,如图4所示,本公开的实施例的验证系统还可以包括自测模块700(Self-Testmodel)以及用于切换自测模块700和模拟模块100的选择模块(未图示),自测模块700配置为软件模拟环境。例如,如图4所示,自测模块700分别与待测对象模块200和存储模块300通信连接,以使得自测模块700配置为至少实现对待测模块主体210的寄存器的访问和/或实现对存储模块300的访问,用以获取对应待测模块主体210的验证结果。例如,自测模块700通过Socket机制分别与存储模块300和待测对象模块200通信。
在一些示例中,待测模块主体210包括待测试的单独模块,本公开的实施例中获取的验证结果可以包括单独模块测试的逻辑和功能的准确性。本公开的实施例通过自测模块可以用来配置待测模块主体的寄存器以及存储模块的读写访问,从而可以快速地验证单独模块的逻辑和功能的准确性。
在一些示例中,若在需要单独验证某一个RTL模型或者Cmod行为时,通过配置可以完成单独一个模块行为的验证工作,即通过自测试逻辑配置Cmod或者RTL模型和修改存储数据。当然,此仅仅为示例性的,并不为本公开的限制。
本公开上述实施例的验证系统具有自测试功能,可单独执行某一个模块的仿真验证和测试,可以和模拟模块(如QEMU)的仿真环境独立开来,以实现并行测试的目的。
例如,如图4所示,自测模块700可以访问第二存储单元320,自测模块700可提供一些自己的私有数据至第二存储单元320。例如,自测模块700与第二存储单元320之间使用的是Socket机制。例如,如图4所示,自测模块700可以去访问待测模块主体210。例如,在图4的示例中,自测模块700与待测模块主体210的第一模型201和第二模型202之间使用的是Socket机制。例如,在图4的示例中,自测模块700与第一模型201和第二模型202进行通信,可以不经过DUT-wrapper。
在一些示例中,如图3和图4所示,待测对象模块200还包括总线型终点模块240(PCIE EP,Peripheral ComponentInterconnect Express EndPoint)和验证平台接口220(TB,testbench)。例如,TB可以是一种基于C++函数实现的主函数(main函数)测试平台接口,其用于提供程序的入口。
在一些示例中,总线型终点模块240通过通信桥(例如是一种总线)230与验证平台接口220进行通信连接,例如,验证平台接口220和通信桥230配合在一起可以等价于上述的TLM-BUS250。例如,如图4所示,验证平台接口220分别与第一封装单元203和第二封装单元204通信连接,总线型终点模块240包括待测主体侧模拟空间2a。例如,验证平台接口220分别与第一封装单元203和第二封装单元204之间使用的是Socket机制。
例如,如图3所示,总线型终点模块240通过一路Socket(如图3所示的Self-Testsocket)与自测模块700通信,并且通过另一路Socket(如图3所示的QEMU socket)与模拟模块100通信。
在一些示例中,模拟模块100还包括总线型根组件模块(PCIE RC,PeripheralComponent Interconnect Express Root Complex)140,总线型终点模块240与总线型根组件模块140(详见下文)通信连接以接收总线型根组件模块140发送的操作请求。例如,接收总线型根组件模块140请求的有效负载数据包等操作。
本公开的实施例的验证系统中带有PCIE socket行为的EP模块通过socket bus和TB连接,socket bus也可以接收自测模块的寄存器读写和存储模块访问,可以完成例如对单独模块的自测行为。
在一些示例中,本公开的实施例可以在剔除模拟模块100之后,再通过自测模块700对单独模块进行测试。当然,此仅仅为示例性的,并不为本公开的实施例的限制。本公开的实施例通过自测试行为和QEMU仿真两种实现方式可以实现并行的仿真逻辑,均可以达到验证待测设计的目的。
需要说明的是,本公开的实施例的自测模块700和模拟模块100的使用方式除了上述的并行之外,还可以包括其他诸如相互配合或相互补充的方式,例如先通过自测模块700监测一下待测设计是否有通信问题,在自测模块700测试通过之后,再启动模拟模块100去测试整体大环境,自测模块700和模拟模块100它们各自需要完成的任务与操作可以根据实际需求进行自由的调整,此处不再赘述。
在一些示例中,本公开的实施例中的模拟模块100和自测模块700可以视为两套模拟环境。例如,自测模块700可以通过添加逻辑来实现模拟模块100类似的至少一部分功能,比如访问存储模块300、访问待测模块主体210等。又例如,自测模块700可以通过添加逻辑来实现在模拟模块100基础之上的辅助测试,比如,通过自测模块700可以监测待测模块主体210的寄存器的状态变化、打印状态等。当然,此仅仅为示例性的,并不为本公开的实施例的限制。
本公开的实施例通过使用仿真环境相较于模拟模块更简单的自测模块,可以快速、高效地实现相应的测试。
图6为本公开一些实施例提供的一种模拟模块的框图示意图。图7为本公开另一些实施例提供的一种验证系统的框图示意图。
例如,如图6和图7所示,本公开的实施例的验证系统还包括主系统模块800(如图示的host OS,Host Operation System),主系统模块800上设置KVM虚拟模块900(也可称KVM模块,如图6所示的KVM所在框),其中,KVM全称是Kernel-basedVirtual Machine,是系统虚拟化技术,是采用硬件虚拟化技术的虚拟化方式。例如,在图6的示例中,Host CPU对应上文中的CPU,Host CPU之上具有host OS,使得在操作系统启动后桌面能够显现。
例如,如图6所示,模拟模块100不仅包括总线型根组件模块140,还包括模拟程序单元150(如图示的QEMU Program)。需要说明的是,由于本公开的实施例的诸如QEMU的模拟模块100本身的其他具体组成并非本公开的实施例的重点,这里不再赘述。
本公开的实施例通过在模拟模块(如QEMU)中添加模拟PCIE行为的RC模块以及在待测设计侧添加了基于TLM Socket功能的PCIE行为的EP模块,并通过TLM Socket执行OS侧对待测设计的寄存器读写和存储模块的访问,从而能够运行应用程序,执行CTS测试和执行Profiling工具。
例如,如图6所示,DUT driver(用于待测设计的驱动)和memory driver(用于存储模块的驱动)是用户端的驱动,其是基于QEMU Program进行创建的。DUT driver和memorydriver运行在QEMU Program基础之上,并且输入的参数是来自于Client OS(用户端操作系统)。DUT driver和memory driver均是对应于UMD和KMD的驱动,例如对于DUT driver,其可包括UMD对应的driver和KMD的driver,以及,对于memory driver,其也可包括UMD对应的driver和KMD的driver。由于此并非是本公开的实施例需要描述的重点,这里不再赘述。
本公开的实施例的验证系统模拟了基于Socket机制的RC的TLM模型,并加载到模拟模块(如QEMU)中,可以在指定Socket路径的条件下,启动OS服务,并通过加载驱动的方式,对模型进行仿真。
例如,如图6和图7所示,本公开的实施例可以通过设置KVM虚拟模块900来实现加速作用。例如,对于KVM机制,可以在虚拟机中通过查看/dev/kvm文件来确认虚拟机是否开启了KVM。如图6所示,KVM虚拟模块900与总线型根组件模块140通信连接,由此通过KVM来为上层提供加速。
例如,如图7所示,Hardware(NIC)对应上文的硬件CPU,基于该网络接口卡(NIC)的硬件可便于利用socket机制进行通信。HostNIC driver是一个对应于virtual bridge的驱动单元,virtualbridge是构建的一个虚拟的连接桥,virtual bridge分别信号连接模拟模块100和待测对象模块200。KVM kernel是对应于KVM机制的驱动单元。HostNIC driver和virtualbridge是基于Hardware(NIC)来提供相应支持。当然,此仅仅为示例性的,并不为本公开的实施例的限制,并且对于host OS和KVM机制的其他有关具体使用的细节并非是本公开的实施例需要描述的重点,这里不再赘述。
例如,如图7所示,模拟模块100被配置为使对应的任务处理为VNC应用,使得模拟模块100通过VNC(VirtualNetwork Computing,虚拟网络计算机)机制与KVM虚拟模块900配合使用,使得模拟模块100与待测对象模块200通信连接并且实现模拟模块100对应的任务与待测对象模块200对应的操作相对于主系统模块800是两个不同的任务。
本公开的实施例的该验证系统通过开启KVM服务可将例如QEMU应用作为一个用户端应用,可以快速布局给其它开发人员(比如验证、设计、架构建模等),快速实现多个开发平台的布局,从而可以并行进行验证、设计、建模等工作,并通过这种VNC的Socket机制,构建模拟宿主机的访问环境。
在一些示例中,若模拟模块100的VNC应用正常启动,获取的验证结果对应地包括模拟模块100与待测对象模块200之间的通信连接正常。例如,若模拟模块100的VNC应用无法正常启动,则模拟模块100与待测对象模块200之间的通信有问题。由此,本公开的实施例通过VNC应用是否正常启动来判断两个对象之间的握手通信是否正常,非常简单和高效。
在一些示例中,本公开的实施例为了在QEMU应用中得到仿真结果,通过将QEMU应用整体构建为一个VNC服务的方式,在QEMU内部可以通过例如memcpy(memcpy是指C和C++使用的内存拷贝函数)的方式得到存储模块中计算的结果,并可以通过用户界面方式进行显式的阅读计算结果或者图形渲染结果。
在一些示例中,为了将QEMU任务作为一个VNC应用,可以通过VNC服务器将QEMU的应用作为一个带有Socket行为的用户端应用,然后和具有Socket接收能力的DUT进行通信,以此DUT的执行和QEMU的执行在Host OS来看就是两个不同任务的进程。
本公开的实施例的验证系统可将模型设计和QEMU行为转为两种VNC服务,并通过VNC的Socket机制快速实现多个开发平台的布局。
在一些示例中,本公开的实施例为了在QEMU中正常执行应用程序和Profiling工具,在QEMU运行操作系统OS以及KMD驱动后,通过加载例如GPU应用的具体runtime驱动之后,即可执行正常的GPU访问任务。当然,此仅仅为示例性的,并不为本公开的实施例的限制。
在一些示例中,本公开的实施例验证系统可以实时地获取对应第一模型201和/或第二模型202的波形文件,通过查看波形文件来验证待测对象模块200,以获取对应待测模块主体210的验证结果。
例如,在待测模块主体210中的模型包括RTL设计,可以通过查看生成的波形文件来查看关于RTL设计的结果(例如通过VCD波形文件来查看相应结果),判断模型设计是否满足预期,用以获取验证结果。由此,本公开的实施例可以通过波形可视化的方法来查看RTL相关结果,简单方便。需要说明的是,这仅仅为示例性的,并不为本公开的实施例的限制,例如,针对RTL模型设计,本公开另外的实施例还可通过GDB(GNU symbolic debugger)模式单步调试的方式来获取相应的验证结果。
在一些示例中,关于Cmod设计的寄存器模型设计,可以通过VCD波形文件来查看相应结果,也可以通过GDB模式单步调试来查看相应结果,用以得知Cmod设计是否满足预期,从而获取验证结果。当然,此仅仅为示例性的,并不为本公开的实施例的限制。
需要注意的是,在本公开的实施例中,该验证系统可以包括更多或更少的模块,并且各个模块之间的连接关系不受限制,可以根据实际需求而定。各个模块的具体构成方式不受限制。
以上实施例中的各个模块可被分别配置为执行特定功能的软件、硬件、固件或上述项的任意组合。例如,这些模块可对应于专用的集成电路,也可对应于纯粹的软件代码,还可对应于软件与硬件相结合的模块。
需要说明的是,尽管以上在描述验证系统时将其划分为用于分别执行相应处理的模块,然而,本领域技术人员清楚的是,各模块执行的处理也可以在验证装置不进行任何具体模块划分或者各模块之间并无明确划界的情况下执行。
本公开至少一实施例还提供了一种验证方法,该验证方法可以基于上述任一实施例所述的验证系统实现。关于基于验证系统的验证方法的具体实施技术效果可以参考本公开上述实施例中提供的验证系统。
图8为本公开一些实施例提供的一种验证方法的流程图。本公开的实施例的验证方法的示例的详细说明见下文。
例如,如图8所示,本公开至少一实施例提供的验证方法包括步骤S1至步骤S4。
步骤S1、获取待测对象模块。
例如,在步骤S1中,待测对象模块包括待测模块主体,待测模块主体包括第一类型模拟单元和第二类型模拟单元,第一类型模拟单元包括第一模型以及用于封装第一模型的第一封装单元,第二类型模拟单元包括第二模型以及用于封装第二模型的第二封装单元,第一模型和第二模型通过第一封装单元和第二封装单元彼此通信连接。
步骤S2、获取模拟模块。
例如,在步骤S2中,模拟模块配置为软件模拟环境。
步骤S3、对第一类型模拟单元和第二类型模拟单元进行预设编译。
步骤S4、控制使模拟模块与待测对象模块通信连接,以获取对应待测模块主体的验证结果。
本公开上述实施例的验证方法支持第一模型(如RTL模型)和第二模型(如C模型)的donut仿真环境,解决了现有的仿真工具不支持donut仿真的问题,可对RTL行为或者C语言行为进行快速替换和升级。本公开的实施例通过构建该仿真环境,方便系统移植、方便快速部署以及模型的快速拓展。
例如,在步骤S1中,第一模型包括配置为基于硬件描述语言创建的第一子模型,或者,第一模型包括配置为基于硬件描述语言创建的第一子模型以及基于行为建模语言创建的第二子模型。例如,在步骤S1中,第二模型包括配置为基于行为建模语言创建的至少一个第三子模型。
例如,在步骤S1中,第一封装单元和第二封装单元通过Socket机制实现彼此通信连接,从而实现第一模型和第二模型之间的通信。
例如,在步骤S1中,上述获取待测对象模块包括:获取第三封装单元,使得第一子模型通过第三封装单元与第二子模型进行通信连接,以形成第一模型,从而获取待测对象模块。
本公开的实施例通过采用传输速度较快的Socket机制并且配合一定的编译顺序,可以保证第一模型(如RTL模型)和第二模型(如C模型)之间的donut混合仿真。
在一些示例中,在步骤S3中,对第一类型模拟单元和第二类型模拟单元进行预设编译,包括以下过程或步骤:响应于第一类型模拟单元为顶层,第二类型模拟单元为次顶层,对第一类型模拟单元和第二类型模拟单元进行第一编译;或者,响应于第二类型模拟单元为顶层,第一类型模拟单元为次顶层,对第一类型模拟单元和第二类型模拟单元进行第二编译;第二编译不同于第一编译。
在一些示例中,上述的对第一类型模拟单元和第二类型模拟单元进行第一编译,包括:编译第一模型成行为建模语言以生成中间文件。
在一些示例中,上述的对第一类型模拟单元和第二类型模拟单元进行第二编译,包括:设置第二编译的编译顺序依次为:编译第一模型成行为建模语言以生成中间文件以及编译第二模型以生成中间文件,或者,设置第二编译的编译顺序依次为:编译第一模型中的第二子模型以生成中间文件、编译第一模型成行为建模语言以生成中间文件以及编译第二模型以生成中间文件。
本公开一些实施例在对第一模拟单元和第二模拟单元进行预设编译时,可以根据第一模拟单元和第二模拟单元之间的层级关系以及模拟单元的具体设置来确定相应的编译顺序以实现这两个类型模拟单元的联合仿真,并且能够解决现有技术中的无法在RTL中出现Cmod或者在Cmod中出现RTL的donut问题,可以快速得到仿真结果。
例如,在步骤S2中,模拟模块可以是QEMU,并且本公开的实施例的QEMU运行平台不同,本公开的实施例实现的完全模拟是一套软件开发环境。
在一些示例中,本公开的验证方法还包括以下过程或步骤:获取存储模块;其中,控制使模拟模块与待测对象模块通信连接,以获取对应待测模块主体的验证结果,包括:控制使模拟模块与待测对象模块通信连接,以及使存储模块分别与模拟模块和待测对象模块通信连接,使得模拟模块至少实现对待测模块主体的寄存器的访问和/或实现对存储模块的访问,以获取对应待测模块主体的验证结果。例如,存储模块通过Socket机制分别与模拟模块和待测对象模块通信。
本公开的实施例的验证方法通过模拟PCIE的Socket行为,可实现基于PCIE设备的仿真行为,并通过Socket机制快速实现寄存器配置和数据读写。
在一些示例中,本公开的验证方法还包括以下过程或步骤:获取自测模块,自测模块配置为软件模拟环境;控制使自测模块分别与待测对象模块和存储模块通信连接,使得通过自测模块至少实现对待测模块主体的寄存器的访问和/或实现对存储模块的访问,以获取对应待测模块主体的验证结果。
本公开的实施例通过自测模块可以用来配置待测模块主体的寄存器以及存储模块的读写访问,从而可以快速地验证单独模块的逻辑和功能的准确性。在本公开一些实施例中,通过添加自测模块,可以单独对一个修改过的Cmod模型进行独立的快速验证,而不需要单独运行QEMU应用程序来验证,这种自测试行为模式,可以采用QEMU测试程序中的数据或者寄存器配置来协助验证。
在本公开一些实施例的验证方法中,存储模块包括第一主存储单元以及基于第一主存储单元创建的第二存储单元;模拟模块包括彼此隔离的第一空间和第二空间,第一空间配置作为用于访问待测模块主体的寄存器的入口以及第二空间配置作为用于访问第二存储单元的入口,待测对象模块还包括待测主体侧模拟空间;第二存储单元与第二空间通信连接以及第二存储单元分别与第一模型和第二模型通信连接,第一空间与待测主体侧模拟空间通过中间路径模块进行通信连接。例如,这些通信连接可以是采用Socket机制。
本公开的实施例通过在待测模块主体侧模拟了具有PCIE设备行为的存储单元,通过共享内存的方式和模拟模块通信,并在应用程序执行前可以通过应用程序的大小,自行决定存储大小,这种Socket机制可满足大块的存储行为的数据搬运的效率问题,实现了应用程序对存储模块的快速读写。
在本公开一些实施例的验证方法中,模拟模块包括内核模式驱动模块以及用户模式驱动模块,其中,内核模式驱动模块配置为基于第二存储单元映射一段内存空间以供用户模式驱动模块的应用程序使用,这一段内存空间对应于第二空间。例如,本公开的实施例可以在内核模式驱动模块中通过mmap方式将存储重新映射一段内存空间给用户模式驱动模块侧的应用程序使用。
本公开的实施例通过添加基于mmap机制的存储行为,并在驱动层添加基于mmap的存储模块内存分配和管理,可以极大提升存储模块的访存行为。
例如,在步骤S1中,待测对象模块还包括总线型终点模块和验证平台接口,总线型终点模块通过通信总线与验证平台接口进行通信连接,验证平台接口分别与第一封装单元和第二封装单元通信连接,总线型终点模块包括待测主体侧模拟空间,模拟模块还包括总线型根组件模块,总线型终点模块与总线型根组件模块通信连接以接收总线型根组件模块发送的操作请求。
本公开的实施例在模拟模块中添加了模拟RC行为的PCIE模块,具有Socket发送能力,并且在待测对象模块的实现中添加了EP行为的PCIE模块来接收,通过模拟真实PCIE行为和基于模拟PCIE行为的memory行为分别实现轻量数据传输和大数据量传输的限制。例如,通过模拟PCIE行为,对GPU建模上可以比较真实的反应GPU行为能力,而不会除开PCIE行为,单独验证GPU行为。
在一些示例中,本公开的验证方法还包括以下过程或步骤:获取主系统模块,其中,主系统模块上设置KVM虚拟模块;其中,控制使模拟模块与待测对象模块通信连接,包括:模拟模块被配置为使对应的任务处理为VNC应用,使得模拟模块通过VNC机制与KVM虚拟模块配合使用,使得模拟模块与待测对象模块通信连接并且实现模拟模块对应的任务与待测对象模块对应的操作相对于主系统模块是两个不同的任务。
本公开的实施例可将模型设计和QEMU行为转为两种VNC服务,并通过VNC的Socket机制快速实现多个开发平台的布局。
在本公开一些实施例的验证方法中,获取对应待测模块主体的验证结果包括:响应于模拟模块的VNC应用正常启动,获取的验证结果包括模拟模块与待测对象模块之间的通信连接正常。这样的方式非常简单和高效。
在本公开的一些实施例中,上述验证方法的至少一部分可以是仿真验证系统或平台的构建,和/或,上述验证方法的至少一部分可以是验证系统或平台的实施或运行的至少一部分。例如,上述步骤S4中的控制使模拟模块与待测对象模块通信连接,可以是指对应仿真验证系统或平台的构建所编写代码的一部分,由此,在后续运行时即可实现模拟模块与待测对象模块之间的通信连接。当然,此仅仅为示例性的,并不为本公开的限制,比如上述步骤S4中的控制使模拟模块与待测对象模块通信连接也可指运行中要实现的模拟模块与待测对象模块之间的通信连接,只要是采用这样的原理和方法来实现最终的验证均在本公开的保护范围之内,这里不再赘述。
例如,在一些示例中,本公开的实施例在构建上述验证系统或平台之后(如完全构建之后)进行运行,用以获取对应待测模块主体的验证结果。例如,运行可以包括:运行上述混合编译后的结果以及QEMU的运行等。例如,这两个方面的运行可以分别认为是一个独立的线程,而且这两个线程之间可以通过Socket通信。当然,此仅仅为示例性的,并不为本公开的实施例的限制。需要说明的是,本公开的实施例中的基于构建的验证系统或平台而具体实施或运行的详细过程不再赘述,非本案重点描述或创新设计的部分可参照现有技术,这里不再赘述。
本公开其他一些实施例的验证方法的具体实施技术效果可以参考本公开上述实施例中提供的验证系统,这里不再赘述。
例如,本公开一些实施例提供一种验证系统的实施方法,具体实施过程包括如下:
首先,在进行顶层文件的编译时,可以指定需要生成的存储的大小,并可以根据应用程序的复杂程度进行调整。
然后,在程序执行的过程指定接收模拟模块(如QEMU)的Socket的路径,在待测对象模块内添加Socket机制的监测机制来查看QEMU和待测对象模块之间的Socket通信是否存在异常。
再次,若需要按照某一个模块进行自测试,则基于自测模块,可以在执行时指定具体的参数对某一个模块进行功能仿真和测试,并可以将测试结果保存出来。
之后,若需要通过应用程序来达到测试的目的,在执行上述操作之后,可以独立运行QEMU所在的运行环境(例如包括指定QEMU运行需要的参数、存储的大小和CPU运行个数等)以后,在QEMU运行需要的磁盘空间中添加对待测对象模块的模型的KMD驱动程序,最后再通过指定VNC的端口号来启动VNC服务。等整个Socket机制的监测状态正常后,表示QEMU和待测对象模块的通信连接建立正常,此时可以在UMD侧通过加载一些例如GPU通用计算或者图形渲染时的运行库后,即可开启对GPU模型的应用测试和开发。
例如,若需要通过OpenCLAPI来执行GPU的GPGPU能力时,则需要加载OpenCL的运行库;若需要通过OpenGLAPI来执行GPU的图形渲染能力时,则需要额外加载OpenGL的运行库;若需要通过VulkanAPI来执行GPU的通用计算能力时,则需要额外加载Vulkan对应驱动程序等。此仅仅为示例性的,并不为本公开的限制,本公开不限于此应用程序的执行和测试。
例如,在应用程序的最后,若有RTL设计需要查看波形文件时,可以通过查看相应波形,以实现验证。
本公开上述实施例中的关于验证系统的具体实施方法不仅限于此,其可以根据实际需求进行自由的调整,这里不再赘述。
图9为本公开至少一实施例提供的一种电子设备的结构示意图。
例如,如图9所示,本公开至少一实施例提供的电子设备2000包括处理器2100和存储器2200,其中,存储器2200上存储有计算机程序,计算机程序被处理器2100执行时,实现本公开至少一些实施例的验证方法。
本公开实施例中的电子设备可以包括但不限于诸如笔记本电脑、平板电脑等等的移动终端以及诸如台式计算机等等的固定终端。图9示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
例如,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在非暂态计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在该计算机程序被处处理器执行时,执行本公开实施例的验证方法。
需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开的实施例中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开的实施例中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。
上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。
需要说明的是,本公开的实施例中,电子设备2000的具体功能和技术效果可以参考上文中关于验证方法的描述,此处不再赘述。
有以下几点需要说明:
(1)本公开实施例附图只涉及到本公开实施例涉及到的结构,其他结构可参考通常设计。
(2)在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合以得到新的实施例。
以上,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,本公开的保护范围应以权利要求的保护范围为准。

Claims (20)

1.一种验证方法,包括:
获取待测对象模块,其中,所述待测对象模块包括待测模块主体,所述待测模块主体包括第一类型模拟单元和第二类型模拟单元,所述第一类型模拟单元包括第一模型以及用于封装所述第一模型的第一封装单元,所述第二类型模拟单元包括第二模型以及用于封装所述第二模型的第二封装单元,所述第一模型和所述第二模型通过所述第一封装单元和所述第二封装单元彼此通信连接;
获取模拟模块,其中,所述模拟模块配置为软件模拟环境;
对所述第一类型模拟单元和所述第二类型模拟单元进行预设编译;
控制使所述模拟模块与所述待测对象模块通信连接,以获取对应所述待测模块主体的验证结果。
2.如权利要求1所述的验证方法,其中,
所述第一封装单元和所述第二封装单元通过Socket机制实现所述彼此通信连接。
3.如权利要求1所述的验证方法,其中,对所述第一类型模拟单元和所述第二类型模拟单元进行预设编译,包括:
响应于所述第一类型模拟单元为顶层,所述第二类型模拟单元为次顶层,对所述第一类型模拟单元和所述第二类型模拟单元进行第一编译;或者,
响应于所述第二类型模拟单元为顶层,所述第一类型模拟单元为次顶层,对所述第一类型模拟单元和所述第二类型模拟单元进行第二编译;
所述第二编译不同于所述第一编译。
4.如权利要求3所述的验证方法,其中,
所述第一模型包括配置为基于硬件描述语言创建的第一子模型,或者,所述第一模型包括配置为基于硬件描述语言创建的第一子模型以及基于行为建模语言创建的第二子模型;
所述第二模型包括配置为基于行为建模语言创建的至少一个第三子模型。
5.如权利要求4所述的验证方法,其中,对所述第一类型模拟单元和所述第二类型模拟单元进行第一编译,包括:
编译所述第一模型成行为建模语言以生成中间文件。
6.如权利要求4所述的验证方法,其中,对所述第一类型模拟单元和所述第二类型模拟单元进行第二编译,包括:
设置所述第二编译的编译顺序依次为:编译所述第一模型成行为建模语言以生成中间文件以及编译所述第二模型以生成中间文件,或者,
设置所述第二编译的编译顺序依次为:编译所述第一模型中的第二子模型以生成中间文件、编译所述第一模型成行为建模语言以生成中间文件以及编译所述第二模型以生成中间文件。
7.如权利要求4所述的验证方法,其中,获取待测对象模块,包括:
获取第三封装单元,使得所述第一子模型通过所述第三封装单元与所述第二子模型进行通信连接,以形成所述第一模型,从而获取所述待测对象模块。
8.如权利要求1所述的验证方法,还包括:获取存储模块;其中,控制使所述模拟模块与所述待测对象模块通信连接,以获取对应所述待测模块主体的验证结果,包括:
控制使所述模拟模块与所述待测对象模块通信连接,以及使所述存储模块分别与所述模拟模块和所述待测对象模块通信连接,使得所述模拟模块至少实现对所述待测模块主体的寄存器的访问和/或实现对所述存储模块的访问,以获取对应所述待测模块主体的所述验证结果。
9.如权利要求8所述的验证方法,还包括:
获取自测模块,其中,所述自测模块配置为软件模拟环境;
控制使所述自测模块分别与所述待测对象模块和所述存储模块通信连接,使得通过所述自测模块至少实现对所述待测模块主体的寄存器的访问和/或实现对所述存储模块的访问,以获取对应所述待测模块主体的所述验证结果。
10.如权利要求8所述的验证方法,其中,
所述存储模块包括第一主存储单元以及基于所述第一主存储单元创建的第二存储单元;
所述模拟模块包括彼此隔离的第一空间和第二空间,第一空间配置作为用于访问所述待测模块主体的寄存器的入口以及所述第二空间配置作为用于访问所述第二存储单元的入口,所述待测对象模块还包括待测主体侧模拟空间;
所述第二存储单元与所述第二空间通信连接以及所述第二存储单元分别与所述第一模型和所述第二模型通信连接,所述第一空间与所述待测主体侧模拟空间通过中间路径模块进行通信连接。
11.如权利要求10所述的验证方法,其中,
所述模拟模块包括内核模式驱动模块以及用户模式驱动模块,其中,所述内核模式驱动模块配置为基于所述第二存储单元映射一段内存空间以供所述用户模式驱动模块的应用程序使用,所述一段内存空间对应于所述第二空间。
12.如权利要求10所述的验证方法,其中,
所述待测对象模块还包括总线型终点模块和验证平台接口,所述总线型终点模块通过通信总线与所述验证平台接口进行通信连接,所述验证平台接口分别与所述第一封装单元和所述第二封装单元通信连接,所述总线型终点模块包括所述待测主体侧模拟空间,
所述模拟模块还包括总线型根组件模块,所述总线型终点模块与所述总线型根组件模块通信连接以接收所述总线型根组件模块发送的操作请求。
13.如权利要求12所述的验证方法,还包括:获取主系统模块,其中,所述主系统模块上设置KVM虚拟模块;
其中,控制使所述模拟模块与所述待测对象模块通信连接,包括:
所述模拟模块被配置为使对应的任务处理为VNC应用,使得所述模拟模块通过VNC机制与所述KVM虚拟模块配合使用,使得所述模拟模块与所述待测对象模块通信连接并且实现所述模拟模块对应的任务与所述待测对象模块对应的操作相对于所述主系统模块是两个不同的任务。
14.如权利要求13所述的验证方法,获取对应所述待测模块主体的所述验证结果包括:
响应于所述模拟模块的VNC应用正常启动,获取的所述验证结果包括所述模拟模块与所述待测对象模块之间的通信连接正常。
15.一种验证系统,包括:
待测对象模块,其中,所述待测对象模块包括待测模块主体,所述待测模块主体包括第一类型模拟单元和第二类型模拟单元,所述第一类型模拟单元包括第一模型以及用于封装所述第一模型的第一封装单元,所述第二类型模拟单元包括第二模型以及用于封装所述第二模型的第二封装单元;
模拟模块,其中,所述模拟模块配置为软件模拟环境,所述模拟模块与所述待测对象模块通信连接;
其中,所述第一模型和所述第二模型通过所述第一封装单元和所述第二封装单元实现彼此通信连接,以使得所述第一类型模拟单元和所述第二类型模拟单元进行预设编译。
16.如权利要求15所述的验证系统,其中,
所述第一封装单元和所述第二封装单元通过Socket机制实现彼此通信连接。
17.如权利要求15所述的验证系统,还包括存储模块,其中,所述存储模块分别与所述模拟模块和所述待测对象模块通信连接,以使所述模拟模块配置为至少实现对所述待测模块主体的寄存器的访问和/或实现对所述存储模块的访问。
18.如权利要求17所述的验证系统,还包括自测模块以及用于切换所述自测模块和所述模拟模块的选择模块,所述自测模块配置为软件模拟环境,
所述自测模块分别与所述待测对象模块和所述存储模块通信连接,以使得所述自测模块配置为至少实现对所述待测模块主体的寄存器的访问和/或实现对所述存储模块的访问。
19.一种电子设备,包括:
处理器和存储器,
其中,所述存储器上存储有计算机程序,所述计算机程序被所述处理器执行时,实现权利要求1至14中任一项所述的验证方法。
20.一种计算机可读存储介质,其中,所述存储介质内存储有计算机程序,所述计算机程序被处理器执行时,实现权利要求1至14中任一项所述的验证方法。
CN202410459044.4A 2024-04-16 2024-04-16 验证方法、验证系统、设备以及存储介质 Pending CN118332982A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202410459044.4A CN118332982A (zh) 2024-04-16 2024-04-16 验证方法、验证系统、设备以及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202410459044.4A CN118332982A (zh) 2024-04-16 2024-04-16 验证方法、验证系统、设备以及存储介质

Publications (1)

Publication Number Publication Date
CN118332982A true CN118332982A (zh) 2024-07-12

Family

ID=91763652

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202410459044.4A Pending CN118332982A (zh) 2024-04-16 2024-04-16 验证方法、验证系统、设备以及存储介质

Country Status (1)

Country Link
CN (1) CN118332982A (zh)

Similar Documents

Publication Publication Date Title
US12093631B2 (en) Method, system and verifying platform for system on chip verification
CN111931445B (zh) 用于调试逻辑系统设计的方法、仿真器及存储介质
US5838948A (en) System and method for simulation of computer systems combining hardware and software interaction
JP6703533B2 (ja) プログラム可能集積回路を対象としたヘテロジニアスマルチプロセッサプログラムコンパイル
KR100491461B1 (ko) SoC 설계 검증을 위한 방법 및 장치
CN102508753B (zh) Ip核验证系统
JP2020101519A (ja) ソリッドステートデバイス(ssd)の変則セクタサイズおよびプロテクションモードのための自動テスト装置(ate)サポートフレームワーク
CN112035299B (zh) 用基于存储器的通信协议进行仿真设备测试的系统和方法
KR20250057799A (ko) 검증 시스템, 검증 방법, 전자 디바이스 및 저장 매체
US10664563B2 (en) Concurrent testbench and software driven verification
CN112434478B (zh) 仿真逻辑系统设计的虚拟接口的方法及相关设备
US7584456B1 (en) Method and apparatus for debugging embedded systems having read only memory
US20060212768A1 (en) Verification circuitry for master-slave system
US20170185710A1 (en) Testbench Restoration Based On Capture And Replay
JP2004178590A (ja) データ一致認定および完全または部分的重複によって、多数のサイズのメモリ・アクセスを検出するアドレス範囲比較器
US9581643B1 (en) Methods and circuits for testing partial circuit designs
CN118332982A (zh) 验证方法、验证系统、设备以及存储介质
Caba et al. Testing framework for on-board verification of HLS modules using grey-box technique and FPGA overlays
CN116306392A (zh) 芯片仿真装置、方法、电子设备和存储介质
CN112885403B (zh) 一种Flash控制器的功能测试方法、装置及设备
JP2013020425A (ja) オープンソースソフトウェアを利用したハードウェア・ソフトウェア協調検証方法
US12073155B2 (en) Method and system for building hardware images from heterogeneous designs for electronic systems
CN112329369A (zh) 一种在芯片仿真模型上进行软件调试的方法
CN113673106B (zh) 一种fpga内核可编程仿真器
US20180011956A1 (en) Data Injection In Emulation Without Rebooting

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