计算机组成原理课程设计报告班级:计算机/物联网班姓名:学号:完成时间:2016.1.14一、课程设计目的1.在实验机上设计实现机器指令及对应的微指令(微程序)并验证,从而进一步掌握微程序设计控制器的基本方法并了解指令系统与硬件结构的对应关系;2.通过控制器的微程序设计,综合理解计算机组成原理课程的核心知识并进一步建立整机系统的概念;3.培养综合实践及独立分析、解决问题的能力。
二、课程设计的任务针对COP2000实验仪,从详细了解该模型机的指令/微指令系统入手,以实现乘法和除法运算功能为应用目标,在COP2000的集成开发环境下,设计全新的指令系统并编写对应的微程序;之后编写实现乘法和除法的程序进行设计的验证。
三、课程设计使用的设备(环境)1.硬件●COP2000实验仪●PC机2.软件●COP2000仿真软件四、课程设计的具体内容(步骤)1.详细了解并掌握COP 2000模型机的微程序控制器原理,通过综合实验来实现该模型机指令系统的特点:从指令字长来看该模型机指令系统包含单字长和双字长两种格式的指令,字长为8位,对于需要访问内存的指令都是双字长的,指令系统中大多数指令是单字长;从指令操作码是定长和变长来看,这里认为,虽然ADD A, R?和ADD A, @R?都是执行加法操作,但他们是不同的指令,将指令格式中寻址寄存器的两位也认为是操作码的一部分,这两条指令的操作码不同。
因此,指令系统的指令格式是定长操作码的,操作码为6位。
1)双字长的指令格式如下:2)单字长的指令格式如下:举例:该模型机微指令系统的特点(包括其微指令格式的说明等):该模型机微指令系统的微指令格式是水平型微指令,微指令的字长为24位,是机器字长的3倍,每条微指令仅包含微操作控制字段,无顺序控制字段。
操作控制字段的每一位对应一个微操作,采用字段直接译码的方式对系统进行控举例:微指令CBFFFF:取指令COP2000中有7个寄存器可以向数据总线输出数据, 但在某一特定时刻只能有一个寄存器输出数据. 由X2,X1,X0决定那一个寄存器输出数据。
COP2000中的运算器由一片EPLD实现. 有8种运算, 通过S2,S1,S0来选择。
运算数据由寄存器A及寄存器W给出, 运算结果输出到直通门D。
2. 计算机中实现乘法和除法的原理(1)无符号乘法①算法流程图:开始初始化(被)乘数=0NO(被)乘数>0FHNO乘数带进位右移CF=1YES积加乘数被乘数不带进位左移计数器减1ZF=1YES保存结果YES YESNONO结束②硬件原理框图:AWSTR0R1R2ALU被乘数乘数计数值4CY左移右移(2)无符号除法①算法流程图:开始商清0除数左移4位除数为0NO被除数减除数CF=0NO除数右移1位商左移1位被除数减除数CF=0YES商加1移位次数为4YES保存结果结束YESYESNONO②硬件原理框图:A ALUWR0R1STR2CY右移左移除数被除数商3.对应于以上算法如何分配使用COP2000实验仪中的硬件 (初步分配,设计完成后再将准确的使用情况填写在此处)4.在COP2000集成开发环境下设计全新的指令/微指令系统设计结果如表所示(可按需要增删表项)(1)新的指令集(如果针对乘除法设计了两个不同指令集要分别列表)5.用设计完成的新指令集编写实现无符号二进制乘法、除法功能的汇编语言程序(1)乘法4位乘法的算法流程图与汇编语言程序清单:1)流程图如下:开始被乘数送入R0乘数送入R1(被)乘数=0NO(被)乘数>0FHNO将4送入R3做计数寄存器清0R1带进位右移CF=1YESADD A,R0R0不带进位左移暂存AR3减1恢复AZF=1YESMOV R0,A存结果结束YESYESNONO 2)汇编语言程序清单如下:MOV R3#0FH 将A赋值,用于比较MOV A,R3MOV R0,#0FH ---被乘数在R0中TEST R0,#0FH 判断被乘数是否为0,是则结束JZ T3 判断被乘数是否溢出,是则结束CMP A,R0JC T3MOV R1,#0FH ---乘数在R1中TEST R1,#0FH 判断乘数是否为0,是则结束JZ T3CMP A,R1 判断乘数是否溢出,是则结束MOV R3,#04HAND A,#00HLOOP1:SHR R1JC T1JMP LOOP2T1:ADD A,R0LOOP2:SHLN R0PUSH ASUB R3,#01HPOP AJZ T2JMP LOOP1T2:MOV R0,A --乘积结果在R0中JMP ENT3:MOV R0,#00HEN:ENDJMP END(2)除法4位除法的算法流程图与汇编语言程序清单:1)算法流程图如下1)算法流程图如下开始R2(商)左移被除数送入R0中除数送入R1中R1=0NO计数值4送入R3中R2清0用来保存商R1左移4位MOV A,R0CMP A,R1CF=1YESR1右移CMP A,R1CF=1NOSUB A,R1暂存AR2(商)加1恢复A暂存AR3减1恢复AZF=1YESMOV R3,A结束YESNONOYES2)汇编语言程序清单如下:MOV R0,#87H ---被除数在R0中MOV R1,#0DH ---除数在R1中MOV R3,#04HAND R2,#00H ---商在R2中TEST R1,#0FHJZ FLSHLN R1SHLN R1SHLN R1SHLN R1MOV A,R0CMP A,R1JC T1JMP FLT1:SHRN R1SHLN R2CMP A,R1JC T2SUB A,R1PUSH AADD R2,#01HPOP AT2:PUSH ASUB R3,#01HPOP AJZ QTJMP T1QT:MOV R3,A ---余数保存在R3中JMP ENFL:MOV R2,#0FFH 报错处理R2为0FFHEN:ENDJMP EN6.上述程序的运行情况(跟踪结果)按下表填写描述以上各程序运行情况的内容。
按每个程序一张表进行。
程序运行的过程1)乘法程序运行的过程2)除法程序运行的过程7.设计结果说明调试运行程序时是否出现问题,是否有重新调整指令/微指令系统设计的情况出现?请在此做具体说明。
答:出现了问题。
之前没考虑到除数为0的异常操作,故操作中少了TEST R?,#II;之后补齐操作TEST R?,#II微程序:C7FFEF——FFF7F7——FFFE93——CBFFFF在设计MOV R?,#II指令时,EMRD没置低位,使程序在仿真上能运行,但在机器上运行时会置数FFH,之后EMRD置0后,在机器上正常运行。
五、本次课程设计的总结体会(不少于200字)主要总结学到的具体知识、方法及设计中的切身体会;包括列出在设计的各个阶段出现的问题及解决方法。
1)加深了对指令系统、微指令系统的理解,自己亲自设计乘法和除法的指令系统,首先要了解指令的格式,包括单字长和双字长的指令,以及在指令设计时操作码和地址码的设计,运用何种寻址方式等等;通过设计微指令系统,了解微指令的格式,微指令控制部分的设计,以及如何设计与指令对应的微指令程序。
2)综合理解计算机组成原理课程的核心知识并进一步建立整机系统的概念通过微程序控制器的设计,进一步了解了控制器如何控制各个部件的协同工作,通过有时序的读取一系列的微指令,产生对应于各个部件的控制信号,使各个部件产生微操作,解释执行指令和程序。
虽然这次微程序控制器的设计与计算机组成原理课本中关于控制器的设计不太相同,在这次微指令设计中微指令格式并没有顺序控制字段,完全采用指令的操作码来获得下一条微指令的地址,原因在于每条指令的指令周期固定为四个机器周期,操作码与微地址之间有简单的对应关系,因此设计起来比较简单。
但也在很大的程度上帮助我们加深了对控制器工作原理的理解,建立起整机系统的概念。
3)我向来都非常重视实验课,因为这是对书本知识的验证和动手能力的锻炼。
对于前四次实验,我都做了较为充分的准备。
因此,我能在实验室较快地掌握相应的知识,并与书本上的知识融会贯通。
这对于书本知识地切身体验,以及对于这次课程设计顺利地完成都奠定了相当大的基础。
因此,我要在以后的学习中,更加注重实验课的重要性。
4)还有一点让我知道了,做实验要细心,要努力需要不断的尝试。
在这次实验我在设计跳转指令的时候,但是没有注意,然后再设计完以后发现对应的指令根本不能发挥相应的功能。
我也不知道错在哪,对应的微指令集也没有错。
让我百思不得其解。
后来我调整了指令的顺序,发现有一部分能实现相应的功能,但是还是有一些实现不了功能。
我查阅了对应的实验指导书,发现JMP的指令的第3、2位要10或者11才能实现功能,而JC需要00,JZ需要01,我调整了指令的位置,实现了功能。
我突然感觉到只是一些小的细节,却会对我们造成一个很严重的后果。
所以我们要心细,不要忽略每个细节,这样我们才会用更大的进步会取得更大的成功。
5)还有一点就是通过实验验收,实验老师指出了报告的一系列错误,让我意识到了实验报告想要写好也需要尽心,流程图之前一直画的很随意,但是老师的批评让我意识到了,作为一个计算机专业的人要有专业素养,基本的东西要必须做好。
总的来说还是收获挺大的。
(以上红色字内容为由设计者完成并填写)。