CN115454504A - 一种四发射risc-v处理器微架构及其工作方法 - Google Patents

一种四发射risc-v处理器微架构及其工作方法 Download PDF

Info

Publication number
CN115454504A
CN115454504A CN202211080018.8A CN202211080018A CN115454504A CN 115454504 A CN115454504 A CN 115454504A CN 202211080018 A CN202211080018 A CN 202211080018A CN 115454504 A CN115454504 A CN 115454504A
Authority
CN
China
Prior art keywords
instruction
stage
micro
instructions
decoding
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.)
Pending
Application number
CN202211080018.8A
Other languages
English (en)
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.)
Shandong University
Original Assignee
Shandong University
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 Shandong University filed Critical Shandong University
Priority to CN202211080018.8A priority Critical patent/CN115454504A/zh
Publication of CN115454504A publication Critical patent/CN115454504A/zh
Pending legal-status Critical Current

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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags
    • 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)
  • Advance Control (AREA)

Abstract

本发明涉及一种四发射RISC‑V处理器微架构及其工作方法,采用多发射结构,分为12~14级整形流水线,可作为一种高性能流水线架构。为解决分支冒险,微架构中采用了两级分支预测架构;RISC‑V指令集正在扩张和许多长指令的出现,因此,在译码级分为了3个简单译码器和1个复杂的译码器,后者负责长指令的译码;在译码级随后设置了微操作队列用于缓存来自译码级分解的指令的微操作,微操作队列每周期向后级流水线提供5条微操作,后续的流水线都是对微操作队列,但是每个微操作都有对应的指令的标记用于标识是属于哪条指令的微操作,防止在译码级产生阻塞。还实现了四条指令的发射,在保证处理器高主频的同时,尽量提高指令的IPC。

Description

