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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: oldbeginner

开源软核学习笔记05(继续OpenMIPS开发笔记)——2014_1_31

[复制链接]
 楼主| 发表于 2014-2-11 21:19:42 | 显示全部楼层
************************************
day 6 的学习

和day 4类似
***********************************


day 6 在流水线结构上是很普通的,只是多了一个notmove 判读变量,为了简洁,是直接从 上面 day 5-2 修改过来,同时去掉双周期指令的一些特征 cnt变量。

day6流水线.gif
 楼主| 发表于 2014-2-11 23:03:52 | 显示全部楼层
本帖最后由 oldbeginner 于 2014-2-12 00:39 编辑

******************************
day 7-1 跳转指令
袋鼠的悲剧
******************************


感觉哑剧已经可以表达学习思路了,

day7-1流水线.gif

再回到吃饭问题上,
跳转指令流水线.gif
 楼主| 发表于 2014-2-12 20:36:45 | 显示全部楼层
**************************
day 7-2
分支指令流水线和跳转指令一样
**************************


只看大结构,还是比较简单的。
分支指令相比跳转指令的区别就在于多了一点判断语句,同时对转移目标地址的计算方法不同。
发表于 2014-2-13 07:43:08 | 显示全部楼层
Good sharing; interesting content.
 楼主| 发表于 2014-2-13 21:25:54 | 显示全部楼层
*******************************
钓鱼后,要等一下再吃

day8
*******************************


day 8 的内容和day 5-2 类似,如果load指令后跟一个相关的指令,则后一个指令要停一下(操作方法感觉和双周期指令一样)。

增加dmem模块,因为变量太多,流水线省略了一些细节
day8流水线.gif

再用一个故事来说明,就是钓鱼后,不是马上吃,要先处理一下再吃
钓鱼吃鱼等待.gif
 楼主| 发表于 2014-2-15 08:17:10 | 显示全部楼层
************************************
day 9
感觉很奇怪
*********************************


day9流水线.gif

还是从day3 衍生,代码越来越多,寄存器越来越复杂。
发表于 2014-2-15 23:04:09 | 显示全部楼层
回复 25# oldbeginner


    是的,为了解决load相关问题
 楼主| 发表于 2014-2-16 08:57:11 | 显示全部楼层
本帖最后由 oldbeginner 于 2014-2-16 09:07 编辑

*******************************
指令的执行过程

借鉴CS 3410 - Spring 2012 Cornell University Computer Science Department, 的课件
******************************


day9 和 day10 都要使用 CP0,感觉还是比较复杂的,但是开发笔记描述不多,我也暂时先放一遍。

大概是复习时间了,再复习开发笔记前,先看看其它资料是然后。

执行的代码
add         r3, r1, r2;
nand         r6, r4, r5;
lw         r4, 20(r2);
add         r5, r2, r5;
sw         r7, 12(r3);

翻译如下,
   add        3   1    2   ;  reg 3 = reg 1 + reg 2
   nand          6   4    5   ;  reg 6 = ~(reg 4 & reg 5)
   lw                 4   20 (2)  ;  reg 4 =  Mem[reg2+20]
   add        5   2    5   ;  reg 5 = reg 2 + reg 5
   sw            7    12(3)   ;  Mem[reg3+12] = reg 7

使用的流水线
12.JPG

过程如下,其中后半段的动画细节少了,和前半段类似。
指令流水线实例.gif

感觉结构很清晰,和仿真软件效果差不多。

每个时钟状态
13.JPG

14.JPG

15.JPG

16.JPG

17.JPG

18.JPG

19.JPG

20.JPG

21.JPG
 楼主| 发表于 2014-2-17 08:28:35 | 显示全部楼层
*****************
感觉OpenMIPS是单周期时序

虽然仿真看起来流水线
*****************

是在看data hazards时,有了这个额外的想法的,因为这五个阶段是顺序执行的,并不是并行的。这五个阶段分别执行不同的指令,并采用了倒序的方式。实现了流水线类似的功能,并且也有hazards等现象(而单周期时序不会有)。现在对基本概念还是不清楚,后面再展开理解。
发表于 2014-2-17 10:43:23 | 显示全部楼层
回复 29# oldbeginner


    您在仿真时可以发现一个周期就可以执行一条指令,而且指令的结果并不是立即写入对应寄存器,比如:add指令,从进入处理器到将最终结果写入目的寄存器,这之间是有几个时钟周期间隔的,从这里就可以看出来openmips流水线的特点
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-5-3 09:51 , Processed in 0.032343 second(s), 7 queries , Gzip On, Redis On.

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