计算机组成原理实验报告 - 图文

更新时间:2023-10-24 13:31:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验一 静态随机存取存贮器实验

一. 实验目的

了解静态随机存取存贮器的工作原理;掌握读写存贮器的方法。

二. 实验内容

实验仪的存贮器MEM单元选用一片静态存贮器6116(2K×8bit)存放程序和数据。

CE:片选信号线,低电平有效,实验仪已将该管脚接地。 OE:读信号线,低电平有效。 WE:写信号线,低电平有效。 A0..A10: 地址信号线。 I/O0..I/O7:数据信号线。

CE OE WE 功能 1 × × 不选中6116 0 0 1 读 0 1 0 写 0 0 0 不确定 SRAM6116功能表

存贮器挂在CPU的总线上,CPU通过读写控制逻辑,控制MEM的读写。实验中的读写控制逻辑如下图:

读写控制逻辑

M_nI/O用来选择对MEM还是I/O读写,M_nI/O = 1,选择存贮器MEM;M_nI/O = 0,选择I/O设备。nRD = 0为读操作;nWR = 0为写操作。对MEM、I/O的写脉冲宽度与T2一致;读脉冲宽度与T2+T3一致,T2、T3由CON单元提供。

存贮器实验原理图

存贮器数据信号线与数据总线DBus相连;地址信号线与地址总线ABus相连,6116的高三位地址A10..A8接地,所以其实际容量为256字节。

数据总线DBus、地址总线ABus、控制总线CBus与扩展区单元相连,扩展区单元的数码管、发光二极管上显示对应的数据。

IN单元通过一片74HC245(三态门),连接到内部数据总线iDBus上,分时提供地址、数据。MAR由锁存器(74HC574,锁存写入的地址数据)、三态门(74HC245、控制锁存器中的地址数据是否输出到地址总线上)、8个发光二极管(显示锁存器中的地址数据)组成。

T2、T3由CON单元提供,按一次CON单元的uSTEP键,时序单元发出T1信号;按一次uSTEP键,时序单元发出T2信号;按一次uSTEP键,时序单元发出T3信号;再按一次uSTEP键,时序单元又发出T1信号,……

按一次STEP键,相当于按了三次uSTEP键,依次发出T1、T2、T3信号。 其余信号由开关区单元的拨动开关模拟给出,其中M_nI/O应为高(即对MEM读写操作)电平有效,nRD、nWR、wMAR、nMAROE、IN单元的nCS、nRD都是低电平有效。

三. 实验过程和图片

1、连线说明: CBus单元:M_nIO、nRD、nWR、—— 开关区单元:K15..K12(JP92) nINTA(JP42) 存贮器MEM单元:A0..A7(JP72) —— ABus单元:A00..A07(JP56) 存贮器MEM单元:D0..D7(JP73) —— DBus单元:D0..D7(JP53) 存贮器MEM单元:M_nRD、—— CBus单元:nM_RD、M_nWR(JP71) nM_WR (JP44) MAR单元:D0..D7(JP14) —— iDBus单元:iD0..iD7(JP38) MAR单元:wMAR、nMAROE(JP13) —— 开关区单元:K7、K6(JP96) IN单元:IN0..IN7(JP101) —— iDBus单元:iD0..iD7(JP37) IN单元:nCS、nRD(JP100) —— 开关区单元:K1、K0(JP99) 扩展区单元: JP65 —— ABus单元:A00..A07(JP55) 扩展区单元: JP63 —— DBus单元:D0..D7(JP54) 扩展区单元:JP67 —— CBus单元:nM_RD、nM_WR (JP50) 注意:nINTA(K12)置“1”,使中断响应信号不干扰读写存贮器。 2、打开实验仪电源,按CON单元的nRST按键,复位

3、给6116的00H、01H、02H、03H、04H、05H地址单元写入数据11H、22H、33H、44H、55H、61H。由前面的存贮器实验原理图中可以看出,IN单元的8个拨动开关提供数据和地址,因此先提供地址,具体操作步骤为:(1)禁止对存贮器6116的读写(nWR = 1,nRD = 1);(2)IN单元的拨动开关给出8位地址数据,IN单元的nCS=0、nRD=0,允许IN单元输出; (3)MAR单元的nMAROE = 0,允许MAR中锁存的地址数据输出到地址总线上;wMAR = 0,允许写MAR,按CON单元的STEP键一次,依次发出T1、T2、T3信号,在T3的下降沿,IN单元给出的地址数据锁存到MAR中。再写数据:(1)禁止对存贮器6116的读写(nWR = 1,nRD = 1)、MAR的写(wMAR = 1);(2)IN单元的拨动开关给出8位数据,IN单元的nCS=0、nRD=0,允许IN单元输出;(3)允许对6116写(M_nIO = 1,nRD = 1, nWR = 0),按uSTEP键三次,在T2的下降沿,数据写入6116中。写存贮器的流程图如下(以向00地址单元写入11H为例)

读存储器流程图

如果实验仪、PC联机操作,则可通过软件中的数据通路图来观测实验结果,方法是:打开软件,在星研软件的工具条中选择“存贮器实验”,打开存贮器实验的数据通路图。

写存贮器流程图

4、从6116的00H、01H、02H、03H、04H、05H地址单元读出数据,观察上述各单元中的内容是否与前面写入的一致。与写操作类似,先给出地址,再禁止IN单元输出数据(nRD、nCS至少一个=1),最后进行读操作:(1)使6116处于读状态(M_nIO = 1,nRD = 0, nWR = 1),(2)按uSTEP键三次,在T2、T3信号有效时,6116向数据总线输出数据。读存贮器的流程如下(以从00地址单元读出11H为例):

数据通路图

进行上面的手动操作,点击工具条上单节拍或单周期命令图标,数据通路图会反映当前对存贮器所做的操作,借助于数据通路图,仔细分析对SRAM的读写过程。

四. 实验体会

通过这次实验,我基本掌握了有关静态随机存储器RAM 工作特性及数据的读写方法。这次的实验虽然连线比较简单,但是操作比较复杂,其原理也很丰富。同样的我们在接口串行成功后,进行了实验步骤的操作。根据书本上提供的数据我们进行了输入,并得到了正确的结果。而为了充分验证它,并进一步了解它的原理,我跟组员也进行了一些创新,进行了不同的输入,然后通过书本原理计算结果,发现都与实验结果相同。这让我们更清楚的知道了有关静态随机存储器RAM 工作特性及数据的读写方法,有了很深刻的印象。由于一次一次的实验,我们对某些原来步熟悉的元件也有了一定的认识,知道它某些方面的用途,以及在特定实验中的作用。相信这些对以后的学习和实验都会有很大的帮助。

实验二 系统总线和具有基本输入输出功

能的总线接口实验

一. 实验目的

1.理解总线的概念及其特性;掌握控制总线的功能和应用。

2.掌握中断控制信号线的功能和应用;掌握在系统总线上设计中断控制信号线的方法。

二. 实验内容

由于存储器和输入、输出设备最终是要挂接到外部总线上,所以需要外部总线提供数据信号、地址信号以及控制信号。在该实验平台中,外部总线分为数据总线、地址总线、和控制总线,分别为外设提供上述信号。外部总线和

CPU内总线之间通过三态门连接,同时实现了内外总线的分离和对于数据流向的控制。地址总线可以为外部设备提供地址信号和片选信号。由地址总线的高位进行译码,系统的I/O地址译码原理见下图(在地址总线单元)。

由于使用A6、A7进行译码,I/O地址空间被分为四个区,如表所示: I/O地址译码原理图 A07 A06 00 01 10 11 I/O地址空间分配

CPU通过读写控制逻辑,控制MEM和I/O设备的读写。实验中的读写控制 读写控制逻辑

M_nIO用来选择对MEM还是I/O读写,M_nIO = 1,选择存贮器MEM;M_nIO = 0,选择I/O设备。nRD = 0为读操作;nWR = 0为写操作。对MEM、I/O的写脉冲宽度与T2一致;读脉冲宽度与T2+T3一致,T2、T3由CON单元提供。

在理解读写控制逻辑的基础上我们设计一个总线传输的实验。实验所用总线传输实验框图如下图所示,它将几种不同的设备挂至总线上,有存贮器、输入设备、输出设备、寄存器。这些设备都需要有三态输出控制,按照传输要

片 选 IO_nCE0 IO_nCE1 IO_nCE2 IO_nCE3 地址范围 00-3F 40-7F 80-BF C0-FF 求恰当有序的控制它们,就可实现总线信息传输。

三. 实验过程和图片

1、根据挂在总线上的几个基本部件,设计一个简单的流程: ①输入设备将一个数打入R0寄存器。 ②输入设备将另一个数打入地址寄存器。

③将R0寄存器中的数写入到当前地址的存储器中。

④将当前地址的存储器中的数通过OUT单元用LED数码管显示。 2、连线说明: CBus单元:M_nIO、nRD、nWR、nINTA(JP42) ALU单元:rR0、wR0 ALU单元:IN0..IN7(JP22) MAR单元:nMAROE、—— —— —— —— —— 存贮器MEM单元:A0..A7(JP72) 存贮器MEM单元:D0..D7(JP73) 存贮器MEM单元:M_nRD、M_nWR(JP71) IN单元:IN0..IN7(JP101) IN单元:nRD IN单元:nCS OUT单元:nWR(JP68) OUT单元:nCS —— —— —— —— —— —— —— —— CBus单元:nIO_WR(JP48) 扩展区单元:GND 开关区单元:K11、K10(JP94) iDBusABusDBus单单单元元元:::iD0..iD7(JP38) A00..A07(JP56) D0..D7(JP53) CBus单元:nM_RD、nM_WR (JP44) DBusCBus单单元元::D0..D7(JP52) nIO_RD(JP49) 扩展区单元:GND wMAR(JP13) MAR单元:D0..D7(JP14) iDBus单元:JP37 开关区单元:K5..K12(JP92) 开关区单元:K9、K8 OUT单元:JP69 OUT单元:JP70

—— —— DBus单元:D0..D7(JP54) 扩展区单元:JP65 注意:nINTA(K12)置“1”,使中断响应信号不干扰读写存贮器。

3、具体操作步骤图示如下:

在星研软件的工具条中选择“简单模型机实验”,打开简单模型机实验的数据通路图。

(1)拨动开关区单元开关:M_nIO = 1、nRD = 1、nWR = 1、nINTA = 1、rR0 = 1、wR0 = 1、wMAR = 1;nMAROE = 0(允许地址寄存器MAR输出到地址总线)

(2) 打开实验仪电源

(3)通过输入设备(IN单元)将数据55H写入R0寄存器

将IN单元置01010101,wR0 = 0,允许写寄存器R0,M_nIO = 0、nRD = 0、nWR = 1,点击星研软件“单节拍运行”按扭(运行一个机器周期),观察通路图,T2、T3时刻IN单元输出数据,在T3的下降沿IN单元输出的数据写入R0。

wR0 = 1,结束写R0操作

(4)读R0中数据写入存贮器MEM的15H单元

将IN单元置00010101,wMAR = 0,允许写MAR,M_nIO = 0、nRD = 0、nWR = 1,点击星研软件“单节拍运行”按扭(运行一个机器周期),观察通路图,在T3的下降沿IN单元输出的数据写入地址寄存器MAR。wMAR = 1,结束写MAR操作。

rR0 = 0,允许读寄存器R0;M_nIO = 1、nRD = 1、nWR = 0,允许写存贮器;点击星研软件“单节拍运行”按扭(运行一个机器周期),观察通路图,在T2的时刻完成对存贮器的写入操作。

rR0 = 1, M_nIO = 1、nRD = 1、nWR = 1,结束写MEM操作。 (5)将当前地址的存贮器中数据读出,写入R0寄存器中。

将IN单元置00010101,wMAR = 0,允许写MAR,M_nIO = 0、nRD = 0、nWR = 1,点击星研软件“单节拍运行”按扭(运行一个机器周期),观察通路图,在T3的下降沿IN单元输出的数据写入地址寄存器MAR。wMAR = 1,结束写MAR操作。

wR0 = 0,允许写寄存器R0;M_nIO = 1、nRD = 0、nWR = 1,允许读存贮器;点击星研软件“单节拍运行”按扭(运行一个机器周期),观察通路图,T2、T3时刻MEM单元输出数据,在T3的下降沿MEM单元输出的数据写入R0。 wR0 = 1,M_nIO = 1、nRD = 1、nWR = 1,结束写R0操作。

(6)读R0寄存器,数据写入OUT单元,用数码管显示数据。

rR0 = 0, 允许读寄存器R0;M_nIO = 0、nRD = 1、nWR = 0,允许写I/O设

备;点击星研软件“单节拍运行”按扭(运行一个机器周期),观察通路图,

在T2的下降沿,R0寄存器输出的数据写入OUT单元。rR0 = 1、M_nIO = 1、

nRD = 1、nWR = 1,结束本次操作。

四. 实验体会

1、存储器和输入、输出设备最终是要挂接到外部总线上,因此需要外部总线提供数据信 号、地址信号以及控制信号。 2、外部总线和 CPU 内总线之间通过三态门连接,同时实现了内外总线的分离和对于数据流向的控制。 而地址总线可以为外部设备提供地址信号和片选信号。 3.为了实现对于 MEM 和外设的读写操作,还需要一个读写控制逻辑,使得 CPU 能控制 MEM和 I/O 设备的读写 4、WR=0,RD=1,IOM=0时 E0 灭,表示存储器读功能信号有效。 WR=1,RD=0,IOM=0) 连续按动开关ST,当指示灯显示为 T3 时刻时,E1 灭,表示存储器写功能信号有效。 WR=0,RD=1,IOM=1时,E2 灭,表示 I/O 读功能信号有效。 WR=1,RD=0,IOM=1)时,观察扩展单元数据指示灯,指示灯显示为 T3 时刻时,E3 灭,表示 I/O 写功能信号有效。 5、在接线时为了方便,可将管脚接到 CON 单元闲置的开关上,若开关打到 1,等效于接到VCC;若开关打到0,等效于接到GND。

实验三 具有中断控制功能的总线接口实验&具有DMA控制功能的总线接口实验

一. 实验目的

DMA控制信号线的功能和应用;掌握在系统总线上设计 DMA控制信号线的方法。

二. 实验内容

直接存贮器传送DMA是指将外设的数据不经过CPU直接送入存贮器,或者,从存贮器不经过CPU直接送往外围设备。一次DMA传送只需要执行一个DMA周期,能够满足一些高速外设数据传输的需要。现在流行的ARM类CPU,内部集成有多个DMA控制器,允许SD卡、USB、CAN、串口、AD、DA等与存贮器之间通过DMA方式传输数据,可以大大减少占用CPU的时间。

DMA控制器(简称DMAC)传输数据时,需要占用总线,总线的控制权需要在CPU和DMAC之间切换,这就需要控制总线提供相应的信号,实现这种切换,避免总线竞争。 外设需要DMA传输时,向DMAC提出请求,DMAC通过控制总线HOLD信号向CPU提出DMA请求;CPU在当前总线周期结束时,响应DMA请求:释放总线控制权,发出有效HLDA信号给DMAC;DMAC接受总线控制权,开始DMA传输,传送完毕后,撤销HOLD信号,释放总线控制权;CPU收回总线控制权,同时使HLDA信号失效。

实验原理图

如上图所示,CPU在每个机器周期的T3时刻结束时锁存DMA请求HOLD,如果有DMA请求,生成有效的HLDA信号,(1)锁住CPU时钟信号,使T1、T2、T3均无效,冻住CPU(2)释放控制总线、数据总线、地址总线,外部总线都处于高阻状态;DMAC接受总线控制权,等DMA传输完毕,撤消HOLD信号;CPU在每个时钟周期,检查HOLD信号,监测到无效的HOLD的信号后,(1)CPU输出时钟信号,使CPU可以继续工作(2)收回控制总线、数据总线、地址总线控制权。

在本实验中,检查U36(74HC245,CPU内外数据总线缓冲器)、U37(74HC245,CPU内外地址总线缓冲器)的OE脚,判断CPU是否失去数据总线、地址总线的控制权;通过检查CBus单元的nIO_RD、nIO_WR、nM_RD、nM_WR信号,检查CPU对控制总线的控制权。

三. 实验过程和图片

1、连线说明: CBus单元:JP47(nIO_RD、nIO_WR、nM_RD、nM_WR、HOLD、HLDA) CBus单元:HOLD(JP50)

2、具体操作步骤如下:

(1)打开实验仪电源,将开关区单元的K0置为0,按CON单元的nRST

—— —— 扩展区单元:JP67 开关区单元:K0(JP99) 按键,CBus单元的nIO_RD、nIO_WR、nM_RD、nM_WR、HOLD、HLDA输出“1”、“1”、“1”、“1”、“0”、“0”,前四个信号分别点亮扩展区的DS159、DS160、DS161、DS162指示灯。用万用表测量U36、U37的19脚(OE),应该都是低电平。

(2)将开关区单元的K0(HOLD)置为1,连续按动CON单元的uSTEP键,发现在T3结束时,HLDA信号点亮DS164,表示CPU响应DMA请求,T1、T2、T3均输出无效的低电平信号,再按uSTEP键,也没反应,表示CPU已锁住时钟信号;CBus单元的nIO_RD、nIO_WR、nM_RD、nM_WR对应的DS159、DS160、DS161、DS162指示灯均熄灭,表示这几个控制信号均处于高阻状态(因为扩展区的排针上接有下拉电阻,高阻信号接到这些排针上,变为低电平,所以指示灯熄灭);测量U36、U37的19脚(OE),应该都是高电平,说明CPU与外部总线已隔断。

(3)将开关区单元的K0(HOLD)置为0,撤消DMA请求,按动CON单元的uSTEP键一次,发现HLDA信号对应的指示灯DS164熄灭,表示CPU输出无效的HLDA信号(低电平);T1输出高电平,T2、T3输出低电平信号,表示CPU时钟已开始正常工作;CBus单元的nIO_RD、nIO_WR、nM_RD、nM_WR对应的DS159、DS160、DS161、DS162指示灯点亮,表示CPU已输出这几个控制信号;测量U36、U37的19脚(OE),应该都是低电平,说明CPU已收回外部总线控制权。

四. 实验体会

1.CPU的响应包括两方面: (1)让出总线控制权 (2)将有效的HALD信号加到DMAC上,通知DMAC可以 使用总线进行数据传输。 2.CPU在收到无效的HOLD信号时,一方面使HALD无效,另一方面,重新开始控制总线,实现正常运行。

3.在每个机器周期的T4时刻根据,HOLD信号来判断是否有DMA请求,如果有,则产生有效的HALD信号。 HALD信号一方面锁死CPU的时钟信号,使CPU保持当前状态,等待DMA操作的结束。 另一方面使控制缓冲、数据缓冲、地址缓冲都处于高阻状态,隔断CPU与外总线的联系,将外总线交由DMAC控制。

4、当 HALD 信号无效时,总线上输出的存储器读信号 XMRD 为有效态“0”,当 HALD 信号有效时,总线上输出的存储器 读信号 XMRD 为高阻态。

5、XMRD 为低时,相应的指示灯E0 灭。使用电压表测量数据总线和地址总线左侧的芯片74LS245的使能控制信号(第19脚),发现电压为低,说明数据总线和地址总线与 CPU 连通。

6、按动开关ST,发现控制总线单元的时钟信号指示灯T1——T4保 持不变,说明CPU的时钟被锁死。此时XMRD为高阻态,相应的指示灯E0亮。

二. 实验内容

一. 实验目的

了解运算器的组成结构;掌握运算器的工作原理。

实验四 基本运算器实验

运算器原理图

运算器内部含有三个独立运算部件,分别为算术、逻辑和移位运算部件,要处理的数据存于暂存器A和暂存器 B,三个部件同时接受来自A和B的数据(有些处理器体系结构把移位运算器放于算术和逻辑运算部件之前,如ARM),控制信号S3..S0、CN_I决定哪个部件工作、对操作数进行何种运算,S3..S0通过多路选择开关选择这个部件的结果作为ALU的输出;如果运算影响进位标志FC、零标志FZ、正负标志位FS,在T3状态的下降沿,结果分别锁存到FC、FZ、FS ;

I是中断允许标志位。ALU中所有模块集成在一片 CPLD中。

逻辑运算部件由逻辑门构成,较为简单,后一节有专门的算术运算部件设计实验,在此对这两个部件不再赘述。移位运算采用的是8×8位桶形移位器,这样,可以使所有的移位操作都可以一次完成。下图是一个4×4位桶形移位器

所有的输入通过交叉开关与所有的输出端相连。

如右移2位,第2条对角线(右移2)上的2个交叉开关接通,即第3位(in[3])右移至第1位(out[1]),第2位(in[2])移至第0位(out[0])。

又如右环移1位,第3条对角线(右移1)和第7条对角线(左3,3=4-1)同时有效,即可方便地实现右环移。

逻辑左移/右移只须把没连接的输出位同时充以“0”即可实现;算术右移也只须把没连接的输出位用符号位填充即可。

运算器部件由一片CPLD实现。ALU的输出通过三态门连到CPU内部数据总线(iDBus)上,另外还有指示灯标明进位标志FC、零标志FZ、正负标志FS。请注意:图中T1、T2、T3、nRST已与CON单元相连,其它信号都来自于ALU单元的排针上。

实验仪所有单元的T1、T2、T3、nRST已与控制台(CON)单元的T1、T2、T3、nRst连接,nRst提供复位信号;T1、T2、T3是一个微指令周期的三个节拍,高电平有效,瞬间只有一个信号有效,初始状态T1、T2、T3都是低电平。wA(允许写暂存器A)、wB(允许写暂存器B)、rALU(允许ALU结果输出到内部数据总线(iDBus)上),都是低电平有效。

暂存器A和暂存器B的数据能在 LED灯上实时显示,原理如下图:

进位标志FC、零标志FZ、正负标志FS、内部数据总线 iD7…iD0的显示原理与此类似;B、寄存器R0-3、堆栈寄存器SP、标志寄存器PSW(含FC、FZ、FS、I)共用R_0..R_7八个发光二极管,通过Select按键选择,按键上方的发光二极管指示R_0..R_7显示那个寄存器的值。

ALU功能表 运S3 S2 S1 C功能 算类型 S0 N_I F = A (直通) F = B (直通) F = A + B (或) (FZ) 逻辑运算 F = A * B (与) (FZ) F = A ^ B (异或) (FZ) F = /A (取反) (FZ) F = A 不带进位循环右移0 (FZ) B(取低3位)位 0101 1 F = A 算术右移一位 (FZ) 0 F = A 逻辑右移一位 (FZ) 移0110 F = A 带进位循环右移一(FC,位运算 1 位 FZ) 0 F = A 逻辑左移一位 (FZ) 0111 F = A 带进位循环左移一(FC,1 位 FZ) (FC,0 F = A + B FZ,FS) 1000 (FC,1 F = A + B + FC FZ,FS) (FC,0 F = A - B 算FZ,FS) 1001 术运算 (FC,1 F = A - B - FC FZ,FS) 0 F = A + 1 (FZ) 1010 1 F = NEG A (取补) (FZ) 1011 X F = A - 1 (FZ) 1100 X 置FC = CN_I (FC) 其它 1101 X 置I = CN_I (I) 1110 (保留) 1111 (保留) S3、S2、S1、S0、CN_I为控制信号,FC-进位标志,FZ-零标志,FS-正负标志,I-中断允许标志;表中功能栏内的FC、FZ、FS表示当前运算会影响到该标志。

0000 0000 0001 0010 0011 0100 0 1 X X X X 三. 实验过程和图片

1、连线说明:

ALU单元:S0..S3(JP18) —开关区单元:K20..K23(JP89) — ALU单元:wA、wB、rALU、—开关区单元:K15..K12(JP92) CN_I(JP19) — ALU单元:—扩展区单元:JP62 ALU_D0..ALU_D7(JP25) — ALU单元:IN0..IN7(JP22) —开关区单元:K0..K7(JP97)

— 2、打开实验仪电源,按CON单元的nRST按键,将ALU的A、B、FC、FZ、FS、I清零;如果EXEC键上方指示灯不亮,请按一次EXEC键,点亮指示灯,表示实验仪在运行状态。

3、给暂存器A赋初值 (1)拨动开关区单元的K7..K0开关,形成二进制数01011000(或其它值);指示灯亮,表示该位是?1?,灭为?0?。