一种四发射RISC-V处理器微架构及其工作方法
技术领域
本发明涉及一种在RISC-V指令集架构下工作的四发射处理器微架构及其工作方法,属于集成电路处理器层次结构设计技术领域。
背景技术
RISC-V指令集作为第五代精简指令集架构,在模块化和精简性上都有明显的优势。模块化体现在RISC-V指令集的归并性,即将某类具有鲜明特点的指令划分为一个模块的指令集,例如,I代表整数型指令,B代表比特级操作指令,RISC-V的模块化指令还在飞速发展。精简性体现在RISC-V指令集的规整性,即指令集的字段有着固有的格式,这将方便随后的译码工作。
使用精简的RISC-V指令集可以设计出更深的流水线获得更高的主频,但是流水线更深也意味着分支预测失败的代价更高。另一方面,RISC-V指令集正在向高性能方向发展,例如V扩展是用于支持向量操作的,这一类指令属于长指令,单条指令之中有多条操作,为此,译码时要做更深层的译码才能将这些具体的操作辨识出来。
RISC-V的上述特点使得其可以设计更深的流水线,获得高主频,但是同时要兼深流水线冒险和长指令处理问题,才能设计出高性能的RISC-V处理器。
发明内容
本发明提出一种四发射的RISC-V处理器微架构,包括12~14级流水线。本发明给出该处理器架构的工作方式、流水线划分、关键功能部件的组织和实现方法。主要包括各级流水线的功能及其包含的功能部件以及四发射的解码、μOP队列、寄存器重命名、发射队列的组织、执行单元的组织以及ROB的相关内容。本发明给出微架构的流水线、功能部件以及关键结构和部件的组织方式,给出四发射微架构的实现方法和RISC-V指令微操作队列的工作方式,侧重微架构规划并不赘述其中的细节。
术语解释:
1、μOP,即Micro Operation,微操作,是指从RISC-V指令中分解出来的具体操作;
2、ROB,即Reorder Buffer,重排序缓存,实现指令的按序退休;
3、Retire,退休,标志着指令生命周期的完成;
4、Commit,提交,指的是指令执行完毕,可以得到指令的结果;
5、Cache,即缓存,为一高速数据交换存储器;
6、Cacheline,缓存行,此处假定为64byte;
7、ROB ID,即ROB记录的指令的标记;
8、IQ,即Instruction Queue,指令队列;
9、逻辑寄存器:即RISC-V定义的x0~x31共32个寄存器;
10、物理寄存器:是指实际实现的寄存器。
本发明的技术方案为:
一种四发射RISC-V处理器微架构,包括前端和后端,前端和后端包括12级整型流水线;
前端用于:取指、分支预测、译码、寄存器重命名、指令派遣和寄存器堆访问;
后端用于:指令执行及重排序缓存,实现指令的按序退休;指令执行包括整数、浮点数和分支指令执行以及访存。
根据本发明优选的,前端包括取指一级、取指二级、译码级、微操作队列分配级、寄存器重命名级、发射级和寄存器访问级,共7级整型流水线;
后端包括1~4级的执行级和退休级,共5级整型流水线。
根据本发明优选的,所述取指一级包括第一级BTB和ICache,第一级BTB用于第一级的分支预测,ICache用于完成指令取指,取指带宽为128bit,实现四条指令的取指;
所述取指二级包括预译码单元、第二级BTB、BHT和指令打包单元,预译码单元通过预译码信息译码出指令的类型,用于判断该指令是否访问第二级BTB;第二级BTB使用预译码信息和部分PC信息索引,得到分支指令的跳转地址;BHT用于记录跳转指令的历史,每周期移位一次;指令打包单元用于将来自取指一级的数据内容分割为四条指令;
所述译码级用于对来自取指二级的四条指令进行译码,指令译码时,根据预译码信息选择合适的译码器;译码级包括四个译码器,其中,三个简单的译码器,一个复杂译码器,简单译码器译码出的微操作数量不多于两个,复杂译码器用于对长指令进行译码,一次译码出两个以上的微操作;
所述微操作队列分配级用于缓存来自译码级解码出的微操作,同时每周期为后续流水线分配五条微操作;
所述寄存器重命名级用于对来自微操作队列分配级的五条微操作进行寄存器重命名,解决处理器指令中存在的WAR和WAW名字相关,在这一级中指令还是有序的,在为指令分配了新的物理寄存器号以后,把物理寄存器号和指令ID记录下来提供给ROB,ROB用这些信息记录指令的顺序和指令的写回寄存器;除此以外,寄存器重名命级在对微操作进行重命名以后,根据指令源寄存器和目的寄存器信息进行派遣;
所述发射级用于将来自于寄存器重命名级的微操作分类型缓存到不同的发射队列中;
所述寄存器访问级用于处理来自各个发射队列端口的访问请求。
根据本发明优选的,所述执行级包括整数执行单元、分支指令执行单元、乘法单元、除法单元和访存单元;
所述整数执行单元用于执行整数补码的加法运算,逻辑运算,以及移位运算;
所述分支指令执行单元用于计算分支指令的跳转条件和跳转的目标地址;
所述乘法单元和除法单元分别用于完成流水线式乘法和除法运算;
所述访存单元用于处理load和store指令,用于访问存储中的数据或者将数据写入存储中;
整数执行单元一个周期返回执行结果,乘法单元三个周期返回结果,除法单元三至四个周期返回结果,访存单元也有自己的流水级,包括数据缓存级、数据访问级、地址产生级和写回级。
所述退休级包括ROB和与寄存器重命名级共同维护的寄存器重命名表,寄存器重命名表的每一个表项包含指令的ID、指令的目的寄存器号和指令是否写回的标志;ROB的写入是有序的,按照来自寄存器重命名级的指令的顺序有序的写入,当执行级完成指令的全部微操作的执行以后,置位写回标志,表示这条指令已经提交,已经提交的指令中选择最老的指令进行退休,已经退休的指令生命周期结束;对于访存型指令,还设置write buffer,数据从write buffer写到存储器后才真正更改存储器中的数据。
上述四发射RISC-V处理器微架构的工作方法,包括:
1)取指:从指令缓存中取值,并判断指令是否是分支指令;
2)分支预测:如果指令是分支指令,则执行分支预测,即对分支指令的跳转方向和跳转地址进行预测,并将预测地址反馈,重新从预测的地址进行取值;
3)译码:取出正确的指令后,对指令进行译码操作;
4)微操作队列:缓冲来自译码级分解的微操作,并每周期向后级流水线传递5条微操作;
5)寄存器重命名:对来自微操作队列的微操作进行寄存器重命名,即为每条微操作分配对物理寄存器;
6)指令相关性检测:检测指令和微操作之间的RAW相关性,若存在RAW相关性,则执行旁路操作,将前面指令写的物理寄存器旁路给后续指令来读;
7)指令发射队列:对重命名和相关性检测完毕的指令,选择最老的指令发射给后续执行单元;
8)乱序处理:执行端口对发射出来的指令进行乱序处理;
9)ROB按序退休:指令执行完以后,写回到ROB的表项中,ROB根据指令的新旧排序,并退休已经完成的最老的指令;
10)指令缓存:Write Buffer对已经的退休的LSU指令进行缓冲。
根据本发明优选的,取指,是指产生取指地址以及维护ICache返回指令块的地址;当ICache不产生暂停信号时,取指按地址顺序一直读取指令;当出现刷新时,取指根据不同的情况从取指地址重新取指;取指根据取指令的各种条件的优先级产生取指地址。
根据本发明优选的,分支预测,包括两个阶段:
第一阶段为:在取指第一级访问ICache的取指阶段预测,第一阶段以16byte指令块为单位进行预测;第二阶段为:在取指第二级访问ICache的取指阶段预测,第二阶段根据具体的指令地址进行预测。
根据本发明优选的,缓存设置为组相联结构,采用PLRU替换算法。
根据本发明优选的,译码包括预译码阶段和译码阶段;
预译码阶段,采用完全二叉树分解的方法,每周期得到4条16bit或者32bit的指令;四发射RISC-V处理器微架构识别出特殊指令类型对应的opcode和func字段;根据得到的预译码信息的指令类型进行分支别名错误检查。
译码阶段,在解码级最多对4条指令并行译码,每条指令翻译为一条或者多条的微操作。
根据本发明优选的,译码阶段将指令分解为微操作后,微操作的数目为四条或者以上,设置一个微操作队列,用于缓冲来自译码的微操作;
微操作队列具有4个写端口和5个读端口,写端口对应4个解码器,读端口读出5个微操作给寄存器重命名级;
微操作队列具有空满标志,如果微操作队列满,给出暂停译码级译码的控制信号;
微操作队列接收来自后级流水线的暂停信号;
根据本发明优选的,寄存器重命名中,接收来自微操作队列的5条微操作,并对其进行寄存器重命名。
根据本发明优选的,指令相关性检测的具体实现过程包括:将当前指令的目的寄存器和所有前面的指令的两个源操作数逐一比较;如果当前指令的目的寄存器号与某一条指令的源寄存器号相同,则判定为当前指令与前序指令之间存在指令相关,把前序指令的源寄存器号传递给当前指令的目的寄存器号;否则,指令不存在相关,把当前指令分配的物理寄存器号传递下去。
根据本发明优选的,指令发射队列中,指令发射的过程包括:指令重命名完成后,指令被分配到对应的指令队列;如果指令的源操作数都已经在寄存器中准备好或者通过旁路的得到,则该指令及已经准备好发射;从已经准备好的指令中根据指令的ROB ID选出最老的一条指令进行发射。
根据本发明优选的,执行端口包括整形执行端口、分支指令执行端口、访存指令执行端口和浮点指令执行端口,每种类型的执行端口都包括对应的指令的单元。
根据本发明优选的,ROB按序退休,包括:指令提交后等待退休,每周期退休4条指令,只有当ROB中最老的4条指令都提交后,退休4条指令。
根据本发明优选的,指令缓存,针对LSU的write buffer,如果退休的指令属于store型指令,将退休的指令退休到write buffer,在其中实现store型指令写入存储器的操作。
本发明的有益效果为:
1、本发明实现了四条RISC-V指令的发射架构,能够提高处理器的IPC。
2、本发明在RISC-V架构中采用了微操作队列机制,有效防止译码级阻塞。
3、本发明使用RISC-V指令集实现深度流水的同时,还实现了四条指令的发射,在保证处理器高主频的同时,尽量提高指令的IPC。
附图说明
图1为本发明取指示意图;
图2为本发明分支预测示意图;
图3为本发明第4条微操作RAW相关性检测电路示意图;
图4为本发明四发射RISC-V处理器微架构的工作方法的具体实施方案示意图。
具体实施方式
下面结合说明书附图和实施例对本发明作进一步限定,但不限于此。
实施例1
一种四发射RISC-V处理器微架构,包括前端和后端,前端和后端包括12级整型流水线;
前端用于:取指、分支预测、译码、寄存器重命名、指令派遣和寄存器堆访问;
后端用于:指令执行及重排序缓存,实现指令的按序退休;指令执行包括整数、浮点数和分支指令执行以及访存。
实施例2
根据实施例1所述的一种四发射RISC-V处理器微架构,其区别在于:
前端包括取指一级、取指二级、译码级、微操作队列分配级、寄存器重命名级、发射级和寄存器访问级,共7级整型流水线;
后端包括1~4级的执行级和退休级,共5级整型流水线。
取指一级包括第一级BTB(Branch Target Buffer)和ICache,第一级BTB用于第一级的分支预测,ICache用于完成指令取指,取指带宽为128bit,实现四条指令的取指;
取指二级包括预译码单元、第二级BTB、BHT(Branch History Table)和指令打包单元,预译码单元通过预译码信息译码出指令的类型,用于判断该指令是否访问第二级BTB;第二级BTB使用预译码信息和部分PC信息索引,得到分支指令的跳转地址;BHT用于记录跳转指令的历史,每周期移位一次;指令打包单元用于将来自取指一级的数据内容分割为四条指令;
译码级用于对来自取指二级的四条指令进行译码,指令译码时,根据预译码信息选择合适的译码器;译码级包括四个译码器,其中,三个简单的译码器,一个复杂译码器,简单译码器译码出的微操作数量不多于两个,复杂译码器用于对长指令进行译码,一次译码出两个以上的微操作;
微操作队列分配级用于缓存来自译码级解码出的微操作,译码级虽然译码四条指令,但通常上要对四条指令完全译码,得到的微操作数量不仅仅是四条,为此需要设置微操作队列级用于暂存来自译码级的微操作保证译码级在当前周期不会阻塞,同时每周期为后续流水线分配五条微操作;
寄存器重命名级用于对来自微操作队列分配级的五条微操作进行寄存器重命名,解决处理器指令中存在的WAR和WAW名字相关,在这一级中指令还是有序的,在为指令分配了新的物理寄存器号以后,把物理寄存器号和指令ID记录下来提供给ROB,ROB用这些信息记录指令的顺序和指令的写回寄存器;除此以外,寄存器重名命级在对微操作进行重命名以后,根据指令源寄存器和目的寄存器信息进行派遣;
发射级用于将来自于寄存器重命名级的微操作分类型缓存到不同的发射队列中;例如,整数型指令队列、分支型指令队列、浮点型指令队列等,每个队列对应后端流水线中相应的执行端口。发射级需要从发射队列中选择最老的一条指令发射出来,设计年龄矩阵电路,用于将年龄最老的指令发射出来。指令发射后进入乱序执行阶段。
寄存器访问级用于处理来自各个发射队列端口的访问请求。每个发射队列发射指令以后会进入寄存器访问级,用于在没有数据前馈的情况下获取源操作数,获取源操作数以后送入执行级执行。
后端指乱序执行内核,包括整数执行单元、分支指令执行单元、浮点执行单元、访存部件和ROB退休单元,其中浮点单元有自己的寄存器堆和流水线,与通常上的浮点运算流水级没有区别。
执行级包括整数执行单元、分支指令执行单元、乘法单元、除法单元和访存单元;整数执行单元用于执行整数补码的加法运算,逻辑运算,以及移位运算;分支指令执行单元用于计算分支指令的跳转条件和跳转的目标地址;乘法单元和除法单元分别用于完成流水线式乘法和除法运算;访存单元用于处理load和store指令,用于访问存储中的数据或者将数据写入存储中;
整数执行单元一个周期返回执行结果,乘法单元三个周期返回结果,除法单元三至四个周期返回结果,访存单元也有自己的流水级,包括数据缓存级、数据访问级、地址产生级和写回级。
退休级包括ROB和与寄存器重命名级共同维护的寄存器重命名表,寄存器重命名表的每一个表项包含指令的ID、指令的目的寄存器号和指令是否写回的标志;ROB的写入是有序的,按照来自寄存器重命名级的指令的顺序有序的写入,当执行级完成指令的全部微操作的执行以后,置位写回标志,表示这条指令已经提交,已经提交的指令中选择最老的指令进行退休,已经退休的指令生命周期结束;对于访存型指令,还设置write buffer,数据从write buffer写到存储器后才真正更改存储器中的数据。
本发明微架构的CoreMark跑分可达6.0以上。
实施例3
根据实施例2所述的一种四发射RISC-V处理器微架构的工作方法,如图4所示,包括:
1)取指:取指单元从指令缓存中取值,并判断指令是否是分支指令;
取指,是指产生取指地址以及维护ICache返回指令块的地址;当ICache不产生暂停信号时,取指按地址顺序一直读取指令;当出现刷新时,取指根据不同的情况从取指地址重新取指;取指根据取指令的各种条件的优先级产生取指地址。
产生取指地址的七个条件举例如下:
1)不发生跳转,每次增加16;
2)包括两种情况:1.分支别名错误。2.第一级预测没有被预测的分支指令,译码后发现是无条件跳转指令;
3)第二级BTB预测跳转;
4)load提前执行时和后执行的store物理地址相同,load取到了老的数据,应该取的是store指令的数据,即存在RAW相关;
5)执行单元判断前端流水线的指令预测结果错误;
6)第一级预测BTB预测跳转地址;
7)包括三种情况:第一种情况:在ALU执行了更改CPU状态的CSR指令时,需要重新获取CSR后面的指令。第二种情况:中断异常处理。第三种情况:RISC-V模式发生变化。
这些条件是有优先级的,RTL实现时可考虑用if…else if…else…结构,其中条件2)~7)都是需要从新的地址取指,并且会产生刷新流水线的操作。如果这些条件都不满足时每次地址增加16,即条件1。每次取指令的地址都是以16byte为边界,这是因为cache的Cacheline是16byte的倍数,并且页面大小为4K,所以这样可以避免跨Cacheline的问题,因为如果跨Cacheline或者页,那么每次取指令都需要分两次才能够完成。
地址缓存的读写过程如图1所示,如果在取指过程中出现了上面任意一种刷新时,地址缓存清空。当条件4)和条件5)同时有效时,比较两种条件的ROB ID,取ROB ID老的条件。
2)分支预测:如果指令是分支指令,则执行分支预测,即对分支指令的跳转方向和跳转地址进行预测,并将预测地址反馈到取值单元,重新从预测的地址进行取值;
如图2所示,分支预测,包括两个阶段:
第一阶段为:在取指第一级访问ICache的取指阶段预测,第一阶段以16byte指令块为单位进行预测;第二阶段为:在取指第二级访问ICache的取指阶段预测,第二阶段根据具体的指令地址进行预测。
第二阶段的结果优先级高于第一阶段的结果。跳转预测分为跳转方向预测和跳转地址预测,跳转方向预测使用BHT,跳转地址预测使用BTB。第一阶段分支预测使用部分PC地址索引第一级BTB,第二阶段分支预测架构如2所示,指令地址和全局历史信息寄存器GHR异或索引BHT,使用指令地址索引第二级BTB得到跳转地址。将跳转地址和跳转的方向信息编码输出给后续流水线。
缓存单元包含ICache和ITLB。缓存单元缓解了core与外部存储器的速度差异带来的问题。ICache和ITLB根据程序的局部性原理,保存了最近常用的指令块,使core能够快速的取到指令。缓存设置为组相联结构,采用PLRU(即伪LRU)替换算法。缓存大小根据实际使用情况设置。
3)译码:经过前两个步骤取出正确的指令后,对指令进行译码操作;最多可以对四条指令进行译码;译码包括预译码阶段和译码阶段;
预译码部分需要处理如下问题:1)由于RISC-V有16bit和32bit的指令,需要考虑每条指令的长度以及跨16byte指令块边界的情况,每个时钟周期提取4条指令,并且计算指令的长度和地址。2)预译码得到指令类型以及特殊指令类型,例如CSR指令、fence指令和RISC-V扩展指令集的长指令等。3)由于索引第一级BTB使用了部分PC,因此可能存在指令冲突的情况,预译码知道指令的类型以后,需要进行分支别名错误检查。
预译码阶段,对于问题1),可以采用完全二叉树分解的方法,每周期得到4条16bit或者32bit的指令;对于问题2),只需要四发射RISC-V处理器微架构识别出特殊指令类型对应的opcode和func字段;对于问题3),可以根据得到的预译码信息的指令类型进行分支别名错误检查。
译码阶段,在解码级最多对4条指令并行译码,每条指令翻译为一条或者多条的微操作。简单解码器可以解码出1~2条微操作,长指令解码器可以分解出1~2条或者2条以上的微操作,因此可以根据预译码信息,将四条指令调度到不同的解码器。
4)微操作队列:缓冲来自译码级分解的微操作,并每周期向后级流水线传递5条微操作;
微操作定义了指令执行的属性和操作,RISC-V的指令可以分解为1条或者多条微操作,主要取决于指令的复杂度和架构的设计,在架构设计中,应当给出每个微操作的定义,以便解码器能够分解出来,每个微操作是后续执行级可执行的最小操作。
译码阶段将指令分解为微操作后,微操作的数目为四条或者以上,设置一个微操作队列,用于缓冲来自译码的微操作;例如,此处设置微操作队列的深度为64项,可以缓冲来自解码级的64个微操作,微操作队列具有如下特征:
微操作队列具有4个写端口和5个读端口,写端口对应4个解码器,读端口读出5个微操作给寄存器重命名级;
微操作队列具有空满标志,如果微操作队列满,给出暂停译码级译码的控制信号;
微操作队列接收来自后级流水线的暂停信号;例如,当后级流水线资源紧张时应当给微操作队列暂停信号;当后级流水线发生异常或者推测错误时,应当清空比发生错误指令位置更新的指令对应的微操作。
微操作队列本质上是多端口的同步FIFO结构,只不过读写控制需要考虑更多的反馈信号,微操作队列缓冲来自译码级的微操作,同时每周期释放出5条微操作给后续的寄存器重命名和发射阶段。
5)寄存器重命名:对来自微操作队列的微操作进行寄存器重命名,即为每条微操作分配对物理寄存器;
寄存器重命名中,接收来自微操作队列的5条微操作,并对其进行寄存器重命名。寄存器重命名是实现处理器乱序执行的第一步,也是一种通用技术,本处不做详细介绍。
寄存器重命名解决指令之间存在的名字相关,指令的之间的名字相关包括WAR和RAW两种情况,都可以通过寄存器重名来解决。名字相关是由寄存器资源不足导致的,为此需要为指令的目的寄存器分配物理寄存器,通过分配新的物理寄存器存放提前执行的指令的结果,而不需要等待相关的指令执行完以后才开始执行后续指令。
指令之间还存在一种真相关,叫做RAW相关。在这种情况下,第二条指令必须等到第一条指令执行完成得到结果,然后第二条指令才能取到第一条指令的结果。例如,在取指阶段,条件分支指令是否需要跳转,如果等到执行单元才知道是否要跳转,那么会严重的影响性能,因此,通过分支指令预测,决定是否跳转,后续指令就可以提前“预知”结果,这是概率性的解决RAW冒险。
如果指令之间存在RAW冒险,就要通过数据前馈的方式,让第二条指令在第一条指令得到结果后第一时给到第二条指令,为此需要设置电路来检测指令之间存在的这种RAW数据相关,在寄存器重命名级就可以处理这种相关,以第4个微操作为例:它要判断和前面三条指令存在的RAW相关,RISC-V指令存在两个源寄存器和一个目的寄存器,为此需要将第四条指令的两个源寄存器分别和前三条指令的逻辑寄存器分配的物理寄存器号进行比较,这样就可以将第四条指令的源寄存器指向和它相关的那一条指令的逻辑寄存器分配的物理寄存器。这种相关性检测电路如图3所示。
6)指令相关性检测:检测指令和微操作之间的RAW(Read After Write)相关性,若存在RAW相关性,则执行旁路操作,将前面指令写的物理寄存器旁路给后续指令来读;
指令相关性检测的具体实现过程包括:将当前指令的目的寄存器和所有前面的指令的两个源操作数逐一比较;如果当前指令的目的寄存器号与某一条指令的源寄存器号相同,则判定为当前指令与前序指令之间存在指令相关,把前序指令的源寄存器号传递给当前指令的目的寄存器号;否则,指令不存在相关,把当前指令分配的物理寄存器号传递下去。
7)指令发射队列:对重命名和相关性检测完毕的指令,选择最老的指令发射给后续执行单元;指令发射队列共8个,AIQ0和AIQ1为整数型指令的缓存队列,BIQ为分支指令队列,LSIQ(2个)和SDIQ为访存指令队列,VIQ0和VIQ1为浮点指令队列;
指令发射队列中,指令发射的过程包括:指令重命名完成后,指令被分配到对应的指令队列;如果指令的源操作数都已经在寄存器中准备好或者通过旁路的得到,则该指令及已经准备好发射;从已经准备好的指令中根据指令的ROB ID选出最老的一条指令进行发射。
指令在完成寄存器重命名以后,需要分派到对应的指令队列。在分派指令的时候,根据指令队列、重排序缓存等队列的资源进行指令的分派。分派的指令需要分配对应的ROBID等标志并在指令提交的时候释放它们。指令在完成微操作的解码后,每条微操作都有对应的指令的标记,分配的ROB资源是按照指令分配的,也就是同一个指令的微操作记录在同一个ROB的表项。
指令乱序执行完成,需要根据ROB ID进项按需提交,如果分支指令执行单元检测到预测错误时,需要根据ROB ID刷新流水线。ROB ID的分配原则是按顺序进行分配,每条指令分配一个ID后,然后ID加上1作为下一条待分配指令的ID。
根据指令对应执行单元的类型,指令队列设置ALU型指令保留队列、LSU型指令队列和浮点型指令队列等。每个指令队列的有自己的固有深度,并且有对应的年龄矩阵,每个指令队列分别对应着响应的执行单元的端口。只要执行单元有空闲或者当前指令队列存在较老的指令还没有发射,那么就会根据年龄矩阵发射出当前指令队列中最老的一条指令到对应的端口中去。
例如,一个指令队列的深度为8项,那么年龄矩阵就是一个8×8的矩阵,年零矩阵的每一行表示指令队列的位置,列表示与其项的年龄关系,即每一行对应了与其它7行的年龄关系。处理器在启动时,年龄矩阵复位为0,此后每分配一条新的指令在指令队列中,年零矩阵的新行更新为指令队列中已经有的指令有效向量。
指令有效向量表示该行的指令是否准备好,满足以下条件:
1)有指令写入指令队列当前项;
2)该项指令的源操作数已经准备好(通过前馈的方式或者已经准备好访问寄存器);
指令发射后,会根据指令中的源寄存器号访问物理寄存器获取操作数据,获取操作数据以后送到对应的执行端口去执行。如果指令中的源操作数来自数据前馈,则不需要访问寄存器。
8)乱序处理:执行端口对发射出来的指令进行乱序处理;
执行端口包括整形执行端口(Port0和Port1)、分支指令执行端口(Port2)、访存指令执行端口(Port3-Port5)和浮点指令执行端口(Port6和Port7),每种类型的执行端口都包括对应的指令的单元。
指令发射并从寄存器堆或者数据旁路获得操作数后,送入执行单元,执行单元功能部件属于通用部件。执行单元经过1-4周期返回结果后,写入到该微操作对应的指令的ROB表项中,称为该微操作提交,当一条指令的全部微操作提交以后,称为该指令提交。
9)ROB按序退休:指令执行完以后,写回到ROB的表项中,ROB根据指令的新旧排序,并退休已经完成的最老的指令;
ROB按序退休,包括:指令提交后等待退休,每周期退休4条指令,只有当ROB中最老的4条指令都提交后并且不发生例外的情况(指令没有出现执行的异常或者被中断触发)下,退休4条指令。
10)指令缓存:Write Buffer对已经的退休的LSU指令(也就是load和store指令)进行缓冲。
指令缓存,针对LSU的write buffer,如果退休的指令属于store型指令,因为store指令将数据写入到存储器需要花费很多时钟周期,通常是数百倍的寄存器访问周期,所以将退休的指令退休到write buffer,在其中实现store型指令写入存储器的操作。

