一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

扩展MIPS指令集处理器支持RISC指令集多模系统的方法和装置与流程

2022-02-24 18:26:01 来源:中国专利 TAG:

扩展mips指令集处理器支持risc指令集多模系统的方法和装置
【技术领域】
1.本发明涉及一种扩展mips指令集处理器支持risc指令集多模系统的方法和装置。


背景技术:

2.mips架构处理器已经mips架构诞生于1980年代,迄今为止已经有近四十年的技术积累,非常成熟且已经有近百个芯片产品已经获得了广泛的应用。迄今为止已经有超过百亿的出货量。而近几年,许多新兴的基于risc的指令集系统也获得蓬勃的发展,目前的指令集的生态已经呈现多家不同的指令蓬勃发展的态势。然后,一个指令系统的成功需要依赖多种因素,除了基于该指令集系统的cpu需要具有高效的设计之外,生态的发展也是非常关键的一环,而生态的发展需要投入大量的诸如cpu厂家、第三方的开放人员不断的投入大量的时间和资源不断的丰富该指令集的生态和应用。
3.因此在这个背景下,我们开发和设计了在mips指令架构之上,支持多种risc指令集架构的多模系统。该系统可以在mips的处理器之上,支持risc的指令系统。而在整个过程中保持极高的支持效率,同时具有很低的翻译系统的转换复杂度。


技术实现要素:

4.mips是世界上很流行的一种risc处理器。mips的意思“无内部互锁流水级的微处理器”(microprocessor without interlocked piped stages),其机制是尽量利用软件办法避免流水线中的数据相关问题。它最早是在80年代初期由斯坦福(stanford)大学hennessy教授领导的研究小组研制出来的,他是一种简洁、优化方便、具有高度扩展性的risc架构,也是业界最高效的risc架构,能够提供最高的每平方毫米性能和当今soc设计中最低的功耗。mips公司的r系列就是在此基础上开发的risc工业产品的微处理器。这些系列产品为很多计算机公司采用构成各种工作站和计算机系统。
5.mips32架构基于一种固定长度的定期编码指令集,并采用导入/存储(load/store)数据模型。经改进,这种架构可支持高级语言的优化执行。mips32架构是高效能的行业标准架构,是从微型微控制器到高端网络设备的数十亿种电子产品的核心。mips32体系结构合并了重要功能,包括simd(单指令多数据)和虚拟化。这些技术与多线程(mt),dsp扩展和eva(增强型虚拟寻址)等技术相结合,丰富了架构,可与需要更大内存,更大计算能力和安全执行环境的现代软件工作负载一起使用。mips架构完美支持高级语言的优化执行。其算术和逻辑运算采用三个操作数的形式,允许编译器优化复杂的表达式。此外,它还带有32个通用寄存器,让编译器能够通过保持对寄存器内数据的频繁存取进一步优化代码的生成性能。特权模式异常处理和存储器管理功能。它采用一组寄存器来反映缓存器、mmu、tlb及各个内核中实现的其它特权功能的配置。通过对特权模式和存储器管理进行标准化,并经由配置寄存器提供信息,mips32架构能够使实时操作系统、其它开发工具和应用代码同时被执行,并在mips32和mips64处理器系列的各个产品之间复用。
6.mips作为经典的risc cpu,在宏观isa设计上,就涵盖从低端的mcu到服务器级别的处理器的差异化设计。risc精简指令在功耗性能方面上的优势相较cisc冗余指令增加额外面积和功耗,同时增加了指令解码的复杂度。
7.mips授权cpu ip,这些ip会在微架构的设计有针对性的优化,因此较适合在网络处理相关的领域下使用。譬如mips的i-class支持mtk处理器ip。市面上采用mips ip的高端网络交换机其中很多采用多核的方式,在soc内部集成了数十个乃至上百个mips的cpu ip,这些cpu充分利用mips ip的轻量、支持多线程的优势,让相应的线程等待包的数据的到达无需上下文切换而立即处理,从而获得极高的吞吐率。与此同时,仍然可以确保芯片功耗和面积在容许的范围内。因此,mips在网络处理器领域有很深的积累,能随着产品其特色表现的点稍有不同,但仍然展现了其在网络处理器场景下的大的优势。
8.近几年risc也获得蓬勃的发展。risc-v是基于精简指令集计算(risc)原理建立的开放指令集架构(isa)。与大多数isa相反,risc-v isa可以免费地用于所有希望的设备中,允许任何人设计、制造和销售risc-v芯片和软件。图1展示了此前的四代risc处理器原型芯片。她是完全开源,对指令集使用,risc-v基金会不收取高额的授权费。开源采用宽松的bsd协议,企业完全自由免费使用,同时也容许企业添加自有指令集拓展而不必开放共享以实现差异化发展。其架构简单,risc-v架构秉承简单的设计哲学。
9.risc-v基础指令集则只有40多条,加上其他的模块化扩展指令总共几十条指令。易于移植,现代操作系统都做了特权级指令和用户级指令的分离,特权指令只能操作系统调用,而用户级指令才能在用户模式调用,保障操作系统的稳定。risc-v提供了特权级指令和用户级指令,同时提供了详细的risc-v特权级指令规范和risc-v用户级指令规范的详细信息,使开发者能非常方便的移植linux和unix系统到risc-v平台。模块化设计,risc-v架构不仅短小精悍,而且其不同的部分还能以模块化的方式组织在一起,从而试图通过一套统一的架构满足各种不同的应用场景。用户能够灵活选择不同的模块组合,来实现自己定制化设备的需要,比如针对于小面积低功耗嵌入式场景,用户可以选择rv32ic组合的指令集,仅使用machine mode(机器模式);而高性能应用操作系统场景则可以选择譬如rv32imfdc的指令集,使用machine mode(机器模式)与user mode(用户模式)两种模式。
10.因此,如果某微处理器设计能够兼容两种或者更多不同模式的指令集,这样可以利用两种指令系统的生态都能够利用起来,则可以极大提高产品的适用的场景。
11.我们设计了使用mips指令集的宿主(host)处理器系统上,能够兼容多种不同的指令集系统的双模或者多模方案,在该方案下,运行mips的指令的宿主系统可以高效的运行risc-v等其他非mips指令集生态系统的程序。此多种指令系统类型的支持可以从源代码级别或者二机制的级别进行非宿主指令系统的支持。在本方案中,我们直接其他非risc的指令集在源代码的级别上进行转换,并通过保证转换后的代码能够高效的在宿主机上高效的运行。
12.对客处理器指令系统规范的支持
13.为了高效支持多种不同指令系统,因此需要在软件层面和硬件微架构设计层面对宿主cpu的设计进行修改和支持,如图1所示。才可以确保对客指令系统的高效支持。
14.就硬件层面而言,由于不同的指令系统的在设计中存在指令集规范不同、处理器状态寄存器、特权指令架构、处理器外设等的不同,因此为支持不同的指令系统需要在硬件
层面依照性能需求必须做合理改动。
15.就软件层面而言,从应用程序以及操作系统的角度,需要对编译和链接器对软件相关功能模块进行修改,以使其能够支持不同指令系统。
16.硬件方面,需要在原有的架构的指令集方面、状态寄存器、以及外设部分进行修改,确能够高效的支持新的指令系统。避免因为使用大量宿主指令集对新的指令集功能进行低效的模拟。
17.首先从指令系统上看,如图2所示,客(guest)处理器指令系统的一般可以分为二大部分,其中a部分是客(guest)处理器与宿主(host)处理器指令系统的部分差异较小的部分,客处理器的指令在功能上与宿主处理器的指令系统类似,该部分指令系统可以使用简单的映射关系,使宿主系统可以支持客处理器的功能,该功能无需或者经过很小的改动就可以被高效率的支持。而,有些客指令由于功能上与宿主指令系统差异比较大,因此需要进行硬件实现或者使用多条指令进行软件模拟。
18.整个规划和设计实现过程如图4所示。在进行宿主处理器源程序转化规划时,需要系统的对要转换和映射的指令系统进行指令集的分析,并根据指令的情况选择简单的映射方法或者采用硬件指令支持的方法或者采用多条指令模拟的方式完成。而整个过程需要进行详细的规划,对于出现频次很高或者对性能要求非常重要的指令需要通过硬件支持方式进行支持,以提高转化的性能,但是对于与出现频次不高的特别的指令,则可以采用相关的指令进行序列进行模拟。分析过程如下:
19.如果指令可以直接映射或者转换,那么可以直接进行可以经过一条互助或者少量指令进行模拟。这些映射或者硬件实现可以高效的完成。这些指令通常是运算或者有实质性的运算操作指令。
20.当有些指令在宿主处理器的指令据中没有实现,因此需要通过指令硬件实现或者采用若干指令序列进行模拟的方法实现。
21.一个简单的例子为:
22.加载立即数的指令lui,在mips和risc-v的指令系统里面都是存在的,但是他们的行为有细微差异,这类指令可以很容易的进行翻译和转换而高效的实现功能。
[0023][0024]
有些客处理器的指令可能需要两条或者更多条指令宿主处理器完成,而并非局限于单条指令完成。
[0025]
b部分是客处理器与与宿主(host)处理器的部分差异较大的部分,客处理器的指令在功能上与宿主处理器的指令系统类似差异明显,无法经过简单的映射而实现,而使用多条指令进行模拟会导致性能的严重降低。这些指令需要进行通过在宿主处理器上进行指令扩展是宿主处理器得以高效率支持客处理器在宿主机上没有实现的指令系统。
[0026]
这样新的宿主系统的cpu的指令系统的指令系统的支持就变为,支持原有的指令
集同时也通过扩展指令支持客处理器系统的b部分的指令系统,如图3所示。宿主处理器仍然可以支持原有的指令集规范,确保对原指令系统的支持。并通过指令扩展扩大了对客cpu系统的支持。
[0027]
在完成了对宿主处理系统的修改之后,相应的编译器或者配套的操作系统或者第三方库进行支持才能够进行高效在宿主处理器上进行支持。
[0028]
具体的讲,软件相关的支持工作,
[0029]
完成了上述的硬件的支持后,该增强的宿主系统可以完善的支持宿主系统以及客系统的指令和状态控制寄存器以及处理器的外设模块。
[0030]
而为了充分利用该硬件功能,需要在软件的层面对此系统进行支持,以最大限度的发挥两个指令系统的功能和能力。具体将涉及:应用开发、操作系统、第三方库等内容。
[0031]
客处理器系统的汇编或者类汇编的代码,将通过映射和转换翻译为宿主系统的二进制代码,可以在宿主处理器上高效的运行。
[0032]
高级语言的代码,则通过宿主系统的编译,可以充分的利用宿主系统的指令系统的优势,编译为高效的宿主指令系统二进制代码。更进一步,高级语言的代码可以高效的使用两类指令系统的优势,充分发挥二者的优势而编译出能够兼容量两种指令系统优势的更高性能的能力。
[0033]
宿主系统的的汇编或者类汇编的代码,将通过映射和转换翻译为宿主系统的二进制代码,可以在上高效的运行。
[0034]
同样,第三方库以及操作系统也均可以通过上述方法,编译出能够充分利用两种不同指令系统的操作系统和第三方的库。
[0035]
如图6所示,最终的软件系统可以高效的编译高级语言源代码、宿主汇编语言源代码、客系统汇编语言源代码。通过增强编译器、汇编器对宿主系统和客系统的支持,充分发挥两套指令系统的优势。
【附图说明】
[0036]
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。其中:
[0037]
图1展示了此前的四代risc处理器原型芯片。
[0038]
图2为客(guest)处理器指令系统的示意图;
[0039]
图3为客(guest)处理器指令系统和主处理器指令系统的架构图;
[0040]
图4为整个规划和设计实现过程;
[0041]
图5展示了协处理器接口corextend的扩展方法;
[0042]
图6示出了采用special2的指令槽进行扩展;
[0043]
图7展示使用用户扩展指令(cop2)接口的扩展方法;
[0044]
图8示出了软件层面的修改。
【具体实施方式】
[0045]
下面结合附图来详细介绍一下本发明的具体实施方式。
[0046]
在本发明中,各处的“在一个实施例中”并不是特别指在同一个实施例中,它们可以是同一个实施例,也可以是不同的实施例。
[0047]
下文中仅仅通过例子的方式来描述本发明的事实例,这些例子表示申请人当前已知的将发明付诸实践的较佳方式,虽然这些最佳方式并不是可以实现本发明的仅有的方式。本描述给出的例子的功能以及用于构造并操作的步骤序列,然而,不同的例子可以完成相同的或等价的功能序列。
[0048]
本发明通过对mips处理器硬件设计进行增强,同时对软件系统进行增强,以支持risc-v处理器指令集为例子,说明本发明。为了高效支持多种不同指令系统,在硬件微架构设计层面进行修改,以高效支持至新的指令系统。为了支持上述修改,需要在软件编译器和操作系统等层面进行增强。也即,软件和硬件相配合的方式高效支持新的指令系统。
[0049]
从硬件方面对客处理器指令系统规范的支持
[0050]
首先从指令系统上看,客(guest)处理器指令系统的一般可以分为二大部分,其中a部分是客(guest)处理器与宿主(host)处理器指令系统的部分差异较小的部分,客处理器的指令在功能上与宿主处理器的指令系统类似,该部分指令系统可以使用简单的映射关系,使宿主系统可以支持客处理器的功能,该功能无需或者经过很小的改动就可以被高效率的支持。
[0051]
针对客处理器与宿主处理器指令一致或相似的部分,可以通过简单的映射实现。也即说,可以建立一个简单的映射表,使转换程序分析。
[0052]
举几个例子为:
[0053]
1.jal指令,客寄存器的jal指令为jal rd,offset,但是其offset为20位,而宿主jal的指令的offset为26bit,。
[0054]
因此,当客jal指令可以直接映射为宿主处理器的jal指令。
[0055]
而jalr则可以指定rd寄存器,但是其rd是r31,客处理器规范的约定为r1为返回地址寄存器,两者没有实际的大的差异。
[0056]
因此jal指令可以进行高效的映射即可实现从客处理器到宿主处理器快速
[0057]
2.lui加载立即数的指令,在mips和risc-v的指令系统里面都是存在的,但是他们的行为有细微差异,这类指令可以很容易的进行翻译和转换而高效的实现功能。具体的映射方法为:客处理器的lui指令为,lui rd,immediate
[0058]
其功能为:将符号位扩展的20位立即数左移12位,并将低12位清零。写入x[rd]中。
[0059]
而宿主机处理器的定义为:
[0060]
其功能为:将立即数左移16位,并将低16位清零。写入gpr[rt]中。
[0061]
因此,两个指令之间存在细微的差异,无法完全直接对应,在进行映射时,按照下面分条件进行映射:
[0062][0063]
当立即数的绝对值小于65535的时候,可以直接映射为一条指令,但是当立即数绝对值大约65535的时候。需要通过映射为两条指令进行完成。
[0064]
3.lw字加载指令,宿主处理器的lw指令,使用12bit的立即数作为偏移地址。而宿主处理器的lw指令,使用16bit的立即数作为偏移地址。同时两者的寻址方式也是类似的。因此这两个指令可以映射使用。类似的指令还有ld,lh,lbu,lhu,sb,sh,sw,ld,sd
[0065]
4.beq,bne类的指令,
[0066]
客处理器指令的功能与主处理器指令的功能基本一致,同时客处理器的偏移的位长为12bit而宿主处理器的位长为16bit,因此客处理器的指令可以直接使用宿主处理器代替。
[0067]
5.addi,slti,sltiu,ori,andi
[0068]
addi中客处理器的立即数为12bit,而宿主处理器的立即数为16bit,因此可以在直接替换。
[0069]
slti中客处理器的立即数为12bit,而宿主处理器的立即数为16bit,因此可以在直接替换。
[0070]
slti中客处理器的立即数为12bit,而宿主处理器的立即数为16bit,因此可以在直接替换。
[0071]
ori中客处理器的立即数为12bit,而宿主处理器的立即数为16bit,因此可以在直接替换。
[0072]
andi中客处理器的立即数为12bit,而宿主处理器的立即数为16bit,因此可以在直接替换。
[0073]
因此这类行为完全一致的指令可以直接替换。
[0074]
6.or,add,sub,sll,slt,sltu,xor,srl,sra,and,
[0075]
上述指令在客处理器与宿主处理器的行为完全一致,因此可以在直接替换。
[0076]
7.addw,subw,srlw,sraw
[0077]
addw中客处理器的指令行为与宿主处理器的dadd,因此可以在直接替换。subw中客处理器的指令行为与宿主处理器的dsub,因此可以在直接替换。srlw中客处理器的指令行为与宿主处理器的dsrl,因此可以在直接替换。sraw中客处理器的指令行为与宿主处理器的dsra,因此可以在直接替换。
[0078]
8.ecall
[0079]
在客处理器中,使用ecall来使能环境调用异常。在宿主处理器中,syscall与此功能非常类似。
[0080]
9.ebreak等指令,
[0081]
在客处理器中,使用ebreak来触发断点异常的方式请求调试器。在宿主处理器中,sdbbp与此功能非常类似。
[0082]
上述的指令可以在宿主机中有效的支持。因此可以通过简单的映射表进行高效的映射,映射后的这些指令可以得到高效执行。
[0083]
但是,有些客处理器的指令可能需要两条或者更多条指令宿主处理器完成,而并非无法用单条或者两条指令完成,这些对性能影响较大的指令,如果用多条指令进行模拟,可能导致性能的大幅地降低,这些指令需要在宿主处理器进行支持和增强,以求高效增加此类指令的支持。也就是图中的b部分,即客处理器与主处理器差异较大的部分。这些指令需要进行通过在宿主处理器上进行指令扩展是宿主处理器得以高效率支持客处理器在宿主机上没有实现的指令系统。
[0084]
比如:需要进行指令功能扩展的有:vfnmadd等。
[0085]
由于进行硬件增强需要花费较大的硬件资源,对于b部分是客处理器与与宿主(host)处理器的部分差异较大的部分,尽管无法经过简单的映射而实现,而使用多条指令进行模拟会导致性能的严重降低,但是由于调用频次比较低,因此此类指令对全局的性能影响比较小。这些指令也可以通过指令的组合映射实现。
[0086]
这样新的宿主系统的cpu的指令系统的指令系统的支持变为,在支持原有的指令集,同时通过扩展指令支持客处理器系统的b部分的指令系统。宿主处理器仍然可以支持原有的指令集规范,确保对原指令系统的支持。并通过指令扩展扩大了对客cpu系统的支持,对于客处理器中调用频次不高的指令,仍然通过转换和映射实现。
[0087]
在cpu中增加指令需要软件和硬件方面的协调,同时,在处理器中增加指令将对原有指令系统的影响。因此,针对某些缺失指令的性能影响的不同,采取不同的方法进行支持。对于客系统比较重要和调用频次较高的指令,通过硬件增强实现。当指令调用的频次比较低的情况下,可以采用使用多条指令进行组合的方式,以完成对新指令功能的模拟。
[0088]
当对客寄存器的关键指令需要进行硬件模拟,因此此时需要进行指令的硬件支持。在宿主处理器的指令编码中,已经预留了用于对用户指令进行扩展的相关的编码位,这些编码位用于用户自定义指令。
[0089]
在mips处理器系统的增加硬件指令支持的时候,一个可行的方式是使用corextend和coprocessor的方式进行指令的扩展。或者直接修改处理器的内部设计进行新指令的支持。
[0090]
如图5所示,展示协处理器接口corextend的扩展方法。使用corextend的指令进行扩展的时候,如图6所示,采用special2的指令槽进行扩展。也就是说,当指令字的高6位为011100时,该指令为special2的指令类别。当指令解码器遇到该指令字时,处理器的硬件会通过corextend接口控制用户自定义指令的硬件执行该指令。
[0091]
如图7所示,展示使用用户扩展指令(cop2)接口的扩展方法。如图7所示,采用cop2的的指令槽进行扩展。也就是说,当指令字的高6位为010010时,该指令为cop2的指令类别。
[0092]
当上述缺失的指令通过添加用户自定义的方式增强以后,是宿主处理器具备了硬件直接支持客处理器的指令系统的硬件能力。在软件的有效配合下,系统可以高效的支持多种指令集。
[0093]
软件层面的支持
[0094]
由于在硬件方面,需要在原有的架构的指令集方面进行了增强,能够高效的支持新的指令系统。避免因为使用大量宿主指令集对新的指令集功能进行低效的模拟。
[0095]
就软件层面而言,从应用程序以及操作系统的角度,需要对编译和链接器对软件相关功能模块进行修改,以使其能够支持不同指令系统。由此,增强的宿主系统可以完善的支持宿主系统以及客系统的指令和状态控制寄存器以及处理器的外设模块,其中涉及:应用开发、操作系统、第三方库等内容。
[0096]
如图8所示,软件层面的修改包括下面几个层面:
[0097]
而高级语言的代码,则通过宿主系统的编译,可以充分的利用宿主系统的指令系统的优势,编译为高效的宿主指令系统二进制代码。更进一步,高级语言的代码可以高效的使用两类指令系统的优势,充分发挥二者的优势而编译出能够兼容量两种指令系统优势的更高性能的的能力。
[0098]
宿主处理器系统的汇编或者类汇编的代码,将编译为宿主系统的二进制代码,可以在上高效的运行。
[0099]
客处理器系统的汇编或者类汇编的代码,将通过映射和转换翻译为宿主系统的二进制代码,再行编译,即可在宿主系统上高效的运行。此转换和映射需要建立一个客处理器系统的指令与宿主系统处理器系统的对照表。依据此表将客处理系统的指令映射为宿主系统的指令,而映射过程可以通过直接的宏文件或者通过程序进行映射。
[0100]
同样,第三方库以及操作系统也均可以通过上述方法,编译出能够充分利用两种不同指令系统的操作系统和第三方的库。
[0101]
常见的编译系统类似gcc工具链或者llvm工具链,可以完成类似的从高级语言向底层语言的映射。为了能够充分利用多种指令系统,需要对gcc和llvm的工具链进行增强,以能够支持多种指令系统。
[0102]
最终的软件系统可以高效的编译高级语言源代码、宿主汇编语言源代码、客系统汇编语言源代码。通过增强编译器、汇编器对宿主系统和客系统的支持,充分发挥两套指令系统的优势。
[0103]
本文描述的方法和步骤在适当的情况下可以以任意适当的顺序或者同时地执行,另外,可以从任意方法中删除单独的模块,而不偏离本文描述的主题的精神和范围。上述描述的任意例子的防范可以与描述的任意其他例子的方案组合,以形成进一步的例子,而不上市寻求保护的效果。在附图中的模块被视为由箭头的连接情况下,将清楚的是:这些箭头仅仅示出了原件之间的通讯(包括数据和控制信息)的实例性流。。
[0104]
应当理解的是:对优选的实施进行以上的描述仅仅是同理例子的方式给出的,并且本领域的技术人员可以进行各种修改。虽然已经以某种具体度或者参与一个或者多个单独的实施实例描述了各个实例,但是本领域的技术可以对所公开的实例进行各种改变,而不脱离本发明的精神和范围。
[0105]
上述说明已经充分揭露了本发明的具体实施方式。需要指出的是,熟悉该领域的技术人员对本发明的具体实施方式所做的任何改动均不脱离本发明的权利要求书的范围。相应地,本发明的权利要求的范围也并不仅仅局限于前述具体实施方式。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献