(2)拨动开关区单元K15(wA)、K14(wB)、K13(rALU)、K12(CN_I)开关,赋wA=0(允许写A)、wB=1(禁止写B)、rALU=1(不允许ALU输出)、CN_I=0,按CON单元的STEP按键一次,产生一个T1的下降沿,将二进制数01011000写入暂存器A中,ALU单元的A_7…A_0 LED上显示A中的值

4、给暂存器B赋初值 (1)拨动开关区单元的K7..K0开关,形成二进制数10101011(或其它值)。 (2)赋wA=1(禁止写A)、wB=0(允许写B)、rALU=1(不允许ALU输出)、CN_I=0,按CON单元的STEP按键一次,产生一个T2的下降沿,将二进制数10101011写入暂存器B中,ALU单元的R_7…R_0 LED上显示B中的值

5、赋wA=1(禁止写A)、wB=1(禁止写B)、rALU(K10)=0,按uSTEP键,进入T3节拍, 节拍 DS169 DS168 T1、T2、T3无效 0 0 (T1=0、T2=0、T3=0) T1 (T1=1、T2=0、0 1 T3=0) T2 (T1=0、T2=1、1 0 T3=0) T3 (T1=0、T2=0、1 1 T3=1) 说明:1-亮;0-灭 当rALU(K13)=0,如果S3S2S1S0的值是0000时,T2、T3节拍时,允许ALU结果输出;S3S2S1S0的值是其它数值,T3节拍时,允许ALU结果输出,显示于扩展区的二位数码管、DS94..DS101的LED上。

6、根据后边的“运算结果表”,改变K20(S0)、K21(S1)、K22(S2)、K23(S3)、K12(CN_I)的值,观察并记录运算器的输出。例如:S0=0,S1=0,S2=0,S3=0,ALU的D7_D0 = 58H;FC、FZ、FS、I不变。

注意:只有按CON单元的STEP按键一次,产生一个T3的下降沿,ALU才将标志位FC、FZ、FS、I写入标志寄存器PSW中,才能在ALU单元的FZ、FC、FS、I指示灯上看到结果。

如果实验仪、PC联机操作,则可通过软件中的数据通路图来观测实验结果,方法是:打开软件,在星研软件的工具条中选择“运算器实验”,打开运算器实验

的数据通路图。

进行上面的手动操作,点击工具条上单节拍或单周期命令图标,数据通路图会反映当前运算器所做的操作。

数据通路图

重复上述操作,并完成下表。然后改变A、B、CN_I的值,验证 FC、FZ、FS、EI的锁存功能。

运算结果表 运算类型 A B S3 S2 S1 S0 0000 0000 0001 0010 0011 0100 0101 0101 0110 CN_I 结果 ALU=(58) FC=( 0)FZ=( 0) FS=( 0) ALU=(AB) FC=(0 )FZ=(0 ) FS=(0 ) ALU=(FB) FC=( 0)FZ=(0 ) FS=(0 ) ALU=( 08 ) FC=(0 )FZ=( 0) FS=(0 ) ALU=( F3 ) FC=(0 )FZ=( 0) FS=( 0) ALU=(A7 ) FC=(0 )FZ=( 0) FS=( 0) ALU=( 0B ) FC=(0 )FZ=( 0) FS=(0 ) ALU=(2C ) FC=(0 )FZ=( 0) FS=( 0) ALU=( 2C ) FC=( 0)58 58 58 58 58 58 58 移位运算 58 58 AB AB AB AB AB AB AB AB AB 0 1 X X X X 0 1 0 逻辑运算 FZ=(0) FS=( 0) 58 58 AB AB 0110(FC=0) 0110(FC=1) 58 58 58 AB AB AB 0111 0111(FC=0) 0111(FC=1) 58 58 58 AB AB AB 1000 1000(FC=0) 1000(FC=1) 58 算术运算 58 58 AB AB AB 1001 1001(FC=0) 1001(FC=1) 58 58 58 其它 58 58 AB AB AB AB AB 1010 1 1011 1100 1101 X X X ALU=( 2C ) FC=(0 )FZ=( 0) FS=( 0) ALU=( 2C ) FC=(0 )FZ=(0) FS=(0 ) ALU=( B0 ) FC=(0 )FZ=( 0) FS=(0 ) ALU=( B0 ) FC=(0 )FZ=( ) FS=( ) ALU=( B0 ) FC=(0 )FZ=( 0) FS=(0 ) ALU=( 03 ) FC=(1 )FZ=(0 ) FS=( 0) ALU=( 04 ) FC=(1 )FZ=(0 ) FS=(0 ) ALU=( 04 ) FC=(1 )FZ=( 0) FS=( 0) ALU=( AD ) FC=(1 )FZ=( 0) FS=(1 ) ALU=(AC ) FC=(1 )FZ=( 0) FS=( 1) ALU=( AC ) FC=( 1)FZ=( 0) FS=( 1) ALU=(59 ) FC=(0 )FZ=(0 ) FS=( 0) ALU=( 58 ) FC=(0 )FZ=(0 ) FS=(0 ) ALU=(57) FC=(0 )FZ=( 0) FS=( 0) FC=( 00) EI=( 00) 1 0 1 0 1 0 1 0 四. 实验体会

熟悉了整个实验系统的基本结构,了解了该实验装置按功能分成几大区,学会何时操作各种开关、按键。最重要的是通过实验掌握了运算器工作原理,熟悉了算术逻辑运算的运算过程以及控制这种运算的方法,了解了进位对算术与 逻辑运算结果的影响,对时序是如何起作用的没太弄清楚,相信随着后续实验的进行一定会搞清楚的。

实验五 微程序控制器实验

一. 实验目的

(1) 掌握微程序控制器的组成原理。

(2) 掌握微程序的编制、写入,观察微程序的运行过程。

二. 实验内容

微程序设计思想是由剑桥大学的M.V.Wilkes教授首先提出的,为每一条机器指令编写一个微程序,每一个微程序包含一条或几条微指令,每一条微指令对应一个或几个控制各部件动作的微操作指令。然后把这些微程序存到一个控制存贮器中,用寻找用户程序机器指令的方法寻找每个微程序中的微指令。由于这些微指令是以二进制代码形式表示的,每位代表一个控制信号,因此,逐条执行每一条微指令,也就相应地完成了一条机器指令的全部操作;由于控制信号是以二进制代码的形式出现的,因此只要修改微指令的代码,就可改变操作内容,便于调试、修改、甚至增删机器指令,有利于计算机仿真。

微程序控制器原理框图

微程序控制器是严格按照系统时序来工作的,因而时序控制对于控制器的设计是非常重要的,从前面的实验可以很清楚地了解时序电路的工作原理,本实验所用的时序由CON单元来提供,分为三拍T1、T2、T3。

微程序控制器的组成见下图,采用四片6116或2816作为微存贮器,微命令寄存器32位,用四片8D触发器(74HC574)组成。

在取指周期的T2下降沿,读取的8位指令数据锁存到指令寄存器(IR)中;T3时刻,根据IR、状态条件(例如:进位标志位、零标志位等),译码生成该机器指令对应的微地址(该机器指令对应uM的首地址),送入微地址寄存器(uPC);如果不在取指周期,uPC的微地址来自于微指令寄存器的低8位(该机器指令对应的后续微地址);在T3的下降沿,将控制存贮器中输出的微指令锁存到微指令寄存器中。

微程序控制器原理图 CON单元有一组按键,与开关区的拨动开关组合,可用来对存贮器MEM、控制存贮器uM读写操作:EXEC按键上方有一指示灯,复位后,指示灯亮,表示实验仪处于运行状态,STEP键、uSTEP键、iSTEP键、PULSE键有效;按一次EXEC键,实验仪切换到编辑状态,ADDR键、+1键、-1键、uM/M键、nRD键、nWR键有效;再按一次EXEC键,实验仪又切换到运行状态。如果在编辑状态时,使用按键,修改过MEM或uM的地址、数据,从编辑状态切换到运行状态后,请按一次nRST复位键,使实验仪回复初始设置(复位PC、uPC、微程序控制器等)。

以向uM的00H单元中写入44332211为例,对控制存贮器进行写入的具体操作步骤如下:

(1)如果EXEC键上方指示灯熄灭,表示实验仪在uM、MEM编辑状态,转第二步;否则,按一次EXEC键,使EXEC键上方指示灯熄灭

