1.本公开涉及集成电路(ic)芯片设计验证的技术领域,尤其涉及一种编译验证系统的方法和设备,该验证系统包括逻辑系统设计和用于验证逻辑系统设计的测试平台。
背景技术:2.在逻辑系统设计过程中,逻辑系统设计的验证通常是在多个现场可编程门阵列(fpga)上运行逻辑系统设计的硬件描述语言代码来仿真该逻辑系统设计,以及在中央处理单元(cpu)上运行带有激励的测试平台的软件编程代码来验证逻辑系统设计。通常情况下,硬件描述语言代码和软件编程代码是分开编译的,不会对二者之间的一个或多个连接点进行优化。在某些情况下,一个或多个连接点是位于不同的硬件描述语言代码之间和/或不同的软件编程代码之间的。因此,仿真逻辑系统设计的硬件仿真设备和运行带有激励的测试平台的cpu之间可能存在冗余逻辑和大量运行数据交换。
技术实现要素:3.有鉴于此,本公开提出了一种编译验证系统的方法、电子设备及存储介质。
4.本公开第一方面,提供了一种编译验证系统的方法,所述验证系统包括逻辑系统设计和用于验证逻辑系统设计的测试平台。所述方法包括:接收所述验证系统的描述;使用第一解析器和第二解析器解析所述验证系统的描述,以分别生成第一中间表示和第二中间表示;分析所述第一中间表示和所述第二中间表示以产生交换信息;基于所述交换信息优化所述第一中间表示或所述第二中间表示中的至少一个;以及基于优化后的所述第一中间表示和所述第二中间表示分别生成第一可实现代码和第二可实现代码,其中,所述第一中间表示和所述第二中间表示通过连接点相关,所述交换信息与所述连接点关联。
5.本公开第二方面,提供了一种用于编译验证系统的设备,所述验证系统包括逻辑系统设计和用于验证逻辑系统设计的测试平台,所述设备包括:存储器,存储计算机程序;以及处理器,配置为执行所述计算机程序以实现如第一方面所述的方法。
6.本公开第三方面,提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储电子设备的一组指令,该组指令用于使所述电子设备执行第一方面所述的方法。
7.由于本公开的实施例将验证系统的描述转换为了第一可实现代码和第二可实现代码,因此打破了软、硬件之间的壁垒,在编译期间,软硬件之间可进行交互,从而实现验证系统的整体编译。
附图说明
8.为了更清楚地说明本公开或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其
他的附图。
9.图1a示出了根据本公开实施例的示例性设备的结构示意图。
10.图1b示出了示例性编译器的示意图。
11.图2示出了一种编译验证系统的过程的示意图。
12.图3示出了根据本公开实施例的编译验证系统的示例性过程示意图。
13.图4a示出了根据本公开实施例的两个中间表示(ir)之间的一个示例性连接点。
14.图4b示出了根据本公开实施例的两个中间表示之间的另一个示例性连接点。
15.图4c示出了根据本公开实施例的两个中间表示之间的又一个示例性连接点。
16.图5示出了根据本公开实施例的编译验证系统的示例性方法的流程图。
具体实施方式
17.为使本公开的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本公开进一步详细说明。
18.需要说明的是,除非另外定义,本公开使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。
19.逻辑系统设计(例如,集成电路芯片设计)在最终确定用于生产之前需要进行验证。逻辑系统设计的验证可以通过使用一个或多个现场可编程门阵列(field programmable gate array,fpga)去仿真(emulate)逻辑系统设计来实现。逻辑系统设计的仿真(emulation)可以包括将逻辑系统设计的硬件描述语言(hardware description language,hdl)代码编译成门级网表并且在被配置为模拟逻辑系统设计的一个或多个fpga上实现该门级网表。在fpga上运行仿真的逻辑设计系统可以得到逻辑设计系统的波形以供进一步验证。
20.图1a示出了根据本公开实施例的示例性设备100的结构示意图。设备100例如可以是主机计算机。设备100可以包括:处理器102、存储器104、网络接口106、外围接口108和总线110。其中处理器102、存储器104、网络接口106和外围接口108可以通过总线110实现彼此之间在设备100内部的通信连接。
21.处理器102可以是中央处理器(central processing unit,cpu)、图像处理器、神经网络处理器、微控制器、可编程逻辑器件、数字信号处理器、应用专用集成电路(application specific integrated circuit,asic)、或一个或多个集成电路。处理器102可以用于进行与本公开描述的技术相关的功能。在一些实施例中,处理器102还可以包括集成为单一逻辑组件的多个处理器。如图1a所示,处理器102可以包括多个处理器102a、102b和102c。
22.存储器104可以配置为存储数据(例如,指令集、计算机代码、中间数据等)。例如,如图1a所示,存储的数据可以包括程序指令(例如,用于实现本公开的技术的程序指令)以及待处理数据(例如,存储器104可以存储在编译过程产生的临时代码)。处理器102也可以
访问存储的程序指令和数据,并且执行程序指令以对待处理数据进行操作。存储器104可以包括非暂态计算机可读存储介质,例如易失性存储装置或非易失性存储装置。在一些实施例中,存储器104可以包括随机访问存储器(ram)、只读存储器(rom)、光盘、磁盘、硬盘、固态硬盘(ssd)、闪存、存储棒等。
23.网络接口106可以配置为使设备100能够经由网络与一个或多个其他外部装置进行通信。该网络可以是能够传输和/或接收数据的任何有线或无线的网络。例如,该网络可以是有线网络、本地无线网络(例如,蓝牙、wifi、近场通信(nfc)等)、蜂窝网络、因特网、或上述的组合。可以理解的是,网络的类型不限于上述具体示例。在一些实施例中,网络接口106可以包括任意数量的网络接口控制器(nic)、射频模块、接收发器、调制解调器、路由器、网关、适配器、蜂窝网络芯片等的任意组合。
24.外围接口108可以配置为将设备100与一个或多个外围装置连接,以实现信息输入及输出。例如,外围装置可以包括键盘、鼠标、触摸板、触摸屏、麦克风、各类传感器等输入装置以及显示器、扬声器、振动器、指示灯等输出装置。
25.总线110可以被配置为在设备100的各个组件(例如,处理器102、存储器104、网络接口106和外围接口108)之间传输信息,并且例如可以是内部总线(例如,处理器-存储器总线)、外部总线(usb端口、pci-e总线)等。
26.在一些实施例中,除了图1a所示出的以及上述所描述的处理器102、存储器104、网络接口106、外围接口108和总线110之外,设备100还可以包括实现正常运行所需的一个或多个其他组件和/或实现本公开的实施例的解决方案所必需的一个或多个其他组件。在一些实施例中,设备100可能不包含图1a中所示的一个或多个组件。
27.图1b图示了示例性编译器120的示意图。
28.编译器120可以基于待编译的设计的计算机代码来生成目标代码。该设计的计算机代码又可以称为源代码。通常,编译源代码的源语言是高级编程语言。高级编程语言可以例如是c++、java等软件编程语言或vhdl、verilog、systemverilog等硬件描述语言。目标代码则可以是例如汇编代码、机器代码等。在本公开的一些实施例中,目标代码以机器代码为例进行说明。在一些其他实施例中,机器代码可以被替换为另一种类型的目标代码。
29.举例来说,编译器120可以存储在图1a所示的存储器104中,并且由处理器102执行。
30.如图1b所示,编译器120可以包括前端122、中端124以及后端126。
31.前端122可以用于根据具体的源语言来分析源代码的词法、语法和语义。
32.在前端122完成对源代码的词法、语法和语义的分析之后,中端124可以将源代码转换为中间表示(ir,也称为中间代码),并可以优化该中间表示。例如,中端124可以移除无用的代码、移除不可访问的代码、清除未使用的变量等。优化可以包括与机器相关的优化和/或与机器无关的优化。
33.在一些实施例中,前端122和中端124可以被合称为解析器。
34.解析器生成的中间表示可以被传递给后端126进行进一步处理。
35.后端126可以根据目标处理器(例如,图1a的处理器102)的架构来进一步优化中间表示,并生成目标代码。一般来说,当设计是软件时,目标代码可以是机器代码,以及当设计是硬件时,目标代码可以是比特流(bit stream)等。比特流可以在例如fpga上实现,以用于
仿真设计。
36.机器代码和比特流也可以称为可实现代码。通常,在可实现代码之前生成的任何代码都可以称为中间表示。
37.编译器的结构不限于图1b所示的示例。例如,在某些情况下,单独的中端124可以被称为解析器。
38.图2示出了一种编译验证系统的过程的示意图。验证系统200可用于验证集成电路(ic)设计,并且可包括ic设计的hdl源代码202和验证环境(也称为测试平台(test bench,tb))的软件源代码212。
39.与本公开一致,可以用hdl源代码描述ic设计,该hdl源代码可以是诸如verilog、systemverilog之类的硬件描述语言(hdl)或超高速集成电路硬件描述语言(vhdl)编写的。集成电路可以是例如超大规模集成(vlsi)器件。hdl源代码可以由硬件编译器204编译以生成平面网表,从而在仿真器或硬件仿真设备上实现。硬件仿真设备可以包括一个或多个fpga。硬件编译器204可以包括解析器2042,该解析器2042用于处理hdl源代码并生成硬件中间表示206。硬件中间表示206可以包括门级描述、寄存器传输级(register transaction level,rtl)代码等。硬件编译器204可以将rtl代码进一步编译成网表,作为硬件中间表示206的一部分。硬件综合器208可以进一步综合硬件中间描述206并生成比特流,该比特流可以在仿真设备的fpga上实现。
40.进一步的,可以在诸如c、c++或python之类的软件编程语言编写的软件源代码212中描述提供激励的测试平台(tb)。软件源代码212可以由软件编译器214编译以生成可由中央处理器(cpu)执行的二进制可执行代码。如图1b中所示,软件编译器214可以包括用于处理软件源代码212并生成软件中间表示216的解析器(例如图2中所示的解析器2142)。软件编译器214可以进一步编译软件中间表示216并生成二进制代码,该二进制代码可以在计算机上执行。
41.在一些实施例中,可以用诸如systemverilog之类的硬件描述语言来描述测试平台,而不是用软件编程语言来编写。
42.举例来说,仿真系统可以包括主机计算机和连接到主机计算机的硬件仿真设备。ic设计可由硬件编译器编译并在硬件仿真设备上执行,以及测试平台可由软件编译器编译并在主机上执行,例如显示执行ic设计的中间结果或最终结果。
43.在fpga上仿真的ic设计可以通过例如直接编程接口(dpi)调用与测试平台交互。测试平台可以通过例如verilog过程接口(vpi)调用与ic设计进行交互。dpi调用用于将systemverilog与其他语言(例如c、c++语言)进行连接,以及vpi调用将verilog与c语言进行连接。除了dpi调用和vpi调用之外,一些硬件和软件协议也可以用于实现仿真设备和执行二进制可执行代码的主机之间的通信。由dpi调用、vpi调用和协议实现的仿真设备和主机计算机之间的通信可能涉及大量性能消耗,使得验证系统200的仿真速度降低。
44.图3示出了根据本公开实施例的编译验证系统的示例性过程示意图。
45.与图2中两个独立的编译器分别编译hdl源代码202和软件源代码212不同,图3所示的示例性过程中引入了一个协同编译器300来处理hdl源代码202和软件源代码212。更具体地,除了图2中的硬件编译器204和软件编译器214之外,协同编译器300可以包括交互器302,该交互器302用于优化由硬件解析器2042和软件解析器2142生成的中间表示206和
216。
46.在一些实施例中,交互器302可以分析中间表示206和中间表示216以获得一个或多个连接点。
47.图4a示出了根据本公开实施例的两个中间表示之间的一个示例性连接点400。由于中间表示总是对应于源代码,所以为了更清楚的展示,图4a中使用的是源代码而不是中间表示。
48.在图4a中,中间表示402是硬件中间表示的一部分,而中间表示404是软件中间表示的一部分。中间表示402描述了verilog函数“dpi_caller(my_name)”,其中布尔函数“dpi_callee(const char*name)”作为“if”条件语句中的条件被调用。布尔函数“dpi_callee(const char*name)”在中间表示404中定义。因此,布尔函数“dpi_callee(const char*name)”连同变量“name”可被确定为中间表示402和中间表示404之间的连接点400。在传统的编译过程中,中间表示402和404被分别处理成目标代码。也就是说,ic设计的hdl源代码202和测试平台的软件源代码212之间存在壁垒。与此相反,本公开所示的协同编译器300可以基于连接点400进一步优化中间表示402和404。
49.协同编译器300可以打破ic设计的hdl源代码202和测试平台的软件源代码212之间的壁垒。在编译期间,与连接点400相关的信息可以被协同编译器300获取以进一步优化,使得ic设计的hdl源代码202和测试平台的软件源代码212中的函数能穿过壁垒被fpga或cpu执行。因此,运行时性能得到优化。
50.在一个实施例中,如图4a所示,连接点400包括布尔函数“dpi_callee(const char*name)”和变量“name”。通过分析中间表示402和404,确定变量“name”是常数“abc”,并且布尔函数“dpi_callee(const char*name)”的返回值始终为真。因此,可以移除中间表示404,以及可以将中间表示402优化为以下代码:
51.function dpi_caller
52.$display(“dpi_callee return true”);
53.endfunction
54.图4b示出了根据本公开实施例的两个中间表示之间的另一个示例性连接点410。
55.类似地,布尔函数“dpi_callee(in)”连同变量“in”可以被确定为中间表示412和414之间的连接点410。
56.在传统编译过程中,硬件编译器可以确定信号“out”什么都不驱动,并且可以移除语句“assign out=~tmp&x”。然而,对于语句“tmp=dpi_callee(in)”而言,在没有足够的函数“dpi_callee(in)”信息的情况下,传统的硬件编译器无法进一步优化该语句。
57.在一个实施例中,如图4b所示,连接点410包括布尔函数“dpi_callee(in)”和变量“in”。通过分析中间表示412和414,确定dpi_callee(in)也没有驱动任何内容。因此,模块“dpi_caller”是一个无负载模块,模块“dpi_caller”的中间表示412可以被移除。
58.图4c示出了根据本公开实施例的两个中间表示之间的又一个示例性连接点420。
59.类似地,函数“dpi_test(dividend,divisor,quotient,remaining)”可以被确定为中间表示422和424之间的连接点420。
60.在传统编译过程中,根本无法对中间表示422和424进行优化。然而,根据本公开的实施例的协同编译器300可以优化中间表示422和424,下面对此进行详细描述。
61.在一个实施例中,通过分析中间表示422和424,协同编译器300可以发现中间表示424中函数“dpi_test(dividend,divisor,quotient,remainder)”的大部分代码是可综合的。例如,函数dpi_test()包括两个“if”语句,以及第一个“if”语句指向在给定条件下的递增变量“count”并且是可综合的。因此,中间表示424的可综合部分可以从中间表示424移动到中间表示422。例如,中间表示424的可综合部分可以转换为中间表示422的格式,然后移动到中间表示422中。相应地,中间表示422和中间表示424的可综合部分可以作为一个硬件设计一起被优化,以及在中间表示424中只剩下软件函数。这样的优化可以显著减少执行中间表示422的仿真设备和运行中间表示424的主机之间的通信交互。
62.图5示出了根据本公开实施例的编译验证系统的示例性方法500的流程图。方法500可以由例如图1a的设备100来执行,并包括以下步骤。
63.在步骤s510,可以接收验证系统(例如,图2-3中的验证系统200)的描述。该验证系统包括逻辑系统设计(例如ic设计)和用于验证逻辑系统的测试平台。该验证系统的描述包括逻辑系统设计的设计描述(例如,图2-3中的hdl源代码202)和测试平台的测试描述(例如,软件源代码204)。该测试平台的测试描述包括软件编程语言的第一源代码。该逻辑系统设计的设计描述包括硬件描述语言(hdl)的第二源代码。在一些实施例中,测试平台可以用hdl描述,例如systemverilog。
64.硬件描述语言(hdl)可以包括verilog、systemverilog或vhdl中的至少一种。软件编程语言可以包括c、c++、python等中的至少一种。
65.在步骤s520,使用第一解析器和第二解析器来解析该验证系统的描述,以分别生成第一中间表示和第二中间表示。也就是说,第一解析器(例如,图2-3中的软件解析器2142)被用于解析该验证系统的描述以获得第一中间表示(例如,图2-3的软件中间表示216),并且第二解析器(例如,图2-3中的硬件解析器2042)被用于解析该验证系统的描述以获得第二中间表示(例如,图2-3的硬件中间表示206)。如上所述,第二中间表示可以包括门级描述、rtl代码等。rtl代码可以进一步综合为可实现代码(例如,比特流)。
66.在一些实施例中,第一解析器被配置为解析软件编程语言。第二解析器被配置为解析硬件描述语言。在一些实施例中,第一中间表示是基于测试平台的测试描述生成的,并且第二中间表示是基于逻辑系统设计的设计描述生成的。
67.在一些实施例中,第一解析器被配置为解析c、c++和python之一的第三源代码以获得第一中间表示。第二解析器被配置为解析c、c++、python中另一种的第四源代码以获得第二中间表示。第三源代码的软件编程语言和第四源代码的软件编程语言不同。换言之,本公开不仅适用于软件编程语言源代码与硬件描述语言(hdl)源代码之间的编译优化,也适用于两种不同软件编程语言的两个源代码之间的编译优化。
68.在一些实施例中,第一解析器被配置为解析verilog、system verilog和vhdl之一的第五源代码以获得第一中间表示。第二解析器被配置为解析verilog、system verilog和vhdl中另一种的第六源代码以获得第二中间表示。第五源代码的hdl和第六源代码的hdl不同。换言之,本公开不仅适用于软件编程语言源代码与hdl源代码之间的编译优化,也适用于两种不同hdl的两个源代码之间的编译优化。
69.回到图5,在步骤s530,可以分析第一中间表示和第二中间表示以产生交换信息。第一中间表示和第二中间表示通过连接点相关,并且交换信息与连接点关联。
70.在一些实施例中,连接点可以是函数。如在本公开中所使用的,函数可以包括hdl语言的模块、块、通用验证方法(universal verification methodology,uvm)组件、或软件编程语言的软件函数。第一解析器被配置为解析软件编程语言,以及第二解析器被配置为解析硬件描述语言。该函数可以在第一中间表示中定义并在第二中间表示中调用。例如,在图4a中,函数dpi_callee()被确定为连接点400,并在中间表示404中定义以及在中间表示402中调用。
71.交换信息可以包括对函数的描述。例如,交换信息可以包括含有函数dpi_callee()的“if”语句。在一些实施例中,协同编译器300可以处理函数的描述并生成额外的交换信息。例如,交换信息可以进一步包括函数的执行结果(例如,图4a)、函数中是否有驱动负载的信息(例如,图4b)、部分中间表示(例如,图4c)等。因此,两个中间表示之间的壁垒可以被打破,并且可以进行进一步优化。
72.在步骤s540,基于该交换信息优化第一中间表示或第二中间表示中的至少一个。编译优化旨在减少或消除运行时交换信息的一个或多个连接点,并且提高运行时的性能。
73.在一些实施例中,根据交换信息可以确定第一中间表示中的函数是否生成常数,并且可以简化由该常数驱动的第二中间表示的一部分。如上面参考图4a所讨论的,可以确定函数dpi_callee()生成常数“true”,因此可以简化中间表示402,也就是消除该第二中间表示的一部分。
74.在一些实施例中,基于交换信息,可以确定该函数是否使得第二中间表示中的无负载模块的输出驱动一个负载。响应于该函数不使得无负载模块的输出驱动该负载,在优化过程中可以将该无负载模块从第二中间表示中移除。例如,如上面参考图4b所讨论的,dpi_callee(in)是连接点410,确定dpi_callee(in)也没有驱动任何内容。因此,模块“dpi_caller”是一个无负载模块,并且模块“dpi_caller”的中间表示412可以被移除。
75.在一些实施例中,第一中间表示中函数的可综合部分和不可综合部分可以被识别。然后,可以将第一中间表示的可综合部分从第一中间表示的格式转换为第二中间表示的格式且合并到第二中间表示中。可以优化合并了可综合部分后的第二中间表示。相应地,可以从第一中间表示中移除可综合部分,并且可以基于移除了可综合部分的第一中间表示生成第一可实现代码。
76.如上面参考图4c所讨论的,中间表示424的函数dpi_test()包括可综合部分和不可综合部分。可以将中间表示424的可综合部分转换且合并到中间表示422中,从而将原始中间表示422和可综合部分一起优化。
77.回到图5,在步骤s550,基于优化后的第一中间表示和第二中间表示分别生成第一可实现代码和第二可实现代码。在一些实施例中,第一可实现代码是二进制机器代码,以及第二可实现代码是比特流。
78.在一些实施例中,优化的逻辑系统设计由硬件编译器编译以获得平面网表,然后综合为比特流在硬件仿真设备上运行,以及优化的测试平台由软件编译器编译以获得二进制可执行代码在计算机的cpu上运行。
79.在一些实施例中,二进制可执行代码可以是用于x86 cpu的x86二进制可执行代码或用于arm cpu的arm二进制可执行代码。
80.与本公开一致,在由连接点产生的交换信息的辅助下共同编译逻辑系统设计和测
试平台,以减少仿真ic设计的硬件仿真设备和运行带有激励的测试平台的主机计算机之间的运行时数据交换。因此,ic设计验证测试时间减少了。
81.本公开还提供了一种编译验证系统的设备。该设备可以是图1a所示的设备100。处理器102a可以被配置为执行存储在存储器104中的计算机程序以实现编译与本公开一致的验证系统的方法,诸如上述示例性方法之一(例如,图5中所示的方法500)。此处不再赘述。
82.本公开还提供了一种非暂态计算机可读存储介质。非暂态计算机可读存储介质存储计算机程序。当由处理器执行时,计算机程序使处理器实现编译与本公开一致的验证系统的方法,诸如上述示例性方法之一(例如,图5中所示的方法500)。此处不再赘述。
83.该非暂态计算机可读存储介质可以是上述任一实施例中所描述设备的内部存储单元。例如,该非暂态计算机可读存储介质可以是硬盘或设备的内部存储器。该非暂态计算机可读存储介质也可以是该设备的外部存储设备,例如插入式硬盘、智能媒体卡(smart media card,smc)、安全数字(secure digital,sd)卡、闪存卡等。进一步地,该非暂态计算机可读存储介质还可以包括内部存储单元和外部存储设备。该非暂态计算机可读存储介质还可以存储计算机程序,以及设备所必需的其他程序和数据。该非暂态计算机可读存储介质还可以临时存储输出数据或待输出数据。
84.所属领域的普通技术人员应当理解上述方法实施例中的全部或部分过程可以通过计算机程序指令相关硬件来实现。计算机程序可以存储在计算机可读存储介质中。当被执行时,计算机程序可以引起上述方法实施例的过程的执行。计算机可读存储介质可以是磁盘、光盘、只读存储器(read-only memory,rom)或随机存取存储器(random-access memory,ram)。
85.上述对本公开特定实施例进行了描述。其他实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
86.所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本公开的范围(包括权利要求)被限于这些例子;在本公开的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本公开的不同方面的许多其它变化,为了简明它们没有在细节中提供。
87.另外,为简化说明和讨论,并且为了不会使本公开难以理解,在所提供的附图中可以示出或可以不示出与集成电路(ic)芯片和其它部件的公知的电源/接地连接。此外,可以以框图的形式示出装置,以便避免使本公开难以理解,并且这也考虑了以下事实,即关于这些框图装置的实施方式的细节是高度取决于将要实施本公开的平台的(即,这些细节应当完全处于本领域技术人员的理解范围内)。在阐述了具体细节(例如,电路)以描述本公开的示例性实施例的情况下,对本领域技术人员来说显而易见的是,可以在没有这些具体细节的情况下或者这些具体细节有变化的情况下实施本公开。因此,这些描述应被认为是说明性的而不是限制性的。
88.尽管已经结合了本公开的具体实施例对本公开进行了描述,但是根据前面的描述,这些实施例的很多替换、修改和变型对本领域普通技术人员来说将是显而易见的。例
如,其它存储器架构(例如,动态ram(dram))可以使用所讨论的实施例。
89.本公开旨在涵盖落入所附权利要求的宽泛范围之内的所有这样的替换、修改和变型。因此,凡在本公开的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本公开的保护范围之内。
技术特征:1.一种编译验证系统的方法,所述验证系统包括逻辑系统设计和用于验证逻辑系统设计的测试平台,所述方法包括:接收所述验证系统的描述;使用第一解析器和第二解析器解析所述验证系统的描述,以分别生成第一中间表示和第二中间表示;分析所述第一中间表示和所述第二中间表示以产生交换信息;基于所述交换信息优化所述第一中间表示或所述第二中间表示中的至少一个;以及基于优化后的所述第一中间表示和所述第二中间表示分别生成第一可实现代码和第二可实现代码,其中,所述第一中间表示和所述第二中间表示通过连接点相关,所述交换信息与所述连接点关联。2.根据权利要求1所述的方法,其中,所述连接点为函数,所述函数在所述第一中间表示中定义并被所述第二中间表示调用,并且所述交换信息包括所述函数的描述。3.根据权利要求2所述的方法,其中,基于所述交换信息优化所述第一中间表示或所述第二中间表示中的至少一个进一步包括:根据所述交换信息,确定所述第一中间表示中的所述函数是否生成常数;以及简化由所述常数驱动的所述第二中间表示的一部分。4.根据权利要求2所述的方法,其中,基于所述交换信息优化所述第一中间表示或所述第二中间表示中的至少一个进一步包括:基于所述交换信息,确定所述函数是否使得所述第二中间表示中的无负载模块的输出驱动负载;以及响应于所述函数不使得所述无负载模块的输出驱动所述负载,在所述优化中将所述无负载模块从所述第二中间表示中移除。5.根据权利要求2所述的方法,其中,基于所述交换信息优化所述第一中间表示或所述第二中间表示中的至少一个进一步包括:识别所述第一中间表示的所述函数中的可综合部分和不可综合部分;将所述第一中间表示的所述可综合部分从所述第一中间表示的格式转换为所述第二中间表示的格式;将所述可综合部分合并至所述第二中间表示中;以及优化合并了所述可综合部分后的所述第二中间表示。6.根据权利要求5所述的方法,进一步包括:从所述第一中间表示中移除所述可综合部分;其中,第一可实现代码是二进制代码以及第二可实现代码是比特流。7.根据权利要求6所述的方法,其中,所述验证系统的描述包括所述逻辑系统设计的设计描述和所述测试平台的测试描述,所述第一中间表示根据所述测试平台的测试描述生成,所述第二中间表示根据所述逻辑系统设计的设计描述生成。8.根据权利要求1所述的方法,其中,所述第一解析器被配置为解析软件编程语言,以及所述第二解析器被配置为解析硬件描述语言。9.根据权利要求8所述的方法,其中:所述硬件描述语言包括verilog、systemverilog或超高速集成电路硬件描述语言
(vhdl)中的至少一种;以及所述软件编程语言包括c、c++或python中的至少一种。10.一种用于编译验证系统的设备,所述验证系统包括逻辑系统设计和用于验证逻辑系统设计的测试平台,所述设备包括:存储器,存储计算机程序;以及处理器,配置为执行所述计算机程序以实现如权利要求1至9任一项所述的方法。11.一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储电子设备的一组指令,该组指令用于使所述电子设备执行如权利要求1至9任一项所述的方法。
技术总结本公开提供一种编译验证系统的方法、电子设备及存储介质。该方法包括:接收所述验证系统的描述;使用第一解析器和第二解析器解析所述验证系统的描述,以分别生成第一中间表示和第二中间表示;分析所述第一中间表示和所述第二中间表示以产生交换信息;基于所述交换信息优化所述第一中间表示或所述第二中间表示中的至少一个;以及基于优化后的所述第一中间表示和所述第二中间表示分别生成第一可实现代码和第二可实现代码,其中,所述第一中间表示和所述第二中间表示通过连接点相关,所述交换信息与所述连接点关联。信息与所述连接点关联。信息与所述连接点关联。
技术研发人员:朱嘉华
受保护的技术使用者:芯华章科技股份有限公司
技术研发日:2022.02.09
技术公布日:2022/7/5