logisim设计CPU

下载: logisim_simple_cpu

ISA设计

设计二进制代码为20位
  • operation code :[0:3]
  • 设置三个寄存器操作数,两个操作数将结果存储在一个输入寄存器中。
  • 每个寄存器占4位,即2^4=16 个寄存器
nameop[0:3][4:7][8:11][12:15][16:19]description
add0000rsrtrd0000Arithmetic addition(rs = rt+rd)
incre0001rsrt00000000increment(rs = rt+1)
decre0010rsrt00000000decrement(rs = rt-1)
cmp0011rsrtrd0000comparison(with 3 output:equals in rs[0], less than in rs[1], greater than in rs[2] )
not0100rsrt00000000logic bitwise not(rs = not rt)
and0101rsrtrd0000rs = rt and rd
or0110rsrtrd0000rs = rt or rd
rls(right logic shift)0111rsrtrd0000rs = rt >> rd
lls(left logic shift)1000rsrtrd0000rs = rt << rd
lw1001rsrt(base)offsetoffsetrs = mem[rt+offset]
sw1010rsrt(base)offsetoffsetmem[rt+offset] = rs
addi1011rsrtimmimmrs = rt+ imm
andi1100rsrtimmimmrs = rt and imm
ori1101rsrtimmimmrs = rt or imm
JMP1110instr_index[0:3]instr_index[4:7]instr_index[8:11]instr_index[12:15]
CJMP1111offset[0:3]rtrdoffset[4:7]cjmp rs,rd,pc;offset; rt == rd: j (offset) else:continue

CPU设计

设计参考mips的单周期CPU设计

  • 分为 取指、译码、控制、regfile寄存器堆、dataram几个模块。
  • 输入clk信号(暂时是输入端口,方便手动调试,未用clock模块)
  • 输入复位信号
  • 输出指令、pc、写回寄存器堆数据、branch的pc、jump的pc、instr的译码结果、regfile读出结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kntG9vCV-1640972285686)(img.png)]

调试

如下设计了一组能够测试大部分设计的代码。

instruction ram中装入的测试指令如下,依次:行号 | 汇编代码 | 二进制机器码 | 十六进制机器码

0 : addi $s1,$0,5       00000101000000011011 501b
1 : addi $s2,$0,7       00000111000000101011 702b
2 : or   $s3,$s2,$s1    00000001001000110110 1236
3 : cjmp $s3,$s0,7      01110000001100001111 7030f
4 : and  $s4,$s0,$s2    00000010000001000101 2045
5 : cjmp $s4,$s0,7      01110000010000001111 7020f
6 : add  $s5,$s1,$s2    00000010000101010101 2155
7 : jmp  9              10010000000000001110 9000e
8 : add  $s6,$s1,$s2    00000010000101100000 2160
9 : add  $s7,$s1,$s2    00000010000101110000 2170
10: add  $s8,$s1,$s2    00000010000110000000 2180

调试步骤:

  1. 将instr文件载入instr mem中
  2. 选择logisim的手掌方式
  3. 点击复位
  4. 点击clk输入模块模拟时钟上升沿触发cpu
  5. 查看寄存器的输入输出是否正确,写回数据是否正确,跳转pc是否正确

缺陷(埋坑)

  1. 在大小端的设计上,在logisim中从ram中读取出来的是大端方式,故在将汇编指令翻译为机器码时采用相反设计时的从低到高,将op放在[16:19]位置,然后左侧是rs rt rd的顺序,如此在logisim中读出来op会在[0:3]位。

参考引用:

https://vlab.ustc.edu.cn/guide/doc_logisim.html

http://www.doc88.com/p-1466403426738.html

https://blog.csdn.net/Hi_KER/article/details/120928866

https://blog.csdn.net/Hi_KER/article/details/121044637

https://blog.csdn.net/sinat_42483341/article/details/88849892?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164051235016780269898138%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=164051235016780269898138&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-3-88849892.first_rank_v2_pc_rank_v29&utm_term=LogiSim+CPU&spm=1018.2226.3001.4187

  • 1
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AlwaysDayOne

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值