
目 录 I
第一部分 基本单元实验 1
1.1算术逻辑运算实验 1
一、实验目的 1
二、实验内容 1
三、实验仪器 1
四、实验原理 1
五、实验步骤 2
六、实验报告 4
七、实验思考题 4
1.2进位控制实验 5
一、实验目的 5
二、实验内容 5
三、实验仪器 5
四、实验原理 5
五、实验步骤 6
六、实验报告 7
七、实验思考题 7
1.3移位运算实验 8
一、实验目的 8
二、实验内容 8
三、实验仪器 8
四、实验原理 8
五、实验步骤 8
六、实验报告 9
七、实验思考题 9
1.4 乘法器设计实验 10
一、实验目的 10
二、实验内容 10
三、实验仪器 10
四、实验原理 10
五、实验步骤 11
六、实验报告 12
七、实验思考题 12
1.5存储器实验 13
一、实验目的 13
二、实验内容 13
三、实验仪器 13
四、实验原理 13
五、实验步骤 14
六、实验报告 15
七、实验思考题 15
1.6 总线控制实验 16
一、实验目的 16
二、实验内容 16
三、实验仪器 16
四、实验原理 16
五、实验步骤 16
六、实验报告 18
七、实验思考题 18
1.7 时序实验 19
一、实验目的 19
二、实验内容 19
三、预备知识 19
四、实验仪器 19
五、实验原理 19
六、实验步骤 20
七、实验报告 21
八、实验思考题 21
1.8 微程序控制器的组成与微程序设计实验 22
一、实验目的 22
二、实验内容 22
三、实验仪器 22
四、实验原理 22
五、实验步骤 23
六、实验报告 27
七、实验思考题 27
1.9 硬布线控制器设计实验 28
一、实验目的 28
二、实验设备 28
三、实验内容 28
四、实验原理 28
五、实验步骤 30
六、实验报告 30
七、思考题 30
第二部分 综合实验 31
2.1基本模型机实验 31
一、实验目的 31
二、实验内容 31
三、实验仪器 31
四、实验原理 31
五、实验步骤 35
六、实验报告 38
七、实验思考题 38
2.2移位运算模型机实验 39
一、实验目的 39
二、实验内容 39
三、实验仪器 39
四、实验原理 39
五、实验步骤 39
六、实验报告 44
七、实验思考题 44
2.3复杂模型机实验 45
一、实验目的 45
二、实验内容 45
三、预备知识 45
四、实验仪器 46
五、实验原理 46
六、实验注意事项 47
七、实验步骤 47
八、实验报告 52
九、实验思考题 52
2.4 可重构原理计算机的组成实验 53
一、实验目的 53
二、实验内容 53
三、实验仪器 53
四、实验原理 53
五、实验步骤 55
六、实验报告 56
七、实验思考题 56
第三部分 扩展板实验 57
3.1扩展8255并行口实验 57
一、实验目的 57
二、实验内容 57
三、实验仪器 57
四、实验原理 57
五、实验步骤 59
六、实验报告 62
七、实验思考题 62
3.2扩展8253定时器/计数器实验 63
一、实验目的 63
二、实验内容 63
三、实验仪器 63
四、实验原理 63
五、实验步骤
六、实验报告 66
七、实验思考题 66
3.3 8259中断控制器实验 67
一、实验目的 67
二、实验内容 67
三、实验仪器 67
四、实验原理 67
五、实验步骤 70
六、实验报告 73
七、实验思考题 73
附录1 实验用芯片介绍 74
附录2 联机软件操作说明 83
附录3 MAX+PLUSII软件使用说明 87
附录4 模块布局图 130
第一部分 基本单元实验
1.1算术逻辑运算实验
一、实验目的
1、掌握简单运算器的组成以及数据传送通路。
2、验证运算功能发生器(74LS181)的组合功能。
二、实验内容
运用算术逻辑运算器进行算术运算和逻辑运算。
三、实验仪器
1、ZY15CompSys12BB 计算机组成原理及系统结构教学实验箱 一台
2、排线 若干
四、实验原理
实验中所用的运算器数据通路如图1-1所示。其中运算器由两片74LS181以并/串形式构成8位字长的ALU。运算器的两个数据输入端分别由两个锁存器(74LS273)锁存,锁存器的输入连至数据总线,数据输入开关用来给出参与运算的数据,并经过一三态门(74LS245)和数据总线相连。运算器的输出经过一个三态门(74LS245)和数据总线相连。数据显示灯已和数据总线相连,用来显示数据总线内容。
图1-l 运算器数据通路图
图1-2中已将实验需要连接的控制信号用箭头标明(其他实验相同,不再说明)。其中除T4为脉冲信号,其它均为电平控制信号。实验电路中的控制时序信号均已内部连至相应时序信号引出端,进行实验时,还需将S3、S2、S1、S0、Cn、M、LDDR1、LDDR2、ALU_G、SW_G各电平控制信号与开关单元中的二进制数据开关进行跳线连接,其中ALU_G、SW_G为低电平有效,LDDR1、LDDR2为高电平有效。按动微动开关START,即可获得实验所需的单脉冲。
五、实验步骤
l、按图1-2连接实验线路,仔细检查无误后,接通电源。(图中箭头表示需要接线的地方,接总线和控制信号时要注意高低位一一对应,可用彩排线的颜色来进行区分)
图1-2 算术逻辑运算实验接线图
2、 用输入单元的二进制数据开关向寄存器DR1和DR2置数,数据开关的内容可以用与开关对应的指示灯来观察,灯亮表示开关量为“1”,灯灭表示开关量为“0”。以向DR1中置入11000001(C1H)和向DR2中置入01000011(43H)为例,具体操作步骤如下:
首先使各个控制电平的初始状态为:CLR=1,LDDR1=0,LDDR2=0,ALU_G=1,SW_G=1,S3 S2 S1 S0 M CN=111111,并将控制台单元的开关SP03打在“STEP”,SP05打在“NORM”状态,然后按下图所示步骤进行。
上面方括号中的控制电平变化要按照从上到下的顺序来进行,其中T4的正脉冲是通过按动一次控制台单元的触动开关START来产生的。
置数完成以后,检验DR1和DR2中存的数是否正确,具体操作为:关闭数据输入三态门(SW_G=1),打开ALU输出三态门(ALU_G=0),使ALU单元的输出结果进入总线。当设置S3、S2、S1、S0、M、CN的状态为111111时,数据单元的指示灯显示DR1中的数;而设置成101011时,数据单元的指示灯显示DR2中的数,然后将指示灯的显示值与输入的数据进行对比。
3、 验证74LS181的算术运算和逻辑运算功能(采用正逻辑)
74LS181的功能见表1-1,可以通过改变S3 S2 S1 S0 M CN的组合来实现不同的功能,表中“A”和“B”分别表示参与运算的两个数,“+”表示逻辑或,“加”表示算术求和。
表1-1 74LS181功能表
| S3 | S2 | S1 | S0 | M=0(算术运算) | M=1 (逻辑运算) | |
| CN=1无进位 | CN=0有进位 | |||||
| 0 | 0 | 0 | 0 | F= | F=A加1 | F= |
| 0 | 0 | 0 | 1 | F= | F=()加1 | F= |
| 0 | 0 | 1 | 0 | F= | F=()加1 | F= |
| 0 | 0 | 1 | 1 | F=0减1 | F=0 | F= |
| 0 | 1 | 0 | 0 | F=加 | F=加加1 | F= |
| 0 | 1 | 0 | 1 | F=()加 | F=()加加1 | F= |
| 0 | 1 | 1 | 0 | F=减减1 | F=减 | F= |
| 0 | 1 | 1 | 1 | F=减1 | F= | F= |
| 1 | 0 | 0 | 0 | F=加 | F=加加1 | F= |
| 1 | 0 | 0 | 1 | F=加 | F=加加1 | F= |
| 1 | 0 | 1 | 0 | F=()加 | F=()加加1 | F= |
| 1 | 0 | 1 | 1 | F=减1 | F= | F= |
| 1 | 1 | 0 | 0 | F=加 | F=加加1 | F=1 |
| 1 | 1 | 0 | 1 | F=()加 | F=()加加1 | F= |
| 1 | 1 | 1 | 0 | F=()加 | F=()加加1 | F= |
| 1 | 1 | 1 | 1 | F=减1 | F= | F= |
表l-2 运算器功能实验表
| DR1 | DR2 | S3 | S2 | S1 | S0 | M=0(算术运算) | M=1 (逻辑运算) | |
| CN=1无进位 | CN=0有进位 | |||||||
| C2 | 44 | 0 | 0 | 0 | 0 | F=11000010 | F=11000011 | F=00111101 |
| C2 | 44 | 0 | 0 | 0 | 1 | F=11000110 | F=11000111 | F=00111001 |
| C2 | 44 | 0 | 0 | 1 | 0 | F=11111011 | F=11111100 | F=00000100 |
| C2 | 44 | 0 | 0 | 1 | 1 | F=11111111 | F=00000000 | F=00000000 |
| C2 | 44 | 0 | 1 | 0 | 0 | F=01000100 | F=01000101 | F=10111111 |
| C2 | 44 | 0 | 1 | 0 | 1 | F=01001000 | F=01001001 | F=10111011 |
| C2 | 44 | 0 | 1 | 1 | 0 | F=01111101 | F=01111110 | F=10000110 |
| C2 | 44 | 0 | 1 | 1 | 1 | F=10000001 | F=10000010 | F=10000010 |
| C2 | 44 | 1 | 0 | 0 | 0 | F=00000010 | F=00000011 | F=01111101 |
| C2 | 44 | 1 | 0 | 0 | 1 | F=00000110 | F=00000111 | F=01111001 |
| C2 | 44 | 1 | 0 | 1 | 0 | F=00111011 | F=00111100 | F=01000100 |
| C2 | 44 | 1 | 0 | 1 | 1 | F=00111111 | F=01000000 | F=01000000 |
| C2 | 44 | 1 | 1 | 0 | 0 | F=10000100 | F=10000101 | F=11111111 |
| C2 | 44 | 1 | 1 | 0 | 1 | F=10001000 | F=10001001 | F=11111011 |
| C2 | 44 | 1 | 1 | 1 | 0 | F=10111101 | F=10111110 | F=11000110 |
| C2 | 44 | 1 | 1 | 1 | 1 | F=11000001 | F=11000010 | F=11000010 |
六、实验报告
1、完成实验步骤2,在显示结果后将指示灯显示的值与输入的数据进行比较;
2、完成实表1-2,比较理论分析值与实验结果值;并对结果进行分析。
七、实验思考题
1、运算器的功能是什么? 核心部分是什么?
1.2进位控制实验
一、实验目的
验证带进位控制的算术运算功能发生器的功能。
二、实验内容
按给定的数据完成几种指定的算术运算。
三、实验仪器
1、ZY15CompSys12BB计算机组成原理及系统结构教学实验箱 一台
2、排线 若干
四、实验原理
进位控制运算器的实验原理如图1-3所示,在实验1、1的基础上增加进位控制部分,其中181的进位进入一个锁存器,其写入是由T4和AR信号控制,T4是脉冲信号,实验时将T4连至信号单元的TS4上。AR是电平控制信号(低电平有效),可用于实现带进位控制实验,而T4脉冲是将本次运算的进位结果锁存到进位锁存器中。
图l-3 进位控制实验原理图
五、实验步骤
1、按图1-4连接实验线路,仔细检查无误后,接通电源。(图中箭头表示需要接线的地方,接总线和控制信号时要注意高低位一一对应,可用彩排线的颜色来进行区分)
图1-4 进位控制实验接线图
2、进位标志清零。具体操作方法如下:
实验板中开关单元中的CLR开关为标志位CY、ZI的清零开关,它为0时(开关向上为1,向下为0)是清零状态,所以将此开关做l→0→1操作,即可使标志位CY、ZI清零(清零后CY、ZI指示灯亮)。
3、用输入单元的二进制数据开关向DR1存入11000001,向DR2存入01000011。
首先使各个控制电平的初始状态为:CLR=1,LDDR1=0,LDDR2=0,ALU_G=1,AR=1,SW_G=1,S3 S2 S1 S0 M CN=111111,并将控制台单元的开关SP05打在“NORM”状态, SP06打在“RUN”状态,SP03打在“STEP”状态,SP04打在“RUN”状态,然后划出流程图并进行实验。
其中T4的正脉冲是通过按动一次控制台单元的触动开关START来产生的。
4、验证带进位运算及进位锁存功能。
进行带进位算术运算:前面的操作已经向DR1、DR2置数,然后关闭数据输入三态门(SW_G=1)并使LDDR2=0,打开ALU输出三态门(ALU_G=0),使ALU单元的输出结果进入总线,当S3 S2 S1 S0 M CN的状态为100101时,数据总线指示灯显示的数据为DR1加DR2加当前进位标志得到的结果。这个结果是否产生进位,则要使AR=0,然后按动触动开关START,若进位标志灯CY仍然亮,表示无进位;若进位标志灯CY灭,表示有进位。
在本例中DR1为11000001,DR2为01000011,结果为00000100;当AR=0时,按动开关START,CY灭,表示有进位。
六、实验报告
验证带进位运算及进位锁存功能,记录实验数据。
七、实验思考题
1、74LS181能提高运算速度的原因是什么?
2、在定点二进制运算器中,减法运算一般通过什么方式实现?
1.3移位运算实验
一、实验目的
验证移位控制的功能。
二、实验内容
使用一片74LS299来实现移位控制。
三、实验仪器
1、ZY15CompSys12BB计算机组成原理及系统结构教学实验箱 一台
2、排线 若干
四、实验原理
移位运算实验中使用了一片74LS299作为移位发生器,其八位输入/输出端以排针方式和总线单元连接。299_G信号控制其使能端,T4时序为其时钟脉冲,由S1 S0 M控制信号控制其功能状态,列表如下:
表1-3 74LS299功能表
| 299_G | S1 | S0 | M | 功能 | |
| 0 | 0 | 0 | 任意 | 保持 | |
| 0 | 1 | 0 | 0 | 循环右移 | |
| 0 | 1 | 0 | 1 | 带进位循环右移 | |
| 0 | 0 | 1 | 0 | 循环左移 | |
| 0 | 0 | 1 | 1 | 带进位循环左移 | |
| 任意 | 1 | 1 | 任意 | 装数 | |
图1-5 移位运算电路原理图
五、实验步骤
1、按图1-6连接实验线路,仔细检查无误后接通电源。(图中箭头表示需要接线的地方,接总线和控制信号时要注意高低位一一对应,可用彩排线的颜色来进行区分)
图1-6 移位运算实验接线图
2、用输入单元的二进制数据开关把数据写入74LS299:
首先使各个控制电平的初始状态为:299_G=1,SW_G=1,S1 S0 M =111,CLR= l→0→1,并将控制台单元的开关SP05打在“NORM”状态,SP06打在“RUN”状态,SP03打在“STEP”状态,SP04打在“RUN”状态,按下面的流程图进行实验。
数据开关
关三态门
置数
打开三态门
其中T4的正脉冲是通过按动一次控制台单元的触动开关START来产生的。
3、参照前面的表格1-3,改变S0 S1 M 299_G的状态,按动触动开关START,观察移位结果。
六、实验报告
对照表1-3,列表记录移位结果。
七、实验思考题
1、本实验用到的移位发生器是什么?其功能表是什么?
1.4 乘法器设计实验
一、实验目的
1、熟悉大规模可编程器件CPLD的应用。
2、掌握4位阵列乘法器的设计原理。
二、实验内容
通过MAX+plusII软件,下载乘法程序到是实验箱,输入乘数和被乘数,观察结果并与理论值进行比较。
三、实验仪器
1、ZY15CompSys12BB计算机组成原理及系统结果实验箱 一台
2、排线 若干
四、实验原理
硬件乘法器常规的设计通常使用“串行移位”和“并行加法”相结合的方法,这种方法的优点是所需的硬件资源少,但是串行方法速度太慢,不能满足科学技术对高速乘法提出的要求。由于在计算机中乘法运算大约占全部算术运算的1/3,因此采用高速乘法部件十分必要。随着大规模集成电路的发展,高速的单元阵列乘法器应运而生,出现了各种形式的阵列乘法器,提供了极快的计算速度。使用CPLD器件来设计4位阵列乘法器。4位乘4位不带符合的阵列乘法器的逻辑原理如下图1-7。
a3 a2 a1 a0
Х b3 b2 b1 b0
a3b0 a2b0 a1b0 a0b0
a3b1 a2b1 a1b1 a0b1
a3b2 a2b2 a1b2 a0b2
a3b3 a2b3 a1b3 a0b3
p7 p6 p5 p4 p3 p2 p1 p0
图1-7 阵列乘法器逻辑图
依据逻辑图用原理图输入法,把四乘四位不带符合的阵列乘法器设计到CPLD单元芯片MAX7128中。实验用输入单元的高4位作为b3-b0,低4位作为a3-a0,用输出单元的数码管来显示列阵乘法器的结果。
五、实验步骤
1、请参照附录3提示安装学习MAX+PLUSⅡ软件。
2、光盘中提供设计的阵列乘法器文件打开。接通电源,通过MAX+plusⅡ软件,把对应chengfa文件中的mult.pof文件用下载电缆下载到实验箱中。
3、按图1-8连接实验线路,仔细检查无误后接通电源。(图中箭头表示需要接线的地方,接总线和控制信号时要注意高低位一一对应,可用彩排线的颜色来进行区分)
4、用输入单元的二进制数据开关把乘数03H与被乘数02H写入寄存器(在CPLD器件)中,然后把相乘的结果在输出单元显示。具体按照如下步骤,首先使各个控制电平的初始状态为:SW_G=1,CE=1, WE=1,299_G=1,CLR= l→0→1,并将控制台单元的开关SP05打在“NORM”,开关SP03打在“STEP”,开关SP04打在“RUN”状态,然后按照下面框图所示步骤进行操作。下面方括号中的控制电平变化要按照从上到下的顺序来进行。注意:按动一下控制台单元大鼠标开关“START”,即可在G_CK得到一个正脉冲“”。
5、观察乘法器输出,并与理论值相比较。
图1-8 阵列乘法器接线图
六、实验报告
1、熟练使用MAX+PLUSⅡ软件;
2、列表将乘法器输出与理论值进行比较。
七、实验思考题
1、如果乘法器的运算结果发生溢出,在输出单元会出现什么现象?
1.5存储器实验
一、实验目的
1、掌握静态随机存储器RAM工作特性。
2、掌握静态随机存储器RAM的数据读写方法。
二、实验内容
运用静态随机存储器RAM进行单步读、写和连续写数据。
三、实验仪器
1、ZY15CompSys12BB计算机组成原理及系统结构教学实验箱 一台
2、排线 若干
四、实验原理
实验所用的半导体静态存储器电路原理如图1-9所示,实验中的静态存储器由一片6116(2KX8)构成,其数据线接至数据总线,地址由地址锁存器(74LS273)给出。地址灯LI01—LI08与地址总线相连,显示地址内容。输入单元的数据开关经一三态门(74LS245)连至数据总线,分时给出地址和数据。
图1-9 存储器实验原理图
地址总线为8位,接入6116的地址A7—A0,将6116的高三位A8-A10接地,所以其实际容量为256字节。6116有三个控制线:CE(片选线)、OE(读线)、WE(写线)。本实验中将OE常接地,在此情况,当CE=0、WE=0时进行写操作,CE=0、WE=1时进行读操作,其写时间与T3脉冲宽度一致。
实验时,将T3脉冲接至实验板上时序电路模块的TS3相应插针中,其它电平控制信号由开关单元的二进制开关给出,其中SW_G为低电平有效,LDAR为高电平有效。
五、实验步骤
1、形成时钟脉冲信号T3,具体接线方法和操作步骤如下:
(1) 将信号源单元中的CLOCK和CK,TS3和T3用排线相连。
(2) 将信号源单元中的两个二进制开关 “SP03”设置为“RUN”状态、“SP04”设置为“RUN”状态(当“SP03”开关设置为“RUN”状态、“SP04”开关设置为“RUN”状态时,每按动一次触动开关START,则T3的输出为连续的方波信号。当“SP03”开关设置为“STEP”状态、“SP04”开关设置为“RUN”状态时,每按动一次触动开关START,则T3输出一个单脉冲,其脉冲宽度与连续方式相同。)
2、按图1-10连接实验线路,仔细检查无误后接通电源。(图中箭头表示需要接线的地方,接总线和控制信号时要注意高低位一一对应,可用彩排线的颜色来进行区分)
图1-10 存储器实验接线图
3、 给存储器的00、01、02、03、04地址单元中分别写入数据11、22、33、44、55,具体操作步骤如下:(以向00号单元写入11为例)首先使各个控制电平的初始状态为:SW_G=1,CE=1,WE=1,LDAR=0,PC_G=1,CLR= l→0→1,并将控制台单元的开关SP05打在“NORM”状态,然后按下图所示步骤进行。
图中方括号中的控制电平变化要按照从上到下的顺序来进行,其中T3的正脉冲是通过按动一次控制台单元的触动开关START来产生的,而WE的负脉冲则是通过让开关单元的WE开关做l→0→1变化来产生的。
4、 依次读出第00、01、02、03、04号单元中的内容,在数据总线单元的指示灯上进行显示,观察上述各单元中的内容是否与前面写入的一致。具体操作步骤如下:(以从00号单元读出11数据为例)
其中AR的值在地址总线单元的指示灯上显示,RAM相应单元的值在数据总线单元的指示灯上显示。
六、实验报告
1、按实验内容进行单步读、写、连续写。着重写明各开关的状态,并按先后顺序写明操作步骤;
2、将存储器的地址和其对应的数据列表记录。
七、实验思考题
1、静态存储器是靠什么存储信息?动态存储器又是靠什么存储信息?
2、静态存储器和动态存储器的优缺点?
1.6 总线控制实验
一、实验目的
1、理解总线的概念及其特性。
2、掌握总线传输控制特性。
二、实验内容
改变输入寄存器的地址值,在输出单元的数码管上会显示出该地址下的存储器RAM的值。
三、实验仪器
1、ZY15CompSys12BB计算机组成原理及系统结构教学实验箱 一台
2、排线 若干
四、实验原理
总线是多个系统部件之间进行数据传送的公共通路,是构成计算机系统的骨架。借助总线连接,计算机在系统各部件之间实现传送地址、数据和控制信息的操作。因此,所谓总线就是指能为多个功能部件服务的一组公用信息线。
存储器
总线传输实验框图如图1-11所示,它将几种不同的设备挂至总线上,有存储器、输入设备、输出设备、寄存器。这些设备都需要有三态输出控制,按照传输要求恰当有序的控制它们,就可实现总线信息传输。
图1-11 总线示意图
五、实验步骤
1、 根据挂在总线上的几个基本部件,设计一个简单的流程:
(1)输入设备将一个数写入地址寄存器。
(2)输入设备将另一个数写入到存储器的当前地址单元中。
(3)将存储器当前地址单元中的数用LED数码管显示。
2、 按照图1-12实验接线图进行连线,仔细检查无误后,接通电源。(图中箭头表示需要接线的地方,接总线和控制信号时要注意高低位一一对应,可用彩排线的颜色来进行区分)
图1-12 总线控制实验接线图
3、 具体操作步骤图示如下:
首先使各个控制电平的初始状态为:SW_G=1,CE=1,WE=1,LDAR=0,299_G(LED_G)=1,PC_G(WE)=1,CLR= l→0→1,并将控制台单元的开关SP05打在“NORM”状态,然后按下图所示步骤进行。图中方括号中的控制电平变化要按照从上到下的顺序来进行,其中LDAR的正脉冲是通过让开关单元的LDAR开关做0→1→0变化来产生的,而WE和PC_G(WE)的负脉冲则是通过让开关单元的WE和PC_G开关做1→0→1变化来产生的。
完成上述操作后,在输出单元的数码管上观察结果。
六、实验报告
改变寄存器的地址值列表记录存储器的RAM值。
七、实验思考题
1、什么叫总线?总线控制的方式有哪些?
2、画出单总线结构示意图。
1.7 时序实验
一、实验目的
1、掌握时序产生器的组成原理和设计思想,提高对基本逻辑部件的分析和设计能力。
2、观察、分析和测量实验箱的控制时序,提高实际动手能力。
3、增加对系统时序的理解,进一步深化理解计算机的工作原理。
二、实验内容
通过联机软件的示波器观察控制时序。
三、预备知识
1、复习有关时序电路的内容。
2、弄清实验电路中各部分之间的关系以及信号之间的逻辑关系。
3、掌握联机软件的使用方法,参见附录2。
四、实验仪器
1、ZY15CompSys12BB计算机组成原理及系统结构教学实验箱 一台
2、排线 若干
3、8芯鳄鱼夹线 一根
4、PC机 一台
五、实验原理
实验所用的时序电路原理如图1-13示,可产生4个相位等间隔的时序信号TS1—TS4,其中CK为时钟信号,由实验台右上方的方波信号源提供,可产生频率可调的方波信号。实验者可自行选择方波信号的频率(通过调节电位器RW1)。为了便于控制程序的运行,时序电路发生器设置了一个启停控制触发器,使TS1一TS4信号输出可控。图中STEP(单步)、STOP(停机)分别是来自实验板信号源单元二进制开关SP03、SP04的状态。START信号来自实验板控制台单元的一个微动开关START的按键信号。当SP03、SP04开关状态都为RUN时,一旦按下启动键,运行触发器一直处于“1”状态,即原理图中P17一直为“1”,因此时序信号TS1—TS4将周而复始地发送出去。当SP03为1(STEP)时,一旦接下启动键,机器便处于单步运行状态。此时只发送一个微指令周期的时序信号就停机。
图1-13 时序电路原理图
六、实验步骤
1、首先按照图1-14进行接线用8芯鳄鱼夹线将输出信号引入示波器的输入通道。将SP03和SP04开关的状态均设为“RUN”状态,按动START触动开关,时序信号TS1—TS4将周而复始地发送出去。
2、联机并用联机软件的示波器功能来观察输出波形,这时用联机软件的示波器功能就可以观察到时序信号,将该信号与图1—15示波形对比(软件的具体使用方法见附录2中的软件操作说明)。通过调节RW1可以使输出波形的频率在100Hz到300Hz之间变化。(注意:开关单元的拨位开关CLK置为高电平,若采样有失真时请把采样频率调高一些。)
图1-14 时序实验接线图
图1-15 时序波形参考图
七、实验报告
1、绘出实验中观察到的波形图;
2、给出CK的频率,说明:CK与TS1、TS2、TS3、TS4之间的关系。
八、实验思考题
1、在示波器上如何确定工作脉冲的先后关系?
1.8 微程序控制器的组成与微程序设计实验
一、实验目的
1、掌握微程序控制器的组成原理。
2、掌握微程序的编制、写入,观察微程序的运行。
3、为整机实验打好基础。
二、实验内容
编制微程序并观察其运行过程。
三、实验仪器
1、ZY15CompSys12BB计算机组成原理及系统结构教学实验系统 一台
2、排线 若干
四、实验原理
实验所用的时序电路原理可以参考时序实验。由于时序电路的内部线路已经连好(时序电路的CLR已接到实验板中下方的CLR清零开关上),所以只需将时序电路与方波信号源连接即可。
1、 微程序控制电路
微程序控制器的组成见图1-16其中控制存储器采用3片2816 E2PR0M,具有掉电保护功能。微命令寄存器18位,用两片8D触发器(74LS273)和一片4D(74LS175)触发器组成。微地址寄存器6位,用三片上升沿触发的双D触发器(74LS74)组成,它们带有清“0”端和置“1”端。在不进行判别测试的情况下,T2时刻打入微地址寄存器的内容即为下一条微指令地址。当T4时刻进行判别测试时,转移逻辑满足条件后输出的负脉冲通过强置端将某一触发器设置为“1”状态,完成地址修改。
在该实验电路中,在控制台单元有一个编程开关SP06,它具有三种状态:WRITE(编程)、READ(校验)、RUN(运行)。当处于“编程状态”时,实验者可根据微地址和微指令格式将微指令二进制代码写入到控制存储器2816中。当处于“校验状态”时,可以对写入控制存储器中的二进制代码进行验证,从而可以判断写入的二进制代码是否正确。当处于“运行状态”时,只要给出微程序的入口微地址,则可根据微程序流程图自动执行微程序。图中微地址寄存器输出端增加了一组三态门74LS245,目的是隔离触发器的输出,增加抗干扰能力,并用来驱动微地址显示灯。
2、微指令格式
微指令字长24位,其控制位顺序如下:
表1-4 微指令结构图
| 微程序 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
| 控制信号 | S3 | S2 | S1 | S0 | M | CN | RD | M17 | M16 | A | B | P | uA5 | uA4 | uA3 | uA2 | uA1 | uA0 | ||||||
| A字段 | B字段 | P字段 | ||||||||||||
| 15 | 14 | 13 | 控制信号 | 12 | 11 | 10 | 控制信号 | 9 | 8 | 7 | 控制信号 | |||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||||||
| 0 | 0 | 1 | LDRI | 0 | 0 | 1 | RS_G | 0 | 0 | 1 | P1 | |||
| 0 | 1 | 0 | LDDR1 | 0 | 1 | 0 | RD_G | 0 | 1 | 0 | P2 | |||
| 0 | 1 | 1 | LDDR2 | 0 | 1 | 1 | RI_G | 0 | 1 | 1 | P3 | |||
| 1 | 0 | 0 | LDIR | 1 | 0 | 0 | 299_G | 1 | 0 | 0 | P4 | |||
| 1 | 0 | 1 | LOAD | 1 | 0 | 1 | ALU_G | 1 | 0 | 1 | AR | |||
| 1 | 1 | 0 | LDAR | 1 | 1 | 0 | PC_G | 1 | 1 | 0 | LDPC | |||
| M17 | M16 | 控制信号 | ||||||||||||
| 0 | 0 | Y0 | ||||||||||||
| 0 | 1 | Y1 | ||||||||||||
| 1 | 0 | Y2 | ||||||||||||
| 1 | 1 | Y3 | ||||||||||||
1、 图1-17几条机器指令对应的参考微程序流程图,将全部微程序按微指令格式变成二进制代码,可得到表1-5的二进制代码表。
表1-5 微程序时序控制实验二进制代码表
| 微地址 | S3 S2 S1 S0 M CN | RD | M17 | M16 | A | B | P | uA5 uA4 uA3 uA2 uA1uA0 | ||||||||||||||||
| 0 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
| 0 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
| 0 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 |
| 0 3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
| 0 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |
| 0 5 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 |
| 0 6 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
| 0 7 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 |
| 1 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
| 1 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
| 1 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 |
| 1 3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 0 |
| 1 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 0 |
| 1 5 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
| 1 6 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
| 1 7 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 1 |
| 2 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 |
| 2 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 |
| 2 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 1 |
| 2 3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
| 2 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 |
| 2 5 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
| 2 6 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
| 2 7 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
| 3 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 |
其中uA5一uA0为6位的后续微地址,A、B、P为三个译码字段,分别由三个控制位译码出多位。P字段中的Pl一P4是四个测试字位。其功能是根据机器指令及相应微代码进行译码,使微程序转入相应的微地址入口,从而实现微程序的顺序、分支、循环运行。AR为算术运算是否影响进位及判零标志控制位,其为零有效。B字段中的RS_G、RD_G、RI_G分别为源寄存器选通信号、目的寄存器选通信号及变址寄存器选通信号,其功能是根据机器指令来进行三个工作寄存器R0、R1及R2的选通译码。
2、 按图1-18接实验线路,仔细检查无误后接通电源。(图中箭头表示需要接线的地方,接控制信号时要注意各信号一一对应,可用彩排线的颜色来进行区分)
3、 观察微程序控制器的工作原理:
(1)编程
A、将控制台单元的编程开关SP06设置为WRITE(编程)状态。
B、将实验板上“信号源单元”中的“SP03”设置为“STEP”,“SP04”设置为“RUN”状态。SWITCH UNIT的开关CLR置为高电平。
C、用开关单元的二进制模拟开关设置微地址UA5—UA0。
D、在微控制器单元的开关SM24—SM01上设置微代码,24位开关对应24位显示灯,开关量为“1”时灯亮,开关量为“0”时灯灭。
E、启动时序电路(按动控制台单元 的“START” 触动开关),即将微代码写入到E2PR0M 28C16的相应地址对应的单元中。
F、重复C—E步骤,将表1-5的微代码写入28C16。
(2)校验
A、 将控制台单元的编程开关SP06设置为READ(校验)状态。
B、 将实验板“信号源单元”中的“SP03”开关设置为“STEP”状态,“SP04”开关设置为“RUN”状态。
C、 用开关单元的二进制开关设置要检验的微地址UA5—UA0。
D、 按动控制台单元的“START” 触动开关,启动时序电路,读出微代码,观察微控制器单元的显示灯LM24-LM01的状态(灯亮为“1”,灭为“0”),检查读出的微代码是否与写入的相同。如果不同,则将开关置于“WRITE”编程状态,重新执行(1)即可。
图1-17 微程序流程图
(3)单步运行
A、 将控制台单元的编程开关SP06置于“RUN(运行)”状态。
B、 将实验板“信号源单元”中的“SP03”开关设置为“STEP”状态,“SP04”开关设置为“RUN”状态。
C、 操作开关单元的CLR开关,使CLR信号状态依次为1→0→1,将微地址寄存器74LS74(1)—74LS74(3)清零,从而明确本机的运行入口微地址为000000(二进制)。
D、 按动控制台单元 的“START”触动开关,启动时序电路,则每按动一次“START”键,读出一条微指令后停机,此时实验台上的微地址显示灯和微命令显示灯将显示所读出的一条指令。
注:在当前条件下,将微控制器单元的SE6—SE1接至开关单元中的UA5-UA0对应二进制开关上,可通过强置端SE6—SE1人为设置分支地址。首先将SE6—SE1对应二进制开关设置为“1”,当需要人为设置分支地址时,将需要改变的某个或几个二进制开关设置“0”,相应的微地址位即被强置为“1”,从而改变下一条微指令的地址。(二进制开关设置为“0”,相应的微地址位将被强置为“1”)
六、实验报告
1、图示微指令格式;
2、写出自己编写的微程序;
3、记录实验过程,主要写遇到的问题及排除的方法。
七、实验思考题
1、比较微程序控制器和组合逻辑控制器各有什么优缺点?
2、什么叫指令?什么叫微指令?二者有什么关系?
1.9 硬布线控制器设计实验
一、实验目的
1、掌握硬布线控制器的设计原理。
2、掌握如何使用大规模可编程器件完成硬布线控制器的设计。
二、实验设备
1、ZY15CompSys12BB计算机组成原理及系统结构实验箱 一台
2、排线 若干
3、PC机 一台
三、实验内容
观察阅读用VHDL语言实现的硬布线的程序,读懂程序,了解工作原理。
四、实验原理
(1) 硬布线控制器的设计原理
计算机控制器有两种实现方法:1、硬布线控制器 (也称组合逻辑控制器) 2、微程序控制器。设计硬布线控制器是根据实现各指令功能所需控制命令的相应逻辑条件及时序,来组成各个控制命令的逻辑表达式,然后由各种不同的逻辑电路来实现它,构成逻辑控制部件。
下图1-19示出了硬布线控制器的结构框图。硬布线控制器的输入信号主要来源有:指令译码器的输出、时序单元的时序信号(包括节拍电位信号和节拍脉冲信号)。输出的信号控制各指令所对应的微操作。即微控制信号是指令操作码译码器输出、时序信号、反馈信号的函数。(为了00简单明了,在此没有加入反馈信号)
图1-19 组合逻辑控制器结构框图
(2) 用CPLD器件实现硬布线控制器
随着大规模可编程器件的发展,用大规模集成电路可编程阵列来实现控制逻辑功能,具有简便和灵活的优点。实验箱上选用了ALTERA公司的EPM7128芯片,它具有在系统可编程功能,可以随时进行逻辑重构和修改。实验箱采用MAX+PLUSⅡ软件来对可编程器件EPM7128进行编程下载。该软件支持原理图和硬件描述语言输入方式,并可对所设计的电路进行功能时序仿真。详细MAX+PLUSⅡ软机介绍请参阅附录3。本节与微程序控制器一样设计了同样的五条指令,CPU流程图如下图:
根据指令流程图设计了一套指令系统表1-6。该指令系统采用图1-13所示的时钟信号,可以得出图1-20所示的周期流程图。
表1-6 组合逻辑控制器实验指令系统表
| 助记符 | I7 I6 I5 I4 | I3 I2 | I1 I0 |
| IN | 0 0 0 0 | ||
| ADD | 0 0 0 1 | ||
| STA | 0 0 1 0 | ||
| OUT | 0 0 1 1 | ||
| JMP | 0 1 0 0 |
图1-20 硬布线控制器指令流程图
本实验系统提供的例程见光盘所对应的硬布线控制器实验程序,在“CPLD”文件夹中“PROG1”。
五、实验步骤
1、在MAX+PLUSⅡ软件环境中打开“PROG1.VHD”程序。
2、用MAX+PLUSⅡ软件,选择器件EPM7128SLC-15,编译上述的程序。
3、参照表1-7分配管脚并编译锁定管脚。
表1-7 硬布线控制器管脚分配表
| 微控制信号 | EPM7128芯片管脚号 |
| LDDR1,LDDR2,CN,M,S0,S1,S2,S3 | 4,5,6,8,9,10,11,12 |
| I0,I1,I2,I3,I4,I5,I6,I7 | 15,16,17,18,20,21,22,24 |
| PC_G,LDAR,LOAD,LDPC | 25,27,28,29 |
| SW_G,LED_G,ALU_G,LDR0, R0_G, LDIR | 30,31,33,34,37,48 |
| WE_R,CE_R,CLOCK,CLR | 49,50,51,84 |
| T1,T2,T3,T4 | 77,79,80,81 |
5、得到对应的CPLD程序顶层图如下图1-21所示。(下图是在MAX+PLUSⅡ中将PROG1.GDF原理图生成符号文件而产生的)
图1-21硬布线控制器顶层图
六、实验报告
按照实验报告的格式要求填写实验报告,并总结实验收获。
七、思考题
1、计算机控制器有哪两种实现方法?
2、硬布线控制器的设计思路是什么?
第二部分 综合实验
2.1基本模型机实验
一、实验目的
1、 在“微程序控制器的组成与微程序设计实验”的基础上,将第一部分中的各单元组成系统,构造一台基本模型计算机。
2、 本实验定义五条机器指令,编写相应的微程序,并上机调试运行,形成整机概念。
二、实验内容
根据模型机的指令系统,编写相应的微程序,并上机调试运行,观察并记录结果。
三、实验仪器
1、ZY15CompSys12BB计算机组成原理及系统结构教学实验箱 一台
2、排线 若干
3、PC机 一台
四、实验原理
在第一部分的单元实验中,所有的控制信号是人为用开关单元产生的,但是在实际的CPU中,所有的控制信号都是由CPU自动产生的。所以在本次实验中我们用微程序来控制,自动产生各部件单元控制信号,实现特定指令的功能。这里,计算机数据通路的控制将由微程序控制器来完成,CPU从内存中取出一条机器指令到指令执行结束的一个指令周期全部由微指令组成的序列来完成,即一条机器指令对应一段微程序。
本实验设计了五条机器指令,其指令格式如下:
助记符 机器指令码 说明
IN 00000000 ;输入,“INPUT”设备中的开关状态→R0
ADD addr 00010000 XXXXXXXX ;二进制加法,R0+[addr]→R0
STA addr 00100000 XXXXXXXX ;存数,R0→[addr]
OUT addr 00110000 XXXXXXXX ;输出,[addr]→BUS
JMP addr 01000000 XXXXXXXX ;无条件转移,addr→PC
机器指令码的前4位为操作码。其中IN为单字长,其余为双字长指令,XXXXXXXX为addr对应的二进制地址码。
为了向RAM中装入程序和数据,检查写入是否正确,并能启动程序执行,还必须设计三个控制台操作微程序。
存储器读操作(READ):拨动总清开关CLR后,控制台开关SWB、SWA为“00”时,按START微动开关,可对RAM连续手动读操作。
存储器写操作(WRITE):拨动总清开关CLR后,控制台开关SWB、SWA设置为“01”时,按START微动开关可对RAM进行连续手动写入。
启动程序(RUN):拨动总清开关CLR后,控制台开关SWB、SWA设置为“11”时,按START微动开关,即可转入到第01号“取址”微指令,启动程序运行。
上述三条控制台指令用两个开关SWB、SWA的状态来设置,其定义如下:
| SWB | SWA | 控制台命令 |
| 0 | 0 | 读内存(READ) |
| 0 | 1 | 写内存(WRITE) |
| 1 | 1 | 启动程序运行(RUN) |
图2-l 数据通路框图
表2-1 基本模型机微指令结构图
| 微程序 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
| 控制信号 | S3 | S2 | S1 | S0 | M | CN | RD | M17 | M16 | A | B | P | uA5 | uA4 | uA3 | uA2 | uA1 | uA0 | ||||||
| A字段 | B字段 | P字段 | |||||||||
| 15 | 14 | 13 | 控制信号 | 12 | 11 | 10 | 控制信号 | 9 | 8 | 7 | 控制信号 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |||
| 0 | 0 | 1 | LDRI | 0 | 0 | 1 | RS_G | 0 | 0 | 1 | P1 |
| 0 | 1 | 0 | LDDR1 | 0 | 1 | 0 | 0 | 1 | 0 | ||
| 0 | 1 | 1 | LDDR2 | 0 | 1 | 1 | 0 | 1 | 1 | ||
| 1 | 0 | 0 | LDIR | 1 | 0 | 0 | 1 | 0 | 0 | P4 | |
| 1 | 0 | 1 | LOAD | 1 | 0 | 1 | ALU_G | 1 | 0 | 1 | |
| 1 | 1 | 0 | LDAR | 1 | 1 | 0 | PC_G | 1 | 1 | 0 | LDPC |
控制台操作为P4测试,它以控制台开关SWB、SWA作为测试条件,出现了3路分支,占用3个固定微地址单元。当分支微地址单元固定后,剩下的其它地方就可以一条微指令占用一个微地址单元随意填写。
当全部微程序设计完毕后,应将每条微指令代码化,表2-2即为将图2-2的微程序流程图按微指令格式转化而成的“二进制微代码表”。
表2-2 二进制代码表
| 微地址 | S3 S2 S1 S0 M CN | RD | M17 | M16 | A | B | P | uA5 uA4 uA3 uA2 uA1uA0 | ||||||||||||||||
| 0 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
| 0 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
| 0 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 |
| 0 3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
| 0 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |
| 0 5 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 |
| 0 6 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
| 0 7 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 |
| 1 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
| 1 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
| 1 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 |
| 1 3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 0 |
| 1 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 0 |
| 1 5 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
| 1 6 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
| 1 7 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 1 |
| 2 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 |
| 2 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 |
| 2 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 1 |
| 2 3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
| 2 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 |
| 2 5 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
| 2 6 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
| 2 7 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
| 3 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 |
图2-2 微程序流程图
五、实验步骤
1、根据该模型机的指令系统,编写一段程序。这里给出两个参考程序。
参考程序一:
本程序从输入设备(数码开关)取入数据,保存在内存单元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数码管)进行显示。本程序不断地循环运行,在运行中可改变输入开关的值,观察输出显示的变化。
设计机器指令程序如下(机器码和地址为十六进制数据)。
地 址 内 容 助记符 说 明
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、按图2-3连接实验线路(图中箭头表示需要接线的地方,接总线和控制信号时要注意高低位一一对应,可用彩排线的颜色来进行区分)。
3、写程序
对于本实验箱可以用两种方法来写入程序。
方法一:联机读/写程序
按照规定格式,将机器指令及表2-2微指令二进制表编辑成十六进制的规定格式文件。微指令格式中的微指令代码为将表2-2中的24位微代码按从左到右分成3个8位,将此三个8位二进制代码化为相应的十六进制数即可。
使用联机软件的文件装载将实验程序和微程序下载到实验箱中,并用软件的读出功能进行检查。其中参考程序一对应的文件名为“基本模型机1、TXT”,参考程序二对应的文件名为“基本模型机2、TXT”(联机软件的使用方法参看附录2)。
方法二:手动写入
(1)先将机器指令对应的微代码正确地写入28C16中,由于在实验1.8微程序控制器的组成与微程序设计实验中已将微代码写入E2PR0M芯片中,对照表2-2校验正确后就可使用。
(2)使用控制台WRITE和READ微程序进行机器指令程序的装入和检查,其操作如下:
A、 使信号源单元单元的SP03为“STEP”状态,SP04为“RUN”状态,控制台的开关SP05处于“NORM”状态,开关SP06处于“RUN” 状态。
B、拨动开关单元的总清开关CLR(101),微地址寄存器清零,程序计数器清零。然后使开关单元的SWB、SWA开关设置为“01”,按动一次控制台单元的触动开关START,微地址显示灯显示“010001”,再按动一次START,微地址灯显示“010100”,此时数据开关的内容(输入单元)置为要写入的机器指令的内容,按动两次START键后,即完成该条指令的写入。若仔细阅读WRITE的流程,就不难发现,机器指令的首地址总清后为零,以后每个循环PC会自动加1。所以,每次按动START,只有在微地址灯显示“010100”时,才设置内容,直到所有机器指令写完。
C、校验。拨动开关单元的总清开关CLR(101),微地址清零。PC程序计数器清零,然后使开关单元的开关SWB、SWA为“00”,按动控制台单元的触动开关START,微地址灯将显示“010000”,再按START,微地址灯显示为“010010”,第三次按START,微地址灯显示为“010111”,再按START后,此时输出单元的数码管显示为该首地址中的内容。不断按动START,以后每个循环PC会自动加1,可检查后续单元内容。每次在微地址灯显示为“010000”时,是将当前地址中的机器指令写入到输出设备中显示。
参考程序一的机器指令:
$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
图2-3 基本模型机实验接线图
4、运行程序
方法一:联机运行程序
首先使各个开关的状态为:信号源单元中的SP03开关设置为“STEP”状态,SP04开关设置为“RUN”状态;控制台单元的开关SP05处于“NORM”状态, SP06处于“RUN” 状态;开关单元的开关SWB、SWA为“11”。
使开关单元的总清开关CLR(101)清零后,程序首址为00H。通过联机软件进入调试界面(其操作方法参见附录2系统联机操作软件说明),可以通过调试程序的操作界面控制程序的运行,同时观察运行过程和结果。
方法二:手动运行程序
(1)单步运行程序
A、使控制台单元的开关SP05处于“NORM”状态, SP06处于“RUN”状态,信号源单元中的SP03为“STEP”状态,SP04为“RUN”状态,开关单元的开关SWB、SWA为“11”。
B、拨动开关单元的总清开关CLR(101),微地址清零,程序计数器清零,程序首址为00H。
C、单步运行微指令,每按动一次控制台单元的START触动开关,即单步运行一条微指令。对照微程序流程图2-2,观察微地址显示灯MA5-MA0是否和流程一致。
D、当运行结束后,可检查运行结果是否和理论值一致。如果运行结果保存在RAM的某一个单元中,则可以使用手动写入中的校验方法将其读出。
(2)连续运行程序
A、使控制台单元的开关SP05处于“NORM”状态, SP06处于“RUN”状态,信号源单元中的SP03为“RUN”状态,SP04为“RUN”状态,开关单元的开关SWB、SWA为“11”。
B、拨动开关单元的总清开关CLR(101),微地址及程序计数器清零,然后按动控制台单元的START触动开关,系统连续运行程序,稍后将信号源单元中的SP04拨至“STOP”时,系统停机。
C、停机后,可检查运行结果是否正确。如果运行结果保存在RAM的某一个单元中,则可以使用手动写入中的校验方法将其读出。
六、实验报告
1、将实验中观察到数据列表记录;
2、值得讨论的其他问题。
七、实验思考题
1、机器指令包括哪两个基本要素?微指令又包括哪两个基本要素?程序靠什么实现顺序执行?靠什么实现转移?微程序中顺序执行和转移靠什么方法?
2.2移位运算模型机实验
一、实验目的
1、熟悉由微程序控制器控制模型机的数据通路的方法。
2、学习设计与调试计算机的基本步骤及方法。
二、实验内容
编写程序,运行程序,观察并记录运行结果。
三、实验仪器
1、ZY15CompSys12BB计算机组成原理及系统结构教学实验箱 一台
2、排线 若干
3、PC机 一台
四、实验原理
本实验在实验2.1基本模型机实验的基础上搭接移位控制电路,实现移位控制运算。
本实验中新增4条单字长移位运算指令,其指令格式如下:
助记符 机器指令码 说明
RR 01010000 ;右环移,将R0中的数右环移
RRC 01100000 ;带进位右环移,将R0中的数带上进位右环移
RL 01ll0000 ;左环移,将R0中的数左环移
RLC 10000000 ;带进位左环移,将R0中的数带上进位左环移
本实验微指令格式如下:
| 微程序 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
| 控制信号 | S3 | S2 | S1 | S0 | M | CN | RD | M17 | M16 | A | B | P | uA5 | uA4 | uA3 | uA2 | uA1 | uA0 | ||||||
| A字段 | B字段 | P字段 | |||||||||
| 15 | 14 | 13 | 控制信号 | 12 | 11 | 10 | 控制信号 | 9 | 8 | 7 | 控制信号 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |||
| 0 | 0 | 1 | LDRI | 0 | 0 | 1 | RS_G | 0 | 0 | 1 | P1 |
| 0 | 1 | 0 | LDDR1 | 0 | 1 | 0 | 0 | 1 | 0 | ||
| 0 | 1 | 1 | LDDR2 | 0 | 1 | 1 | 0 | 1 | 1 | ||
| 1 | 0 | 0 | LDIR | 1 | 0 | 0 | 299_G | 1 | 0 | 0 | P4 |
| 1 | 0 | 1 | LOAD | 1 | 0 | 1 | ALU_G | 1 | 0 | 1 | |
| 1 | 1 | 0 | LDAR | 1 | 1 | 0 | PC_G | 1 | 1 | 0 | LDPC |
根据以上新增指令,编写微程序流程图并确定微地址(见图2-5)
五、实验步骤
1、结合以上的指令系统,编写一段程序。这里给出一个参考程序。该程序采集数据输入开关两次,分别进行左、右移位一次后再相加,其结果送到输出设备显示。实验的机器指令程序如下:
地 址 内 容 助记符 说 明
00 00 IN ;输入开关数据→R0,第一次采集数据(设输入数据40H)01 80 RLC ;R0带进位左循环移位一次
02 20 STA [0EH] ;R0 [0EH]
03 0E ;地址
04 00 IN ;输入开关数据R0,第二次采集数据(设输入数据40H)
05 60 RRC ;R0带进位右循环移位一次
06 10 ADD [0EH] ;R0+[0EH] R0,R0与0EH单元数据相加
07 0E ;地址
08 20 STA [0FH] ;R0 [0FH]
09 0F ;地址
0A 30 OUT [0FH] ;[0FH]BUS,输出显示
0B 0F ;地址
0C 40 JMP [00H] ;00HPC,循环运行
0D 00 ;地址
0E XX ;保存中间结果
0F XX ;最后结果保存在0F单元,并送到输出单元显示
问题:
(1)如果输入开关设置为40H,程序运行一次循环后,在输出单元显示的结果是什么?
(2)如果把输入开关设置为08H,输出单元显示的结果是什么?
将微代码流程图代码化。本实验给出将微程序二进制代码转化成十六进制格式文件。机器指令及微程序按照规定格式编写成十六进制格式文件,具体内容如下:
程 序
$P0000 $P0180 $P0220
$P030E $P0400 $P0560
$P0610 $P070E $P0820
$P090F $P0A30 $P0B0F
$P0C40 $P0D00
微程序
$M00018108 $M0101ED82 $M0200C050
$M0300E004 $M0400B005 $M0501A206
$M06959A01 $M0700E00F $M0801ED8A
$M0901ED8C $M0A00A00E $M0B018001
$M0C00200D $M0D068A09 $M0E070A08
$M0F028201 $M10001001 $M1D21881E
$M1E019801 $M1F298820 $M20019801
$M21118822 $M22019801 $M23198824
$M24019801 $M1101ED83 $M1201ED87
$M1301ED99 $M1401ED9C $M1531821D
$M1631821F $M17318221 $M18318223
$M1900E01A $M1A00A01B $M1B070A01
$M1C00D181
图2-4 带移位模型机的数据通路
2、按图2-6连接实验线路,仔细查线无误后接通电源。(图中箭头表示需要接线的地方,接总线和控制信号时要注意高低位一一对应,可用彩排线的颜色来进行区分)。
3、写程序
对于本实验箱可以用两种方法来写入程序。
方法一:联机读/写程序
按照规定格式,将机器指令及微指令编辑成十六进制的规定格式文件,已经在前面列出。
使用联机软件的文件装载将实验程序和微程序下载到实验箱中,并用软件的读出功能进行检查。本实验参考程序对应的文件名为“移位运算模型机.TXT”(联机软件的使用方法参看附录2)。
方法二:手动写入
(1)先将机器指令对应的微代码正确地写入28C16中,可以参照实验1.8“微程序控制器的组成与微程序设计实验”中微代码的写入方法,将本实验对应的微代码写入E2PR0M芯片中,对照前面的微程序内容校验正确后就可使用。
(2)使用控制台WRITE和READ微程序进行机器指令程序的装入和检查,其操作如下:
A、 使信号源单元单元的SP03为“STEP”状态,SP04为“RUN”状态,控制台单元的开关SP05处于“NORM”状态,开关SP06处于“RUN” 状态。
B、 拨动开关单元的总清开关CLR(101),微地址寄存器清零,程序计数器清零。然后使开关单元的SWB、SWA开关设置为“01”,按动一次控制台单元的触动开关START,微地址显示灯显示“001001”,再按动一次START,微地址灯显示“001100”,此时数据开关的内容置为要写入的机器指令,按动两次START键后,即完成该条指令的写入。若仔细阅读WRITE的流程,就不难发现,机器指令的首地址总清后为零,以后每个循环PC会自动加1。所以,每次按动START,只有在微地址灯显示“001100”时,才设置内容,直到所有机器指令写完。
图2-5 移位机微程序流程图
图2-6 移位运算模型机实验接线图
C、 校验。拨动开关单元的总清开关CLR(101),微地址清零。PC程序计数器清零,然后使开关单元的开关SWB、SWA为“00”,按动控制台单元的触动开关START,微地址灯将显示“001000”,再按START,微地址灯显示为“001010”,第三次按START,微地址灯显示为“001110”,再按START后,此时输出单元的数码管显示为该首地址中的内容。不断按动START,以后每个循环PC会自动加1,可检查后续单元内容。每次在微地址灯显示为“001000”时,是将当前地址中的机器指令写入到输出设备中显示。
4、 运行程序
方法一:联机运行程序
首先使各个开关的状态为:信号源单元中的SP03开关设置为“STEP”状态,SP04开关设置为“RUN”状态;控制台单元的开关SP05处于“NORM”状态, SP06处于“RUN” 状态;开关单元的开关SWB、SWA为“11”。
使开关单元的总清开关CLR(101)清零后,程序首址为00H。通过联机软件进入调试界面(其操作方法参见附录2系统联机操作软件说明),可以通过调试程序的操作界面控制程序的运行,同时观察运行过程和结果。
方法二:手动运行程序
(1)单步运行程序
A、 使控制台单元的开关SP05处于“NORM”状态, SP06处于“RUN”状态,信号源单元中的SP03为“STEP”状态,SP04为“RUN”状态,开关单元的开关SWB、SWA为“11”。
B、 拨动开关单元的总清开关CLR(101),微地址清零,程序计数器清零,程序首址为00H。
C、 单步运行微指令,每按动一次控制台单元的START触动开关,即单步运行一条微指令。对照微程序流程图2-5,观察微地址显示灯MA5-MA0是否和流程一致。
D、 当运行结束后,可检查运行结果是否和理论值一致。如果运行结果保存在RAM的某一个单元中,则可以使用手动写入中的校验方法将其读出。
(2)连续运行程序
A、 使控制台单元的开关SP05处于“NORM”状态, SP06处于“RUN”状态,信号源单元中的SP03为“RUN”状态,SP04为“RUN”状态,开关单元的开关SWB、SWA为“11”。
B、 拨动开关单元的总清开关CLR(101),微地址及程序计数器清零,然后按动控制台单元的START触动开关,系统连续运行程序,稍后将信号源单元中的SP04拨至“STOP”时,系统停机。
C、 停机后,可检查运行结果是否正确。如果运行结果保存在RAM的某一个单元中,则可以使用手动写入中的校验方法将其读出。
六、实验报告
1、将实验中观察到数据列表记录;
2、值得讨论的其他问题。
七、实验思考题
实验步骤1的两个思考问题:
1、如果输入开关设置为40H,程序运行一次循环后,在输出单元显示的结果是什么?
2、如果把输入开关设置为08H,输出单元显示的结果是什么?
2.3复杂模型机实验
一、实验目的
综合运用所学计算机原理知识,设计并实现较为完整的模型计算机。
二、实验内容
根据复杂模型机的指令系统,编写实验程序,并运行程序,观察和记录运行结果。
三、预备知识
1、 数据格式
模型机规定采用定点补码表示法表示数据,且字长为8位,其格式如下:
| 数据位数 | D7 | D6 D5 D4 D3 D2 D1 D0 |
| 用途 | 符号 | 尾数 |
2、 指令格式
模型机设计四大类指令共十六条,其中包括算术逻辑指令、I/O指令、访问存储器、转移指令和停机指令。
(1)算术逻辑指令
设计9条算术逻辑指令并用单字节表示,寻址方式采用寄存器直接寻址,其格式如下:
| 数据位数 | D7 D6 D5 D4 | D3 D2 | D1 D0 |
| 用途 | 操作码(OP-CODE) | 源寄存器(RS) | 目的寄存器(RD) |
| 选中的寄存器(RS或RD) | R0 | R1 | R2 |
| 寄存器的编码 | 00 | 01 | 10 |
算术逻辑指令的名称、功能和具体格式见表2—3。
(2)访存指令及转移指令
模型机设计2条访存指令,即存数(STA)、取数(LD),2条转移指令,即无条件转移(JMP)、结果为零或有进位转移指令(BZC),指令格式为:
| 数据位数 | D7 D6 | D5 D4 | D3 D2 | D1 D0 | D7……D0 |
| 用途 | 00 | 寻址模式M | 操作码OP-CODE | 目的寄存器编码RD | 位移量D |
| 寻址模式M | 有效地址E | 说明 |
| 00 | D | 直接寻址 |
| 01 | (D) | 间接寻址 |
| 10 | (RI)+D | RI变址寻址 |
| 11 | (PC)+D | 相对寻址 |
(3)I/O指令
输入(IN)和输出(OUT)指令采用单字节指令,其格式如下:
| 数据位数 | D7 D6 D5 D4 | D3 D2 | D1 D0 |
| 用途 | 操作码(OP-CODE) | 地址(addr) | 目的寄存器(RD) |
(4)停机指令
指令格式如下:
| 数据位数 | D7 D6 D5 D4 | D3 D2 | D1 D0 |
| 值 | 0110 | 00 | 00 |
3、 指令系统
复杂模型机共有16条基本指令,其中算术逻辑指令7条,访问内存指令和程序控制指令4条,输入输出指令2条,其它指令1条。表2-3列出了各条指令的格式、汇编符号、指令功能。
表2-3 复杂模型机指令系统
| 助记符 | 指令格式 | 指令长度(字节数) | 指令功能 | |
| 第一字节 | 第二字节 | |||
| CLR rd | 01 11 00 rd | 无 | 1 | 0→RD |
| MOV rs,rd | 10 00 rs rd | 无 | 1 | RS→RD |
| ADC rs,rd | 10 01 rs rd | 无 | 1 | RS + RD + cy →RD |
| SBC rs,rd | 10 10 rs rd | 无 | 1 | RS - RD - cy →RD |
| INC rd | 10 11××rd | 无 | 1 | RD + 1→RD |
| AND rs,rd | 11 00 rs rd | 无 | 1 | RS ^ RD →RD |
| COM rd | 11 01××rd | 无 | 1 | →RD |
| RRC rs,rd | 11 10 rs rd | 无 | 1 | RS带进位循环右移一位,然后RS→RD |
| RLC rs,rd | 11 11 rs rd | 无 | 1 | RS带进位循环左移一位,然后RS→RD |
| LAD M,D,rd | 00 M 00 rd | D | 2 | 有效数据E →RD |
| STA M,D,rd | 00 M 01 rd | D | 2 | RD→有效地址E |
| JMP M,D | 00 M 10 00 | D | 2 | 有效数据E→PC |
| BZC M,D | 00 M 11 rd | D | 2 | 当CY=1或ZI=1时,有效数据E→PC |
| IN rd | 01 00 01 rd | 无 | 1 | 输入单元的数据→RD |
| OUT rd | 01 01 10 rd | 无 | 1 | RD→输出单元 |
| HALT | 01 10 00 00 | 无 | 1 | 停机 |
1、ZY15CompSys12BB计算机组成原理及系统结构教学实验系统 一台
2、排线 若干
3、PC机 一台
五、实验原理
复杂模型机的数据通路框图如图2-7。根据机器指令系统要求,设计微程序流程图及确定微地址,如图2-8。
图2-7 复杂模型机数据通路框图
按照系统建议的微指令格式,参照微指令流程图,将每条微指令代码化,译成二进制代码表,并将二进制代码表转换为联机操作时的十六进制格式文件。
| 微程序 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
| 控制信号 | S3 | S2 | S1 | S0 | M | CN | RD | M17 | M16 | A | B | P | uA5 | uA4 | uA3 | uA2 | uA1 | uA0 | ||||||
| A字段 | B字段 | P字段 | |||||||||
| 15 | 14 | 13 | 控制信号 | 12 | 11 | 10 | 控制信号 | 9 | 8 | 7 | 控制信号 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |||
| 0 | 0 | 1 | LDRI | 0 | 0 | 1 | RS_G | 0 | 0 | 1 | P1 |
| 0 | 1 | 0 | LDDR1 | 0 | 1 | 0 | RD_G | 0 | 1 | 0 | P2 |
| 0 | 1 | 1 | LDDR2 | 0 | 1 | 1 | RI_G | 0 | 1 | 1 | P3 |
| 1 | 0 | 0 | LDIR | 1 | 0 | 0 | 299_G | 1 | 0 | 0 | P4 |
| 1 | 0 | 1 | LOAD | 1 | 0 | 1 | ALU_G | 1 | 0 | 1 | AR |
| 1 | 1 | 0 | LDAR | 1 | 1 | 0 | PC_G | 1 | 1 | 0 | LDPC |
本次实验中连线工作量较大,务必仔细,仔细检查接线是否正确,以免信号线接错导致控制出错,影响实验的进度。
七、实验步骤
1、根据复杂模型机的指令系统,编写实验程序。
实验例程如下:
本实验完全使用寄存器操作。程序首先从数据输入开关采集数据放入R0中,经循环左移两次放入R1中。然后再次从数据输入开关采集数据放入R0中,经循环右移一次与R1中的数据相加,其结果送到R1中,然后判断加法的结果是否有进位或为全零,若是就循环运行,否则,输出结果到数码管上显示。实验的机器指令程序如下:
地址 内容 助记符 说 明
00 44 IN R0 ;输入数据R0,第一次采集数据(设输入数据为
14H)
01 F0 RLC R0, R0 ;R0带进位左循环移位一次
02 F1 RLC R0, R1 ;第二次左移后保存到R1中
03 44 IN R0 ;输入开关数据R0,第二次采集数据(设输入数据仍为14H)
04 E0 RRC R0, R0 ;R0带进位右循环移位一次
05 91 ADC R0, R1 ;两数据相加
06 0C BZC 00 ;若有进位或结果为零,则跳到00地址单元
07 00
08 59 OUT R1 ;R1 输出单元 显示;
09 60 HALT ;停机
以上程序的机器指令如下:
$P0044 $P01F0 $P02F1
$P0344 $P04E0 $P0591
$P060C $P0700 $P0859
$P0960
微程序
$M00018108 $M0101ED82 $M0200C050
$M0300A004 $M0400E0A0 $M0500E006
$M0600A007 $M0700E0A0 $M0801ED8A
$M0901ED8C $M0A00A03B $M0B018001
$M0C00203C $M0D00A00E $M0E01B60F
$M0F95EA25 $M1001ED83 $M1101ED85
$M1201ED8D $M1301EDA6 $M14001001
$M15030401 $M16018016 $M173D9A01
$M18019201 $M1901A22A $M1A01B22C
$M1B01A232 $M1C01A233 $M1D01A236
$M1E318237 $M1F318239 $M20009001
$M21028401 $M2205DB81 $M230180E4
$M24018001 $M2595AAA0 $M2600A027
$M2701BC28 $M25EA29 $M2995AAA0
$M2A01B42B $M2B959B41 $M2C01A42D
$M2D05AB6E $M2E0DAA2F $M2F01AA30
$M300D8171 $M31959B41 $M32019A01
$M3301B435 $M3405DB81 $M35B99B41
$M360D9A01 $M37298838 $M38019801
$M3919883A $M3A019801 $M3B070A08
$M3C068A09
2、按图2-9连接实验线路,仔细检查线路无误后接通电源。(图中箭头表示需要接线的地方,接总线和控制信号时要注意高低位一一对应,可用彩排线的颜色来进行区分)
3、写程序
对于本实验箱可以用两种方法来写入程序。
方法一:联机读/写程序
按照规定格式,将机器指令及微指令编辑成十六进制的规定格式文件,已经在前面列出。
使用联机软件的文件装载将实验程序和微程序下载到实验箱中,并用软件的读出功能进行检查。本实验参考程序对应的文件名为“复杂模型机.TXT”(联机软件的使用方法参看附录2)。
方法二:手动写入
(1)先将机器指令对应的微代码正确地写入28C16中,可以参照实验1.8微程序控制器的组成与微程序设计实验中微代码的写入方法,将本实验对应的微代码写入E2PR0M芯片中,对照前面的微程序内容校验正确后就可使用。
(2)使用控制台WRITE和READ微程序进行机器指令程序的手动装入和检查,其操作如下:
A、使信号源单元单元的SP03为“STEP”状态,SP04为“RUN”状态,控制台单元的开关SP05处于“NORM”状态,开关SP06处于“RUN” 状态。
B、拨动开关单元的总清开关CLR(101),微地址寄存器清零,程序计数器清零。然后使开关单元的SWB、SWA开关设置为“01”,按动一次控制台单元的触动开关START,微地址显示灯显示“001001”,再按动一次START,微地址灯显示“001100”,此时数据开关的内容置为要写入的机器指令,按动两次START键后,即完成该条指令的写入。若仔细阅读WRITE的流程,就不难发现,机器指令的首地址总清后为零,以后每个循环PC会自动加1。所以,每次按动START,只有在微地址灯显示“001100”时,才设置内容,直到所有机器指令写完。
C、校验。拨动开关单元的总清开关CLR(101),微地址清零。PC程序计数器清零,然后使开关单元的开关SWB、SWA为“00”,按动控制台单元的触动开关START,微地址灯将显示“001000”,再按START,微地址灯显示为“001010”,第三次按START,微地址灯显示为“111011”,再按START后,此时输出单元的数码管显示为该首地址中的内容。不断按动START,以后每个循环PC会自动加1,可检查后续单元内容。每次在微地址灯显示为“001000”时,是将当前地址中的机器指令写入到输出设备中显示。
4、运行程序
方法一:联机运行程序
首先使各个开关的状态为:信号源单元中的SP03开关设置为“STEP”状态。SP04开关设置为“RUN”状态;控制台单元的开关SP05处于“NORM”状态, SP06处于“RUN” 状态;开关单元的开关SWB、SWA为“11”。
使开关单元的总清开关CLR(101)清零后,程序首址为00H。通过联机软件进入调试界面(其操作方法参见附录2系统联机操作软件说明),可以通过调试程序的操作界面控制程序的运行,同时观察运行过程和结果。
方法二:手动运行程序
(1)单步运行程序
A、使控制台单元的开关SP05处于“NORM”状态, SP06处于“RUN”状态,信号源单元中的SP03为“STEP”状态,SP04为“RUN”状态,开关单元的开关SWB、SWA为“11”。
B、拨动开关单元的总清开关CLR(101),微地址清零,程序计数器清零,程序首址为00H。
C、单步运行微指令,每按动一次控制台单元的START触动开关,即单步运行一条微指令。对照微程序流程图2-8,观察微地址显示灯MA5-MA0是否和流程一致。
图2-9 复杂模型机实验接线图
D、当运行结束后,可检查运行结果是否和理论值一致。如果运行结果保存在RAM的某一个单元中,则可以使用手动写入中的校验方法将其读出。
(2)连续运行程序
A、使控制台单元的开关SP05处于“NORM”状态, SP06处于“RUN”状态,信号源单元中的SP03为“RUN”状态,SP04为“RUN”状态,开关单元的开关SWB、SWA为“11”。
B、拨动开关单元的总清开关CLR(101),微地址及程序计数器清零,然后按动控制台单元的START触动开关,系统连续运行程序,稍后将信号源单元中的SP04拨至“STOP”时,系统停机。
C、停机后,可检查运行结果是否正确。如果运行结果保存在RAM的某一个单元中,则可以使用手动写入中的校验方法将其读出。
八、实验报告
1、将实验中观察到数据列表记录;
2、值得讨论的其他问题。
九、实验思考题
1、微程序控制器的设计步骤是什么?
2、微程序的工作原理是什么?
2.4 可重构原理计算机的组成实验
一、实验目的
学习CPLD芯片的设计方法,掌握实验线路“软连线”方法。
二、实验内容
通过联机下载程序,对CPLD芯片进行在系统可编程,完成系统的硬件功能与管脚定义。
三、实验仪器
1、ZY15CompSys12BB计算机组成原理及系统结构教学实验系统 一台
2、排线 若干
3、CPLD扩展实验板 一块
4、PC机 一台
四、实验原理
ZY15COMPSYS12BB计算机组成原理及系统结构教学实验系统提供了CPLD实验单元,配合MAXPLUSⅡ软件设计环境,可联机对CPLD芯片进行在系统可编程,完成芯片的功能设计,实现实验线路“软连线”方式。通过联机下载程序,对系统可编程,完成系统的硬件功能与管脚定义。设计者可以灵活的定义芯片的内部结构,来实现不同的功能。本实验以可重构原理计算机为例,详细介绍了设计方法与步骤。
可重构原理计算机组成的设计:
本实验使用了一片CPLD芯片,来取代算术逻辑运算单元(算术逻辑运算单元)与逻辑译码单元(逻辑译码单元)并与其它的电路结合使用。设计的步骤如下:
1、ALU(算术逻辑单元)原理图
图2-10 ALU原理图
2、逻辑译码单元的原理图
图2-11 逻辑译码单元的原理图
五、实验步骤
1、按图2-12连接实验线路,仔细检查无误后接通电源。(图中箭头表示需要接线的地方,接总线和控制信号时要注意高低位一一对应,可用彩排线的颜色来进行区分。本实验中,接线时要特别注意VCC和GND的方向,不能接反,以免烧坏芯片)
图2-12 可重构原理计算机实验接线图
2、 编译以上的文件之后,将生成PROG2.POF文件下载到EPM7128SLC84芯片。MAX+PLUS II软件的具体使用方法请参阅随机光盘中的“MAX+PLUS II操作简介”。
3、其它操作参照实验2.1基本模型机实验进行。
注意:本实验中,在程序运行之前还要对开关单元的299_G(即CPLD单元的“CLR”)清零(101)。
六、实验报告
回答思考题,总结收获。
七、实验思考题
1、可重构原理计算机的设计思路是什么?
第三部分 扩展板实验
3.1扩展8255并行口实验
一、实验目的
1、了解可编程并行接口芯片8255的基本工作原理与工作方式。
2、掌握8255的编程方法,熟悉其各种使用方法。
二、实验内容
编写程序,联机下载程序和微程序,运行这些程序,观察和记录运行结果。
三、实验仪器
1、ZY15CompSys12BB计算机组成原理及系统结构教学实验系统 一台
2、排线 若干
3、PC机 一台
四、实验原理
1、8255芯片引脚特性及外部连接
(1)8255的引脚分配图如图3-l所示
图3-1 8255芯片引脚说明
(2)外部连接说明
数据引脚D7-D0连至系统总线
引脚接至高位地址MP16、MP17译码出的一位
A0、A1引脚接至地址总线(数据总线)A0、A1
接至RD,接至WE
、A0、A1、、五个引脚的电平与8255操作关系如表3—l所示:
表3-l 8255功能表
| A1 | A0 | RD | WR | CS | 操作 |
| 读操作(输入) | |||||
| 0 | 0 | 0 | 1 | 0 | 数据总线→通道A |
| 0 | 1 | 0 | 1 | 0 | 数据总线→通道B |
| 1 | 0 | 0 | 1 | 0 | 数据总线→通道C |
| 写操作(输出) | |||||
| 0 | 0 | 1 | 0 | 0 | 数据总线→通道A |
| 0 | 1 | 1 | 0 | 0 | 数据总线→通道B |
| 1 | 0 | 1 | 0 | 0 | 数据总线→通道C |
| 1 | 1 | 1 | 0 | 0 | 数据总线→控制字寄存器 |
| 断开功能 | |||||
| X | X | X | X | 1 | 数据总线→三态 |
| 1 | 1 | 0 | 1 | 0 | 非法条件 |
| X | X | 1 | 1 | 0 | 数据总线→三态 |
(1)端口读指令
助记符 CIN D,R0
指令格式
| 1 1 1 0 | RI | |
| D | ||
(2)端口写指令
助记符 COUT Ri, D
指令格式
| 1 1 1 1 | RI | |
| D | ||
3、两条指令的微程序流程可设计为:
根据以上的微程序流程图编写微程序,见表3-2。
表3-2 新增微指令表
| 微地址 | S3∽CN | RD | M17 M16 | A | B | P | uA5∽uA0 | 16进制代码 |
| 36 | 0 0 0 0 0 0 | 0 | 1 1 | 1 1 0 | 1 1 0 | 1 1 0 | 1 1 0 1 1 1 | 01EDB7 |
| 37 | 0 0 0 0 0 0 | 0 | 1 1 | 1 1 0 | 1 1 0 | 1 1 0 | 1 1 1 0 0 1 | 01EDB9 |
| 67 | 0 0 0 0 0 0 | 0 | 0 1 | 1 1 0 | 0 0 0 | 0 0 0 | 1 1 1 0 0 0 | 00E038 |
| 70 | 0 0 0 0 0 0 | 0 | 1 0 | 0 0 1 | 0 0 0 | 0 0 0 | 0 0 0 0 0 1 | 011001 |
| 71 | 0 0 0 0 0 0 | 0 | 0 1 | 1 1 0 | 0 0 0 | 0 0 0 | 1 1 1 0 1 0 | 00E03A |
| 72 | 0 0 0 0 0 0 | 1 | 1 0 | 0 0 0 | 0 0 1 | 0 0 0 | 0 0 0 0 0 1 | 030201 |
1、本实验的指令系统是在复杂模型机的指令系统基础上,用CIN和COUT两条指令代替RRC和RLC指令得到的。根据该指令系统,编写一段程序,这里给出一个例子。
地址 内容 助记符 说明
00 44 IN R0 ;输入单元(10010000)→R0
01 F0 COUT R0,[03] ;R0→以03H为地址的端口
02 03 ;地址
03 E0 CIN [00],R0 ;将端口A的内容读至R0
04 00 ;地址
05 F0 COUT R0,[01] ;将R0的内容写至端口B
06 01 ;地址
07 60 HALT ;停机
在上面的程序中,首先给8255写控制字,将8255设置成工作方式0,即A口输入,B口输出。该控制字(10010000)由输入单元送给寄存器R0,然后再送给8255(地址端口为03H)。将开关单元中的二进制开关量作为8255的输入,用扩展板上8255单元的发光二极管来显示8255的输出。
2、按照图3-3连线,检查无误后接通电源。(图中箭头表示需要接线的地方,接总线和控制信号时要注意高低位一一对应,可用彩排线的颜色来进行区分。本实验中,接线时要特别注意VCC和GND的方向,不能接反,以免烧坏芯片)
3、联机下载程序和微程序
使用联机软件的文件装载将实验程序和微程序下载到实验箱中,并用软件的读出功能进行检查。本实验参考程序对应的文件名为“扩展8255接口实验.TXT”(联机软件的使用方法参看附录2)。
4、运行程序
(1)单步运行程序
A、使控制台单元的开关SP05处于“NORM”状态, SP06处于“RUN”状态,信号源单元中的SP03为“STEP”状态,SP04为“RUN”状态,开关单元的开关SWB、SWA为“11”。
B、拨动开关单元的总清开关CLR(101),微地址清零,程序计数器清零,程序首址为00H。按动一次控制台单元的PULSE,清除控制寄存器和置三个端口为输入方式,使8255复位。
C、单步运行微指令,每按动一次控制台单元的START触动开关,即单步运行一条微指令。对照3-2微程序流程图,观察微地址显示灯是否和流程一致。
D、当运行结束后,检查扩展板8255单元的显示灯指示是否与开关单元中的二进制开关S3 S2 S1 S0状态一致。
(2)连续运行程序
A、使控制台单元的开关SP05处于“NORM”状态, SP06处于“RUN”状态,信号源单元中的SP03为“RUN”状态,SP04为“RUN”状态,开关单元的开关SWB、SWA为“11”。
图3-3 8255实验接线图
B、 拨动开关单元的总清开关CLR(101),微地址及程序计数器清零,按动一次控制
台单元的PULSE,使8255复位。然后按动控制台单元的START触动开关,系统连续运行程序,稍后将信号源单元中的SP04拨至“STOP”时,系统停机。
C、 停机后,检查扩展板8255单元的显示灯指示是否与开关单元中的二进制开关S3 S2 S1 S0状态一致。
六、实验报告
实验中观察到的结果列表记录。
七、实验思考题
1、8255的0方式的特点有哪些?
2、8255编程命令有哪两个?它们的作用分别是什么?
3.2扩展8253定时器/计数器实验
一、实验目的
1、了解8253计数器/定时器接口芯片的基本工作原理。
2、掌握8253的编程及控制应用方法。
3、学会通过联机软件中的示波器观察不同方式下的波形图。
二、实验内容
编写程序,联机下载程序和微程序,运行这些程序,并且通过联机软件中的示波器观察不同方式下的波形图。
三、实验仪器
1、ZY15CompSys12BB计算机组成原理及系统结构教学实验系统 一台
2、排线 若干
图3-4 8253芯片引脚说明
3、PC机 一台
四、实验原理
1、8253芯片引脚特性及外部连接
(l)8253的引脚分配图如图3-4所示
(2)外部连接说明
数据引脚D7-D0连至系统总线
引脚接至高位地址MP16、MP17译码出的一位,本实验接至Y2
A0、A1引脚接至地址总线A0、A1
接至RD,接至WE
、A0、A1、、五个引脚的电平与8253操作关系如表3—3所示:
表3-3 8253功能表
| CS | RD | WR | A1 | A0 | 寄存器选择和操作 |
| 0 | 1 | 0 | 0 | 0 | 写入寄存器#0 |
| 0 | 1 | 0 | 0 | 1 | 写入寄存器#1 |
| 0 | 1 | 0 | 1 | 0 | 写入寄存器#2 |
| 0 | 1 | 0 | 1 | 1 | 写入控制寄存器 |
| 0 | 0 | 1 | 0 | 0 | 读寄存器#0 |
| 0 | 0 | 1 | 0 | 1 | 读寄存器#1 |
| 0 | 0 | 1 | 1 | 0 | 读寄存器#2 |
| 0 | 0 | 1 | 1 | 1 | 无操作(三态) |
| 1 | X | X | X | X | 禁止(三态) |
| 0 | 0 | 1 | X | X | 无操作(三态) |
五、实验步骤
1、本实验的指令系统是在复杂模型机的指令系统基础上,用CIN和COUT两条指令代替RRC和RLC指令得到的。根据该指令系统,编写一段程序,这里给出一个例子。
地址 内容 助记符 说明
00 00 LAD R0, 0A ;0A单元中内容读至R0
01 0A ;地址
02 F0 COUT R0, [03] ;R0的内容写至端口03
03 03 ;端口号
04 44 IN R0 ;置计数值(如设为2)
05 F0 COUT R0, [00] ;R0的内容写至通道#0
06 00 ;端口号
07 60 HALT ;停机
0A 14
其中,0A单元存放的数14H为8253的控制字,它的功能为选择计数器0,只读/写最低的有效字节,选择方式2,采用二进制。输入单元的开关设置的数N为计数值。
2、按图3-5连线,仔细检查无误后接通电源。
图3-5 8253接线图
注意:图中箭头表示需要接线的地方,接总线和控制信号时要注意高低位一一对应,可用彩排线的颜色来进行区分。本实验中,接线时要特别注意VCC和GND的方向,不能接反,以免烧坏芯片。
3、联机下载程序和微程序
使用联机软件的文件装载将实验程序和微程序下载到实验箱中,并用软件的读出功能进行检查。本实验参考程序对应的文件名为“扩展8253接口实验.TXT”(联机软件的使用方法参看附录2)。
4、运行程序
(1)单步运行程序
A、使控制台单元的开关SP05处于“NORM”状态, SP06处于“RUN”状态,信号源单元中的SP03为“STEP”状态,SP04为“RUN”状态,开关单元的开关SWB、SWA为“11”。
B、拨动开关单元的总清开关CLR(101),微地址清零,程序计数器清零,程序首址为00H。给开关单元的开关S3 S2 S1 S0设置任意状态。
C、单步运行微指令,每按动一次控制台单元的START触动开关,即单步运行一条微指令,等指令执行完成后(也即按动触动开关START时,地址总线指示灯不再变化),用实验箱中提供的鳄鱼夹采样OUT0端的输出波形(用鳄鱼夹接单片机单元CH1-CH8管脚,再用鳄鱼夹另一端夹住8253的OUT0管脚和信号单元的CLOCK管脚)。用实验箱联机软件的示波器功能测量8253的OUT0端波形,与时钟源信号(CLOCK引出信号)进行比较。(分频值由输入单元输入,建议分频值不要设置太大,以免不利于观察)。
(2)连续运行程序
A、使控制台单元的开关SP05处于“NORM”状态, SP06处于“RUN”状态,信号源单元中的SP03为“RUN”状态,SP04为“RUN”状态,开关单元的开关SWB、SWA为“11”。
B、拨动开关单元的总清开关CLR(101),微地址及程序计数器清零,然后按动控制台单元的START触动开关,系统连续运行程序,稍后将信号源单元中的SP04拨至“STOP”时,系统停机。
5、本实验只用了计数器#0通道,将它设置成分频器。CLK0接至信号源CLOCK上;GATE0=1(即把开关单元的SW_G开关状态置为“1”),计数允许。OUT0即为波形输出端,参考波形如下:
用实验箱联机软件的示波器功能测8253的OUT0端波形,开关设置不同的计数值,再运行机器指令后,可以观察到OUT0端输出不同的频率的波形(建议分频值不要设置太大,以免不利于观察,在此设N=2)。
六、实验报告
画出实验箱联机软件中的示波器观察到的波形图。
七、实验思考题
1、比较8253计数器/定时器的6种工作方式。
3.3 8259中断控制器实验
一、实验目的
1、在构成一台完整模型机的基础上,了解中断控制的工作原理和编程方法。
2、本实验通过扩展板上的一片8259接口芯片,完成中断电路的连接、中断请求、中断响应以及中断编程控制实验。
二、实验内容
编写中断程序,联机下载程序和微程序,运行程序并观察输出结果。
三、实验仪器
1、ZY15CompSys12BB计算机组成原理及系统结构教学实验系统 一台
2、排线 若干
3、PC机 一台
四、实验原理
1、中断原理
中断是CPU与外部设备交换信息的一种方式。计算机在执行正常程序的过程中,当出现某些异常事件或外部请求时,处理器就暂时中断正在处理的正常程序,转去执行对异常事件或外设请求的处理操作。当处理完毕后,CPU再回到被暂时中断的程序,接着继续往下执行。这个过程称为中断。
图3-6 中断流程
中断处理程序一般由四部分组成:保护现场、中断服务程序、恢复现场、中断返回。所谓保护现场,通常是把寄存器的内容压入堆栈。恢复现场是指中断服务程序完成后,把原来压入堆栈的内容再弹回到CPU相应的寄存器中。有了保护现场和恢复现场的操作,就可以保证在返回断点后,正确无误的执行原程序。整个中断处理的过程可以用图3-6所示的流程来表示。
2、中断实验指令系统
本实验设计了10条机器指令:IN(输入)、ADD(二进制加法)、STA(存数)、OUT(输出)、JMP(无条件转移),RETI(中断返回)、PUSH(入栈)、POP(出栈)、COUT(写端口)、LAD(取数),其指令格式如下:
助记符 机器指令码 说明
IN 00000000 ;“ 输入”设备中的开关状态→R0
ADD addr 00010000 XXXXXXXX ;R0+[addr]→R0
STA addr 00100000 XXXXXXXX ;R0→[addr]
OUT addr 00110000 XXXXXXXX ;[addr]→LED
JMP addr 01000000 XXXXXXXX ;addr→PC
RETI 01011000 ;R2→PC
PUSH 01100001 ;R0→R1
POP 01110100 ;R1→R0
COUT addr 10000000 XXXXXXXX ;R0→8259
LAD addr 10010000 XXXXXXXX ;[addr]→R0
根据以上的指令系统编写微程序,见图3-7。
按照系统建议的微指令格式,参照微指令流程图,将每条微指令代码化,译成二进制代码表,并将二进制代码表转成十六进制格式文件。
| 微程序 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
| 控制信号 | S3 | S2 | S1 | S0 | M | CN | RD | M17 | M16 | A | B | P | uA5 | uA4 | uA3 | uA2 | uA1 | uA0 | ||||||
| A字段 | B字段 | P字段 | |||||||||
| 15 | 14 | 13 | 控制信号 | 12 | 11 | 10 | 控制信号 | 9 | 8 | 7 | 控制信号 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |||
| 0 | 0 | 1 | LDRI | 0 | 0 | 1 | RS_G | 0 | 0 | 1 | P1 |
| 0 | 1 | 0 | LDDR1 | 0 | 1 | 0 | RD_G | 0 | 1 | 0 | P2 |
| 0 | 1 | 1 | LDDR2 | 0 | 1 | 1 | RI_G | 0 | 1 | 1 | P3 |
| 1 | 0 | 0 | LDIR | 1 | 0 | 0 | 299_G | 1 | 0 | 0 | P4 |
| 1 | 0 | 1 | LOAD | 1 | 0 | 1 | ALU_G | 1 | 0 | 1 | AR |
| 1 | 1 | 0 | LDAR | 1 | 1 | 0 | PC_G | 1 | 1 | 0 | LDPC |
| 1 | 1 | 1 | 1 | 1 | 1 | INTA | 1 | 1 | 1 | ||
$M00018108 $M0E078A08 $M1C078A20
$M0101ED82 $M0F028220 $M1D00D1A0
$M0200C050 $M10001020 $M1E00E01F
$M0300E004 $M1101ED83 $M1F030201
$M0400B005 $M1201ED87 $M200180E1
$M0501A206 $M1301ED9A $M21018001
$M06959A20 $M1401ED9D $M2200E023
$M0700E00F $M1501D381 $M23009020
$M0801ED8A $M16019201 $M31418C32
$M0901ED8C $M17019201 $M32010E33
$M0A00A00E $M1801ED9E $M33010034
$M0B018001 $M1901EDA2 $M34015F81
$M0C00200D $M1A00E01B
$M0D068A09 $M1B00A01C
3、8259的工作原理
8259是一种可编程的中断优先级管理芯片。中断请求寄存器用来寄存外设来的中断请求信号,有中断请求时置1。然后8259就会向CPU发出中断请求,CPU在每条指令结束时如果检测到该请求信号,就会响应相应的中断。要使8259能够正常工作,首先要对它进行初始化。在本实验中我们只做单级中断,所以要对8259写入以下的命令字(8259的具体使用方法参见相关资料):
ICW1 13H
ICW2 80H
ICW4 03H
图3.7 中断实验微程序流程图
五、实验步骤
1、根据该实验的指令系统,编写一段程序,这里给出一个例子。
地址 内 容 助记符 说 明
初始化: 00 90 LAD R0,[16] ;[16]→R0
01 16 ;用来存数的地址
02 80 COUT R0,[40] ;R0→[40]
03 40 ;端口地址
04 90 LAD R0,[17] ;[17]→R0
05 17 ;用来存数的地址
06 80 COUT R0,[41] ;R0→[41]
07 41 ;端口地址
08 90 LAD R0,[1A] ;[1A]→R0
09 1A ;用来存数的地址
0A 80 COUT R0,[43] ;R0→[43]
0B 43 ;端口地址
主程序: 0C 00 IN R0 ;输入开关数据→R0
0D 10 ADD R0,[15] ;两数据相加
0E 15 ;用来存数的地址
0F 20 STA R0,[1B] ;R0→[1B]
10 1B ;用来存数的地址
11 30 OUT [1B] ;[1B]→输出单元显示
12 1B ;用来存数的地址
13 40 JMP [14] ;0CH→PC,循环运行
14 0C ;跳转地址
15 01 ;加数的值
16 13 ;ICW1的值
17 80 ;ICW2的值
18 77 ;
19 00 ;用来存放中断程序结果
1A 03 ;ICW4的值
中断子程序: 80 61 PUSH R0 ;保存R0的值
81 90 LAD R0,[18] ;[18]→R0
82 18 ;用来存数的地址
83 20 STA R0,[19] ;R0→[19]
84 19 ;用来存数的地址
85 30 OUT[19] ; 把[19]的内容显示在LED上
86 19 ;
87 74 POP R0 ;恢复R0的值
88 58 RETI ;中断返回
程序清单:
$P0090 $P0C00 $P1877
$P0116 $P0D10 $P1900
$P0280 $P0E15 $P1A03
$P0340 $P0F20 $P8061
$P0490 $P101B $P8190
$P0517 $P1130 $P8218
$P0680 $P121B $P8320
$P0741 $P1340 $P8419
$P00 $P140C $P8530
$P091A $P1501 $P8619
$P0A80 $P1613 $P8774
$P0B43 $P1780 $P8858
这段程序分为三个部分:第一部分是对8259进行初始化,写入控制字,确定8259的工作模式。完成初始化以后,就进入主程序。主程序为一段循环程序,不断读入输入单元的值,与RAM的15H单元值相加,然后将结果保存并送输出单元显示。如果主程序执行过程中CPU检测到中断信号,就会转入中断子程序,将18H单元的值取出送入19H单元保存,并送输出单元显示。
2、按图3-8连接实验线路,仔细检查无误后接通电源。
注意:图中箭头表示需要接线的地方,接总线和控制信号时要注意高低位一一对应,可用彩排线的颜色来进行区分。本实验中,接线时要特别注意VCC和GND的方向,不能接反,以免烧坏芯片。
3、联机下载程序和微程序
使用联机软件的文件装载将实验程序和微程序下载到实验箱中,并用软件的读出功能进行检查。本实验参考程序对应的文件名为“中断实验.TXT”(联机软件的使用方法参看附录2)。
4、运行程序
(1)单步运行程序
A、使控制台单元的开关SP05处于“INT”状态, SP06处于“RUN”状态,信号源单元中的SP03为“STEP”状态,SP04为“RUN”状态,开关单元的开关SWB、SWA为“11”,SW_G(IR0)为“0”。
B、拨动开关单元的总清开关CLR(101),微地址清零,程序计数器清零,程序首址为00H。
C、单步运行微指令,每按动一次控制台单元的START触动开关,即单步运行一条微指令。对照微程序流程图,观察微地址显示灯是否和流程一致。
(2)连续运行程序
A、使控制台单元的开关SP05处于“INT”状态, SP06处于“RUN”状态,信号源单元中的SP03为“RUN”状态,SP04为“RUN”状态,开关单元的开关SWB、SWA为“11”,SW_G(IR0)为“0”。
B、拨动开关单元的总清开关CLR(101),微地址及程序计数器清零,然后按动控制台单元的START触动开关,系统连续运行程序,稍后将信号源单元中的SP04拨至“STOP”时,系统停机。
5、观察结果
在程序运行过程中,必须待执行完初始化进入主程序以后方可发中断信号。可以通过观察输出单元的显示来判断是否已经进入主程序,如果输出单元显示变为主程序中的加法运算结果(在例程中该结果应该为输入单元的值加1),则表明可以发中断信号。此时如果需要进行中断,则将开关单元的开关SW_G(IR0)状态置为“1”,就会给CPU发出中断信号。CPU在每一条指令结束的时候都会检测是否有中断请求,一旦检测到这个信号,就会保护断点,进而转入中断子程序。除了通过观察微程序的流程以外,还可以通过观察输出单元的显示来判断中断程序的执行情况。如果输出单元的显示变为77H(仅针对本例程),后又恢复原来的值,则表明CPU执行了中断,然后又回到主程序。
图3-8 中断实验接线图
六、实验报告
写出编写的中断程序并画出中断流程图,记录实验结果。
七、实验思考题
1、什么是中断?中断处理的一般过程是什么?
2、8259具有哪些工作方式和中断操作功能?
附录1 实验用芯片介绍
本附录介绍一些实验电路中用到的中小规模数字集成电路器件,以供教学实验参考。
1、74LS00
2、74LS04
3、74LS08
4、74LS74
5、74LS161 (74LS161工作状态)
6、74LS181 (74LS181功能表)
| S3 | S2 | S1 | S0 | M=0(算术运算) | M=1 (逻辑运算) | |
| CN=1无进位 | CN=0有进位 | |||||
| 0 | 0 | 0 | 0 | F= | F=A加1 | F= |
| 0 | 0 | 0 | 1 | F= | F=()加1 | F= |
| 0 | 0 | 1 | 0 | F= | F=()加1 | F= |
| 0 | 0 | 1 | 1 | F=0减1 | F=0 | F= |
| 0 | 1 | 0 | 0 | F=加 | F=加加1 | F= |
| 0 | 1 | 0 | 1 | F=()加 | F=()加加1 | F= |
| 0 | 1 | 1 | 0 | F=减减1 | F=减 | F= |
| 0 | 1 | 1 | 1 | F=减1 | F= | F= |
| 1 | 0 | 0 | 0 | F=加 | F=加加1 | F= |
| 1 | 0 | 0 | 1 | F=加 | F=加加1 | F= |
| 1 | 0 | 1 | 0 | F=()加 | F=()加加1 | F= |
| 1 | 0 | 1 | 1 | F=减1 | F= | F= |
| 1 | 1 | 0 | 0 | F=加* | F=加*加1 | F=1 |
| 1 | 1 | 0 | 1 | F=()加 | F=()加加1 | F= |
| 1 | 1 | 1 | 0 | F=()加 | F=()加加1 | F= |
| 1 | 1 | 1 | 1 | F=减1 | F= | F= |
7、74LS175
8、74LS244
9、74LS245
10、74LS299
11、74LS273
12、74LS374
13、MAX232
14、28C16
15、74LS182
附录2 联机软件操作说明
1 软件说明
1.1软件介绍
本系统软件应该运行在Win98以及Win98以上操作系统。该软件是通过PC机串行口向计算机组成原理实验箱上的C52单片机控制单元发送控制指令,从而控制单片机直接对该实验箱执行一系列的操作,如:对程序存储器、微程序控制器的读写以及单步微指令、单步机器指令和程序的连续运行等操作。在使用本软件之前,用户应该将本实验系统配套的串行通讯电缆分别插在该实验箱以及PC机的串口上,这样才可以实现PC机与单片机之间的串口通讯。
1.2软件安装
若要安装本软件,首先双击联机软件“SETUP”文件夹下的“SETUP”图标,进入安装程序,然后按照安装向导的提示来操作,就可完成联机软件的安装。这时在开始菜单的程序列表中会出现PC组成原理文件夹,如有必要可将快捷方式发送到桌面上,运行软件时只需双击该快捷方式即可。
2 使用说明
2.1 联机
先将本实验系统配套的串行通讯电缆分别插在该实验箱以及PC机的串口上,打开实验箱的电源,然后打开PC机运行该软件。
进入系统之前该软件将会自动检测串口,先检测COM1,然后是COM2,如果联机成功,则进入系统,系统主界面如2-1所示:
图 2-1 软件主窗口
若联机不成功,点击“操作”菜单下的子菜单“检测串口”进入联机操作画面,如图2-2所示,打开该操作界面上的下拉菜单有三个选项:Auto,COM1,COM2。
Auto方式就是自动检测串口,先检测COM1,然后是COM2。COM1和COM2方式只检测选中的串口。
图 2-2 检测串口窗口
2.2 文本编辑
● 新建/打开(Ctrl+N/Ctrl+O) 点击主菜单上的[文件]/[新建](或者[文件]/[打开]),便可以打开一个空白文档或者已经存在的文档,对机器指令及微指令进行编辑,文件格式如下:
机器指令 $P╳╳╳╳
微指令 $M╳╳╳╳╳╳╳╳
(注意:字母一律采用大写)
● 剪切(Ctrl+X): 要剪切文本以便可以将它移动到其它位置,请选定文本,然后单击主菜单上的[编辑]/[剪切](或者工具栏上的剪切按钮)。
● 复制(Ctrl+C): 要复制文本以便可以将它粘贴到其它位置,请选定文本,然后单击主菜单上的[编辑]/[复制] (或者工具栏上的复制按钮)。
● 粘贴(Ctrl+V): 要粘贴剪切或复制的文本,请将光标置于要粘贴文本的位置,然后单击主菜单上的[编辑]/ [粘贴] (或者工具栏上的粘贴按钮)。
● 删除(Delete):要删除文字,请先选定它,然后单击主菜单上的[编辑]/ [删除] (或者工具栏上的删除按钮)。
● 保存(Ctrl+S):点击主菜单上的[文件]/[保存](或者[文件]/[另存为]),打开文件保存对话框,将文件保存为文本文件。
2.3 程序存储器和控制存储器的读写
2.3.1 装载文件
图 2-3 读写程序存储器对话框
该功能完成对程序存储器和控制存储器的写入。点击主菜单上的[操作]/[装载文件],打开文件打开对话框,选择要装入的文件,然后开始装载文件,当装载文件进度条显示“文件装载成功”,则装载完毕。
2.3.2 导出文件
该功能完成对程序存储器和控制存储器的导出。点击主菜单上的[操作]/[导出文件],弹出对话框,输入要读取的地址范围,便可以将该地址范围的内容读出来,还可以对读出的内容进行编辑。
2.3.3 读/写程序存储器
点击主菜单上的[操作]/[读写程序存储器],弹出一对话框显示00地址单元的内容,如图2-3所示,可以点击地址文本框旁边的上下按钮来浏览相邻地址单元的内容,或者直接在地址文本框中输入地址浏览相应地址单元的内容。若需要修改,则直接在内容文本框中输入要修改的数据,然后点击对话框上的修改按钮就可以修改相应地址单元的内容。
2.3.4 读/写微程序控制器
点击主菜单上的[操作]/[读写微程序控制器],弹出一对话框显示00地址单元的内容,如图2-4所示,可以点击地址文本框旁边的上下按钮来浏览相邻地址单元的内容,或者直接在地址文本框中输入地址浏览相应地址单元的内容。若需要修改,则直接在内容文本框中输入要修改的数据,然后点击对话框上的修改按钮就可以修改相应地址单元的内容。
图 2-4 读写微程序控制器对话框
2.4 调试(F1)
算术逻辑单元
地址寄存器单元
24位微指令指示
程序指针
点击主菜单上的[操作]/[调试]进入调试界面,如图2-5所示。每执行一条微指令,该软件会根据指令的执行过程在调试图上画出相应的数据流图,用户可以很直观地观察到微指令执行的流程。
输出单元
存储器单元
输入单元
指令寄存器单元
寄存器单元
图 2-5 调试界面
● 设置图形显示比例:选择比例选择下拉菜单中的比例,来改变图形显示的比例。
● StepM(F2):单步微指令。每次按动一次StepM按钮(或者F2),就单步执行一条微指令,同时显示数据流图。
● StepP(F3):单步机器指令。每次按动一次StepP按钮(或者F3),就单步执行一条机器指令,一条机器指令对应着若干条微指令。每执行一条微指令的同时显示数据流图。
● Run(F9):连续运行。每次按动一次Run按钮(或者F9),系统开始连续运行程序,同时显示数据流图。
● Stop(Ctrl+S):停止运行。该功能只有在程序进行单步机器指令和连续运行时才有效,按动该按钮可以停止程序的运行。但是只有一条微指令执行完成后,此命令才生效。
2.5 逻辑示波器
点击主菜单上的[操作]/[逻辑示波器]/[开始示波],弹出波形设置对话框如图2-6所示。通过该对话框可以设置波形的采样频率,以及同步信号。测量时只需将逻辑示波器单元的相应表笔接至相应的待测信号。图中每个通道若选择“高”表明检测到高电平开始采样,选择“低”表示检测到低电平开始采样,选择“无效”表明不加判断立即开始采样,每个通道选择的组合即为采样开始的同步信号,只有满足条件时,示波器才有波形显示。
● 放大波形(Ctrl+E):点击主菜单上的[操作]/[逻辑示波器]/[缩放]/[放大](或者Ctrl+E),可以放大波形。
● 缩小波形(Ctrl+L):点击主菜单上的[操作]/[逻辑示波器]/[缩放]/[缩小](或者Ctrl+L),可以缩小波形。
● 移动波形:拖动示波图下面的水平滚动条可以左右移动波形。
● 显示波形间隔:点击波形上任意两点,可以在示波图的左上脚显示时间间隔。
● 重新获取波形:点击主菜单上的[操作]/[逻辑示波器]/[重新获取波形],可以重新采样并显示波形。
图2-6 波形设置对话框
附录3 MAX+PLUSII软件使用说明
第一节 MAX+plus Ⅱ概述
Altera公司的MAX+plus II 软件是最易学、最易用的可编程逻辑器件开发软件。其界面友好,集成化程度高。本教程以MAX+plus Ⅱ10.2为例讲解该软件的使用。
1.1.1 MAX+plus II 10.2的功能
1、支持的器件:
所支持的器件有:EPF10K10, EPF10K10A, EPF10K20,EPF10K30A以及MAX® 7000系列(含MAX7000A, MAX7000AE, MAX7000E, MAX7000S),EPM9320, EPM9320A, EPF8452A, EPF8282A,FLEX 6000/A 系列,MAX 5000系列,ClassicTM系列。
2、设计输入:
常用的设计输入方法有:通过MAX+plus Ⅱ图形编辑器,创建图形设计文件(.gdf);
通过MAX+ plus Ⅱ文本编辑器,使用AHDL语言,创建文本编辑文件(.tdf);使用VHDL
语言,创建文本设计文件( .vhd);使用Verilog HDL语言,创建文本设计文件(.v)。还可
以通过MAX+plus Ⅱ波形编辑器,创建波形设计文件(.wdf)等。
3、设计编译:
通过MAX+plus Ⅱ编译器完成,可检查项目是否有错,并对项目进行逻辑综合,然后配置到一个ALTERA器件中,同时产生报告文件、编辑文件和用于时间仿真的输出文件。
4、设计校验:
通过MAX+ plus Ⅱ的定时分析器进行时序分析、功能仿真、时序仿真和波形分析,生
成一些标准文件为其他EDA工具使用。
5、器件编程(Programming)和配置(Cofiguration)。
6、在线帮助。
1.1.2系统要求:
MAX+ plus Ⅱ软件对计算机的要求较低:
操作系统:Windows 95/98 或 Windows NT 4.0;
安装所占空间:600Mbytes;
内存要求:内存需M以上。
第二节 MAX+plus II安装
1.2.1 MAX+plus II 10.2的安装:
MAX+plus II 10.2的安装非常简单,只要按照安装向导即可。其安装步骤如下:(设安装在D:盘)
(1)、进入MAX+plusⅡ软件的目录运行Autorun.exe程序后如图3-1所示:
图3-1
(2)、点击Full/Custom/Flexlm Server按钮,出现如图3-2所示的画面;
(3)、点击“Next >”出现另一窗口,在此窗口中单击“Next>”后出现图3-3画面;
(4)、单击“YES”,表示接受此协议。此时出现一提示,告之你需要一个license文件来运行程序,单击此提示中的“Next>”,出现图3-4的画面;
(5)、输入用户名等,单击“Next>”出现图3-5的画面,选择完全安装,单击“Next>”出现如图3-6所示的画面;
(6)、在图3-5中使用默认选择,即安装所有组件, 并单击“Next>”按钮。因文件安装在D盘,故需单击“Browse”按钮,出现图3-6所示的画面。键入或选择你要安装到的目录,此处所选为“d:\\maxplus2”,然后按“OK”。因该目录不存在,故会出现提示“是否创建此目录”。选择“是(Y)”。
(7)、要求为选择MAX+PLUS II部件进行安装。该部件包含许多设计的源代码/图,如一些VHDL,Verilog HDL的例子。可将其安装在“D:\\max2work”目录下。按”Browse“改变目录名后,单击“OK”,“Next>” 后可出现图3-7;另外将MAX+plus II软件的ACCESS Key Guidelines系列文件安装在“D:\\max2Key”目录下,如图3-8所示。
(8)、单击“Next>”即开始安装。
安装好MAX+plusⅡ10.2后,在第一次运行时需做许多工作,才能使软件正常运行。
图3-2
图3-3
图3-4
图3-5
图3-6
图3-7
图3-8
1.2.2 MAX+plus II 10.2的第一次运行:
(1)、双击MAX+ plus II 10.2的图标,或从“开始”菜单“程序”中的“ALTERA”组中的“MAX+ plus II 10.2”运行MAX+ plus II 10.2;在出现MAX+ plus II10.2的界面时,出现“License Agreement”窗口(图3-9),Alera公司要求用户阅读Licence agrement 文档,用户阅读时要按顺序阅读完全部文档,界面下方的YES按钮被激活。表示ALTER公司已同意你使用该软件。
图3-9 “License Agreement”窗口
(2) 在主界面菜单选择"Option">"License Setup"菜单(如图3-10所示),"Browse"选择D:\\maxplus2,并选择license.dat为授权文件,退出MAX+ plusⅡ,再次进入MAX+ plusⅡ。
图3-10
第三节 MAX+plus II的设计过程
MAX+ plus II的设计过程如图3-11:
图3-11 MAX+plus II 设计过程
编程/配置
项目编程
MAX+ plus II的设计过程也可用如下流程图3-12表示,其中各方框标明了所完成的功能。
图3-12 MAX+plus II设计流程图
1、设计输入:
用户可使用MAX+ plus II10.2提供的图形编辑器和文本编辑器实现图形、AHDL、
VHDL或Verilog HDL的输入,也可输入网表文件。
2、项目编译:
为完成对设计的处理,MAX+ plus II10.2提供了一个完全集成的编译器(Compiler),它可直接完成从网表提取到最后编程文件的生成。在编译过程中其生成一系列可进行时序模拟、适配的标准文件。若在编译的某个环节出错,编译器会停止编译,并告诉错误的原因及位置。图3-13即为MAX+ plus II10.2编译器编译的过程。
图3-13 MAX+plus II 10.2编译器的编译过程
此编译过程的各个环节的含义将在下面的操作中在讲述。
3、项目校验:
对设计项目的功能、时序进行仿真和时序分析,判断输入输出间的延迟。
4、项目编程:
将你的设计下载/配置到你所选择的器件中去。
下面几节,将详细看到这些设计的过程。
第四节 图形输入的设计过程
在本节将以图形输入法为例讲述图形方法设计的整个过程。在MAX+ plus II中,用户的每个设计都对应一个项目,每个项目可包含一个或多个设计文件,其中有一个是顶层文件,顶层文件的名字必须与项目名相同。编译器是对项目中的顶层文件进行编译。项目还管理所有中间文件,所有项目的中间文件的文件名相同,仅后缀名(扩展名)不同。对于每个新的项目最好建立一个单独的子目录。
在本节以下的叙述中,以使用74161设计一个模为12的计数器为例,设计放在目录“d:\\ mydesign\\graph”下。该设计项目仅含一个设计文件,使用图形输入方式。
1.4.1项目建立与图形输入:
1、 项目建立
(1)、启动MAX+plusⅡ10.2
从“开始”菜单“程序”中的“ALTERA”组中选择并单击“MAX+plusⅡ10.2”项,即出现MAX+plusⅡ管理器窗口。
(2)、在“File”菜单中选择“Project”的“Name”选项,即单击如图1-14中的“Name”。出现图3-14所示的对话框。
图3-14 选择“Name”选项
选中为项目所建的目录:
d:\\mydesign\\graph
图3-15 输入/指定项目名对话框
在图3-15的“Directories”区选中刚才为项目所建的目录;在“Project Name”区键入项目名,此处为“cntm12”。
(3)、在图3-15中选择“OK”确定。
2、图形输入
可建立波形输入模拟文件
(1)、建立图形输入文件
在File菜单下选择“New…”,出现图3-16所示的对话框:
图3-16 新建文件类型对话框
在图3-16中选择“Graphic Editor file”后,选择“OK”后出现图3-17,即可开始建立图形输入文件。
图形编辑工具条
图3-17 图形编辑器窗口
(2)、调入元件符号
在图3-17图形编辑区双击鼠标左键可打开“Enter symbol”对话框,如图3-18所示。在该对话框中你可选择需要输入的元件/逻辑符号。例如你可选择一个计数器,一个与门等。
元件符号名输入区,可直接输入所需元件的符号名
用户库,在项目所在的目录
库选择区
当前选中的库为用户库
当前选中的库(即用户库)中的元件列表区,因此时用户库是空的,故该区没有任何符号名
图3-18 元件输入对话框
MAX+plusⅡ为实现不同的逻辑功能提供了大量的库文件,每个库对应一个目录。这些库根据其功能大小及特点可分为:
| 库名 | 内 容 |
| 用户库 | 用户自建的元器件,即一些底层设计 |
| prim(基本库) | 基本的逻辑块器件,如各种门,触发器等 |
| mf(宏功能库) | 所有74系列逻辑元件,如74161 |
| mega_lpm (可调参数库) | 包括参数化模块,功能复杂的高级功能模块,如可调模值的计数器,FIFO,RAM等 |
| edif | 和mf库类似 |
可直接在此处输入74161完成上述操作
图3-19 选中74161
图3-19 选中74161
单击“OK”关闭此对话框,此时可发现在图形编辑器窗口出现了74161的符号。如图3-20所示。
图3-20 调入74161
(3)、保存文件
从“File”菜单下选择“Save”,出现文件保存对话框。选择“OK”,使用默认的文件名存盘。此处默认的文件名为“cntm12.gdf”,即项目名“cntm12 ”加上图形文件的扩展名“.gdf”。
(4)、调入一个三输入与非门:
若采用同步置零法,使74161在“1011”状态时出现处置零信号来实现模为12的计数器。故需调用一个三输入与非门,三输入与非门位于库“prim”中,名称为“NAND3”。(N代表输出反向,AND代表与门,3代表输入端的个数;所以“NAND3”为一个三输入与非门。同样“OR6”代表一个6输入或门;XOR代表异或门。) 按照步骤2调入“NAND3”和代表低电平的“GND”(位于库prim中),也可在图形编辑区双击鼠标左键后,在符号输入对话框中直接输入“GND”,按“OK”即可。若你已知道符号名,可采用这种方法直接调用该符号代表的元件。在输入74161,NAND3, GND三个符号后,可得图3-21。
图3-21输入74161、NAND3和GND
(5)、连线:
如果需要连接元件的两个端口,则将鼠标移到其中的一个端口上,这时鼠标指示符会自动变为“+”形,然后:
1、按住鼠标左键并拖动鼠标至第二个端口(或其他地方);
2、松开鼠标左键后,则可画好一条连线;
3、若想删除一条连线,只需用鼠标左键点中该线,被点中的线会变为高亮线(为红色),此时按“Delete”键即可删除。按图3-22连好线,并存盘。
图3-22 连线图
(6)、添加输入输出引脚:
输入引脚
输出引脚
输入引脚的符号名为“输入”, 输出引脚的符号名为“输出”,仿照前面添加74161的方法加入三个输入引脚和五个输出引脚。“输入”和“输出”皆位于库“prim”下。它们外形如下:
在本例中,三个输入引脚将分别被命名为en, clear ,clk,分别作为计数使能,清零,时钟输入。五个输出引脚分别被命名为q0,q1,q2,q3,cout分别作为计数器计数输出,进位输出。
双击其中一个输入引脚的“PIN_NAME”, 输入“en”,就命名了输入引脚“en”。按同样方法命名其他输入/输出引脚。
命完名后将这些引脚同对应好的元件端口连接好,可得图3-23。
在绘图过程中,可利用绘图工具条实现元件拖动,交叉线接断功能。可参见图3-24对此工具条的说明。
在完成图3-23后,为验证项目设计的正确性,开始下面的步骤:项目编译。
图3-23 模=12的计数器电路图
当橡皮筋连接功能打开时,移动元件,则连接在元件上的连线跟着移动,不改变同其他元件的连接关系;
当橡皮筋连接功能关闭时,移动元件,则元件被移走,不再维持和其他元件的连接关系。
图3-24 绘图工具条说明
1.4.2 项目编译:
完成设计文件输入后,可开始对其进行编译。在“MAX+PLUS II”菜单中选择“Compiler”,即可打开编译器(图3-25)。选择“Start” 就可开始编译。编译成功后可生成时序模拟文件及器件编程文件。若有错误,编译器将停止编译,并在下面的信息框中给出错误信息,双击错误信息条,一般可给出错误之处。
图3-25 编译器
编译器由多个部分组成,各部分名称与功能如下:
Compiler Netlist Extractor:编译器网表提取器,该过程完成后生成设计的网表文件(描
述设计中各元件之间连接信息的文件),若图形连接中有错误(如两个输出直接短接),该过程将指出此错误。
Database Builder:数据库建库器。
Logic Synthesizer:逻辑综合器对设计进行逻辑综合,即选择合适的逻辑化简算法,去
除冗余逻辑。确保对某种特定的器件结构尽可能有效地使用器件的逻辑资源,还可去除设计中无用的逻辑。用户可通过修改逻辑综合的一些选项,来指导逻辑综合。
Fitter:适配器。它通过一定的算法(或试探法)进行布局布线,将通过逻辑综合的设
计最恰当地用一个或多个器件来实现。
Timing SNF Extractor:时序模拟的模拟器网表文件生成器,它可生成用于时序模拟(项
目校验)的标准时延文件。若想进行功能模拟,可从菜单“Processing”中选择“Functional
SNF Extrctor”项,此时编译器仅由三项构成:Compiler Netlist Extractor;Database Builder;
Functional SNF Extrctor。
Assembler:装配器,生成用于器件下载/配置的文件。
(注意:在这一步中编译器自动为你的设计选择目标器件并进行管脚锁定;在下面的介
绍中我们将说明如何由用户进行目标器件选择和管脚锁定。)
1.4.3项目校验:
编译器通过“Timing SNF Extractor”后就可进行时序模拟了,其步骤如下:
(1)、建立波形输入文件(也称模拟器通道文件SCF):
a.从菜单“File”中选择“New”打开新建文件类型对话框,如前面的图3-16。选择“Waveform
图3-26 波形编辑器窗口
Editor File(.scf)”项后选择“OK”,则出现如图3-26的窗口。
b.在图3-26波形编辑器窗口的 Name 下空白处单击鼠标右键,出现浮动菜单,如图3-27所示。选择“Enter Nodes from SNF…”可打开如图3-28 所示的“从SNF文件输入观测节点对话框 ”。
单击之,可打开“从SNF文件输入观测节点对话框 ” 可输入待观测信号。
图3-27 Name的浮动菜单
图3-28 从SNF文件输入观测节点对话框
c.在图3-28中的“Type”区选择“输入s” 和“输出s”,默认情况下已选中。单击
“List按钮,可在“Available Nodes&Groups”区看到在我们设计中的输入/输出信号,如图3-29所示,这些信号为蓝色高亮,表示被选中。单击 按钮可将这些信号选择到
“ Selected Nodes&Groups” 区,表示可对这些信号进行观测。
d.单击“OK” 按钮关闭图3-28的对话框。可见到图3-26波形编辑器窗口变为图3-30
所示。
图3-29 列出输入/输出信号
图3-30 波形文件中的输入输出信号
e.从菜单“File”中选择“Save ”,将此波形文件保存为默认名:“cntm12.scf”,扩展名“.scf”表示模拟通道文件。
(2)、编辑输入节点波形,即为输入信号建立输入波形:
本例中设置为20ns。
(单位可为ns,us,ms,s)
在波形文件中添加好输入/输出信号后,就可开始为输入信号建立输入波形。在建立输入波形之前,先浏览一下与此操作相关的菜单选项及工具条。如图3-31和3-32所示。
图3-31 绘图网格设置菜单条
选中该项(左边打勾),则画线时要对齐网格
显示网格,使网格可见
可打开网格大小设置对话框,如图3-31
图3-32 网格大小设置对话框
此外,在默认情况下,模拟时间为1us。可从菜单“File”下选择“End Time…”来设置模拟时间的长短。图3-33所示为绘制波形图用的工具条。
选择某个对象来移动,复制,剪切等操作
输入或编辑文字
选中某段波形,并直接对其赋值
放大/缩小波形
对某段已选中的波形,
赋值‘0’,低电平
赋值‘1’,高电平
赋值‘X’,不定值
赋值‘Z’,高阻
赋相反的值,如1—0;A--5
为时钟信号赋值
为有规律/周期性的单个信号或总线赋值
为某段总线赋值
为状态机赋值
图3-33波形图绘制用工具条说明
例如:
a、将信号“en”从头至尾,即从0ns到1000ns赋值‘1’。
选中信号“en”。即用鼠标左键单击“Name”区的“en”,可看到“en”信号全部变为黑色,表示被选中;用鼠标左键单击 即可将“en”赋‘1’。
b、采用同样方法可将信号“clear” 从0ns到1000ns赋值‘1’,为观察其清零的作用,我们在240ns至300ns之间将其赋‘0’(因为该信号低电平有效)。
将鼠标移到 “clear” 信号的240ns处按下鼠标左键并向右拖动鼠标至300ns处,松开鼠标左键。可看到这段区域呈黑色,被选中。用鼠标左键单击工具条中 即可。
c、为时钟信号“clk”赋周期为40ns的时钟信号。
选中信号“clk”;设置信号周期。用鼠标左键单击工具条中 可打开如图3-34所示的对话框;单击“OK”关闭此对话框即可生成所需时钟。
若选择“网格对齐”则此值不可改。
此处若是2,则时钟周期为:40ns×2=80ns
图3-34 时钟周期设置对话框
选择“File”中“Save”存盘。 到此完成波形输入,得到图3-35
图3-35 建好的输入波形图
(3)、运行模拟器,进行时序模拟
a、从菜单“MAX+plusⅡ”选择“Simulator”,即可打开模拟器,如图3-36所示;
b、单击按钮“Start”即可开始模拟;
改变模拟的起止时间
c、模拟完毕后,单击按钮“Open Scf”可打开刚才编辑的波形文件,就可开始对模拟结果进行检查。
图3-36 模拟器
模拟完成后波形模拟文件如下图3-37所示:
图3-37 模拟结果
为观测方便,可将计数输出q3,q2,q1,q0作为一个组来观测,步骤如下:
a、将鼠标移到“Name”区的q3上,按下鼠标左键并往下拖动鼠标至q0处。松开鼠标左键,可选中信号q3,q2,q1,q0;
b、在选中区(黑色)上单击鼠标右键,打开一个浮动菜单,选择“Enter Group”项,出现图3-38所示的对话框;
c、单击“OK”关闭此对话框,可得如图3-39所示的波形图文件。现在观测就容易了
十进制
十六进制
图3-38 设置组的对话框
双击此处也可改变数据显示的格式:二,八,十,十六进制;格雷码显示
图3-39 模拟结果(以组方式显示)
模拟通过后就可将设计结果编程/下载到目标器件中。但因为前面编译时,是由编译器自动为你的设计选择目标器件并进行管脚锁定的,所以为使设计符合用户要求,将由用户进行目标器件选择和管脚锁定。
1.4.4目标器件选择与管脚锁定:
1、选择器件
本例中使用的目标器件为FLEX10K系列中的EPF10K10LC84-4,器件选择方法如下:
a、菜单“Assign”下选择“Device”项可打开如图3-40所示的器件选择对话框;
b、单击“Device Family”区的下拉按钮,可进行器件系列选择,选择FLEX10K;
c、在具体器件型号列表区双击EPF10K10LC84-4,可看到如图3-41;
d、单击“OK”按钮,关闭对话框即完成器件选择,下面可开始管脚锁定。
可选择对器件进行加密等功能
器件系列选择的下拉按钮
具体器件型号列表区
图3-40 所示的器件选择对话框
图3-41 所示的器件选择对话框(选择EPF10K10LC84-4)
视图区:
此区域显示器件视图(显示管脚锁定情况)
或逻辑阵列块视图(显示逻辑资源使用或分配情况)
节点显示区:显示没有被锁定管脚的输入输出信号及内部结点
分别控制在显示区显示:最后编译器编译的结果;
或显示当前分配情况
节点显示区:
显示没有被锁定管脚的输入输出信号及内部节点
图3-42 平面布置图编辑器窗口
拖动clk至此处,松开左键
图3-43 a. 未锁定前 图3-43b锁定好信号CLK后的视图区图
2、管脚锁定
管脚锁定是指将输入/输出信号安排在器件的指定管脚上,过程如下:
首先,从“Max+plusII” 菜单下选择“Floorplan Editor”。平面布置图编辑器窗口将被打开,如图3-42所示。
注意,你所打开的窗口可能与此不同,可通过在菜单“Layout” 中选中“DeviceView”, 使视图区显示器件视图(显示管脚锁定情况);单击工具条中的 可显示当前的管脚分配/逻辑分配情况。这样,你可得到与图3-42一样的窗口。
为将clk信号锁定在EPF10K10LC84-4的1号脚上,可先将鼠标移到节点显示区的“clk”左边的 上,按下鼠标左键,可看到鼠标显示符下有一个灰色的矩形框。此时,继续按着鼠标左键,拖动鼠标至视图区中1号管脚的空白矩形处如图1-43a所示,松开左键即可完成信号clk的人工管脚锁定如图3-43b所示。按上述方法分别将其他信号按下表锁定管脚:
| 信号名 | 管脚号 | 对应器件名称 |
| clk | 1 | 时钟信号CP1 |
| clear | 69 | 数据开关K17 |
| en | 54 | 数据开关K1 |
| q0 | 27 | 输出发光二极管L1 |
| q1 | 28 | 输出发光二极管L2 |
| q2 | 29 | 输出发光二极管L3 |
| q3 | 30 | 输出发光二极管L4 |
| cout | 35 | 输出发光二极管L5 |
图3-44 锁定管脚编译后的设计文件
重新编译好后,再重新进行项目校验(时序仿真),若正确,可进行下一步:器件编程/配置。
对于管脚锁定也可以采用如下方法,从“Assign”菜单中选择“Pin/location/chip”,打开图1-45所示的对话框。
图3-45 引脚锁定对话框
a、在“node name”区,填上信号名,如“clk”;
b、在“pin”区,填上管脚号,如“1”;
c、在“pin type”区选择信号输入/输出类型,对于信号“clk”选择“输入”类型;
d、此时,按钮“Add”变亮,单击之,可将信号“clk”锁定在1号管脚上。
e、重复上述步骤,可将所有信号锁定好。
如果想删除或改变一个锁定,可在“Existing Pin/location/Chip Assignments”区选中需要删除或改变锁定的信号,利用“Delete”和“Change”按钮可对该信号的锁定进行删除或更改。
1.4.5器件编程/配置:
在通过项目编译后可生成文件*.sof用于下载。在Altera器件中,一类为MAX系列,另一类为FLEX系列。其中MAX系列为CPLD结构,编程信息以EEPROM方式保存,故对这类器件的下载称为编程;FLEX系列有些类似于FPGA,其逻辑块LE及内部互连信息都是通过芯片内部的存储器单元阵列完成的,这些存储器单元阵列可由配置程序装入,存储器单元阵列采用SRAM方式,对这类器件的下载称为配置。因为MAX系列编程信息以EEPROM方式保存,FLEX系列的配置信息采用SRAM方式保存,所以系统掉电后,MAX系列编程信息不丢失,而FLEX系列的配置信息会丢失,需每次系统上电后重新配置。
在我们例子中使用的是EPF10K10LC84-4,为FLEX系列。下面我们对其进行配置:
a、将下载电缆一端插入LPT1(并行口,打印机口),另一端插入系统板,打开系统板电源;
b、从“Max+plusII”菜单下选择“Programmer”,可打开如图3-46所示的对话框;
图3-46 Programmer对话框
c、单击按钮“Configure”即可完成配置。
若第一次运行上述对话框所有按钮皆为灰色,可从“Options”菜单下选择“Hardware setup”对话框,如图3-47所示。
从此下拉框中选择“ByteBlasterMV”
图3-47 Hardware setup对话框
在“Hardware Type”下拉框中选择“ByteBlasterMV”,单击“OK”即可。
到目前为止,我们已完成一个完整设计。作为练习,可使用74160或74161设计一个模为9的计数器,锁定管脚到数码管SM8上显示。然后,用两片74160设计一个模为60的8421BCD码计数器。
第五节 工具条和常用菜单选项说明
Max+plusII软件为不同的操作阶段提供了不同的工具条,它指明用户当前可以完成的操作,这方便了软件的使用。Max+plusII的工具条中关于文件操作,编辑等的工具条与Windows下的标准一样。并且当你把鼠标移动到工具条某一项上时,在窗口下面可看到该工具按钮的功能提示。下面简单介绍这些工具条的功能。其中大部分工具条的功能前面我们已经从菜单角度提到过。下图为常用工具条:
其中:
第一个等同与菜单File\\New,(即菜单“File”下的“New”项)可打开新建设计输入文件类型对话框;其他分别为打开一个文件;存盘;打印;剪切;复制;取消上次操作。
帮助选择功能。鼠标单击后,会变为此形状,处于帮助选择状态。此时,用鼠标左键
单击某一对象,可获得此对象的帮助主题。例如,单击74161的符号,可获得关于74161的帮助:74161的功能表。
分别打开编译器和模拟器,同菜单命令:Max+plusII/Compiler和Max+plusII /
Simulator。
打开时序分析器,可进行时序分析,同菜单命令:Max+plusII/Timing Analyzer。时序分析器可进行如下3个方面的分析:
Delay Matrix: 输入/输出间的延迟;
Setup/Hold Matrix:触发器的建立/保持时间;
Registered performance:寄存器的性能分析,可获得最坏的信号路径,系统工作频率等信息。
在单击 后,可打开如图3-48所示的时序分析器。此时,可在菜单Analysis下切换上述三个方面的分析,也可通过工具条切换。此时,在时序分析器上单击“Start”按钮即可进行Delay Matrix分析。对于我们的设计(选用器件EPF10K10LC84-4),从clk上升沿到q0的延时为12.4ns。(若选用器件EPF10K10LC84-3,则该值为9.4ns)。
若在图3-48中菜单“Analysis ”下选择“Registered performance”,或单击工具条最右边按钮,可进行寄存器的性能分析。单击“Start”开始分析,可得图3-49。
这三个菜单选项与工具条中三个按钮功能对应:
选择时序分析3个方面之一进行分析
图3-48 时序分析器
打开平面布置图编辑器窗口。同菜单命令Max+plusII\\Floorplan Editor即“Max+plus菜单下“Floorplan Editor”。
打开编程/下载窗口,同“Max+plusII”菜单下“Programmer”。
分别为:
指定项目名,即打开一个项目,同File/Project/Name;
将当前文件指定为项目,同File/Project/Set project to Current File;
打开项目的顶层文件,同File/Hierarchy Project Top;
前面提到过,编译器是对项目进行编译,因此,若先建设计文件,必须要将此文件指定为项目,才能对其进行编译。因为,需要项目进行设计层次,编译信息等的管理。
分别为:保存所有打开的文件,并对当前项目进行语法检查File/Project/Save & check;.保存所有打开的文件,并对当前项目进行编译,同File/Project/Save & compile;保存打开的模拟器输入文件,并对当前项目进行模拟,同File/Project/Save & simulate;
延时最长路径
图3-49 寄存器的性能分析
打开层次管理窗口,可看到当前项目的层次关系,如图3-50所示:
图3-50 项目的层次显示窗口
他们对应菜单“Utilities”下的子菜单项,可进行字符搜索;替换;当前文件/当前项目中搜索节点(node),符号(Symbol)等。
用于改变字体及其大小。
第六节 图形的层次化设计及BUS使用
1.6.1 层次化设计
数字系统设计的一般方法是采用自顶向下的层次化设计。在Max+plusII,可利用层次化设计方法来实现自顶向下的设计。一般在电路的具体实现时先组建低层设计,然后进行顶层设计。下面以图形输入为例,看一下层次设计的过程。
题目:以前面设计的模为60,12的计数器建立一个时,分,秒的时钟(小时项不是BCD码)。
(1)、先完成模为12计数器的设计,如图3-23;
(2)、执行菜单“File”下“Create Default Symbol”,可生成符号“cntm12”,即将我们自己设计的模为12的计数器编译成库中的一个元件;
(3)、建立另一个图形设计文件“cntm60.gdf”,实现模为60的计数器,如图3-51。可先将此文件设为项目,对其进行编译,仿真来确保设计正确;
图3-51 模为60 的计数器的图形设计文件
在图3-51中为连线命了名,相同名字的导线代表它们在电气上是相连的。如“rco”。为了给导线命名,可先用鼠标左键单击要命名的连线,连线会变为红色,并有闪烁的黑点,此时键入文字即可为连线命名。
(4)、完成模为60 的计数器设计后,采用步骤2,生成符号“cntm60”;
(5)、建立顶层设计文件“clock.gdf”:
a.建立一个新的图形文件,保存为“clock.gdf”;
b.将其指定为项目文件(菜单“File”下“Project/Set project to Current File”项);
c.在“clock.gdf”的空白处(图形编辑区)双击鼠标左键可打开“Enter symbol”对话框来选择需要输入的元件,此时看到它与图3-18稍有不同:在元件列表区可看到我们刚才生成的两个元件cntm12和cntm60,如图3-52所示。
底层设计构成的元件
图3-52 输入元件对话框
d.调入cntm12一次,cntm60两次,经适当连接构成顶层设计文件,如图3-53所示。在图3-53中,双击元件cntm60,可打开底层设计文件“cntm60.gdf”。
(6)、对顶层设计文件“clock.gdf”构成的项目”clock”进行编译,仿真,最后配置完成此设计。
现在,我们完成了整个设计,此时,可通过工具条中或菜单“Max+plusII”下“Hierarchy Display” 的选项打开一个窗口(如图3-54所示)。在其中可看到最顶层“clock.gdf”调用了一个cntm12和两个cntm60,而cntm12和cntm60又各自调用了一个74161,两个
74160。双击任何一个小图标,可打开相应文件。其中“rpt”文件,即“clock.rpt”文件,
从此文件可获得关于设计的管脚的锁定信息、逻辑单元内连情况、资源消耗及设计方程等其他信息。
图3-53 clock.gdf文件
图3-54 项目clock的层次结构
在图3-53中,分,秒的输出信号共有14个,为方便,此处使用了“BUS”,如用s[6..0]代替7个输出。
1.6.2 BUS使用
此处BUS是个泛指,它有多个信号线组成。在此主要说明采用BUS可使设计清楚易读,并且可减轻设计中重复连线的负担,此外,利用BUS可方便地在波形窗口中观测仿真结果。
现在回到底层文件“cntm60.gdf”,将输出符号作如图3-55的替换:
图3-55 Cntm60.gdf文件中输出符号的替换
然后重新将“cntm60”生成符号,替换掉原来的符号。回到顶层设计文件“clock.gdf”中,执行菜单命令“symbol/update symbol”,出现如图3-56对话框:
选择第二项,更新所有符号。“clock.gdf”文件如图3-57。整理连线并重命名,得图3-58。
图3-56 Update Symbol对话框
图3-57 clock.gdf文件
图3-58 clock.gdf文件
其中粗线所示即为BUS,名称为s[3..0]代表由s3, s2, s1, s0共四根线组成。画BUS,一种是从含有BUS的器件直接引出;另一种方法是在单线上单击鼠标右键,在Line Style中选择粗线,即可生成BUS,然后可用鼠标左键单击此线,此时线变为红色,输入文字即可为此BUS命名。
可以直接使用BUS中任一个信号,也可对BUS命名时,使用多个单信号名组合而成。如下图3-59中,aa对应 qh中最高位;bb对应中间一位;bf对应最低位。
图3-59 对BUS命名的说明
第七节 语言描述输入法
采用HDL设计,可提高开发速度,设计易读。MAX+PLUS II支持 AHDL语言(the Altera Hardware Description Language),VHDL,Verilog HDL 等语言输入。其设计过程与图形方法基本相同,仅在开始时建立文本文件。
例:
·使用VHDL设计模为60的8421BCD计数器
选择File/New出现设计输入文件选择对话框,选择Text Editor File。
输入如下文本:
-- A asynchronous reset;;enable up; 8421BCD counter
-- module=60;
library ieee;
use ieee.std_logic_11.all;
use ieee.std_logic_unsigned.all;
ENTITY cntm60v IS
PORT
( en : IN std_logic;
clear : IN std_logic;
clk : IN std_logic;
cout : out std_logic;
qh : buffer std_logic_vector(3 downto 0);
ql : buffer std_logic_vector(3 downto 0)
);
END cntm60v;
ARCHITECTURE behave OF cntm60v IS
BEGIN
cout<='1' when (qh="0101" and ql="1001" and en='1') else '0';
PROCESS (clk,clear)
BEGIN
IF(clear='0') THEN
qh<="0000";
ql<="0000";
ELSIF (clk'EVENT AND clk = '1') THEN
if(en='1') then
if (ql=9) then
ql<="0000";
if(qh=5) then
qh<="0000";
else
qh<=qh+1;
end if;
else
ql<=ql+1;
end if;
end if; --end if(en)
END IF; --end if clear
END PROCESS;
END behave;
此文件保存为cntm60v.vhd。注意保存时一定要选择vhd的文件后缀且文件名必须与实体名相同。
将此文件设为当前项目(File/Project/Set Project to Current File)后编译,之后建立模拟文件cntm60v.scf来仿真此计数器,下载等。
对于Verilog HDL,过程同VHDL,仅在存盘时其后缀名为“.v”。
第八节 混合设计输入
由HDL设计的电路也可生成一个元件,然后在图形中调用,即可实现混合设计。如将刚才顶层设计文件“clock.gdf”中由图形实现的cntm60换为由VHDL实现的cntm60v,即完成VHDL与图形的混合设计。这时顶层文件如图3-60所示:
图3-60 混合设计
此时,通过工具条中的 或菜单“Max+plusII”下“Hierarchy Display” 窗口,可看到此时的层次结构中有两个VHDL构成的低层,整个层次结构复杂多了。
图3-61 输入LPM元件(符号)选择对话框
第九节 使用LPM及FLEX10K中的RAM
1.9.1 LPM(可调参数元件)使用
Max+plusII 中为增加元件库的灵活性,为一些常用功能模块提供了参数化元件,这些元件的规模及具体功能可有用户直接指定。如同可编程元件。这类元件的使用同其他元件类似,仅要求用户按自己需要设置一些具体参数。
此处以使用可调参数元件lpm_counter直接构成一个模为12,具有异步清零,计数使能功能的计数器为例讲述参数化元件的使用。
1、调入参数化元件lpm_counter:
首先建立一个图形输入文件“cntm12l.gdf”,在图形编辑器中,双击空白处,打开元件输入对话框,如图3-61所示:
在可变参数库mega_lpm中选择符号lpm_counter,见图3-54。可调参数元件lpm_counter 是一个二进制计数器,可以实现加,减或加/减计数,可以选择同步或异步清零/置数功能。我们用它实现模为12,具有异步清零,计数使能功能的计数器。
2. 按需要设置lpm_counter的具体参数:
3. 在图3-62中单击按钮“OK”后,出现如下用于具体参数设置的对话框.
在这里,我们仅需计数器具有异步清零,计数使能功能,因此在“Ports”区,选择使用“aclr cnt_en clock q[LPM_WIDTH-1..0]”,其他信号选择不用,即“Unused”。为实现这一步,只要在“Ports”区的“Name”下点中某信号,然后在“Port Status”区选择“Used”或“Unused”即可。
在“Parameters”区的“Name”下面选中一具体参数,如“LPM_MODULUS”,其代表计数器的模值,这时“LPM_MODULUS”会出现在“Parameters Name”旁的编辑行中,然后在“Parameters Value”旁的编辑区添上“12”,单击按钮“Change”即可完成此参数设置。按同样步骤,将“LPM_WIDTH” 设为4,代表四位计数器。
图3-62 设置LPM元件(符号)具体参数对话框
注:单击“Help on LPM_Counter”按钮可获得所有关于lpm_counter的信息:每个参数含义,取值等。
设置好后按“OK”确定,这时在图形编辑区出现刚才所定制的计数器符号,如图3-63所示。
具体参数区: 若想改变此参数,只需双击该区,进入图1- 所示对话框,重新设置参数
符号
图3-63 指定具体参数后的LPM_COUNTER
4.加上具体输入输出管脚、编译、器件选择、管脚锁定、仿真、配置,最后完成该设计。注意,图中“q[]”的宽度为4,因此输出信号宽度也要为4,如qcnt[3..0];qout[3..0]等。
1.9.2 Flex10k中RAM的使用
在Altera的Flex10k 系列器件中,含有内部RAM。在Flex10k10有三块RAM,每块大小为2K位,可构成2048×1,1024×2,512×4,256×8四种类型RAM/ROM中任意一种。此处演示一下其内部RAM的使用。我们使用LPM_ROM元件,利用内部一块RAM构成一个28×8的一个ROM用于存放九九乘法表,利用查表方法完成一位BCD码乘法器功能。
ROM
首先在图形编辑器中,双击空白处,在可变参数库mega_lpm中选择符号lpm_rom,如图3-所示。
图3- 输入LPM元件(符号)选择对话框
单击“OK”确定后,出现用于具体参数设置的对话框(图3-65)。
具体设置:Used: address[LPM_WIDTHAD-1..0]; q[LPM_WIDTH-1..0]
Unused:其他
参数值:
LPM_ADDRESS_控制: “UNREGISTERED
LPM_FILE: “MULTI4.MIF”
LPM_NUMWORDS: 256 存储单元数
LPM_WIDTH: 8 数据线宽度
LPM_WIDTHAD: 8 地址线宽度
其中“LPM_FILE”的值“MULTI4.MIF”是一个文件,它保存了九九乘法表。用于初始化ROM,此处采用mif格式(见图3-65),输入此数据文件名LPM_FILE="multi4.mif",注意不要漏掉双引号。
完成设置后,单击“OK”,加上输入输出引脚,如图3-66。然后即可编译,仿真等。
图3-65 设置LPM元件(符号)具体参数对话框
图3-66 multi4.gdf
-- multi4.mif文件(--后为注释)
-- MAX+plus II - generated Memory Initialization File
WIDTH = 8; --宽度,即数据线为8位
DEPTH = 256; --深度,即有256个存储单元,也即8根地址线
ADDRESS_RADIX = HEX; --以16进制显示
DATA_RADIX = HEX;
CONTENT BEGIN
0 : 00; --代表0×0=0
1 : 00; --代表0×1=0
2 : 00; --代表0×2=0
3 : 00; --代表0×3=0
…. --(省略)
20 : 00; --代表2×0=0
21 : 02; --代表2×1=2
22 : 04; --代表2×2=4
23 : 06; --代表2×3=6
24 : 08;
25 : 10;
26 : 12;
……
94 : 36;
95 : 45;
96 : 54;
97 : 63;
98 : 72; --代表9×8=72
99 : 81;
……
ff : 00; --对于BCD码:A,B,C,D,E,F都是无关项。
END;
multi4.mif文件可用文本编辑器建立,也可在初始化菜单中建立。在对multi4编译后,打开Simulator窗口,选Initialize/Initial Memory出现下面如图3-67所示的窗口:
value区
3-67 ROM初始化窗口
在value区输入对应存储单元的值,即可模拟。也可为以后使用此值方便,可选用Export File 将其保存为multi4.mif,建立起初始化文件multi4.mif。
第十节 常见错误及处理方法
对于编译遇到的大多数错误,Max+plusII不仅给出错误提示还可以将错误定位。下面以常见错误但不易定位或排除的例子讲述如何错误定位及排除办法。
将输出短接:
回到原来“clock.gdf”文件,若将cntm60的cout与cntm12的h0连接在一起,如图3-68所示:
图3-68 输出短接后的clock.gdf
将其编译,发现如图3-69所示的两条错误信息:
图3-69 错误信息提示
错误信息告诉三态驱动有误,但我们设计中并没有用到三态门。实际上,这是错误定位不明确,但考虑到,三态门是允许输出接在一起的,此错误信息还是恰当的。为找出错误之处,双击第一条错误信息,显示如图3-70所示。
可看到,错误定位在f74161.gdf的一个触发器上,好象与我们设计无关。
使用菜单“file”下“hierarchy”的“UP”回到“f74161.gdf”上一层“74161.tdf”;继续使用“file”下“hierarchy”的“UP”回到“74161.tdf”上一层“cntm12.gdf”;
再回到“cntm12.gdf”的上一层,可发现错误被定位在符号“cntm12”上,此时应能找出错误。
在实际定位错误时,菜单“file”下“hierarchy”的“UP”/“DOWN”操作是很有用的。
图3-70 错误定位在f74161.gdf的一个触发器上
附录4 模块布局图
计算机组成原理实验书
周 勇 编
计 算 机 学 院
