8位模型计算机的设计

合集下载

计算机硬件课程设计报告——拓展接口的复杂模型机设计

计算机硬件课程设计报告——拓展接口的复杂模型机设计

计算机硬件课程设计报告——拓展接口的复杂模型机设计学院:计算机科学与工程学院专业:计算机科学与技术班级:组员1:组员2:起止时间:目录一、实验目的 (3)二、实验内容 (3)三、实验思路 (3)四、实验原理 (3)五、实验步骤 (10)六、实验设计 (11)七、实验心得 (14)一、实验目的经过一系列硬件课程的学习及相关实验后,做一个综合的系统性的设计,这在硬件方面是一个提高,进一步培养实践能力。

二、实验内容搭建一台有拓展接口的8位模型机,指令系统要求有10条以上,其中包括运算类指令、传送类指令、控制转移类指令、输入输出指令、停机指令等。

三、实验思路1、确定设计目标:确定所设计计算机的功能和用途。

2、确定指令系统:确定数据的表示格式、位数、指令的编码、类型、需要设计哪些指令及使用的寻址方式。

3、确定总体结构与数据通路:总体结构设计包含确定各部件设置以及它们之间的数据通路结构,列出各种信息传送路径以及实现这些传送所需要的微命令。

4、设计指令执行流程:数据通路确定后,就可以设计指令系统中每条指令的执行流程。

根据指令的复杂程度。

每条指令所需要的机器周期数。

对于微程序控制的计算机,根据总线结构,需要考虑哪些微操作可以安排在同一个微指令中。

5、确定微程序地址:根据后续微地址的形成方法,确定每条微程序地址及分支转移地址。

6、根据微指令格式,将微程序流程中的所有微操作进行二进制代码化,写入到控制存储器中的相应单元中。

7、组装、调试:在总装调试前,先按功能模块进行组装和分调,因为只有功能模块工作正常后,才能保证整机的运行正确。

四、实验原理1、指令系统及指令格式(1)数据格式8位。

(2)指令格式:指令系统应包括:算术逻辑运算指令、访存指令、控制转移指令、I/O指令、停机指令。

一般指令格式如下:O P-C O D E(4位)R S(2位)R D(2位)D A T A /A D D R (8位)其中R S 、R D 可以是R 0、R 1、R 2中任一个,它们的代码分别为00、01、10。

TEC-8计算机组成原理实验北邮

TEC-8计算机组成原理实验北邮
电平 开关
MBUS
K15
LAR MEMW
K10 K11
LPC
K12
ARINC PCINC PCADD
GND GND GND
实验任务
将实验电路与控制台的有关信号进行线路连接,方 法同前面的实验。
接好线后,将编程开关拨到“正常”位置,控制转换 开关拨到“独立”位置,合上电源,按CLR#按钮,使 TEC-8实验系统处于初始状态。
指示灯
指示灯、复位、插座
运算器74LS181
双端口RAM7132
DBUS ALU A、B C Z PC 、AR、IR、INS
ZC
数据总线 DBUS
INS7—INS0
M S0
ABUS
S1 S2
ALU
LDC
S3
LDZ
CIN A端口
B端口
T3
MBUS MEMW
T2
D7L—D0L
D7R—D0R
双端口RAM
运算。
14
运算器组成实验电路分析
双端口寄存器组由1片EPM7064组成,内部包含4 个8位寄存器R0-3,4选1选择器A、B和1个2-4译码器。 根据信号RD1-0的值选择寄存器送往ALU的A端口, 根据信号RS1-0的值选择寄存器送往ALU的B端口, 当DRW信号为1时,则在T3的上升沿,将数据总线 DBUS上的数写入相应寄存器。
VGA 接口
交通灯 喇叭
微程序控制器 单片机
LED 显示
运算器
存储器
EPM7128
VCC GND
时钟源
电位 器
单脉冲
时序
操作 模式
数据开关
电平控制信号开关
TEC-8实验系统简介

复杂模型机实验实验报告(共9篇)

复杂模型机实验实验报告(共9篇)

复杂模型机实验实验报告(共9篇)_复杂模型机实验报告计算机组成原理实验报告实验题目:一台模型计算机的总体设计之复杂模型机设计实验目的:(1)在掌握部件单元电路实验的基础上,进一步将其组成系统,构造一台复杂模型计算机,建立一台基本完整的整机。

