CN115421860B - 一种通用的sparc处理器指令集虚拟化仿真方法 - Google Patents
一种通用的sparc处理器指令集虚拟化仿真方法 Download PDFInfo
- Publication number
- CN115421860B CN115421860B CN202211114538.6A CN202211114538A CN115421860B CN 115421860 B CN115421860 B CN 115421860B CN 202211114538 A CN202211114538 A CN 202211114538A CN 115421860 B CN115421860 B CN 115421860B
- Authority
- CN
- China
- Prior art keywords
- instruction
- sparc
- architecture
- simulation
- processor
- 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.)
- Active
Links
- 238000004088 simulation Methods 0.000 title claims abstract description 65
- 238000000034 method Methods 0.000 title claims abstract description 22
- 230000015654 memory Effects 0.000 claims abstract description 72
- 230000006870 function Effects 0.000 claims description 26
- 238000013519 translation Methods 0.000 claims description 19
- 238000012545 processing Methods 0.000 claims description 12
- 238000007667 floating Methods 0.000 claims description 9
- 230000011218 segmentation Effects 0.000 claims description 5
- 238000004458 analytical method Methods 0.000 claims description 4
- 125000004122 cyclic group Chemical group 0.000 claims description 4
- 238000010276 construction Methods 0.000 claims description 2
- 239000012634 fragment Substances 0.000 claims description 2
- 238000003491 array Methods 0.000 abstract description 3
- 238000011161 development Methods 0.000 abstract description 3
- 238000005516 engineering process Methods 0.000 description 4
- 230000018109 developmental process Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明涉及一种通用的SPARC处理器指令集虚拟化仿真方法,属于虚拟仿真领域。本发明针对SPARCV7、SPARCV8两种指令集版本的处理器,解决SPARC处理器的虚拟化仿真问题。SPARCV7、V8两个版本指令集共计包含130条指令集,通过对130条指令集的仿真,提供SPARC处理器嵌入式处理器软件的运行环境,为SPARC处理器嵌入式处理器软件的开发提供支撑。本发明提出的方案,能够实现SPARC指令架构处理器的指令集仿真,仿真精度高;本发明采用数组、链表等实现寄存器、内存的仿真,能够完成仿真SPARC指令架构处理器。
Description
技术领域
本发明属于虚拟仿真领域,具体涉及一种通用的SPARC处理器指令集虚拟化仿真方法。
背景技术
指令集仿真是处理器虚拟化技术最重要的支撑技术,指令集仿真允许特定指令集上的软件运行在另一类异构的指令集上。在指令集层次上实现虚拟化,实际上就是将某个硬件平台上的二进制代码转换为另一个硬件平台上的二进制代码,从而实现不同指令集间的兼容,这一技术也被称为二进制翻译。虚拟化技术实现有2种主要方式:解释执行、动态二进制翻译。
解释器对源二进制代码逐条进行分析,根据译码结果即指令类型,分解相应的解释例程执行。解释例程在一个由软件维护的源体系结构(包括各种结构寄存器、内存状态等)上用等价的一条或多条目标指令来模拟源指令的执行,获得和源指令同样的执行效果。解释器工作过程主要包括“取指令—>分析指令—>完成指令所需的操作—>修改处理器状态”等步骤,如此循环。
基于解释执行的仿真器在主机中维护一个精确的处理器数据结构,具有很高的仿真精度,可以实现精确的寄存器、存储器、流水线,除了模拟源程序的功能外,可以得到精确的性能指标,如每条指令在流水线中的时钟周期,堆栈模拟等。
发明内容
(一)要解决的技术问题
本发明要解决的技术问题是如何提供一种通用的SPARC处理器指令集虚拟化仿真方法,以解决SPARC处理器的虚拟仿真问题。
(二)技术方案
为了解决上述技术问题,本发明提出一种通用的SPARC处理器指令集虚拟化仿真方法,该方法包括如下步骤:
S1、SPARC指令架构目标文件解析
打开SPARC指令架构编译后的可执行文件*.exe,获取Program Header对应的代码段;
S2、SPARC指令架构内存仿真及代码加载
采用链表结构对SPARC指令架构处理器内存进行仿真,记为SPARC-VMemory,并加载Program Header对应的代码段,模拟SPARC指令架构的内存读写操作;
S3、SPARC指令架构寄存器仿真
通过数组模拟寄存器,通过数组操作模拟寄存器读写操作,实现寄存器的模拟;
S4、SPARC指令架构指令描述
每条指令有一个唯一的表示,每条指令分为不同的段;采用将指令分段的方式进行描述,获取指令Instruction的操作码opcode信息,构建指令操作码信息数组SPARC-InstructionDesp[130],对SPARC架构指令集架构的130条指令进行描述,并存储到指令操作码信息数组SPARC-InstructionDesp[130]中;
S5、SPARC指令架构读取指令
根据程序计数器PC的值,从仿真内存SPARC-VMemory中读取指令,获取当前PC对应的指令PC-Instruction;
S6、SPARC指令架构指令译码
根据SPARC指令架构指令描述,逐个计算PC-Instruction与SPARC-InstructionDesp[130]的对应bit位是否相同,若PC-Instruction与SPARC-InstructionDesp[130]中第k个指令描述对应的位置相同,则完成指令译码,记为Instruction_k;
S7、SPARC指令架构指令翻译
对SPARC指令架构指令集进行功能翻译,设计在虚拟仿真处理器运行的对每条指令进行操作模拟的函数,保证每一条指令和函数处理后,硬件处理器和虚拟仿真处理器的内存、寄存器保持一致;并将函数指针存储到SPARC-InstructionInterp[130]数组中,存储顺序与SPARC-InstructionDesp[130]的指令顺序保持一致;
S8、SPARC指令架构Linux系统调用实现
解析系统调用,并根据系统调用的类型,对系统调用进行相应的处理,并对相应的寄存器进行置位操作;
S9、SPARC指令架构指令执行
根据指令数量,进行循环取指、译码、指令翻译,并根据函数指针,执行指令操作;连续仿真,直到完成所有指令执行,实现针对SPARC指令架构的处理器指令集仿真。
进一步地,所述步骤S1具体包括:
S11、打开SPARC指令架构编译后的可执行文件*.exe,读取文件信息;
S12、按照SPARC指令架构编译后的可执行文件的格式,读取文件信息中FileHeader、Section Header、Program Header信息,获取Program Header对应的代码段。
进一步地,所述步骤S2具体包括:
S21、采用链表结构对SPARC指令架构处理器内存进行仿真,其中链表结构体SPARC-MemoryPage大小为256个字;
S22、将SPARC指令架构内存记为SPARC-VMemory;将S1获取的Program Header对应的代码段,写入到SPARC指令架构芯片仿真内存SPARC-VMemory中,并根据代码段的大小,维护整个仿真内存结构。
进一步地,链表结构体包括:起始虚拟地址MemoryPageBeginAddress、结束虚拟地址MemoryPageEndAddress、内存块MemoryPage、下一个内存节点指针NEXT和前一个内存节点指针PRE。
进一步地,如果代码段不大于256,创建一个MemoryPage,并将代码段写到对用的MemoryPage数组中去;如果代码段大于256,创建多个MemoryPage,并将代码段按顺序写到对应的MemoryPage数组中去,并维护各个节点的MemoryPageBeginAddress、MemoryPageEndAddress信息,保证链表结构信息的正确性。
进一步地,所述步骤S3具体包括:
S31、对SPARC指令架构芯片75个主要寄存器进行仿真,分为8个全局通用寄存器、24个通用读写处理寄存器、32个浮点处理寄存器以及11个特殊寄存器,通过数组SPARC-Register模拟寄存器,实现寄存器的模拟;
S32、通过访问SPARC-Register,对相应的数组中的元素进行操作模拟SPARC指令架构的寄存器操作,实现对SPARC指令架构的寄存器仿真。
进一步地,所述步骤S4具体包括:
S41、SPARC指令架构共计包括130条指令,其中整型指令97条,浮点指令33条,每条指令有一个唯一的表示,每条指令分为不同的段;采用将指令分段的方式进行描述,获取指令Instruction的操作码opcode信息,并设计指令操作码信息数组SPARC-InstructionDesp的结构;
S42、构建指令操作码信息数组SPARC-InstructionDesp[130],对SPARC指令集架构的130条指令进行描述,并存储到指令操作码信息数组SPARC-InstructionDesp[130]中。
进一步地,所述指令操作码信息数组SPARC-InstructionDesp的结构包括:name、contentNumber和content,其中,name是指令名称,contentNumber指令分段数量,content用于存储opcode指令译码信息。
进一步地,所述步骤S5具体包括:
S51、根据程序计数器PC的值,从S2维护的SPARC-VMemory中读取指令;
S52、根据SPARC-MemoryPage中的MemoryPageBeginAddress、MemoryPageEndAddress的值,计算出PC属于SPARC-MemoryPage,记为SPARC-MemoryPage-i,地址偏移为PC-MemoryPageBeginAddress,指令内容为SPARC-MemoryPage-i对应的MemoryPage[PC-MemoryPageBeginAddress],记为PC-Instruction。
进一步地,所述步骤S7具体包括:
S71、对SPARC指令架构指令集中的指令进行功能翻译,并设计在虚拟仿真处理器运行的对每条指令进行操作模拟的函数,保证每一条指令和函数处理后,硬件处理器和虚拟仿真处理器的内存、寄存器保持一致;
S72:翻译SPARC指令架构的130条指令,并将函数指针存储到指令翻译译码数组SPARC-InstructionInterp[130]数组中,存储顺序与SPARC-InstructionDesp[130]的指令顺序保持一致;
S73、根据S6计算出的Instruction_k,获得该指令对应的函数中指针。
(三)有益效果
本发明提出一种通用的SPARC处理器指令集虚拟化仿真方法,本发明针对SPARCV7、SPARC V8两种指令集版本的处理器,解决SPARC处理器的虚拟化仿真问题。SPARC V7、V8两个版本指令集共计包含130条指令集,通过对130条指令集的仿真,提供SPARC处理器嵌入式处理器软件的运行环境,为SPARC处理器嵌入式处理器软件的开发提供支撑。本发明提出的方案,能够实现SPARC指令架构处理器的指令集仿真,仿真精度高;本发明采用数组、链表等实现寄存器、内存的仿真,能够完成仿真SPARC指令架构处理器。
附图说明
图1为解释执行技术原理示意图;
图2为指令示意图。
具体实施方式
为使本发明的目的、内容和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
为嵌入式处理软件提供虚拟化的运行环境,本发明提出一种基于解释执行的SPARC指令架构处理器虚拟化仿真技术方案,主要包含SPARC V7、SPARC V8两种指令集版本的处理器,解决SPARC处理器的虚拟化仿真问题。SPARC V7、V8两个版本指令集共计包含130条指令集,通过对130条指令集的仿真,提供SPARC处理器嵌入式处理器软件的运行环境,为SPARC处理器嵌入式处理器软件的开发提供支撑。
S1、SPARC指令架构目标文件解析
打开SPARC指令架构编译后的可执行文件*.exe,获取Program Header对应的代码段;
其中,SPARC处理器文件格式为ELF,根据ELF文件格式文件信息,读取文件信息中的File Header、Section Header、Program Header等信息,获取Program Header对应的代码段;
S2、SPARC指令架构内存仿真及代码加载
为提高内存仿真的可扩展性,采用链表结构对SPARC指令架构处理器内存进行仿真,记为SPARC-VMemory,并加载Program Header对应的代码段,模拟SPARC指令架构的内存读写操作。
S3、SPARC指令架构寄存器仿真
对SPARC指令架构芯片75个主要寄存器进行仿真,分为8个全局通用寄存器、24个通用读写处理寄存器、32个浮点处理寄存器和11个特殊寄存器,本发明通过数组模拟寄存器,通过数组操作模拟寄存器读写操作,实现寄存器的模拟。
S4、SPARC指令架构指令描述
每条指令有一个唯一的表示,每条指令分为不同的段;为准确描述指令结构,本发明采用将指令分段的方式进行描述,获取指令Instruction的操作码opcode信息,构建指令操作码信息数组SPARC-InstructionDesp[130],对SPARC架构指令集架构的130条指令进行描述,并存储到指令操作码信息数组SPARC-InstructionDesp[130]中。
S5、SPARC指令架构读取指令
根据程序计数器PC(Program Count)的值,从仿真内存SPARC-VMemory中读取指令,获取当前PC对应的指令PC-Instruction;
S6、SPARC指令架构指令译码
SPARC指令架构共包含130条指令集,根据SPARC指令架构指令描述,逐个计算PC-Instruction与SPARC-InstructionDesp[130]的对应bit位是否相同,若PC-Instruction与SPARC-InstructionDesp[130]中第k个指令描述对应的位置相同,则完成指令译码,记为Instruction_k。
S7、SPARC指令架构指令翻译
对SPARC指令架构指令集进行功能翻译,设计在虚拟仿真处理器运行的对每条指令进行操作模拟的函数,保证每一条指令和函数处理后,硬件处理器和虚拟仿真处理器的内存、寄存器保持一致;并将函数指针存储到SPARC-InstructionInterp[130]数组中,存储顺序与SPARC-InstructionDesp[130]的指令顺序保持一致;
S8、SPARC指令架构Linux系统调用实现
解析系统调用,并根据系统调用的类型,对系统调用进行相应的处理,并对相应的寄存器进行置位操作;
S9、SPARC指令架构指令执行
根据指令数量,进行循环取指、译码、指令翻译,并根据函数指针,执行指令操作;连续仿真,直到完成所有指令执行,实现针对SPARC指令架构的处理器指令集仿真。
实施例1:
本发明提出一种基于解释执行的SPARC指令架构处理器虚拟化仿真技术方案,通过指令集仿真。
S1、SPARC指令架构目标文件解析
S11、打开SPARC指令架构编译后的可执行文件*.exe,读取文件信息;
S12、按照SPARC指令架构编译后的可执行文件的格式,读取文件信息中FileHeader、Section Header、Program Header等信息,获取Program Header对应的代码段;
S2、SPARC指令架构内存仿真及代码加载
S21、为提高内存仿真的可扩展性,采用链表结构对SPARC指令架构处理器内存进行仿真,其中链表结构体SPARC-MemoryPage大小为256个字(word),链表结构体包括:起始虚拟地址MemoryPageBeginAddress、结束虚拟地址MemoryPageEndAddress、内存块MemoryPage、下一个内存节点指针NEXT和前一个内存节点指针PRE;
链表结构体如下:
SPARC-MemoryPage{
Unsigned int MemoryPageBeginAddress;//虚拟地址
Unsigned int MemoryPageEndAddress;//虚拟地址
MemoryPage[256];//内存块大小
SPARC-MemoryPage NEXT;//指向下一个内存节点
SPARC-MemoryPage PRE;//指向前一个内存节点
}
S22、将SPARC指令架构内存记为SPARC-VMemory;将S1获取的Program Header对应的代码段,写入到SPARC指令架构芯片仿真内存SPARC-VMemory中,并根据代码段的大小,维护整个仿真内存结构。
如果代码段不大于256(一个MemoryPage的大小),创建一个MemoryPage,并将代码段写到对用的MemoryPage数组中去;
如果代码段大于256(一个MemoryPage的大小),创建多个MemoryPage,并将代码段按顺序写到对应的MemoryPage数组中去,并维护各个节点的MemoryPageBeginAddress、MemoryPageEndAddress等信息,保证链表结构信息的正确性。
S3、SPARC指令架构寄存器仿真
S31、对SPARC指令架构芯片75个主要寄存器进行仿真,分为8个全局通用寄存器、24个通用读写处理寄存器、32个浮点处理寄存器以及11个特殊寄存器,本发明通过数组SPARC-Register模拟寄存器,通过数组操作模拟寄存器读写操作,实现寄存器的模拟。
主要模拟结果如下:
SPARC-Register{
Unsignedint global[8];//全局寄存器
Unsignedint regw[24];//通用读写寄存器
Unsignedint fpreg[32];//浮点寄存器
Unsignedint y;//浮点乘法、除法寄存器
Unsignedint psr;//状态寄存器
Unsignedint wim;//窗口无效寄存器
Unsignedint tbr;//Trap基地址寄存器
Unsignedint pc;//程序计数寄存器
Unsignedint npc;//下一个程序计数寄存器
Unsignedint cpsr;//协处理器状态寄存器
Unsignedint fpsr;//浮点处理器状态寄存器
Unsignedint ncwp;//当前窗口寄存器
Unsignedint trap;//异常寄存器
Unsignedint trap_impl;//中断处理异常寄存器
}
S32、通过访问SPARC-Register,对相应的数组中的元素进行操作模拟SPARC指令架构的寄存器操作,实现对SPARC指令架构的寄存器仿真。
S4、SPARC指令架构指令描述
S41、SPARC指令架构共计包括130条指令,其中整型指令97条,浮点指令33条,每条指令有一个唯一的表示,每条指令分为不同的段;为准确描述指令结构,本发明采用将指令分段的方式进行描述,获取指令Instruction的操作码opcode信息,并设计指令操作码信息数组SPARC-InstructionDesp的结构包括:name、contentNumber和content。描述结构如下:
SPARC-InstructionDesp{
Const char*name;
Int contentNumber;
Int content[21]
}
其中,name是指令名称,contentNumber指令分段数量,content用于存储opcode指令译码信息。
以STB指令为例,对指令结构进行描述,其中STB指令信息如图2所示(来自指令集参考手册)。
Name为“STB”;该指令opcode(指令中固定不变的bit位)分为两段,第一段为bit18-bit24位,contentNumber为“1”;content[21]存储opcode信息,content[21]为“18、24、0x05”。三个数字表示一个段,(18、24、0x05)表示bit18-bit24位,值为0x05。
S42、构建指令操作码信息数组SPARC-InstructionDesp[130],对SPARC指令集架构的130条指令进行描述,并存储到指令操作码信息数组SPARC-InstructionDesp[130]中。
S5、SPARC指令架构读取指令
S51、根据程序计数器PC(Program Count)的值,从S2维护的SPARC-VMemory中读取指令;
S52、根据SPARC-MemoryPage中的MemoryPageBeginAddress、MemoryPageEndAddress的值,计算出PC属于SPARC-MemoryPage,记为SPARC-MemoryPage-i,地址偏移为PC-MemoryPageBeginAddress,指令内容为SPARC-MemoryPage-i对应的MemoryPage[PC-MemoryPageBeginAddress],记为PC-Instruction。
S6、SPARC指令架构指令译码
S61、根据S5读取的PC-Instruction,逐个计算PC-Instruction与SPARC-InstructionDesp[130]的对应bit位是否相同,若PC-Instruction与SPARC-InstructionDesp[130]中第k个指令描述对应的位置相同,则该指令记为Instruction_k。
S7、SPARC指令架构指令翻译
S71、对SPARC指令架构指令集中的指令进行功能翻译,并设计在虚拟仿真处理器运行的对每条指令进行操作模拟的函数,保证每一条指令和函数处理后,硬件处理器和虚拟仿真处理器的内存、寄存器保持一致;
S72:翻译SPARC指令架构的130条指令,并将函数指针存储到指令翻译译码数组SPARC-InstructionInterp[130]数组中,存储顺序与SPARC-InstructionDesp[130]的指令顺序保持一致;
S73、根据S6计算出的Instruction_k,可获得该指令对应的函数中指针;
S8、SPARC指令架构Linux系统调用实现
S81、定义Linux系统318种系统调用,并对系统调用的名称按照Linux系统调用的顺序进行标号,定义如下:
#define SYSCALL_restart_system 0
……
#define SYSCALL_dup2 63
……
#define SYSCALL_inotify_init1 318
S82、解析系统调用,并根据系统调用的类型,对系统调用进行相应的处理,并对相应的寄存器进行置位操作。
S9、SPARC指令架构指令执行
S91、构建SPARC指令架构的仿真框架,根据指令数量,进行循环取指、译码、指令翻译,并根据函数指针,执行指令操作;
S92、连续仿真,直到完成所有指令执行,并处理系统调用,实现针对SPARC指令架构的处理器指令集仿真。
本发明提出的方案,能够实现SPARC指令架构处理器的指令集仿真,仿真精度高;本发明采用数组、链表等实现寄存器、内存的仿真,能够完成仿真SPARC指令架构处理器。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。
Claims (10)
1.一种通用的SPARC处理器指令集虚拟化仿真方法,其特征在于,该方法包括如下步骤:
S1、SPARC指令架构目标文件解析
打开SPARC指令架构编译后的可执行文件*.exe,获取Program Header对应的代码段;
S2、SPARC指令架构内存仿真及代码加载
采用链表结构对SPARC指令架构处理器内存进行仿真,记为SPARC-VMemory,并加载Program Header对应的代码段,模拟SPARC指令架构的内存读写操作;
S3、SPARC指令架构寄存器仿真
通过数组模拟寄存器,通过数组操作模拟寄存器读写操作,实现寄存器的模拟;
S4、SPARC指令架构指令描述
每条指令有一个唯一的表示,每条指令分为不同的段;采用将指令分段的方式进行描述,获取指令Instruction的操作码opcode信息,构建指令操作码信息数组SPARC-InstructionDesp[130],对SPARC架构指令集架构的130条指令进行描述,并存储到指令操作码信息数组SPARC-InstructionDesp[130]中;
S5、SPARC指令架构读取指令
根据程序计数器PC的值,从仿真内存SPARC-VMemory中读取指令,获取当前PC对应的指令PC-Instruction;
S6、SPARC指令架构指令译码
根据SPARC指令架构指令描述,逐个计算PC-Instruction与SPARC-InstructionDesp[130]的对应bit位是否相同,若PC-Instruction与SPARC-InstructionDesp[130]中第k个指令描述对应的位置相同,则完成指令译码,记为Instruction_k;
S7、SPARC指令架构指令翻译
对SPARC指令架构指令集进行功能翻译,设计在虚拟仿真处理器运行的对每条指令进行操作模拟的函数,保证每一条指令和函数处理后,硬件处理器和虚拟仿真处理器的内存、寄存器保持一致;并将函数指针存储到SPARC-InstructionInterp[130]数组中,存储顺序与SPARC-InstructionDesp[130]的指令顺序保持一致;
S8、SPARC指令架构Linux系统调用实现
解析系统调用,并根据系统调用的类型,对系统调用进行相应的处理,并对相应的寄存器进行置位操作;
S9、SPARC指令架构指令执行
根据指令数量,进行循环取指、译码、指令翻译,并根据函数指针,执行指令操作;连续仿真,直到完成所有指令执行,实现针对SPARC指令架构的处理器指令集仿真。
2.如权利要求1所述的通用的SPARC处理器指令集虚拟化仿真方法,其特征在于,所述步骤S1具体包括:
S11、打开SPARC指令架构编译后的可执行文件*.exe,读取文件信息;
S12、按照SPARC指令架构编译后的可执行文件的格式,读取文件信息中File Header、Section Header、Program Header信息,获取Program Header对应的代码段。
3.如权利要求2所述的通用的SPARC处理器指令集虚拟化仿真方法,其特征在于,所述步骤S2具体包括:
S21、采用链表结构对SPARC指令架构处理器内存进行仿真,其中链表结构体SPARC-MemoryPage大小为256个字;
S22、将SPARC指令架构内存记为SPARC-VMemory;将S1获取的Program Header对应的代码段,写入到SPARC指令架构芯片仿真内存SPARC-VMemory中,并根据代码段的大小,维护整个仿真内存结构。
4.如权利要求3所述的通用的SPARC处理器指令集虚拟化仿真方法,其特征在于,链表结构体包括:起始虚拟地址MemoryPageBeginAddress、结束虚拟地址MemoryPageEndAddress、内存块MemoryPage、下一个内存节点指针NEXT和前一个内存节点指针PRE。
5.如权利要求3所述的通用的SPARC处理器指令集虚拟化仿真方法,其特征在于,如果代码段不大于256,创建一个MemoryPage,并将代码段写到对用的MemoryPage数组中去;如果代码段大于256,创建多个MemoryPage,并将代码段按顺序写到对应的MemoryPage数组中去,并维护各个节点的MemoryPageBeginAddress、MemoryPageEndAddress信息,保证链表结构信息的正确性。
6.如权利要求3-5任一项所述的通用的SPARC处理器指令集虚拟化仿真方法,其特征在于,所述步骤S3具体包括:
S31、对SPARC指令架构芯片75个主要寄存器进行仿真,分为8个全局通用寄存器、24个通用读写处理寄存器、32个浮点处理寄存器以及11个特殊寄存器,通过数组SPARC-Register模拟寄存器,实现寄存器的模拟;
S32、通过访问SPARC-Register,对相应的数组中的元素进行操作模拟SPARC指令架构的寄存器操作,实现对SPARC指令架构的寄存器仿真。
7.如权利要求6所述的通用的SPARC处理器指令集虚拟化仿真方法,其特征在于,所述步骤S4具体包括:
S41、SPARC指令架构共计包括130条指令,其中整型指令97条,浮点指令33条,每条指令有一个唯一的表示,每条指令分为不同的段;采用将指令分段的方式进行描述,获取指令Instruction的操作码opcode信息,并设计指令操作码信息数组SPARC-InstructionDesp的结构;
S42、构建指令操作码信息数组SPARC-InstructionDesp[130],对SPARC指令集架构的130条指令进行描述,并存储到指令操作码信息数组SPARC-InstructionDesp[130]中。
8.如权利要求7所述的通用的SPARC处理器指令集虚拟化仿真方法,其特征在于,所述指令操作码信息数组SPARC-InstructionDesp的结构包括:name、contentNumber和content,其中,name是指令名称,contentNumber指令分段数量,content用于存储opcode指令译码信息。
9.如权利要求7或8所述的通用的SPARC处理器指令集虚拟化仿真方法,其特征在于,所述步骤S5具体包括:
S51、根据程序计数器PC的值,从S2维护的SPARC-VMemory中读取指令;
S52、根据SPARC-MemoryPage中的MemoryPageBeginAddress、MemoryPageEndAddress的值,计算出PC属于SPARC-MemoryPage,记为SPARC-MemoryPage-i,地址偏移为PC-MemoryPageBeginAddress,指令内容为SPARC-MemoryPage-i对应的MemoryPage[PC-MemoryPageBeginAddress],记为PC-Instruction。
10.如权利要求9所述的通用的SPARC处理器指令集虚拟化仿真方法,其特征在于,所述步骤S7具体包括:
S71、对SPARC指令架构指令集中的指令进行功能翻译,并设计在虚拟仿真处理器运行的对每条指令进行操作模拟的函数,保证每一条指令和函数处理后,硬件处理器和虚拟仿真处理器的内存、寄存器保持一致;
S72:翻译SPARC指令架构的130条指令,并将函数指针存储到指令翻译译码数组SPARC-InstructionInterp[130]数组中,存储顺序与SPARC-Instruct ionDesp[130]的指令顺序保持一致;
S73、根据S6计算出的Instruction_k,获得该指令对应的函数中指针。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211114538.6A CN115421860B (zh) | 2022-09-14 | 2022-09-14 | 一种通用的sparc处理器指令集虚拟化仿真方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211114538.6A CN115421860B (zh) | 2022-09-14 | 2022-09-14 | 一种通用的sparc处理器指令集虚拟化仿真方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115421860A CN115421860A (zh) | 2022-12-02 |
CN115421860B true CN115421860B (zh) | 2023-10-20 |
Family
ID=84202221
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211114538.6A Active CN115421860B (zh) | 2022-09-14 | 2022-09-14 | 一种通用的sparc处理器指令集虚拟化仿真方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115421860B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7506321B1 (en) * | 2002-06-11 | 2009-03-17 | Unisys Corporation | Computer emulator employing direct execution of compiled functions |
CN105701298A (zh) * | 2016-01-15 | 2016-06-22 | 天津大学 | 基于PowerPC SoC架构的仿真平台设计方法 |
-
2022
- 2022-09-14 CN CN202211114538.6A patent/CN115421860B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7506321B1 (en) * | 2002-06-11 | 2009-03-17 | Unisys Corporation | Computer emulator employing direct execution of compiled functions |
CN105701298A (zh) * | 2016-01-15 | 2016-06-22 | 天津大学 | 基于PowerPC SoC架构的仿真平台设计方法 |
Also Published As
Publication number | Publication date |
---|---|
CN115421860A (zh) | 2022-12-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7712092B2 (en) | Binary translation using peephole translation rules | |
US6009261A (en) | Preprocessing of stored target routines for emulating incompatible instructions on a target processor | |
US6496922B1 (en) | Method and apparatus for multiplatform stateless instruction set architecture (ISA) using ISA tags on-the-fly instruction translation | |
US11803387B2 (en) | System for executing new instructions and method for executing new instructions | |
US10459707B2 (en) | Instruction-set simulator and its simulator generation method | |
US20030149963A1 (en) | Condition code flag emulation for program code conversion | |
US20140136179A1 (en) | Page Mapped Spatially Aware Emulation of Computer Instruction Set | |
CN104335168A (zh) | 分支预测预加载 | |
US20060195680A1 (en) | Computer instruction value field having an embedded sign | |
CN115421861B (zh) | 一种通用的TMS320C55x处理器指令集虚拟化仿真方法 | |
CN115480871B (zh) | 一种通用的tms320c3x处理器指令集虚拟化仿真方法 | |
US7219337B2 (en) | Direct instructions rendering emulation computer technique | |
CN115421860B (zh) | 一种通用的sparc处理器指令集虚拟化仿真方法 | |
US20040064267A1 (en) | Method and apparatus for testing microarchitectural features by using tests written in microcode | |
CN115421863B (zh) | 一种通用的mips64处理器指令集虚拟化仿真方法 | |
CN115421864B (zh) | 一种通用的PowerPC架构处理器指令集虚拟化仿真方法 | |
CN115480872B (zh) | 一种dsp c2812处理器指令集虚拟化仿真方法 | |
CN110709823A (zh) | 使用jit编译器并绕过所选择目标代码块的转译的目标系统的仿真 | |
CN115421865B (zh) | 一种dsp c6713处理器指令集虚拟化仿真方法 | |
JP3324542B2 (ja) | 仮想マシン | |
Poplawski | The unlimited resource machine (URM) | |
US20040098708A1 (en) | Simulator for software development and recording medium having simulation program recorded therein | |
Wright | Using EventB to create a virtual machine instruction set architecture | |
CN112905233B (zh) | 一种基于Linux内核的嵌入式固件的外设移植方法 | |
CN115421862B (zh) | 一种51单片机处理器指令集虚拟化仿真方法 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |