用logisim写一个i型指令,符号位拓展32位,对学号后两位求余
时间: 2024-03-27 12:41:35 浏览: 62
好的,首先我们需要了解一下i型指令的格式。i型指令的格式通常为:
```
opcode rs rt immediate
```
其中 opcode 为操作码,rs 和 rt 分别为源寄存器,immediate 为立即数。在本题中,我们需要使用一个操作码、两个寄存器和一个立即数来完成对学号后两位求余的操作。为了简化问题,我们假设操作码为 0000,寄存器 rs 存放学号,寄存器 rt 存放余数,立即数为 100。
接下来我们可以使用 Logisim 来实现这个 i 型指令。具体步骤如下:
1. 打开 Logisim 并创建一个新电路。
2. 在电路中添加一个 32 位寄存器,用于存放学号。将其命名为 RegA。
3. 再添加一个 32 位寄存器,用于存放余数。将其命名为 RegB。
4. 添加一个 4 位选择器,用于选择操作码。将其命名为 Opcode。
5. 添加两个 5 位选择器,用于选择寄存器 rs 和 rt。将它们命名为 RegRs 和 RegRt。
6. 添加一个 16 位选择器,用于选择立即数。将其命名为 Imm。
7. 添加一个 32 位符号扩展器,用于将立即数符号位拓展到 32 位。将其命名为 SignExt。
8. 添加一个 32 位加法器,用于计算余数。将其命名为 Adder。
9. 将 RegA 的输出连接到 RegRs 的输入,将 RegB 的输入连接到 RegRt 的输出。
10. 将 Opcode 的输出连接到四个逻辑门的输入端,构成一个 4:16 译码器。将译码器的输出分别连接到各个指令的输入端。
11. 将 Imm 的输出连接到 SignExt 的输入,将 SignExt 的输出连接到 Adder 的输入之一。
12. 将 RegRs 的输出连接到 Adder 的输入之二。
13. 将 Adder 的输出连接到 RegB 的输入。
14. 完成电路后,我们需要对电路进行仿真测试。我们可以将学号设置为一个随机数,并将立即数设置为 100,然后运行电路,检查 RegB 的输出是否等于学号后两位的余数。
这样,我们就完成了一个简单的 i 型指令,用于求学号后两位的余数。
阅读全文