本发明涉及异构处理器的模拟领域,特别涉及一种面向超长指令字异构处理器的模拟方法及模拟器。
背景技术:
1、面向超长指令字异构处理器的模拟器,是一种针对mapu架构处理器指令集的虚拟化仿真方法。旨在模拟mapu处理器的行为,从而实现协助芯片设计人员对芯片的微结构设计、互联关系等进行评估、修改,辅助芯片验证人员定位芯片设计的逻辑错误,为应用开发程序员提供软件开发环境、程序性能分析工具。
2、在实现本发明的过程中,发明人发现现有技术中对面向超长指令字异构处理器进行模拟,需要完成以下层面的需求:
3、1、要分别模拟mapu架构处理器中两个vliw架构的处理单元,且这两个处理单元之间要能够进行数据交换;
4、2、要模拟程序存储区和数据存储区(dm)。其中,两个处理单元都要访问dm,可能出现访问冲突。因此,除模拟读取dm的行为外,还要模拟总线仲裁,并且模拟访问冲突对处理单元的流水线造成的影响;
5、3、每个处理单元都要模拟硬件的各级流水线,准确统计指令的执行周期;
6、4、要准确模拟每个处理单元的指令功能,对于相同的数据输入,需要得到与硬件一致的数据输出;
7、5、要能够将解析测试用例得到的数据载入,对指令功能进行验证;
8、6、要对两个处理单元的流水线信息都进行统计,统计数据包括指令的pc、指令编码、执行时刻、占用的流水级等,最终输出带有时钟信息、流水级、pc值、汇编指令的流水线统计表;
9、7、要模拟mpu内部各个功能单元的数据端口占用情况、寄存器占用情况(包括占用的对象和占用的时间),输出相关的报错提示;
10、8、通过gdb server与gdb连接时,采用差值传输的方式更新寄存器值。即每次向gdb传输寄存器信息时,对于向量寄存器,只传输被写入过新值的寄存器的值。因此,在模拟向量寄存器时,除了模拟寄存器本身的数据外,还需要记录寄存器是否被更新,并在gdb读取完寄存器信息后清空记录;
11、9、模拟器实现和rtl的实现也许会出现不一致的情况,为了方便程序员进行调试、比对程序中间结果,模拟器要记录寄存器更新情况,并将每个寄存器的更新信息分别输出到特定文件中,输出的信息包括更新寄存器的时刻、更新寄存器的指令对应的pc值、寄存器被写入的新值。
12、有鉴于此,特提出本发明。
技术实现思路
1、为了解决现有技术的问题,本发明实施例提供了一种面向超长指令字异构处理器的模拟方法及模拟器。所述技术方案如下:
2、一方面,提供了一种面向超长指令字异构处理器的模拟方法,所述方法包括:
3、s1:读取模拟异构处理器的二进制文件,获得指令和数据信息;
4、s2:模拟异构处理器的各级流水线的具体行为;其中,从指令存储器中读取指令包,通过解码操作确定执行指令的功能单元,然后将指令分发到对应的单元;各单元根据指令功能完成取源操作数、计算、访问内存、结果写回等操作;
5、s3:在指令执行过程中,记录各级流水线上的指令信息,到特定时间输出到指定文件中;并且,记录寄存器更新的信息,到特定时间更新寄存器或是输出相关信息至指定文件;处理器停止运行后输出最终的dm结果;
6、s4:在异构处理器开始工作前载入测试信息,异构处理器开始工作后在指定的时钟周期检测寄存器结果,最终输出测试信息。
7、进一步地,步骤s2具体包括:
8、s201:使用时钟驱动的方式推进处理异构处理器的spu和mpu流水线过程:取指操作、译码操作、取操作数操作、执行操作和结果写回操作;
9、s202:对处理器的数据总线和dm的读写进行行为模拟。
10、进一步地,所述取指过程包括:以程序计数器的值为地址,从程序存储器中读取指令包;根据指令字中特定的标志位,确定指令包的长度为l,将程序计数器的值加l,并更新程序计数器;
11、译码过程包括:模拟器初始化时,将各个单元的指令编码编译成正则表达式;
12、译码阶段包括:根据指令字中的标志位确定有指令的功能单元,将有效指令分发到各个功能部件,将指令字与指令编码的正则表达式进行匹配,匹配成功则能确认指令功能,再根据指令功能获取对应的指令选项、操作数信息;
13、取操作数包括:根据译码获得的指令操作数信息,从寄存器堆中读取源寄存器的值;
14、执行操作:根据译码结果,不同指令调用不同的指令功能函数对取出的操作数进行运算;
15、结果写回:当指令需要向寄存器写入结果时,调用寄存器写回控制模块的接口,将与寄存器写回、端口占用相关的信息传给寄存器写回控制模块,由寄存器写回控制模块最终控制写回操作、判断端口占用。
16、进一步地,步骤s202具体包括以下步骤:
17、s2021:将异构处理器中的加载或储存指令组织成访问内存请求的数据包,发往数据总线;
18、s2022:数据总线接收到访问请求后,根据数据总线是否被占用、请求的先后顺序、响应的优先级等情况对访问请求作出响应;
19、s2023:数据总线响应某一访问后,根据数据包中携带的信息,在dm中读取数据或写入数据;
20、s2024:数据读写完成后,数据总线向访问请求方发送访问成功的信号;
21、s2025:访问请求方若是加载指令,则接收到访问成功的信号后,调用寄存器写回控制模块接口,将数据写回到寄存器中;若为是储存指令,则指令执行结束。
22、进一步地,步骤s3中,记录各级流水线上的指令信息,到特定时间输出到指定文件中的具体过程如下:
23、s301:在模拟每个时钟周期中,记录下每个流水级spu、mpu的每个功能单元执行的指令;每个时钟周期结束,将spu、mpu的执行状态、记录下的流水线信息组织成一个对象,存储到流水线buffer中;
24、s302:当流水线buffer中存储的流水线数据到达限定值,则调用反汇编器,将指令字转换为汇编指令文法。
25、进一步地,步骤s3中,记录寄存器更新的信息,到特定时间更新寄存器或是输出相关信息至指定文件的具体过程如下:
26、s303:模拟器初始化阶段对所有的寄存器进行编号;每当需要向寄存器写入结果时,调用寄存器写回控制模块的接口,输入对象并存储到控制写回的wbbuffer中;寄存器写回控制模块在每个时钟周期都遍历wbbuffer,并且进行寄存器冲突检测和更新寄存器值操作;
27、s304:模拟完一个时钟周期后,遍历所有向量寄存器,查询寄存器的编号参数;若编号参数为约定的无效值,则表示寄存器值未被更新,不做任何操作;若编号有效,则查询其对应的pc值,最终将clock、程序计数器的值、寄存器值作为一行数据,输出到每个寄存器对应的文件中,并将寄存器的编号参数置为无效值;
28、s305:采用差值传输的方式更新gdb寄存器;
29、s306:检测端口冲突:对所有数据端口进行编号,每当一条指令需要向寄存器写入结果时,调用寄存器写回控制模块的接口,将端口参数输入给寄存器写回控制模块的端口信息处理模块。
30、进一步地,步骤s3中,处理器停止运行后输出最终的dm结果包括:程序运行结束后,调用dm输出函数,将结束时刻的dm数据分别按word粒度写入到不同文件中。
31、进一步地,步骤s4包括以下步骤:
32、s401:利用脚本对测试用例进行静态解析,为每一个测试项生成一条指定格式的字符串,输出到指定文件中;
33、s402:在程序开始执行之前,将指定文件中的测试信息载入,存入测试模块的buffer中;
34、s403:程序开始执行后,每当模拟器结束一个时钟周期的模拟,测试模块遍历测试模块的buffer,检查模拟器当前状态是否已经满足检测条件;对于满足条件的测试项,比对寄存器的实际值与期望值,并输出测试信息,然后将其从测试模块的buffer中删除。
35、另一方面,提供了一种面向超长指令字异构处理器的模拟器,所述模拟器包括:程序加载模块、处理器内核模块、信息统计输出模块和测试模块;
36、所述程序加载模块用于读取模拟异构处理器中的文件,获得指令和数据信息;
37、所述处理器内核模块用于模拟异构处理器的各级流水线的具体行为;其中,所述处理器内核模块用于从指令存储器中读取指令包,通过解码操作确定执行指令的功能单元,然后将指令分发到对应的单元;各单元根据指令功能完成取源操作数、计算、访问内存、结果写回等操作;
38、所述信息统计输出模块用于在指令执行过程中记录各级流水线上的指令信息,到特定时间输出到指定文件中;并且,记录寄存器更新的信息,到特定时间更新寄存器或是输出相关信息至指定文件;处理器停止运行后输出最终的dm结果;
39、所述测试模块用于在异构处理器开始工作前载入测试信息,并且异构处理器开始工作后在指定的时钟周期检测寄存器结果,最终输出测试信息。
40、进一步地,所述处理器内核模块还用于使用时钟驱动的方式推进处理异构处理器的spu和mpu流水线过程:取指操作、译码操作、取操作数操作、执行操作和结果写回操作;
41、所述处理器内核模块还用于对处理器的数据总线和dm的读写进行行为模拟。
42、本发明实施例提供的技术方案带来的有益效果是:
43、1、使用数组、union、mmap等对处理器的寄存器、程序存储器、数据存储器进行了模拟。对mapu异构处理器的两个处理单元都进行了周期精确的模拟,准确实现了指令功能,并能输出执行周期等信息,辅助程序员进行性能评估和优化。
44、2、流水线输出信息包括pc和汇编指令,以一个clock为一行,spu、mpu各功能单元的流水线依次按列排布,直观明了,且可以通过excel或者libreoffice calc等以表格形式打开。
45、3、模拟器通过gdb server与gdb连接时,支持寄存器差值传输,有效减少传输数据量,降低传输延迟。
46、4、支持将寄存器更新情况分别输出到特定文件中,方便程序员追踪单个寄存器的变化,pc和clock信息有利于程序员定位错误。
47、5、支持寄存器冲突检测,便于程序员定位寄存器写入冲突引入的程序错误。
48、6、提供与硬件互联关系对应的数据端口冲突检测,有利于程序员定位端口冲突引入的错误。
49、7、能够利用验证团队提供的、用system verilog语言编写的测试用例,进行测试。保证在输入数据相同的情况下,得到与硬件一致的数据输出。
1.一种面向超长指令字异构处理器的模拟方法,其特征在于,所述方法包括:
2.根据权利要求1所述的面向超长指令字异构处理器的模拟方法,其特征在于,步骤s2具体包括:
3.根据权利要求2所述的面向超长指令字异构处理器的模拟方法,其特征在于,所述取指过程包括:以程序计数器的值为地址,从程序存储器中读取指令包;根据指令字中特定的标志位,确定指令包的长度为l,将程序计数器的值加l,并更新程序计数器;
4.根据权利要求2所述的面向超长指令字异构处理器的模拟方法,其特征在于,步骤s202具体包括以下步骤:
5.根据权利要求2所述的面向超长指令字异构处理器的模拟方法,其特征在于,步骤s3中,记录各级流水线上的指令信息,到特定时间输出到csv文件中的具体过程如下:
6.根据权利要求5所述的面向超长指令字异构处理器的模拟方法,其特征在于,步骤s3中,记录寄存器更新的信息,到特定时间更新寄存器或是输出相关信息至指定文件的具体过程如下:
7.根据权利要求6所述的面向超长指令字异构处理器的模拟方法,其特征在于,步骤s3中,处理器停止运行后输出最终的dm结果包括:程序运行结束后,调用dm输出函数,将结束时刻的dm数据分别按word粒度写入到不同文件中。
8.根据权利要求6所述的面向超长指令字异构处理器的模拟方法,其特征在于,步骤s4包括以下步骤:
9.一种面向超长指令字异构处理器的模拟器,其特征在于,包括:程序加载模块、处理器内核模块、信息统计输出模块和测试模块;
10.根据权利要求9所述的面向超长指令字异构处理器的模拟器,其特征在于,所述处理器内核模块还用于使用时钟驱动的方式推进处理异构处理器的spu和mpu流水线过程:取指操作、译码操作、取操作数操作、执行操作和结果写回操作;