首页 > 其他 > 详细

or1200处理器的数据流图

时间:2014-05-08 17:23:18      阅读:1072      评论:0      收藏:0      [点我收藏+]

以下内容摘自《步步惊芯——软核处理器内部设计分析》一书


      完整的OR1200处理器流水线数据通路图,如图9.12所示,图中显示了数据处理类、特殊寄存器访问类、转移类、异常处理类、乘法除法类、加载存储类指令处理过程中流水线各个阶段的数据流转。


bubuko.com,布布扣

      (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。


or1200处理器的数据流图,布布扣,bubuko.com

or1200处理器的数据流图

原文:http://blog.csdn.net/leishangwen/article/details/25298537

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!