Claims (10)

1.一种四发射RISC-V处理器微架构,其特征在于,包括前端和后端,前端和后端包括12级整型流水线;
前端用于:取指、分支预测、译码、寄存器重命名、指令派遣和寄存器堆访问;
后端用于:指令执行及重排序缓存,实现指令的按序退休;指令执行包括整数、浮点数和分支指令执行以及访存。
2.根据权利要求1所述的一种四发射RISC-V处理器微架构,其特征在于,前端包括取指一级、取指二级、译码级、微操作队列分配级、寄存器重命名级、发射级和寄存器访问级,共7级整型流水线;后端包括1~4级的执行级和退休级,共5级整型流水线。
3.根据权利要求2所述的一种四发射RISC-V处理器微架构,其特征在于,所述取指一级包括第一级BTB和ICache,第一级BTB用于第一级的分支预测,ICache用于完成指令取指,取指带宽为128bit,实现四条指令的取指;
所述取指二级包括预译码单元、第二级BTB、BHT和指令打包单元,预译码单元通过预译码信息译码出指令的类型,用于判断该指令是否访问第二级BTB;第二级BTB使用预译码信息和部分PC信息索引,得到分支指令的跳转地址;BHT用于记录跳转指令的历史,每周期移位一次;指令打包单元用于将来自取指一级的数据内容分割为四条指令;
所述译码级用于对来自取指二级的四条指令进行译码,指令译码时,根据预译码信息选择合适的译码器;译码级包括四个译码器,其中,三个简单的译码器,一个复杂译码器,简单译码器译码出的微操作数量不多于两个,复杂译码器用于对长指令进行译码,一次译码出两个以上的微操作;
所述微操作队列分配级用于缓存来自译码级解码出的微操作,同时每周期为后续流水线分配五条微操作;
所述寄存器重命名级用于对来自微操作队列分配级的五条微操作进行寄存器重命名,解决处理器指令中存在的WAR和WAW名字相关,在这一级中指令还是有序的,在为指令分配了新的物理寄存器号以后,把物理寄存器号和指令ID记录下来提供给ROB,ROB用这些信息记录指令的顺序和指令的写回寄存器;除此以外,寄存器重名命级在对微操作进行重命名以后,根据指令源寄存器和目的寄存器信息进行派遣;
所述发射级用于将来自于寄存器重命名级的微操作分类型缓存到不同的发射队列中;
所述寄存器访问级用于处理来自各个发射队列端口的访问请求。
4.根据权利要求2所述的一种四发射RISC-V处理器微架构,其特征在于,所述执行级包括整数执行单元、分支指令执行单元、乘法单元、除法单元和访存单元;
所述整数执行单元用于执行整数补码的加法运算,逻辑运算,以及移位运算;
所述分支指令执行单元用于计算分支指令的跳转条件和跳转的目标地址;
所述乘法单元和除法单元分别用于完成流水线式乘法和除法运算;
所述访存单元用于处理load和store指令,用于访问存储中的数据或者将数据写入存储中;
整数执行单元一个周期返回执行结果,乘法单元三个周期返回结果,除法单元三至四个周期返回结果,访存单元也有自己的流水级,包括数据缓存级、数据访问级、地址产生级和写回级;
所述退休级包括ROB和与寄存器重命名级共同维护的寄存器重命名表,寄存器重命名表的每一个表项包含指令的ID、指令的目的寄存器号和指令是否写回的标志;ROB的写入是有序的,按照来自寄存器重命名级的指令的顺序有序的写入,当执行级完成指令的全部微操作的执行以后,置位写回标志,表示这条指令已经提交,已经提交的指令中选择最老的指令进行退休,已经退休的指令生命周期结束;对于访存型指令,还设置write buffer,数据从write buffer写到存储器后才真正更改存储器中的数据。
5.权利要求1-4任一所述的四发射RISC-V处理器微架构的工作方法,其特征在于,包括:
1)取指:从指令缓存中取值,并判断指令是否是分支指令;
2)分支预测:如果指令是分支指令,则执行分支预测,即对分支指令的跳转方向和跳转地址进行预测,并将预测地址反馈,重新从预测的地址进行取值;
3)译码:取出正确的指令后,对指令进行译码操作;
4)微操作队列:缓冲来自译码级分解的微操作,并每周期向后级流水线传递5条微操作;
5)寄存器重命名:对来自微操作队列的微操作进行寄存器重命名,即为每条微操作分配对物理寄存器;
6)指令相关性检测:检测指令和微操作之间的RAW相关性,若存在RAW相关性,则执行旁路操作,将前面指令写的物理寄存器旁路给后续指令来读;
7)指令发射队列:对重命名和相关性检测完毕的指令,选择最老的指令发射给后续执行单元;
8)乱序处理:执行端口对发射出来的指令进行乱序处理;
9)ROB按序退休:指令执行完以后,写回到ROB的表项中,ROB根据指令的新旧排序,并退休已经完成的最老的指令;
10)指令缓存:Write Buffer对已经的退休的LSU指令进行缓冲。
6.根据权利要求5所述的四发射RISC-V处理器微架构的工作方法,其特征在于,取指,是指产生取指地址以及维护ICache返回指令块的地址;当ICache不产生暂停信号时,取指按地址顺序一直读取指令;当出现刷新时,取指根据不同的情况从取指地址重新取指;取指根据取指令的各种条件的优先级产生取指地址。
7.根据权利要求5所述的四发射RISC-V处理器微架构的工作方法,其特征在于,分支预测,包括两个阶段:
第一阶段为:在取指第一级访问ICache的取指阶段预测,第一阶段以16byte指令块为单位进行预测;第二阶段为:在取指第二级访问ICache的取指阶段预测,第二阶段根据具体的指令地址进行预测。
8.根据权利要求5所述的四发射RISC-V处理器微架构的工作方法,其特征在于,译码包括预译码阶段和译码阶段;
预译码阶段,采用完全二叉树分解的方法,每周期得到4条16bit或者32bit的指令;四发射RISC-V处理器微架构识别出特殊指令类型对应的opcode和func字段;根据得到的预译码信息的指令类型进行分支别名错误检查;
译码阶段,在解码级最多对4条指令并行译码,每条指令翻译为一条或者多条的微操作。
9.根据权利要求5所述的四发射RISC-V处理器微架构的工作方法,其特征在于,译码阶段将指令分解为微操作后,微操作的数目为四条或者以上,设置一个微操作队列,用于缓冲来自译码的微操作;
微操作队列具有4个写端口和5个读端口,写端口对应4个解码器,读端口读出5个微操作给寄存器重命名级;
微操作队列具有空满标志,如果微操作队列满,给出暂停译码级译码的控制信号;
微操作队列接收来自后级流水线的暂停信号;
10.根据权利要求5-9任一所述的四发射RISC-V处理器微架构的工作方法,其特征在于,指令相关性检测的具体实现过程包括:将当前指令的目的寄存器和所有前面的指令的两个源操作数逐一比较;如果当前指令的目的寄存器号与某一条指令的源寄存器号相同,则判定为当前指令与前序指令之间存在指令相关,把前序指令的源寄存器号传递给当前指令的目的寄存器号;否则,指令不存在相关,把当前指令分配的物理寄存器号传递下去;
指令发射队列中,指令发射的过程包括:指令重命名完成后,指令被分配到对应的指令队列;如果指令的源操作数都已经在寄存器中准备好或者通过旁路的得到,则该指令及已经准备好发射;从已经准备好的指令中根据指令的ROBID选出最老的一条指令进行发射;
执行端口包括整形执行端口、分支指令执行端口、访存指令执行端口和浮点指令执行端口,每种类型的执行端口都包括对应的指令的单元。
CN202211080018.8A 2022-09-05 2022-09-05 一种四发射risc-v处理器微架构及其工作方法 Pending CN115454504A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211080018.8A CN115454504A (zh) 2022-09-05 2022-09-05 一种四发射risc-v处理器微架构及其工作方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211080018.8A CN115454504A (zh) 2022-09-05 2022-09-05 一种四发射risc-v处理器微架构及其工作方法

