当前位置:文档之家› 计组实验报告.

计组实验报告.

武汉大学计算机学院计算机科学与技术专业CPU设计实验报告实验名称:开放式实验CPU设计课题名称: 计算机组成原理班级:指导教师:徐爱萍组长:组员:二零一五年三月目录目录 (1)1 实验环境 (2)1.1 Quartus Ⅱ介绍 (2)1.2 硬件描述语言(VHDL) (3)1.3实验的主要成果 (3)2 实验要求 (5)2. 1 指令格式要求 (5)2. 2 指令流程及微信号序列分析 (6)2.2.1 ADD指令分析 (6)2.2.2 ADC指令分析 (7)2.2.3 SUB指令分析 (7)2.2.4 SBC指令分析 (7)2.2.5 INC指令分析 (7)2.2.6 DEC指令分析 (8)2.2.7 SHL指令分析 (8)2.2.8 SHR指令分析 (8)2.2.9 MOVR指令分析 (8)2.2.10 MOVD指令分析 (9)2.2.11 LDRR指令分析 (9)2.2.12 STRR指令分析 (10)2.2.13 JMP指令分析 (10)2.2.14 JRC指令分析 (11)2.2.15 JRZ指令分析 (11)2.2.16 JRS指令分析 (11)2.2.17 CLC指令分析 (11)2.2.18 STC指令分析 (11)3.部件仿真实验 (11)3.1 八个通用寄存器设计与仿真 (11)3.1.1 设计代码 (11)3.1.2 RTL连接图 (17)3.1.3 仿真过程 (17)3.2算术逻辑单元设计与仿真 (18)3.2.1 设计代码 (18)3.2.2 RTL连接图 (21)3.2.3 仿真过程 (22)4. CPU设计 (23)4.1取指设计 (23)4.2指令译码的设计 (25)4.3执行部分设计 (28)4.4存储器部分设计 (31)4.5通用寄存器组设计 (32)4.6寄存器输出设计 (36)4.7 程序包设计 (37)4.8顶层实体设计 (41)5. 测试报告 (45)5.1规则文件 (45)5.2测试文件 (45)5.3指令测试 (46)6 实验总结 (53)1 实验环境1.1 Quartus Ⅱ介绍QuartusⅡ是Altera公司的综合性PLD/FPGA开发软件,原理图、VHDL、VerilogHDL以及AHDL等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。

QuartusⅡ提供了方便的设计输入方式、快速的编译和直接易懂的器件编程。

能够支持逻辑门数在百万门以上的逻辑器件的开发,并且为第三方工具提供了无缝接口。

QuartusⅡ支持多种器件系列。

QuartusⅡ软件包的编程器是系统的核心,提供功能强大的设计处理,设计者可以添加特定的约束条件来提高芯片的利用率。

1.2 硬件描述语言(VHDL)在自顶向下的设计方法中,硬件描述语言如VHDL可以在高于逻辑级的抽象层次上用简练的方式提供精确的描述。

把设计任务分解到可控制的规模的方法形成了层次结构。

层次结构的优点如下:(1)在希望抽象的层次上,可以对设计进行精确而简练的描述。

(2)在同一时刻,只需设计系统某一部分的细节,这有利于组织并行的设计工作,开展大规模工程设计,而不是个人单兵作战。

(3)把注意力集中在系统可以控制的一部分,有助于减少设计错误和排错时间。

(4)对各个模块分别进行仿真、测试、功能校验。

(5)分阶段地进行设计,逐步加入各个构造模块。

VHDL的功能非常强大,不仅适合仿真,构建一个大的系统,对系统的行为进行描述,也适合设计具体的硬件电路。

VHDL的全称是Very High Speed Integrated Circuit Hardware Description Language,即超高速集成电路描述语言。

硬件描述语言有许多种,如ABEL、Verilog等,VHDL是其中著名的一种硬件描述语言。

VHDL要适用于许多复杂的情况,还要适应各种硬件设计人员原先的习惯方式和设计风格,因此设计得比较全面。

1.3实验的主要成果整个实验的过程可以被分为三个部分:通用寄存器组仿真、算术逻辑单元仿真、实验CPU设计及调试。

(1)通用寄存器组仿真。

了解通用寄存器组的用途及对CPU的重要性;掌握通用寄存器组的设计方法;其中共有4个16位的寄存器,具有复位功能和写入读出功能。

4个16位寄存器的通用寄存器组的框图如下图:(2)算术逻辑单元仿真。

掌握运算器的工作原理;验证运算器的功能;实现了对二进制数据进行定点算术运算、逻辑运算和传送数据操作。

算术运算包括定点加减运算;逻辑运算主要有逻辑与、逻辑或、逻辑非操作。

具体操作码及其实现的操作见下表:(3)实验CPU设计及调试。

成功编写了CPU的设计代码;掌握计算机的工作原理,建立清晰的计算机整体概念;掌握调试软件的使用方法,成功对CPU进行调试。

