模型机课程设计

合集下载

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

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

计算机硬件课程设计报告——拓展接口的复杂模型机设计学院:计算机科学与工程学院专业:计算机科学与技术班级:组员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。

复杂模型机课程设计分工

复杂模型机课程设计分工

复杂模型机课程设计分工一、教学目标本章节的教学目标是使学生掌握复杂模型的机课程设计分工的相关知识,能够理解并运用相关技能进行模型设计。

具体目标如下:1.了解复杂模型的定义及其在工程设计中的应用。

2.掌握机课程设计分工的基本原则和方法。

3.熟悉不同类型模型的设计流程和要点。

4.能够运用相关软件进行模型的建立和优化。

5.能够根据设计需求,合理分配设计任务,并进行分工协作。

6.能够进行模型的验证和修正,以满足设计要求。

情感态度价值观目标:1.培养学生的团队合作意识和能力。

2.培养学生的创新思维和解决问题的能力。

3.培养学生的工程责任感和职业操守。

二、教学内容本章节的教学内容主要包括复杂模型的定义和应用、机课程设计分工的基本原则和方法、不同类型模型的设计流程和要点。

具体内容包括:1.复杂模型的定义及其在工程设计中的应用。

2.机课程设计分工的基本原则和方法,包括分工的依据、分工的流程和分工的评估等。

3.不同类型模型的设计流程和要点,包括机械结构模型、电气控制系统模型和软件系统模型等。

三、教学方法为了达到本章节的教学目标,将采用多种教学方法进行教学,包括讲授法、案例分析法、实验法等。

具体方法如下:1.讲授法:通过讲解复杂模型的定义、机课程设计分工的基本原则和方法等理论知识,使学生掌握相关概念和理论。

2.案例分析法:通过分析实际案例,使学生了解不同类型模型的设计流程和要点,提高学生的实际操作能力。

3.实验法:通过实验室实践,使学生能够运用相关软件进行模型的建立和优化,培养学生的实际操作能力。

四、教学资源为了支持本章节的教学内容和教学方法的实施,将选择和准备以下教学资源:1.教材:选用《复杂模型机课程设计分工》教材,作为学生学习的主要参考资料。

2.参考书:推荐学生阅读相关领域的参考书籍,以拓展知识面。

3.多媒体资料:制作PPT、视频等多媒体资料,以便进行生动形象的讲解和展示。

4.实验设备:准备计算机、相关软件等实验设备,以便进行实验室实践教学。

计算机组成原理课程设计报告_基本模型机的设计与实现

计算机组成原理课程设计报告_基本模型机的设计与实现

本次课程设计的任务是完成一个基本模型机的设计与实现。

设计经过综合运用了以前所学计算机原理的知识,依照设计要求和指导,实现了一个基本的模型计算机。

本模型机实现的功能有:IN(输入),OUT(输出),ADD(加法),SUB(减法),STA(存数),JMP(跳转)。

设计进行开始,在了解微程序的基本格式, 及各个字段值的作用后, 按微指令格式参照指令流程图,设计出程序以及微程序,将每条微指令代码化,译成二进制代码表,并将二进制代码转换为联机操作时的十六进制格式文件。

根据机器指令系统要求,设计微程序流程图及确定微地址。

设计的加法和减法中, 被加数和被减数都由调试人员输入, 而加数和减数都从存储器中读取. 最后上机调试,各个功能运行结果正确。

关键词:基本模型机;机器指令;微指令目录1、课程设计题目-----------------------------------------------12、实验设备---------------------------------------------------13、课程设计步骤-----------------------------------------------13.1、所设计计算机的功能和用途------------------------------13.2、指令系统----------------------------------------------23.3、总体结构与数据通路------------------------------------23.4、设计指令执行流程--------------------------------------33.5、微指令代码化------------------------------------------43.6、组装和调试----------------------------------------------54、课程设计总结-----------------------------------------------75、附录-----------------------------------------------------------------------------------8附录1:数据通路图----------------------------------------------------------8 附录2:微程序流程图--------------------------------------------------------9 附录3:实验接线图------------------------------------------------------------10 附录4:实验程序及微程序---------------------------------------------------11 附录5:参考文献(资料)-----------------------------------121、课程设计题目基本模型机的设计与实现2、实验设备TDN—CM++计算机组成原理教学实验系统一台,微机,虚拟软件,排线若干。