(2)如果uM/M键上方指示灯亮,表示处于uM编辑状态,直接转第三步;否则,按uM/M键一次,使uM/M键上方指示灯点亮

(3)IN单元开关给出uM的首地址(00000000),按一次ADDR键,uPC单元的8个发光二级管全熄灭(1:点亮,0:熄灭)

(4)IN单元开关给出该控存单元数据的低八位(00010001),按一次nWR键,低八位数据写入6116/2816的同时,打入uM7-0对应的锁存器中,uM单元的uM0、uM4灯点亮,uM1-3、uM5-7指示灯熄灭

(5)按一次+1键,准备写该控存单元的15-8位;IN单元开关给出数据

这时用户可以作相应的修改,直到编译文件通过。 4.调试

如果编译、连接正确后,可以开始调试程序。进入调试状态方法有: 执行[ 主菜单 ? 运行 ? 进入调试状态];点击工具条的 执行[ 主菜单 ? 运行 ? 装载DOB、HEX、BIN文件] 进入后的窗口如下:

在信息窗的“装载”视中,显示装载的代码文件,装载的字节数,装载完毕后,显示启始地址,结束地址。这种船坞化的窗口比通常的窗口显示的内容更多,移动非常方便。用鼠标左键点住窗口左边或上方的标题条,移动鼠标,将窗口移到您认为合适的位置;将鼠标移到窗口的边上,鼠标的图标变成可变化窗口时的形状,用鼠标左键点住,移动鼠标,变化一个或一组窗口的大小。 在“存贮窗1”的工具条中选择“微程序”;在星研软件的工具条上“选择实验”下拉框中选择“简单模型机实验”;在信息窗中选择“微程序”标签视。

您可以使用以下命令调试您的程序: 单节拍 单节拍命令,实验仪完成一个节拍工作。 单周期 单周期命令,实验仪完成当前机器周期工作。 单步(功能键F7)

单步执行当前指令,实验仪执行完当前机器指令后停止工作。 连续单步(功能键Ctrl + F7) 连续执行“单步”,用鼠标点击或按任意键后,执行完当前机器指令后停止运行。

全速运行(功能键Ctrl + F10)

从当前地址开始全速运行用户程序。用鼠标点击,执行完当前机器指令后停止运行。

停止运行

终止微机与实验仪之间通信(功能键 ESC)。 刷新 从实验仪读回数据,刷新所有窗口。

节拍频率

可选择3Hz、30Hz、300Hz、3KHz。节拍频率越高,模型机执行越快。

使用各种运行命令,调试机器程序、微程序:

使用单节拍命令,对于每一条微指令,体会系统在T1、T2、T3节拍中各做的工作;对于调试过的微指令,可使用单周期命令,快速运行;对照微程序流程图,观察微地址uPC指示灯是否与流程一致;观察DBus总线、ABus总线,对照数据通路图,分析总线上数据是否正确;微指令显示和实验仪是否一致。 当模型机执行到JMP指令时,观察OUT单元显示的数据是否为IN单元数据的2倍;改变IN单元的值,使用单步命令,点一次,模型机执行一条完整的机器指令,循环运行,从OUT单元显示的数判别程序执行是否正确。 使用运行命令,这时,不再刷新星研软件的各个窗口,模型机在全速执行程序;通过OUT单元判断执行是否正确。点击,模型机执行完当前机器指令后停止运行。星研软件从实验仪读取数据,刷新所有窗口。

四. 实验体会

遇到的问题:数据通路中数据的走向不正确 解决办法:重新连线,重新调试。

本次实验虽然接线上相比第二次要复杂一些,但是通过实验上的操作,充分理解了微指令的取值过程以及执行过程,对整体的流程有了更深刻、更完整的了解,在接线上也有了更强的动手能力和排错能力,在以后的实验中要更加注重理论与实践的结合,将理论应用于实践,从实践中加深对理论的理解。

(00100010),按一次nWR键,15-8数据写入另一片6116/2816的同时,打入uM15-8对应的锁存器中,uM单元的uM9、uM13灯点亮,uM8、uM10-12、uM14-15指示灯熄灭

(6)按一次+1键,准备写该控存单元的23-16位;IN单元开关给出数据(00110011),按一次nWR键,23-16位数据写入另一片6116/2816的同时,打入uM23-16对应的锁存器中,uM单元的uM16、uM17、uM20、uM21灯点亮,uM18、uM19、uM22、uM23指示灯熄灭

(7)按一次+1键,准备写该控存单元的最高8位;IN单元开关给出数据(01000100),按一次nWR键,最高8位数据写入最后一片6116/2816的同时,打入uM31-24对应的锁存器中,uM单元的uM26、uM30灯点亮,uM24-25、uM27-29、uM31指示灯熄灭

如果再按一次+1键,uPC+1,uM单元uPC7-uPC0显示当前地址(00000001)

编辑完成后进行校验。以校验00H单元为例,对于控制存贮器uM进行校验的具体操作步骤如下:

(1)确认EXEC键上方指示灯熄灭;uM/M将上方指示灯点亮 (2)IN单元开关给出uM的首地址(00000000),按一次ADDR键,uPC单元的8个发光二级管全熄灭(1:点亮,0:熄灭)

(3)按一次nRD键,从6116/2816(低八位)读出数据,打入uM7-0对应的锁存器中,uM7-0指示灯显示数据(00010001)

(5)按一次+1键,准备读该控存单元的15-8位;按一次nRD键,从另一片6116/2816(中八位)读出数据,打入uM15-8对应的锁存器中,uM15-8指示灯显示数据(00100010)

(6)按一次+1键,准备读该控存单元的23-16位;按一次nRD键,从另一片6116/2816(高八位)读出数据,打入uM23-16对应的锁存器中,uM23-16指示灯显示数据(00110011)

(6)按一次+1键,准备读该控存单元的31-24位;按一次nRD键,从另一片6116/2816(最高八位)读出数据,打入uM31-24对应的锁存器中,uM31-24指示灯显示数据(01000100)

如果再按一次+1键,uPC+1,uM单元uPC7-uPC0显示当前地址(00000001) 如果按一次-1键,uPC-1,uM单元uPC7-uPC0显示当前地址(00000000);按nRD或nWR键一次,对uM31-24(最高八位)对应的芯片操作;继续按-1键,依次对高八位、中八位、低八位对应的芯片操作;减至低8位后,再按动-1键一次,微地址uPC会自动减一,继续对下一个单元的操作。

如校验的微指令出错,则返回输入操作,修改该单元的数据后再进行校验,直至确认输入的微代码全部准确无误为止,完成对微指令的输入。

微指令字长共 32位,控制位顺序如下表:

微指令格式 位 31 30 29 28 27 26 25 24 23 22 21 信号SP_nrALwPiEnd wA wB wIR rRDi rRi A字段 名 OE U SW 位 20 19 18 17 16 15 14 13 12 11-8 信号CN_rPPC+nMAnPCOnINnWM_nnRD S3..S0 名 I C 1 ROE E TA R IO 位 7-0 信号uM_PC7..uM_PC0 名

A字段 23 22 选择 0 0 NOP 0 1 wRi 1 0 wPC 1 1 wMAR 其中uM_PC7..uM_PC0为8位后续微地址,A为译码字段,由二个控制位译码出多位。

本实验用到的控制位:

wA:写暂存器A。wA低电平,在T1的下降沿,将iDBus上数据写到暂存器A。

wB:写暂存器B。wB低电平,在T2的下降沿,将iDBus上数据写到暂存器B。

wIR:写指令寄存器IR。wIR为低电平,在T2的下降沿,将iDBus上数据写到IR。

rRDi:读通用寄存器。rRDi低电平,在T1时刻,通用寄存器中数据输出到内部数据总线iDBus上。

rRi: 读通用寄存器。rRi低电平,在T2时刻,通用寄存器中数据输出到内部数据总线iDBus上;在T3时刻,如果rALU信号为高电平,通用寄存器中数据也输出到iDBus上。

rALU:允许ALU结果输出到iDBus上。rALU低电平,在T3时刻,ALU的运算结果输出到iDBus上,这时rRi、nRD只在T2时刻有效,T3时刻让出iDBus。

wRi:写通用寄存器。wRi低电平,在T3的下降沿,将iDBus上数据写到通用寄存器中。