(2)为其定义至少五条机器指令,并编写相应的微程序,通过联机调试,观察计算机执行指令:从取指令、指令译码、执行指令等过程中数据通路内数据的流动情况,进一步掌握整机概念。

实验设备TDN-CM+教学实验系统一套、微型计算机一台、排线若干。

实验原理:(1)数据格式及指令系统:①数据格式模型机规定数据采用定点整数补码表示,字长为8位,其格式如下:其中,第7位为符号位,数值表示范围是-27 ≤X≤27-1 ②指令格式模型机设计4大类指令共16条,其中包括算术逻辑指令、I/O 指令、访问及转移指令和停机指令。

A.算术逻辑指令设计九条算术逻辑指令并用单字节表示,寻址方式采用寄存器直接寻址,其格式如下:其中,OP-CODE为操作码,RS为源寄存器,RD为目标寄存器,并规定:九条算术逻辑指令的助记符、功能和具体格式见表5.2-1。

B.访问及转移指令:模型机设计两条访问指令,即存数(STA)、取数(LDA),两条转移指令,即无条件转移(JMP)、结果为零或有进位转移(BZC),指令格式如下:其中,OP-CODE为操作码,RD为目的寄存器地址(LDA、STA 指令使用)。

D为位移量(正负均可),M为寻址模式,其定义如下:本模型机规定变址寄存器RI指定为寄存器R2。

C.I/O指令:输入(IN)和输出(OUT)指令采用单字节指令,其格式如下:其中,addr=01时,选中“INPUT DEVICE”中的开关组作为输入设备,addr=10时,选中“OUTPUT DEVICE”中的数码块作为输出设备。

D.停机指令:停机指令格式如下:HALT指令,用于实现停机操作。

③指令系统:本模型机共有16条基本指令,其中算术逻辑指令七条,移位指令两条,访问内存指令和程序控制指令四条,输入/输出指令两条,其它指令一条。

8位CPU的设计与实现

8位CPU的设计与实现

计算机组成原理CPU 实验题目 8位的系统设计1115106046 号学魏忠淋姓名B 11电子班班级凌朝东指导老师华侨大学电子工程系8位CPU的系统设计一、实验要求与任务完成从指令系统到CPU的设计,编写测试程序,通过运行测试程序对CPU设计进行正确性评定。

具体内容包括:典型指令系统(包括运算类、转移类、访存类)设计;CPU结构设计;规则文件与调试程序设计;CPU调试及测试程序运行。

1.1设计指标能实现加减法、左右移位、逻辑运算、数据存取、有无条件跳转、内存访问等指令;1.2设计要求画出电路原理图、仿真波形图;二、CPU的组成结构三、元器件的选择1.运算部件(ALU)ALU181的程序代码:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ALU181 ISPORT (S : IN STD_LOGIC_VECTOR(3 DOWNTO 0 );A : IN STD_LOGIC_VECTOR(7 DOWNTO 0);B : IN STD_LOGIC_VECTOR(7 DOWNTO 0);F : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);COUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);M : IN STD_LOGIC;CN : IN STD_LOGIC;CO,FZ: OUT STD_LOGIC );END ALU181;ARCHITECTURE behav OF ALU181 ISSIGNAL A9 : STD_LOGIC_VECTOR(8 DOWNTO 0);SIGNAL B9 : STD_LOGIC_VECTOR(8 DOWNTO 0);SIGNAL F9 : STD_LOGIC_VECTOR(8 DOWNTO 0);BEGINB9 <= '0' & B ; A9 <= '0' & A ;PROCESS(M,CN,A9,B9)BEGINCASE S ISWHEN ぜ?尰=> IF M='0' THEN F9<=A9 + CN ; ELSE F9<=NOT A9; END IF;WHEN IF M='0' THEN F9<=(A9 or B9) + CN ; ELSEF9<=NOT(A9 OR B9); END IF;WHEN 0 => IF M='0' THEN F9<=(A9 or (NOT B9))+ CN ; ELSEF9<=(NOT A9) AND B9; END IF;WHEN 1 => IF M='0' THEN F9<= ; ELSEF9<= END IF;WHEN 0 => IF M='0' THEN F9<=A9+(A9 AND NOT B9)+ CN ; ELSE F9<=NOT (A9 AND B9); END IF;WHEN 1 => IF M='0' THEN F9<=(A9 or B9)+(A9 AND NOT B9)+CN ; ELSE F9<=NOT B9; END IF;WHEN 0 => IF M='0' THEN F9<=(A9 - B9) - CN ; ELSE F9<=A9 XOR B9; END IF;WHEN 1 => IF M='0' THEN F9<=(A9 or (NOT B9)) - CN ; ELSE F9<=A9 and (NOT B9); END IF;WHEN @0 => IF M='0' THEN F9<=A9 + (A9 AND B9)+CN ; ELSE F9<=(NOT A9)and B9; END IF;WHEN @1 => IF M='0' THEN F9<=A9 + B9 + CN ; ELSE F9<=NOT(A9 XOR B9); END IF;WHEN A0 => IF M='0' THEN F9<=(A9 or(NOT B9))+(A9 AND B9)+CN ;ELSE F9<=B9; END IF;WHEN A1 => IF M='0' THEN F9<=(A9 AND B9)- CN ;ELSE F9<=A9 AND B9; END IF;WHEN H0 => IF M='0' THEN F9<=(A9 + A9) + CN ; ELSEF9<= END IF;WHEN H1 => IF M='0' THEN F9<=(A9 or B9) + A9 + CN ; ELSEF9<=A9 OR (NOT B9); END IF;WHEN I0 => IF M='0' THEN F9<=((A9 or (NOT B9)) +A9) + CN ; ELSEF9<=A9 OR B9; END IF;WHEN I1 => IF M='0' THEN F9<=A9 - CN ; ELSEF9<=A9 ; END IF;WHEN OTHERS => F9<=END CASE;IF(A9=B9) THEN FZ<='0';END IF;END PROCESS;F<= F9(7 DOWNTO 0) ; CO <= F9(8) ;COUT<=END behav;ALU的原理图:2.微控制器实现信息传送要靠微命令的控制,因此在CPU 中设置微命令产生部件,根据控制信息产生微命令序列,对指令功能所要求的数据传送进行控制,同时在数据传送至运算部件时控制完成运算处理。

