基于虚拟机的片上系统仿真方法及系统与流程
未命名
07-12
阅读:95
评论:0

1.本技术涉及计算机应用技术领域,特别是涉及一种基于虚拟机的片上系统仿真验证方法及系统。
背景技术:
2.随着半导体工艺的发展,传统mcu(microcontrollerunit,微控制单元)已经不能够完全满足智能设备的需求,因此soc(systemonchip,片上系统)应运而生。soc即在一块芯片上集成整个信息处理系统,具有性能强、功耗低、灵活度高的特点。
3.通常在芯片设计过程中,软件开发和调试都依赖硬件来进行,而芯片的开发周期从架构定义到产品化通常需要2~3年。如果能够在系统层面上描述硬件功能,构建软硬件协同验证环境,为软件提供一个仿真验证平台则可以加快软件的版本迭代,有效缩短软件产品化时间。特别是随着soc设计规模的日益增大,结构逐渐复杂,仿真验证已经成为soc设计过程中一个亟需的环节。
技术实现要素:
4.有鉴于此,本技术提供了一种基于虚拟机的soc仿真验证方法及系统,以便于提供软硬件协同验证环境。
5.本技术提供了如下方案:
6.第一方面,提供了一种基于虚拟机的片上系统soc仿真方法,应用于包含soc模拟器、硬件路由模型和一个以上的硬件模型的soc仿真系统,所述方法包括:
7.所述soc模拟器监听到来自待验证软件的硬件访问请求,依据所述硬件访问请求发送第一访问消息至所述硬件路由模型;
8.所述硬件路由模型查询地址空间映射表,确定所述第一访问消息所请求访问的目标硬件对应的硬件模型信息,并向所述目标硬件对应的硬件模型发送第二访问消息;
9.所述硬件模型执行所述第二访问消息所指示的操作,并将操作响应经由所述硬件路由模型返回给所述soc模拟器。
10.根据本技术实施例中一可实现的方式,该方法还包括:系统总线设备预先向所述soc模拟器注册预设的硬件地址空间;
11.所述soc模拟器监听到硬件访问请求,依据所述硬件访问请求发送第一访问消息至所述硬件路由模型包括:
12.所述soc模拟器的主处理模块监听到所述硬件访问请求,若所述硬件访问请求访问所述硬件地址空间,则触发所述系统总线设备将所述硬件访问请求携带的访问信息提供给耦合模拟器接口,由耦合模拟器接口封装为第一访问消息,并发送第一访问消息至所述硬件路由模型。
13.根据本技术实施例中一可实现的方式,所述发送第一访问消息至所述硬件路由模型包括:将所述第一访问消息写入第一套接字文件,所述硬件路由模型通过监听所述第一
套接字文件获取所述第一访问消息;
14.所述将操作响应经由所述硬件路由模型返回给所述soc模拟器包括:所述硬件路由模型获取到所述操作响应后,将所述操作响应写入第二套接字文件,所述soc模拟器通过监听所述第二套接字文件获取所述操作响应。
15.根据本技术实施例中一可实现的方式,所述硬件路由模型查询地址空间映射表,确定所述第一访问消息所请求访问的目标硬件对应的硬件模型信息,并向所述目标硬件对应的硬件模型发送第二访问消息包括:
16.所述硬件路由模型解析所述第一访问消息得到访问信息,所述访问信息包括要访问的地址信息;
17.查询地址空间映射表,确定所述要访问的地址信息对应的发送端口信息,所述地址空间映射表包括各硬件模型被分配的存储空间地址信息与发送端口信息之间的对应关系;
18.利用确定出的发送端口信息发送携带所述访问信息的第二访问消息。
19.根据本技术实施例中一可实现的方式,所述硬件访问请求包括写操作信息、要写入的数据地址信息以及待写入数据;所述硬件模型执行所述第二访问消息所指示的操作包括:所述硬件模型依据所述要写入的数据地址信息对所述待写入数据进行写操作;所述操作响应消息包括写入成功或失败的响应数据;或者,
20.所述硬件访问请求包括读操作信息以及要读取的数据地址信息;所述硬件模型执行所述第二访问消息所指示的操作包括:所述硬件模型依据所述要读取的数据地址信息进行读操作;所述操作响应消息包括所述硬件模型读取的数据。
21.根据本技术实施例中一可实现的方式,所述方法还包括:
22.所述硬件模型向所述硬件路由模型发送第一中断消息;
23.所述硬件路由模型依据所述第一中断消息,将第二中断消息写入第三套接字文件;
24.所述soc模拟器通过监听所述第三套接字文件获取所述第二中断消息,并依据所述第二中断消息触发中断处理。
25.根据本技术实施例中一可实现的方式,所述硬件路由模型依据所述第一中断消息,将第二中断消息写入第三套接字文件包括:所述硬件路由模型查找中断向量映射表,确定所述第一中断消息所携带的中断号对应的中断向量,将所述中断向量封装为第二中断消息并写入第三套接字文件;
26.依据所述第二中断消息触发中断处理包括:所述soc模拟器依据所述第二中断消息携带的中断向量触发中断回调函数。
27.根据本技术实施例中一可实现的方式,所述soc模拟器与所述内存映射总线之间传输的消息被封装为预设数据结构,所述预设数据结构包括基础格式信息和数据包;
28.所述基础格式信息包括消息类型信息、数据包长度信息、消息标识信息和数据包类型信息;
29.所述数据包包括要访问的地址信息、待写入的数据、响应数据或中断向量。
30.根据本技术实施例中一可实现的方式,所述soc模拟器为qemu,所述硬件路由模型为tlm2模型,所述硬件模型为systemc模型。
31.第二方面,提供了一种基于虚拟机的soc仿真系统,所述soc仿真系统包括:soc模拟器、硬件路由模型和一个以上的硬件模型;
32.所述soc模拟器,用于监听硬件访问请求,依据监听到的硬件访问请求发送第一访问消息至所述硬件路由模型;
33.所述硬件路由模型,用于查询地址空间映射表,确定所述第一访问消息所请求访问的目标硬件对应的硬件模型信息,并向所述目标硬件对应的硬件模型发送第二访问消息;
34.所述硬件模型,用于执行所述第二访问消息所指示的操作,并将操作响应消息返回给所述硬件路由模型;
35.所述硬件路由模型,还用于将所述操作响应消息返回给所述soc模拟器。
36.第三方面,提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述第一方面中任一项所述的方法的步骤。
37.第四方面,提供了一种电子设备,包括:
38.一个或多个处理器;以及
39.与所述一个或多个处理器关联的存储器,所述存储器用于存储程序指令,所述程序指令在被所述一个或多个处理器读取执行时,执行上述第一方面中任一项所述的方法的步骤。
40.根据本技术提供的具体实施例,本技术公开了以下技术效果:
41.1)本技术中soc模拟器在监听到来自待验证软件的硬件访问请求后,由硬件路由模型路由至目标硬件对应的硬件模型,在硬件模型执行相应操作后将操作响应消息经由硬件路由模型返回给soc模拟器。也就是说,本技术的soc仿真系统提供了一种软硬件协同验证环境来模拟硬件访问过程,从而方便对软件的相关功能进行验证。
42.2)本技术创新性地提出在soc模拟器预先注册硬件地址空间和系统总线设备,来定义需要在虚拟机上模拟的硬件。
43.3)本技术采用套接字机制在soc模拟器和硬件路由模型之间的封装和传输,实现了soc模拟器进程和模型进程之间的数据交互。
44.4)硬件路由模型通过维护地址空间映射表来路由访问特定硬件地址空间的请求至相应的硬件模型,soc模拟器与硬件模型解耦,硬件模型注册在硬件路由模型上如同注册到cpu系统总线上,使得对硬件模型的访问就如同访问cpu系统总线的硬件设备。这种方式更加方便扩展,并使得整体方案更加简洁高效。
45.5)硬件路由模型通过维护中断向量映射表,能够确定来自硬件模型的中断消息携带的中断号对应的中断向量,并进行封装后传递给soc模拟器,使得soc模拟器能够直接利用中断向量触发中断回调函数,使得中断功能的仿真验证更加简洁高效。
46.6)本技术提供了特定的数据结构来实现soc模拟器与硬件路由模型之间的数据封装,能够在数据传输过程中合理有效地传递需要的信息。
47.当然,实施本技术的任一产品并不一定需要同时达到以上所述的所有优点。
附图说明
48.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例中所
需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
49.图1是本技术实施例提供的soc仿真系统的组成示意图;
50.图2是本技术实施例提供的仿真方法的主要流程图;
51.图3是本技术实施例提供的一种soc仿真系统的实例图;
52.图4是本技术实施例提供的基于图3所示soc仿真系统的读访问流程图;
53.图5a是本技术实施例提供的数据封装采用的基础格式信息的示意图;
54.图5b是本技术实施例提供的消息类型信息的含义实例;
55.图6是本技术实施例提供的对读访问请求进行封装采用的数据格式;
56.图7是本技术实施例提供的基于图3所示soc仿真系统的写访问流程图;
57.图8是本技术实施例提供的对写访问请求进行封装采用的数据格式;
58.图9是本技术实施例提供的基于图3所示soc仿真系统的中断流程图;
59.图10是本技术实施例提供的对中断数据进行封装采用的数据格式;
60.图11是本技术实施例提供的电子设备的结构示意图。
具体实施方式
61.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员所获得的所有其他实施例,都属于本技术保护的范围。
62.在本发明实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。
63.应当理解,本文中使用的术语“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
64.取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”或“响应于检测”。类似地,取决于语境,短语“如果确定”或“如果检测(陈述的条件或事件)”可以被解释成为“当确定时”或“响应于确定”或“当检测(陈述的条件或事件)时”或“响应于检测(陈述的条件或事件)”。
65.图1示出了本技术实施例提供的基于虚拟机的soc仿真系统,如图1中所示,该仿真验证系统可以包括:soc模拟器101、硬件路由模型102和一个以上的硬件模型103,图1中示出了n个硬件模型,n可以为正整数。
66.其中soc模拟器101利用虚拟机模拟soc,例如模拟片上多核系统。该soc模拟器101可以是qemu(quickemulator)模拟器,也可以是virtualbox模拟器、vmware模拟器等。qemu是一个硬件虚拟化程序,通过指令消息翻译来模拟各种硬件平台。soc模拟器可以在risc-v(一个基于精简指令集risc原则的开源指令集架构)下运行guestos,也可以运行fw(firmware,固件软件)程序。fw担任着一个系统最基础最底层工作的软件,而在硬件设备中
fw就是硬件设备的主要软件组成,决定硬件设备的功能及性能。
67.硬件路由模型102的主要功能就是挂载各硬件的地址空间,实现soc模拟器与硬件之间的消息交互。在本技术实施例中,硬件路由模型102可以采用诸如tlm2(transactionlevelmodelingstandardversion2.0,事务级模型标准2.0版)的路由模型,依据tlm2在soc模拟器与硬件之间按照预设的数据格式进行各消息的封装和传输。
68.硬件模型103用来模拟硬件的功能特性。在本技术实施例中可以采用诸如systemc实现,即采用systemc模型。systemc是一种硬件描述语言,基于c++开发的library(库),添加了硬件扩展库和仿真核。除了systemc之外,也可以采用其他语言模拟硬件模型103。在本技术实施例中可以根据业务的需求和特性来设置不同的硬件模型。
69.使用上述soc仿真系统模拟硬件访问时,可以采用如图2中所示的主要方法流程。如图2中所示,该方法可以包括以下步骤:
70.步骤202:soc模拟器监听到来自待验证软件的硬件访问请求,依据硬件访问请求发送第一访问消息至硬件路由模型。
71.步骤204:硬件路由模型查询地址空间映射表,确定第一访问消息所请求访问的目标硬件对应的硬件模型信息,并向目标硬件对应的硬件模型发送第二访问消息。
72.步骤206:硬件模型执行第二访问消息所指示的操作,并将操作响应消息经由硬件路由模型返回给soc模拟器。
73.由以上主要流程可以看出,本技术中soc模拟器在监听到来自待验证软件的硬件访问请求后,由硬件路由模型路由至目标硬件对应的硬件模型,在硬件模型执行相应操作后将操作响应消息经由硬件路由模型返回给soc模拟器。也就是说,本技术的soc仿真系统提供了一种软硬件协同验证环境来模拟硬件访问过程,从而方便对软件的相关功能进行验证。
74.需要说明的是,本公开中涉及的“第一”、“第二”等限定并不具备大小、顺序和数量等方面的限制,仅仅用以在名称上加以区分,例如“第一访问消息”和“第二访问消息”用以区分两条访问消息,“第一中断消息”和“第二中断消息”用以区分两条中断消息,等等。
75.另外需要说明的是,本技术实施例中涉及的消息也可以指代“指令”、“命令”等表述。
76.本技术实施例中,硬件访问请求所来自于的待验证软件可以是guestos(客户机操作系统),也可以是fw程序。当开发人员、测试人员等在软件开发、测试等过程中需要对软件进行验证,这些软件的开发和调试大多都需要依赖硬件,也就是说,需要涉及到对硬件的访问。其中涉及的访问主要是读和写,也就是说,硬件访问请求主要是对硬件的读请求或写请求。下面结合实施例分别对利用soc仿真验证平台对软件对硬件的读、写过程分别进行描述。
77.在以下实施例中,soc模拟器、硬件路由模型和硬件模型分别以qemu、tlm2路由模型、systemc模型为例。如图3中所示,qemu模拟多核处理器,图3中以cpus表示。virtualdevice(虚拟设备)是预先向qemu注册的系统总线设备,其预先向qemu注册预设的硬件地址空间。其功能是接收fw程序在该硬件地址空间范围内对硬件的访问请求,并进行相应的处理。还可以进一步处理来自该硬件地址空间范围内的硬件的中断。
78.qemu与tlm2路由模型之间进行数据交互时通过cosim(couplingsimulator,耦合
模拟器)接口实现。qemu的cosim接口和tlm2路由模型的cosim接口可以按照预设的数据格式将交互的数据进行封装。
79.作为其中一种可实现的方式,qemu与tlm2路由模型之间可以采用套接字(socket)机制进行进程间通信,后续实施例将以此为例进行描述。除此之外,还可以采用诸如共享内存、pipe(管道)等其他进程间通信机制。
80.mmap(memoryaddressmappingport,存储地址映射端口)模块负责执行主要的硬件路由功能,具体参见后续实施例中的相关描述。
81.图4为本技术实施例提供的读访问流程的方法流程图,如图4中所示,该方法可以包括以下步骤:
82.步骤401:qemu进程启动后,开始监听来自fw程序的硬件访问请求。
83.在soc仿真验证系统所在的虚拟机启动后,启动qemu进程并执行初始化操作后,运行于cpu的主处理函数开始对来自fw程序的硬件访问请求进行监听。
84.步骤402:如果监听到针对硬件地址空间的硬件访问请求,则提供给virtualdevice处理。
85.virtualdevice预先向qemu注册预设的硬件地址空间,若qemu进程的主处理函数监听到针对该硬件地址空间的硬件访问请求,则将该硬件访问请求提供给virtualdevice。
86.步骤403:virtualdevice解析出硬件访问请求为读操作类型,将硬件访问请求携带的访问信息发送给cosim接口。
87.virtualdevice接收到硬件访问请求后,会对硬件访问请求的操作类型进行解析,如果是读操作类型,则采用本技术实施例中的流程进行后续处理。若是写操作类型,则采用图7所示实施例中的流程进行后续处理。
88.步骤404:cosim接口将访问信息封装为第一访问消息后,将第一访问消息写入到第一socket文件。
89.在本步骤中,qemu中的cosim接口按照预设数据结构进行消息封装,其中要封装的访问信息至少包括要读取的数据地址信息。
90.下面对本技术实施例进行消息封装时采用的数据结构进行描述。该数据结构可以包括两部分:基础格式信息和数据包。基础格式信息可以包括消息类型信息、数据包长度信息、请求标识信息、数据包类型信息等。
91.如图5a为基础格式信息的示意图,第1行用以标识各字段的长度信息,从低位到高位共4byte(字节),32bit(比特)。
92.第2行是cmd字段,用以携带消息类型信息。消息类型信息的取值和消息类型的对应关系可以如图5b中所示。0表示nop,即无操作;1~2表示default(默认),可以是预留的信息;3表示read,即读操作;4表示write,写操作;5表示interrupt,即中断操作。
93.继续参见图5a中第3行携带数据包长度信息(length),即指示在基础格式信息之后的数据包的长度。
94.第4行是id字段,用以携带每个消息的唯一标识,用于将发送的消息和接收到的响应消息进行匹配。该id可以采用诸如递增的数值分配给每个第一访问消息,只要保证唯一性即可。
95.第5行是flags字段,用以携带数据包类型信息来指示数据包的类型。例如,可以用
0x1表示请求数据包,用0x2表示响应数据包(responsepacket),用0x3表示不需要对端返回响应(postedpacket)。例如,如果该字段取值0x1,表示需要对端返回响应数据包;如果该字段取值0x3,则表示需要对端返回响应数据包。
96.第6行是device字段,用以携带virtualdevice类型信息(device),即表示注册到qemu的virtualdevice类型。在本技术实施例中,可以在qemu中注册两种virtualdevice类型,一种用以处理读写,另一种用以处理中断。
97.在本实施例中,对于读访问请求在封装得到第一访问消息时,可以采用如图6中所示的数据格式。前6行基础格式信息与图5a中一致,cmd取值为3,flags取值为0x2。后面几行是数据包,第7~8行是待读取的数据地址,共64bit。第9行是要读取的数据长度。第10~11行在读访问请求中不包含,但在响应数据包中包含。rsv为预留字段。respcode用以携带响应数据的状态,可以包含3种类型,例如用0x0表示响应成功,用0x1表示总线错误,用0x2表示地址错误。data字段携带响应数据。
98.继续参见图4,步骤405:tlm2路由模型中的cosim接口从第一socket文件中监听到第一访问消息,对第一访问消息进行解析,将解析得到的访问信息提供给tlm2路由模型中的mmap。
99.在本技术实施例中,tlm2路由模型所在进程(后续称为模型进程)启动后完成初始化操作等,模型进程的主处理函数开始运行,并由cosim接口监听第一socket文件,一旦从第一socket文件中监听到第一访问消息即开始执行本步骤。
100.步骤406:mmap查询地址空间映射表,确定访问信息中要读取的数据地址信息对应的发送端口信息,并利用确定出的端口信息发送携带该访问信息的第二访问消息。
101.在本技术实施例中可能存在多个systemc模型,分别模拟多个硬件,在虚拟机中为每个systemc模型分配有不同的存储地址空间。有鉴于此,mmap维护有地址空间映射表,该地址空间映射表包括地址信息与发送端口之间的对应关系。通过查询该地址空间映射表可以得到要读取的数据地址对应的发送端口,通过该发送端口发送携带访问信息的第二访问消息至目标硬件(即要访问的硬件)对应的systemc模型。
102.步骤407:systemc模型接收到第二访问消息后,执行第二访问消息所指示的读操作,并将读取的数据返回给tlm2路由模型。
103.步骤408:tlm2路由模型中的cosim接口将读取的数据按照预设数据结构封装为响应消息,将响应消息写入第二socket文件。
104.在本技术实施例中,第一socket文件和第二socket文件是相对应的。响应消息的格式参见上述实施例中关于图6的记载,通过其中的消息唯一标识将响应消息与硬件访问请求相匹配。
105.步骤409:qemu进程通过cosim接口监听第二socket文件中的响应消息。
106.步骤410:qemu进程从该响应消息中解析出读取的数据,将该读取的数据返回给fw程序。
107.图7为本技术实施例提供的写访问流程的方法流程图,如图7中所示,该方法可以包括以下步骤:
108.步骤701:qemu进程启动后,开始监听来自fw程序的硬件访问请求。
109.可以在soc仿真验证系统所在的虚拟机启动后,启动qemu进程并执行初始化操作
后,运行于cpu的主处理函数开始对来自fw程序的硬件访问请求进行监听。
110.步骤702:如果监听到针对硬件地址空间的硬件访问请求,则提供给virtualdevice处理。
111.virtualdevice预先向qemu注册预设的硬件地址空间,若qemu进程的主处理函数监听到针对该硬件地址空间的硬件访问请求,则将该硬件访问请求提供给virtualdevice。
112.步骤703:virtualdevice解析出硬件访问请求为写操作类型,将硬件访问请求携带的访问信息发送给cosim接口。
113.virtualdevice如果解析出硬件访问请求为读操作类型,则按照图4所示实施例中的流程执行。如果解析出硬件访问请求为写操作类型,则按照本实施例中的流程执行。
114.步骤704:cosim接口将访问信息封装为第一访问消息,并第一访问消息写入到第一socket文件。
115.在本步骤中,qemu中的cosim接口按照预设数据结构进行消息封装,其中要封装的访问信息可以包括要写入的数据地址信息、待写入数据等。
116.在本实施例中,对于写访问请求在封装得到第一访问消息时,可以采用如图8中所示的数据格式。前6行基础格式信息与图5a中一致,cmd取值为4,flags取值为0x2。后面几行是数据包,第7~8行是要写入的数据地址,共64bit。第9行是待写入的数据长度。第10~11行针对写访问请求封装时不包含,响应消息中包含。rsv为预留字段。respcode用以携带响应数据的状态,可以包含3种类型,例如用0x0表示响应成功,用0x1表示总线错误,用0x2表示地址错误。data字段携带待写入的数据。
117.继续参见图7,步骤705:tlm2路由模型中的cosim接口从第一socket文件中监听到第一访问消息,对第一访问消息进行解析,将解析得到的访问信息提供给tlm2路由模型中的mmap。
118.在本技术实施例中,tlm2路由模型所在进程(后续称为模型进程)启动后完成初始化操作等,模型进程的主处理函数开始运行,并由cosim接口监听第一socket文件,一旦从第一socket文件中监听到第一访问消息即开始执行本步骤。
119.步骤706:mmap查询地址空间映射表,确定访问信息中要写入的数据地址信息对应的发送端口信息,并利用确定出的端口信息发送携带该访问信息的第二访问消息。
120.在本技术实施例中可能存在多个systemc模型,分别模拟多个硬件,在虚拟机中为每个systemc模型分配有不同的存储地址空间。有鉴于此,mmap维护有地址空间映射表,该地址空间映射表包括地址信息与发送端口之间的对应关系。通过查询该地址空间映射表可以得到要写入的数据地址对应的发送端口,通过该发送端口发送携带访问信息的第二访问消息至目标硬件(即要访问的硬件)对应的systemc模型。
121.步骤707:systemc模型接收到第二访问消息后,执行第二访问消息所指示的写操作,并将操作结果数据返回给tlm2路由模型。
122.systemc模型依据第二访问消息携带的待写入的地址信息和待写入的数据,将待写入的数据写入到待写入的地址,并返回写入数据的结果。该结果包括写入成功、总线错误、地址错误等。
123.步骤708:tlm2路由模型将操作结果数据按照预设数据结构封装为响应消息,将响应消息通过cosim接口写入第二socket文件。
124.在本技术实施例中,第一socket文件和第二socket文件是相对应的。响应消息的格式参见上述实施例中关于图8的记载,通过其中的消息唯一标识将响应消息与硬件访问请求相匹配。
125.在封装响应消息时,如果操作结果为写入成功,则在respcode中设置0x0;如果操作结果为总线错误,则在respcode中设置0x1;如果操作结果为地址错误,则在respcode中设置0x2。
126.步骤709:qemu进程通过cosim接口监听第二socket文件中的响应消息。
127.步骤710:qemu进程从该响应消息中解析出操作结果数据,将该操作结果数据返回给fw程序。
128.下面结合实施例对中断流程进行描述。中断过程主要是systemc模型向tlm2路由模型发送第一中断消息;tlm2路由模型依据第一中断消息,将第二中断消息写入第三socket文件;qemu通过监听第三socket文件获取第二中断消息,并依据该第二中断消息触发中断处理。
129.图9为本技术实施例提供的中断流程的方法流程图,如图9中所示,该方法可以包括以下步骤:
130.步骤901:systemc模型向tlm2路由模型发送第一中断消息。
131.在本技术实施例中,tlm2路由模型和systemc所在进程(后续称为模型进程)启动后完成初始化操作等。systemc除了在读操作流程和写操作流程中执行读操作和写操作之外,可能在处理过程中产生中断,并向tlm2路由模型发送第一中断消息。该第一中断消息中携带中断号。中断号是系统分配给每个中断源的代号,在本技术实施例中中断号实际上能够代表是哪个硬件设备提出了中断请求。
132.步骤902:tlm2路由模型中的mmap查找中断向量映射表,确定第一中断消息所携带中断号对应的中断向量,将中断向量提供给cosim接口。
133.在tlm2路由模型中的mmap维护有中断向量映射表,该中断向量映射表包含中断号与中断向量之间的对应关系。通过查找中断向量映射表,确定第一中断消息所携带中断号对应的中断向量。中断向量是中断服务程序的入口地址。
134.步骤903:tlm2路由模型中的cosim接口将中断向量封装为第二中断消息并将第二中断消息写入第三socket文件。
135.在封装第二中断消息时,通常采用预设的数据格式,可以采用如图10中所示的数据格式。前6行基础格式信息与图5a中一致,cmd取值为5,flags取值为0x3。后面几行是数据包,第7行是中断向量。第8行中rsv为预留字段。value用以携带中断状态信息,例如用1表示正常中断,用0表示异常中断。
136.步骤904:qemu的cosim接口通过监听第三socket文件获取第二中断消息,并提供给virtualdevice。
137.在soc仿真验证系统所在的虚拟机启动后,启动qemu启动并执行初始化操作后,qemu进程里的主处理函数开始通过cosim接口监听第三socket文件。
138.步骤905:virtualdevice从第二中断消息中解析得到中断向量,向cpu触发中断。
139.步骤906:qemu依据中断向量从cpu层面触发fw程序的中断回调函数。
140.举个例子对本技术实施例的应用场景进行简单说明。
141.例如,软件开发过程中,需要验证soc上开发的fw程序对硬件b的写入功能是否正常。可以使用qemu模拟soc,在qemu上运行该fw程序,使用systemc模型模拟硬件b的功能特性,预先为硬件b分配地址空间,并且预先向qemu注册virtualdevice,并由virtualdevice预先向qemu注册为硬件b分配的地址空间。
142.通过fw程序向qemu进程发送一条写请求,该写请求中携带要写入的数据地址信息和待写入的数据。然后采用图7所示流程将待写入的数据写入要写入的数据地址,并返回写操作结果数据给fw程序。
143.然后再通过fw程序向qemu进程发送一条读请求,该读请求中携带要读取的数据地址信息,该要读取的数据地址信息与之前写入的数据地址信息一致。然后采用图4所示流程从该地址读取数据,并返回读取的数据给fw程序。这样软件开发人员就能够知晓写入的数据是否正确,如果读取的和写入的一致,则说明针对该硬件的数据功能是正常的。
144.再举一个例子,在软件开发过程中需要验证fw程序中某个中断功能是否正常。fw程序提前在qemu中注册virtualdevice用以处理中断,并在中断回调函数挂钩子(hook)。硬件模型触发中断条件后,触发中断,携带中断号在第一中断消息中。按照图9所示流程向qemu触发中断,qemu依据中断向量触发fw程序的中断回调函数。通过预先挂的钩子能够获取到中断回调函数的执行结果,软件开发人员就能够知晓该中断功能是否正常。
145.由上述实施例可以看出,本技术将tlm2和systemc模型结合起来构建一个soc仿真系统,既能够将fw软件运行在特定的risc-v架构下,又能够对芯片功能细节进行仿真验证。
146.上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
147.综合以上实施例所述,本技术实施例提供的如图1中所述的soc仿真系统中各部分的主要功能如下:
148.soc模拟器101,被配置为监听到来自待验证软件的硬件访问请求,依据硬件访问请求发送第一访问消息至硬件路由模型102。
149.硬件路由模型102,被配置为查询地址空间映射表,确定第一访问消息所请求访问的目标硬件对应的硬件模型信息,并向目标硬件对应的硬件模型103发送第二访问消息。
150.硬件模型103,被配置为执行第二访问消息所指示的操作,并将操作响应经由硬件路由模型102返回给soc模拟器。
151.作为其中一种可实现的方式,soc模拟器101中系统总线设备预先向soc模拟器101注册预设的硬件地址空间。soc模拟器101的主处理模块监听到硬件访问请求,若硬件访问请求访问硬件地址空间,则触发系统总线设备将硬件访问请求携带的访问信息提供给cosim接口,由cosim接口封装为第一访问消息,并发送第一访问消息至硬件路由模型102。
152.作为其中一种可实现的方式,soc模拟器101具体被配置为:将第一访问消息写入第一套接字文件,通过监听第二套接字文件获取操作响应。
153.硬件路由模型102具体被配置为通过监听第一套接字文件获取第一访问消息;获取到操作响应后,将操作响应写入第二套接字文件。
154.作为其中一种可实现的方式,硬件路由模型102具体被配置为:解析第一访问消息得到访问信息,访问信息包括要访问的地址信息;查询地址空间映射表,确定要访问的地址信息对应的发送端口信息,地址空间映射表包括各硬件模型被分配的存储空间地址信息与发送端口信息之间的对应关系;利用确定出的发送端口信息发送携带访问信息的第二访问消息。
155.作为其中一种可实现的方式,上述硬件访问请求可以包括写操作信息、要写入的数据地址信息以及待写入数据。相应地,硬件模型103在执行第二访问消息所指示的操作时,具体被配置为:依据要写入的数据地址信息对待写入数据进行写操作;操作响应消息包括写入成功或失败的响应数据。
156.作为另一种可实现的方式,上述硬件访问请求可以包括读操作信息以及要读取的数据地址信息。相应地,硬件模型103在执行第二访问消息所指示的操作时,具体被配置为:依据要读取的数据地址信息进行读操作;操作响应消息包括硬件模型读取的数据。
157.更进一步地,上述硬件模型103可以被配置为:向硬件路由模型发送第一中断消息。
158.硬件路由模型102进一步被配置为:依据第一中断消息,将第二中断消息写入第三套接字文件。
159.soc模拟器101进一步被配置为:通过监听第三套接字文件获取第二中断消息,并依据第二中断消息触发中断处理。
160.作为其中一种可实现的方式,硬件路由模型102可以具备被配置为:查找中断向量映射表,确定第一中断消息所携带的中断号对应的中断向量,将中断向量封装为第二中断消息并写入第三套接字文件。
161.soc模拟器101进一步被配置为:依据第二中断消息携带的中断向量触发中断回调函数。
162.作为其中一种可实现的方式,soc模拟器与内存映射总线之间传输的消息可以被封装为预设数据结构,预设数据结构包括基础格式信息和数据包。其中,基础格式信息可以包括消息类型信息、数据包长度信息、消息标识信息和数据包类型信息。数据包可以包括要访问的地址信息、待写入的数据、响应数据或中断向量。
163.另外,本技术实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现前述方法实施例中任一项所述的方法的步骤。
164.以及一种电子设备,包括:
165.一个或多个处理器;以及
166.与所述一个或多个处理器关联的存储器,所述存储器用于存储程序指令,所述程序指令在被所述一个或多个处理器读取执行时,执行前述方法实施例中任一项所述的方法的步骤。
167.本技术还提供了一种计算机程序产品,包括计算机程序,该计算机程序在被处理器执行时实现前述方法实施例中任一项所述的方法的步骤。
168.其中,图11示例性的展示出了电子设备的架构,具体可以包括处理器1110,视频显示适配器1111,磁盘驱动器1112,输入/输出接口1113,网络接口1114,以及存储器1120。上述处理器1110、视频显示适配器1111、磁盘驱动器1112、输入/输出接口1113、网络接口
1114,与存储器1120之间可以通过通信总线1130进行通信连接。
169.其中,处理器1110可以采用通用的cpu、微处理器、应用专用集成电路(applicationspecificintegratedcircuit,asic)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本技术所提供的技术方案。
170.存储器1120可以采用rom(readonlymemory,只读存储器)、ram(randomaccessmemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1120可以存储用于控制电子设备1100运行的操作系统1121,用于控制电子设备1100的低级别操作的基本输入输出系统(bios)1122。另外,还可以存储网页浏览器1123,数据存储管理系统1124,以及soc仿真系统1125等等。上述soc仿真系统1125就可以是本技术实施例中具体实现前述各步骤操作的应用程序。总之,在通过软件或者固件来实现本技术所提供的技术方案时,相关的程序代码保存在存储器1120中,并由处理器1110来调用执行。
171.输入/输出接口1113用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
172.网络接口1114用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如usb、网线等)实现通信,也可以通过无线方式(例如移动网络、wifi、蓝牙等)实现通信。
173.总线1130包括一通路,在设备的各个组件(例如处理器1110、视频显示适配器1111、磁盘驱动器1112、输入/输出接口1113、网络接口1114,与存储器1120)之间传输信息。
174.需要说明的是,尽管上述设备仅示出了处理器1110、视频显示适配器1111、磁盘驱动器1112、输入/输出接口1113、网络接口1114,存储器1120,总线1130等,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本技术方案所必需的组件,而不必包含图中所示的全部组件。
175.通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本技术可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分可以以计算机程序产品的形式体现出来,该计算机程序产品可以存储在存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例或者实施例的某些部分所述的方法。
176.本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的系统及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
177.以上对本技术所提供的技术方案进行了详细介绍,本文中应用了具体个例对本技术的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本技术的方法及其核心思想;同时,对于本领域的一般技术人员,依据本技术的思想,在具体实施方式及应用范围上均会有改变之处。综上所述,本说明书内容不应理解为对本技术的限制。
技术特征:
1.一种基于虚拟机的片上系统soc仿真方法,其特征在于,应用于包含soc模拟器、硬件路由模型和一个以上的硬件模型的soc仿真系统,所述方法包括:所述soc模拟器监听到来自待验证软件的硬件访问请求,依据所述硬件访问请求发送第一访问消息至所述硬件路由模型;所述硬件路由模型查询地址空间映射表,确定所述第一访问消息所请求访问的目标硬件对应的硬件模型信息,并向所述目标硬件对应的硬件模型发送第二访问消息;所述硬件模型执行所述第二访问消息所指示的操作,并将操作响应经由所述硬件路由模型返回给所述soc模拟器。2.根据权利要求1所述的方法,其特征在于,该方法还包括:系统总线设备预先向所述soc模拟器注册预设的硬件地址空间;所述soc模拟器监听到硬件访问请求,依据所述硬件访问请求发送第一访问消息至所述硬件路由模型包括:所述soc模拟器的主处理模块监听到所述硬件访问请求,若所述硬件访问请求访问所述硬件地址空间,则触发所述系统总线设备将所述硬件访问请求携带的访问信息提供给耦合模拟器接口,由耦合模拟器接口封装为第一访问消息,并发送第一访问消息至所述硬件路由模型。3.根据权利要求1或2所述的方法,其特征在于,所述发送第一访问消息至所述硬件路由模型包括:将所述第一访问消息写入第一套接字文件,所述硬件路由模型通过监听所述第一套接字文件获取所述第一访问消息;所述将操作响应经由所述硬件路由模型返回给所述soc模拟器包括:所述硬件路由模型获取到所述操作响应后,将所述操作响应写入第二套接字文件,所述soc模拟器通过监听所述第二套接字文件获取所述操作响应。4.根据权利要求1所述的方法,其特征在于,所述硬件路由模型查询地址空间映射表,确定所述第一访问消息所请求访问的目标硬件对应的硬件模型信息,并向所述目标硬件对应的硬件模型发送第二访问消息包括:所述硬件路由模型解析所述第一访问消息得到访问信息,所述访问信息包括要访问的地址信息;查询地址空间映射表,确定所述要访问的地址信息对应的发送端口信息,所述地址空间映射表包括各硬件模型被分配的存储空间地址信息与发送端口信息之间的对应关系;利用确定出的发送端口信息发送携带所述访问信息的第二访问消息。5.根据权利要求1至4中任一项所述的方法,其特征在于,所述硬件访问请求包括写操作信息、要写入的数据地址信息以及待写入数据;所述硬件模型执行所述第二访问消息所指示的操作包括:所述硬件模型依据所述要写入的数据地址信息对所述待写入数据进行写操作;所述操作响应消息包括写入成功或失败的响应数据;或者,所述硬件访问请求包括读操作信息以及要读取的数据地址信息;所述硬件模型执行所述第二访问消息所指示的操作包括:所述硬件模型依据所述要读取的数据地址信息进行读操作;所述操作响应消息包括所述硬件模型读取的数据。6.根据权利要求1所述的方法,其特征在于,所述方法还包括:所述硬件模型向所述硬件路由模型发送第一中断消息;
所述硬件路由模型依据所述第一中断消息,将第二中断消息写入第三套接字文件;所述soc模拟器通过监听所述第三套接字文件获取所述第二中断消息,并依据所述第二中断消息触发中断处理。7.根据权利要求6所述的方法,其特征在于,所述硬件路由模型依据所述第一中断消息,将第二中断消息写入第三套接字文件包括:所述硬件路由模型查找中断向量映射表,确定所述第一中断消息所携带的中断号对应的中断向量,将所述中断向量封装为第二中断消息并写入第三套接字文件;依据所述第二中断消息触发中断处理包括:所述soc模拟器依据所述第二中断消息携带的中断向量触发中断回调函数。8.根据权利要求1至4、6和7中任一项所述的方法,其特征在于,所述soc模拟器与所述内存映射总线之间传输的消息被封装为预设数据结构,所述预设数据结构包括基础格式信息和数据包;所述基础格式信息包括消息类型信息、数据包长度信息、消息标识信息和数据包类型信息;所述数据包包括要访问的地址信息、待写入的数据、响应数据或中断向量。9.根据权利要求1至4、6和7中任一项所述的方法,其特征在于,所述soc模拟器为qemu,所述硬件路由模型为tlm2模型,所述硬件模型为system c模型。10.一种基于虚拟机的soc仿真系统,其特征在于,所述soc仿真系统包括:soc模拟器、硬件路由模型和一个以上的硬件模型;所述soc模拟器,用于监听硬件访问请求,依据监听到的硬件访问请求发送第一访问消息至所述硬件路由模型;所述硬件路由模型,用于查询地址空间映射表,确定所述第一访问消息所请求访问的目标硬件对应的硬件模型信息,并向所述目标硬件对应的硬件模型发送第二访问消息;所述硬件模型,用于执行所述第二访问消息所指示的操作,并将操作响应消息返回给所述硬件路由模型;所述硬件路由模型,还用于将所述操作响应消息返回给所述soc模拟器。11.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求1至9任一项所述的方法的步骤。12.一种电子设备,其特征在于,包括:一个或多个处理器;以及与所述一个或多个处理器关联的存储器,所述存储器用于存储程序指令,所述程序指令在被所述一个或多个处理器读取执行时,执行权利要求1至9任一项所述的方法的步骤。
技术总结
本申请实施例公开了一种基于虚拟机的片上系统(SoC)仿真方法及系统。SoC仿真系统包含SoC模拟器、硬件路由模型和一个以上的硬件模型的SoC仿真系统,所述方法包括:所述SoC模拟器监听到来自待验证软件的硬件访问请求,依据所述硬件访问请求发送第一访问消息至所述硬件路由模型;所述硬件路由模型查询地址空间映射表,确定所述第一访问消息所请求访问的目标硬件对应的硬件模型信息,并向所述目标硬件对应的硬件模型发送第二访问消息;所述硬件模型执行所述第二访问消息所指示的操作,并将操作响应经由所述硬件路由模型返回给所述SoC模拟器。本申请提供了一种软硬件协同验证环境,从而方便对软件的相关功能进行验证。而方便对软件的相关功能进行验证。而方便对软件的相关功能进行验证。
技术研发人员:冯杰
受保护的技术使用者:平头哥(上海)半导体技术有限公司
技术研发日:2022.12.09
技术公布日:2023/7/11
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
飞机超市 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/