8位模型计算机的设计

  • 格式:doc
  • 大小:255.50 KB
  • 文档页数:15

下载文档原格式

  / 15
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

石家庄经济学院

华信学院

计算机组成原理课程设计报告

题目 8位模型计算机的设计

姓名

学号

班号 4064170801

指导老师关文革尹立洁赵洋

成绩

2009年1月

目录

1. 课程设计目的 52

2. 开发工具选择 52

3. 方案选择 52

4.指令系统设计 52

5. 模型机框图设计 52

6. 指令流程图 52

7. 指令操作时间表(组合逻辑控制器)或者微指令格式(微程序控制器)设计 52

8. 微操作信号综合与优化(组合逻辑控制器)或者微程序(微程序控制器)设计 52

9. VHDL实现 52

10. 调试仿真 52

11. 课程设计回顾总结 52

参考文献 52

附录 52

一、课程设计目的

1、计算机组成原理课程设计的主要任务是让学生通过动脑和动手解决计算机设计中的实际问题。综合运用所学计算机组成原理知识,在掌握部件单元电路实验的基础上,进一步将其组成系统构造一台基本的模型计算机,掌握整机概念,并设计机器指令系统,编写程序,在所设计的模型计算机上调试运行。

2、通过一台模型机的设计过程,明确计算机的控制原理与控制过程,巩固和灵活应用所学的理论知识,掌握计算机组成的一般设计方法,提高学生设计能力和实践操作技能,为从事计算机研制与设计打下基础。

二、开发工具选择

以TEC-CA教学实验系统为平台,采用硬件描述语言 VHDL为设计工具,应用QUARTUSⅡ5.1环境进行大规模集成电路的功能设计仿真。

三、方案选择

应用微程序控制器来实现8位模型计算机的设计。

四、指令系统设计

所要设计的微程序控制器是由七条指令来完成的,即:load,sta,add,sub,and1,nop,jmp。实现功能分别如下:load指令是公操作,实现取数据的功能;sta指令实现存操作;add指令实现加法操作;sub指令实现减法操作;and指令实现与操作; nop指令实现空操作;jmp指令实现无条件跳转操作。

其中add,sub,and1,属于双操作数指令,其指令格式如下图:

目的

其中jmp属于转移指令,其指令格式如下图:

转移条件

转移地址

五、模型机框图设计

I/O

六、指令流程图

Addr_bus

load_MAR

CS

R_NW

3

OP

Nop

And

Sub

Add

Sta

Jmp Load

9

13

11

12

10

8

14

ACC_bus load_MDR transfer CS

R_NW

CS

R_NW

CS

R_NW

16

7

6

4

17

MDR_bus load_MDR 5

CS

MDR_bus

ALU_ACC

ALU_AND

MDR_bus

ALU_ACC

ALU_SUB

MDR_bus

ALU_ACC

ALU_ADD

MDR_bus

load_ACC

七、微指令格式(微程序控制器)设计

八、微程序(微程序控制器)设计

微处理器的所有数据通路宽度是8位,操作码是3位。操作码对应的编码:load—>000,sta—>001,add—>010,sub—>011,and0—>100,nop—>101,jmp—>110。

微程序的编码采用直接编码方法,有16个控制信号,外加5位地址,所以一共21位。地址3的下地址,应该根据指令操作码来形成,所以将其下地址设为01111,表示如果下地址为01111时,下地址的低3位是指令操作码,高2位固定是01,因此load指令的开始地址是01000=8,sta指令的开始地址是01001=9,同理add的是01010=10,sub的是01011=11,and1的是01100=12,nop的是01101=13,jmp的是01110=14。

九、VHDL实现

--实验12 微程序控制器实验(头文件)

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

PACKAGE cpu_defs IS

TYPE opcode IS (load, sta, add, sub, and1, nop, jmp);

CONSTANT word_w: NATURAL :=8;

CONSTANT op_w: NATURAL :=3;

CONSTANT rfill: STD_LOGIC_VECTOR(op_w-1 downto 0):=(others =>'0');

--FUNCTIOn slv2op(slv:IN STD_LOGIC_VECTOR) RETURN opcode;

FUNCTION op2slv(op:in opcode) RETURN STD_LOGIC_VECTOR;

END PACKAGE cpu_defs;

PACKAGE BODY cpu_defs IS

TYPE optable IS ARRAY(opcode) OF STD_LOGIC_VECTOR(op_w-1 DOWNTO 0);

CONSTANT trans_table:optable :=("000", "001", "010", "011", "100","101","110");

FUNCTION op2slv(op:IN opcode) RETURN STD_LOGIC_VECTOR IS

BEGIN

RETURN trans_table(op);

END FUNCTION op2slv;

--function slv2op(slv:in std_logic_vector) return opcode is

-- variable transop:opcode;

-- begin

-- for i in opcode loop

-- if slv=trans_table(i) then

-- transop:=i;

相关主题