Publications (1)

Publication Number Publication Date
CN115454504A true CN115454504A (zh) 2022-12-09

Family

ID=84303976

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211080018.8A Pending CN115454504A (zh) 2022-09-05 2022-09-05 一种四发射risc-v处理器微架构及其工作方法

Country Status (1)

Country Link
CN (1) CN115454504A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116719561A (zh) * 2023-08-09 2023-09-08 芯砺智能科技(上海)有限公司 一种条件分支指令的处理系统和方法
CN118034784A (zh) * 2024-04-08 2024-05-14 英特尔(中国)研究中心有限公司 Risc-v向量处理器和用于risc-v向量处理器的方法

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116719561A (zh) * 2023-08-09 2023-09-08 芯砺智能科技(上海)有限公司 一种条件分支指令的处理系统和方法
CN116719561B (zh) * 2023-08-09 2023-10-31 芯砺智能科技(上海)有限公司 一种条件分支指令的处理系统和方法
CN118034784A (zh) * 2024-04-08 2024-05-14 英特尔(中国)研究中心有限公司 Risc-v向量处理器和用于risc-v向量处理器的方法

Similar Documents

Publication Publication Date Title
US6697932B1 (en) System and method for early resolution of low confidence branches and safe data cache accesses
US7392369B2 (en) Decomposing architectural operation into speculative and architectural micro-operations for speculative execution of others and for violation check
US8069336B2 (en) Transitioning from instruction cache to trace cache on label boundaries
US5471598A (en) Data dependency detection and handling in a microprocessor with write buffer
US5651125A (en) High performance superscalar microprocessor including a common reorder buffer and common register file for both integer and floating point operations
US5584009A (en) System and method of retiring store data from a write buffer
US20190108035A1 (en) Load-hit-load detection in an out-of-order processor
US7003629B1 (en) System and method of identifying liveness groups within traces stored in a trace cache
US9710272B2 (en) Computer processor with generation renaming
US7711934B2 (en) Processor core and method for managing branch misprediction in an out-of-order processor pipeline
CN115454504A (zh) 一种四发射risc-v处理器微架构及其工作方法
US10579387B2 (en) Efficient store-forwarding with partitioned FIFO store-reorder queue in out-of-order processor
EP0651331B1 (en) A write buffer for a superpipelined, superscalar microprocessor
US5740398A (en) Program order sequencing of data in a microprocessor with write buffer
US5784603A (en) Fast handling of branch delay slots on mispredicted branches
US5727177A (en) Reorder buffer circuit accommodating special instructions operating on odd-width results
US9841974B2 (en) Renaming with generation numbers
US20100306513A1 (en) Processor Core and Method for Managing Program Counter Redirection in an Out-of-Order Processor Pipeline
US6286094B1 (en) Method and system for optimizing the fetching of dispatch groups in a superscalar processor
EP0778519B1 (en) Multiple instruction dispatch system for pipelined microprocessor without branch breaks
JP2815236B2 (ja) スーパースカーラマイクロプロセッサのための命令ディスパッチ方法及びレジスタ競合についてのチェック方法
US7694110B1 (en) System and method of implementing microcode operations as subroutines
WO2007084202A2 (en) Processor core and method for managing branch misprediction in an out-of-order processor pipeline
US7783692B1 (en) Fast flag generation
US6304959B1 (en) Simplified method to generate BTAGs in a decode unit of a processing system

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