CPU课程设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告
课程片上计算机系统
题目 cpu的设计
班级 4班
专业集成
学生学号 1314020406
指导教师
2015 年7月9 日
索引:
1.课程设计的目的及要求 (3)
2.处理器的设计思想和设计内容 (3)
3.设计处理器的结构和实现方法 (3)
4.模型机的指令系统 (4)
5.处理器的状态跳转操作过程 (4)
6. CPU的VHDL代码 (7)
7. Quartus II环境下的应用步骤 (14)
8. 仿真波形 (15)
9. 课程设计的总结 (17)
课程设计的目的及要求
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:
操作码4位,一共设计16条指令,主要包括空操作指令、中断指令、加法指令、减法指令、三种逻辑运算指令、循环移位操作指令,数据传输指令,转移类指令,特权指令等等。
关于RAM:
地址线设置成16bits,主存空间为64words。
书中原CPU的主要修改:
(1)模型机CPU指令集中的逻辑左移与逻辑右移改成算术左移与算术右移左移。
(2)模型机CPU指令集中的add实现减法,sub实现加法。
(3)模型机CPU指令集中的Jmp,Jz改为skp,not指令。
(4)模型机CPU指令的执行流程及状态跳转。
二.计处理器的结构和实现方法
(指令格式)
格式1:寄存器寻址方式
模型机的指令系统
处理器的状态跳转操作过程:
(二)、简单指令执行状态描述
读内存指令:
(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(3 DOWNTO 0) :="0000";
CONSTANT load : std_logic_vector(3 DOWNTO 0) :="0001";
CONSTANT move : std_logic_vector(3 DOWNTO 0) :="0010";
CONSTANT addP : std_logic_vector(3 DOWNTO 0) :="0011";
CONSTANT andp : std_logic_vector(3 DOWNTO 0) :="0100";
CONSTANT nandp : std_logic_vector(3 DOWNTO 0) :="0101";
CONSTANT orp : std_logic_vector(3 DOWNTO 0) :="0110";
CONSTANT xnorp : std_logic_vector(3 DOWNTO 0) :="0111";
CONSTANT shrp : std_logic_vector(3 DOWNTO 0) :="1000";
CONSTANT shlp : std_logic_vector(3 DOWNTO 0) :="1001";
CONSTANT swap : std_logic_vector(3 DOWNTO