构建单周期CPU记录Ⅲ
本文最后更新于 2024年9月12日 晚上
构建单周期CPU记录Ⅲ(addi, j)
addi
对于addi,不需要新增器件,addi与add的不同,本质上是将其中一个寄存器换成了立即数.
比较两者的机器码
![]() |
|---|
![]() |
可以发现:
- rs不变
- rt的作用从原来的提供加数,变为赋值地址
- rd消失,立即数代替rt成为加数
因此修改如下:
- A1端口不变,仍然连接Instr[25:21]
- SrcB不再接收Instr[20:16]的值,而是立即数
- A3端口不再接收Instr[15:11]的值,而是Instr[20:16]
我们对ALUSrc,RegDst两个信号作出修改
j
对NXTAD(对下一个地址的计算器)做出修改,新增Jump信号
整体
附
信号表
| 指令 | RegWrite | MemWrite | ALUControl | RegDst | MemtoReg | ALUSrc | Branch | Jump | |
|---|---|---|---|---|---|---|---|---|---|
| lw | 1 | 0 | 010(加法) | 0 | 1 | 1 | 0 | 0 | |
| sw | 0 | 1 | 010(加法) | X | X | 1 | 0 | 0 | |
| beq | 0 | 0 | 110(减法) | X | X | 0 | 1 | 0 | |
| add | 1 | 0 | 010(加法) | 1 | 0 | 0 | 0 | 0 | |
| sub | 1 | 0 | 110(减法) | 1 | 0 | 0 | 0 | 0 | |
| and | 1 | 0 | 000(与) | 1 | 0 | 0 | 0 | 0 | |
| or | 1 | 0 | 001(或) | 1 | 0 | 0 | 0 | 0 | |
| slt | 1 | 0 | 111(小于置位) | 1 | 0 | 0 | 0 | 0 | |
| addi | 1 | 0 | 010(加法) | 0 | 0 | 1 | 0 | 0 | |
| j | 0 | 0 | XXX | X | X | X | X | 1 | |
构建单周期CPU记录Ⅲ
https://meteor041.git.io/2024/09/12/构建单周期CPU记录Ⅲ/

