1、1武汉大学计算机学院计算机科学与技术专业CPU 设计实验报告实验名称:开放式实验 CPU 设计 课题名称: 计算机组成原理 班 级: 计科 2 班 指导教师: 徐 爱 萍 组 长: 组 员: 二零一五年三月2目录目录 .21 实验环境 (张航宇) .41.1 Quartus 介绍 .41.2 硬件描述语言(VHDL) .41.3 实验的主要成果 .42 实验要求(彭阳坤) .52. 1 指令格式要求 .52. 2 指令流程及微信号序列分析 .52.2.1 ADD 指令分析 .52.2.2 ADC 指令分析 .52.2.3 SUB 指令分析 .62.2.4 SBC 指令分析 .62.2.5 IN
2、C 指令分析 .62.2.6 DEC 指令分析 .62.2.7 SHL 指令分析 .72.2.8 SHR 指令分析 .72.2.9 MOVR 指令分析 .72.2.11 MOVD 指令分析 .72.2.12 LDRR 指令分析 .82.2.13 STRR 指令分析 .82.2.14 JMP 指令分析 .82.2.15 JRZ 指令分析 .82.2.16 JRC 指令分析 .93.部件仿真实验(彭阳坤) .103.1 八个通用寄存器设计与仿真 .103.1.1 设计代码 .103.1.2 RTL 连接图 .163.1.3 仿真过程 .163.2 算术逻辑单元设计与仿真 .1733.2.1 设计代
3、码 .173.2.2 RTL 连接图 .223.2.3 仿真过程 .234. CPU 设计(彭阳坤) .244.1 取指设计 .244.2 时序节拍设计 .254.3 指令译码的设计 .264.4 执行部分设计 .294.5 存储器部分设计 .314.6 通用寄存器组设计 .324.7 寄存器输出设计 .384.8 顶层实体设计 .385. 测试报告(张航宇) .425.1 规则文件 .425.2 测试文件 .425.3 指令测试 .446 实验总结 .466.1 彭阳坤的小结 .466.1.1 实验收获 .466.1.2 建议与意见 .466.2 张航宇的小结 .466.2.1 实验收获 .
4、466.2.2 建议与意见 .47参考资料 .4741 实验环境 (张航宇)1.1 Quartus 介绍Quartus提供了方便的设计输入方式、快速的编译和直接易懂的器件编程。能够支持逻辑门数在百万门以上的逻辑器件的开发,并且为第三方工具提供了无缝接口。Quartus 支持的器件有:Stratix 、Stratix GX、Stratix、Mercury、MAX3000A 、MAX 7000B、 MAX 7000S、MAX 7000AE、MAX 、FLEX6000、FLEX10K、 FLEX10KA、FLEX10KE 、Cyclone、Cyclone 、APEX 、APEX20KC、APEX20
5、KE 和 ACEX1K 系列。Quartus 软件包的编程器是系统的核心,提供功能强大的设计处理,设计者可以添加特定的约束条件来提高芯片的利用率。1.2 硬件描述语言(VHDL)VHDL 语言是一种用于电路设计的高级语言。它在 80 年代的后期出现。最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言 。VHDL 翻译成中文就是超高速集成电路硬件描述语言,主要是应用在数字电路的设计中。它在中国的应用多数是用在 FPGA/CPLD/EPLD 的设计中。当然在一些实力较为雄厚的单位,它也被用来设计 ASIC。VHDL 主要用于描述数字系统的结构,行为,功能
6、和接口。除了含有许多具有硬件特征的语句外,VHDL 的语言形式、描述风格以及语法是十分类似于一般的计算机高级语言。VHDL 的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是 VHDL 系统设计的基本点。51.3 实验的主要成果熟悉对 Quartus 和 VHDL 的使用,完成一个 16 位 8 个寄存器的简单 CPU,实现 18 条指令。2
7、实验要求( 彭阳坤)2. 1 指令格式要求2. 2 指令流程及微信号序列分析2.2.1 ADD 指令分析指令 T1 T2 T3ADD DR,SR Mem_AddrpcWe1Data_readobIRdata_readPc_incpc+1resultDR+SRgenerate z_tmpgenerate c_tmppcpc_incDRresultZ_outz_tmpC_outc_tmp2.2.2 ADC 指令分析指令 T1 T2 T3ADC DR,SR Mem_AddrpcWe1Data_readobIRdata_readPc_incpc+1resultDR+SR+c_tmpgenerate z
8、_tmpgenerate c_tmppcpc_incDRresultZ_outz_tmpC_outc_tmp指 令 格 式 类 型 操 作 码 ( 4位 ) 目 的 操 作 数 ( 4位 ) 源 操 作 数 ( 4位 ) R型 OP DR SR I型 OP DR J 型 OP ADR S型 OP IM N型 OP 62.2.3 SUB 指令分析指令 T1 T2 T3SUB DR,SR Mem_AddrpcWe1Data_readobIRdata_readPc_incpc+1resultDR-SRgenerate z_tmpgenerate c_tmppcpc_incDRresultZ_outz
9、_tmpC_outc_tmp2.2.4 SBC 指令分析指令 T1 T2 T3SBC DR,SR Mem_AddrpcWe1Data_readobIRdata_readPc_incpc+1resultDR-SR-Cgenerate z_tmpgenerate c_tmppcpc_incDRresultZ_outz_tmpC_outc_tmp2.2.5 INC 指令分析指令 T1 T2 T3INC DR Mem_AddrpcWe1Data_readobIRdata_readPc_incpc+1resultDR+1generate z_tmpgenerate c_tmppcpc_incDRresu
10、ltZ_outz_tmpC_outc_tmp2.2.6 DEC 指令分析指令 T1 T2 T3DEC DR Mem_AddrpcWe1Data_readobIRdata_readPc_incpc+1resultDR-1generate z_tmpgenerate c_tmppcpc_incDRresultZ_outz_tmpC_outc_tmp72.2.7 SHL 指令分析指令 T1 T2 T3SHL DR Mem_AddrpcWe1Data_readobIRdata_readPc_incpc+1resultDR*2generate z_tmpgenerate c_tmppcpc_incDRr
11、esultZ_outz_tmpC_outc_tmp2.2.8 SHR 指令分析指令 T1 T2 T3SHR DR Mem_AddrpcWe1Data_readobIRdata_readPc_incpc+1resultDR/2generate z_tmpgenerate c_tmppcpc_incDRresultZ_outz_tmpC_outc_tmp2.2.9 MOVR 指令分析指令 T1 T2 T3MOVR DR,SR Mem_AddrpcWe1Data_readobIRdata_readPc_incpc+1ResultSR pcpc_incDRresult2.2.11 MOVD 指令分析指
12、令 T1 T2 T3MOVD DR,DATA Mem_AddrpcWe1Data_readobIRdata_readPc_incpc+1Mem_Addrpc_inc we1data_readobDRdata_readpcpc+282.2.12 LDRR 指令分析指令 T1 T2 T3LDRR DR,SR Mem_AddrpcWe1Data_readobIRdata_readPc_incpc+1Mem_AddrSR we1data_readobDRdata_readpcpc_inc2.2.13 STRR 指令分析指令 T1 T2 T3STRR DR,SR Mem_AddrpcWe1Data_re
13、adobIRdata_readPc_incpc+1Mem_AddrDR we0obSRpcpc_inc2.2.14 JMP 指令分析指令 T1 T2 T3JMP ADR Mem_AddrpcWe1Data_readobIRdata_readPc_incpc+1Mem_Addrpc_inc we1data_readobpcdata_read2.2.15 JRZ 指令分析指令 T1 T2 T3JRZ ADR Mem_AddrpcWe1Data_readobIRdata_readPc_incpc+1Generatec_z_j_flaggeneratesjmp_addrIf c_z_j_flag=1T
14、henpcsjmp_addrelse pcpc_inc92.2.16 JRC 指令分析指令 T1 T2 T3JRC ADR Mem_AddrpcWe1Data_readobIRdata_readPc_incpc+1Generatec_z_j_flaggeneratesjmp_addrIf c_z_j_flag=1Thenpcsjmp_addrelse pcpc_inc103.部件仿真实验(彭阳坤)3.1 八个通用寄存器设计与仿真3.1.1 设计代码寄存器 reglibrary ieee;use ieee.std_logic_1164.all;entity reg is port(reset:
15、in std_logic;d_input: in std_logic_vector(15 downto 0);clk: in std_logic;write: in std_logic;sel: in std_logic;q_output: out std_logic_vector(15 downto 0);end reg;architecture a OF reg isbeginprocess(reset,clk)beginIF reset = 0 thenq_output = x“0000“; elsif clkevent and clk = 0 then -时钟下降沿触发if sel =1 and write = 1 thenq_output = d_input;end if;end if;end process;end a;3-8 译码器 Decoder_3_to_8.vhdlibrary ieee;use ieee.std_logic_1164.all;entity decoder_3_to_8 isport (