《计算机组成原理》课程设计性实验指导.docx
《《计算机组成原理》课程设计性实验指导.docx》由会员分享,可在线阅读,更多相关《《计算机组成原理》课程设计性实验指导.docx(39页珍藏版)》请在冰豆网上搜索。
《计算机组成原理》课程设计性实验指导
一、实验目的
1、进一步掌握微程序定序器AM2910、运算器AM2901、外围GAL、EPROM芯片之间的联系,达到对整机概念的提升;
2、掌握将逻辑功能写入现场可编程器件GAL的设计流程;
3、掌握从基本硬件、微指令、微程序、机器指令到汇编指令的硬软件同时扩展的实现方法。
二、实验条件
硬件条件:
TEC-2000教学机,微机,SUPERPRO编程器、GAL、EEPROM芯片;
软件条件:
监控程序MONITOR、交叉汇编程序、GAL逻辑的设计开发软件FM软件。
三、实验任务
在现有的TEC-2000教学机系统上,扩展2条CPU的机器指令,并在系统监控程
序中扩充相应的汇编指令,使软硬件均支持扩展的指令。
四、预备知识
(一)运算器介绍
TEC-2000机上的运算器,可选8或16位字长,分别由2或4片4位的位片结构的器件组成,作为讲解运算器的实例和教学实验的对象,有很强的典型性。
它可以脱离开TEC-2000主机,单独地进行运算器部件实验,也可在主机控制下完成运算器部件实验、其它功能部件实验或整机实验。
1.Am2901
位片结构是说,每个器件本身就是一个完整的运算器,只是位数较少,要组成更多位数的实用运算器要用多片共同实现,这里选用的是美国AMD公司的Am2901芯片。
Am2901芯片是一个4位的位片结构的运算器器件,其内部组成如图1所示。
I3
I4
I5I6
I7
I0I8
I1
I2
图1AM2901内部结构框图
第一个组成部分是算逻运算部件ALU,完成3种算术运算和5种逻辑运算,共计8种功能。
其输出为F,两路输入为S、R,最低位进位Cn,四个状态输出信号如图所示。
第二个组成部分是通用寄存器组,由16个寄存器构成,并通过B口与A口地址选择被读的寄存器,B口地址还用于指定写入寄存器。
通过B口地址、A口地址读出的数据将送到B、A锁存器,要写入寄存器的数据由一个多路选择器送来。
第三个组成部分是乘商寄存器Q,它能对自己的内容完成左右移位功能,其输出可以送往ALU,并可接收ALU的输出结果。
一组三选一门和另一组二选一门用来选择送向ALU的R、S输入端的数据来源,包括Q寄存器、A口、B口、外部输入D数据的8种不同组合。
第四个组成部分是5组多路选通门,包括一组三选一门完成把ALU的输出、或左移一位、或右移一位的值送往通用寄存器组,最高、最低位移位信号有双向入/出问题。
一组三选一门完成Q寄存器的左移一位、或右移一位、或接收ALU输出值的功能,最高、最低位移位信号有双向入/出问题。
一组二选一门,选择把A口数据或ALU结果送出芯片,以给出输出Y的数据,Y输出的有无还受输出使能/OE信号的控制,仅当/OE为低时才有Y输出,/OE为高,Y输出为高阻态。
ALU的数据来源由I2I1I0三位选择码控制,8种功能由I5I4I3三位选择码实现,运算结果处理方式由I8I7I三位选择码控制,具体规定如表1所示。
表1Am2901的9位控制码
2.TEC-2000运算器组成
4片Am2901之间的连接如图2所示。
图24片Am2901连接图
TEC-2000的运算器具体组成:
16位机,使用16位数据线,共用4片Am2901芯片实现,写16位的地址寄存器操作,16位ALU一次送16位数据。
16位ALU输出经16位开关门送到16位的内部总线IB。
经16位双向三态门送到外部总线。
ALU接收16位开关送数据。
另外有状态寄存器(FLAGGAL)、最低位进位信号、高低位移位信号线路(SHIFTGAL)。
状态位CZVS和中断优先级P1、P0经开关门送到内部线IB。
完整的16位运算器组成如图2-3所示,其中GAL1、GAL3的控制信号如表2所示。
图316位运算器结构框图
表2GAL1状态寄存器、GAL3进位入、移位入、控制信号
(二)控制器介绍
TEC-2000机上的控制器,可以选用组合逻辑或微程序方案实现,非常好地支持动态的指令集合,选用了美国AMD公司的Am2910芯片作为微程序的下地址形成部件,用来讲解微程序下地址逻辑和教学实验的对象,有很高实用性和典型性。
组合逻辑和微程序控制器方案之间可用手拨开关完成切换。
动态的指令集合,是指可以通过修改和增加微程序的内容,或变化可编程器件的内容,来改变计算机已有的指令系统,例如,增加新的指令,变更原有指令等;这对于教学与教学实验的计算机有特别重要的意义。
1.微程序控制器的基本组成与实现
微程序控制器是教学机的选件,在一块小印刷电路板上实现,直接插在大板左上方的72芯插槽上。
其组成如图4所示。
图4微程序的控制器基本组成
TEC-2000机上的微程序控制器部件组成:
(如图5所)
56位的微指令字长,微下地址字段16位,控制命令字段40位;
7片28C64组成控存;
1片28C64,从指令操作码映射产生微地址;
1片374存8位下地址;
1片273存8位条件码;
1片377存8位现微地址;
1片Am2910给出下一条微指令地址;
1片GAL按判断条件产生微指令转移信号/CC;
5片GAL用作为5片8位的D触发器的寄存器;
2片GAL实现两个4位的2选1芯片功能;
8或16位的指令寄存器。
图516位微程序控制器线路逻辑图
2.微程序定序器AM2910的组成与功能
AM2910是形成下一条微指令的核心硬件,掌握它的内部组成和功能是学懂微程序设计技术,实现自己设计指令的重要环节。
AM2910是一片能提供12位微指令地址的器件,能直接寻址4096条微址令字的空间,其结构如图6所示。
图6AM2910的内部结构框图
AM2910包括一个四输入的多路地址选择器,用来从寄存器/计数器(R/C),直接输入(D),微程序计数器(μPC),或微堆栈(F)四个输入中选择其一作为下一条微址令的地址。
寄存器/计数器由12位D触发器组成,作为寄存器时,用于保存一个微地址以实现微程序转移,作为计数器时,具有减一功能(由AM2910的命令码决定),用于控制微程序的循环次数。
微程序计数器由12位的增量器和由12的寄存器μPC组成,当增量器进位CI为高电平时μPC←y+1,实现微程序的顺序执行,当CI为低电平时μPC←y实现重复执行同一条微指令,微堆栈用于保存微子程序调用时的返回地址和微程序循环的首地址,当堆栈中的数据达到5个时,微堆栈指示发出已满信号(/FULL=0),此时再压入数据将覆盖栈顶数据。
AM2910输出三个使能信号:
/PL、/MAP、/VECT,用以决定直接输入D的来源。
/PL=0时,D的来源是微指令的下地址字段,以实现微程序转移;
/MAP=0时,D的来源是MAPROM,用以实现丛机器指令的操作码找到相应的微程序首地址的转移;
/VECT=0时,D的来源原本是用于中断,但现在用于接收手拨微地址;
命令译码器接收外来命令码I3~I0,条件输入/CC,和条件允许/CCEN信号,并对其进行译码,产生片内工作需要的控制信号,和外部要用的控制信号/PL、/MAP、/VECT。
若条件允许/CCEN信号接地,则可由条件输入/CC直接决定检测结果,我们教学机上就是这样用的。
下表给出了由命令码I3~I0,条件输入/CC,和条件允许/CCEN信号以及计数器当前值的组合决定的AM2910所完成的功能。
其中:
注1表示若测试失败则保持,否则就装数;图中/表示保持原内容不变
3.控制信号
(1)对运算器的控制
24位控制信号,同24位微型开关内容,
A3~A0,B3~B0,I8~I6,I5~I3,I2~I0
SST2~0,SSH1~0,SCI1~0
多出两位SA、SB,用于选择A口、B口来源
SA=1IR的源操作数寄存器=0微码A口字段
SB=1IR的目的操作数寄存器=0微码B口字段
寄存器分配:
R4:
SPR5:
PC
约定用法:
R0:
I/O指令约定使用,也是通用累加器
对内存和I/O接口的读写
/MIO(0:
有内存或串口读写,1:
无)
REQ(0:
读写内存,1:
读写串行口)
/WE(0:
写操作,1:
读操作)
(2)对内部总线和特定寄存器的控制
(3)控制器提供的控制信号(微指令格式 )
4.TEC-200016位机基本指令流程
图7 16位机基本指令流程
.加电启动时,执行0->PC;
.接下来的两步,完成取指操作;
.按指令操作码,读出相应微指令;
.按指令具体功能,再分别用1、2、3、4步完成不同指令组的中各条指令的执行过程;
.最后检查中断请求信号,有请求时则响应中断,否则开始下一条指令的执行过程。
图816位机指令分组执行流程图
(三)U命令和A命令
1、U命令:
反汇编15条机器指令
U命令若跟地址参数,则该地址己在R15中,否则将U命令用的默认地址从UADR单元读入R15。
U命令的功能是反汇编15条机器指令,即把一条机器指令代码翻译成对应的汇编语句的格式,结果显示在计算机终端(或PC及仿真终端)的屏幕上,其执行流程如图8.3所示。
实现U命令处理功能的子程序虽然较长,但实现原理并不难理解。
例如,遇到的指令是二进制的0000000000101001,按照指令格式和编码的具体规定,指令的最高8位是操作码,查指令汇总表,00000000是加法指令,汇编语句名为ADD,加法指令的最低8位是两个寄存器的编码,其中高4位是目的寄存器DR的编号,0010为R2,低4位是源寄存器SR的编号,1001是R9。
按指令格式规定,两个寄存器之间要有一个逗号,因此,对0000000000101001指令反汇编的结果是ADDR2,R9。
这一结果在显示器屏幕上更具体的格式为:
指令地址指令字1指令个2汇编语句
其中的指令地址,指令字1,指令字2(可以没有),都用4位16进制数值表示,反汇编语句要满足对汇编语句的格式要求。
4项内容之间例如用2个空格作为符号间距。
假如上述指令被保存在内存的2000h(h代表前面的2000是十六进制)单元中,则反汇编的结果和格式是:
20000029ADDR2,R9(单字指令,无指令字2)
如果把对上述特例的处理过程更加一般化来展开讨论,结论是:
每条机器指令8位的操作码,直接对应一个汇编语句名称(最多4个字母),可以保存在一张表格中,用于从指令操作码查出汇编语句名(反汇编过程使用),或从汇编语句名查出指令操作码(汇编过程使用)。
每条机器指令第1个字的低8位和第2个指令字(如果有的话),是指令的操作数地址字段,指令字1的低8位可以是1或者2个4位的寄存器编码,可能是一个8位的IO端口地址,或相对转移指令的变址偏移量offset,第2个指令字可以是一个立即数,一个直接地址,或者长转移指令的变址偏移量offset,它们的有无和到底代表的是什么,取决于指令的操作码,换句话说,知道了指令的操作码,就清楚了怎样去看待与处理操作数地址字段的内容。
这里有个寄存器编码和寄存器名称的对应问题,例如4位二进制0000代表R0,也需要建立一张对应表,用于从4位编码查出寄存器名(反汇编过程使用),或转换寄存器名为4位编码(汇编过程使用)。
其他情况下的操作数地址字段内容,通常被理解为8位或者16位的整数数值使用,不存在类型变换问题。
唯一例外的一点是,相对转移指令与对应的汇编语句之间,有一个地址计算过程,例如,在2005(16进制,下同)内存单元有一条编码值为010*********的指令,反汇编操作时,查得该指令是无条件相对转移,汇编语句名为JR,低8位的11111100是offset,是补码形式的负4,按计算公式(当前指令地址+1+offset是转移的目标地址),则转移地址为2002,最终的反汇编结果是JR2002。
注意,8位的补码与16位的正的数值(同补码表示)相加时,8位补码的符号位要扩展到高8位上的每一位上去。
2、A命令:
单条指令汇编
A命令若跟地址参数,则该地址己在R15中,否则将A命令用的默认地址从AADR单元读入R15。
A命令的执行流程如图8.4所示。
A命令把用户从键盘输入到教学计算机中的一个汇编语句翻译成对应的机器指令编码,这里说的单条指令汇编,是指对每一个汇编语句可以直接完成汇编操作,与其他汇编语句不存在彼此之间的制约或者协调关系,因此,在这种方式下的汇编不能支持汇编伪指令和语句标号,是属于实用的汇编程序的一个最基本功能的子集,实现的只是在汇编语句与机器指令之间的翻译功能。
实现单条指令汇编的原理简介如下:
如果对ADDR2,R9语句执行汇编,得到的第1个符号(标示符)是ADD,查汇编语句名和指令操作码的表格,ADD对应的指令操作码为十六进制的00,接下来跳过空格后得到的第2个符号(标示符)为R2,是目的操作寄存器名称,查寄存器名称和寄存器编码的表格,R2的编码是十六进制的2,在跳过逗号后得到的第3个符号(标示符)为R9,是源操作寄存器名称,得到的寄存器编码为十六进制的9,最后遇到的是回车符,表明对该语句的汇编翻译工作已经结束,故得到的最终机器指令码为十六进制的0029,即二进制的0000000000101001,接着还要把该机器指令写到一个内存单元中去,对一个汇编语句的汇编操作全部完成。
同理,如果遇到的是汇编语句JR2002,并需要把汇编结果(机器指令)保存到内存的2005单元,则查得指令的操作码为16进制41,指令中的offset是通过转移目标地址(2002)减本指令地址(2005)再减1得到,是负4,即8位的补码FC,故汇编的最终结果(指令码)为16进制41FC。
在教学计算机系统中,交叉汇编程序支持某些伪指令的功能,也支持使用语句标号给出一条指令的地址,这对设计较长的程序是非常必要的功能,此时需要通过两遍扫描整个用户汇编源程序的方式来完成汇编操作的全过程,产生由机器指令码组成的目标程序,还可以按照用户的要求,产生汇编清单文件和汇编符号表。
图9
图10
(四)GAL器件的逻辑设计与编程操作
使用特定软件工具和能对GAL器件编程的编程器设备,可以向GAL20V8器件内写入所需要的逻辑功能。
其设计和操作过程如下:
(1)编辑源文件,该文件用于描述在GAL20V8内部实现的逻辑功能。
此为文本文件,但格式应符合相应编译软件的要求。
若使用FM编译工具,则源文件扩展名应为“.PLD”;也可以用ABEL语言编辑扩展名为“.ABL”的源文件,ABL源文件可以使用MACH线路实验中所介绍的ispDesignEXPERT软件进行编译。
(2)用相应的软件对已设计的源文件进行编译,以生成GAL20V8的熔丝图文件,扩展名为“.JED”。
(3)用编程设备向GAL20V8写入熔丝图文件所规定的内容,即对GAL20V8进行编程操作。
由于不同厂商提供的编程软件和编程设计有所不同,具体操作细节请阅读有关技术与使用手册。
这里仅就目前我们使用的编程软件和编程器的具体操作过程作简要的说明。
1、编写源程序文件
FM是GAL逻辑设计软件FAST-MAP的缩写。
该软件可以完成对GAL20V8和GAL16V8的逻辑设计。
FM要求GAL逻辑设计源程序的扩展名应为“.PLD”,可以使用任何文字编辑软件建立或修改这个源程序。
源程序文件应符合下列规定:
(1)GAL器件型号
说明GAL器件类型,必须起始于第1行第1列,用大写字母书写。
(2)标题行
这一部分设计信息,对编程无本质影响,占用第2-4行。
其中第2行为标题,第3行为设计者姓名、日期等,第4行为电子标签。
第3、4行可不写,但不能有空行。
(3)引脚列表
第4行后是器件管脚定义,可占用多行。
从1号管脚开始至最后一个管脚,其中,无用管脚命名为NC,电源命名为VCC,地线命名为GND,其余引脚可以自行命名,但长度不应超过8个字符,引脚名之间用空格分隔,一行写不下可延长至下一行。
(4)输出逻辑表达式
在这一部分可为每个输出管脚定义逻辑表达式,可占用多行。
表达式后,须用大写关键字DESCRIPTION结束逻辑描述。
逻辑表达式中可含有下列三种逻辑运算符:
与“*”、或“+”、非“/”。
逻辑表达式必须采用与-或形式。
由于GAL硬件结构的限制,表达式中的或运算符不应多于8个(有三态控制的应小于8个),参加与运算的引脚不应多于16个(对GAL16V8),或20个(对GAL20V8)。
表达式中不能有任何括号,FM不对表达式进行任何化简。
每一个输出引脚可通过下列两种赋值语句连接到相应的逻辑表达式上去:
输出引脚=表达式或输出引脚:
=表达式。
第一种形式由等式右边的表达式直接决定输出的状态,是组合逻辑功能。
第二种形式是触发器功能,说明了仅在时钟脉冲的上升沿到来时,这个引脚的电路接收并记忆等式右边所给出的逻辑值。
如果用户需要按某一种逻辑关系对输出引脚进行三态控制,可使用下面形式的语句:
输出引脚.OE=表达式,当表达式的结果为真时,由符号名指定的输出引脚才输出有效电平,否则就保持高阻态。
这里的表达式只允许包含一个乘积项,这是由GAL器件的结构决定的。
如果对某个输出引脚进行了三态控制,那么全部引脚的输出表达式中最多只能有七个或项,并且必须列出全部输出引脚的三态控制逻辑,无需三态控制的引脚可用VCC作为控制逻辑。
如果对输出进行负逻辑设计,可在输出引脚前面加非运算符。
(5)说明部分
这一部分写在大写的关键字DESCRIPTION的下一行,可以写任何文字信息,最后以END结束。
FM将这一部分理解为注释,对逻辑设计无本质的影响。
此部分可省略。
源程序中要注意下列几点:
·每一语句行均可加以注释,注释必须以一个分号开始。
·一份GAL设计说明书最多可有200行,说明书的最后一行必须用回车结束。
·FM对大小写字母区别对待,如字符“A”不同于字符“a”。
2、用FM编译源程序文件
用任何文本编辑程序编辑准备好GAL设计说明书(以PLD为扩展名的一个输入文件)均可以启动FM编译程序。
在DOS提示符下键入FM,屏幕上将出现键入输入文件名的提示。
当键入已准备好的GAL设计说明书文件名(可省略PLD后缀)并按回车键后,FM将自动检查源文件中逻辑表达式的合法性,检查通过后,屏幕上将出现FM菜单,并提示键入相应的选择项(数字键1~5)。
其中:
第1项,建立列表文件操作,将产生后缀为LST的列表文件。
第2项,建立熔丝图文件操作,将产生后缀为PLT的熔丝图文件。
第3项,建立JEDEC文件操作,将产生后缀为JED的JEDEC文件。
第4项,读入一个新源文件操作。
第5项,退出FM操作。
列表文件和熔丝图文件可供核对参考,JED文件用来完成编程。
如果源程序中含有语法错误或存在结构冲突等问题,FM将指出来。
出错时可用Ctrl+Break退出。
3、向器件内写入编程内容
用FM软件对扩展名为“.PLD“的文件编译,产生“.JED”文件后,就需要用编程器将JED文件固化(编程)到GAL中,以SuperPro编程器为例介绍编程器的使用。
SuperPro编程器不仅能对GAL编程,还能对EPROM、EEPROM等器件进行编程。
SuperPro编程器软件在Windows环境下使用,操作非常便捷。
(1)启动SuperPro编程器
开机前,将SuperPro编程器与计算机的打印机接口相连,打开编程器电源开关。
开机启动Windows,然后依次单击[开始]、[程序]、[SuperProLforwindows]就能打开SuperPro。
(2)选择编程器件
假如编程的芯片为GAL20V8B,运行SuperPro后,在DEVICETYPE框内单击PLD的单选按钮。
在主界面的工具栏上,单击通过器件选厂家的按钮,给出相应的器件型号,最后单击“OK”,就可以对器件编程了。
(3)插上芯片
检查芯片的型号是否正确,引脚是否整齐正直(不齐要校正),在编程器上按芯片的正确方向插入需要编程的芯片(不能插反,否则会烧毁芯片)。
(4)对芯片编程
在工具栏上选择打开文件的按钮,找到并调入编译好的JED文件,然后按一下工具栏上的编程按钮,就能在对话框中看到编程器对芯片的编程过程。
(5)结束编程
当对话框中显示“VerifyOK”,表示编程成功。
这时可以取下芯片,关闭SuperPro。
五、实验方法与步骤
1、与微程序控制器、运算器的配套电路GAL芯片的逻辑实现
(1)根据要设计的功能,写出SCCGAL、FLAGGAL、SHIFTGAL等外围电路的逻辑表达式;
FLAGGAL.pld
GAL20V8
FLAG
2006.1
123456789101112
CLKSST2SST1SST0IB7IB6IB5IB4CYZrOVGND
OEF3NCC0CZVSQ0RAM0RAM3VCC
C0:
=CY
C:
=/SST2*/SST1*/SST0*C
+/SST2*/SST1*SST0*CY
+/SST2*SST1*/SST0*IB7
+SST2*/SST1*/SST0
+SST2*/SST1*SST0*RAM0
+SST2*SST1*/SST0*RAM3
+SST2*SST1*SST0*Q0
Z:
=/SST2*/SST1*/SST0*Z
+/SST2*/SST1*SST0*Zr
+/SST2*SST1*/SST0*IB6
+/SST2*SST1*SST0*Z
+SST2*Z
V:
=/SST2*/SST1*/SST0*V
+/SST2*/SST1*SST0*OV
+/SST2*SST1*/SST0*IB5
+/SST2*SST1*SST0*V
+SST2*V
S:
=/SST2*/SST1*/SST0*S
+/SST2*/SST1*SST0*F3
+/SST2*SST1*/SST0*IB4
+/SST2*SST1*SST0*S
+SST2*S
DESCRIPTION
SHIFTGAL.pld
GAL20V8
SHIFT
2006.1
123456789101112
C0MI7SCI0SSH0SSH1SCI1MI5MI4MI3CNOVRGND
NCCOVCYRAM3Q3RAM0Q0NCCINF3VCC
CIN=/SCI1*SCI0+SCI1*/SCI0*C+SCI1*SCI0*C0
OV=/MI5*/MI4*/MI3*OVR+/MI5*/MI4*MI3*OVR+/MI5*MI4*/MI3*OVR
CY=CN
RAM3=/SSH1*SSH0*C
+SSH1*/SSH0*CN
+SSH1*SSH0*/F3*OVR
+SSH1*SSH0*F3*/OVR
RAM0=/SSH1*SSH0*C
+SSH1*/SSH0*Q3
Q3=SSH1*/SSH0*RAM0+SSH1*SSH0*RAM0
Q0=SSH1*/SSH0*/F3
CIN.OE=VC