
何丹2010211066
朱玮楠2010211100
特点:
采用mips指令集
分段的ALU控制编码方式
五级流水
电路的时钟频率可以达到100M。
一.电路设计思路:
1.指令的编码
本实验共实现了21条指令,虽然可以采用直接编码,然后放入ALU进行解码。但考虑到实际指令条数有上百条,所以本文的编码也采用了分级编码的方式,以减小ALU的延时。
首先,对指令进行分类,R型,I型,J型。不同指令类型产生不同的ALUop。如果指令是R型,则根据functfield对指令进行解码。如果是I型,则根据I型指令产生的ALUop对指令进行加法或者减法操作。对于J型,可以随意设置操作。
此外编码时要考虑编码的可解析性,例如应该让最终得到的ALU操作码的某些为具有特定含义。能够代表加法,或者减法,或者是符号位。
文章最终以4-bit编码实现了对ALU的控制,编码详细内容见excel文件。
2.电路结构设计
本文考虑到流水线结构和单周期或者多周期结构差异较大,所以直接采用流水线结构。先写了各个小的模块,然后组合成最终电路。电路图见下
电路数据通路和控制通路电路图:
二.实验测试以及结果:
测试1.
测试目的:
测试SLL,LW,ADD,BEQ,ADDI指令,并且考验了Forwarding unit的工作。
@00000000
00000000 00000000 00000000 00000000 //SLL S0,S0,0
8C010000 8C020001 8C030002 8C040001 //LW S1, 0(S0)
8C020001 24020010 AFC20010 27C20018 //LW S2, 1(S0)
8C030002 246309A0 00402021 00602821 //LW S3, 2(S0)
00222020 24060010 8FC20010 00000000 //ADD S4, S1,S2
10820004 AFC30060 8FC20060 00000000 //BEQ S4,S2,4
00000000 00000000 08008076 00000000
00000000 00000000 AFC2005C 8FC2005C
00000000 00000000 0043102A 14400003
00000000 08008071 00000000 8FC2005C
20650008 00401821 00031080 27C30010 //ADDI S5,S3,8
测试2.
测试目的:
测试LW,ADD指令,考查Forwarding unit 和Hazard Detection unit的协同工作。
@00000000
8C010001 8C020001 8C030002 8C040001 //LW S1, 1(S0)
8C020002 24020010 AFC20010 27C20018 //LW S2, 2(S0)
8C030003 246309A0 00402021 00602821 //LW S3, 3(S0)
8C040004 246309A0 00402021 00602821 //LW S4, 4(S0)
00240820 24060010 8FC20010 00000000 //ADD S1, S1,S4
00230820 AFC30060 8FC20060 00000000 //ADD S1, S1,S3
00220820 00000000 08008076 00000000 //ADD S1, S1,S2
00000000 00000000 AFC2005C 8FC2005C
00000000 00000000 0043102A 14400003
测试3.
测试目的:
测试LW,JAL,SW,JR指令,考查跳转并且保留pc,使得可以跳回原地址。
@00000000
8C010001 8C020001 8C030002 8C040001 //LW S1, 1(S0)
8C020002 24020010 AFC20010 27C20018 //LW S2, 2(S0)
0C000008 246309A0 00402021 00602821 //JAL ,8
8C040004 246309A0 00402021 00602821
00240820 24060010 8FC20010 00000000
00230820 AFC30060 8FC20060 00000000
00220820 00000000 08008076 00000000
00000000 00000000 AFC2005C 8FC2005C
AC020004 00000000 0043102A 14400003 //SW S2,4(S0) pc==8
03E00008 08008071 00000000 8FC2005C //JR S31
20650008 00401821 00031080 27C30010
通过以上实验可以看出该CPU可以实现各种指令组合,成功的检测了数据冲突和各种跳转指令,其中控制冲突主要靠编译器完成。
三.其他说明
源代码以及综合报告见目录文件设计过程中的问题和解决方法见”问题.docx”
电路设计之初忘记了btlz指令,由于时间问题没有重新更改,下面给出思路:
Btlz指令同beq,bneq指令类似,本文设计的时候只考虑了beq,bneq,所以两者的区别在decoder的时候区分开,添加了branch-type信号,表示比较内容相等于否。但btlz是小于,所以想将zero的输出变成两位,这样就可以代表这三种情况了。同时取消branch-type 信号。
由于时间问题,没有对电路的关键路径进行优化,没有完成异常处理。
体会:通过本次课程设计,体会到了数字电路的设计之妙。编码的讲究,电路结构的实现都令我们赞叹。设计过程中,时序的问题也非常重要,只有正确的时序电路才能很好的工作。最终我们很好的完成了5级流水CPU,对流水线的设计也有了更深的理解。虽然整个设计过程花了很长时间,但学到了很多的东西。
