课程设计报告
课 程 名 称: 计算机组成原理
题 目 名 称: 复杂模型机的设计与实现
专 业 名 称: 计算机科学与技术
班 级:2012240201
学 号:2
学 生 姓 名:雷 彬
同 组 人:曹子恺
指 导 老 师 :单博炜
完 成 时 间 :2014年12月29日至2014年1月4日
第一章 课程设计概述…………………………………………………….1 1.1课程设计的教学目的……………………………………………….1 1.2课程设计任务和基本要求………………………………………..1 第二章 规定项目的实验验证………………………………………….2 2.1实验线路图…………………………………………………………………………2
2.2 测试………………………………………………………………………..2 2.3 写程序……………………………………………………………………2 2.4 联机读写程序…………………………………………………………3 2.5 运行程序…………………………………………………………………6 第三章 指定应用项目的设计实现………………………………….6 3.1 设计任务…………………………………………………………………6 3.2 任务分析及解决方案………………………………………………6 3.3 设计原理………………………………………………………………..7 3.4 程序运行分析及讨论………………………………………………12
第四章 收获和体会………………………………………………………..13
第一章、课程设计概述
1.1 课程设计的教学目的
本课程设计的教学目的是在掌握计算机系统组成及内部工作机制、理解计算机各功能部件工作原理的基础上,深入掌握数据信息流和控制信息流的方法,进一步加深对计算机系统各模块间相互关系的认识和整机的概念,培养开发和调试计算机的技能。在设计实践中提高应用所学专业知识分析问题和解决问题的能力。
此次课题的目的是完整设计一台模型计算机,进一步建立整机的概念。借助于TDN-CM++的内部可编程资源,运算器单元,控制存储器,微命令寄存器,地址转移逻辑,微地址寄存器,控制时序信号单元,寄存器组,总线,输入\\输出单元等,用微程序的方式设计一台的模型计算机。设计包括模型计算机组成的设计,指令系统的设计,并用汇编语言完成设计并调试成功因此我们先通过一个复杂模型机的设计实验来进行实际的计算机设计和实现,然后安排了用CPLD 来实现一个CPU 中的大部分功能的设计实验,接着讨论了输入输出系统的概念、分类、接口、寻址、基本控制方式等,根据后续微地址的形成方法,确定每条微程序地址及分支转移地址。根据微指令格式,将微程序流程中的所有微指令代码化,转化成相应的二进制代码,写入到控制存储器中的相应单元中。在总调试前,先按功能模块进行组装和分调,因为只有各功能模块工作正常后,才能保证整机的运行正确。当所有功能模块都调试正常后,进入总调试。连接所有模块,用单步微指令方式执行机器指令的微程序流程图,当全部微程序流程图检查完后,若运行结果正确,则在内存中装入一段机器指令,进行其他的运行方式等功能调试及执行指令的正确性验证。在验证正确后再自己修改几条微程序,再调试验证是否达到自己的目的。
1.2课程设计的任务和基本要求 1、设计任务
综合运用所学计算机组成原理知识,设计并实现较为完整的计算机。 2、基本要求
利用所学过的理论知识,特别是微程序设计的思想,设计基于微程序控制器的模型计算机,包括设计相应的硬件平台、机器指令系统和微指令等。设计环境
- 14 -
为TD-CMA计算机组成原理教学实验箱、微机,联机软件等。同时设计好基于模型机的测试验证程序,并在设计好的硬件平台上调试通过,以验证所设计的模型机功能的可行性与可靠性。在设计完成的前提下,撰写出符合要求的课程设计说明书并通过设计答辩。
设计具有不少于10条机器指令的复杂指令系统模型机,包含算术逻辑指令、访问内存指令、控制转移指令、输入输出指令、停机指令等。数据的寻址方式要包括直接、间接、变址和相对寻址等多种寻址方式。利用设计的复杂模型机实现两个数的减法运算并判断差得正负,差为正数则输出A,差为负数则输出B,差为零则输出C。在设计好的模型机基础上,进一步设计一个测试验证程序,验证模型机功能的可行性与可靠性。
第二章 规定项目的实验验证
2.1 实验线路图
2.2 测试
在联机软件CMPP中打开复杂模型机的数据通路,在菜单中点击“开始”,按照提示进行测试。 2.3 写程序
- 14 -
用联机软件在CMPP中将机器指令以及微指令的二进制代码编辑成十六进制的TXT文件,转出装载到试验系统中。 2.4 联机读/写程序
选择联机软件的“【转储】-【装载】“功能,在打开文件对话框中选择上面保存的文件,软件自动将机器程序和微程序写入指定单元。
机器程序
$P 00 20 $P 01 00 $P 02 61 $P 03 0F $P 04 14 $P 05 61 $P 06 00 $P 07 F0 $P 08 16 $P 09 62 $P 0A 60 $P 0B CB $P 0C 00 $P 0D 0D $P 0E 72 $P 0F 63 $P 10 01 $P 11 8C $P 12 F0 $P 13 16 $P 14 E0 $P 15 0B $P 16 D1 $P 17 70
; START: IN R0,00H 从IN单元读入计数初值 ; LDI R1,0FH 立即数0FH送R1 ; AND R0,R1 得到R0低四位 ; LDI R1,00H 装入和初值00H ; BZC RESULT 计数值为0则跳转 ; LDI R2,60H 读入数据始地址 ; LOOP: LAD R3,[RI],00H 从MEM读入数据送R3,变址寻址,偏移量为00H ; ADD R1,R3 累加求和
; INC RI 变址寄存加1,指向下一数据 ; LDI R3,01H 装入比较值 ; SUB R0,R3
; BZC RESULT 相减为0,表示求和完毕 ; JMP LOOP 未完则继续 ; RESULT: STA 70H,R1 和存于MEM的70H单元 - 14 -
$P 18 34 ; OUT 40H,R1 和在OUT单元显示 $P 19 40
$P 1A E0 ; JMP START 跳转至START $P 1B 00
$P 1C 50 ; HLT 停机 $P 60 01 ; 数据 $P 61 02 $P 62 03 $P 63 04 $P 05 $P 65 06 $P 66 07 $P 67 08 $P 68 09 $P 69 0A $P 6A 0B $P 6B 0C $P 6C 0D $P 6D 0E $P 6E 0F 微程序
$M 00 000001 $M 01 006D43 $M 03 107070 $M 04 002405 $M 05 04B201 $M 06 002407 $M 07 013201 $M 08 106009 $M 09 183001
; NOP
; PC->AR, PC加1 ; MEM->IR, P<1> ; RS->B ; A加B->RD ; RS->B ; A与B->RD ; MEM->AR ; IO->RD
- 14 -
$M 0A 106010 ; MEM->AR $M 0B 000001 ; NOP $M 0C 103001 ; MEM->RD $M 0D 200601 ; RD->MEM $M 0E 005341 ; A->PC $M 0F 0000CB ; NOP, P<3> $M 10 280401 $M 11 103001 $M 12 06B201 $M 13 002414 $M 14 05B201 $M 15 002416 $M 16 01B201 $M 17 002418 $M 18 043201 $M 1B 005341 $M 1C 10101D $M 1D 10608C $M 1E 10601F $M 1F 101020 $M 20 10608C $M 28 101029 $M 29 00282A $M 2A 04E22B $M 2B 04928C $M 2C 10102D $M 2D 002C2E $M 2E 04E22F $M 2F 04928C $M 30 001604
; RS->IO ; MEM->RD ; A加1->RD ; RS->B ; A减B->RD ; RS->B ; A或B->RD ; RS->B ; A右环移->RD ; A->PC ; MEM->A ; MEM->AR, P<2> ; MEM->AR ; MEM->A ; MEM->AR, P<2> ; MEM->A ; RI->B ; A加B->AR ; A加B->A, P<2> ; MEM->A ; PC->B ; A加B->AR ; A加B->A, P<2> ; RD->A
- 14 -
$M 31 001606 ; RD->A
$M 32 006D48 ; PC->AR, PC加1 $M 33 006D4A ; PC->AR, PC加1 $M 34 003401 ; RS->RD $M 35 000035 ; NOP
$M 36 006D51 ; PC->AR, PC加1 $M 37 001612 ; RD->A $M 38 001613 ; RD->A $M 39 001615 ; RD->A $M 3A 001617 ; RD->A $M 3B 000001 ; NOP
$M 3C 006D5C ; PC->AR, PC加1 $M 3D 006D5E ; PC->AR, PC加1 $M 3E 006D68 ; PC->AR, PC加1 $M 3F 006D6C ; PC->AR, PC加1
2.5 运行程序
联机运行程序时,进入软件界面,装载机器指令和微指令,调整控制台,使SWB=1、SWA=1,即启动程序。选择【运行】→【通路图】→【复杂模型机】功能菜单打开相应动态数据通路图,按相应功能键即可联机运行、监控、调试程序。在验证过程中,选择单步运行微指令,对比微指令每一字段的含义,仔细观察每一条微指令数据通路图的运行过程,为指定项目的设计奠定基础。
第三章 指定应用项目的设计与实现
3.1 设计任务
根据现有指令,在模型机上实现以下运算:从IN单元读入一个数据,根据读入数据的低4位值X,求1+2+.......+X的累加和,01H到0FH工十五个数据存于60H到6EH单元
3.2 任务分析及解决方案
将01H到0FH工15个数据存于60H到6EH单元中的话,解决累加和问题的解决步骤如下:
- 14 -
1、从IN单元读入计数初值; 2、立即数0FH送R1;
3、将R0和R1进行逻辑与运算,得到R0的低四位; 4、装入计数初值00H; 5、比较计数值,为0则跳转; 6、读入数据初始地址给R2;
7、从内存中读入数据送R3,变址寻址,偏移量为00H; 8、R1和R3的值相加,将和赋给R3; 9、变址寄存器RI加1,指向下一个数据; 10、装入比较值到R3;
11、将R0与R3相减,并将差值赋给R3;
12、判断R0的值,若为0,表示求和完毕,不是则跳到第7步继续执行; 13、累加和存于内存的70H单元,并最后显示。 3.3 设计原理 1、数据格式
模型机规定采用定点补码表示法表示数据,字长为8位,8位全用来表示数据
8(最高位不表示符号),数值表示范围是:0≤ X ≤ 2-1 。
2、指令设计
模型机设计三大类指令工十五条,其中包括运算类指令,控制转移类指令,数据传送类指令。运算类指令包含三种运算,算术运算,逻辑运算和移位运算,设计有6条运算类指令,分别为:ADD、 AND、INC、SUB、OR、RR,所有运算类指令都为单字节,寻址方式采用寄存器直接寻址。控制转移类指令有三条HLT、JMP、BZC,用以控制程序的分支和转移,其中HLT为单字节指令,JMP和BZC为双字节指令。数据传送类指令有IN、OUT、MOV、LDI、LAD、STA共6条,用以完成寄存器和寄存器、寄存器和I/O、寄存器和存储器之间的数据交换,除MOV指令为单字节指令外,其余均为双字节指令。 3、指令格式
所有单字节指令(ADD、AND、INC、SUB、OR、RR、HLT和MOV)格式如下:
- 14 -
其中,OP-CODE为操作码,RS为源寄存器,RD为目的寄存器,并规定:
IN和OUT的指令格式为:
其中括号中的1表示指令的第一个字节,2表示指令的第二个字节,OP-CODE为操作码,RS为源寄存器,RD为目的寄存器,P为I/O端口号,占用一个字节,系统的I/O地址译码原理见如下图:
由于用的是地址总线的高两位进行译码,I/O地址空间被分为四个区,如下:
系统设计五种数据寻址方式,即立即、直接、间接、变址和相对寻址,LDI指令为立即寻址,LAD、STA、JMP和BZC指令均具备直接、间接、变址和相对寻址能力。
LDI的指令格式如下,第一字节同前一样,第二字节为立即数。
LAD、STA、JMP和BZC指令格式如下:
- 14 -
其中M为寻址模式,具体见下表,以R2作为变址寄存器RI。
4、指令系统
本模型机共有15条基本指令,下表列出了各条指令的格式、汇编符号、指令功能。
5、总体设计
本模型的数据通路框图如下:
- 14 -
根据机器指令系统要求,设计微程序流程图及确定位地址如下图:
根据系统建议的微指令格式,见下表:
- 14 -
参照微指令流程图,将每条微指令代码化,议程二进制代码表,并将二进制代码表转换为两级操作时的十六进制格式文件,如下:
- 14 -
设计一段机器程序,将程序存为TXT格式,然后通过CMA软件导入模型机中,运行。
3.4 程序运行分析与讨论
上机调试步骤
① 选择联机软件的“【转储】—【装载】”功能,在打开文件对话框中选择保存的文件,软件自动将机器程序和微程序写入指定单元。
② 选择联机软件的“【转储】—【刷新指令区】”可以读出下位机所有的机器指令并在指令区显示,对照文件检查微程序和机器程序是否正确。如不正确,则应该重新写入。
③ 进入软件界面,选择菜单命令“【实验】—【复杂模型机】”,打开复杂模型机实验数据通路图。
④ 按动CON单元的总清按钮CLR,将时序与操作台单元的开关kk2置为“连续”挡,在联机软件中选择“【调试】—【连续运行】”,即可运行程序。 ⑤ 最后检查OUT单元的是否正确。
输出结果
开始时,我们做的结果不正确,输入8时,显示的结果是24,不是36。后来经过不断的修改程序,才得到正确的结果。 输入时04的时候输出的是0A。
- 14 -
问题讨论
联机运行时,如果不进行CLR,会出现什么结果?
答:出现结果的不会有变化,还是正确的值,因为在进行程序运行的时候,各寄存器都进行了赋值,寄存器赋值过后,所存的值都是我们需要的值,在进行运算,输出的结果没有误差。
第四章 收获与体会
- 14 -
计算机组成原理是计算机科学与技术专业一门非常重要的课程,在计算机专业的学习中起着相当重要的作用,是掌握计算机硬件知识和计算机内部处理过程的理论基础,因此,本次课程设计是对计算机组成原理所学理论知识的一次大检阅,是集知识的综合应用和动手能力于一体的一次大型的演练。
通过本次课程设计,加深了我对计算机整机的综合理解,掌握微程序控制器的组成原理以及微程序的编制、调试技术及模型机设计的基本方法,强化设计能力和实验动手能力。我对计算机的基本组成、工作原理,以及他们之间的通信方式 ,微程序控制器的设计、微指令和微程序的编制、调试以及执行等过程在理论的基础上面有了更加深刻的理解,并加深了对理论课程的理解。
- 14 -