首页 > 代码库 > or1200处理器的数据流图
or1200处理器的数据流图
以下内容摘自《步步惊芯——软核处理器内部设计分析》一书
完整的OR1200处理器流水线数据通路图,如图9.12所示,图中显示了数据处理类、特殊寄存器访问类、转移类、异常处理类、乘法除法类、加载存储类指令处理过程中流水线各个阶段的数据流转。
(1)取指阶段:GENPC模块计算指令地址,然后通过指令Wishbone总线从指令存储器中取得指令,取得的指令送入IF模块,该指令进入流水线。
(2)译码阶段:取出指令需要的通用寄存器的值dataa、datab,同时对指令中可能有的立即数进行符号扩展或零扩展得到id_simm,OPERAND_MUX模块从中选择两个数据作为下一步的运算数据operand_a、operand_b,为了解决流水线数据相关的问题,将执行阶段计算的结果muxout也作为OPERAND_MUX模块的备选数据。
(3)执行阶段:分七种情况:
A、如果是数据处理类指令,那么ALU模块依据操作码alu_op、alu_op2、comp_op,对操作数a、b进行运算,a、b就是译码阶段的输出operand_a、operand_b,计算过程会改变SPRS中特殊寄存器SR的CY、OV、F位,计算的结果result输出到WB_MUX模块。
B、如果是特殊寄存器访问类指令,那么SPRS模块通过a、ex_simm计算SPR地址,依据指令进行SPR的读写操作,写操作时将b的值写入SPR,读操作时将SPR的值读入并通过to_wbmux输出到WB_MUX模块。
C、如果是转移类指令,那么GENPC会依据输入的ex_branch_op、ex_branch_addtarget、操作数b的值确定新的指令地址icpu_adr_o,其中ex_branch_addtarget作为相对转移时的目标地址,其计算方法是处于执行阶段指令地址加上指令中26位立即数的符号扩展,操作数b作为绝对转移时的目标地址。如果转移指令是l.jalr、l.jal,则还会将转移指令地址加8的值送入WB_MUX模块。
D、如果是异常处理类指令,或者发生了异常,EXCEPTION会判断异常类型,并输出到GENPC模块,GENPC会依据异常类型except_type确定新的指令地址icpu_adr_o。
E、如果是乘法除法类指令,那么MULTI_MAC模块依据操作码,对a、b进行乘法、除法、乘累加等运算,运算结果result输出到ALU模块,此时ALU的输出result就等于乘法除法运算结果。
F、如果是存储类指令,那么LSU会依据muxed_a、ex_simm计算要存储到的目的地址,然后将操作数b的值通过数据Wishbone总线的接口dcpu_dat_o送入数据存储器。
G、如果是加载类指令,那么LSU会依据muxed_a、ex_simm计算要加载的数据地址,加载数据通过数据Wishbone总线送入LSU模块的接口lsu_datain,LSU模块将从中取出有效数据然后通过lsu_dataout送入WB_MUX模块。
WB_MUX模块是一个多路选择器,依据rfwb_op从多个输入中选择一个作为输出,对数据处理类、乘法除法类指令而言WB_MUX将ALU的计算结果作为输出muxout的值,对于特殊寄存器访问类指令而言WB_MUX将SPRS的输出to_wbmux作为muxout的值,对于加载类指令而言WB_MUX将LSU的输出lsu_dataout作为muxout的值,如果存在要写入的目的寄存器,那么muxout将被写入目的寄存器。对于l.jalr、l.jal指令而言,转移指令地址加8的和作为muxout的值,并且写入寄存器r9。