在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: oldbeginner

开源软核学习笔记04(从10天实现处理器—OpenMIPS开发笔记找思路)——2014_1_19

[复制链接]
 楼主| 发表于 2014-1-26 07:27:37 | 显示全部楼层
本帖最后由 oldbeginner 于 2014-1-26 07:29 编辑

*************************************
1、取指阶段的计算机组成原理理解

*************************************

71.JPG

72.JPG

73.JPG

*********************
哪个好呢?
取值阶段.gif
 楼主| 发表于 2014-1-26 08:18:27 | 显示全部楼层
*************************************
2、译码阶段的计算机组成原理理解

*************************************

译码阶段.gif

译码阶段的输入赋值和输出赋值是在不同周期执行的,

输出是立即执行,变量赋值;
输入是下一周期执行,信号赋值。

74.JPG

*****************************************

64.JPG
 楼主| 发表于 2014-1-26 09:44:42 | 显示全部楼层
*************************************
3、执行阶段的计算机组成原理理解

*************************************
访存阶段.gif

ID/EX 和上一阶段不一致的原因是,两者都是局部的展示,不是完整的。

75.JPG

*********************************
执行阶段.gif
 楼主| 发表于 2014-1-26 09:49:47 | 显示全部楼层
*************************************
4、访存阶段的计算机组成原理理解

*************************************
访存阶段2.gif

76.JPG

确实很简单

*************************************
memory stage.gif
 楼主| 发表于 2014-1-26 10:03:50 | 显示全部楼层
*************************************
5、回写阶段的计算机组成原理理解

*************************************

回写阶段2.gif

78.JPG

79.JPG

**********************************
59.JPG
 楼主| 发表于 2014-1-26 10:30:03 | 显示全部楼层
******************************
regfile 的接口 rf_o 和 rf_i

******************************

rf_o 和 rf_i 的定义在stdlib.vhd 文件中,
rf_o --iu与Regfile之间的接口信号,相对Regfile而言是输入

rf_i --iu与Regfile之间的接口信号,相对Regfile而言是输出

接口映射是在 OpenMIPS.vhd 文件中,

80.JPG

还不理解映射是如何实现的,下一步再理解。
 楼主| 发表于 2014-1-27 07:06:11 | 显示全部楼层
***********************************
端口映射的更正

***********************************
上面的示意图理解错了,

在OpenMIPS.vhd 文件中,
        component iu   port (
                 clk   : in  std_logic;
                 rst  : in  std_logic;
     imem_addr : out word;
     imem_data : in  word;

                 rf_o   : out iregfile_in_type;            
                 rf_i   : in  iregfile_out_type
                 );

但是映射时,
iu0 : iu port map (clk, rst, imem_addr, imem_data, rf_i, rf_o);

iu映射时,rf_i 和 rf_o 颠倒顺序,这样实际情况如下图,

81.JPG

82.JPG

**********************************

再复习一下,
31.JPG
 楼主| 发表于 2014-1-27 07:48:58 | 显示全部楼层
*********************************************
完整的流水线

*********************************************
完整流水线.gif

69.JPG

83.JPG
 楼主| 发表于 2014-1-28 06:21:49 | 显示全部楼层
按照iu.vhd 的顺序再执行一遍,

完整流水线倒序.gif

5个阶段并不是并发的。
 楼主| 发表于 2014-1-28 06:54:57 | 显示全部楼层
****************************************
inst_decode 过程
****************************************
首先理解一下什么是过程
84.JPG

然后,对inst_decode 理解
85.JPG

86.JPG

*************************************
                 case op is
                        when EXE_ORI  => rfe1 := '1'; wreg :='1'; rdo := inst(20 downto 16);
                                         aluop := EXE_OR_OP;  alusel := EXE_RES_LOGIC; inst_valid := '1';
                                         imm(15 downto 0) := inst(15 downto 0);
                        when others =>
                 end case;
**************************************

EXE_ORI 的定义在stdlib 中, 因为只处理ORI函数,所以 when others=> 什么都不做。

****************************************
logic_op 过程
****************************************
  procedure logic_op(r : registers; aluin1, aluin2: word;
    logicres : out word) is
          variable logicout : word;
        begin
            logicout := (others => '0');
                 case r.e.aluop is
                        when EXE_OR_OP  => logicout := aluin1 or aluin2;
                        when others => logicout := (others => '-');

                 end case;
                 logicres := logicout;
  end;

或 运算的实现。

****************************************
opdata_select 过程
****************************************
  procedure opdata_select(r,v: registers; opdata1 : out word; opdata2: out word) is
        begin
           if r.e.rfe1='0' then
             opdata1 := r.e.imm;                            --源操作数是立即数
     else     
       opdata1 := r.e.reg1;                     
     end if;
     
     if r.e.rfe2='0' then
             opdata2 := r.e.imm;                            --源操作数是立即数
     else     
       opdata2 := r.e.reg2;                     
     end if;
  end;

begin
*******************************

通过rfe1 rfe2 来控制
--操作数选择,是立即数还是寄存器的值
rfe1 rfe2的值是在 inst_decode 过程中被确定的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-24 09:25 , Processed in 0.022976 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表