8位模型机设计-指令系统及通用寄存器设计

8位模型机设计-指令系统及通用寄存器设计

东北大学秦皇岛分校计算机与通信工程学院计算机组成原理课程设计专业名称计算机科学与技术班级学号学生姓名指导教师设计时间2014.12.22~2015.1.2课程设计任务书专业:计算机科学与技术学号:学生姓名(签名):设计题目:8位模型机设计-指令系统及通用寄存器设计一、设计实验条件综合楼808实验室二、设计任务及要求总的设计目标是:设计一个8 位的模型机,其组成为:总线结构:单总线,数据总线位数8位、地址总线8位;●存储器:内存容量64K*8bit●控制器:用硬联线控制器实现26位微操作控制信号●运算器:单累加器,实现加、减等8种操作外设:●输入:用开关输入二进制量●输出:7段数码管和LED显示指令系统规模:64 条指令,7种类型,5种寻址方式本组任务是:1.设计12、15、22、32号指令;2.模型机的通用寄存器R1设计;3.BCD编码器的设计。

三、设计报告的内容1.设计题目与设计任务(设计任务书)设计内容如下:1、指令系统设计:ADDC A, #II 将立即数II加入累加器A中带进位SUB A, EM 从A中减去存储器EM地址的值AND A, @R? 累加器A“与”间址存储器的值MOV A, #II 将立即数II送到累加器A中2、模型机硬件设计:通用寄存器R13、逻辑电路设计:BCD码编码器2.前言(绪论)(设计的目的、意义等)1.融会贯通计算机组成原理课程的内容,通过知识的综合运用,加深对计算机系统各个模块的工作原理及相互联系的认识;2.学习运用VHDL进行FPGA/CPLD设计的基本步骤和方法,熟悉EDA的设计、模拟调试工具的使用,体会FPGA/CPLD技术相对于传统开发技术的优点;3.培养科学研究的独立工作能力,取得工程设计与组装调试的实践经验。

