笔记—— 24指令硬布线单周期mips cpu设计 (华中科技大学/谭志虎)计算机组成原理/计算机硬件系统设计

用csdn查计算机组成原理很久了,但是总是很痛苦,因为各种不能运行,我这次闲着把自己写的电路图传上来,参考过网络资源和学校给的数据,但是有的地方我自己没好好学,也解释不明白。

先做运算控制器和控制信号自动生成。

 

运算控制器:

这里有两张图,

 

 

根据这两张图,一个个对,获得对应指令,不同操作下的ALU_OP值,如果找不到就是没有,就写“X”。填入下面的表格的框里。

 

 

然后控制信号表达生成里面就有了ALU_OP的s3,s2,s1,s0的真值生成表达式,然后复制到lologisim里面就行了。

 

控制信号:

这里华科的没有给控制信号,因为听说是谭志虎老师想让学生自己动手查,我们老师给了,但是因为和网上一些资源有一定程度的出入,我无法保证他的完全正确。我自己做了几个修改后能正常跑马灯 ,我就完全按照他的来了,然后添了一个信号。

上表:

就是如果右边部分控制信号栏里面的有这个信号,就在表格里面置1,当然ALU_OP不用管,它是上一个元件里面完成了。

注意:我在23行LW里面添了一个ALU_SRCB,图里面没有。

 

上图:

 

然后,把生成的表达式逐个填到logisim里面这趴完成了。

 

然后上cpu电路图:

 

目前在网上看见了三个这个电路图,一个知乎的和csdn上面的一个哥们的很像,但是有点问题,一个是syscall那边连的数字是22H,另一个是在底下立即数0-25那里原理上是左移两位后左边接上pc高四位,或者PC =PC31..28 || instr_index|| 00,当然深究都是6个0,只是原理问题。

还有另一个csdn上的图,全是散图的哥们,那个比较完整,但是和我的控制信号不一样,所以有点出入。

 

注意:这张图有两个时钟,不能都连,

 

第二个按下控制位能暂停时钟周期。如果都连,就会变红。选一个就行。

一个跑马灯跑完后,按下go键,重新跑。

 

下面是我写的24个指令的运行原理,复杂冗长,而且不完整,或者不正确,因为我不知道regfile的原理,所以这部分都摸棱两可。

 

  1. SLL:

指令从随机存储器出来,不是其他指令,直接一路通过pc,到指令存储器,到分线器,分为多个字段。作为R型指令有ALU_OP=0000,和RegWrite,RegDst有信号,syscall无信号,那么RS,RT字段直接进入,R1#,R2#,RegDst有信号,选择Rd进入W#,否则选择Rt进入W#,Rd作为目的寄存器,不参与。信号从R2出来,进入选择器,没有ALUSRCB信号,不选择,进入Alu。与此同时,分线器shamt段信号进入ALU,在ALU_OP作用下产生想坐偏移。不是bne,beq指令,也就是“=”没有信号。出来后,进入随机寄存器,进入对应地址,R2产生分支进入D,因为没有memwrite,所以有数据就不写,没数据就填写。没有MemToReg信号,选择刚才从D进去的数据,也就是R2,就是RT的数。没有JAL信号,直接出来,返回din,回写,没有Regwrite,写到rd段。

而另一边,,因为不是syscall信号,ledout无信号,那么leddata无数据。而halt无信号,回到pc,halt的非为有信号,可以进入下一个周期。总周期数那里的halt同样的道理。

  1. SRA:

思路同上,只不过最后,因为ALU_OP不一样,选择了向右偏移。

  1. SRL:

同上。

  1. ADD:

R型指令因为部分控制信号只有AlU_OP不同,另外两个都是RegWrite,RegDst

所以前半段都相同,而在进入ALU后,因为ALU_OP的不同所以变化。这里ADD指令,进入ALU后,在ALU_OP作用下,R1和R2相加,也就是Rs和Rt相加,信号出来,没有等于信号,不写入。R2分支D进入。Ledout无信号,leddata无数据。下一个。

  1. ADDU:同上,不过不考虑overflow;
  2. SUB:同上,不过从加变成了rs-rt;
  3. AND:同上,变成了“与”
  4. OR:同上,变成“或”
  5. NOR:同上,不过时“或非”

10.SLT:同上,如果rs<rt,那么rd=1,如果rs>rt,rd=0;

