Posts

Showing posts from November, 2022

Datapath of RSIC-V instruction in CPU

基于伯克利CS61C,获得了一点关于CPU处理指令的新知识,记录一下。 1.R-type 对于R-type的instruction来说,在CPU的datapath中会以以下流程来被执行/操作。  以32位CPU来说: 首先,Program counter将会从IMEM(Instruction memory)中提取新指令,然后Program Counter自身+4来记录新instruction的地址。 IMEM随后将被执行的指令的全部32位机器码传递给CPU的Control,并将instruction中数据的部分的地址(rd,rs1,rs2)分别拆开传递给Register File。  Register File是一种寄存器阵列,可以快速获取寄存器的值,通过传递进来的Address of rd/rs1/rs2, Register File可以快速获取他们对应的value。 然后Register File将需要输出的值传递给ALU进行数据运算,而ALU具体执行哪一种运算,则是根据Control中储存的32位instruction的机器码中的func3和func7部分来决定,这也被叫做ALUsel(ALU select)。 随后ALU将执行完运算操作的值再返回给RegFile中rd的地址。从而完成整个运算。 2.I-type I-type的instruction就是immediate-type,立即数型指令,I-type的instruction并不需要提供第三个寄存器,只需要rd,rs1。所以整个的datapath和R-type略有不同。 I-type的instruction在当IMEM传递指令给CPU的control时多了一条分支路线,IMEM会将instruction中的立即数的部分传递给一个新结构,取名为Immgen,即,immediate generator,假若CPU是32位的,那么immGen会将从instruction取下的7位立即数补位成32位的,随后将数据传递给一个MUX(数据选择器),MUX需要一个Bsel信号来判断选择是将rs2的数据传递给ALU还是immGen传递过来的立即数。 其他都与R-type一致。 具体内容可根据以下slide来学习: https://inst.eecs.berkeley.edu/~cs61c/fa17/lec/11/L11

Understanding of Register

Image
之前一直不是很理解register的作用,最近学习Chisel的时候逐渐有了点理解,记录一下。    寄存器是由时钟操控的存储单元,只有当时钟运动时,寄存器才有可能工作。    比如上图中的结构,这是一个同步四位移位寄存器,每当时钟(上升沿或下降沿)来临时,寄存器才可传递数据,即只有时钟来临时,才可移位。由于图中的clock直接与四个寄存器并联,所以时钟来临时,四个FlipFlop都是同时工作的,所以是同步电路。    在Chisel中,正是由于在第二章后引入了register,所以电路设计由之前的组合逻辑电路转为同步时序电路,继而在tester的书写中需要引入step函数来进行时钟信号的传递。