3.设计主体(各部分设计内容、分析、结论等)【系统设计】1、模型机逻辑框图图1 模拟机整体逻辑框图图2 XCV200芯片引脚图3 CPU逻辑框图2、指令系统设计:ADDC A, #II 将立即数II加入累加器A中带进位助记符:ADDC A, #II类型:算数运算指令寻址方式:立即数寻址指令格式:第一字节001011XX第二字节立即数:SUB A, EM 从A中减去存储器EM地址的值助记符:SUB A, EM类型:算数运算指令寻址方式:存储器直接寻址指令格式:第一字节001110XX第二字节存储地址:AND A, @R? 累加器A“与”间址存储器的值助记符:AND A, @R?类型:算数运算指令寻址方式:寄存器间接寻址指令格式:第一字节010101XX:MOV A, #II 将立即数II送到累加器A中助记符:MOV A, #II类型:数据传送指令寻址方式:立即数寻址指令格式:第一字节011111XX第二字节立即数3、微操作控制信号:外部设备读信号,当给出了外设的地址后,输出此信号,从指定外设读数据。

8位模型机的设计与实现

8位模型机的设计与实现

结 构和数 据通 路如 图 1所 示. 制 器 是 整个 模 型 机 控
的 中心 , 由它 来控制 计算 机指 令 的执行 . 型机执行 模 指 令 的具 体过程 为 : 先 控 制器 从 指令 寄 存 器 取得 首 指令, 编译 指 令 , 输 出微 控 制 信 号 , 制 AL 的 再 控 U 运算 , C加 1 并且 从 RAM 中取 出数 据 运算 , 算 P , 运
方式后 , 要掌握 其它类 型 的 寻址 方 式 ( 接寻 址 等) 间 就 比较 容易 了. 由于我 们 设计 模 型 机 的主要 目的 又 是 为 了使 学生掌握 计算机 的工作 原理及 指令在 计算 机 中执行 的流程 , 而不 是 真 正要 实 现一 台计算 机 产 品 , 以我们 只在模 型机 中实现这 两种 寻址方式. 所
觉得 计 算 机 组 成 原 理 整 机 实验 不 再 抽 象 难 懂 . 关 键 词 :模 型 机 ; 计 与 实 现 ; 设 VHDL 中 图 分 类 号 :T 3 3 P 0 文 献 标 识 码 :A 文 章 编 号 : 1 7 一 l 9 ( 0 10 — 0 7 —0 6 1 lX 2 1 )1 0 1 3
立 即数或 存储 单元 等操 作 数 , 4位用 于保 存 指令 高 操 作码 , 模型 机 的指令 格式 如图 2 示. 所 模型 机指令
系统 包括 数据 传送 类指 令 、 术逻辑 运算 类指令 、 算 转 移类 指令 、 停机 指令 4类 指令 , 1 共 0条指令 . 每条 指 令 的助记 符 、 令格 式 、 指 机器码 和指令 功能 如表 1所
存 器读 取 下一 条指令 , 次循 环. 依
0 引 言
计算 机组成 原理是 计算 机科 学 专业 的一 门重 要 的专 业基础 课 , 内容 包 括 计算 机 部 件 和 整 机 的组 成

实验六:复杂模型机的设计与实现精编版

实验六:复杂模型机的设计与实现精编版

实验六:复杂模型机的设计与实现精编版MQS system office room 【MQS16H-TTMS2A-MQSS8Q8-MQSH16898】实验五复杂模型机的设计与实现一、实验目的综合运用所学计算机原理知识,设计并实现较为完整的计算机。

二、实验设备Dais-CMX16+计算机组成原理教学实验系统一台,实验用导线若干。

三、数据格式及指令系统1.数据格式其中第7。

2.指令格式模型机设计四大类指令共16条,其中包括算术逻辑指令、I/O指令、访问及转移指令和停机指令。

⑴算术逻辑指令设计9条算术逻辑指令并用单字节表示,寻址方式采用寄存器直接寻址,其格式如下:其中,OP-CODE其中9条算术逻辑指令的名称、功能和具体格式见表5-1。

⑵访问指令及转移指令模型机设计2条访问指令,即存数(STA)、取数(LDA),2条转移指令,即无条件转移(JMP)、结果为零或有进位转移指令(BZC指令使用)。