CPU的指令集如下表:2 实验要求2. 1 指令格式要求基本CPU指令格式:实验要求中,共有18条指令,所以用5位操作码。

DR 和SR 通用寄存器要求8个或者16个均可,为了方便起见,实验过程中选择8个寄存器,则DR 和SR 各占3位。

因为是16位系统,所以位10-6表示操作码,位5-3和位2-0分别为SR 和DR ,位15-11闲置为0。

2. 2 指令流程及微信号序列分析一条指令执行需要3拍时间。

(1)T1:取指。

在t2的上升沿,将从存储器取出的指令写入指令寄存器IR 中。

T1执行的操作如下:T1:Mem_Addr<-pc we<-1 data_read<-ob IR<-data_read pc_inc<-pc+1 18条指令T1完成的操作都是一样的,后面就不再赘述。

(2)T2:根据指令寄存器IR 的内容进行指令译码;根据指令译码得到的控制信号进行运算和其他操作。

(3)T3:存储器读、写操作;在T3的下降沿将运算结果写入目的寄存器,改变C 标志和Z 标志;在T3的下降沿,改变PC 的值,为取下一条指令做好准备。

2.2.1 ADD 指令分析算数逻辑运算指令流程图:(ADD,ADC,SUB,SBC,INC,DEC,SHL,SHR 均是算数逻辑运算指令,后面不再赘述)T2:result<-DR+SR generate z_tmp generate c_tmp T3:pc<-pc_inc DR<-result z_out<-z_tmp c_out<-c_tmpT2进行运算DR+SR ,改变z_tmp 和c_tmp 。

T3将运算结果写入目的寄存器;改变C 标志和Z 标志;改变PC 的值,为取下一条指令做好准备。

2.2.2 ADC 指令分析T2:result<-DR+SR+c_in generate z_tmp generate c_tmp T3:pc<-pc_inc DR<-result z_out<-z_tmp c_out<-c_tmpT2进行运算DR+SR+C ,改变z_tmp 和c_tmp 。

T3将运算结果写入目的寄存器;改变C 标志和Z 标志;改变PC 的值,为取下一条指令做好准备。

2.2.3 SUB 指令分析T2:result<-DR-SR generate z_tmp generate c_tmp T3:pc<-pc_inc DR<-result z_out<-z_tmp c_out<-c_tmpT2进行运算DR-SR ,改变z_tmp 和c_tmp 。

T3将运算结果写入目的寄存器;改变C 标志和Z 标志;改变PC 的值,为取下一条指令做好准备。

2.2.4 SBC 指令分析T2:result<-DR-SR-c_in generate z_tmp generate c_tmp T3:pc<-pc_inc DR<-result z_out<-z_tmp c_out<-c_tmpT2进行运算DR-SR-C ,改变z_tmp 和c_tmp 。

T3将运算结果写入目的寄存器;改变C 标志和Z 标志;改变PC 的值,为取下一条指令做好准备。

2.2.5 INC 指令分析T2:result<-DR+1 generate z_tmp generate c_tmp T3:pc<-pc_inc DR<-result z_out<-z_tmpc_out<-c_tmpT2进行运算DR+1,改变z_tmp和c_tmp。

T3将运算结果写入目的寄存器;改变C标志和Z标志;改变PC的值,为取下一条指令做好准备。

2.2.6 DEC指令分析T2:result<-DR-1 generate z_tmp generate c_tmpT3:pc<-pc_inc DR<-result z_out<-z_tmp c_out<-c_tmpT2进行运算DR-1,改变z_tmp和c_tmp。

T3将运算结果写入目的寄存器;改变C标志和Z标志;改变PC的值,为取下一条指令做好准备。

2.2.7 SHL指令分析T2:result<-DR*imm generate z_tmp generate c_tmpT3:pc<-pc_inc DR<-result z_out<-z_tmp c_out<-c_tmpT2进行运算DR*imm,改变z_tmp和c_tmp。

T3将运算结果写入目的寄存器;改变C标志和Z标志;改变PC的值,为取下一条指令做好准备。

2.2.8 SHR指令分析T2:result<-DR/imm generate z_tmp generate c_tmpT3:pc<-pc_inc DR<-result z_out<-z_tmp c_out<-c_tmpT2进行运算DR/imm,改变z_tmp和c_tmp。

T3将运算结果写入目的寄存器;改变C标志和Z标志;改变PC的值,为取下一条指令做好准备。

2.2.9 MOVR指令分析访寄存器指令流程图:(MOVR,MOVD均是访寄存器指令,2条指令的执行过程如上图)T2:result<-SRT3:pc<-pc_inc DR<-resultT2将SR的数值作为结果。

T3将结果写入目的寄存器;改变PC的值,为取下一条指令做好准备。

2.2.10 MOVD指令分析T2:Mem_Addr<-pc_incT3:we<-1 data_read<-ob DR<-data_read pc<-pc+2T2将DATA地址送入存储器地址总线。

T3时we为1时读存储器;将DATA 值写入DR;因为本条指令长度为32位,所以pc要加二。

相关主题