模型机课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
哈尔滨理工大学
软件学院
课程设计报告
课程片上计算机系统
题目 CPU模型机设计
班级集成12-1班
专业集成电路设计与集成系统学生张铭
学号 1214020130
指导教师崔林海
2014年07 月02日
索引:
1.课程设计的目的及要求 (3)
2.处理器的设计思想和设计内容 (3)
3.设计处理器的结构和实现方法 (3)
4.模型机的指令系统 (4)
5.处理器的状态跳转操作过程 (4)
6. CPU的VHDL代码 (7)
7. 模型机在Quartus II环境下的应用 (32)
8. 仿真波形 (33)
9. 课程设计的总结 (35)
一.课程设计的目的及要求:
1.目的:了解Quartus II软件的应用,学习Quartus II环境下设计CPU的基本过程;掌握CPU设计代码的含义以及CPU的工作原理;了解CPU与内存RAM 间的连接数据的传输过程;学习在Quartus II环境下建立模型机的具体过程。融会贯通本课程各章节的内容,通过知识的综合运用,加深对计算机系统各模块的工作原理及相互联系的认识。学习设计和调试计算机的基本步骤和方法,提高使用软件仿真工具和集成电路的基本技能。培养科学研究的独立工作能力,取得工程设计与组装调试的实践和经验。
2.要求:以《计算机组成与设计》书中123页的简化模型为基础,更改其指令系统,形成设计者的CPU,在Quartus II环境下与主存连接,调试程序,观察指令的执行是否达到设计构想。
二.处理器的设计思想和设计内容:
处理器的字长为16b;包括四种指令格式,格式1、格式2、格式3的指令字长度为8b,格式4的指令字长度为16b;处理器内部的状态机包括6个状态。
关于CPU:
操作码5位,一共设计20条指令,主要包括空操作指令、中断指令、加法指令、减法指令、三种逻辑运算指令、循环移位操作指令,数据传输指令,转移类指令,特权指令,取反,取绝对值等等。
关于RAM:
地址线设置成16bits,主存空间为64words。
书中原CPU的主要修改:
(1)模型机CPU指令集中的逻辑左移与逻辑右移改成逻辑循环右移与逻辑循环左移。
(2)模型机CPU指令集中的or改成not。
(3)模型机CPU指令的执行流程及状态跳转。
三.设计处理器的结构和实现方法:
(指令格式)
格式1:寄存器寻址方式
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
内存(2的12次方)
四.模型机的指令系统
五.处理器的状态跳转操作过程:
(二)、简单指令执行状态描述
读内存指令:
(1)St_0:取指令执行以下操作;
1)M_address←(MAR) 把指令地址送到地址总线
2)令Write-Read←’0’向内存发出读命令(取指令)
3)IR(15..0)←M_data_in(15..0)将读出的指令加载于IR(15..0)
4)PC=PC+1 至此指令已经全部取出,存在于IR(15..0),为取下一条指令准
备地址
(2)St_1:NULL 直接跳转到下一状态
(3)St_2:MAR←IR(11..0)将数据地址加载于MAR
(4)St_3:
1)M_address←(MAR)把数据地址送到地址总线
2)令Write-Read←’0’向内存发出读命令(取数据)
3)MAR←PC 把下一条指令地址加载于MAR
(5)St_4:
1)R0←M_data_in 将来自内存的数据加载于R0,本指令执行完毕
2)M_address←(MAR) 把下一条指令地址送到地址总线
3)令Write-Read←’0’向内存发出读命令(取下一条指令)
4)下一状态跳转到St_0
无条件转移指令
(1)St_0:取指令执行以下操作;
1)M_address←(MAR) 把指令地址送到地址总线
2)令Write-Read←’0’向内存发出读命令(取指令)
3)IR(15..0)←M_data_in(15..0)将读出的指令加载于IR(15..0)
4)PC=PC+1 (此语句无用,因为程序计数器后续重新复制达到无条件转移目的)
(2)St_1:NULL 直接跳转到下一状态
(3)St_2:
1)MAR←IR(11..0) 将转移目标地址加载于MAR
2)PC←IR(11..0) 将转移目标地址加载于PC
(4)St_3:
1) M_address←(MAR) 把下一条指令地址送到地址总线
2)令Write-Read←’0’向内存发出读命令(取下一条指令)
3)下一状态跳转到St_0
六.CPU的VHDL代码:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
PACKAGE namespack IS
CONSTANT idle : std_logic_vector(4 DOWNTO 0) :="00000";
CONSTANT load : std_logic_vector(4 DOWNTO 0) :="00001";
CONSTANT move : std_logic_vector(4 DOWNTO 0) :="00010";
CONSTANT addP : std_logic_vector(4 DOWNTO 0) :="00011";
CONSTANT subp : std_logic_vector(4 DOWNTO 0) :="00100";
CONSTANT andp : std_logic_vector(4 DOWNTO 0) :="00101";
CONSTANT orp : std_logic_vector(4 DOWNTO 0) :="00110";
CONSTANT xorp : std_logic_vector(4 DOWNTO 0) :="00111";
CONSTANT shrp : std_logic_vector(4 DOWNTO 0) :="01000";
CONSTANT shlp : std_logic_vector(4 DOWNTO 0) :="01001";
CONSTANT swap : std_logic_vector(4 DOWNTO 0) :="01010";
CONSTANT jmp : std_logic_vector(4 DOWNTO 0) :="01011";
CONSTANT jz : std_logic_vector(4 DOWNTO 0) :="01100";
CONSTANT read : std_logic_vector(4 DOWNTO 0) :="01101";
CONSTANT write : std_logic_vector(4 DOWNTO 0) :="01110";
CONSTANT stop : std_logic_vector(4 DOWNTO 0) :="01111";
CONSTANT comp : std_logic_vector(4 DOWNTO 0) :="10000";
CONSTANT notp : std_logic_vector(4 DOWNTO 0) :="10001";