&
电子科技大学计算机科学与工程学院
标 准 实 验 报 告
(实验)课程名称: 计算机组成原理实验
电 子 科 技 大 学
电子科技大学教务处制表
实 验 报 告
学生姓名: 郫县尼克杨 学 号: 2014 指导教师:陈虹 实验地点: 主楼A2-411 实验时间:12周-15周 一、
[
二、
实验室名称:
主楼A2-411
三、 实验项目名称:
单周期CPU的设计与实现。
四、 实验学时:
8学时
五、 实验原理:
(一) 概述 【
单周期(Single Cycle)CPU是指CPU从取出1条指令到执行完该指令只需1个时钟周期。
1个时钟周
Clock
期 指令0 指令1 指令2 指令4 指令5
—
一条指令的执行过程包括:取指令→分析指令→取操作数→执行指令→保存结果。对于单周期CPU来说,这些执行步骤均在一个时钟周期内完成。 (二) 单周期cpu总体电路
本实验所设计的单周期CPU的总体电路结构如下。
(三) MIPS指令格式化
MIPS指令系统结构有MIPS-32和MIPS-两种。本实验的MIPS指令选用MIPS-32。以下所说的MIPS指令均指MIPS-32。
MIPS的指令格式为32位。下图给出MIPS指令的3种格式。
!
op
26 25 21 20 16 15 11 10
<
5
>
0
R型指令
31
rs
26 25
21 20
rt
16 】
rd sa
0
I型指令
。
op rs
26 25
rt immediate
0
op
J型指令 address
本实验只选取了9条典型的MIPS指令来描述CPU逻辑电路的设计方法。下图列出了本实验的所涉及到的9条MIPS指令。
六、 实验目的
、
1、掌握单周期CPU的工作原理、实现方法及其组成部件的原理和设计方法,如控制器、运算器等。
2、认识和掌握指令与CPU的关系、指令的执行过程。
3、熟练使用硬件描述语言Verilog、EDA工具软件进行软件设计与仿真,以培养学生的分析和设计CPU的能力。
七、 实验内容
(一)拟定本实验的指令系统,指令应包含R型指令、I型指令和J型指令,指令数为9条。
(二)CPU各功能模块的设计与实现。 (三)对设计的各个模块的仿真测试。 (四)整个CPU的封装与测试。
八、
,
九、
实验器材(设备、元器件):
(一)安装了Xilinx ISE Design Suite 的PC机一台 (二)FPGA开发板:Anvyl Spartan6/XC6SLX45
(三)计算机与FPGA开发板通过JTAG(Joint Test Action Group)接口连接,其连接方式如图所示。
十、 实验步骤
一个CPU主要由ALU(运算器)、控制器、寄存器堆、取指部件及其它基本功能部件等构成。
在本实验中基本功能部件主要有:32位2选1多路选择器、5位2选1多路选择器、32位寄存器堆、ALU等。
(一)新建工程(New Project) '
启动ISE Design Suite 软件,然后选择菜单File→New Project,弹出New Project Wizard对话框,在对话框中输入工程名CPU,并指定工作路径D:\\Single_Cycle_CPU。 (二)基本功能器件的设计与实现
(1)多路选择器的设计与实现
位2选1多路选择器(MUX5_2_1)的设计与实现
在ISE集成开发环境中,在工程管理区任意位置单击鼠标右键,在弹出的菜单中选择New Source命令,创建一个Verilog Module模块,名称为:MUX5_2_1,然后输入其实现代码:
MODULE MUX5_2_1(
INPUT [4:0] A, INPUT [4:0] B,
、
INPUT SEL,
OUTPUT [4:0] O
);
ASSIGN O = SEL B : A;
ENDMODULE
在ISE集成开发环境中,对模块MUX5_2_1进行综合(Synthesize),综合结果如图所示:
在ISE集成开发环境中,对模块MUX5_2_1进行仿真(Simulation)。输入如下测式代码:
MODULE MUX5_2_1_T;
…
(A),
.B(B), .SEL(SEL), .C(C) );
INITIAL BEGIN
(A),
.B(B),
。
.SEL(SEL), .O(O) );
INITIAL BEGIN
A=0; B=0;
SEL=0;
(D), :
.O(O)
);
INITIAL BEGIN
N1(RN1),
.RN2(RN2), .WN(WN),
.WRITE(WRITE), .WD(WD),
、
.A(A),
.B(B), .CLOCK(CLOCK) );
INITIAL BEGIN
(A), .B(B),
.ALU_OPERATION(ALU_OPERATION),
)
.RESULT(RESULT), .ZERO(ZERO) );
INITIAL BEGIN
P(OP),
.REGDST(REGDST), .REGWRITE(REGWRITE), .ALUSRC(ALUSRC),
;
.MEMWRITE(MEMWRITE), .MEMREAD(MEMREAD), .MEMTOREG(MEMTOREG),
.BRANCH(BRANCH), .ALUCTR(ALUCTR) );
INITIAL BEGIN
(A),
;
.B(B),
.ALU_OPERATION(ALU_OPERATION), .RESULT(RESULT), .ZERO(ZERO) );
INITIAL BEGIN P(OP),
.FUNC(FUNC),
]
.REGDST(REGDST),
.REGWRITE(REGWRITE), .ALUSRC(ALUSRC), .MEMWRITE(MEMWRITE), .MEMREAD(MEMREAD), .MEMTOREG(MEMTOREG), .BRANCH(BRANCH), .ALU_OP(ALU_OP)
~
);
INITIAL BEGIN
LOCK(CLOCK),
.RESET(RESET), .B_ADDR(B_ADDR), .B(B), .Z(Z), .INST(INST),
…
.O_ADDR(O_ADDR), .O_SUM(O_SUM), .O_SUM1(O_SUM1) );
INITIAL BEGIN
ESET(RESET),
.CLOCK(CLOCK), .INST(INST),
|
.DATA(DATA),
.MEMWRITE(MEMWRITE), .MEMREAD(MEMREAD), .RESULT(RESULT), .B_DATA(B_DATA),
.NEXTPC(NEXTPC) );
INITIAL BEGIN
)
DDRESS(ADDRESS),
.INST(INST) );
INITIAL BEGIN
LOCK(CLOCK),
.RESET(RESET), .INST(INST), .PC(PC),
@
.ALUOUT(ALUOUT), .B_DATA(B_DATA) );
INITIAL BEGIN
// INITIALIZE INPUTS CLOCK = 0; RESET = 0;
// WAIT 100 NS FOR GLOBAL RESET TO FINISH
'
#100;
CLOCK = ~CLOCK;
RESET = 1; #100;
CLOCK = ~CLOCK;
RESET = 1; #100;
CLOCK = ~CLOCK;
?
RESET = 1; #100;
CLOCK = ~CLOCK;
RESET = 1; #100;
CLOCK = ~CLOCK;
RESET = 1; #100;
《
CLOCK = ~CLOCK;
RESET = 1; #100;
CLOCK = ~CLOCK;
RESET = 1; #100;
CLOCK = ~CLOCK;
RESET = 1;
)
#100;
CLOCK = ~CLOCK;
RESET = 1; #100;
CLOCK = ~CLOCK;
RESET = 1; #100;
CLOCK = ~CLOCK;
¥
RESET = 1; #100;
CLOCK = ~CLOCK;
RESET = 1; #100;
CLOCK = ~CLOCK;
RESET = 1; #100;
|
CLOCK = ~CLOCK;
RESET = 1; #100;
CLOCK = ~CLOCK;
RESET = 1; #100;
CLOCK = ~CLOCK;
RESET = 1; #100;
CLOCK = ~CLOCK;
RESET = 1; #100;
CLOCK = ~CLOCK;
RESET = 1; #100;
CLOCK = ~CLOCK;
RESET = 1; #100;
CLOCK = ~CLOCK;
RESET = 1;
END
ENDMODULE
然后进行仿真,仿真结果如图:
在该转移的地方进行了转移,成功。
十一、 实验数据及结果分析:
在一个时钟周期内所设计的CPU能够完成一条指令的执行,指令执行结果与预期的结果是一致的。通过仿真可以看到最终顺利实现了每个模块的功能,成功解决了之前出错的PC转移问题,整个CPU按照设计好的指令运行。
十二、 实验结论:
单周期CPU在一个时钟周期完成指令的所有执行步骤,简化了CPU的设计,但是这样没有考虑不同部件完成时间上的差异,所以导致CPU各部件的利用率不高,采用多周期流水线CPU可以提高利用率,但是难度也会增大许多。
十三、 总结及心得体会:
我本身对这次实验很兴趣,指导教师陈老师也非常和蔼耐心地指导,所以比较顺利地完成了整个实验。
本次实验完全是完成,没有任何抄袭,包括实验报告的编写,每一段代码都是自己写出来的,每一张图片也都是自己截的图,虽然整个过程花的时间比较多,但确实收获很多,很开心,也希望能得到一个好的成绩。
本次实验让我切实感受到了仿真的好处,计算机仿真在实际生产中的作用,也很好地锻炼了自己的逻辑思维能力,对课堂第四章第五章的内容有了更为深刻的理解。
要合理地将本次实验中“把庞大的部件分割为许多小部件,逐一解决” 的方法运用到对其它问题的解决中。
十四、 对本实验过程及方法、手段的改进建议:
建议增加2个实验学时,同时将要实现的指令增加为十一条,增加运算器溢出信号Overflow、判断溢出的加法运算,以及J型指令的设计与实现,从而进一步锻炼自己。
报告评分:
指导教师签字: