CN115421863B - 一种通用的mips64处理器指令集虚拟化仿真方法 - Google Patents

一种通用的mips64处理器指令集虚拟化仿真方法 Download PDF

Info

Publication number
CN115421863B
CN115421863B CN202211114547.5A CN202211114547A CN115421863B CN 115421863 B CN115421863 B CN 115421863B CN 202211114547 A CN202211114547 A CN 202211114547A CN 115421863 B CN115421863 B CN 115421863B
Authority
CN
China
Prior art keywords
instruction
mips
simulation
architecture
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
Application number
CN202211114547.5A
Other languages
English (en)
Other versions
CN115421863A (zh
Inventor
勉斌
贾张涛
冯大成
邵飒
付修锋
安顺
耿宏伟
李雅斯
孔祥炳
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Institute of Computer Technology and Applications
Original Assignee
Beijing Institute of Computer Technology and Applications
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Institute of Computer Technology and Applications filed Critical Beijing Institute of Computer Technology and Applications
Priority to CN202211114547.5A priority Critical patent/CN115421863B/zh
Publication of CN115421863A publication Critical patent/CN115421863A/zh
Application granted granted Critical
Publication of CN115421863B publication Critical patent/CN115421863B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy 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

本发明涉及一种通用的MIPS64处理器指令集虚拟化仿真方法,属于虚拟仿真领域。本发明能够实现MIPS指令架构处理器的指令集仿真,仿真精度高;本发明采用数组、链表等实现寄存器、内存的仿真,能够完成仿真MIPS指令架构处理器。本发明通过对364条指令集的仿真,提供MIPS处理器嵌入式处理器软件的运行环境,为MIPS处理器嵌入式处理器软件的开发提供支撑。

Description

一种通用的MIPS64处理器指令集虚拟化仿真方法
技术领域
本发明属于虚拟仿真领域,具体涉及一种通用的MIPS64处理器指令集虚拟化仿真方法。
背景技术
指令集仿真是处理器虚拟化技术最重要的支撑技术,指令集仿真允许特定指令集上的软件运行在另一类异构的指令集上。在指令集层次上实现虚拟化,实际上就是将某个硬件平台上的二进制代码转换为另一个硬件平台上的二进制代码,从而实现不同指令集间的兼容,这一技术也被称为二进制翻译。虚拟化技术实现有2种主要方式:解释执行、动态二进制翻译。
如图1所示,解释器对源二进制代码逐条进行分析,根据译码结果即指令类型,分解相应的解释例程执行。解释例程在一个由软件维护的源体系结构(包括各种结构寄存器、内存状态等)上用等价的一条或多条目标指令来模拟源指令的执行,获得和源指令同样的执行效果。解释器工作过程主要包括“取指令—>分析指令—>完成指令所需的操作—>修改处理器状态”等步骤,如此循环。
基于解释执行的仿真器在主机中维护一个精确的处理器数据结构,具有很高的仿真精度,可以实现精确的寄存器、存储器、流水线,除了模拟源程序的功能外,可以得到精确的性能指标,如每条指令在流水线中的时钟周期,堆栈模拟等。
发明内容
(一)要解决的技术问题
本发明要解决的技术问题是如何提供一种通用的MIPS64处理器指令集虚拟化仿真方法,以解决3A-1000、3A-1500等处理器的虚拟化仿真问题。
(二)技术方案
为了解决上述技术问题,本发明提出一种通用的MIPS64处理器指令集虚拟化仿真方法,该方法包括如下步骤:
S1、MIPS指令架构目标文件解析
打开MIPS指令架构编译后的可执行文件*.exe,获取Program Header对应的代码段;
S2、MIPS指令架构处理器内存仿真及代码加载
采用链表结构对MIPS指令架构处理器内存进行仿真,记为MIPS-VMemory,并加载Program Header对应的代码段,模拟MIPS指令架构的内存读写操作;
S3、MIPS指令架构寄存器仿真
通过数组模拟寄存器,通过数组操作模拟寄存器读写操作,实现寄存器的模拟;
S4、MIPS指令架构指令描述
每条指令有一个唯一的表示,每条指令分为不同的段;采用将指令分段的方式进行描述,获取指令Instruction的操作码opcode信息,构建指令操作码信息数组MIPS-InstructionDesp[364],将MIPS64指令集架构的364条指令进行描述,并存储到指令操作码信息数组MIPS-InstructionDesp[364]中;
S5、MIPS指令架构读取指令
根据程序计数器PC(Program Count)的值,从仿真内存MIPS-VMemory中读取指令,获取当前PC对应的指令PC-Instruction;
S6、MIPS指令架构指令译码
根据MIPS指令架构指令描述,逐个计算指令PC-Instruction的操作码与MIPS-InstructionDesp[364]的对应bit位是否相同,若PC-Instruction与MIPS-InstructionDesp[364]中第k个指令描述对应的位置相同,则完成指令译码,记为Instruction_k;
S7、MIPS指令架构指令翻译
对MIPS指令架构指令集进行功能翻译,设计在虚拟仿真处理器运行的对每条指令进行操作模拟的函数,保证每一条指令和函数处理后,硬件处理器和虚拟仿真处理器的内存、寄存器保持一致;并将函数指针存储到指令翻译译码数组MIPS-InstructionInterp[364]中,存储顺序与指令操作码信息数组MIPS-InstructionDesp[364]顺序保持一致;
S8、MIPS指令架构Linux系统调用实现
解析系统调用,并根据系统调用的类型,对系统调用进行相应的处理,并对相应的寄存器进行置位操作;
S9、MIPS指令架构指令执行
根据指令数量,进行循环取指、译码、指令翻译,并根据函数指针,执行指令操作;连续仿真,直到完成所有指令执行,并处理系统调用,实现针对MIPS指令架构的处理器指令集仿真。
进一步地,所述步骤S1具体包括:
S11、打开MIPS指令架构编译后的可执行文件*.exe,读取文件信息;
S12、按照MIPS指令架构编译后的可执行文件的格式,MIPS处理器文件格式为ELF,读取File Header、Section Header、Program Header信息,获取Program Header对应的代码段。
进一步地,所述步骤S2具体包括:
S21、采用链表结构对MIPS指令架构处理器内存进行仿真,其中链表结构体MIPS-MemoryPage大小为256个字,链表结构体包括:起始虚拟地址MemoryPageBeginAddress、结束虚拟地址MemoryPageEndAddress、内存块MemoryPage、下一个内存节点指针NEXT和前一个内存节点指针PRE;
S22、将MIPS指令架构仿真内存记为MIPS-VMemory;将S1获取的Program Header对应的代码段,写入到MIPS指令架构仿真内存MIPS-VMemory中,并根据代码段的大小,维护整个仿真内存结构。
进一步地,所述步骤S22具体包括:
如果代码段不大于256,创建一个MIPS-MemoryPage,并将代码段写到MIPS-MemoryPage中去;
如果代码段大于256,创建多个MIPS-MemoryPage组成链表结构,,并将代码段按顺序写到对应的MIPS-MemoryPage中去,并维护各个MIPS-MemoryPage的MemoryPageBeginAddress、MemoryPageEndAddress信息,保证链表结构信息的正确性。
进一步地,所述步骤S3具体包括:
S31、MIPS指令架构芯片包括142个寄存器,分为32个GPR通用寄存器、32个FPR浮点处理寄存器、32个CP0寄存器、32个SR寄存器和14个Cause寄存器,通过数组MIPS-Register模拟寄存器,通过数组操作模拟寄存器读写操作,实现寄存器的模拟;
S32、通过访问MIPS-Register,对相应的数组中的元素进行操作模拟MIPS指令架构的寄存器操作,实现对MIPS指令架构的寄存器仿真。
进一步地,所述步骤S4具体包括:
S41、MIPS指令架构共计包括364条指令,每条指令有一个唯一的表示,每条指令分为不同的段;采用将指令分段的方式进行描述,获取指令Instruction的操作码opcode信息,并设计指令操作码信息数组MIPS-InstructionDesp的结构包括:name、contentNumber和content;其中,name是指令名称,contentNumber指令分段数量,content存储的是opcode指令译码信息;
S42、构建指令操作码信息数组MIPS-InstructionDesp[364],将MIPS64指令集架构的364条指令进行描述,并存储到指令操作码信息数组MIPS-InstructionDesp[364]中。
进一步地,所述步骤S5具体包括:
S51、根据程序计数器PC(Program Count)的值,从S2维护的MIPS-VMemory中读取指令;
S52、根据MIPS-MemoryPage中的MemoryPageBeginAddress、MemoryPageEndAddress的值,计算出PC属于MIPS-MemoryPage,记为MIPS-MemoryPage-i,地址偏移为PC-MemoryPageBeginAddress,指令内容为MIPS-MemoryPage-i对应的MemoryPage[PC-MemoryPageBeginAddress],记为PC-Instruction。
进一步地,所述步骤S7具体包括:
S71、对MIPS指令架构指令集中的364条指令进行功能翻译,设计在虚拟仿真处理器运行的对每条指令进行操作模拟的函数,保证每一条指令和函数处理后,硬件处理器和虚拟仿真处理器的内存、寄存器保持一致;
S72、翻译MIPS指令架构的364条指令,并将函数指针存储到指令翻译译码数组MIPS-InstructionInterp[364]数组中,存储顺序与MIPS-InstructionDesp[364]的指令顺序保持一致;
S73、根据S6计算出的Instruction_k,获得该指令对应的函数中指针。
进一步地,所述步骤S8具体包括:
S81、定义Linux系统318种系统调用,并对系统调用的名称按照Linux系统调用的顺序进行标号;
S82、解析系统调用,并根据系统调用的类型,对系统调用进行相应的处理,并对相应的寄存器进行置位操作。
进一步地,所述步骤S9具体包括:
S91、构建MIPS指令架构的仿真框架,根据指令数量,进行循环取指、译码、指令翻译,并根据函数指针,执行指令操作;
S92、连续仿真,直到完成所有指令执行,并处理系统调用,实现针对MIPS指令架构的处理器指令集仿真。
(三)有益效果
本发明提出一种通用的MIPS64处理器指令集虚拟化仿真方法,能够实现MIPS指令架构处理器的指令集仿真,仿真精度高;本发明采用数组、链表等实现寄存器、内存的仿真,能够完成仿真MIPS指令架构处理器。本发明通过对364条指令集的仿真,提供MIPS处理器嵌入式处理器软件的运行环境,为MIPS处理器嵌入式处理器软件的开发提供支撑。
附图说明
图1为解释执行技术原理图;
图2为ABS指令信息图。
具体实施方式
为使本发明的目的、内容和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
为嵌入式处理软件提供虚拟化的运行环境,本发明提出一种基于解释执行的MIPS指令架构处理器虚拟化仿真技术方案,主要包含龙芯3A-1000、3A-1500等国产化处理器,解决3A-1000、3A-1500等处理器的虚拟化仿真问题。MIPS指令架构共计包含364条指令集,通过对364条指令集的仿真,提供MIPS处理器嵌入式处理器软件的运行环境,为MIPS处理器嵌入式处理器软件的开发提供支撑。
本发明的方法包括如下步骤:
S1、MIPS指令架构目标文件解析
打开MIPS指令架构编译后的可执行文件*.exe,获取Program Header对应的代码段;
S2、MIPS指令架构处理器内存仿真及代码加载
为提高内存仿真的可扩展性,采用链表结构对MIPS指令架构处理器内存进行仿真,记为MIPS-VMemory,并加载Program Header对应的代码段,模拟MIPS指令架构的内存读写操作。
S3、MIPS指令架构寄存器仿真
对MIPS指令架构的142个主要寄存器进行仿真,分为32个GPR通用寄存器、32个FPR浮点处理寄存器、32个CP0寄存器、32个SR寄存器,14个Cause寄存器,本发明通过数组模拟寄存器,通过数组操作模拟寄存器读写操作,实现寄存器的模拟。
S4、MIPS指令架构指令描述
每条指令有一个唯一的表示,每条指令分为不同的段;为准确描述指令结构,本发明采用将指令分段的方式进行描述,获取指令Instruction的操作码opcode信息,构建指令操作码信息数组MIPS-InstructionDesp[364],将MIPS64指令集架构的364条指令进行描述,并存储到指令操作码信息数组MIPS-InstructionDesp[364]中。
S5、MIPS指令架构读取指令
根据程序计数器PC(Program Count)的值,从仿真内存MIPS-VMemory中读取指令,获取当前PC对应的指令PC-Instruction;
S6、MIPS指令架构指令译码
根据MIPS指令架构指令描述,逐个计算指令PC-Instruction的操作码与MIPS-InstructionDesp[364]的对应bit位是否相同,若PC-Instruction与MIPS-InstructionDesp[364]中第k个指令描述对应的位置相同,则完成指令译码,记为Instruction_k。
S7、MIPS指令架构指令翻译
对MIPS指令架构指令集进行功能翻译,设计在虚拟仿真处理器运行的对每条指令进行操作模拟的函数,保证每一条指令和函数处理后,硬件处理器和虚拟仿真处理器的内存、寄存器保持一致;并将函数指针存储到指令翻译译码数组MIPS-InstructionInterp[364]中,存储顺序与指令操作码信息数组MIPS-InstructionDesp[364]顺序保持一致;
S8、MIPS指令架构Linux系统调用实现
解析系统调用,并根据系统调用的类型,对系统调用进行相应的处理,并对相应的寄存器进行置位操作;
S9、MIPS指令架构指令执行
根据指令数量,进行循环取指、译码、指令翻译,并根据函数指针,执行指令操作;连续仿真,直到完成所有指令执行,并处理系统调用,实现针对MIPS指令架构的处理器指令集仿真。
实施例1:
S1、MIPS指令架构目标文件解析
S11、打开MIPS指令架构编译后的可执行文件*.exe,读取文件信息;
S12、按照MIPS指令架构编译后的可执行文件的格式,MIPS处理器文件格式为ELF,读取File Header、Section Header、Program Header等信息,获取Program Header对应的代码段;
S2、MIPS指令架构内存仿真及代码加载
S21、为提高内存仿真的可扩展性,采用链表结构对MIPS指令架构处理器内存进行仿真,其中链表结构体MIPS-MemoryPage大小为256个字(word),链表结构体包括:起始虚拟地址MemoryPageBeginAddress、结束虚拟地址MemoryPageEndAddress、内存块MemoryPage、下一个内存节点指针NEXT和前一个内存节点指针PRE;
链表结构体如下:
MIPS-MemoryPage{
Unsigned int MemoryPageBeginAddress;//起始虚拟地址
Unsigned int MemoryPageEndAddress;//结束虚拟地址
MemoryPage[256];//内存块
MIPS-MemoryPage NEXT;//指向下一个内存节点
MIPS-MemoryPage PRE;//指向前一个内存节点
}
S22、将MIPS指令架构仿真内存记为MIPS-VMemory;将S1获取的Program Header对应的代码段,写入到MIPS指令架构仿真内存MIPS-VMemory中,并根据代码段的大小,维护整个仿真内存结构;
如果代码段不大于256(一个MemoryPage的大小),创建一个MIPS-MemoryPage,并将代码段写到MIPS-MemoryPage中去;
如果代码段大于256(一个MemoryPage的大小),创建多个MIPS-MemoryPage组成链表结构,,并将代码段按顺序写到对应的MIPS-MemoryPage中去,并维护各个MIPS-MemoryPage的MemoryPageBeginAddress、MemoryPageEndAddress等信息,保证链表结构信息的正确性;
S3、MIPS指令架构寄存器仿真
S31、MIPS指令架构芯片包括142个主要寄存器,分为32个GPR通用寄存器、32个FPR浮点处理寄存器、32个CP0寄存器、32个SR寄存器和14个Cause寄存器,本发明通过数组MIPS-Register模拟寄存器,通过数组操作模拟寄存器读写操作,实现寄存器的模拟,主要模拟结果如下:
MIPS-Register{
Unsigned int GPR[32];//32个通用寄存器
Unsigned int FPR[32];//32个浮点处理寄存器
Unsigned int CP0[32];//32个CP0寄存器
Unsigned int PC;
Unsigned int SR_IEC;//SR寄存器
Unsigned int SR_KUC;//SR寄存器
Unsigned int SR_IEP;//SR寄存器
Unsigned int SR_KUP;//SR寄存器
Unsigned int SR_IU0;//SR寄存器
Unsigned int SR_KU0;//SR寄存器
Unsigned int SR_IM[8];//SR IM0-IM7寄存器
Unsigned int SR_IM_FIRST;//SR寄存器
Unsigned int SR_IM_LAST;//SR寄存器
Unsigned int SR_ISC;//SR寄存器
Unsigned int SR_SWC;//SR寄存器
Unsigned int SR_PZ;//SR寄存器
Unsigned int SR_CM;//SR寄存器
Unsigned int SR_PE;//SR寄存器
Unsigned int SR_TS;//SR寄存器
Unsigned int SR_BEV;//SR寄存器
Unsigned int SR_DS_FIRST;//SR寄存器
Unsigned int SR_DS_LAST;//SR寄存器
Unsigned int SR_CU[4];//SR CU0–CU3寄存器
Unsigned int SR_CU_FIRST;//SR寄存器
Unsigned int SR_CU_LAST;//SR寄存器
Unsigned int CAUSE_ExcCode_FIRST;//Cause寄存器
Unsigned int CAUSE_ExcCode_LAST;//Cause寄存器
Unsigned int CAUSE_IP[8];//Cause IP0–IP7寄存器
Unsigned int CAUSE_FIRST;//Cause寄存器
Unsigned int CAUSE_LAST;//Cause寄存器
Unsigned int CAUSE_CE_FIRST;//Cause寄存器
Unsigned int CAUSE_CE_LAST;//Cause寄存器
Unsigned int CAUSE_TI;//Cause寄存器
Unsigned int CAUSE_BD;//Cause寄存器
}
S32、通过访问MIPS-Register,对相应的数组中的元素进行操作模拟MIPS指令架构的寄存器操作,实现对MIPS指令架构的寄存器仿真。
S4、MIPS指令架构指令描述
S41、MIPS指令架构共计包括364条指令,每条指令有一个唯一的表示,每条指令分为不同的段;为准确描述指令结构,本发明采用将指令分段的方式进行描述,获取指令Instruction的操作码opcode信息,并设计指令操作码信息数组MIPS-InstructionDesp的结构包括:name、contentNumber和content。描述结构如下:
MIPS-InstructionDesp{
Const char*name;
Int contentNumber;
Int content[21]
}
其中,name是指令名称,contentNumber指令分段数量,content存储的是opcode指令译码信息。
以ABS指令为例,对指令结构进行描述,其中ABS指令信息如图2所示(来自指令集参考手册)。
Name为“ABS.fmt”;该指令opcode(指令中固定不变的bit位)分为两段,第一段为bit0-bit5位,第二段为bit16-bit20位,第三段为bit26-bit31位,contentNumber为“3”;content[21]存储opcode信息,content[21]为“0、5、0x05、16、20、0x0、26、31、0x11”。三个数字表示一个段,(2、11、0x05)表示bit0-bit5位,值为0x05;(16、20、0x04)表示bit16-bit20位,值为0x0;(26、31、0x04)表示bit20-bit31位,值为0x11。
S42、构建指令操作码信息数组MIPS-InstructionDesp[364],将MIPS64指令集架构的364条指令进行描述,并存储到指令操作码信息数组MIPS-InstructionDesp[364]中。
S5、MIPS指令架构读取指令
S51、根据程序计数器PC(Program Count)的值,从S2维护的MIPS-VMemory中读取指令;
S52、根据MIPS-MemoryPage中的MemoryPageBeginAddress、MemoryPageEndAddress的值,计算出PC属于MIPS-MemoryPage,记为MIPS-MemoryPage-i,地址偏移为PC-MemoryPageBeginAddress,指令内容为MIPS-MemoryPage-i对应的MemoryPage[PC-MemoryPageBeginAddress],记为PC-Instruction。
S6、MIPS指令架构指令译码
S61、根据S5读取的PC-Instruction,逐个计算PC-Instruction与MIPS-InstructionDesp[364]的对应bit位是否相同,若PC-Instruction与MIPS-InstructionDesp[364]中第k个指令描述对应的位置相同,则该指令记为Instruction_k。
S7、MIPS指令架构指令翻译
S71、对MIPS指令架构指令集中的364条指令进行功能翻译,并设计在虚拟仿真处理器运行的对每条指令进行操作模拟的函数,保证每一条指令和函数处理后,硬件处理器和虚拟仿真处理器的内存、寄存器保持一致;
S72:翻译MIPS指令架构的364条指令,并将函数指针存储到指令翻译译码数组MIPS-InstructionInterp[364]数组中,存储顺序与MIPS-InstructionDesp[364]的指令顺序保持一致;
S73、根据S6计算出的Instruction_k,可获得该指令对应的函数中指针;
S8、MIPS指令架构Linux系统调用实现
S81、定义Linux系统318种系统调用,并对系统调用的名称按照Linux系统调用的顺序进行标号,定义如下:
#define SYSCALL_restart_system      0
……
#define SYSCALL_dup2              63
……
#define SYSCALL_inotify_init1        318
S82、解析系统调用,并根据系统调用的类型,对系统调用进行相应的处理,并对相应的寄存器进行置位操作。
S9、MIPS指令架构指令执行
S91、构建MIPS指令架构的仿真框架,根据指令数量,进行循环取指、译码、指令翻译,并根据函数指针,执行指令操作;
S92、连续仿真,直到完成所有指令执行,并处理系统调用,实现针对MIPS指令架构的处理器指令集仿真。
本发明提出的方案,能够实现MIPS指令架构处理器的指令集仿真,仿真精度高;本发明采用数组、链表等实现寄存器、内存的仿真,能够完成仿真MIPS指令架构处理器。本发明通过对364条指令集的仿真,提供MIPS处理器嵌入式处理器软件的运行环境,为MIPS处理器嵌入式处理器软件的开发提供支撑。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。

Claims (10)

1.一种通用的MIPS64处理器指令集虚拟化仿真方法,其特征在于,该方法包括如下步骤:
S1、MIPS指令架构目标文件解析
打开MIPS指令架构编译后的可执行文件*.exe,获取Program Header对应的代码段;
S2、MIPS指令架构处理器内存仿真及代码加载
采用链表结构对MIPS指令架构处理器内存进行仿真,记为MIPS-VMemory,并加载Program Header对应的代码段,模拟MIPS指令架构的内存读写操作;
S3、MIPS指令架构寄存器仿真
通过数组模拟寄存器,通过数组操作模拟寄存器读写操作,实现寄存器的模拟;
S4、MIPS指令架构指令描述
每条指令有一个唯一的表示,每条指令分为不同的段;采用将指令分段的方式进行描述,获取指令Instruction的操作码opcode信息,构建指令操作码信息数组MIPS-InstructionDesp[364],将MIPS64指令集架构的364条指令进行描述,并存储到指令操作码信息数组MIPS-InstructionDesp[364]中;
S5、MIPS指令架构读取指令
根据程序计数器PC(Program Count)的值,从仿真内存MIPS-VMemory中读取指令,获取当前PC对应的指令PC-Instruction;
S6、MIPS指令架构指令译码
根据MIPS指令架构指令描述,逐个计算指令PC-Instruction的操作码与MIPS-InstructionDesp[364]的对应bit位是否相同,若PC-Instruction与MIPS-InstructionDesp[364]中第k个指令描述对应的位置相同,则完成指令译码,记为Instruction_k;
S7、MIPS指令架构指令翻译
对MIPS指令架构指令集进行功能翻译,设计在虚拟仿真处理器运行的对每条指令进行操作模拟的函数,保证每一条指令和函数处理后,硬件处理器和虚拟仿真处理器的内存、寄存器保持一致;并将函数指针存储到指令翻译译码数组MIPS-InstructionInterp[364]中,存储顺序与指令操作码信息数组MIPS-InstructionDesp[364]顺序保持一致;
S8、MIPS指令架构Linux系统调用实现
解析系统调用,并根据系统调用的类型,对系统调用进行相应的处理,并对相应的寄存器进行置位操作;
S9、MIPS指令架构指令执行
根据指令数量,进行循环取指、译码、指令翻译,并根据函数指针,执行指令操作;连续仿真,直到完成所有指令执行,并处理系统调用,实现针对MIPS指令架构的处理器指令集仿真。
2.如权利要求1所述的通用的MIPS64处理器指令集虚拟化仿真方法,其特征在于,所述步骤S1具体包括:
S11、打开MIPS指令架构编译后的可执行文件*.exe,读取文件信息;
S12、按照MIPS指令架构编译后的可执行文件的格式,MIPS处理器文件格式为ELF,读取File Header、Section Header、Program Header信息,获取Program Header对应的代码段。
3.如权利要求2所述的通用的MIPS64处理器指令集虚拟化仿真方法,其特征在于,所述步骤S2具体包括:
S21、采用链表结构对MIPS指令架构处理器内存进行仿真,其中链表结构体MIPS-MemoryPage大小为256个字,链表结构体包括:起始虚拟地址MemoryPageBeginAddress、结束虚拟地址MemoryPageEndAddress、内存块MemoryPage、下一个内存节点指针NEXT和前一个内存节点指针PRE;
S22、将MIPS指令架构仿真内存记为MIPS-VMemory;将S1获取的Program Header对应的代码段,写入到MIPS指令架构仿真内存MIPS-VMemory中,并根据代码段的大小,维护整个仿真内存结构。
4.如权利要求3所述的通用的MIPS64处理器指令集虚拟化仿真方法,其特征在于,所述步骤S22具体包括:
如果代码段不大于256,创建一个MIPS-MemoryPage,并将代码段写到MIPS-MemoryPage中去;
如果代码段大于256,创建多个MIPS-MemoryPage组成链表结构,并将代码段按顺序写到对应的MIPS-MemoryPage中去,并维护各个MIPS-MemoryPage的MemoryPageBeginAddress、MemoryPageEndAddress信息,保证链表结构信息的正确性。
5.如权利要求3或4所述的通用的MIPS64处理器指令集虚拟化仿真方法,其特征在于,所述步骤S3具体包括:
S31、MIPS指令架构芯片包括142个寄存器,分为32个GPR通用寄存器、32个FPR浮点处理寄存器、32个CP0寄存器、32个SR寄存器和14个Cause寄存器,通过数组MIPS-Register模拟寄存器,通过数组操作模拟寄存器读写操作,实现寄存器的模拟;
S32、通过访问MIPS-Register,对相应的数组中的元素进行操作模拟MIPS指令架构的寄存器操作,实现对MIPS指令架构的寄存器仿真。
6.如权利要求5所述的通用的MIPS64处理器指令集虚拟化仿真方法,其特征在于,所述步骤S4具体包括:
S41、MIPS指令架构共计包括364条指令,每条指令有一个唯一的表示,每条指令分为不同的段;采用将指令分段的方式进行描述,获取指令Instruction的操作码opcode信息,并设计指令操作码信息数组MIPS-InstructionDesp的结构包括:name、contentNumber和content;其中,name是指令名称,contentNumber指令分段数量,content存储的是opcode指令译码信息;
S42、构建指令操作码信息数组MIPS-InstructionDesp[364],将MIPS64指令集架构的364条指令进行描述,并存储到指令操作码信息数组MIPS-InstructionDesp[364]中。
7.如权利要求6所述的通用的MIPS64处理器指令集虚拟化仿真方法,其特征在于,所述步骤S5具体包括:
S51、根据程序计数器PC(Program Count)的值,从S2维护的MIPS-VMemory中读取指令;
S52、根据MIPS-MemoryPage中的MemoryPageBeginAddress、MemoryPageEndAddress的值,计算出PC属于MIPS-MemoryPage,记为MIPS-MemoryPage-i,地址偏移为PC-MemoryPageBeginAddress,指令内容为MIPS-MemoryPage-i对应的MemoryPage[PC-MemoryPageBeginAddress],记为PC-Instruction。
8.如权利要求7所述的通用的MIPS64处理器指令集虚拟化仿真方法,其特征在于,所述步骤S7具体包括:
S71、对MIPS指令架构指令集中的364条指令进行功能翻译,设计在虚拟仿真处理器运行的对每条指令进行操作模拟的函数,保证每一条指令和函数处理后,硬件处理器和虚拟仿真处理器的内存、寄存器保持一致;
S72、翻译MIPS指令架构的364条指令,并将函数指针存储到指令翻译译码数组MIPS-InstructionInterp[364]数组中,存储顺序与MIPS-InstructionDesp[364]的指令顺序保持一致;
S73、根据S6计算出的Instruction_k,获得该指令对应的函数中指针。
9.如权利要求8所述的通用的MIPS64处理器指令集虚拟化仿真方法,其特征在于,所述步骤S8具体包括:
S81、定义Linux系统318种系统调用,并对系统调用的名称按照Linux系统调用的顺序进行标号;
S82、解析系统调用,并根据系统调用的类型,对系统调用进行相应的处理,并对相应的寄存器进行置位操作。
10.如权利要求9所述的通用的MIPS64处理器指令集虚拟化仿真方法,其特征在于,所述步骤S9具体包括:
S91、构建MIPS指令架构的仿真框架,根据指令数量,进行循环取指、译码、指令翻译,并根据函数指针,执行指令操作;
S92、连续仿真,直到完成所有指令执行,并处理系统调用,实现针对MIPS指令架构的处理器指令集仿真。
CN202211114547.5A 2022-09-14 2022-09-14 一种通用的mips64处理器指令集虚拟化仿真方法 Active CN115421863B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211114547.5A CN115421863B (zh) 2022-09-14 2022-09-14 一种通用的mips64处理器指令集虚拟化仿真方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211114547.5A CN115421863B (zh) 2022-09-14 2022-09-14 一种通用的mips64处理器指令集虚拟化仿真方法

Publications (2)

Publication Number Publication Date
CN115421863A CN115421863A (zh) 2022-12-02
CN115421863B true CN115421863B (zh) 2023-04-28

Family

ID=84202326

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211114547.5A Active CN115421863B (zh) 2022-09-14 2022-09-14 一种通用的mips64处理器指令集虚拟化仿真方法

Country Status (1)

Country Link
CN (1) CN115421863B (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008112243A (ja) * 2006-10-30 2008-05-15 Seiko Epson Corp シミュレーションプログラム、並びに、それを生成する装置及び方法及びプログラム
CN105701298A (zh) * 2016-01-15 2016-06-22 天津大学 基于PowerPC SoC架构的仿真平台设计方法
CN107145381A (zh) * 2017-04-05 2017-09-08 同济大学 面向实践教学的mips‑cpu测试工具
WO2018149495A1 (en) * 2017-02-16 2018-08-23 Huawei Technologies Co., Ltd. A method and system to fetch multicore instruction traces from a virtual platform emulator to a performance simulation model
CN113221318A (zh) * 2021-03-30 2021-08-06 北京计算机技术及应用研究所 一种基于dds的系统级仿真测试环境构建方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7043509B2 (en) * 2003-02-19 2006-05-09 Sun Microsystems, Inc. Parallel non-contiguous allocation and card parsing
US20090006717A1 (en) * 2007-06-29 2009-01-01 Michael Rothman Emulation of read-once memories in virtualized systems

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008112243A (ja) * 2006-10-30 2008-05-15 Seiko Epson Corp シミュレーションプログラム、並びに、それを生成する装置及び方法及びプログラム
CN105701298A (zh) * 2016-01-15 2016-06-22 天津大学 基于PowerPC SoC架构的仿真平台设计方法
WO2018149495A1 (en) * 2017-02-16 2018-08-23 Huawei Technologies Co., Ltd. A method and system to fetch multicore instruction traces from a virtual platform emulator to a performance simulation model
CN107145381A (zh) * 2017-04-05 2017-09-08 同济大学 面向实践教学的mips‑cpu测试工具
CN113221318A (zh) * 2021-03-30 2021-08-06 北京计算机技术及应用研究所 一种基于dds的系统级仿真测试环境构建方法

Non-Patent Citations (5)

* Cited by examiner, † Cited by third party
Title
Miodrag Djukic等.An approach to instruction set compiled simulator development based on a target processor C compiler back-end design.《Innovations in Systems and Software Engineering 》.2013,第135-145页. *
刘明.基于64位MIPS嵌入式系统的动态模拟与仿真技术的研究.《中国优秀硕士学位论文全文数据库 信息科技辑》.2011,(第5期),I137-78. *
孙胜杰 ; 苗克坚 ; 曹晓洁 ; .基于PowerPC的软件仿真调试系统的设计与实验.科学技术与工程.2011,第11卷(第31期),第7690-7696页. *
尹娟.MIPS处理器目标代码生成实现和相关优化技术的研究.《中国优秀硕士学位论文全文数据库 信息科技辑》.2015,(第1期),I137-26. *
李曦 ; 仲力 ; 高妍妍 ; .周期精确ASIP仿真器生成环境的研究.计算机仿真.2008,(第05期),第290-293页. *

Also Published As

Publication number Publication date
CN115421863A (zh) 2022-12-02

Similar Documents

Publication Publication Date Title
US7712092B2 (en) Binary translation using peephole translation rules
US6496922B1 (en) Method and apparatus for multiplatform stateless instruction set architecture (ISA) using ISA tags on-the-fly instruction translation
US20030149963A1 (en) Condition code flag emulation for program code conversion
US10459707B2 (en) Instruction-set simulator and its simulator generation method
US20140136179A1 (en) Page Mapped Spatially Aware Emulation of Computer Instruction Set
US20060195680A1 (en) Computer instruction value field having an embedded sign
CN115480871B (zh) 一种通用的tms320c3x处理器指令集虚拟化仿真方法
CN115421861B (zh) 一种通用的TMS320C55x处理器指令集虚拟化仿真方法
CN107589960B (zh) 一种基于寄存器访问冲突检测的dsp指令模拟方法
US6519768B1 (en) Instruction translation method
CN115421863B (zh) 一种通用的mips64处理器指令集虚拟化仿真方法
KR20040079851A (ko) 직접 명령어 렌더링 에뮬레이션 컴퓨터 기술
CN115421860B (zh) 一种通用的sparc处理器指令集虚拟化仿真方法
CN115480872B (zh) 一种dsp c2812处理器指令集虚拟化仿真方法
CN115421865B (zh) 一种dsp c6713处理器指令集虚拟化仿真方法
CN115421864B (zh) 一种通用的PowerPC架构处理器指令集虚拟化仿真方法
Johnson Postloading for fun and profit
JP3324542B2 (ja) 仮想マシン
US20040098708A1 (en) Simulator for software development and recording medium having simulation program recorded therein
CN115421862B (zh) 一种51单片机处理器指令集虚拟化仿真方法
CN116775127B (zh) 一种基于RetroWrite框架的静态符号执行插桩方法
CN112905233B (zh) 一种基于Linux内核的嵌入式固件的外设移植方法
CN117270967A (zh) 基于模型驱动的指令集架构模拟器自动生成方法及装置
Jenke et al. Towards Generic Malware Unpacking: A Comprehensive Study on the Unpacking Behavior of Malicious Run-Time Packers
CN113760236A (zh) 重定位方法、装置、链接器及编译系统

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