D为十⑶I/O指令输入(IN)和输出(⑷停机指令 指令格式如下:HALT 3. 指令系统本模型机共有16条基本指令,其中算术逻辑指令9条,访问内存指令和程序控制指令4条,输入输出指令2条,其它指令1条。

下表列出了各条指令的格式、汇编符号、指令功能。

表5-1图5-1复杂模型机微程序流程图按照系统建议的微指令格式,参照微指令流程图,将每条微指令代码化,译成二进制代四、实验方法㈠键盘操作⑴首先卸去实验连接,然后按如下操作,把系统工作方式设为“微控/在线”。

在待命状态0下按【减址】键,LCD 显示器显示工作模式选项:按【增址】键,将光标移到“MUD ”微程序模式,按【减址】键确定后,系统先询问用户是否使用搭接方式,按【增址】键选择“y ”(搭接)或“n ”(在线),按【减址】键确定:接着系统询问用户是否使用扩展I/O 方式,按【增址】键选择“y ”(扩展I/O )或“n ”(微控制器关联),按【减址】键确定:确定设置后,系统返回待命状态0。

8位模型计算机自动测试系统的设计与实现

8位模型计算机自动测试系统的设计与实现

0 引 言
( l 机 组 成 原 理 》 程 是 大 学 本 科 计 算 机 科 学 与 (- t算 课
技 术 专 业 的 主 干 课 程 , 《 算 机 组 成 原 理 》 程 设 计 而 计 课 是 学 习这 门 课程 的 关键 实 践 环 节 所 采 用 的实 验 设 备
控 制 器 模 块 由 N 2 C1 MC 7 6芯 片 、4 S 6 7 L 1 1芯 片 、
7 L 2 3芯 片 、4 S 2 4 S7 7 L 1 5芯 片 、4 S 4芯 片 和 7 L 0 7L7 4S8
芯 片 所 组 成 . 要 作 用 是 将 指令 编 译 为 控 制 信 息 . 按 主 并
操作次序将这些信息传送给相关部件
时 序 模 块 由 7 L 3 片 、4 Sl 4 S7 7 L 1 片 、4 S 9 7L33 芯 片 、4 S 2 7 L 1 3芯 片 和 L 5 M5 5芯 片 所 组 成 . 要 作 用 是 主
现 存 储 器 模 块 的读 写 操 作
运 算 器 模 块 由 7 L 1 1芯 片 、4 S 7 4S8 7 L 2 3芯 片 和
7 [ 2 4芯 片所 组 成 .主 要 作 用 是 完 成 对 操 作 数 的 运 4 4 ¥
算 功 能
图 1 测 试 系 统 的 结构
收 稿 日期 : 0 2 7 0 2 1 —0 — 3 修 稿 日期 :0 2 0 —2 21— 8 0
是 8位 模 型 计 算 机 由运 算 器 、 储 器 、 程 序 控 制 器 和 存 微
时 序 电路 等 模 块 组 成 课 程 设 计 规 模 较 大 . 线 较 多 . 接
很 容 易 出现 接 线 错 误 或 设 备 故 障 . 成 实 验 无 法 进 行 造 闪此 . 实 验 前 . 要 对 实 验 设 备 进 行 测 试 如 果 采 用 在 需 手工测 试 . 则工 作 量 过 大 , 乎 无 法 实 现 本 文 设 计 了 儿 基 于 MC 一 】 单 片 机 自动 测 试 系统 , 别 对 运 算 器 、 S5 的 分
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

石家庄经济学院华信学院计算机组成原理课程设计报告题目 8位模型计算机的设计姓名学号班号 4064170801指导老师关文革尹立洁赵洋成绩2009年1月目录1. 课程设计目的 522. 开发工具选择 523. 方案选择 524.指令系统设计 525. 模型机框图设计 526. 指令流程图 527. 指令操作时间表(组合逻辑控制器)或者微指令格式(微程序控制器)设计 528. 微操作信号综合与优化(组合逻辑控制器)或者微程序(微程序控制器)设计 529. VHDL实现 5210. 调试仿真 5211. 课程设计回顾总结 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_busload_MARCSR_NW3OPNopAndSubAddStaJmp Load913111210814ACC_bus load_MDR transfer CSR_NWCSR_NWCSR_NW1676417MDR_bus load_MDR 5CSMDR_busALU_ACCALU_ANDMDR_busALU_ACCALU_SUBMDR_busALU_ACCALU_ADDMDR_busload_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 ISTYPE 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 ISTYPE 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 ISBEGINRETURN 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;-- end if;-- end loop;-- return transop;--end function slv2op;END PACKAGE BODY cpu_defs;--实验12 微程序控制器实验LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL,IEEE.NUMERIC_STD.ALL;USE WORK.CPU_DEFS.ALL;ENTITY CPU ISPORT( clock : IN STD_LOGIC;reset : IN STD_LOGIC;mode : IN STD_LOGIC_VECTOR(2 DOWNTO 0);mem_addr : IN UNSIGNED(word_w-op_w-1 DOWNTO 0);output : OUT STD_LOGIC_VECTOR(word_w-1 DOWNTO 0);data_r_out : OUT STD_LOGIC_VECTOR(21 DOWNTO 0);op_out : OUT STD_LOGIC_VECTOR(op_w-1 DOWNTO 0);add_r_out : OUT UNSIGNED(4 DOWNTO 0));END ENTITY;ARCHITECTURE rtl OF CPU ISTYPE mem_array IS ARRAY (0 TO 2**(word_w-op_w)-1) OF STD_LOGIC_VECTOR(word_w-1 DOWNTO 0);SIGNAL mem : mem_array;CONSTANT prog : mem_array:=(0=> op2slv(load) & STD_LOGIC_VECTOR(TO_UNSIGNED(7,word_w-op_w)),1=> op2slv(sta) & STD_LOGIC_VECTOR(TO_UNSIGNED(8,word_w-op_w)),2=> op2slv(add) & STD_LOGIC_VECTOR(TO_UNSIGNED(9,word_w-op_w)),3=> op2slv(sub) & STD_LOGIC_VECTOR(TO_UNSIGNED(10,word_w-op_w)),4=> op2slv(and1) & STD_LOGIC_VECTOR(TO_UNSIGNED(11,word_w-op_w)),5=> op2slv(nop) & STD_LOGIC_VECTOR(TO_UNSIGNED(12,word_w-op_w)),6=> op2slv(jmp) & STD_LOGIC_VECTOR(TO_UNSIGNED(8,word_w-op_w)),7=> STD_LOGIC_VECTOR(TO_UNSIGNED(2,word_w)),8=> STD_LOGIC_VECTOR(TO_UNSIGNED(3,word_w)),9=> STD_LOGIC_VECTOR(TO_UNSIGNED(4,word_w)),10=> STD_LOGIC_VECTOR(TO_UNSIGNED(5,word_w)),11=> STD_LOGIC_VECTOR(TO_UNSIGNED(6,word_w)),OTHERS => (OTHERS =>'0'));TYPE microcode_array IS ARRAY (0 TO 17) OF STD_LOGIC_VECTOR(21 DOWNTO 0);CONSTANT code : microcode_array:=(0=> "0000010100010000000001",1=> "0000000000000110000010",2=> "0000001010000000000011",3=> "0000000100001000001111",4=> "0000100010000000000000",5=> "0000000000000100000000",6=> "0000000010100001000000",7=> "0000000010100000100000",8=> "0000000000000110000100",9=> "0101000001000000000101",10=> "0000000000000110000110",11=> "0000000000000110000111",12=> "0000000000000110010000",13=> "0000000000000000000000",14=> "0000000000000110010001",15=> "0000000000000000000000",16=> "1000000010100000000000",17=> "0010000010000000000000");SIGNAL count : UNSIGNED(word_w-op_w-1 DOWNTO 0);SIGNAL op : STD_LOGIC_VECTOR(op_w-1 DOWNTO 0);SIGNAL z_flag : STD_LOGIC;SIGNAL mdr_out : STD_LOGIC_VECTOR(word_w-1 DOWNTO 0);SIGNAL mar_out : UNSIGNED(word_w-op_w-1 DOWNTO 0);SIGNAL IR_out : STD_LOGIC_VECTOR(word_w-1 DOWNTO 0);SIGNAL acc_out : UNSIGNED(word_w-1 DOWNTO 0);SIGNAL sysbus_out : STD_LOGIC_VECTOR(word_w-1 DOWNTO 0);BEGINPROCESS(reset,clock)VARIABLE instr_reg : STD_LOGIC_VECTOR(word_w-1 DOWNTO 0);VARIABLE acc : UNSIGNED(word_w-1 DOWNTO 0);CONSTANT zero : UNSIGNED(word_w-1 DOWNTO 0):=(OTHERS =>'0');VARIABLE mdr : STD_LOGIC_VECTOR(word_w-1 DOWNTO 0);VARIABLE mar : UNSIGNED(word_w-op_w-1 DOWNTO 0);VARIABLE sysbus : STD_LOGIC_VECTOR(word_w-1 DOWNTO 0);VARIABLE microcode : microcode_array;VARIABLE add_r : UNSIGNED(4 DOWNTO 0);VARIABLE data_r : STD_LOGIC_VECTOR(21 DOWNTO 0);VARIABLE temp : STD_LOGIC_VECTOR(4 DOWNTO 0);BEGINIF reset='0' THENadd_r:=(OTHERS =>'0');count <= (OTHERS =>'0');instr_reg := (OTHERS =>'0');acc := (OTHERS =>'0');mdr := (OTHERS =>'0');mar := (OTHERS =>'0');z_flag <='0';mem <= prog;sysbus :=(OTHERS =>'0');ELSIF RISING_EDGE(clock) THEN--microprogram controllerdata_r := code(TO_INTEGER(add_r));IF data_r(4 DOWNTO 0)="01111" THEN --判断下地址temp:="01" & op(2 DOWNTO 0);add_r := UNSIGNED(temp);ELSEadd_r := UNSIGNED(data_r(4 DOWNTO 0));END IF;data_r_out <=data_r;add_r_out <= add_r;--PCIF data_r(16)='1' THEN --PC_bus='1'sysbus := rfill & STD_LOGIC_VECTOR(count);END IF;IF data_r(19)='1' THEN --load_PC='1'count <= UNSIGNED(mdr(word_w-op_w-1 DOWNTO 0));ELSIF data_r(10)='1' THEN --INC_PC='1'count <= count+1;ELSEcount <= count;END IF;--IRIF data_r(15)='1' THEN --load_IRinstr_reg := mdr;END IF;IF data_r(9)='1' THEN --Addr_bus='1'sysbus := rfill & instr_reg(word_w-op_w-1 DOWNTO 0);END IF;op <= instr_reg(word_w-1 DOWNTO word_w-op_w);IR_out <= instr_reg;op_out <=op;--ALUIF data_r(17)='1' THEN --load_ACC='1'acc:=UNSIGNED(mdr);END IF;IF data_r(11)='1' THEN --ALU_ACC='1'IF data_r(6)='1' THEN --ALU_add='1'acc := acc + UNSIGNED(mdr);ELSIF data_r(5)='1' THEN --ALU_sub='1'acc := acc - UNSIGNED(mdr);ELSIF data_r(20)='1' THEN --Transfer='1'acc := acc ;ELSIF data_r(21)='1' THEN --ALU_and1='1'acc := acc and UNSIGNED(mdr);END IF;END IF;IF data_r(18)='1' THEN --ACC_bus='1'sysbus := STD_LOGIC_VECTOR(acc);END IF;acc_out<= acc;--RAMIF data_r(14)='1' THEN --load_MAR='1'mar := UNSIGNED(sysbus(word_w-op_w-1 DOWNTO 0));ELSIF data_r(12)='1' THEN --load_MDR='1'mdr := sysbus;ELSIF data_r(8)='1' THEN --CS='1'IF data_r(7)='1' THEN --R_NW='1'mdr := mem(TO_INTEGER(mar));ELSEmem(TO_INTEGER(mar))<=mdr;END IF;END IF;IF data_r(13)='1' THEN --MDR_bus='1'sysbus:=mdr;END IF;mdr_out <= mdr;mar_out <= mar;END IF;sysbus_out <=sysbus;END PROCESS;PROCESS(mode,mem_addr)BEGIN--mode=0 -> sysbus--mode=1 -> PC--mode=2 -> result of ALU--mode=3 -> IR--mode=4 -> MAR--mode=5 -> MDR--mode=6 -> memoutput <= (OTHERS =>'0');CASE mode isWHEN "000" =>output<=sysbus_out;WHEN "001" =>output(word_w-op_w-1 DOWNTO 0)<= STD_LOGIC_VECTOR(count);WHEN "010" =>output <= STD_LOGIC_VECTOR(acc_out);WHEN "011" =>output <= IR_out;WHEN "100" =>output(word_w-op_w-1 DOWNTO 0) <= STD_LOGIC_VECTOR(mar_out);WHEN "101" =>output <= mdr_out;WHEN "110" =>output <= mem(TO_INTEGER(mem_addr));WHEN others =>output <= (OTHERS =>'Z');END CASE;END PROCESS;END ARCHITECTURE;十、调试仿真1、实现load到sta的操作2、实现sta到add的操作3、实现add到sub的操作4、实现sub到and1的操作5、实现and1到nop的操作6、实现nop到jmp的操作6、实现jmp跳转后的操作十一、课程设计回顾总结本次课程设计我们要设计一台微程序控制的模型计算机,完成对计算机组成原理这门课程的综合应用,达到学习本书的作用。

相关文档
最新文档