CN_I、S3..S0:控制ALU执行何种操作,详细请参阅基本运算器实验 M_nIO nRD nWR 有效期 读0 0 I/O(nIO_RD) 写I/O(nIO 0 1 _WR) 本系统上的指令译码规则: 机器码IR7..IR0 00-7FH 80-9FH A0-DFH 译码输出地址 IR_A7..IR_A0 00001,IR6..IR4 00110, IR4..IR2 00,IR6..IR2,0 1 0 T2,T3(rALU=1) T2 微地址范围 IR_A7..IR_A0 08H-0FH 30H-37H 10H-2FH 说明 B8-BFH译码为1EH E0-EFH 010,IR3..IR0,0 40H-5FH F0-F3H 04H-07H 04H-07H F8-FFH 00111,IR2..IR0 38H-3FH 指令译码电路在IR单元的CPLD中实现 本实验只使用了微控器产生的部分控制信号;除了ALU、通用寄存器R0、指令寄存器IR、指令译码电路外,还要用到IN和OUT单元,由微控器出来的信号M_nIO、nWR和 nRD三个信号控制,所以对这两个单元的读写信号还应先经过译码,其译码原理如下图:

读写控制逻辑

IR单元原理图

OUT单元原理图

R0

扩展区电路(辅助电路)

使用二位数码管显示8位数据 理

同时使用二位数码管、8个发光二极管显示8位数据

使用8个发光二极管最多显示8位数据

本实验安排了四条机器指令,分别为ADD(0000 0000)、IN(1010 1000)、OUT(1010 1100)和HALT(1111 1111),括号中为各指令的二进制代码,指令格式如下: 助记符 机器指令码 说明 IN 1010 1000 IN -> R0

ADD 0000 0000 R0 + R0 -> R0 OUT 1010 1100 R0 -> OUT HALT 1111 1111 停机 实验中机器指令码由开关区的拨动开关手动给出,其它控制信号由uM单元自动产生,为此实验设计的通路图如下:

数据通路图

几条机器指令对应的参考微程序流程图如下图所示。图中一个矩形方框表示一条微指令,方框中的内容为该指令执行的微操作,右上角的数字是该条指令的微地址,右下角的数字是该条指令的后续微地址,所有微地址均用16进制表示。向下的箭头指出了下一条要执行的指令。取指后译码,根据条件使微程序产生分支。

微程序流程图

将全部微程序按微指令格式变成二进制微代码: 地HEX 高八A字21,19-12CN_I S3-S0 uM_PC7..uM_PC0 址 位 段 位 00 6F0ED001 6F 00 0 0 0000 01

08 09 0A 14 16 3F 3B0AF009 5D0AF00A 7E4AF800 7F49C000 7D09A000 7F0AF03F 3B 5D 7E 7F 7D 7F 00 00 01 01 00 00 11101101 0 0 10101111 0 0 10101111 0 0 10101111 0 0 10011100 0 0 10011010 0 0 10101111 二进制微代码表 0000 0000 1000 0000 0000 0000 09 0A 00 00 00 3F

三. 实验过程和图片

uM单元:S0、S1、S2、S3(JP1) uM单元:wA、wB、rALU、CN_I(JP4) uM单元:rRi、wRi uM单元:rRdi uM单元:wIR(JP10) uM单元:M_nIO、nRD、nWR、nINTA(JP2) ALU单元:IN0..7(JP22) ALU单元:ALU_D0..ALU_D7(JP25) ALU单元:iD0..iD7(JP24) IR单元:D0..D7(JP35) IR单元:IR_A0..IR_A7(JP30) IN单元:IN0..IN7(JP101) IN单元:nCS、nRD(JP100) OUT单元:nCS、nWR(JP68) OUT单元:JP69 OUT单元:JP70 DBus单元:D0..D7(JP53) —— —— —— —— —— —— —— —— —— —— —— —— —— —— —— —— —— ALU单元:S0、S1、S2、S3(JP18) ALU单元:wA、wB、rALU、CN_I(JP19) ALU单元:rR0、wR0 ALU单元:rRd0 IR单元:wIR(JP32) CBus单元:M_nIO、nRD、nWR、nINTA(JP42) iDBus单元:iD0..7(JP38) iDBus单元:iD0..7(JP37) iDBus单元:iD0..7(JP36) 开关区单元:K0..K7(JP97) uPC单元:IR_A0..IR_A7(JP12) DBus单元:D0..D7(JP52) CBus单元:IO_nCE0、nIO_RD(JP49) CBus单元:IO_nCE0、nIO_WR(JP48) DBus单元:D0..D7(JP54) 扩展区单元:JP65 扩展区单元:JP63 1、连线说明: 2、打开实验仪电源,按CON单元的nRST按键,复位

对实验程序的写入、校验、运行,分手动、联机两种方式。 (一) 手动方式

(1) 手动对uM进行编程(写)

①如果EXEC键上方指示灯熄灭,表示实验仪在uM、MEM编辑状态,转②;否则,按一次EXEC键,使EXEC键上方指示灯熄灭

②如果uM/M键上方指示灯亮,表示处于uM编辑状态,直接转③;否则,按uM/M键一次,使uM/M键上方指示灯点亮

③IN单元开关给出uM的首地址,按一次ADDR键,地址写入uPC

④IN单元开关给出该控存单元数据的低八位,按一次nWR键,将IN单元的数据写到该单元的低8位;按一次+1键,IN单元给出中八位数据,按一次nWR键,将IN单元的数据写到该单元的中8位;按一次+1键,IN单元给出高八位数据,按一次nWR键,将IN单元的数据写到该单元的高8位;按一次+1键,IN单元给出最高八位数据,按一次nWR键,将IN单元的数据写到该单元的最高8位;按一次+1键,uPC+1,准备写下一单元

⑤重复③、④四步,将微代码表的数据写入6116/2816芯片中。

(2) 手动对uM进行校验(读)

①确认EXEC键上方指示灯熄灭;uM/M键上方指示灯点亮

②IN单元开关给出uM的首地址,按一次ADDR键,地址写入uPC

③按一次nRD键,uM单元的指示灯uM7-uM0显示该单元的低八位数据;按一次+1键,按一次nRD键,uM单元的指示灯uM15-uM8显示该单元的中八位数据;按一次+1键,按一次nRD键,uM单元的指示灯uM23-uM16显示该单元的高八位数据;按一次+1键,按一次nRD键,uM单元的指示灯uM31-uM24显示该单元的最高八位数据;按一次+1键,uPC+1,准备读下一单元

④重复②、③步,完成对微代码的校验。如校验的微指令出错,则返回输入操作,修改该单元的数据后再进行校验,直至确认输入的微代码全部准确无误为止,完成对微指令的输入。

(3) 本机运行

(1)按CON单元的nRST键一次,复位实验仪;如果EXEC键上方指示灯不亮,请按一次EXEC键,点亮指示灯,表示实验仪在运行状态。

(2)在下边的各步操作中,按CON单元的uSTEP按键时,体会系统在T1、T2、T3节拍中各做的工作;如果按一次STEP键,即可单步运行一条微指令;对照微程序流程图,观察微地址uPC指示灯是否与流程一致。

(3)按CON单元的STEP按键,uM单元后续微地址uPC显示为00000001时,置开关区的K7..K0数据为10101000(A8H, IN指令),按uSTEP按键二次,在T2的下降沿,A8H写入IR中,按uSTEP按键一次,在T3时IR单元解析,uPC显示新的地址00010100,置IN单元数据为01010100(54H),连续按uSTEP按键三次,在T3下降沿,将数据54H写入R0;uPC显示01H,说明当前指令已执行完,转回取指操作;开关区的K7..K0给出00000000(00H,ADD指令),该指令将会在下个T2 下降沿,写入IR,下一步,在T1下降沿将R0中数据写入A中,再下一步,在T2下降沿将R0中数据写入B中,再下一步,在T3时刻执行加法,在T3下降沿将结果写入R0中;uPC显示01H,开关区的K7..K0给出10101100(ACH,OUT指令),并继续STEP执行,在uPC显示为01时,观查 OUT单元的显示值是否为 10101000。

(二) 联机方式 (1) 文件格式

星研集成环境软件要求微程序文件的扩展名为PuM,微程序的格式如下:

分号“;”是注释符,从分号开始到该行结束,不影响微程序、机器程序的生成。 如:$uM 5F 7F0AF05F,表示微指令的地址为5FH,微指令值为7FH(最高8位)、0AH(高8位)、F0H(中8位)、5FH(低8位)。

(2) 星研软件的使用

1、运行星研集成环境软件 启动画面如下图:

2、新建源文件

)打开窗口

下面我们建立源文件,执行 [主菜单 ? 文件 ? 新建],(或者点击图标如下:

首先选择存放源文件的目录,输入文件名,注意:文件名后缀必须是“PuM”。本实例文件名为uM.PuM。窗口如下:

按“确定”即可。然后即出现文件编辑窗口:

输入源程序,本实例的源程序如下: $uM 00 6F0ED001 ;取指(MEM->IR)、PC+1 $uM 08 3B0AF009 ;R0->A, uPC=09 $uM 09 5D0AF00A ;R0->B, uPC=0A $uM 0A 7E4AF800 ;A+B->R0, uPC=0 $uM 14 7F49C000 ;IN->R0, uPC=0 $uM 16 7D09A000 ;R0->OUT, uPC=0 $uM 3F 7F0AF03F HALT 输入源程序,如下图:

这样一个源文件就建立好了。 3.编译文件

首先选择一个PuM源文件,然后可以编译文件了。对文件编译,如果没有错误,生成代码文件: 微程序代码文件扩展名为“uDob”。编译、连接文件的方法有如下二种:(1)使用[ 主菜单 ? 项目 ? 编译、连接 ]或[主菜单 ? 项目 ? 重新编译、连接 ]”。(2)点击图标或来“编译、连接”或“重新编译连接”。 “编译连接”与“重新编译、连接”区别:“重新编译、连接”不管源文件是否修改,对源文件编译,如果没有错误,生成代码文件(uDob文件)。编译、连接过程中产生的信息显示在信息窗的“建立”视中。编译没有错误的信息如下:

若有错误则出现如下信息框:

有错误、警告信息,用鼠标左键双击错误、警告信息或将光标移到错误、警告信息上,回车,系统自动打开对应的出错文件,并定位于出错行上。

这时用户可以作相应的修改,直到编译文件通过。

4.调试

如果编译、连接正确后,可以开始调试程序。进入调试状态方法有:

a) 执行[ 主菜单 ? 运行 ? 进入调试状态];或点击工具条的b) 执行[ 主菜单 ? 运行 ? 装载DOB、HEX、BIN文件] 进入后的窗口如下:

在信息窗的“装载”视中,显示装载的代码文件,装载的字节数,装载完毕后,显示启始地址,结束地址。

这种船坞化的窗口比通常的窗口显示的内容更多,移动非常方便。用鼠标左键点住窗口左边或上方的标题条,移动鼠标,将窗口移到您认为合适的位置;将鼠标移到窗口的边上,鼠标的图标变成可变化窗口时的形状,用鼠标左键点住,移动鼠标,变化一个或一组窗口的大小。

在“存贮窗1”的工具条中选择“微程序”;在星研软件的工具条上“选择实验”下拉框中选择“微程序控制器实验”。

您可以使用以下命令调试您的程序:

单节拍

单节拍命令,实验仪完成一个节拍工作。 单周期 单周期命令,实验仪完成当前机器周期工作。

单步(功能键F7)

单步执行当前指令,实验仪执行完当前机器指令后停止工作。

连续单步(功能键Ctrl + F7) 连续执行“单步”,用鼠标点击或按任意键后,执行完当前机器指令后停止运行。 全速运行(功能键Ctrl + F10)

从当前地址开始全速运行用户程序。用鼠标点击,执行完当前机器指令后停止运行。

停止运行

终止微机与实验仪之间通信(功能键 ESC)。 刷新

从实验仪读回数据,刷新所有窗口。

节拍频率

可选择3Hz、30Hz、300Hz、3KHz。节拍频率越高,模型机执行越快。 使用各种运行命令,调试微程序:

点击工具条上(复位)按钮,复位实验仪;点击单节拍命令,uM单元后续微地址uPC显示为00000001时,置开关区的K7..K0数据为10101000(A8H, IN指令),执行单节拍命令,在T2的下降沿,A8H写入IR中,在T3时IR单元解析,uPC显示新的地址00010100,执行单节拍命令一次,在T1时,置IN单元数据为01010100(54H),连续执行单节拍命令,在T3下降沿,将数据54H写入R0;uPC显示01H,说明当前指令已执行完,转回取指操作;开关区的K7..K0给出00000000(00H,ADD指令),该指令将会在下个T2 下降沿,写入IR,下一步,在T1下降沿将R0中数据写入A中,再下一步,在T2下降沿将R0中数据写入B中,再下一步,执行加法,在T3下降沿将结果写入R0中;uPC显示01H,开关区的K7..K0给出10101100(ACH,OUT指令),并继续点击01时,观查 OUT单元的显示值是否为10101000。

单节拍命令执行,在uPC显示为

使用 复位命令,复位实验仪,改变IN单元的值,使用单节拍命令,对于每一条微指令,体会系统在T1、T2、T3节拍中各做的工作;对于调试过的微指令,可使用单周期命令,快速运行;对照微程序流程图,观察微地址uPC指示灯是否与流程一致;按本机运行的顺序给出数据和指令,当模型机执行到HALT指令时,观察OUT单元显示的数据是否为IN单元数据的2倍。

输入微程序的另一种方法:

在存贮器窗的“微程序”中,首先选择一个单元,输入“7F0AF000”,在信息窗的“微存贮器”标签页中同步显示数据,可以按位修改,修改完毕后,点击右边的“修改”,星研软件自动修改uM中该单元的数据,并刷新所有窗口。 通常,设计微程序,使用该方法。

四. 实验体会

在输入完成后,运行的过程中译码器无法正确译码,操作一直都是ADD指令。

原因:接线错误,写微地址的SE5..SE0无法取出正确的微地址以及判别标志p1接线错误, 无法实现地址转移。 解决方法:修正接线。

本次实验相比较上次实验而言有一定的难度,本次实验对我最大的启发是细节的重要性, 只有正确的接线,才有可能做出正确的结果。以后在接线过程中一定要细心再细心,对每一条线都认真核对。

实验六 CPU与简单模型机设计实验

一. 实验目的

(1) 了解并掌握一个基础的CPU的组成原理

(2) 在前几章介绍的各单元电路的基础上,构造一个简单模型计算机 (3) 给简单模型机设计4条机器指令,并编写每条机器指令的微指令,上机调试,掌握整机概念。

二. 实验内容

本节要实现一个简单的CPU,它包含运算器(ALU)、通用寄存器(R0)、程序计数器(PC)、地址寄存器(MAR)、指令寄存器(IR)、微程序控制器(uM)等部件,如下图:

简单CPU原理图

在这个CPU的微程序存贮器(uM)中写入微指令,就可以执行机器指令了。在此CPU的基础上,配置存贮器(用于存放机器指令)、基本的输入输出设备,就可以构建一个简单模型计算机。

本实验在第三章微程序控制器实验的基础上,加上程序计数器(PC)、地址寄存器(MAR)、存贮器MEM。PC由带预置功能的计数器(二片74HC161)、输出到地址总线三态门、输出到内部数据总线iDBus的三态门、PC显示电路组成。按下CON单元的nRst键,可以复位PC;wPC低电平,在T3的下降沿将iDBus上数据写到PC中;PC+1信号高电平,在T3的下降沿,PC+1->PC;rPC有效,在T1、T2时刻,PC数据输出到iDBus上;nPCOE有效,PC数据输出到地址总线上。

程序计数器(PC)原理图

地址寄存器(MAR)原理图

本实验安排了四条机器指令,分别为ADD(0000 0000)、IN(1010 1000)、OUT(1010 1100)和JMP(1110 0111),括号中为各指令的二进制代码,指令格式如下:

助记符 机器指令码 说明 IN 1010 1000 IN -> R0 ADD 0000 0000 R0 + R0 -> R0 OUT 1010 1100 R0 -> OUT 1110 0111 JMP addr8 addr8->PC ******** 无条件跳转指令JMP是双字节指令,11100111是指令码,********是8位二进制地址码。

