CN108509373A - 一种面向SoC软件研发的全系统模拟平台 - Google Patents
一种面向SoC软件研发的全系统模拟平台 Download PDFInfo
- Publication number
- CN108509373A CN108509373A CN201810226786.7A CN201810226786A CN108509373A CN 108509373 A CN108509373 A CN 108509373A CN 201810226786 A CN201810226786 A CN 201810226786A CN 108509373 A CN108509373 A CN 108509373A
- Authority
- CN
- China
- Prior art keywords
- information
- simulation module
- instruction
- kernel
- input
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7807—System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
- G06F15/173—Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7803—System on board, i.e. computer system on one or more PCB, e.g. motherboards, daughterboards or blades
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7896—Modular architectures, e.g. assembled from a number of identical packages
Abstract
本发明属于计算机技术领域,具体为一种面向SoC软件研发的全系统模拟平台。本发明设计的模拟平台采用松耦合的组织架构,并且设定规范的通讯接口;以软硬件协同工作的方式,通过FPGA开发板实现IP核的功能执行,并提供执行过程中时序信息,由此实现对于IP核的详细时序模拟;同时设计通用的信息传输接口,将FPGA和模拟平台之间的通信规范化,以提高模拟平台对不同IP核的适用性和可扩展性。针对硬件设计中可能出现的自定制的新指令,本发明使用可配置库函数的方式实现新指令的扩展,并且通过一系列方法确认其寄存器依赖关系,以保证时序模拟的正确性。本发明不需要对编辑器工具链进行修改,可以极大的提高扩展新指令的效率。
Description
技术领域
本发明属于计算机技术领域,具体涉及一个面向SoC软件研发的全系统模拟平台,可以实现IP核和自定制指令的迅速扩展。
背景技术
随着近年来的技术发展,SoC (System-on-Chip) 产品如手机、平板电脑等越来越流行,其数量甚至有了爆炸性的增长。而为了更好的适应市场和技术发展的节奏,SoC产品的上市时间也被缩短到了极致——大约8到12个月。完整的SoC产品研发周期通常由硬件设计过程和软件研发过程,两部分过程组成。单独来说,SoC产品研发的两部分过程各需要大约9个月左右的时间,但是在完整的研发周期中,软件研发过程所占的比重较大,而且有逐渐增长的趋势,最多可以达到70%。因而一旦硬件结构的细节被基本确定之后,相关的软件研发工作就需要尽可能早的在相关硬件的模拟平台上开始进行,以便更快的开发出硬件可用的应用程序和系统软件。因此,如何迅速有效的提供可定制易扩展的硬件模拟平台就成了缩短SoC产品研发周期的一个关键部分。
在SoC设计中,快速原型理念被广泛承认和认可。在体系结构研究、软件开发和验证中,使用快速原型技术可以大幅提高研究和开发工作的效率。而随着SoC技术的发展,快速原型技术的重要性也越发体现出来。通常来说,快速原型的特征有以下三点:1)开发效率高,研发时间耗费比较少;2)性能好,执行速度足够快;3)结果精确,可以很精确的提供各种功能和时序数据。因而为了提高SoC产品的研发速度,合适的快速原型方法是十分必要而且迫切需要的。
在硬件设计中,为了应对紧凑的研发时间安排和逐渐提升的硬件复杂度,研发者们通常会集成现有的IP核 (Intellectual Property core)或使用自定义的指令来加快硬件设计的速度。IP核是指用于产品应用专用集成电路(ASIC)或者可编辑逻辑器件(FPGA)的逻辑块或数据块。将一些在数字电路中常用但比较复杂的功能块设计成可修改参数的模块,让其他用户可以直接调用这些模块,这样就大大减轻了开发者的负担,避免重复劳动。IP核的高模块化和高可用性可以很显著的减少硬件结构的复杂度,而且其模块化和松耦合特性也使得其后的模拟硬件平台设计变得相对简单。
然而,在相应的软件研发过程中,当前的模拟平台对于SoC软件研发的支持,尤其是IP核模拟的支持,并不满足快速原型的特征,其面临的主要问题有以下几点。首先,IP核因为其知识产权特性,更多表现出一种黑盒特性,也就是说IP核通常只提供功能执行的结果而不提供详细的实现方法,这使得研发相应的模拟平台十分困难。其次,由于IP核的易用性,SoC芯片上所集成的IP核的数目也越来越多,最多甚至可以达到一百以上,探究并模拟这么大数量的IP核的行为显然是耗费相当多的时间和代价。再次,由于不同IP核的通讯接口各不相同,因而在使用这些不同的IP核时需要额外处理这些通讯接口,尤其是在同一个SoC芯片上集成这些IP核时,会有很大的时间和人力消耗。最后,集成新的IP核时通常会引入新的指令,而为了支持新指令,通常需要修改编译器工具链,这也需要大量的时间,甚至需要数月的努力才能完成。
发明内容
本发明的目的在于针对这些问题,设计一种面向SoC软件研发的全系统模拟平台,以支持新IP核的迅速集成使用和不涉及编译器修改的情况下新指令的扩展。
本发明设计的面向SoC软件研发的全系统模拟平台,采用松耦合的组织架构,并且设定了规范的模块通讯接口。全系统该模拟平台以软硬件协同工作的方式,通过FPGA开发板实现IP核的功能执行,并提供执行过程中时序信息,由此实现对于IP核的详细时序模拟;同时设计通用的信息传输接口,将FPGA和模拟平台之间的通信规范化,以提高模拟平台对不同IP核的适用性和可扩展性。针对硬件设计中可能出现的自定制的新指令,本发明使用可配置库函数的方式实现新指令的扩展,并且通过一系列方法确认其寄存器依赖关系,以保证时序模拟的正确性。本发明不需要对编辑器工具链进行修改,因而可以极大的提高扩展新指令的效率。
本发明提供的面向SoC软件研发的全系统模拟平台,其结构框架如图1所示。该全系统模拟平台包括:模拟程序功能执行的功能模拟模块和模拟详细时序信息的时序模拟模块;使用松耦合的组织结构形式,将功能模拟模块和时序模拟模块分离开;使用功能驱动的模拟方式[4],即功能模拟模块先执行,并且为时序模拟模块提供指令流、数据访问等必需信息,而时序模拟模块根据功能模拟模块所提供的信息进行详细的时序模拟,并且检查功能模拟模块可能出现的执行流偏差或错误,同时对其进行修正,以保证模拟的准确性。
此外,还包括额外扩展的两个组件,如图1中的灰色部件所示。第一个组件是软硬件协同工作模块,该组件集成了FPGA以实现IP核的功能,并且提供详细的时序信息;该组件还包括一个通用的信息传输接口,用以实现IP核和模拟平台之间的信息传输,同时消除不同IP核之间的差异性;第二个组件是支持自定制新指令的可配置动态链接库,应用程序在源代码中调用这些动态链接库中的函数,以实现自定制新指令的功能;该组件还包括确认自定制指令和其上下文指令寄存器依赖关系的相关机制。
本发明中,IP核的基本工作流程如下:首先,应用程序通过特定的接口调用IP核来执行某些特殊操作;而后模拟平台的功能模拟模块识别出这些调用请求并且把相关控制信息和输入传递至IP核;然后IP核根据控制信号和输入进行相关运算并得出结果,再把执行输出和相关时序信息输出出来;最后,时序模拟模块根据这些信息模拟IP核的时序行为。
本发明中,模拟平台支持多个IP核的同时模拟。多个IP核的模拟采用串行方式实现,其最主要的原因是当前大多数的功能模拟模块本身就是使用串行方式来模拟多核体系结构,即采用轮询的方式依次模拟体系结构中的每一个核。而采用串行方式模拟多个IP核的机制就可以很方便的和功能模拟模块之间进行交互和信息传输。
SoC芯片上可能会集成使用多个IP核,模拟平台可以支持多个IP核的模拟。具体来说,本发明在FPGA上采用一个选择器来实现对多个IP核调用的选择控制。选择器通过读取输入信息中的操作码来判断调用哪个IP核,而后FPGA启动相应IP核实现模块的时钟,并且传入相关控制信号以启动相应的IP核。当运算结束之后,相应的输出结果和时钟周期信息通过信息传输接口传给功能模拟模块,并且指定输出信息中的操作码以表明当前输出来源于哪一个IP核。
本发明中,模拟平台设计有一个面向不同IP核的通用信息传输接口,以消除不同IP核之间的差异性。在应用程序执行的过程中,FPGA处于忙等状态并且等待功能模拟模块的控制信号。当功能模拟模块发现应用程序调用了IP核执行接口时,向FPGA发送信息以通知FPGA进行运算,并且等待其输出和返回结果。而FPGA在接收到执行请求之后,结束其当前的忙等状态,然后对执行请求进行解析,提取相关的控制命令。而后FPGA会根据输入和其IP核本身的配置信息进行相关运算,并且把输出和运算过程中的时序信息返回给功能模拟模块。最后,功能模拟模块把接收到的这些信息传递给时序模拟模块进行详细的时序模拟。
所述通用信息传输接口,包括输入接口和输出接口。
对于输入接口,输入信息主要包括FPGA的控制信号和执行输入参数,具体内容如下:
(1)控制开始信号。控制开始信号在每次功能模拟模块和FPGA的交互中都是最先被传递的信息,主要用来唤醒FPGA,结束其忙等状态,开始进行IP核的执行;
(2)操作码(operation code)。由于模拟平台可能会集成多个IP核,每个IP核的执行也可能有不同的操作选项,故而这个参数主要用来区分不同的IP核调用和IP执行的具体操作;
(3)输入参数个数(IN)。IP核的执行输入个数是不确定的,因而这个参数用来表示本次交互中执行输入的参数个数,计作IN;
(4)执行输入。执行输入的个数有IN个,每一个执行输入都用有序数据对的形式来表示,形如(L, P)。其中L是一个整型变量,用来定义真实参数的长度;P是一个变长的数据,存储具体的参数数值。当FPGA接收到一个L值时,把接下来的相应数据识别为输入参数的值。例如当FPGA识别出L的值时32时,会读取接下来的32个比特(bit)数据并将其转化为本次输入参数的具体值。通过这种方式,FPGA重复读取每一个数据对,直到把IN个参数全部读取出来为止;
(5)控制结束信号。控制结束信号在每次交互的结尾处出现,用来表示本次信息交互的结束。
对于输出接口,输出信息主要包括功能模拟模块的控制信号、执行周期数和执行输出,具体内容如下:
(1)控制开始信号。控制开始信号在每次功能模拟模块和FPGA的交互中都是最先被传递的信息,输出信息中的控制开始信号主要用来唤醒功能模拟模块,结束其忙等状态,继续其正常模拟;
(2)操作码。与输入信息中的操作码相似,主要用来表示此输出是来源于哪一个IP核的输出结果;
(3)时钟周期数。时钟周期数是指IP核在执行运算的过程中使用了多少个时钟周期。时钟周期数被传输给时序模拟模块,以用来做详细的时序模拟;
(4)返回值个数(RN)。和输入信息中的输入参数个数类似,返回值个数用来表示本次信息输出一共包括多少个返回值;
(6)返回值。返回值的表示形式和执行输入类似,也是有序数据对(L, P)的表示形式,其中L表示返回值的长度(以比特为单位),P表示具体的值;
(7)控制结束信息。控制结束信号在每次交互的结尾处出现,用来表示本次信息交互的结束。
本发明中,模拟平台采用可配置链接库的方式实现自定制新指令的扩展。通过这种方式,可以在不修改编译器工具链的前提下集成自定制的扩展指令,并且准确的得到指令与上下文指令的寄存器关系,使得新指令可以和普通指令一样模拟。
本发明中,模拟平台使用一系列库函数调用来实现新指令,也就是说,在应用程序的源代码中调用相应的库函数来替代其想要调用的新指令。这样可在不修改编译器工具链的前提下扩展自定制指令的模拟支持。
具体流程如下:首先,程序开发者在程序源代码汇总调用相应的库函数,并且通过一系列参数配置确认其想要调用的自定制指令。这些调用会被功能模拟模块所识别,并且通过其配置的参数确认其调用的具体指令,然后在FPGA中实现这些自定制指令的具体执行和模拟,最后把输出结果和时序信息传输给时序模拟模块进行详细的时序模拟。
本发明中,还设置有一个通用的库函数调用接口,用于实现自定制新指令的调用,这样可提高系统的易用性。这个库函数调用接口的具体内容主要包括三部分:操作码、输入和输出,具体内容如下:
(1)操作码。操作码主要用来表示当前库函数将要调用的具体指令类型;
(2)输入参数个数。用来表示输入参数的个数;
(3)输出结果个数。用来表示输出结果的个数,通常都是只有一个;
(4)输入参数列表。输入参数列表通常是一个64位元素的数组列表。新扩展的指令的输入都保存在这个数组里。功能模拟模块会根据接口中设定的输入参数个数从这个数组中读取相应的输入。
本发明中,采用一条特殊的OP_INSTR_CALL指令,用于标识自定制指令库函数调用。该指令可向功能模拟模块表明本次库函数调用实际上是为了实现一条自定制的指令。而在功能模拟模块识别出这条特殊指令之后,从相应函数的栈中读取相应的参数,并根据指定的操作码进行相应的功能模拟。
由于自定制指令通过库函数调用的方式实现,平台就需要模拟许多不必要的指令。这些指令传递给时序模拟模块之后,会导致时序模拟结果变得不精确。为此,本发明中,模拟平台设置了另一条特殊指令OP_LIB_BOUND,用于标识库函数调用的边界。一个完整的库函数调用会被两条这样的OP_LIB_BOUND指令所包围。当功能模拟模块遇到一条OP_LIB_BOUND指令时,会知道接下来的一系列指令都是为了实现自定制扩展指令而实现的,此时功能模拟模块会进入特殊的处理模式,其后的所有指令都不会被传输过时序模拟模块进行时序模拟,直到下一条OP_LIB_BOUND指令出现时,库函数调用结束,功能模拟模块根据库函数调用的相关信息生成自定制扩展指令的相关信息,并传递给时序模拟模块进行详细的时序模拟。
为了正常模拟一条指令,需得到其与上下文指令的寄存器依赖关系。功能模拟模块负责分析这种寄存器依赖关系并且将其传输给时序模拟模块,而为了使寄存器依赖关系对功能模拟模块可见,程序员需要在源代码中通过手动设定,对寄存器依赖关系进行设定。本发明在库函数调用之前手动添加一些特殊赋值语句,编译时这些赋值语句与上下文指令间的寄存器依赖关系就可以为功能模拟模块提供参考。模拟平台根据参考信息分析自定制指令与上下文指令的寄存器依赖关系。
为了区分这些特殊赋值语句,本发明设置了一条特殊指令OP_REG_DEPENDENCE,用来标识这些赋值语句的开始和结束。当功能模拟模块遇到OP_REG_DEPENDENCE时,开始对接下来的指令进行分析,以提取相应的寄存器依赖关系。
附图说明
图1为本发明面向SoC软件研发的全系统模拟平台结构框架。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚,以下结合附图及实施例,详细说明本发明的优选实施方式。在此之前需要说明的是,本说明书及权利要求书中所使用的术语或词语不能限定解释为通常的含义或辞典中的含义,而应当立足于为了以最佳方式说明其发明人可以对术语的概念进行适当定义的原则解释为符合本发明技术思想的含义和概念。随之,本说明书所记载的实施例和附图中表示的结构只是本发明最佳实施例之一,并不能完全代表本发明的技术思想,因此应该理解到对于本发明而言可能会存在能够进行替换的各种等同物和变形例。
本发明采用软硬件协同工作和可配置链接库的方法实现IP核和自定制指令模拟支持的迅速扩展。这里结合具体例子给出对应的具体实施方式。
一、扩展IP核
本发明中,模拟平台可以很方便的扩展对新IP核的模拟支持,扩展的具体操作步骤如下:
按照IP核的网表定义,在FPGA开发板上实现IP核的基本逻辑,并且将FPGA开发板与电脑相连接;
定义IP核的指令格式,定义模拟平台功能模拟模块和FPGA的通讯接口,并且详细设计通信细节;
在时序模拟模块的配置文件中为IP核添加相应的功能单元和配置参数,以便时序模拟模块根据相关配置对此功能单元进行初始化;
设定FPGA时钟周期和SoC芯片时钟周期的换算比率。这个比率只要查询FPGA和目标SoC体系结构的配置文件就可以计算得出;
在功能模拟模块中添加相应的FPGA控制模块,负责和FPGA进行交互并且将相应信息传输给时序模拟模块进行时序模拟。
模拟平台扩展IP核模拟的具体流程包括三个步骤:修改应用程序源代码,在功能模拟模块中控制IP核执行,配置时序模拟模块。具体介绍如下:
修改应用程序源代码
为了调用IP核执行相应功能,需要对源代码进行修改,添加相关的函数调用。其一个示例的代码清单见附录1所示。代码清单中使用与扩展自定制指令相同的函数接口实现IP核功能的调用函数。值得注意的是,在调用IP核函数之外,需要使用OP_LIB_BOUND指令标明函数调用的边界,以避免模拟平台进行冗余的时序模拟。
配置功能模拟模块
在应用程序通过通用定制接口调用相关函数之后,功能模拟模块会识别出这些函数调用,并且控制FPGA进行IP核的执行。一个示例的代码清单见附录2所示,该代码展示了功能模拟模块与FPGA进行交互的过程。
在此例中,功能模拟模块与FPGA的交互过程主要通过串口实现,由于串口每次只能传输一个字节,所以输入和输出都被组织成字节数组的形式。功能模拟模块负责将这些字节数组和相应的整形数据数组进行转换。上例中的代码先向FPGA发送数据(第3行),然后接收时钟周期数和返回的输出的个数(第5、9行)。最后再通过一个循环依次接收每个输出的长度,再接收每一个输出的具体数值(第13、16行)。
功能模拟模块和FPGA主要通过RS-232端口进行数据传输。如果当前模拟平台中没有同时使用多核IP核时,这个实例中通过串口进行通讯的代码并不需要做修改,只需要配置相应的操作码和IP核的实现。
配置时序模拟模块
首先,我们需要在时序模拟模块中定义一个和IP核对应的新功能单元,并且在相应的配置文件中将相应的指令和相应的功能单元进行绑定。一个示例的代码清单见附录3所示,第一个枚举类型定义了时序模拟模块中新增的功能单元,其中FU_INTMUL_IP表示实现乘法指令的IP核所对应的功能单元,FU_INTMULADD_X表示自定制乘加指令所使用的功能单元。而第6行的定义将IP核乘法指令和IP核乘法功能单元绑定起来,这样时序模拟模块会把IP核乘法指令分配到IP核乘法功能单元上进行执行。
此后,需要在时序模拟模块中对相应功能单元的延时做出定义。这样时序模拟模块在模拟IP核时,就可以像正常功能单元的模拟一样,检查指令所使用的功能单元,判断功能单元是否可用,再将指令发射到功能单元上去执行。通常这一步操作主要通过时序模拟模块的配置文件来实现。
值得注意的是,由于IP核的执行所需要的延时是不确定的,要在FPGA开发板上进行执行之后才能得到,因而在配置文件中,IP核所对应的功能单元的延时被设置为0,表示当前功能单元的延时需要在执行时动态得到,即从功能模拟模块与时序模拟模块的交互接口中读取。
二、自定制指令模拟扩展
基于本发明扩展对自定制指令的模拟支持过程和扩展IP核模拟支持的过程十分类似,其基本操作步骤如下:
定义自定制指令的格式;
设定库函数调用接口,即配置相应库函数调用的各个参数数值;
在时序模拟模块中配置相应的参数,如指令所使用的功能单元,指令的延时等;
在功能模拟模块中实现自定制指令的功能。可以在FPGA开发板上实现,也可以通过软件方式实现。
与扩展IP核模拟类似,其具体的流程包括三个步骤:修改应用程序源代码,在功能模拟模块中控制IP核执行,配置时序模拟模块。具体介绍如下:
修改应用程序源代码
为了调用自定制指令,需要对源代码进行修改,添加相关的函数调用,其示例的代码清单见附录4所示。首先使用OP_LIB_BOUND指令标明库函数调用的边界,然后通过OP_REG_DEPENDENCE指令和赋值语句设定寄存器依赖关系,再通过库函数调用实现相应的自定制指令。
配置功能模拟模块
由于实现自定制指令的方式有通过软件实现和通过FPGA实现两种,因而针对这两种不同的实现需要对功能模拟模块做出不同的配置。
如果是通过FPGA实现自定制指令的功能,则需要在功能模拟模块中和FPGA进行协同合作。这种配制方法和扩展IP核的模拟十分类似,具体参见扩展IP核部分的示例即可。
对于通过软件实现的自定制指令,需要手动实现自定制指令的功能。一个示例的代码清单见附录5所示,其中给出了一个简单的乘法的示例,即将给定的两个参数相乘,然后将结果协会给返回值即可。
配置时序模拟模块
首先,在时序模拟模块中定义一个自定制指令需要用到的新功能单元,并且在相应的配置文件中将相应的指令和功能单元进行绑定。定义和绑定过程与扩展IP核时十分类似。
此后,在时序模拟模块中对相应功能单元的延时做出定义。这样时序模拟模块在模拟自定制指令时,就可以像正常功能单元的模拟一样,检查指令所使用的功能单元,判断功能单元是否可用,再将指令发射到功能单元上去执行。通常这一步操作主要通过时序模拟模块的配置文件来实现。
附录1
为调用IP核执行相应功能,对源代码进行修改,添加相关的函数调用的示例代码:
1……
2 OP_LIB_BOUND;
3 // init input before lib call
4……
5 // lib interface invoking
6 ret = ext_lib(op, input_cnt, out_cnt, input_array);
7 OP_LIB_BOUND
附录2
功能模拟模块与FPGA进行交互的过程的示例代码:
1 case OP_mul_IP:
2 { /*send and receive data by tty */
3 sendnTTY(ptty, send_buf, in_len);
4
5 /* get the cycle */
6 nbyte = recvnTTY(ptty, rec_buf, 4);
7 /* get the number of output */
8 nbyte = recvnTTY(ptty, rec_buf, 4);
9
10 for (i=0; i<output_cnt;i++)
11 { /* get output length */
12 nbyte = recvnTTY(ptty, rec_buf, 4);
13
14 /* get the output */
15 nbyte = recvnTTY(ptty, rec_buf, length);
16 }
17 }
附录3
在时序模拟模块中定义一个和IP核对应的新功能单元,并且在相应的配置文件中将相应指令和相应功能单元进行绑定的示例代码。
1 enumfu_type_t{
2 FU_INTMUL_IP;// multiplier IP core
3 FU_INTMULADD_X; // customized integer multiply-add
4 };
5
6 {OP_mul_IP, FU_INTMUL_IP}
附录4
关于调用自定制指令而对源代码进行修改,添加相关的函数调用的示例代码。
1 volatile long longintinput_array[2];
2 volatile long longint output;
3 a = b*c;
4
5 OP_LIB_BOUND;
6 // build input register dependence
7 input_array[0] = 2;
8 OP_REG_DEPENDENCE;
9 input_array[1] = a;
10 OP_REG_DEPENDENCE;
11
12 // lib interface invoking
13 ret = ext_lib(multi, 2, 1, input_array);
14
15 // build output register dependence
16 OP_REG_DEPENDENCE;
17 output = ret;
18 OP_REG_DEPENDENCE;
19
20 OP_LIB_BOUND;
21
附录5
通过软件实现的自定制指令中,手动实现自定制指令的功能的示例代码:
1 case OP_mul_customized:
2 {
3 ret = input_array[0] * input_array[1];
4 }
Claims (10)
1.一种面向SoC软件研发的全系统模拟平台,其特征在于,包括:模拟程序功能执行的功能模拟模块和模拟详细时序信息的时序模拟模块;使用松耦合的组织结构形式,将功能模拟模块和时序模拟模块分离开;使用功能驱动的模拟方式,即功能模拟模块先执行,并且为时序模拟模块提供指令流、数据访问等必需信息,而时序模拟模块根据功能模拟模块所提供的信息进行详细的时序模拟,并且检查功能模拟模块可能出现的执行流偏差或错误,同时对其进行修正,以保证模拟的准确性;
此外,还包括额外扩展的两个组件;第一个组件是软硬件协同工作模块,该组件集成了FPGA以实现IP核的功能,并且提供详细的时序信息;该组件还包括一个通用的信息传输接口,用以实现IP核和模拟平台之间的信息传输,同时消除不同IP核之间的差异性;第二个组件是支持自定制新指令的可配置动态链接库,应用程序在源代码中调用这些动态链接库中的函数,以实现自定制新指令的功能;该组件还包括确认自定制指令和其上下文指令寄存器依赖关系的相关机制;
IP核的基本工作流程如下:首先,应用程序通过特定的接口调用IP核来执行某些特殊操作;而后模拟平台的功能模拟模块识别出这些调用请求并且把相关控制信息和输入传递至IP核;然后IP核根据控制信号和输入进行相关运算并得出结果,再把执行输出和相关时序信息输出出来;最后,时序模拟模块根据这些信息模拟IP核的时序行为。
2.根据权利要求1所述的面向SoC软件研发的全系统模拟平台,其特征在于,支持多个IP核的同时模拟,多个IP核的模拟采用串行方式实现;即在FPGA上采用一个选择器来实现对多个IP核调用的选择控制:选择器通过读取输入信息中的操作码来判断调用哪个IP核,而后FPGA启动相应IP核实现模块的时钟,并且传入相关控制信号以启动相应的IP核;当运算结束之后,相应的输出结果和时钟周期信息通过信息传输接口传给功能模拟模块,并且指定输出信息中的操作码以表明当前输出来源于哪一个IP核。
3.根据权利要求2所述的面向SoC软件研发的全系统模拟平台,其特征在于,设计有一个面向不同IP核的通用信息传输接口,以消除不同IP核之间的差异性;在应用程序执行的过程中,FPGA处于忙等状态并且等待功能模拟模块的控制信号,当功能模拟模块发现应用程序调用了IP核执行接口时,向FPGA发送信息以通知FPGA进行运算,并且等待其输出和返回结果;FPGA在接收到执行请求之后,结束其当前的忙等状态,然后对执行请求进行解析,提取相关的控制命令;然后FPGA根据输入和其IP核本身的配置信息进行相关运算,并且把输出和运算过程中的时序信息返回给功能模拟模块;最后,功能模拟模块把接收到的这些信息传递给时序模拟模块进行详细的时序模拟。
4.根据权利要求3所述的面向SoC软件研发的全系统模拟平台,其特征在于,所述通用信息传输接口,包括输入接口和输出接口;
对于输入接口,输入信息主要包括FPGA的控制信号和执行输入参数,具体内容如下:
(1)控制开始信号;控制开始信号在每次功能模拟模块和FPGA的交互中都是最先被传递的信息,主要用来唤醒FPGA,结束其忙等状态,开始进行IP核的执行;
(2)操作码;用来区分不同的IP核调用和IP执行的具体操作;
(3)输入参数个数;用来表示本次交互中执行输入的参数个数,计作IN;
(4)执行输入;执行输入的个数有IN个,每一个执行输入都用有序数据对的形式来表示,形如(L, P);其中L是一个整型变量,用来定义真实参数的长度;P是一个变长的数据,存储具体的参数数值;当FPGA接收到一个L值时,把接下来的相应数据识别为输入参数的值;通过这种方式,FPGA重复读取每一个数据对,直到把IN个参数全部读取出来为止;
(5)控制结束信号;在每次交互的结尾处出现,用来表示本次信息交互的结束;
对于输出接口,输出信息主要包括功能模拟模块的控制信号、执行周期数和执行输出,具体内容如下:
(1)控制开始信号;控制开始信号在每次功能模拟模块和FPGA的交互中都是最先被传递的信息,输出信息中的控制开始信号主要用来唤醒功能模拟模块,结束其忙等状态,继续其正常模拟;
(2)操作码;与输入信息中的操作码相似,主要用来表示此输出是来源于哪一个IP核的输出结果;
(3)时钟周期数;时钟周期数是指IP核在执行运算的过程中使用了多少个时钟周期;时钟周期数被传输给时序模拟模块,以用来做详细的时序模拟;
(4)返回值个数;和输入信息中的输入参数个数类似,返回值个数用来表示本次信息输出一共包括多少个返回值;
(6)返回值;返回值的表示形式和执行输入类似,也是有序数据对(L, P)的表示形式,其中L表示返回值的长度,P表示具体的值;
(7)控制结束信息;控制结束信号在每次交互的结尾处出现,用来表示本次信息交互的结束。
5.根据权利要求1-4之一所述的面向SoC软件研发的全系统模拟平台,其特征在于,采用可配置链接库的方式实现自定制新指令的扩展;通过这种方式,在不修改编译器工具链的前提下集成自定制的扩展指令,并且准确的得到指令与上下文指令的寄存器关系,使得新指令可以和普通指令一样模拟。
6.根据权利要求5所述的面向SoC软件研发的全系统模拟平台,其特征在于,使用一系列库函数调用来实现新指令,即在应用程序的源代码中调用相应的库函数来替代其想要调用的新指令;这样在不修改编译器工具链的前提下扩展自定制指令的模拟支持;
具体流程如下:首先,程序开发者在程序源代码汇总调用相应的库函数,并且通过一系列参数配置确认其想要调用的自定制指令;这些调用被功能模拟模块所识别,并且通过其配置的参数确认其调用的具体指令,然后在FPGA中实现这些自定制指令的具体执行和模拟,最后把输出结果和时序信息传输给时序模拟模块进行详细的时序模拟。
7.根据权利要求5或6所述的面向SoC软件研发的全系统模拟平台,其特征在于,还设置有一个通用的库函数调用接口,用于实现自定制新指令的调用,以提高系统的易用性;所述库函数调用接口的具体内容主要包括三部分:操作码、输入和输出,具体内容如下:
(1)操作码;操作码主要用来表示当前库函数将要调用的具体指令类型;
(2)输入参数个数;用来表示输入参数的个数;
(3)输出结果个数;用来表示输出结果的个数;
(4)输入参数列表;是一个64位元素的数组列表;新扩展的指令的输入都保存在这个数组里;功能模拟模块根据接口中设定的输入参数个数从这个数组中读取相应的输入。
8.根据权利要求7所述的面向SoC软件研发的全系统模拟平台,其特征在于,采用一条特殊的OP_INSTR_CALL指令,用于标识自定制指令库函数调用;该指令可向功能模拟模块表明本次库函数调用实际上是为了实现一条自定制的指令;而在功能模拟模块识别出这条特殊指令之后,从相应函数的栈中读取相应的参数,并根据指定的操作码进行相应的功能模拟。
9.根据权利要求8所述的面向SoC软件研发的全系统模拟平台,其特征在于,还设置有另一条特殊指令OP_LIB_BOUND,用于标识库函数调用的边界;一个完整的库函数调用会被两条这样的OP_LIB_BOUND指令所包围;当功能模拟模块遇到一条OP_LIB_BOUND指令时,知道接下来的一系列指令都是为了实现自定制扩展指令而实现的,此时功能模拟模块进入特殊的处理模式,其后的所有指令都不会被传输过时序模拟模块进行时序模拟,直到下一条OP_LIB_BOUND指令出现时,库函数调用结束,功能模拟模块根据库函数调用的相关信息生成自定制扩展指令的相关信息,并传递给时序模拟模块进行详细的时序模拟。
10.根据权利要求9所述的面向SoC软件研发的全系统模拟平台,其特征在于,对于正常模拟一条指令时,需要得到其与上下文指令的寄存器依赖关系;功能模拟模块负责分析这种寄存器依赖关系并且将其传输给时序模拟模块,为了使寄存器依赖关系对功能模拟模块可见,程序员在源代码中通过手动设定,对寄存器依赖关系进行设定,并在库函数调用之前手动添加一些特殊赋值语句,编译时这些赋值语句与上下文指令间的寄存器依赖关系,为功能模拟模块提供参考;模拟平台根据参考信息分析自定制指令与上下文指令的寄存器依赖关系;
为了区分这些特殊赋值语句,设置了一条特殊指令OP_REG_DEPENDENCE,用来标识这些赋值语句的开始和结束;当功能模拟模块遇到OP_REG_DEPENDENCE时,开始对接下来的指令进行分析,以提取相应的寄存器依赖关系。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810226786.7A CN108509373A (zh) | 2018-03-19 | 2018-03-19 | 一种面向SoC软件研发的全系统模拟平台 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810226786.7A CN108509373A (zh) | 2018-03-19 | 2018-03-19 | 一种面向SoC软件研发的全系统模拟平台 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108509373A true CN108509373A (zh) | 2018-09-07 |
Family
ID=63377618
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810226786.7A Pending CN108509373A (zh) | 2018-03-19 | 2018-03-19 | 一种面向SoC软件研发的全系统模拟平台 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108509373A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113378508A (zh) * | 2021-07-09 | 2021-09-10 | 安谋科技(中国)有限公司 | 管线结构的知识产权核及其定制方法、片上系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090172621A1 (en) * | 2007-12-27 | 2009-07-02 | Sanved Dessiggn Automation | System and method for system-on-chip (soc) performance analysis |
CN105930902A (zh) * | 2016-04-18 | 2016-09-07 | 中国科学院计算技术研究所 | 一种神经网络的处理方法、系统 |
CN106775597A (zh) * | 2016-12-06 | 2017-05-31 | 复旦大学 | 一种松耦合结构的并行多核全系统模拟器 |
-
2018
- 2018-03-19 CN CN201810226786.7A patent/CN108509373A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090172621A1 (en) * | 2007-12-27 | 2009-07-02 | Sanved Dessiggn Automation | System and method for system-on-chip (soc) performance analysis |
CN105930902A (zh) * | 2016-04-18 | 2016-09-07 | 中国科学院计算技术研究所 | 一种神经网络的处理方法、系统 |
CN106775597A (zh) * | 2016-12-06 | 2017-05-31 | 复旦大学 | 一种松耦合结构的并行多核全系统模拟器 |
Non-Patent Citations (1)
Title |
---|
闵庆豪: "RPSim:面向SoC软件研发的快速原型全系统模似平台设计与实现", 《中国优秀硕士学位论文全文数据库 (信息科技辑)》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113378508A (zh) * | 2021-07-09 | 2021-09-10 | 安谋科技(中国)有限公司 | 管线结构的知识产权核及其定制方法、片上系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP2598989B1 (en) | Developing programs in a graphical specification and constraint language | |
US9335977B2 (en) | Optimization of a data flow program based on access pattern information | |
US5862361A (en) | Sliced synchronous simulation engine for high speed simulation of integrated circuit behavior | |
US6993469B1 (en) | Method and apparatus for unified simulation | |
US7146300B2 (en) | Method of co-simulating a digital circuit | |
JP2002049652A (ja) | デジタル回路設計方法、そのコンパイラーおよびシミュレータ | |
Lahiri et al. | Performance analysis of systems with multi-channel communication architectures | |
JP3896177B2 (ja) | エミュレーションシステム | |
US20120136645A1 (en) | Managing Communication Bandwidth in Co-Verification of Circuit Designs | |
CN1543618A (zh) | 使用综合用于有效数据加载和下载的基于分组的协议的逻辑的硬件辅助的设计验证系统 | |
US7050958B1 (en) | Method and apparatus for accelerating hardware simulation | |
CN108509373A (zh) | 一种面向SoC软件研发的全系统模拟平台 | |
US7502728B1 (en) | Code coverage testing in hardware emulation | |
CN114138342B (zh) | Rocc协处理器接口模型及其自动生成工具和实现方法 | |
CN115146485B (zh) | 基于gpu加速的射频链路仿真方法 | |
US8689153B1 (en) | M and A for importing hardware description language into a system level design environment | |
CN110688289B (zh) | 一种基于仿真的处理器性能事件动态监测方法 | |
US7729897B2 (en) | Time multiplexed interface for emulator system | |
JP5545054B2 (ja) | デバッグ回路及びデバッグシステム | |
CN101017513A (zh) | 集成电路元件的模拟实例产生方法与装置 | |
Wilkes et al. | Application of high level interface-based design to telecommunications system hardware | |
Holeček et al. | Verification results in Liberouter project | |
CN117113908B (zh) | 一种验证方法、装置、电子设备及可读存储介质 | |
CN117077603B (zh) | 一种验证方法、芯片、系统、电子设备及可读存储介质 | |
Davies et al. | Timing verification for asynchronous design |
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 | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20180907 |