Menu Close

RISC-V32个寄存器和译码模块(1)CPU经典五级流水线

经典五级流水线, RISC-V 五级流水线

在cpu 设计中,经常会使用流水线设计, 相对早期的状态机逻辑来说,流水线设计会有效的提高cpu 的效率。 

 

相关参考文章:

RISC-V 教学教案

 

使用流水线设计,会在现有的生产工艺下,相同系统主频下提高cpu的效率,通常我们会使用MIPS 和MIPS/Mhz 等标准来衡量。

 

其中MIPS 是指 million instruction per second,表示每秒多少百万条指令, 例如 5MIPS 是指每秒500万条指令。 这是一个绝对值,取决于流水线设计的有效性, 分支预测, cpu 主频高低等等。

MIPS/Mhz  表示 CPU 在每 1MHz 的系统时钟下,运行速度下可以执行多少个MIPS。如 10MIPS/MHz,表示如果 CPU 运行在 1MHz 的频率下,每秒可执行1000万条指令,如果 CPU 运行在 5MHz 的频率下,每秒可执行五千万条指令。这个参数剔除了系统时钟的参数, 这样就和生产工艺无关, 用来评估cpu 的设计性能, 而不是生产工艺性能。

 

流水线的级数越多, 每一级流水线的逻辑就越少,那么生产的时候,时钟的主频就会越高。 缺点是:流水线级数越多,需要的cpu设计资源越多,cpu 设计也会更加复杂,处理流水冲突的成本越高,同时,相对功耗也会增加。因此,cpu 设计多少级流水线,是由产品的定义(定位)来决定的。

对于一些低功耗,手持,或者移动设备, cpu 设计希望的是待机时间长,产品功耗低, 对于性能不是优先考虑的。这样就可以减少流水线级数,甚至可以使用状态机来替代。 对于高性能的设备,性能是第一优先,然后才是功耗,那么会相应的增加流水线级数,从而得到更高的主频。

状态机逻辑

 

举例:

ADDI x13,x12,5对应的机器码为0000_0000_0101_01100_000_01101_0010011,对应的16进制为32’h0056_0693

图3 ADDI机器码格式 [2]

 

流水线逻辑:

在经典的流水线设计中,5级流水线是非常有代表性的。 它主要有:

1)取指IF,          (instruction fetch)

2)译码ID,      (instruction decoder)

3)执行EX,     (execution )

4)访存MEM,(access memory)

5)写回WB        (write back)

5个部分(5级)组成。

pipeline_5stage
pipeline_5stage

cycle 1 : 第1条指令的取指

cycle 2: 第1条指令的译码,  第2条指令取指

cycle 3 : 第1条指令的执行第2条指令译码第3条指令取指

cycle 4 : 第1条指令的访存第2条指令执行第3条指令译码第4条指令取指

cycle 5 : 第1条指令的写回第2条指令访存第3条指令执行第4条指令译码第5条指令取指

cycle 6 : 第6条指令的取指第2条指令回写第3条指令访存第4条指令执行第5条指令译码

cycle 7 : 第6条指令的译码, 第7条指令取指第3条指令写回第4条指令译码第5条指令执行

cycle 8 : 第6条指令的执行, 第7条指令译码, 第8条指令取指第4条指令执行第5条指令访存

cycle 9 : 第6条指令的访存, 第7条指令执行, 第8条指令译码, 第9条指令访存第5条指令写回

可以看到,  第一个时钟周期内, 只有1条指令操作被执行; 第二个时钟周期内,有2条指令操作被执行;第三个时钟周期内,有3条指令操作被执行;

第四个时钟周期内,有4条指令操作被执行; 从第五时钟开始, 每个时钟周期,都有5条指令操作被执行。 这相当于之后的每个时钟周期内,都有一个完整的指令被执行完毕(取指,译码,执行,访存,回写)。这是cpu的效率达到最高值(理想状态)。 由于cpu 在执行指令时,会遇到跳转, 分支跳转,长周期指令(乘法,除法),长周期访存(flash, ddr等等) 流水线会发生暂停,甚至退出重来等等情况。为了减少暂停,退出情况发生, 各种不同的cpu 都有相应的手段来尽量避免,(哪一个cpu 预测的比较好, cpu 的效率自然就高,但同时也付出资源和功耗为代价)。

 

RISC-V 5级流水线设计

risc-v 也有经典的5级流水线设计,但也有2级,3级,7级,甚至更多级的流水线设计,这取决于公司对产品的定义,riscv 本身并没有规定一定要使用多少级流水线。

RISC-V 5 STAGE PIPELINE
RISC-V 5 STAGE PIPELINE

第一级取指:

RISC-V PIPELINE STAGE 1
RISC-V PIPELINE STAGE 1

取指主要是控制pc (program counter)一般情况下,每个时钟周期pc = pc + 4; 同时将指令送给译码模块; 但是如果有BRANCH,JAL,JALR,AUIPC ,将修改pc 为这些指令计算出来的值,并且以计算后的pc 为地址, 读取相应地址的指令, 送给译码模块。

第二级译码:

RISC-V PIPELINE STAGE 2
RISC-V PIPELINE STAGE 2

译码模块负责从指令中分离出来:

1)具体是什么指令(ADDI, AND, JAL, LUI 等等),

2)需要 哪些寄存器配合 下一级的执行操作 (rs1, rs2, rd)

3)load/save 等需要存储器的地址(得到地址中的数据)

第三级执行:

RISC-V PIPELINE STAGE 3
RISC-V PIPELINE STAGE 3

根据译码的结果,进行相应的计算:包括add, xor, or,and,  pc 跳转, 分支跳转等等。在变级的流水线(不是固定5级流水线设计中)也可以根据指令

直接回写。

第四级访存:

RISC-V PIPELINE STAGE 4
RISC-V PIPELINE STAGE 4

load, store 等操作 访问存储器,或者是csr 寄存器的访问。

第五集回写:

RISC-V PIPELINE STAGE 5
RISC-V PIPELINE STAGE 5

将最终的结果回写到32个通用的寄存器中,完成指令周期的操作。

 

流水线可以设计为2级,3级,5级 ,更多级流水线。 但也可以被设计为变级流水线, 根据不同是指令,迅速完成整个指令的操作,从而加快cpu执行速度,

例如 add  x2, x3, x4  没有访存,执行后,就可以直接回写了。

Posted in FPGA, FPGA开发板, IC, RISC-V, RISC-V IPcore设计, RISC-V 教材教案, RISC-V开发板, 文章

发表评论

您的电子邮箱地址不会被公开。

Leave the field below empty!

相关链接