微程序控制器实验的指令是通过开关区的拨动开关手动给出的,本实验由CPU通过PC单元提供8位地址、控制总线单元CBus提供存贮器读写信号nM_RD、nM_WR,从存贮器MEM单元读取指令并运行。新的数据通路图如下:

数据通路图

在数据通路图中可以看出,在微程序控制器实验的基础上增加了三个部件:MAR、PC、MEM。在微指令中需要增加相应的控制位。 微指令字长共 32位,控制位顺序如下表: 微指令格式 位 31 30 29 28 27 26 25 24 23 22 21 信号SP_nrALwPiEnd wA wB wIR rRDi rRi A字段 名 OE U SW 位 20 19 18 17 16 15 14 13 12 11-8 信号CN_rPPC+nMAnPCOnINnWM_nnRD S3..S0 名 I C 1 ROE E TA R IO 位 7-0 信号uM_PC7..uM_PC0 名

A字段 23 22 选择 0 0 NOP 0 1 wRi 1 0 wPC 1 1 wMAR 其中uM_PC7..uM_PC0为8位后续微地址,A为译码字段,由二个控制位译码出多位。 wA:写暂存器A。wA低电平,在T1的下降沿,将iDBus上数据写到暂存器A。 wB:写暂存器B。wB低电平,在T2的下降沿,将iDBus上数据写到暂存器B。 wIR:写指令寄存器IR。wIR为低电平,在T2的下降沿,将iDBus上数据写到IR。 SP_nOE:允许堆栈输出地址。SP_nOE低电平,在T1、T2、T3时刻,堆栈寄存器SP中数据输出到地址总线上。

rRDi:读通用寄存器。rRDi低电平,在T1时刻,通用寄存器中数据输出到内部数据总线iDBus上。

rRi: 读通用寄存器。rRi低电平,在T2时刻,通用寄存器中数据输出到内部数据总线iDBus上;在T3时刻,如果rALU信号为高电平,通用寄存器中数据也输出到iDBus上。

rALU:允许ALU结果输出到iDBus上。rALU低电平,在T3时刻,ALU的运算结果输出到iDBus上,这时rRi、nRD只在T2时刻有效,T3时刻让出iDBus。 wRi:写通用寄存器。wRi低电平,在T3的下降沿,将iDBus上数据写到通用寄存器中。

wPC:写PC。wPC低电平,在T3的下降沿,将iDBus上数据写到PC中。 wMAR:写地址寄存器MAR。wMAR低电平,在T3的下降沿,将iDBus上数据写到地址寄存器MAR中。

wPSW: 不允许影响标志寄存器PSW。wPSW低电平,在T3的下降沿,将ALU中当前运算结果(对标志位的影响)写入标志寄存器PSW;wPSW高电平,任何时刻,不影响PSW。例如:PUSH指令需要在压栈前,SP堆栈寄存器-1(放到ALU中运算),不允许像DEC(-1)指令一样影响标志位(PSW)。 CN_I、S3..S0:控制ALU执行何种操作,详细请参阅基本运算器实验 rPC:读PC。rPC低电平,在T1、T2时刻,PC数据输出到iDBus上。 PC+1:允许PC+1。PC+1信号高电平,在T3的下降沿,PC+1->PC。

nMAROE:允许MAR输出地址。nMAROE低电平,在T1、T2、T3时刻,MAR中数据输出到地址总线上。

nPCOE: 允许PC输出地址。nPCOE低电平,在T1、T2、T3时刻,PC中数据输出到地址总线上。

注意:nPCOE、nMAROE、SP_nOE三个信号在任意时刻只允许一个信号有效 nINTA:中断响应信号。 M_nIO nRD nWR 有效期 读1 0 1 T2,T3(rALU=1) MEM(nM_RD) 写1 1 0 T2 MEM(nM_WR) 读1 0 1 T2,T3(rALU=1) I/O(nIO_RD) 写I/O(nIO 1 1 0 T2 _WR)

本系统上的指令译码规则: 译码输出地址 微地址范围 机器码IR7..IR0 说明 IR_A7..IR_A0 IR_A7..IR_A0 00-7FH 00001,IR6..IR4 08H-0FH 80-9FH 00110, IR4..IR2 30H-37H B8-BFH译码为A0-DFH 00,IR6..IR2,0 10H-2FH 1EH E0-EFH 010,IR3..IR0,0 40H-5FH F0-F3H 04H-07H 04H-07H F8-FFH 00111,IR2..IR0 38H-3FH 指令译码电路在IR单元的CPLD中实现。 四条机器指令对应的参考微程序流程图如下图所示。取指后译码,使微程序产生分支。

微程序流程图

将全部微程序按微指令格式变成二进制微代码: 地HEX 高八A字21,19-12CN_I 址 位 段 位 00 6F0ED001 6F 00 0 0 11101101 08 3B0AF009 3B 00 0 0 10101111 09 5D0AF00A 5D 00 0 0 10101111 0A 7E4AF800 7E 01 0 0 10101111 14 7F4AC000 7F 01 0 0 10101100 16 7D0AA000 7D 00 0 0 10101010 4E 7F8AD000 7F 10 0 0 10101101 二进制微代码表 地HEX 高八A字21,19-12CN_I 址 位 段 位 00 6F0ED001 6F 00 0 0 11101101 08 3B0AF009 3B 00 0 0 10101111 09 5D0AF00A 5D 00 0 0 10101111 0A 7E4AF800 7E 01 0 0 S3-S0 0000 0000 0000 1000 0000 0000 0000 uM_PC7..uM_PC0 01 09 0A 00 00 00 00 S3-S0 0000 0000 0000 1000 uM_PC7..uM_PC0 01 09 0A 00 14 16 3F 7F49C000 7F 01 00 00 7D09A000 7D 7F0AF03F 7F 10101111 0 10011100 0 10011010 0 10101111 0 0 0 0000 0000 0000 00 00 3F 设计一段机器程序,要求从IN单元读入一个数据,存于R0,将R0和自身相加,结果存于R0,再将R0的值送OUT单元显示。根据要求可以得到如下程序,地址和内容均为二进制数。 地址 内 容 助记符 说明 00000000 1010 1000 ;START:IN R0 ;从IN单元读入数据送

R0

00000001 0000 0000 ; ADD R0,R0 ;R0 + R0 -> R0 00000010 1010 1100 ; OUT R0 ;R0的值送OUT单元显示 00000011 1110 0111 ; JMP START ;跳转至00H地址 00000100 0000 0000

三. 实验过程和图片

1、连线说明: uM单元:S0、S1、S2、S3(JP1) —— ALU单元:S0、S1、S2、S3(JP18) uM单元:wA、wB、rALU、—— ALU单元:wA、wB、rALU、CN_I(JP4) CN_I(JP19) uM单元:rRi、wRi —— ALU单元:rR0、wR0 uM单元:rRdi ALU单元:rRd0 uM单元:wIR(JP10) —— IR单元:wIR(JP32) uM单元:M_nIO、nRD、nWR、—— CBus单元:M_nIO、nRD、nWR、nINTA(JP2) nINTA(JP42) ALU单元:IN0..7(JP22) —— iDBus单元:iD0..7(JP38) ALU单元:—— iDBus单元:iD0..7(JP37) ALU_D0..ALU_D7(JP25) ALU单元:iD0..iD7(JP24) —— iDBus单元:iD0..7(JP36) IR单元:D0..D7(JP35) —— iDBus单元:iD0..7(JP41) IR单元:IR_A0..IR_A7(JP30) —— uPC单元:IR_A0..IR_A7(JP12) IN单元:IN0..IN7(JP101) —— DBus单元:D0..D7(JP52) IN单元:nCS、nRD(JP100) —— CBus单元:IO_nCE0、nIO_RD(JP49) OUT单元:nCS、nWR(JP68) —— CBus单元:IO_nCE0、nIO_WR(JP48) OUT单元:I0..I7(JP69) —— DBus单元:D0..D7(JP54) OUT单元:OUT0..OUT7(JP70) —— 扩展区单元:JP67 MEM单元:A0..A7(JP72) —— ABus单元:A00..A07(JP56) MEM单元:D0..D7(JP73) —— DBus单元:D0..D7(JP53) MEM单元:M_nRD、—— CBus单元:nM_RD、nM_WR(JP44)

本文来源:https://www.bwwdw.com/article/mbc2.html

Top