《计算机组成原理课程设计说明书模型机指令系统的设计与实现 .doc》由会员分享,可在线阅读,更多相关《计算机组成原理课程设计说明书模型机指令系统的设计与实现 .doc(15页珍藏版)》请在三一办公上搜索。
1、课程设计说明书题目:模型机指令系统的设计与实现院 系: 专业班级: 学 号: 学生姓名: 指导教师: 2010年12月10日 安徽理工大学课程设计(论文)任务书学 号学生姓名专业(班级)设计题目模型机指令系统的设计与实现设计技术参数(1)用微程序控制器实现设计任务;(2)要满足指令系统的性能要求;(3)设计说明书能很好地反映设计内容设计要求参考实验指导书第四章模型机综合实验(微程序控制器)设计的过程,运用其微指令格式,独立设计指令系统。并用该指令系统中的指令编一完成简单运算的程序,并进行调试运行。工作量 要求设计说明书的字数在3000字以上。工作计划2010.11.22-11.24 根据设计要
2、求,查找相关资料,完成需求分析;2010.11.25-11.28 进行系统的概要设计;2010.11.29-12. 01 进行系统的详细设计和微程序的书写;2010.12.02-12.05 对系统进行调试分析,写出课程设计报告。参考资料 1 白中英.计算机组成原理(第四版).科学出版社.20082 DJ-CPTH超强型计算机组成原理与系统结构实验指导书.启东市东疆计算机有限公司.2008指导教师签字教研室主任签字2010年6月20日指导教师评语:成绩: 指导教师: 年 月 日目录1 问题描述51.1 设计目的51.2 设计要求52 数据格式和指令系统62.1 数据格式62.2 指令格式62.3
3、指令系统83 模型机的数据通路94 详细设计115 调试分析136 设计体会15参考文献161 问题描述1.1 设计目的本课程设计是计算机组成原理课程结束以后开设的大型实践性教学环节。通过本课程设计,加深对计算机系统各模块的工作原理及相互联系的认识,特别是对微程序控制器的理解,进一步巩固所学的理论知识,并提高运用所学知识分析和解决实际问题的能力;锻炼计算机硬件的设计能力、调试能力;培养严谨的科学实验作风和良好的工程素质,为今后的工作打下基础。1.2 设计要求(1) 确定设计目标参考指导书上模型机综合实验设计的过程,运用其微指令格式,独立设计指令系统。并用该指令系统中的指令编写一个简单运算的程序
4、,并进行调试运行。(2) 确定指令系统确定数据的表示格式、位数、指令的编码、类型、需要设计哪些指令及使用的寻址方式。(3) 总体结构与数据通路总体结构设计包含确定各部件设置以及它们之间的数据通路结构。在此基础上,拟出各种信息传送路径,以及实现这些传送所需要的微命令。(4) 设计指令执行流程数据通路确定后,就可以设计指令系统中每条指令的执行流程。根据指令的复杂程度,每条指令所需要的机器周期数。对于微程序控制的计算机,根据总线结构,需考虑哪些微操作可以安排在同一个微指令中,哪些微操作不能安排在同一条微指令中。(5) 确定微程序地址根据后续微地址的形成方法,确定每条微程序地址及分支转移地址。(6)
5、微程序的编写根据微指令格式,将微程序流程中的所有微指令代码化,转化成相应的二进制代码,写入到控制存储器中的相应单元中。(7) 调试在模型机上,用单步微指令方式执行机器指令的微程序流程图,当全部微程序流程图检查完后,若运行结果正确,则在内存中装入一段机器指令,进行其他的运行方式等功能调试及执行指令的正确性验证。2 数据格式和指令系统2.1 数据格式模型机规定采用定点补码表示数据,字长是8位的,其中最高位为符合位,其它都是数值位。数据格式如表2-1所示76543210符号位数值位表2-1 数据格式2.2 指令格式模型机设计四大类指令,即数据处理、数据存储、数据传送、程序控制,具体有数据传送指令、算
6、术运算类指令、逻辑运算指令、程序控制类指令、输入输出类指令、字符串类指令、系统控制指令。指令格式,是指令字用二进制代码表示的结构形式,通常由操作码字段和地址码字段组成。操作码字段表征指令的操作特性与功能,而地址码字段通常指定参与操作的操作数的地址。因此,一条指令的结构可用如下形式来表示:操作码字段OP地址码字段A表2-2 指令格式微指令是一组实现一定操作功能的微命令的组合。图2-1表示一个具体的微指令结构。图2-1 微指令结构上图中24位控制位分别介绍如下:XRD:外部设备读信号,当给出个外设的地址后,输出此信号,从指定外设读数据。 EMWR:程序存储器EM写信号EMRD:程序存储器EM读信号
7、 PCOE:将程序计数器PC的值送到地址总线ABUS上EMEN:将程序存储器EM与数据总线DBUS接通,有EMWR和EMRD决定是将DBUS数据写入EM中,还是从EM读出数据到DBUSIREN:将程序存储器EM独处的数据打入指令寄存器IR和微指令计数器uPCEINT:中断返回时清除中断响应和中断请求标志,便于下次中断。ELP:PC打入允许,与指令寄存器的IR2.,IR3位结合,控制程序跳转。MAREN:将数据总线DBUS上数据打入地址寄存器MARMAROE:将地址寄存器MAR的值送到地址总线ABUS上OUTEN:将数据总线DBUS上数据送到输出端口寄存器OUT里STEN:将数据总线DBUS上数
8、据存到堆栈寄存器里RRD:读寄存器组R0-R3,寄存器R?的选择由指令的最低两位决定RWR:写寄存器组R0-R3,寄存器R?的选择由指令的最低两位决定CN:决定运算器是否带进位移位,CN=1带进位,CN=0不带进位FEN:将标志位存入ALU内部的标志寄存器X2,X1,X0三位组合来译码选择将数据送到DBUS上的哪个寄存器,见表2-3WEN:将数据总线DBUS的值打入工作寄存器W中AEN:将数据总线DBUS的值打入累加器A中S2,S1,S0三位组合决定ALU做何种运算,见表2-4X2 X1 X0输出寄存器0 0 0IN_OE 外部输入门0 0 1IA_OE 中断向量0 1 0ST_OE 堆栈寄存
9、器0 1 1PC_OE PC寄存器1 0 0D_OE 直通门1 0 1R_OE 右移门1 1 0L_OE 左移门1 1 1没有输出表2-3 数据输出选择器原理图S2 S1 S0功能0 0 0A+W 加0 0 1A-W 减0 1 0A|W 或0 1 1A & W 与1 0 0A+W+C 带进位加1 0 1A-W-C 带进位减1 1 0A A取反1 1 1A 输出A表2-4 运算器的选择2.3指令系统模型机的指令集分几大类: 算术运算指令、逻辑运算指令、移位指令、数据传输指令、跳转指令、中断返回指令、输入/输出指令。2.3.1数据传输指令主要包括取数指令、存数指令、传送指令、成组传送指令、字节交换
10、指令、清寄存器指令等等。这类指令主要用来实现主存和寄存器之间,或寄存器和寄存器之间的数据传送。2.3.2算术运算指令该指令包括二进制定点加、减、乘、除指令,浮点加、减乘、除指令,求反、求补指令,算术移位指令,算术比较指令,十进制加、减运算指令等。这类指令主要用于定点或浮点的算术去处。2.3.3逻辑运算指令这类指令包括逻辑加、逻辑乘、按们加,逻辑移位等指令,主要用于无符号数的们操作、代码的转换、判断及运算。2.3.4程序控制指令又叫转移指令。机器执行到某条指令时,出现了几种不同的结果,这时机器必须执行一条转移指令,根据不同结果进入转移,从而改变程序原来执行的顺序。在注册软件的时候经常遇到。2.3
11、.5输入输出指令主要是用来启动外围设备,检查测试外围设备的工作状态,并实现外部设备和CPU之间,或外围设备与外围设备之间的信息传送。2.3.6字符串处理指令字符串处理指令是一种非数值处理指令,一般包括字符串传送、字符串转换、字符串比较、字符串查询等等。2.3.7特权指令特权指令是指具有特殊权限的指令。这种指令如果使用不当就会破坏系统,所以一般不直接提供给用户用。3 模型机的数据通路 模型机的数据通路如图3-1所示:图3-1 模型机的数据通路图3-2示出了模型机的运算器的数据通路:图3-2 模型机的运算器的数据通路其中ALU为算术逻辑单元,R1、R2、R3为三个寄存器。4 详细设计根据图2-1微
12、指令格式,我们可以 了解到许多的微指令在执行的时候,只需要把它所需要用到的位置有效(即为0)就可以了。我们知道,每个程序开始执行的第一条微指令必须是取指操作。而取指操作要做的工作是从程序存储器EM中读出下条将要执行的指令,并将指令的机器码存入指令寄存器IR和微程序计数器uPC中,读出下条将要执行的指令。要从EM中读数,EMRD必需有效;读EM的地址要从PC输出,所以PCOE要有效,它有效的同时还会使PC加1;IREN是将EM读出的指令码存入uPC和IR。此微指令的状态为“T0”,微地址“0 0”,微程序“CBFFFFH”,这是个取指操作。不管是要做什么指令最后必需是取指令,所以这个微指令是在每
13、个指令的后面都有的。下面举例说明一个指令的设计方法:LADD A,#* 取名规则:为了表现出是自己设计的,把最前面都加了个L(李),但为了方便记忆,后面保持和默认的指令名字一致,便于区分出自己的指令,同时也有助于程序的阅读。指令作用:累加器A加立即数,完成加法操作。设计方法:立即数的加法指令分为两步:1、 从EM中读出立即数,送到DBUS,并存入工作寄存器W中,从EM中读数,EMRD应该有效,读EM的地址由PC输出,PCOE要有效,读出的数据要送到DBUS,EMEN应该有效,数据存入W中,WEN应该有效,根据上述描述,“LADD A,#*”指令的T1状态微指令的值为“C7FFEFH”。2、 执
14、行加法操作,并将结果存入A中。执行的是加法操作,根据表2-4可知,S2S1S0的值应该是000(二进制表示的),结果无需移位直接输出到DBUS,根据表2-3可短,X2X1X0的值应该为100(二进制表示的),从DBUS将数据再存入A中,AEN应该有效。与此同时,ABUS 和IBUS空闲,取指操作可以并行执行,也就是以PC为地址,从EM中读出下条将要执行指令的机器码,并打入IR和uPC中,由上述可知:EMRD、PCOE、IREN要有效,而T0状态时将EMRD、PCOE、IREN、X2X1X0、AEN、S2S1S0都应该置成有效和相应的工作方式,此微指令的值为“CBFF90H”注:因为取指令可以并
15、行执行,所以这里没有再给出取指操作。而是将它并到第二个操作里面去了。根据上述方法,再设计一个减立即数的指令的话就比较的简单了,因为只需要将上面的加、变成减即S2S1S0不在为000而是001(由表2-4可知)。其它的指令和这个指令的设计方法都是一样的。下面是我所设计的自己的一套指令系统,如表4-1所示:助记符 状态微地址微程序数据输出数据打入地址输出运算器uPCPC_FETCH_T000CBFFFF指令寄存器IRPC输出A输出写入101FFFFFFA输出102FFFFFFA输出103FFFFFFA输出1LADD,#*T204C7FFEF存储器值EM寄存器WA输出11T105FFFE90ALU直
16、通寄存器A,标志位C,ZPC输出加运算1T006CBFFFF指令寄存器IRPC输出A输出写入107FFFFFFA输出1LSUB A,#*T208C7FFEF存储器值EM寄存器WPC输出A输出11T109FFFE91ALU直通寄存器A 标志位C,Z减运算1T00ACBFFFF指令寄存器IRPC输出A输出写入10BFFFFFFA输出1LINT10CFFFF17用户IN寄存器AA输出1T00DCBFFFF指令寄存器IRPC输出A输出写入10EFFFFFFA输出10FFFFFFFA输出1LOUTT110FFDF9FALU直通用户OUTA输出1T011CBFFFF指令寄存器IRPC输出A输出写入112F
17、FFFFFA输出113FFFFFFA输出1LMOV R?,AT114FFFB9FALU直通寄存器R?A输出1T015CBFFFF指令寄存器IRPC输出A输出写入116FFFFFFA输出117FFFFFFA输出1LMOV *,AT218C77FFF存储器值EM地址寄存器MARPC输出A输出11T119B7BF9FALU直通存储器EMMAR输出A输出1T01ACBFFFF指令寄存器IRPC输出A输出写入11BFFFFFFA输出1LJMP *T11CC6FFFF存储器值EM寄存器PCPC输出A输出1写入T01DCBFFFF指令寄存器IRPC输出A输出写入11EFFFFFFA输出11FFFFFFFA输
18、出1LMOV R?,#*T120C7FBFF存储器值EM寄存器R?PC输出A输出11T021CBFFFF指令寄存器IRPC输出A输出写入122FFFFFFA输出123FFFFFFA输出1LJZ *T124C6FFFF存储器值EM寄存器PCPC输出A输出1写入T025CBFFFF指令寄存器IRPC输出A输出写入126FFFFFFA输出127FFFFFFA输出1LJCT128C6FFFF存储器值EM寄存器PCPC输出A输出1写入T029CBFFFF指令寄存器IRPC输出A输出写入12AFFFFFFA输出12BFFFFFFA输出1表4-1 新建的指令系统上表是我所建立的指令系统,指令也不是很多。本来
19、想设计LJNZ的指令,意思是如果不想等就跳转,可是经过调试没能做出来。5 调试分析设计完了一个指令系统之后,不能说设计好了就行了,还要对它进行测试。我也做了多次自我的测试,现在举个例子:START:LMOV A,#01LOOP:LSUB A,#01LJC LOOPLJZ LOOPLJMP START其用我所建立的指令系统将程序汇编成机器码,反汇编指令如表5-1所示:程序地址机器码反汇编指令指令说明007C 01LMOV A,#01立即数01h存入累加器A023C 01LSUB A,#01累加器A减104A0 02LJC 02若有进位跳到程序02地址06A4 02LJZ 02若A=0跳转到程序0
20、2地址08AC 00LJMP 00无条件跳转到程序开始表5-1 程序反汇编指令上述程序跟踪结果,如图5-1所示:06 LJZ 0202 LSUB A,#0104 LJC 0204 LJC 0202 LSUB A,#0100 LMOV A,#0102 LSUB A,#0106 LJZ 0204 LJC 02 00 LMOV A,#0108 LJMP 00图5-1 程序跟踪结果根据调试的结果得知,所建立的指令系统可以使用。6 设计体会通过近一个星期的课程设计,结果设计出来了这么一个看似很一般的指令系统。但是我感觉从中还是学习到了不少东西。把以前从书本上学习到的东西完全应用到实践当中。一开始在书上看
21、到的一些什么指令系统、微指令等等东西的时候不知所云,因为它们都是计算机能够识别的,对我来说就很难认识了;而且它们听上去又很抽象,感觉跟人的思维完全不同,又不能从形象的角度来见识见识它们,所以很难理解。但是在这次课程设计后我对它们就有了一个形象化的认识啦。实验仪器完全有助于我去理解这些指令到底是如何实现特定的功能的。而且,从所给的软件中很容易编写出自己的指令系统,只是一个指令的详细设计还是比较难的,因为有24位要按照所完成的功能编写0或1,这是此次课程设计的关键,但是如果掌握了各个位的作用,同时又很清楚自己设计的指令要完成的功能,那么设置0和1就不会那么麻烦啦。最初,自己一个人看看书,搞搞软件,
22、用用实验仪器就可以轻松搞定。可是,我错了,因为看了两天都没什么头绪,原因很简单,因为不知道这24如何去编写,后来经过询问老师、同学,都很热情的给予了我帮助,从他们身上我也学习到了很多很多有用的东西。而且当自己完成任务之后,还主动帮助了其它有困难的同学。本来可以说是一件很枯燥无味的课程设计,结果却成了大家一起进步的阶梯。所以我觉得,一次程序设计最主要的目的不是让我们真正把正确的东西做出来在老师、同学们面前炫耀的;而是在这个过程中我们学习到的做为一个团队,做为一个班级的一员,我们不能只自救追求个人的荣誉,更重要的是要和大家、各自己的团队学会合作。这些在我们走进自己的工作岗位上时,是我们每个人都应该也是必须学会的。当然这此实验也培养了我们实践为主的良好的科学研究精神。加强了每个人对计算机的进一步认识。增强了我们的实践能力。为今后的工作打下了良好的基础。参考文献1 白中英.计算机组成原理(第四版).科学出版社.20082 DJ-CPTH超强型计算机组成原理与系统结构实验指导书.启东市东疆计算机有限公司.2008