计算机组成原理 :处理器设计

单核计算机系统:

cpu的组成:

如何设计一个处理器?:

支持简单指令集的处理器实例:

回顾一下格式:

因此我们可以看出我们的需求:

数据通路组件选择:

我们使用的组件有哪些?:

risev主要状态单元:存储器:

数据存储器:

指令存储器:

这个部分是没有写入操作的,说以看起来既较简单。

寄存器组:

就是之前的那些经常处理的老朋友。

数据通路的需求:

这一看到数据通路基本上都是和计算和数据存取有关。这些肯定不能改变程序代码对吧,所以之前的指令存储器不能由数据通路修改。

 ALU是计算器:

现在知道为什么指令码里要有func部分了吧?就是用在这里。

设计技巧:

简单运算:

减法运算:

X-Y的补码就是X的补码加上-Y的补码。这里的尚且只有一位

部分指令的数据通路设计:这回是有关指令的了。

我们现在是在第三步。

不管是什么指令,肯定都要取指:

肯定也要更新pc:

这里解释一下pc是啥:pc就是程序计数器(program counter),不然怎么记录自己运行到哪一行指令了。一个指令4个字节,所以一般是加4.当然也可以直接跳转:

 比如我们要实现一个add指令:

我们首先要取指:

译码:

 计算:

算完了当然就要存回寄存器:

总结的时序图:

实现减法器:

 

 

I形指令:

 

 

这个是add的模型,但是我的addi没有rs2,怎么办?:

 

通过这个Bsel来控制使用rs2还是立即数。

immGen是拿来干嘛的?是符号扩展的:

 

这样我们就可以制造R形和I形公用的数据通路了:

 

还有特殊的I形指令:load

 

我们现在来想想怎么再加上这个部分:

 

DM可以把rs1和imm加起来得到的地址对应的数据取出来,然后通过MUX选择是要地址还是数据(这里当然是数据,只是如果不加这个部件那你以后就再也不能用R形和imm加法了)。

这样load指令也就解决了。

 

 现在来看看s指令:

记得吗?s指令的rs1是在汇编代码里右边的那个,是存储地址的那个。

 

因为和之前的数据通路是一脉相承的嘛,和load一样是用rs1和立即数的和来算地址。不过这个地方注意DM有时钟了——存储要时钟,读取不要。

 

S形也o了,现在来看B形:

 

 

 

 

 用加法器计算Pc加imm,就得到了下一步的指令地址(假如要跳转的话)。这里详细解释一下BranchComp(分支比较):

 

特殊的I形指令:jalr(一个寄存器,一个立即数,还有一个目的寄存器,所以是I形指令):

 

 

 

jal则是j形指令(因为它没有寄存器) :

 

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值