小飞飞 发表于 2020-7-25 19:21:39

RSIC-V——存储器访存指令

1. load/store 存储器访问指令
该指令是RISCV架构专门用来访问存储器的指令,其他任何指令均无法访问存储器。一般load采用I型指令格式,store采用S型指令格式。有效字节地址是通过将寄存器rs1与符号扩展的12位偏移量相加而获得的。Load指令将存储器中的一个值复制到寄存器rd中。 Store指令将寄存器rs2中的值复制到存储器中。load/store指令是让寄存器和存储器进行数据交换,虽然不存在运算,但是都会经过完整的数据通路。


举例说明指令执行过程:
例如sw rs2, imm(rs1)   
即为将rs2寄存器中存放的值保存到rs1寄存器值加上立即数imm值得到的相加结果的内存地址的内存单元


在当前时钟下的PC值建立后,PC值被存入指令存储器和加法单元。加法单元得到PC+4;


根据当前PC值从指令存储器中(Icache)取出指令机器码,根据机器码中的寄存器编号直接访问寄存器文件,其中指令中立即数字段送给立即数生成单元,指令的机器码送给控制器;


控制器获得机器码后根据指令编码格式进行译码,产生控制信号,其中PC选择信号PCSel为0,


立即数编码选择信号ImmSel为S(表明为Store指令),控制立即数生成单元生成S型立即数编码,


由于sw指令没有写回寄存器的操作,所以写使能端信号RegWEn为0,


写回选择信号WBSel也为*,表示不影响结果;


sw不涉及操作数的比较,因此对分支比较器的控制信号BrUn和比较结果信号BrLT、BrEq都无作用;


B操作数选择信号Bsel为1,选择立即数生成单元输出的立即数值接入ALU的B操作数端口,


A操作数选择信号Asel为0,选择寄存器文件输出的DataA接入ALU的A操作端口;


ALU的控制信号ALUSel为add,控制ALU输出加法运算结果,作为数据存储器的访问地址值;


数据存储器读写控制信号MemRW=write,表示写使能有效;使接入存储器输入数据段的寄存器文件原寄存器2的内容保存到存储器中。


最后下一时钟上升沿到来时,将更新的PC+4值写入到PC寄存器,同时原寄存器2的内容写入到数据存储器中。






2. 存储器屏障指令
fence指令用于屏蔽"数据"存储器执行的顺序。


页: [1]
查看完整版本: RSIC-V——存储器访存指令