计算机组成原理 基本模型机实验
- 格式:doc
- 大小:111.50 KB
- 文档页数:4
一.实验设计方案实验序号实验名称基本模型机实验实验时间2014年11月19日实验室睿智4—3031.实验目的1、在“微程序控制器的组成与微程序设计实验”的基础上,将第一部分中的各单元组成系统,构造一台基本模型计算机;2、本实验定义五条机器指令,编写相应的微程序,并上机调试运行,形成整机概念。
3、在原有程序的基础上修改一条指令和增加两条指令。
2.实验原理、实验流程或装置示意图1、实验内容:根据模型机的指令系统,编写相应的微程序,并上机调试运行,观察并记录结果。
2、实验原理:在第一部分的单元实验中,所有的控制信号是人为用SWITCH单元产生的,但是在实际的CPU中,所有的控制信号都是由CPU自动产生的。
所以在本次实验中我们用微程序来控制,自动产生各部件单元控制信号,实现特定指令的功能。
这里,计算机数据通路的控制将由微程序控制器来完成,CPU从内存中取出一条机器指令到指令执行结束的一个指令周期全部由微指令组成的序列来完成,即一条机器指令对应一段微程序。
本实验设计了五条机器指令,其指令格式如下:助记符机器指令码说明IN 00000000 ;输入,“INPUT”设备中的开关状态→R0 ADD addr 00010000 XXXXXXXX ;二进制加法,R0+[addr]→R0STA addr 00100000 XXXXXXXX ;存数,R0→[addr]OUT addr 00110000 XXXXXXXX ;输出,[addr]→BUSJMP addr 01000000 XXXXXXXX ;无条件转移,addr→PC机器指令码的前4位为操作码。
其中IN为单字长,其余为双字长指令,XXXXXXXX为addr 对应的二进制地址码。
为了向RAM中装入程序和数据,检查写入是否正确,并能启动程序执行,还必须设计三个控制台操作微程序。
存储器读操作(READ):拨动总清开关CLR后,控制台开关SWB、SWA为“00”时,按START微动开关,可对RAM连续手动读操作。
基本模型机的设计与实现计算机组成实验教程
基本模型机的设计与实现是计算机组成实验教程的重要部分,以下是基本步骤:
1. 确定设计目标:首先,需要明确模型机的设计目标。
这可能包括理解计算机的基本组成,掌握部件之间的交互,以及理解计算机的控制原理和过程。
2. 选择实验设备:根据实验需求,选择适合的实验设备。
例如,可以选择一个具有微程序控制功能的实验系统,如Dais-CMX16+计算机组成原理教学实验系统。
3. 设计实验方案:根据实验目标和设备,设计具体的实验方案。
这可能包括如何将各个部件组合在一起,如何通过微程序控制器来控制数据通道,以及如何编写和调试机器指令等。
4. 实施实验:按照实验方案进行操作,并记录实验过程和结果。
这可能包括连接实验线路,编写和调试程序,以及在模型计算机上运行和测试程序等。
5. 分析实验结果:对实验结果进行分析,并与预期结果进行比较。
如果实验结果不符合预期,需要找出原因并修正实验方案。
6. 撰写实验报告:最后,需要撰写实验报告,总结实验过程、方法和结果,并讨论可能的改进和扩展。
以上步骤仅供参考,建议查阅计算机组成实验教程或者咨询专业人士获取更多帮助。
本科生课程实习学生姓名学生学号所在专业所在班级指导教师职称时间成绩目录一、课程设计题目 (2)二、课程设计使用的实验设备 (2)三、课程设计内容与步骤 (2)1、所设计模型机的功能与用途 (3)2、数据通路图 (4)3、微代码定义 (4)4、微程序流程图 (5)5、微指令二进制代码 (6)6、本课程设计机器指令 (7)7、模型机的调试与实现 (7)(1)接线图 (7)(2)写程序 (8)(3)运行程序 (8)四、总结 (9)参考文献 (9).一、课程设计题目基本模型机设计与实现二、课程设计使用的实验设备TDN-CM计算机组成原理教学实验系统一台,排线若干三、课程设计内容与步骤不见实验过程中,各部件单元的控制信号是认为模拟产生的,而本次课程实习将能在为程序控制下自动产生各部件单元控制信号,实现特定指令的功能。
这里,计算机数据通路的控制将由微程序控制器来完成,CPU从内存中取出一条机器指令到指令执行结束的一个指令周期全部由微指令组成的序列来完成,即一条机器指令对应一个微程序。
本课程设计采用六条机器指令:IN(输入)、AND(与运算)、DEC(自增1)、STA(存数)、OUT(输出)、JMP(无条件跳转),其指令格式如下:其中IN、DEC为单字长,其余为双字长指令,********为addr对应的二进制地址码。
1、所设计模型机的功能与用途本次课程设计设计的模型机包括六条指令,输入、与运算、自增、存数、输出、无条件跳转。
利用此模型机可完成两个数的与运算,一个数从键盘输入,另个数从内存中读取,再将运算结果自增1,把最后结果保存到内存中,并且将运算结果输出2、数据通路图3、微代码定义C字段A字段B字段4、微程序流程图控制程序流程图当拟定“取指”微指令时,该微指令的判别测试字段为P(1)测试;控制台操作为P(4)测试,它以控制台开关SWB、SWA作为测试条件,共三路分支。
5、微程序设计完毕后,将每条微指令代码化,将流程图转化为二进制代码表6、本课程设计机器指令7、模型机的调试与实现(1)接线图(2)写程序A、现将机器指令对应的微代码正确写入2816中。
实验报告模型机总体设计一.基本模型机系统分析与设计1、简单的模型计算机是由算术逻辑运算单元、微程序单元、堆栈寄存器单元、累加器、启停、时序单元、总线和存储器单元组成。
2、在模型机中,我们将要实现RAM的读写指令,寄存器的读写指令,跳转指令,ALU的加、减指令。
把通用寄存器作为累加器A们进行左、右移等操作指令,整体构成一个单累加器多寄存器的系统。
3、根据设计要求,对实验仪硬件资源进行逻辑组合,便可设计出该模型机的整机逻辑框图。
二.指令微程序设计1. ADD A,Ri;功能:(A)+(Ri)—>A步骤:1)取指PC->AB,AB->RAM,EMCK=1,RM=1,WM=0,RAM->DB,DB->IR,PC+1;2)取操作数A->DB,DB->DR1,R1->DB,DB->DR2;3)执行DR1->ALU,DR2->ALU,置CY,ALU->DB,DB->累加器A2. SUB A,Ri 功能:(A) - (Ri)->A步骤:1)取指PC->AB,AB->RAM,EMCK=1,RM=1,WM=0,RAM->DB,DB->IR,PC+1;2)取操作数A->DB,DB->DR1,R1->DB,DB->DR2;3)执行DR1->ALU,DR2->ALU,置CY,ALU->DB,DB->累加器A3. MOV A,Ri;功能:Ri->A步骤:1)取指PC->AB,AB->RAM,EMCK=1,RM=1,WM=0,RAM->DB,DB->IR,PC+1;2)执行Ri->DB,DB->累加器A,置CY4. MOV Ri,A; 功能:(A)->Ri1)取指PC->AB,AB->RAM,EMCK=1,RM=1,WM=0,RAM->DB,DB->IR,PC+1;2)执行A->DB,DB->Ri5. JMP addr 跳转到addr1)取指PC->AB,AB->RAM,EMCK=1,RM=1,WM=0,RAM->DB,DB->IR,PC+1;2)执行IR1->DB,DB->RAM,EMCK=1,RM=1,WM=0,RAM->AB,AB->PC6.RRC A; 功能:带进位向右移1)取指PC->AB,AB->RAM,EMCK=1,RM=1,WM=0,RAM->DB,DB->IR,PC+1; 2)执行控制信号,置CY7.RLC A;功能:带进位左移1)取指PC->AB,AB->RAM,EMCK=1,RM=1,WM=0,RAM->DB,DB->IR,PC+1; 3)执行控制信号,置CY8.LDA addr;功能:(addr)->累加器A1)取指PC->AB,AB->RAM,EMCK=1,RM=1,WM=0,RAM->DB,DB->IR,PC+1; 2)计算地址IR1->DB,DB->RAM,EMCK=1,RM=1,WM=0,RAM->DB,DB->IR2,IR2->AB3)执行AB->RAM,EMCK=1,RM=1,WM=0,RAM->DB,DB->A9.STA addr; 功能:(A)->addr1)取指PC->AB,AB->RAM,EMCK=1,RM=1,WM=0,RAM->DB,DB->IR,PC+1;2)计算地址IR1->DB,DB->RAM,EMCK=1,RM=1,WM=0,RAM->DB,DB->IR2,IR 2->AB3) 执行A->RAM,EMCK=1,RM=0,WM=1三.指令格式1.ADD A,RiADD A Ri 2.SUB A,RiSUB A Ri 3.MOV A,RiMOV A Ri 4.MOV Ri,AMOV Ri A 5.RRC ARRC A6.RR ARR A7.JMP ADDRJMP ADDR8.LDA ADDRLDA ADDR9.STA ADDRSTA ADDR四.微程序指令格式设计00 取指微指令010203 减法指令微程序(1)04 减法指令为程序(2)050607 MOV指令微程序(1)08 MOV指令微程序(2)09 MOV指令微程序(3)0A0B0C0D0E0D……微程序入口地址微程序首地址形成MD7 MD6 MD5 MD4 MD3 MD2 MD1 MD00 0 I7 I6 I5 I4 1 1按操作码散转指令操作码微程序首地址MD7、MD6 I7 I6 I5 I4 MD1、MD0 MD7~MD00 0 0 0 0 1 003H0 0 0 0 1 1 007H0 0 0 1 0 1 00BH0 0 0 1 1 1 00FH0 0 1 0 0 1 013H0 0 1 0 1 1 017H0 0 1 1 0 1 01BH0 0 1 1 1 1 01FH0 1 0 0 0 1 023H0 1 0 0 1 1 027H0 1 0 1 0 1 02BH0 1 0 1 1 1 02FH0 1 1 0 0 1 033H0 1 1 0 1 1 037H0 1 1 1 0 1 03BH0 1 1 1 1 1 03FH六.模型机时序设计安排1、由于模型机已经确定了指令系统,微指令采用全水平不编码纯控制场的格式,微程序的入口地址采用操作码散转方式,微地址采用技术增量方式,所以可确定模型机中时序单元中所产生的每一节拍的作用。
一、实验目的1. 了解计算机的基本组成和原理,熟悉计算机硬件和软件的关系。
2. 掌握基本模型机的搭建方法和调试技巧。
3. 通过实验加深对计算机指令系统、微程序控制器和存储器等概念的理解。
二、实验原理计算机是由硬件和软件两部分组成的,硬件主要包括中央处理器(CPU)、存储器、输入输出设备等,软件则是指挥计算机完成各种任务的程序。
本实验通过搭建一个基本模型机,模拟计算机的基本工作过程,让学生深入了解计算机的组成和原理。
三、实验环境1. 实验设备:基本模型机实验箱、连接线、电源、计算机等。
2. 实验软件:Dais-CMH/CMH计算器组成原理教学实验系统。
四、实验内容1. 搭建基本模型机(1)根据实验箱的说明,将CPU、存储器、输入输出设备等硬件连接好。
(2)连接好电源,确保各部分电路正常工作。
(3)使用Dais-CMH/CMH计算器组成原理教学实验系统,编写控制程序,实现基本模型机的运行。
2. 调试基本模型机(1)检查硬件连接是否正确,确保电路无短路、断路等问题。
(2)编写控制程序,实现基本模型机的指令系统。
(3)通过调试,使基本模型机能够按照预期的工作流程运行。
3. 实验步骤(1)搭建基本模型机1)将CPU、存储器、输入输出设备等硬件连接好。
2)连接好电源,确保各部分电路正常工作。
3)使用Dais-CMH/CMH计算器组成原理教学实验系统,编写控制程序,实现基本模型机的运行。
(2)调试基本模型机1)检查硬件连接是否正确,确保电路无短路、断路等问题。
2)编写控制程序,实现基本模型机的指令系统。
3)通过调试,使基本模型机能够按照预期的工作流程运行。
4. 实验结果与分析(1)实验结果通过搭建和调试基本模型机,成功实现了计算机的基本工作过程,包括取指、译码、执行、存储等步骤。
(2)实验分析1)通过实验,加深了对计算机基本组成和原理的理解,认识到硬件和软件的紧密关系。
2)掌握了基本模型机的搭建方法和调试技巧,为以后的学习奠定了基础。
实践报告计算机组成原理--模型机设计报告作者姓名:专业:计算机科学与技术学号:指导教师:完成日期:年月号******学院计算机工程系摘要“计算机组成原理”是计算机科学与技术系的一门核心专业基础课程,在计算机专业中起了很重要的作用。
课程中分部分介绍了计算机的各个部件,我们有必要将它们组合起来以对计算机有一个整体的认识。
这次课程设计通过对一个简单模型机的设计与实现,是我们对计算机的基本组成、部件的设计、部件间的连接有更深的理解。
依次设计计算机的几个部件并进行连接使成为一个完整的模型机。
通过运行和调试,使之正常工作。
关键词:运算器;控制器;存储器;输入输出接口;模型机正文:一、课设目的要求:《计算机组成原理》是一门理论性、实践性均较强的专业基础课,要求学生具有一定的电路分析、指令系统编写能力、软件设计能力。
通过计算机组成原理实践周,要突出《计算机组成原理》理论联系实际的特点,培养实践动手能力。
1.培养学生运用理论知识和技能,构建建立问题逻辑结构,锻炼学生分析解决实际问题的能力。
2.培养学生使用PROTEUS软件分析和设计计算机内部器件的方法和技巧。
3.培养学生调查研究、查阅技术文献、资料、手册以及编写技术文献的能力。
4.通过实践设计,要求学生在指导教师的指导下,独立完成设计课题的全部内容,包括:(1)通过调查研究和上机实习,掌握PROTEUS软件的设计和仿真调试技能。
(2)掌握计算机系统的组成结构及其工作原理。
(3)设计实现一个简单计算机的模型机,并能够使用PROTEUS软件进行电路仿真验证二、课设内容:利用所学的计算机结构和工作原理的知识,要求学生独立完成简单计算机的模型机设计,并用PROTEUS软件进行验证。
在分析设计过程中,要求学生养成良好的习惯,学会分析实际问题,并利用所学的知识建立系统的逻辑结构,学会PROTEUS调试技巧和方法,通过逻辑设计和工程设计培养调试硬件电路的实际动手能力。
要求学生掌握数字逻辑电路中故障的一般规律,以及排除故障的一般原则和方法;锻炼分析问题与解决问题的能力,在出现故障的情况下,独立分析故障现象,并排除故障。
基本模型机实验报告一、实验目的本实验旨在通过构建一个基本模型机,深入了解计算机的工作原理,包括数据的二进制表示、指令执行、内存管理以及简单的输入输出。
二、实验设备1. 微处理器(如 Intel 8080)2. 存储器芯片(如 Intel 2114)3. 输入设备(如开关或键盘)4. 输出设备(如LED灯或显示器)5. 电源三、实验步骤步骤一:构建模型机根据实验设备,将微处理器、存储器、输入设备和输出设备连接起来,形成一个简单的模型机。
确保所有连接正确无误,电源供应稳定。
步骤二:数据表示与存储在模型机中,使用二进制数表示数据。
将数据存储在存储器中,并观察数据在存储器中的表示形式。
例如,使用开关模拟二进制数的0和1,将开关按下表示0,不按下表示1。
步骤三:指令执行编写简单的汇编指令,如加法指令,并在模型机上执行。
观察指令的执行过程,包括取指令、解码指令、执行指令和写回结果等步骤。
步骤四:内存管理模拟内存的读写操作,了解内存地址的概念以及如何通过地址访问存储在内存中的数据。
观察内存地址的增加和减少对数据读写的影响。
步骤五:输入输出操作通过输入设备输入数据,观察模型机如何将输入的数据存储在内存中。
然后通过输出设备输出数据,了解输出数据的表示形式。
四、实验结果与分析通过本次实验,我们了解了计算机的基本工作原理,包括数据的二进制表示、指令执行、内存管理和输入输出操作。
在实验过程中,我们观察到微处理器负责执行指令,存储器用于存储数据和指令,输入设备用于输入数据,输出设备用于输出数据。
此外,我们还了解了内存地址的概念以及如何通过地址访问存储在内存中的数据。
五、结论与建议本次实验使我们深入了解了计算机的基本工作原理,并掌握了构建简单模型机的方法。
为了进一步提高实验效果,建议在未来的实验中增加更多的设备和功能,例如中断处理、多任务处理等,以便更全面地了解计算机的工作原理。
同时,建议在实验过程中注重细节和观察,以便更好地理解实验结果和原理。
实验八简单模型计算机实验一、实验目的1)通过实验分析简单模型机结构,了解计算机的工作原理。
2)掌握计算机微程序控制器的控制方法,掌握计算机指令执行过程二、实验原理基本整机模型数据框图如图所示,计算机数据通路的控制将由微程序控制器来完成,CPU从内存中取出一条机器指令到指令执行结束的一个指令周期全部由微指令组成的序列来完成,即一条机器指令对应一个微程序。
数据的通路从程序计数器PC的地址送到主存的地址寄存器,根据地址寄存器的内容找到相应的存储单元。
存储器中的数据是指令时,那么数据是从RAM送到总线,再从总线送到IR 中。
存储器中的数据是需要加工的数据时,那么数据是从RAM送到总线,再动总线送到通用寄存器中等待加工。
数据加工过程中,两个数据是从总线上将数据分别分时压入两个暂存器中,等待运算部件的加工,在数据加工完成以后。
运算结果是通过三太门送到总线上。
三态门的控制时由微控制器来控制。
图:模型机的数据通路图SW-G三、实验过程1.连线按实验逻辑原理图连接以下控制信号。
1)时钟单元(CLOCK UNIT)的T1-T4接到微程序控制单元(MAIN CONTROL UNIT)的T1-T4.2)手动控制开关单元(MANUAL UNIT)的KA ,KB接到指令单元(INS UNIT)的KA,KB。
3)指令单元(INS UNIT)的J(1)-J(5)、SE6-SE0、B-IR 接到的微程序控制单元(MAIN CONTROL UNIT)的J(1)-J(5)、SE6-SE0、B-IR。
4)输入/输出单元(INPUT/OUTPUT UNIT)IO-W,IO-R接到微程序控制单元(MAINCONTROL UNIT)的IO-W,IO-R,Ai接到地址单元(ADDRESS UNIT)的A0. 5)主存储器单元(MEM UNIT)M-W、M-R接到微程序控制单元(MAIN CONTROL UNIT)的M-W、M-R,A7-A0 接到地址单元(ADDRESS UNIT)的A7-A0.6)地址单元(ADDRESS UNIT)的B-AR、B-PC、PC+1、PC-B接到微程序控制单元(MAIN CONTROLUNIT)的B-AR、B-PC、PC+1、PC-B.7)通用寄存器单元(REG UNIT)的B-R、R0-B 接到微程序控制单元(MAIN CONTROLUNIT)的B-DR、DR-B。
实验六计算机系统综合设计与实现一、实验目的1、深入理解计算机系统工作的基本原理,建立整机概念。
2、融会贯通计算机组成原理课程的容,通过知识的综合运用,加深对计算机系统各模块的工作原理及相互联系的认识。
3、培养科学研究的独立工作能力,取得工程设计与组装调试的实践经验。
二、实验要求1、将已经设计的运算器、存储器和控制器连接,构建完整的计算机系统;2、编写一段可以实现一定功能的指令程序,进行计算机整机系统功能的验证。
3、所有任务要求功能仿真和必要的验证。
实验完成后,一周提交实验报告。
三、实验设备PC机+ QuartusⅡ10.0 + FPGA(DE2-115)+TEC-8实验箱四、计算机系统(TEC-8)综合逻辑框图硬连线控制器控制信号切换电路ALU A端口B端口C Z R0 R1 R2 R3 IR PC AR 双端口RAM DBUS五、实验任务1、将实验二的运算器、实验三的存储器和实验五的控制器连接,构建完整的计算机系统;2、计算机整机系统功能测试,进行功能仿真和时序仿真并在DE2-115上验证。
(1)根据指令系统,编写一段可以实现一定功能的程序,要求:有一个合理的运算功能和逻辑关系;指令数量:不少于8条;指令类型:停机、跳转、RR、读存、写存、算术和逻辑运算;(2)将指令程序手工汇编成二进制代码;(3)理论上设置寄存器的初值,并计算程序执行后的结果;(4)将指令程序的二进制代码存入存储器RAM中;(5)将需要的运算数据初值存入寄存器R0-R3中;(6)进行程序连续运行的功能仿真和时序仿真,将仿真运算结果与理论计算结果进行比较。
六、实验步骤实验电路图子模块(1)tri_74244module tri_74244 (en,Din,Dout );input en ;wire en ;input [7:0] Din;wire [7:0] Din ;output [7:0] Dout ;reg [7:0] Dout ;always (en or Din)beginif (en)Dout<= Din ;elseDout <= 8'bzzzzzzzz;endendmodule`timescale 1 ps/ 1 psmodule tri_74244_vlg_tst();reg eachvec;reg [7:0] Din;reg en;wire [7:0] Dout;tri74244.vt`timescale 1 ps/ 1 psmodule tri_74244_vlg_tst();reg eachvec;reg [7:0] Din;reg en;wire [7:0] Dout;tri_74244 i1 (.Din(Din),.Dout(Dout),.en(en));integer i;initial begin i=0;Din=8'b00000000;en=0;en=1;#40 en=1;endinitialbegin for(i=0;i<10;i=i+1)begin#10 Din=i;endend endmoduletri74244功能仿真(2)ALUALU.bdfmodolue_74181使用quartus库中的74181模块转换为verilog文件即可de2_4de2_4.vmodule de2_4(en,in,out);input [2:1] in ;input en;output [4:1] out ;reg [4:1] out ;always (en or in)if (en)case (in)2'b00:out=4'b0001;2'b01:out=4'b0010;2'b10:out=4'b0100;2'b11:out=4'b1000;default:out=4'b0000;endcaseelse out=4'b0000;endmodulede2_4.vt`timescale 1 ns/ 1 psmodule de2_4_vlg_tst();reg eachvec;reg en;reg [2:1] in; wire [4:1] out;de2_4 i1 (.en(en),.in(in),.out(out));initial begin en=0;endinitial begin # 10 en=1;endinitial begin # 5 in=2'b00;#15 in=2'b01;#15 in=2'b10;#15 in=2'b11;#40 $finish;endinitial$monitor($time,,,"en=%b in=%b out=%b",en,in,out); endmodulereg8reg8.vmodule reg8 ( T3,DOUT ,D );input T3 ;wire T3 ;input [7:0] D ;wire [7:0] D ;output [7:0] DOUT ;reg [7:0] DOUT ;always ( posedge T3 )beginDOUT <= D ;endendmodulereg8.vt`timescale 1 ps/ 1 psmodule reg8_vlg_tst();reg eachvec;reg [7:0] D;reg T3;wire [7:0] DOUT;reg8 i1 (.D(D),.DOUT(DOUT),.T3(T3));integer i;initialbeginT3=0;D=8'd0;endalwaysbegin#5 T3= ~T3;endinitialbegin for(i=0;i<11;i=i+1)begin#10 D=i;endend endmodulemux4_1mux4_1.vmodule mux4_1(d1,d2,d3,d4,se1,se2,dout);input [7:0]d1;input [7:0]d2;input [7:0]d3;input [7:0]d4;input se1;input se2;output dout;reg [7:0]dout;always (d1 or d2 or d3 or d4 or se1 or se2) case({se2,se1})2'b00 : dout=d1;2'b01 : dout=d2;2'b10 : dout=d3;2'b11 : dout=d4;endcaseendmodulemux4_1.vt`timescale 1 ps/ 1 psmodule mux4_1_vlg_tst();reg eachvec;reg [7:0] d1;reg [7:0] d2;reg [7:0] d3;reg [7:0] d4;reg se1;reg se2;wire [7:0] dout;mux4_1 i1 (.d1(d1),.d2(d2),.d3(d3),.d4(d4),.dout(dout),.se1(se1),.se2(se2));integer i,j;initial begin #10 d1=8'b00000001;d2=8'b00000010;d3=8'b00000011;d4=8'b00000100;endinitialbegin#5while(1)for(i=0;i<2;i=i+1)for(j=0;j<2;j=j+1)begin#5 se2=i; se1=j;endend endmoduleALU逻辑电路图逻辑功能表)(当A=55H,B=AAH,S=0000~1111,M=0,CIN=1时仿真测试文件及功能仿真波形`timescale 1 ns/ 1 psmodule alu_vlg_tst();reg T3;reg SBUS;reg DRW;reg ABUS;reg LDC;reg CIN;reg M;reg [1:0] RD;reg [1:0] RS;reg [3:0] S;reg [7:0] SD;wire [7:0] DBUS;wire C;.ABUS(ABUS),.C(C),.CIN(CIN),.DBUS(DBUS),.DRW(DRW),.LDC(LDC),.M(M),.RD(RD),.RS(RS),.S(S),.SBUS(SBUS),.SD(SD),.T3(T3));initialbeginT3=0;SBUS=1;DRW=1;ABUS=0;RD=2'b00; SD=8'b01010101;#10 RD=2'b01; SD=8'b10101010;#10 RD=2'b10; SD=8'b00000011;#10 RD=2'b11; SD=8'b00000100; #10 RD=2'b00;RS=2'b01;SBUS=0;DRW=0;ABUS=1;CIN=1;LDC=1;M=0;endalwaysbegin#5 T3=~T3;endinteger i;initial#40 S=4'b0000;for(i=1;i<16;i=i+1)#10 S=i;endinitial$monitor($time,,,"M=%b S=%b CIN=%b SD=%h DBUS=%h C=%b",M,S,CIN,SD,DBUS,C); endmodule指令ADD R0,R1( R0+R1 → R0)的仿真测试文件及功能仿真波形`timescale 1 ns/ 1 psmodule alu_vlg_tst();reg T3;reg SBUS;reg DRW;reg ABUS;reg LDC;reg CIN;reg M;reg [1:0] RD;reg [1:0] RS;reg [3:0] S;reg [7:0] SD;wire [7:0] DBUS;wire C;alu i1 (.ABUS(ABUS),.C(C),.CIN(CIN),.DBUS(DBUS),.DRW(DRW),.LDC(LDC),.M(M),.RD(RD),.RS(RS),.S(S),.SBUS(SBUS),.SD(SD),.T3(T3));initial forkT3=0;SBUS=1;DRW=1;ABUS=0;RD=2'b00; SD=8'b00000111;#10 RD=2'b01;#10 SD=8'b00000001;#20 RD=2'b00;#20 RS=2'b01;#20 SBUS=0;#20 DRW=0;#20 ABUS=1;#20 CIN=1;#20 LDC=1;#20 M=0;#20 S=4'b1001;#30 RD=2'b00;#30 DRW=1;#40 DRW=0;joinalwaysbegin#5 T3=~T3;endendmodule00ns DBUS=07H T3上升沿到来(5ns时)数据07H被写R010ns DBUS=01H T3上升沿到来(15ns时)数据01H被写R120ns DBUS= R0+R1=07+01=08H30ns T3上升沿到来(35ns)时DBUS数据08H被写R0,因此DBUS=R0+R1=08H+01H=09H (说明实现了R0+R1 → R0)注意:此时M=0, S=1001,CIN=1(相当于C0=0),实现算术运算A+B指令SUB R0,R1( R0-R1 → R0)的仿真测试文件及功能仿真波形`timescale 1 ns/ 1 psmodule alu_vlg_tst();reg T3;reg SBUS;reg DRW;reg ABUS;reg LDC;reg CIN;reg M;reg [1:0] RD;reg [1:0] RS;reg [3:0] S;reg [7:0] SD;wire [7:0] DBUS;wire C;alu i1 (.ABUS(ABUS),.C(C),.CIN(CIN),.DBUS(DBUS),.DRW(DRW),.LDC(LDC),.M(M),.RD(RD),.RS(RS),.S(S),.SBUS(SBUS),.SD(SD),.T3(T3));initial forkT3=0;SBUS=1;DRW=1;ABUS=0;RD=2'b00; SD=8'b00000111;#10 RD=2'b01;#10 SD=8'b00000001;#20 RD=2'b00;#20 RS=2'b01;#20 SBUS=0;#20 DRW=0;#20 ABUS=1;#20 CIN=0;#20 LDC=1;#20 M=0;#20 S=4'b0110;#30 RD=2'b00;#30 DRW=1;#40 DRW=0;joinalwaysbegin#5 T3=~T3;endendmodule00ns DBUS=03H T3上升沿到来(5ns时)数据07H被写R010ns DBUS=01H T3上升沿到来(15ns时)数据01H被写R120ns DBUS= R0-R1=07-01=06H30ns T3上升沿到来(35ns)时DBUS数据06H被写R0,因此DBUS=R0-R1=06H-01H=05H(说明实现了R0-R1 → R0)注意:此时M=0,S=0110,实现算术运算A-B-1,设置CIN=0(相当于C0=1),让进位C0=1,因此实现运算(A-B-1)+1=A-B指令AND R0,R1( R0&R1 → R0)的仿真测试文件及功能仿真波形`timescale 1 ns/ 1 psmodule alu_vlg_tst();reg T3;reg SBUS;reg DRW;reg ABUS;reg LDC;reg CIN;reg M;reg [1:0] RD;reg [1:0] RS;reg [3:0] S;reg [7:0] SD;wire [7:0] DBUS;wire C;alu i1 (.ABUS(ABUS),.C(C),.CIN(CIN),.DBUS(DBUS),.DRW(DRW),.LDC(LDC),.M(M),.RD(RD),.RS(RS),.S(S),.SBUS(SBUS),.SD(SD),.T3(T3));initialforkT3=0;SBUS=1;DRW=1;ABUS=0;RD=2'b00; SD=8'b00000111;#10 RD=2'b01;#10 SD=8'b00001001;#20 RD=2'b00;#20 RS=2'b01;#20 SBUS=0;#20 DRW=0;#20 ABUS=1;#20 CIN=1;#20 LDC=1;#20 M=1;#20 S=4'b1011;#30 RD=2'b00;#30 DRW=1;#38 S=4'b0000;#40 DRW=0;joinalwaysbegin#5 T3=~T3;endendmodule00ns DBUS=00000111 T3上升沿到来(5ns时)数据00000111被写R0 10ns DBUS=00001001 T3上升沿到来(15ns时)数据00001001被写R1 20ns DBUS= R0&R1=0000000130ns DRW=1 T3上升沿到来(35ns)时DBUS数据00000001被写R0,38 ns M=1,S=0000 DBUS=R0&R1==11111110H 实现了求反运算(说明已经实现了R0&R1 → R0)(3)RAM4RAM4.bdfcnt256cnt256.vmodulet256(Q,DATA,LDN,reset,clk);output [7:0] Q;input [7:0] DATA;input LDN,reset,clk;reg [7:0] Q;always (posedge clk or negedge reset) //clk上升沿触发beginif(!reset) //异步清零,低电平有效Q<=8'b0;else if(!LDN) Q<=DATA; //同步置数,低电平有效else Q<=Q+1; //计数endendmodulecnt256.vt`timescale 1 ns/ 1 psmodulet256_vlg_tst();reg [7:0] DATA;reg LDN;reg clk;reg reset;wire [7:0] Q;cnt256 i1 (.DATA(DATA),.LDN(LDN),.Q(Q),.clk(clk),.reset(reset));initial beginDATA=1'hA; clk=0;reset=1;LDN=1;DATA=8'd0*******;#20 reset=0;#40 reset=1;#260 LDN=0;#80 LDN=1;endalwaysbegin#20 clk=~clk;endendmoduleasdf利用宏功能模块先生成单端口存储器,再用两单端口存储器进行连接生成双端口存储器RAM4仿真测试逻辑图双端口逻辑功能表(1)从左端口写存储器(在01H 单元中写入数据11H)(右端口为只读端口)T2 T3 MEMW SBUS LAR LPC MBUS CLR_ ARINC PCINC SD[7..0] 功能x ↑0 110 0 1 0 0 0101H→AR ↑x 1 10 0 0 1 0 0 1111H→(01H)(2)从左端口读存储器(从01H 中读出数据11H)(右端口为只读端口)T2 T3 MEMW SBUS LAR LPC MBUS CLR_ ARINC PCINC SD[7..0] 功能x ↑0 110 0 1 0 0 0101H→AR ↑x 00 0 0 1 1 0 0 xx(01H) →DBUS(3)从右端口读存储器(从01H 中读出数据11H)(右端口为只读端口)T2 T3 MEMW SBUS LAR LPC MBUS CLR_ ARINC PCINC SD[7..0] 功能x ↑0 10 10 1 0 0 0101H→PC ↑x00 0 0 1 1 0 0 xx (01H) →INS(4)AR 自动加 1 读存储器(从左端口连续读存储器)T2 T3 MEMW SBUS LAR LPC MBUS CLR_ ARINC PCINC SD[7..0] 功能↑x00 0 0 1 1 1 0 XX M→DBUS (5 )PC 自动加 1 读存储器(从右端口连续读T2 T3 MEMW SBUS LAR LPC MBUS CLR_ ARINC PCINC SD[7..0] 功能↑x00 0 0 0 1 0 1 XX M→INS(4)UCU_ir_1UCU_ir_1.bdfram64_40rom64_40.vmodule rom64_40 (addr,q);input [5:0] addr;output [39:0] q;reg [39:0] q;always (addr[5] or addr[4] or addr[3] or addr[2] or addr[1] or addr[0]) begincase({addr[5],addr[4],addr[3],addr[2],addr[1],addr[0]})6'h00 : q <= 40'h0c00000041;6'h01 : q <= 40'h00000410a0;6'h02 : q <= 40'h4010034002;6'h03 : q <= 40'h4010028002;6'h04 : q <= 40'h4020024004;6'h05 : q <= 40'h4010028004;6'h06 : q <= 40'h6c00020000;6'h07 : q <= 40'h4400020006;6'h08 : q <= 40'h501002080a;6'h09 : q <= 40'h4410020808;6'h0a : q <= 40'h641002080c;6'h0b : q <= 40'h4410020815;6'h0c : q <= 40'h7810020800;6'h0d : q <= 40'h401002a01a;6'h0e : q <= 40'h0020000c01;6'h0f : q <= 40'h4410020832;6'h10 : q <= 40'h000e810401;6'h11 : q <= 40'h0180020014;6'h12 : q <= 40'h0000000401;6'h13 : q <= 40'h8000000401;6'h14 : q <= 40'h0010002001;6'h15 : q <= 40'h5010020816;6'h16 : q <= 40'h440a7a0017;6'h17 : q <= 40'h44099a0018;6'h18 : q <= 40'h440eca0019;6'h19 : q <= 40'h440f8a0000;6'h1a : q <= 40'h401003401b;6'h1b : q <= 40'h401003501c;6'h1c : q <= 40'h401003501d;6'h1d : q <= 40'h401002a01f;6'h1e : q <= 40'h0000000000;6'h1f : q <= 40'h4020025030;6'h20 : q <= 40'h0000000000;6'h21 : q <= 40'h000a780c01;6'h22 : q <= 40'h0009980c01;6'h23 : q <= 40'h000ec80c01;6'h24 : q <= 40'h0008180c01;6'h25 : q <= 40'h000e80800e;6'h26 : q <= 40'h000fc08010;6'h27 : q <= 40'h0000000112;6'h28 : q <= 40'h0000000212;6'h29 : q <= 40'h000fc02401;6'h2a : q <= 40'h000e800401;6'h2b : q <= 40'h0040002401;6'h2c : q <= 40'h010*******;6'h2d : q <= 40'h020*******;6'h2e : q <= 40'h0000020401;6'h2f : q <= 40'h0000000000;6'h30 : q <= 40'h4020025031;6'h31 : q <= 40'h4020020000;6'h32 : q <= 40'h5010020833;6'h33 : q <= 40'h64100c0834;6'h34 : q <= 40'h7810020835;6'h35 : q <= 40'h4c1002a036;6'h36 : q <= 40'h400e834037;6'h37 : q <= 40'h440e835038;6'h38 : q <= 40'h480e835039;6'h39 : q <= 40'h4c0e83503a;6'h3a : q <= 40'h4c1002803b;6'h3b : q <= 40'h702002483c;6'h3c : q <= 40'h6c2002483d;6'h3d : q <= 40'h582002483e;6'h3e : q <= 40'h4420024800;6'h3f : q <= 40'h0000000000;default : begin endendcaseendendmodulerom64_40.vt`timescale 1 ns/ 1 psmodule rom64_40_vlg_tst();reg [5:0] addr; wire [39:0] q;rom64_40 i1 (.addr(addr),.q(q));integer i;initialbeginfor(i=0;i<64;i=i+1)begin#50 addr=i;endendendmodulereg6reg6.vmodule reg6 ( CLK,DOUT ,D,CLR_ );input CLK ;wire CLK ;input [5:0] D ;wire [5:0] D ;input CLR_;wire CLR_;output [5:0] DOUT ;reg [5:0] DOUT ;always ( negedge CLK or negedge CLR_ ) beginif(CLR_==0)DOUT <= 6'd0 ;elseDOUT <= D;endendmodulereg6.vt`timescale 1 ps/ 1 psmodule reg6_vlg_tst();reg CLK;reg CLR_;reg [5:0] D;wire [5:0] DOUT;reg6 i1 (.CLK(CLK),.CLR_(CLR_),.D(D),.DOUT(DOUT));integer i;initialbeginCLK=0;D=6'd1;CLR_=1;#10 CLR_=0;#10 CLR_=1;#30 D=6'd2;endalwaysbegin#20 CLK= ~CLK;endinitialbegin#50for(i=3;i<15;i=i+1)begin#40 D=i;endend endmoduleaddrtranaddrtran.bdfaddrtran.vt`timescale 1 ps/ 1 ps module addrtran_vlg_tst(); reg eachvec;reg C;reg INT;reg [7:4] IR;reg [5:0] NuA;reg [4:0] P;reg SWA;reg SWB;reg SWC;reg Z;wire [5:0] uA;addrtran i1 (.C(C),.\INT (INT),.IR(IR),.NuA(NuA),.P(P),.SWA(SWA),.SWB(SWB),.SWC(SWC),.uA(uA),.Z(Z));initialbeginINT=0;C=0;Z=0;P=5'd1;NuA=2'o01;SWC=0;SWB=0;SWA=0;#20 SWA=1;#20 SWA=0;SWB=1;#20 SWA=1;#20 SWA=0;SWB=0;SWC=1;#20 SWC=0;P=5'd2;NuA=6'd010000;endinteger i;initial#80beginfor(i=0;i<16;i=i+1)#20 IR=i; endendmodulemicro_controller.bdfMicro_controller.vt`timescale 1 ns/ 1 psmodule micro_controller_vlg_tst(); reg eachvec;reg C;reg CLR_;reg INT;reg [7:4] IR;reg SWA;reg SWB;reg SWC;reg T3;reg Z;wire ABUS;wire ARINC;wire CIN;wire [39:0] CM;wire DRW;wire IABUS;wire INTDI;wire INTEN;wire LAR;wire LDC;wire LDZ;wire LIAR;wire LIR;wire LPC;wire M;wire MBUS;wire MEMW;wire PCADD;wire PCINC;wire [3:0] S;wire SBUS;wire [3:0] SEL;wire SELCTL;wire STOP;micro_controller i1 ( .ABUS(ABUS),.ARINC(ARINC),.C(C),.CIN(CIN),.CLR_(CLR_),.CM(CM),.DRW(DRW),.IABUS(IABUS),.\INT (INT),.INTDI(INTDI),.INTEN(INTEN),.IR(IR),.LAR(LAR),.LDC(LDC),.LDZ(LDZ),.LIAR(LIAR),.LIR(LIR),.LPC(LPC),.M(M),.MBUS(MBUS),.MEMW(MEMW),.PCADD(PCADD),.PCINC(PCINC),.S(S),.SBUS(SBUS),.SEL(SEL),.SELCTL(SELCTL),.STOP(STOP),.SWA(SWA),.SWB(SWB),.SWC(SWC),.T3(T3),.Z(Z));initialbeginCLR_=0;T3=0;#30 Z=0;C=0;INT=0;CLR_=1;SWC=0;SWB=0;SWA=0; endalwaysbegin#20 T3=~T3;endinteger i;initialbeginfor(i=1;i<16;i=i+1)begin#80 IR=i;endendendmodulereg8同ALU模块中的reg8mux2_1mux2_1.vmodule mux2_1(d0,d1,sel,dout);input [3:0]d0;input [3:0]d1;input sel;output dout;reg [3:0]dout;always (d0 or d1 or sel) case(sel)1'b0 : dout=d0;1'b1 : dout=d1;endcaseendmodulemux2_1.vt`timescale 1 ps/ 1 psmodule mux2_1_vlg_tst();reg eachvec;reg [3:0] d0;reg [3:0] d1;reg sel;wire [3:0] dout;mux2_1 i1 (.d0(d0),.d1(d1),.dout(dout),.sel(sel));initial begin d0=4'b0001;d1=4'b1110;endinteger i;initialwhile(1)beginfor(i=0;i<2;i=i+1)begin#50 sel=i;endend endmoduleUCU_ir_1仿真测试(1)ADD-SUB-AND-INC指令,2个CPU周期Testbench`timescale 1 ns/ 1 ps module ucu_ir_vlg_tst();reg eachvec;reg C;reg CLR_;reg [7:0] INS;reg INT;reg SWA;reg SWB;reg SWC;reg T3;reg Z;wire ABUS;wire ARINC;wire CIN;wire [39:0] CM;wire DRW;wire IABUS;wire INTDI;wire INTEN;wire LAR;wire LDC;wire LDZ;wire LIAR;wire LIR;wire LPC;wire M;wire MBUS;wire MEMW;wire PCADD;wire PCINC;wire [1:0] RD;wire [1:0] RS;wire [3:0] S;wire SBUS;wire STOP;ucu_ir i1 (.ABUS(ABUS),.ARINC(ARINC),.C(C),.CIN(CIN),.CLR_(CLR_),.CM(CM),.DRW(DRW),.IABUS(IABUS),.INS(INS),.\INT (INT),.INTDI(INTDI),.INTEN(INTEN),.LAR(LAR),.LDC(LDC),.LDZ(LDZ),.LIAR(LIAR),.LIR(LIR),.LPC(LPC),.M(M),.MBUS(MBUS),.MEMW(MEMW),.PCADD(PCADD),.PCINC(PCINC),.RD(RD),.RS(RS),.S(S),.SBUS(SBUS),.STOP(STOP),.SWA(SWA),.SWB(SWB),.SWC(SWC),.T3(T3),.Z(Z));initialbeginCLR_=0;T3=1;#30 CLR_=1;Z=0;C=0;INT=0;SWC=0;SWB=0;SWA=0;endalways begin#10 T3=0;#20 T3=1;endinteger i;initialbegin#40 INS=8'b00010001;for(i=33;i<255;i=i+16)begin#60 INS=i;endend endmodule(2)LD-ST-JC指令,3个CPU周期Testbench`timescale 1 ns/ 1 psmodule ucu_ir_vlg_tst();reg eachvec;reg C;reg CLR_;reg [7:0] INS;reg INT;reg SWA;reg SWB;reg SWC;reg T3;reg Z;wire ABUS;wire ARINC;wire CIN;wire [39:0] CM; wire DRW;wire IABUS;wire INTDI;wire INTEN;wire LAR;wire LDC;wire LDZ;wire LIAR;wire LIR;wire LPC;wire M;wire MBUS;wire MEMW;wire PCADD;wire PCINC;wire [1:0] RD; wire [1:0] RS; wire [3:0] S; wire SBUS;wire STOP;ucu_ir i1 (.ABUS(ABUS),.ARINC(ARINC),.C(C),.CIN(CIN),.CLR_(CLR_),.CM(CM),.DRW(DRW),.IABUS(IABUS),.INS(INS),.\INT (INT),.INTDI(INTDI),.INTEN(INTEN),.LAR(LAR),.LDC(LDC),.LDZ(LDZ),.LIAR(LIAR),.LIR(LIR),.LPC(LPC),.M(M),.MBUS(MBUS),.MEMW(MEMW),.PCADD(PCADD),.PCINC(PCINC),.RD(RD),.RS(RS),.S(S),.SBUS(SBUS),.STOP(STOP),.SWA(SWA),.SWB(SWB),.SWC(SWC),.T3(T3),.Z(Z));initialbeginCLR_=0;T3=1;Z=0;C=0;INT=0;SWC=0;SWB=0;SWA=0;#30 CLR_=1;endalways begin#10 T3=0;#20 T3=1;endinteger i;initialbegin#40 INS=8'b01011110;for(i=110;i<111;i=i+16)begin#90 INS=i;endfor(i=112;i<225;i=i+16)begin#90 INS=i;endend endmodule(3)JZ-JMP-OUT-STP指令Testbench`timescale 1 ns/ 1 psmodule ucu_ir_vlg_tst();reg eachvec;reg C;reg CLR_;reg [7:0] INS;reg INT;reg SWA;reg SWB;reg SWC;reg T3;reg Z;wire ABUS;wire ARINC;wire CIN;wire [39:0] CM; wire DRW;wire IABUS;wire INTDI;wire INTEN;wire LAR;wire LDC;wire LDZ;wire LIAR;wire LIR;wire LPC;wire M;wire MBUS;wire MEMW;wire PCADD;wire PCINC;wire [1:0] RD; wire [1:0] RS; wire [3:0] S; wire SBUS;wire STOP;ucu_ir i1 (.ABUS(ABUS),.ARINC(ARINC),.C(C),.CIN(CIN),.CLR_(CLR_),.CM(CM),.DRW(DRW),.IABUS(IABUS),.INS(INS),.\INT (INT),.INTDI(INTDI),.INTEN(INTEN),.LAR(LAR),.LDC(LDC),.LDZ(LDZ),.LIAR(LIAR),.LIR(LIR),.LPC(LPC),.M(M),.MBUS(MBUS),.MEMW(MEMW),.PCADD(PCADD),.PCINC(PCINC),.RD(RD),.RS(RS),.S(S),.SBUS(SBUS),.STOP(STOP),.SWA(SWA),.SWB(SWB),.SWC(SWC),.T3(T3),.Z(Z));initialbeginCLR_=0;T3=1;Z=0;C=0;INT=0;SWC=0;SWB=0;SWA=0;#30 CLR_=1;endalways begin#10 T3=0;#20 T3=1;endinteger i;initialbegin#40 INS=8'b10000000;for(i=144;i<145;i=i+16)begin#90 INS=i;endfor(i=161;i<225;i=i+63)begin#60 INS=i;endend endmodule功能仿真:时序仿真:仿真测试1.读存储器,验证已经写入存储器指定单元的数据(SWC SWB SWA=010) 从00H开始连续读00-05H,从30H开始连续读30-32HTestbench:`timescale 1 ns/ 1 psmodule tatol_vlg_tst();reg CLR_;reg INT;reg [7:0] SD;reg SWA;reg SWB;reg SWC;reg T1;reg T2;reg T3;wire [7:0] DBUS;tatol i1 (.CLR_(CLR_),.DBUS(DBUS),.\INT (INT),.SD(SD),.SWA(SWA),.SWB(SWB),.SWC(SWC),.T1(T1),.T2(T2),.T3(T3));initialbeginINT=0;。
实验四简单模型机实验1.1实验目的1)将微程序控制器模块通过总线同运算器模块、存储器模块联机,组成一台模型计算机;2)用微程序控制器控制模型机数据通路;3)通过CPU运行5条机器指令组成的简单程序,掌握机器指令与微指令的关系,牢固建立机器的整机概念。
1.2电路图本次实验用到前几次实验所有电路,将几个模块组成一台简单计算机,由微程序控制器控制数据通路,实现cpu从内存取出一条机器指令到执行指令结束的一个指令周期,由微指令组成的序列来完成,一条机器指令对应一个微程序。
图1 电路图1.3 实验原理(1)PC计数器初始值为“0”,微程序默认从00地址开始执行,产生控制信号,使PC的地址通过ABUS将送到存储器(6116)的地址锁存器AR中, PC=PC+1;(2)读出存储器中存放内容,通过DBUS送到IR指令寄存器中,实现指令译码,指令的操作码送至微程序控制器的程序跳转控制部分,在P(1)的控制下与微程序中储存的下一条指令地址进行逻辑运算,产生真正的下一条微程序地址;(3)在微程序的控制下单步执行微指令序列。
1.4 微指令格式表1 微指令格式1.5 微程序流程图:图2 微程序流程图1.6微程序代码表1.7 数据通路总体图图3 数据通路总体图五条机器指令格式(其中,A为内存地址8bit):RAM中装入的程序和数据(其中,地址为8进制):1.8 实验任务及步骤(1)实验连线:本次实验大部分的连线已由教师完成,请同学们对照微指令格式,完成微程序控制器的剩余部分连线。
(2)实验环境初始化:实验平台通电前请关闭DR1(74ls273),DR2(74ls273),存储器(6116)的地址锁存器(74ls273),微程序控制器的地址锁存器(74ls175)的自动清零功能,将几个芯片的-MR引脚置为“1”。
时钟发生器的功能设定为单步执行,具体信号为:STOP=0,STEP=1。
(3)加电运行初始化:①指令寄存器IR自动清零,程序计数器PC手动清零,将两片74ls163的ENT,ENP引脚置“1”,-CR引脚置“0”,打开三态门开关,给单步时钟脉冲;②程序计数器PC设定为单步技术功能,并交由微程序控制,将-CR引脚置“1”,关闭三态门开关;③关闭指令寄存器IR清零功能,交由微程序控制,将-MR设为“1”。
实验六 基本模型机实验一、 实验目的1. 掌握微程序执顺序强制改变的原理2. 掌握机器指令与微程序的对应关系。
3. 掌握机器指令的执行流程。
4.掌握机器指令的微程序的编制、写入。
二、 实验设备TDN -CM +计算机组成原理教学实验系统。
三、 实验原理E 1E 2E 3E 4E 5E 6242322212019181716D R i D R 1D R 2D R I R D A D D A RS -B D -B J -B 99-B L U -B C -BC (1)C (2)C (3)C (4)R D P C图1:微控器原理图部件实验过程中,各部件单元的控制信号是人为模拟产生的,如运算器实验中对74LS -181芯片的控制,存储器实验中对存储器芯片的控制信号,以及几个实验中对输入设备的控制。
而本次实验将能在微程序控制下自动产生各部件单元控制信号,实现特定指令的功能。
这里,计算机数据通路的控制将由微程序控制器来完成,CPU 从内存中取出一条机器指令到指令执行结束的一个指令周期全部由微指令组成的序列来完成,即一条机器指令对应一段微程序。
1. 微程序执行顺序强制改变原理如图2 所示,后继地址是由6片正沿触发的双D 触发器(74)构成,它们带有清“0”和置“1”端,可以让CLR 有效(低电平)使MA0~MA5置0,也可以让SE1~SE5有效(低电平),使对应的触发器置1。
在微程序的运行过程中,在T2时刻,将当前运行的微指令中的µA5~µA0置入对应的触发器中,作为下条执行微指令的地址,如果在T2后的T4时刻,可能会使SE1~SE5中的某一位或者几位有效,将强制的置对应触发器为“1”,从而改变由µA5~µA0指定的微地址,改变微程序执行流程。
SE2SE1SE3SE4SE5SE6后继微地址输出图2:后继地址逻辑图注:CLR :清零信号 T2:时钟信号µA5~µA0:对应微指令中µA5~µA02. 机器指令与微程序的对应关系每条机器指令由多条微指令按一定的顺序完成,如MOV 指令(从存储器到存储器)需要6条微指令的执行才能完成,其执行流程为:将完成某条机器指令的这些微指令的第一条指令放置在微控器的存储器的固定位置,通过对机器指令的编码,当读到某条机器指令后,能将微程序的执行流程转入该指令对应的微程序位置。
计算机组成原理实验报告基本模型机和复杂模型机的设计1.引言2.设计目标本次实验的设计目标是实现一个满足基本要求的计算机模型,了解计算机的基本组成结构和工作原理。
然后我们将设计一个更复杂的模型,通过增加功能模块和优化设计,实现更高级的计算能力和更好的性能。
3.实验方法基本模型机的设计主要包括五个核心模块:输入模块、中央处理器(CPU)、存储器、控制器和输出模块。
我们将使用VHDL语言来实现这些模块,并使用FPGA来实现整个基本模型机。
复杂模型机的设计在基本模型机的基础上进行扩展和优化。
我们将对CPU进行升级,加入多核处理器和并行计算能力,增加存储器容量和传输速率,优化控制器的运行效率。
通过这些优化,我们可以提高复杂模型机的计算性能和运行效率。
4.实验结果4.1基本模型机的实验结果基本模型机的实验结果显示,我们成功实现了输入输出功能,能够将用户的输入数据送入存储器,并通过CPU进行计算后将结果输出。
虽然这个模型的计算能力和性能较低,但是它对于初学者来说是一个良好的实践项目。
4.2复杂模型机的实验结果复杂模型机的实验结果显示,我们成功实现了多核处理器和并行计算的功能,并大幅提升了计算性能和运行效率。
存储器的容量和传输速率的提升也带来了更高的数据处理能力。
控制器的优化使得整个模型机的运行更加稳定和高效。
5.实验总结通过设计和实现基本模型机和复杂模型机,我们加深了对计算机组成原理的理解,并掌握了相关的设计和实践技巧。
实验结果表明,我们的设计能够满足计算机的基本要求,并具有一定的性能和计算能力。
通过进一步优化和扩展,我们可以设计出更高级的计算机模型,满足更多应用需求。
[1]《计算机组成原理》李文新,清华大学出版社,2024年。
计算机组成原理简单模型机实验计算机组成原理是计算机工程专业一个非常重要的课程,它涉及到计算机硬件的各个方面。
其中,模型机实验是计算机组成原理中的一个非常重要的环节,旨在让学生在实践中深入理解计算机各个部件之间的工作原理。
模型机实验一般采用简单的电路元件模拟计算机的各种功能,例如通过用IC门电路模拟ALU、寄存器、时钟等计算机组成部件,来实现一些实际的计算机操作。
通过实验,学生可以更加深入地掌握计算机组成原理中的各个知识点,理解计算机的底层工作原理。
模型机实验一般分为两个阶段。
第一个阶段是构建模型机,学生需要根据实验指导书上的设计图纸,自己组装一个包含CPU、RAM、ROM 等各种计算机组成部件的模型机。
第二个阶段是操作模型机来完成各种计算机操作,例如实现加法、减法、乘法等运算,实现简单的数据存储和读取等。
在模型机实验中,学生需要深入理解电路原理,熟练掌握计算机组成原理中的各个知识点,例如数据传输、ALU运算、寄存器管理等。
同时,学生还需要具备一定的动手能力和实验技巧,例如熟练使用焊接工具和电路测试仪器,能够快速准确地找出电路中的故障点。
通过模型机实验,不仅可以加深学生对计算机组成原理的理解,同时还能提高学生的动手能力和实验技巧,培养学生的创新精神和独
立思考能力。
因此,模型机实验是计算机组成原理课程中一个非常重要的环节,是学生提高自身能力和素质的重要途径。
淮海工学院计算机工程学院实验报告书
课程名:《计算机组成原理》
题目:实验四基本模型机实验
班级:
学号:
姓名:
1、目的与要求
1)在“微程序控制器的组成与微程序设计实验”的基础上,将第一部分中的各单元组成系统,构造一台基本模型计算机。
2)本实验定义五条机器指令,编写相应的微程序,并上机调试运行,形成整机概念。
2、实验设备
1) ZYE1601B计算机组成原理教学实验箱一台,排线若干。
2) PC机一台。
3、实验步骤与源程序
l) 根据该模型机的指令系统,编写一段程序。
这里给出两个参考程序。
参考程序一:
本程序从输入设备(数码开关)取入数据,保存在内存单元08,然后从08单元送到输出设备(LED数码管)进行显示。
然后程序停止(请实验者考虑:如何修改程序,使程序不断从输入设备取出数据,送到输出设备显示。
每次循环过程中,可以使输入设备数据改变,考察输出显示的结果。
)。
设计机器指令程序如下(机器码为十六进制数据)。
地址内容助记符说明
00 00 IN ;输入开关数据→R0
01 20 STA [08H] ;R0→[08]
02 08 ;地址
03 30 OUT [08H] ;[08H]→BUS
04 08 ;地址
05 40 JMP [00H] ;00H→PC
06 00 ;跳转地址
参考程序二:
本程序从输入设备(数码开关)读入数据,与0A单元的数据相加,然后送到输出设备(LED 数码管)进行显示。
本程序不断地循环运行,在运行中可改变输入开关(INPUT)的值,观察输出显示的变化。
设计机器指令程序如下(机器码为十六进制数据)。
地址内容助记符说明
00 00 IN ;输入开关数据→R0,采集数据
01 10 ADD [0AH] ;R0+[0AH]→R0,输入数据与指定数据相加
02 0A ;地址
03 20 STA [0BH] ;R0→[0B]
04 0B ;地址
05 30 OUT [0BH] ;[0BH]→BUS,输出显示
06 0B ;地址
07 40 JMP [00H] ;00H→PC
08 00 ;跳转地址
0A 01 ;加数,可自定
0B ;求和结果保存在0B单元
2) 按图1连接实验线路。
3) 写程序:
对于本实验箱可以用两种方法来写入程序。
方法一:手动写入
(1)先将机器指令对应的微代码正确地写入2816中,由于在实验1.6微程序控制器的组成与微程序设计实验中已将微代码写入E2PR0M芯片中,对照表2—2校验正确后就可使用。
(2)使用控制台WRITE 和READ 微程序进行机器指令程序的装入和检查,其操作如下:
A. 使SP03为“STEP ”状态,SP04为“RUN ”状态,中断开关SP05处于“NORM ”状态,编程开关SP06处于“RUN ” 状态,。
B. 拨动总清开关CLR (1→0→1),微地址寄存器清零,程序计数器清零。
然后使控制台SWB 、SWA 开关设置为“01”,按动一次启动开关START ,微地址显示灯显示“010001”,再按动一次START ,微地址灯显示“010100”,此时数据开关的内容置为要写入的机器指令,按动两次START 键后,即完成该条指令的写入。
若仔细阅读WRITE 的流程,就不难发现,机器指令的首地址总清后为零,以后每个循环PC 会自动加1。
所以,每次按动START ,只有在微地址灯显示“010100”时,才设置内容,直到所有机器指令写完。
C. 校验。
拨动总清开关CLR (1→0→1)后,微地址清零。
PC 程序计数器清零,然后使控制台开关SWB 、SW A 为“00”,按动启动start ,微地址灯将显示“010000”,再按START ,微地址灯显示为“010010”,第三次按START ,微地址灯显示为“010111”,再按START 后,此时输出单元的数码管显示为该首地址中的内容。
不断按动START ,以后每个循环PC 会自动加1,可检查后续单元内容。
每次在微地址灯显示为“010000”时,是将当前地址中的机器指令写入到输出设备中显示。
方法二:联机读/写程序
按照规定格式,将机器指令及表2-2微指令二进制表编辑成十六进制的如下格式文件。
微指令格式中的微指令代码为将表2-2中的24位微代码按从左到右分成3个8位,将此三个8位二进制代码化为相应的十六进制数即可。
图1 基本模型机实验接线图
参考程序一的机器指令: $P0000 $P0120
$P0208 $P0330
$P0408
$P0540
$P0600 参考程序二的机器指令:
$P0000 $P0110 $P020A $P0320 $P040B
$P0530 $P060B $P0740 $P0800 $P0A01
微程序(以上两程序公用):
$M00018110 $M0101ED82 $M0200C048 $M0300E004 $M0400B005 $M0501A206 $M06959A01 $M0700E00D $M08001001 $M0901ED83
$M0A01ED87
$M0B01ED8E
$M0C01ED96
$M0D028201
$M0E00E00F
$M0F00A015
$M1001ED92
$M1101ED94
$M1200A017
$M13018001
$M14002018
$M15070A01
$M1600D181
$M17070A10
$M18068A11
用联机软件的装载程序功能,将该格式文件传入实验箱即可(具体方法参见软件使用说明)。
参考程序一的文件名为“基本模型机1”,参考程序二的文件名为“基本模型机2”
4) 运行程序
(1)单步运行程序
A. 使中断控制开关SP05处于“NORM”状态,编程开关SP06处于“RUN”状态,
SP03为“STEP”状态,SP04为“RUN”状态,SWA为“1”,SWB为“1”状态。
B. 拨动总清开关CLR(1→0→1),微地址清零,程序计数器清零,程序首址为00H。
C. 单步运行一条微指令,每按动一次START键,即单步运行一条微指令。
对照微程
序流程图,观察微地址显示灯是否和流程一致。
D. 当运行结束后,可检查运行结果是否和理论值一致。
(2)连续运行程序
A. 使“SIGNAL UNIT”中的SP03开关设置为“RUN”状态。
SP04开关设置为“RUN”
状态。
B. 拨动CLR开关,微地址及程序计数器清零,然后按动START,系统连续运行程序,
稍后将SP04拨至“STOP”时,系统停机。
C. 停机后,可检查运算结果是否正确。
(3)联机运行程序
按总清开关CLR(1→0→1)清零后,程序首址为00H。
通过联机软件进入调试界面(其操作方法参见附录3系统联机操作软件说明),可以通过调试程序的操作界面控制程序的运行(注意SW A、SWB的状态都为“1”)。
4、结果分析与实验体会
本次实验要接的线比较多,接的我都有点头晕了。
最终还是按照书上把线接好了。
按好后,按照说明一步步做,得到了正确的结果。
只要线接对,就没什么大的问题了。