复杂模型机实验实验报告(共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条基本指令,其中算术逻辑指令七条,移位指令两条,访问内存指令和程序控制指令四条,输入/输出指令两条,其它指令一条。

电动发电机模型课程设计

电动发电机模型课程设计

电动发电机模型课程设计一、课程目标知识目标:1. 学生能理解电动发电机的工作原理,掌握其基本构造及各部件功能。

2. 学生能掌握能量转换的基本概念,并能够解释电动发电机中电能与机械能的转换过程。

3. 学生能运用物理公式,进行简单电路计算,理解发电机输出电压与转速之间的关系。

技能目标:1. 学生能够独立操作电动发电机模型,进行基本的组装和调试。

2. 学生通过实践,学会使用电压表、电流表等工具,进行电路参数的测量。

3. 学生能够运用问题解决策略,对发电机模型进行故障排除和性能优化。

情感态度价值观目标:1. 学生通过探索电动发电机的原理,培养对科学技术的兴趣和好奇心。

2. 学生在学习过程中,发展合作意识和团队精神,学会在团队中交流想法和解决问题。

3. 学生能够认识到能源转换技术在生活中的应用,树立节能环保的意识。

课程性质分析:本课程属于科学实践活动,结合物理知识与动手操作,旨在提高学生的科学素养。

学生特点分析:考虑到学生处于能够理解抽象概念并具备一定动手能力的年级,课程设计将注重理论与实践的结合。

教学要求分析:课程要求学生在掌握理论知识的基础上,通过实践活动深化理解,达到知识技能和情感态度价值观的全面提升。

通过具体的学习成果分解,确保教学设计和评估的有效实施。

二、教学内容1. 理论知识:- 电能的产生与转换原理。

- 电动发电机的基本结构,包括磁铁、线圈、轴承等部件的作用。

- 电路基础知识,包括欧姆定律、串联并联电路的特点。

- 发电机输出电压与转速的关系。

2. 实践操作:- 电动发电机模型的组装与调试。

- 使用电压表、电流表进行电路参数的测量。

- 探究不同因素(如转速、电流)对发电机输出电压的影响。

- 故障排查与性能优化。

3. 教学大纲:- 第一阶段:理论知识学习,介绍电动发电机的基本原理与结构。

- 第二阶段:实践操作,学生分组进行发电机模型的组装与调试。

- 第三阶段:实验探究,通过测量与数据分析,理解发电机工作原理。

计算机组成原理-简单模型机设计课设

计算机组成原理-简单模型机设计课设

目录摘要 (2)前言 (3)正文 (4)一、设计目的和设计原理 (4)1.1设计目的 (4)1.2设计原理 (4)二、总体设计 (7)三、详细设计 (8)3.1运算器的物理结构 (8)3.2存储器系统的组成与说明 (11)3.3指令系统的设计与指令分析 (12)3.4微程序控制器的逻辑结构及功能 (14)3.5微程序的设计与实现 (18)四、系统调试 (27)总结 (29)参考文献 (30)致谢 (31)摘要根据设计任务书要求,本设计要实现完成一个简单计算机的设计,主要设计部分有运算器,存储器,控制器以及微指令的设计。

其中运算器由运算芯片和寄存器来完成,存储器由总线和寄存器构成,使用硬布线的方式实现控制器,从而完成设计要求。

:关键词:基本模型机的设计;运算器;存储器;控制器;前言计算机组成原理是计算机科学技术学科的一门核心专业基础课程。

从课程的地位来说,它在先导课程和后续课程之间起着承上启下的作用。

计算机组成原理讲授单处理机系统的组成和工作原理,课程教学具有知识面广,内容多,难度大,更新快等特点。

此次课程设计目的就是为了加深对计算机的时间和空间概念的理解, 增强对计算机硬件和计算机指令系统的更进一步了解。

计算机组成原理课程设计目的是为加深对计算机工作原理的理解以及计算机软硬件之间的交互关系。

不仅能加深对计算机的时间和空间的关系的理解,更能增加如何实现计算机软件对硬件操作,让计算机有条不紊的工作。

正文一、设计目的和设计原理1.1设计目的融会贯通计算机组成原理课程中各章的内容,通过知识的综合运用,加深对计算机系统各模块的工作原理及相互联系的认识,特别是对硬连线控制器的认识,建立清晰的整机概念。

对计算机的基本组成、部件的设计、部件间的连接、微程序控制器的设计、微指令和微程序的编制与调试等过程有更深的了解,加深对理论课程的理解。

在掌握部件单元电路实验的基础上,进一步将其组成系统地构造一台基本模型计算机。

航模模拟飞行课程设计

航模模拟飞行课程设计

航模模拟飞行课程设计一、教学目标本课程旨在通过航模模拟飞行教学,让学生了解航模飞行的基本原理和操作技巧,掌握航模飞机的结构和功能,培养学生对航空科技的兴趣和爱好。

具体目标如下:知识目标:1. 了解航模飞行的基本原理;2. 掌握航模飞机的结构和功能;3. 了解航空科技的发展趋势。

技能目标:1. 学会航模飞机的基本操作技巧;2. 能够独立完成航模飞机的组装和调试;3. 能够进行简单的航模飞行表演。

情感态度价值观目标:1. 培养学生对航空科技的兴趣和爱好;2. 培养学生勇于探索、创新的精神;3. 培养学生团队合作、分享的意识。

二、教学内容本课程的教学内容主要包括航模飞行的基本原理、航模飞机的结构和功能、航模操作技巧以及航空科技的发展趋势。

教学大纲安排如下:第1课时:航模飞行概述1.航模飞行的基本原理2.航模飞机的结构和功能第2课时:航模操作技巧1.航模飞机的基本操作2.航模飞行表演技巧第3课时:航空科技发展趋势1.航空科技的现状2.航空科技的发展趋势三、教学方法本课程采用讲授法、实践操作法和小组讨论法相结合的教学方法。

1.讲授法:用于讲解航模飞行的基本原理、航模飞机的结构和功能以及航空科技的发展趋势。

2.实践操作法:用于教授航模飞机的基本操作技巧,学生亲自动手实践,提高操作能力。

3.小组讨论法:用于探讨航空科技的发展趋势,培养学生的团队协作能力和创新思维。

四、教学资源1.教材:选用《航模飞行教程》作为主教材,系统地介绍航模飞行的基本知识和操作技巧。

2.参考书:推荐《航空科技发展史》等参考书籍,帮助学生了解航空科技的发展历程。

3.多媒体资料:制作课件和教学视频,形象生动地展示航模飞行原理和操作技巧。

4.实验设备:准备航模飞机模型、组装工具等实验设备,为学生提供实践操作的机会。

五、教学评估本课程的评估方式包括平时表现、作业和考试三个部分,以全面客观地评价学生的学习成果。

1.平时表现:占比30%,主要评估学生在课堂上的参与度、提问回答和团队合作表现。

简单模型机的微程序设计

简单模型机的微程序设计
程序计数器PC的功能是存放下一条指令的地址,其输出是向地址寄存器提供要将执行的指令在存储器中的地址。在提供地址后立即加1,指向指令的下一个字节或下一条指令的地址。其控制微命令有三个。当LOAD=0而LDPC=1时,由T4的正跳变将数据总线上的数据装入PC;当当LOAD=1而LDPC=1时PC的内容加1;当PCB=1时,PC中的地址信息送到数据总线上。
微指令000001001110000000001010
执行的操作是:存储器CE有效,存储器读,LDAR,转微地址:0A
微指令000001001010000000001011
执行的操作是:存储器CE有效,存储器读,LDDR1,转微地址:0B
微指令000001110000101000000001
执行的操作是:算术:A,数码管LEDB有效,写LED,ALU→B,转微地址:01
异或指令XOR RD,RS:(RS)异或(RD)→(RD)
四.进度安排
共1.5周11天的时间,具体安排如下:
1~2天:对整个课程设计的内容做详细的讲解,并辅导学生完成课程设计指导书的学习,使其掌握和理解课程设计的核心内容;
3 ~5天:学生在机房学习熟悉课程设计所使用的仿真软件,并深入了解该仿真软件所实现 的模型机的指令系统(原有的5条指令)和微程序设计方法;
6~9天:在原有5条机器指令的基础上增加实现下述各功能的机器指令,试设计相应的机器指令的格式并改写原来的微程序使其可以运行所有的机器指令;
10~11天:根据自己设计的微程序系统写出相应的课程设计实验报告;
五.成绩评定
六.正文
一、模型机的CPU及系统硬件
基本模型机的CPU及系统硬件组成如图1所示
图1 模型机的CPU及系统硬件组成
课程设计报告
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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) 将转移目标地址加载于MAR2)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 ISCONSTANT 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";CONSTANT clear : std_logic_vector(4 DOWNTO 0) :="10010";CONSTANT absp : std_logic_vector(4 DOWNTO 0) :="10011";CONSTANT modp : std_logic_vector(4 DOWNTO 0) :="10100";END namespack;LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;USE spack.ALL;ENTITY cpu ISPORT(reset : IN std_logic; --清零信号低有效clock : IN std_logic; --时钟信号Write_Read: OUT std_logic; --读写信号,'1'为写M_address: OUT std_logic_vector(10 DOWNTO 0); --地址线M_data_in: IN std_logic_vector(7 DOWNTO 0); --数据输入线M_data_out: OUT std_logic_vector(7 DOWNTO 0); --数据输出线overflow: OUT std_logic --溢出标志);END cpu;ARCHITECTURE RTL OF cpu ISSIGNAL IR: std_logic_vector(15 DOWNTO 0); --指令寄存器SIGNAL MDR: std_logic_vector(7 DOWNTO 0); --数据寄存器SIGNAL MAR: std_logic_vector(10 DOWNTO 0); --地址寄存器SIGNAL status: integer RANGE 0 TO 6; --状态寄存器BEGINstatus_change: PROCESS(reset, clock, status )BEGINIF reset = '0' THEN status <= 0 ; -- 进入初始状态ELSIF clock'EVENT AND clock = '0' THENCASE status ISWHEN 0 =>status <= 1;WHEN 1 =>IF IR(15 DOWNTO 11)= Stop THENstatus <= 1;ELSEstatus <= 2;END IF;WHEN 2 =>CASE IR(15 DOWNTO 11) ISWHEN Swap|Jmp|Jz|Read|Write =>status <= 3;WHEN OTHERS =>status <= 0;END CASE;WHEN 3 =>IF IR(15 DOWNTO 11)= Swap THENstatus <= 0;ELSEstatus <= 4;END IF;WHEN 4 =>status <= 5;WHEN 5 =>CASE IR(15 DOWNTO 11) ISWHEN Read|Write =>status <= 6;WHEN OTHERS =>status <= 0;END CASE;WHEN 6=>CASE IR(15 DOWNTO 11) ISWHEN Comp=>status<=0;WHEN NotP=>status<=0;WHEN Clear=>status<=0;WHEN AbsP=>status<=0;WHEN ModP=>status<=0;WHEN OTHERS=>status <= 0;END CASE;END CASE;END IF;END PROCESS status_change;seq: PROCESS(reset,clock)V ARIABLE PC:std_logic_vector(10 DOWNTO 0);--程序计数器V ARIABLE R0,R1,R2,R3: std_logic_vector(7 DOWNTO 0); --通用寄存器V ARIABLE A: std_logic_vector(7 DOWNTO 0); --临时寄存器V ARIABLE RC: std_logic_vector(7 DOWNTO 0); --比较结果寄存器V ARIABLE RM: std_logic_vector(7 DOWNTO 0); --取模结果寄存器V ARIABLE temp: std_logic_vector(8 DOWNTO 0);--临时变量BEGINIF(reset='0') THEN -- 进入初始状态IR <= (OTHERS=>'0');PC := (OTHERS=>'0');R0 := (OTHERS=>'0');R1 := (OTHERS=>'0');R2 := (OTHERS=>'0');R3 := (OTHERS=>'0');A := (OTHERS=>'0');MAR <= (OTHERS=>'0');MDR <= (OTHERS=>'0');ELSIF(clock'event AND clock='1') THENoverflow <= '0';CASE status ISWHEN 0=> --状态0IR <= M_data_in & "00000000"; --取指令PC := PC+1; --程序计数器加1WHEN 1=> --状态1IF (IR(15 DOWNTO 11) /= Stop) THENMAR <= PC;END IF;CASE IR(15 DOWNTO 11) ISWHEN Load =>R0:="0000" & IR(10 DOWNTO 7);WHEN Move => --Move Rx,Ry;CASE IR(10 DOWNTO 7) ISWHEN "0001"=> R0:=R1;WHEN "0010"=> R0:=R2;WHEN "0011"=> R0:=R3;WHEN "0100"=> R1:=R0;WHEN "0110"=> R1:=R2;WHEN "0111"=> R1:=R3;WHEN "1000"=> R2:=R0;WHEN "1001"=> R2:=R1;WHEN "1011"=> R2:=R3;WHEN "1100"=> R3:=R0;WHEN "1101"=> R3:=R1;WHEN "1110"=> R3:=R2;WHEN OTHERS=> NULL;END CASE;WHEN Shrp => --逻辑右移1位;CASE IR(10 DOWNTO 9) ISWHEN "00"=>R0:='0'&R0(7 DOWNTO 1);WHEN "01"=>R1:='0'&R1(7 DOWNTO 1);WHEN "10"=>R2:='0'&R2(7 DOWNTO 1);WHEN OTHERS=>R3:='0'&R3(7 DOWNTO 1);END CASE;WHEN Shlp => --逻辑左移1位;CASE IR(10 DOWNTO 9) ISWHEN "00"=>R0:=R0(6 DOWNTO 0)&'0';WHEN "01"=>R1:=R1(6 DOWNTO 0)&'0';WHEN "10"=>R2:=R2(6 DOWNTO 0)&'0';WHEN OTHERS=>R3:=R3(6 DOWNTO 0)&'0';END CASE;WHEN Addp|Subp|Andp|Orp|Xorp|Swap =>CASE IR(8 DOWNTO 7) ISWHEN "00"=> A:=R0;WHEN "01"=> A:=R1;WHEN "10"=> A:=R2;WHEN OTHERS=> A:=R3;END CASE;WHEN OTHERS => NULL;END CASE;WHEN 2=> --状态2CASE IR(15 DOWNTO 11) ISWHEN Addp => --Rx:= Rx+A;CASE IR(10 DOWNTO 9) ISWHEN "00"=>temp := (R0(7) & R0(7 DOWNTO 0)) + (A(7) & A(7 DOWNTO 0));R0:=temp(7 DOWNTO 0);overflow <= temp(8) XOR temp(7);WHEN "01"=>temp :=(R1(7) & R1(7 DOWNTO 0)) + (A(7) & A(7 DOWNTO 0));R1:=temp(7 DOWNTO 0);overflow <= temp(8) XOR temp(7);WHEN "10"=>temp :=(R2(7) & R2(7 DOWNTO 0)) + (A(7) & A(7 DOWNTO 0));R2:=temp(7 DOWNTO 0);overflow <= temp(8) XOR temp(7);WHEN OTHERS=>temp :=(R3(7) & R3(7 DOWNTO 0)) + (A(7) & A(7 DOWNTO 0));R3:=temp(7 DOWNTO 0);overflow <= temp(8) XOR temp(7);END CASE;WHEN Subp => --Rx:= Rx-A;CASE IR(10 DOWNTO 9) ISWHEN "00"=>temp :=(R0(7) & R0(7 DOWNTO 0)) + NOT(A(7) & A(7 DOWNTO 0)) + 1;R0:=temp(7 DOWNTO 0);overflow <= temp(8) XOR temp(7);WHEN "01"=>temp :=(R1(7) & R1(7 DOWNTO 0)) + NOT(A(7) & A(7 DOWNTO 0)) + 1;R1:=temp(7 DOWNTO 0);overflow <= temp(8) XOR temp(7);WHEN "10"=>temp :=(R2(7) & R2(7 DOWNTO 0)) + NOT(A(7) & A(7 DOWNTO 0)) + 1;R2:=temp(7 DOWNTO 0);overflow <= temp(8) XOR temp(7);WHEN OTHERS=>temp :=(R3(7) & R3(7 DOWNTO 0)) + NOT(A(7) & A(7 DOWNTO 0)) + 1;R3:=temp(7 DOWNTO 0);overflow <= temp(8) XOR temp(7);END CASE;WHEN Andp => -- Rx:= Rx AND A;CASE IR(10 DOWNTO 9) ISWHEN "00"=>R0:=R0 and A;WHEN "01"=>R1:=R1 and A;WHEN "10"=>R2:=R2 and A;WHEN OTHERS=>R3:=R3 and A;END CASE;WHEN Orp => -- Rx := Rx OR A;CASE IR(10 DOWNTO 9) ISWHEN "00"=>R0:=R0 or A;WHEN "01"=>R1:=R1 or A;WHEN "10"=>R2:=R2 or A;WHEN OTHERS=>R3:=R3 or A;END CASE;WHEN Xorp => --Rx=Rx XOR A;CASE IR(10 DOWNTO 9) ISWHEN "00"=>R0:=R0 XOR A;WHEN "01"=>R1:=R1 XOR A;WHEN "10"=>R2:=R2 XOR A;WHEN OTHERS=>R3:=R3 XOR A;END CASE;WHEN Swap => --Swap: Rx to Ry;CASE IR(10 DOWNTO 7) ISWHEN "0100"=>R0:=R1;WHEN "1000"=>R0:=R2;WHEN "1100"=>R0:=R3;WHEN "0001"=>R1:=R0;WHEN "1001"=>R1:=R2;WHEN "1101"=>R1:=R3;WHEN "0010"=>R2:=R0;WHEN "0110"=>R2:=R1;WHEN "1110"=>R2:=R3;WHEN "0111"=>R3:=R1;WHEN "1011"=>R3:=R2;WHEN "0011"=>R3:=R0;WHEN OTHERS=>NULL;END CASE;WHEN OTHERS => NULL;END CASE;WHEN 3=> --状态3CASE IR(15 DOWNTO 11) ISWHEN "01010"=> --SwapCASE IR(10 DOWNTO 9) ISWHEN "00"=> R0:=A;WHEN "01"=> R1:=A;WHEN "10"=> R2:=A;WHEN OTHERS=> R3:=A;END CASE;WHEN Jmp|Jz|Read|Write =>IR(7 DOWNTO 0)<= M_data_in; -- 取双字节指令的后半部PC := PC+1;WHEN OTHERS => NULL;END CASE;WHEN 4=> --状态4CASE IR(15 DOWNTO 11) ISWHEN Jmp =>PC := IR(10 DOWNTO 0);MAR <= IR(10 DOWNTO 0);WHEN Jz =>IF(R0="00000000") THENPC := IR(10 DOWNTO 0);MAR <= IR(10 DOWNTO 0);ELSEMAR <= PC;END IF;WHEN Read =>MAR <= IR(10 DOWNTO 0);WHEN Write =>MAR <= IR(10 DOWNTO 0);MDR <= R0;WHEN OTHERS => NULL;END CASE;WHEN 5=> --状态5MAR <= PC;WHEN 6=> --状态6CASE IR(15 DOWNTO 11) ISWHEN Comp => --比较CASE IR(10 DOWNTO 7) ISWHEN "0001"=> A:=R1-R0;IF A(7 DOWNTO 0)="00000000" THENRC(7 DOWNTO 6):="00"; --相等ELSIF A(7)='1' THENRC(7 DOWNTO 6):="01"; --R0>R1ELSE RC(7 DOWNTO 6):="10"; --R0<R1END IF;WHEN "0010"=> A:=R2-R0;IF A(7 DOWNTO 0)="00000000" THENRC(7 DOWNTO 6):="00";ELSIF A(7)='1' THENRC(7 DOWNTO 6):="01";ELSE RC(7 DOWNTO 6):="10" ;END IF;WHEN "0011"=> A:=R3-R0;IF A(7 DOWNTO 0)="00000000" THENRC(7 DOWNTO 6):="00";ELSIF A(7)='1' THENRC(7 DOWNTO 6):="01";ELSE RC(7 DOWNTO 6):="10";END IF;WHEN "0100"=> A:=R0-R1;IF A(7 DOWNTO 0)="00000000" THENRC(7 DOWNTO 6):="00";ELSIF A(7)='1' THENRC(7 DOWNTO 6):="01";ELSE RC(7 DOWNTO 6):="10";END IF;WHEN "0110"=> A:=R2-R1;IF A(7 DOWNTO 0)="00000000" THENRC(7 DOWNTO 6):="00";ELSIF A(7)='1' THENRC(7 DOWNTO 6):="01";ELSE RC(7 DOWNTO 6):="10";END IF;WHEN "0111"=> A:=R3-R1;IF A(7 DOWNTO 0)="00000000" THENRC(7 DOWNTO 6):="00";ELSIF A(7)='1' THENRC(7 DOWNTO 6):="01";ELSE RC(7 DOWNTO 6):="10";END IF;WHEN "1000"=> A:=R0-R2;IF A(7 DOWNTO 0)="00000000" THENRC(7 DOWNTO 6):="00";ELSIF A(7)='1' THENRC(7 DOWNTO 6):="01";ELSE RC(7 DOWNTO 6):="10";END IF;WHEN "1001"=> A:=R1-R2;IF A(7 DOWNTO 0)="00000000" THENRC(7 DOWNTO 6):="00";ELSIF A(7)='1' THENRC(7 DOWNTO 6):="01";ELSE RC(7 DOWNTO 6):="10";END IF;WHEN "1011"=> A:=R3-R2;IF A(7 DOWNTO 0)="00000000" THENRC(7 DOWNTO 6):="00";ELSIF A(7)='1' THENRC(7 DOWNTO 6):="01";ELSE RC(7 DOWNTO 6):="10";END IF;WHEN "1100"=> A:=R0-R3;IF A(7 DOWNTO 0)="00000000" THENRC(7 DOWNTO 6):="00";ELSIF A(7)='1' THENRC(7 DOWNTO 6):="01";ELSE RC(7 DOWNTO 6):="10";END IF;WHEN "1101"=> A:=R1-R3;IF A(7 DOWNTO 0)="00000000"THENRC(7 DOWNTO 6):="00";ELSIF A(7)='1' THENRC(7 DOWNTO 6):="01";ELSE RC(7 DOWNTO 6):="10";END IF;WHEN "1110"=> A:=R2-R3;IF A(7 DOWNTO 0)="00000000" THENRC(7 DOWNTO 6):="00";ELSIF A(7)='1' THENRC(7 DOWNTO 6):="01";ELSE RC(7 DOWNTO 6):="10";END IF;WHEN OTHERS=> NULL;END CASE;WHEN Notp => --取反CASE IR(10 DOWNTO 9) ISWHEN "00"=>R0:=Not R0;WHEN "01"=>R1:=Not R1;WHEN "10"=>R2:=Not R2;WHEN "11"=>R3:=Not R3;END CASE;WHEN Clear => --清空IR <= (OTHERS=>'0');PC := (OTHERS=>'0');R0 := (OTHERS=>'0');R1 := (OTHERS=>'0');R2 := (OTHERS=>'0');R3 := (OTHERS=>'0');A := (OTHERS=>'0');MAR <= (OTHERS=>'0');MDR <= (OTHERS=>'0');overflow <= '0';WHEN Absp => --取绝对值CASE IR(10 DOWNTO 9) ISWHEN "00"=>IF(R0(7)='1') THENR0:='0'&R0(6 DOWNTO 0);ELSER0:=R0;END IF;WHEN "01"=>IF(R1(7)='1') THENR1:='0'&R1(6 DOWNTO 0);ELSER1:=R1;END IF;WHEN "10"=>IF(R2(7)='1') THENR2:='0'&R2(6 DOWNTO 0);ELSER2:=R2;END IF;WHEN "11"=>IF(R3(7)='1') THENR3:='0'&R0(6 DOWNTO 0);ELSER3:=R3;END IF;END CASE;WHEN OTHERS => NULL;END CASE;END CASE;END IF;END PROCESS seq;M_address <= MAR;M_data_out <= MDR;Write_Read <= '1' WHEN reset = '1' AND status = 5 AND IR(15 downto 12) = WriteELSE '0' ;END RTL;七.模型机在Quartus II环境下的应用:步骤:1.建立工程:工程名cpu2.编写cpu的VHDL代码,将其添加到工程3.生成cpu的符号图4.建立内存数据的mif文件5.生成16bits的ram6.建立computer的block进行编译7.对computer进行功能模拟8.分析仿真波形八.仿真波形:1)cpu的编译报告2)computer(由cpu和ram组成)的连接图3)功能模拟的波段九.课程设计的总结:通过了这次课程设计我发现自己对cpu的组成与工作有了更深刻的认识。

相关文档
最新文档