11.SLTU:同上,不论rs>rt还是rs<rt,rd都为0,等于另算;

12.JR:

JR属于R型指令,目的是令PC等于Rs。

指令出来,没有其他指令,过pc,一路通过到单周期硬布线控制器,被识别,只有JR产生信号,直接返回到PC前的选择器,R1也就是rs产生支路返回到这个选择器,被选中,进入pc;完成。其他指令没有,直接下一个。

13.SYSCALL:

没有其他信号,一路通过到单周期硬布线控制器,只有syscall产生信号,syscall控制,在多路选择器上放弃rs、rt信号,选择$2和$4寄存器,rd仍然进入寄存器。这部分完成。另一边,如果$v0等于34(16进制下为22),加上syscall有信号,halt就有了信号,ledout有信号,到另一边,输出$a0数据,如果$v0不等于34,ledout没信号,但是halt有了,因为halt的反作用在pc上,被暂停。这时按下go,有了信号,开始下一个指令。这时,存在寄存器里面的02和04号寄存器数据就出来了。

14.J:

作为一个J型指令,直接在分线器的作用下,将pc的高四位,和立即数段左移两位,加上两个00,返回到pc。可以用移位器,移位产生这个效果,可以高四位和低二位直接接地置0,反正数字都是0.其他部件无信号,不工作。

15.JAL:

指令过单周期硬布线控制器,JAL和RegWrite有信号,用多路选择器,放弃原来的目的寄存器,选择31号寄存器,后面一路不管,直到返回信号段,因为JAL有信号选择pc+4,返回到Din写入,也就是写入31号寄存器。另一边,同上,类似J型指令。

这里选择将J和JAL用或门连接。有一个有信号,就会允许通过PC =PC31..28 || instr_index|| 00

16.BEQ:

通过单周期硬布线控制器后,同上,beq有信号,但是因为事比较操作,如果rs和rt相等,那AlU的=接口就会直接输出信号,和beq进行与操作,输出有信号,说明beq指令成功了,回到另一个多路选择器。另一边,通过加法器,将pc+4,再左移两位,获得beq信号后,返回到pc。而只有signedext有信号,而AluSrcB无信号,虽然产生了signext但是没了后文。

17.BNE:

与beq相反,如果rs和rt不等,那么ALU的=位没有信号,再取反和bne指令与操作,就有了信号,再返回pc。剩下的和beq相同。

18.ADDI:

其他同上;

部分信号为ALU_OP,SignedExt,RegWrite,ALU_SRCB。

有SignedExt和ALU_SRCB信号,那么产生的立即数服啊后扩展信号可以进入ALU,在ALU_OP作用下加上RS进入ALU,然后在Alu内相加,到随机存储器。再从一路不改变回到Din,因为RegWrite,进行回写,写到rt寄存器。再往后。

19.ANDI:

同上,不过,没有signedext,所以选择了0扩展立即数,在ALU_OP作用下进行与操作。

20.ADDIU:

类似ADDI;

 

21.SLTI:

类似ADDI和ADDIU,ALU_OP为比较,如果rs小于立即数符号扩展后的数,rt=1,否则rt=0;

22.ORI:ALU_OP,RegWrite,ALU_SRC

立即数在0扩展后,经过signedext无信号,ALU_SRCB有信号作用下,顶替R2,进入ALU,在ALU_OP作用下,获得一个或信号,输出,跳过存储器,返回到Din,在regwrite下回写到rt,再进入存储器。同样都会a0出来两次,不过因为ledout没信号,所以没有后续。

23.LW:ALU_OP,SignedExt,RegWrite,MemtoReg,ALU_SRCB

       立即数经过符号扩展后,有SignedExt,,ALU_SRCB,一路被选中,顶替R2进入ALU,和R1(rs)相加,进入存储器。从D进去的是R2的值,,欸有memwrite,所以不改变,或者没有数据才填入,因为MemToReg有信号,所以出来后,选择R[rs]+SignExtImm,再回到Din,在RegWrite作用下,写到rt;

24.SW:ALU_OP,SignedExt,ALU_SRC,MemWrite

立即数扩展后加上rs都和上面一样,但是进入了存储器后,有了memwrite,就要将D的数据也即是R2,或者说rt的数据填入对应rs+signextimm对应的地址上。

24个指令分析完毕。

 

 

  • 45
    点赞
  • 300
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值