1、资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。实验十一、 基于重叠和流水线技术的CPU结构实验一、 实验目的: 1. 了解微程序控制器是如何控制模型机运行的, 掌握整机动态工作过程; 2. 掌握重叠和流水线结构的工作原理及实现方法; 3. 定义五条机器指令, 编写相应微程序并具体上机调试。二、 实验设备: EL-JY-II型计算机组成原理实验系统一套, 排线若干。三、 模型机结构: 图11-1 模型机结构框图图中运算器ALU由U7U10四片74LS181构成, 暂存器1由U3、 U4两片74LS273构成, 暂存器2由U5、 U6两片74LS273构成。微控器部分控存由U13U
2、15三片2816构成。除此之外, CPU的其它部分都由EP1K10集成( 其原理见系统介绍部分) 。存储器部分由两片6116构成16位存储器, 地址总线只有低八位有效, 因而其存储空间为00HFFH。输出设备由底板上的四个LED数码管及其译码、 驱动电路构成, 当D-G和W/R均为低电平时将数据总线的数据送入数码管显示。在开关方式下, 输入设备由16位电平开关及两个三态缓冲芯片74LS244构成, 当DIJ-G为低电平时将16位开关状态送上数据总线。在键盘方式或联机方式下, 数据可由键盘或上位机输入, 然后由监控程序直接送上数据总线, 因而外加的数据输入电路能够不用。注: 本系统的数据总线为1
3、6位, 指令、 地址和程序计数器均为8位。当数据总线上的数据打入指令寄存器、 地址寄存器和程序计数器时, 只有低8位有效。四、 工作原理重叠技术的原理为: 程序开始执行时, 先将若干条指令取入一个先进先出( FIFO) 的指令队列。然后在指令译码的同时, 从FIFO队列中取出下一条指令, 打入指令寄存器, 使得”取指令”和”执行指令”具有时空上的并行性。流水线技术是建立在重叠技术的基础上。本实验采用二级流水线结构, 其原理为: 使取指和指令译码同时进行, 当上一条指令执行完成后, 不再进行下一条指令的取指, 而直接进入译码、 执行过程, 如次循环。在本实验中当PC指针为”00000001”时,
4、 先将第一条指令由RAM读出并打入指令寄存器, 然后顺序取出第2、 3、 4、 5条指令的操作码送入FIFO队列。本实验与其它实验不同的是: 本实验指令译码过程中P1测试和P2测试同时有效( 对应于F3字段为”011”) , 以指令寄存器的I7I2作为测试条件, 产生5路分支, 占用5个固定的微地址单元。同时PC指针加1, 并将FIFO队列中的第一个数据( 即下一条指令) 取出打入指令寄存器。当上一条指令执行完成后, 直接返回到译码阶段。以上这些操作均由EP1K10实现, 有兴趣的读者可查看随机工程文件total_2.gdf。 在24位微指令中, 、 、 三个字段的编码方案如表112: F1字
5、段F2字段F3字段15 14 13选择12 11 10选择9 8 7选择0 0 0LDRi0 0 0RAG0 0 0P10 0 1LOAD0 0 1ALU-G0 0 1AR0 1 0LDR20 1 0RCG0 1 0P30 1 1自定义0 1 1自定义0 1 1P1P21 0 0LDR11 0 0RBG1 0 0P21 0 1LAR1 0 1PC-G1 0 1LPC1 1 0LDIR1 1 0299-G1 1 0P 41 1 1无操作1 1 1无操作1 1 1无操作 表112 系统涉及到的微程序流程见图11-2( 图中各方框内为微指令所执行的操作, 方框外的标号为该条微指令所处的八进制微地址)
6、 。当全部微程序流程图设计完毕后, 应将每条微指令代码化, 表11-3即为将图11-2的微程序流程按微指令格式转化而成的微代码表。 图11-2( a) 图11-2( b) 五、 实验参考代码本实验采用的微代码如下: 微地址(八进制)微代码(十六进)00007F9001005B5B02015BD9040029C5059403D910010FD911011F4120005B5221005B5422014FD723005B5A2401CFD82706F3D030FF73D131006EE032011F4133016FDC34017FDD35017FDE36017FDF37017FC2 41005B4
7、8 42005B494502F1D946018FD9510041C4表11-3 实验微指令代码表本实验机器指令代码如下:地址(十六进制) 机器指令(十六进制) 助记符00 0000 01 0048 IN Ax, kIN02 0005 MOV Bx, 01H03 000104 0094 ADD Ax, Bx05 0044 OUT DISP, Ax06 0008 JMP 00H07 0000表11-4 实验机器指令表注: 其中MOV、 JMP为双字长( 32位) , 其余为单字长指令。对于双字长指令, 第一字为操作码, 第二字为操作数; 对于单字长指令只有操作码, 没有操作数。上述所有指令的操作码
8、均为低8位有效, 高八位默认为0。而操作数8位和16位均可。KIN和DISP分别为本系统专用输入、 输出设备。六、 实验连线采用键盘方式时见连线图11-3。( 连线时应按如下方法: 对于横排座, 应使排线插头上的箭头面向自己插在横排座上; 对于竖排座, 应使排线插头上的箭头面向左边插在竖排座上) 。采用开关方式时, 接线作如下改动: 断开控制总线C1C6和F4F1上的接线数据输入电路DIJ1 接 数据总线BD7-BD0数据输入电路DIJ2 接 数据总线BD15-BD8数据输入电路DIJ-G 接 I/O控制电路Y3微控器接口UAJ1 接 控制开关电路UA5-UA0脉冲源及时序电路fin 接 脉冲
9、源及时序电路f/8脉冲源及时序电路T4T1 接 控制总线T4-T1控制开关电路CA1 接 控制总线E4控制开关电路CA2 接 控制总线E5 七、 实验步骤实验前首先将CPU板上的J1-J6跳线均接至EPC2 ON, 然后经过CPU板上JTAG口将total_2.pof文件写入FPGA。将系统关电重启动。、 单片机键盘操作方式实验。1、 写微代码: (1) 将开关K1K2K3K4拨到写状态即K1 off、 K2 on、 K3 off、 K4 off, 其中K1、 K2、 K3在微程序控制电路, K4在24位微代码输入及显示电路上。在监控指示灯滚动显示【CLASS SELECt】状态下按【实验选择
10、】键, 显示【ES-_ _ 】输入11, 按【确认】键, 显示为【ES11】, 再按下【确认】键。(2) 监控显示为【CtL1=_】, 输入1显示【CtL1_1】, 按【确认】。(3) 监控显示【U-Addr】, 此时输入【000000】6位二进制数表示的微地址, 然后按【确认】键, 监控指示灯显示【U_CodE】, 显示这时输入微代码【007F90】, 该微代码是用6位十六进制数来表示前面的24位二进制数, 注意输入微代码的顺序, 先右后左, 按【确认】键则显示【PULSE】, 按【单步】完成一条微代码的输入, 重新显示【U-Addr】提示输入第二条微代码地址。(4) 按照上面的方法输入表1
11、1-3微代码,观察微代码与微地址显示灯的对应关系( 注意输入微代码的顺序是由右至左) 。2.读微代码及校验微代码: (1) 先将开关K1K2K3K4拨到读状态即K1 off、 K2 off、 K3 on、 K4 off, 按【RESET】按钮对单片机复位, 使监控指示灯滚动显示【CLASS SELECt】状态。(2) 按【实验选择】键, 显示【ES-_ _ 】输入11, 按【确认】键, 显示【ES11】。按【确认】键。(3) 监控显示【CtL1=_】时, 输入2, 按【确认】显示【U_Addr】 , 此时输入6位二进制微地址, 进入读代码状态。再按【确认】显示【PULSE】, 此时按【单步】键
12、, 微地址指示灯显示输入的微地址, 同时微代码显示电路上显示该地址对应的微代码, 至此完成一条微指令的读过程。(4) 此时监控显示【U_Addr】, 按上述步骤对照表11-3检查微代码是否有错误, 如有错误, 可按步骤1重新输入微代码。3、 写机器指令(1) 先将K1K2K3K4拨到运行状态即K1 on、 K2 off、 K3 on、 K4 off, 按【RESET】按钮对单片机复位, 使监控指示灯滚动显示【CLASS SELECt】状态。(2) 按【实验选择】键, 显示【ES-_ _ 】输入11, 按【确认】键, 显示【ES11】, 再按【确认】。(3) 监控显示【CtL1=_】,按【取消】
13、键, 监控指示灯显示【CtL2=_】, 输入1显示【CtL2_1】表示进入对机器指令操作状态, 此时拨动CLR清零开关( 在控制开关电路上, 注意对应的JUI应短接) 对地址寄存器、 指令寄存器清零, 清零结果是微地址指示灯和地址指示灯全灭。如不清零则会影响机器指令的输入! ! ! 确定清零后, 按【确认】。(4) 监控显示闪烁的【PULSE】, 按【单步】键, 微地址显示灯显示”010001”时, 再按【单步】, 微地址显示灯显示”010100”, 地址指示灯显示”00000000”, 此时按【确认】键, 监控指示灯显示【data】, 提示输入机器指令”00”或”0000”( 两位或四位十六
14、进制数) ,输入后按【确认】, 显示【PULSE】, 再按【单步】, 微地址显示灯显示”011000”, 数据总线显示灯显示”0000”, 即输入的机器指令。(5) 再连续按【单步】, 当微地址显示灯再次显示”010100”时, 按【确认】输入第二条机器指令。依此规律逐条输入表11-4的机器指令, 输完后, 可连续按【取消】或【RESET】键退出写机器指令状态。注意, 每当微地址显示灯显示”001100”时, 地址指示灯自动加1显示。如输入指令为8位, 则高8位自动变为0。4.读机器指令及校验机器指令: 在监控指示灯显示【CtL2=_】状态下, 输入2, 显示【CtL2_2】, 表示进入读机器
15、指令状态, 按步骤4的方法拨动CLR开关对地址寄存器和指令寄存器进行清零, 然后按【确认】键, 显示【PULSE】, 连续按【单步】键, 微地址显示灯显示从”000000”开始, 然后按”010000”、 ”010010” 、 ”010110”方式循环显示。当微地址灯再次显示为”010000”时, 输出显示数码管上显示写入的机器指令。读的过程注意微地址显示灯, 地址显示灯和数据总线指示灯的对应关系。如果发现机器指令有误, 则需重新输入机器指令。注意: 机器指令存放在RAM里, 掉电丢失, 故断电后需重新输入。5.运行程序在监控指示灯显示【CtL2=_】状态下, 输入3, 显示【CtL2_3】,
16、 表示进入运行机器指令状态, 按步骤4的方法拨动CLR开关对地址寄存器和指令寄存器进行清零, 然后按【确认】键, 显示【run CodE】, 表示运行程序, 能够【单步】运行也能够【全速】运行程序, 观察实验运行结果。6.运行结果 1) 单步运行结果 在监控指示灯显示run code状态下, 连续按单步键, 可单步运行程序。当微地址显示灯显示”100110”时, 按单步, 监控指示灯显示data, 此时输入数据2233, 即被加数, 按确认。再连续按单步, 当微地址显示灯显示”100101”时, 再按单步, 输出显示电路数码管显示结果为2234, 即2233+0001=2234, 同时数据显示灯显示”0100”, 表示结果正确。 2) 全速运行结果在监控指示灯显示run code状态下, 按全速键, 开始自动执行程序。在监控指示灯显示data时输入数据, 按确定键, 程序继续运行, 此时可由数码管显示出运算结果, 与单步运行的结果相同。、 采用开关控制操作方式进行实验读者可参考前述实验自行思考用开关方式的接线和实验过程。八、 实验提示在单步运行状态下, 经过微地址显示灯观察其运行流程, 比较与实验六的不同之处。