使用logisim搭建单周期CPU与添加指令
搭建
总设计
借用高老板的图,我们只需要分别做出PC、NPC、IM、RF、EXT、ALU、DM、Controller模块即可,再按图连线,最后进行控制信 的处理,一个CPU就差不多搭完了。目前支持的指令集为{addu、subu、ori、lw、sw、beq、jal、jr、nop、lui、sb、lb、sh、lh}
NPC
由于我的CPU支持beq、jal、jr,所以NPCOp有2位,如下表所示
NPCOp | 功能 |
---|---|
00 | 计算顺序地址(PC+4) |
01 | 计算beq地址 |
10 | 计算jal地址 |
11 | 计算jr地址 |
IM
这个就更简单了,直接一个ROM搞定,注意把PC的2~6位引出作为IM的地址。
外部看起来是这样子的,RD1输出A1对应寄存器的值,RD2输出A2对应寄存器的值,当写使能信 WE3有效时,将在时钟上升沿把WD3写入A3对应的寄存器。
ALU
根据ALUOp进行不同的运算即可,这里加法和减法用的一个加法器(A-B=A+~B+1),但是好像这样不太好扩展(
Controller
使用了最简朴的方法,搭建时可以先用小手把opcode和funct点成要添加的指令,然后再连接出该指令。如果opcode是000000,那么再与funct得出的信 并起来,即得到该指令,如图中的addu和subu。
对于每一个控制信 都如此连接,即可完成CPU的搭建。
添加指令
注意事项
- 在改变与门或者或门的输入数据个数时,建议从奇数个到奇数个,否则可能出现这样的情况:如我有一个5input的或门,如下
发现中间的空掉了
eg:添加addiu
首先分析数据通路
判断是否需要增加新的通路以实现该指令,可以看出其需要的功能我的CPU都有了,因此直接修改控制信 即可
然后再连接出addiu

可以看到与之前分析的完全一样,至此addiu的添加完成。
文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览91749 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!