计算机系统结构实验 3.1 微程序版CPU 赖晓铮_第1页
计算机系统结构实验 3.1 微程序版CPU 赖晓铮_第2页
计算机系统结构实验 3.1 微程序版CPU 赖晓铮_第3页
计算机系统结构实验 3.1 微程序版CPU 赖晓铮_第4页
计算机系统结构实验 3.1 微程序版CPU 赖晓铮_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计算机系统结构 实验系列,一、微程序版CPU 二、硬布线版CPU 三、流水线版CPU 四、嵌套中断CPU,赖晓铮 博士 华南理工大学 QQ: 68046508,(一)微程序版CPU 实验,实验内容: 设计一个微程序版CPU,包括微程序控制器、运算器、存储 器、寄存器堆及外部IO接口。定义一套较完备的机器指令集,编写每条机器指令对应的微程序,在CPU电路上运行基于上述机器指令集的机器语言程序,并且用汇编助记符加以注释。,实验目的: 掌握基于微程序控制器的CPU结构,了解CPU中断工作机制。 熟悉CPU微指令设计,掌握机器指令的微程序实现方法。,微程序版CPU 电路图,微程序版CPU架构,CPU指

2、令集(OP码表),一、系统指令:,二、寄存器及I/O操作指令:,三、存储器及堆栈操作指令:,四、跳转系列指令:,五、算术逻辑运算指令:,五、算术逻辑运算指令:,初始化过程 时钟信号CLK接手动开关MANUAL=0,启动仿真,使能复位信号#RESET=0; 手动按钮MANUAL开关“010”,然后令信号#RESET=1. 注:初始化完成后,若时钟信号CLK继续接开关MANUAL,则CPU进入手动模式,手动MANUAL开关,生成时钟信号CLK,程序单步执行;若时钟信号CLK接信号源AUTO-CLK(主频10Hz),则CPU进入自动模式,程序自动运行,直到HLT指令的“断点”处暂停。,重启过程(跳出

3、“断点”) 时钟信号CLK接开关MANUAL=0,手动令复位信号端#RESET的状态“101”变化,即重启完成,跳出“断点”继续执行 。 注:跳出“断点”后,CPU进入HLT指令的后续下一条指令的取指周期。,实验步骤(顺序结构程序): 1) 在微程序版CPU项目工程的子文件夹PROGRAMS里,存放着机器指令的示例源程序(asm文件)。除了JS、SOP_JZ和INT_IRET三个源程序外,其他源程序都是顺序结构的程序。 2) 编译ADD指令示例程序ADD.asm,生成hex文件烧写到CPU的存储器ROM,如后页所示。(编译和烧写asm文件的方法参见“2.6存储器实验”) 3) 手动执行程序,对

4、照ADD指令流程图及其微指令代码表,观察每次手动单步执行结果,记录寄存器AR、IR、PC、通用寄存器Rx及总线BUS上的数据变化。 4) 自动运行程序,采用HLT指令在程序需要调试的位置设置“断点”,观察“断点”暂停时刻,寄存器AR、IR、PC、通用寄存器Rx及总线BUS上的数据(注意:增加HLT指令“断点”会出现跳转指令的目标地址偏移问题)。 5) 参照上述过程,编译、烧写、手动、或自动运行在文件夹PROGRAMS中(除了JS和SOP_JZ外)所有机器指令示例程序。,ADD,实验步骤(分支结构程序): 1) 条件跳转指令验证程序JS是典型的分支结构程序,其功能类似于汇编语言的“CMP”语句,

5、实现了比较寄存器R0和R1所存数据的大小,输出较大的数据到IO端口外挂设备(数码显示管),代码如后页所示: 2) 编译、烧写、自动运行JS源程序。观察程序自动运行过程中两个“断点”的暂停时刻,寄存器R0和R1的数据变化。 3) 修改JS源程序,赋予R0和R1不同大小的值,记录寄存器R0和R1在程序运行过程中的数据变化,并且观察IO接口外挂的数码管显示。 4) 请问本程序中的ADD指令起什么作用?如果要求比较的过程不能改动R0和R1的值,那JS源程序需要如何修改? 5) 编译、执行后页所示的源程序ADD0_SUB0.asm。试问0+0=0和0-0=0,为何两个运算后执行JC的结果不一致?(一个跳

6、转,另一个不跳转),JS,ADD0_SUB0,实验步骤(循环结构程序): 1) 单操作数运算指令验证程序SOP_JZ是典型的循环结构程序,其功能类似于汇编语言的“LOOP”语句,实现了“1+2+ +9+10”的连续十次相加求和,代码如后页所示。 2) 编译、烧写、自动运行程序SOP_JZ。观察自动运行过程中的“断点”暂停时刻,寄存器R0、R1和R2的数据变化。 3) 请问R0和R1总共循环相加了几次?为何统计次数的R2=09?最后R0输出的结果是多少?“THR R2” 指令执行的意义是什么?能否只使用两个通用寄存器完成连续相加求和的任务?如果可以,程序要如何修改?,SOP_JZ,实验步骤(中断

7、程序): 1) INT_IRET是基于中断向量二次跳转实现的单级中断程序,主程序功能是寄存器R0的数值累加,而中断子程序则是显示中断时刻R0数值并且清零。代码如后页所示: 2) 编译、烧写、自动运行中断程序INT_IRET,随机触发INTERRUPT按钮(模拟外部中断),观察R0的变化。 3) 在程序中设置HLT“断点”,在“断点”暂停时刻,信号CLK改用手动单步执行,触发INTERRUPT按钮,模拟外部中断,观测记录中断处理过程中,寄存器PC、BP_PC、PSW、BP_PSW及总线BUS的变化。 4) 在本实验中,中断出现会令寄存器R0清零,改变主程序的参数。因为中断是随机发生的,不确定中断

8、发生时刻主程序运行的位置。所以,应该尽量使中断子程序和主程序的参数(主要是寄存器)互相独立。请问在寄存器资源有限情况下,可以采用什么方法实现?,INT_IRET,思考题: 中断返回指令IRET只能在中断子程序出现,不允许在主程序使用。请说明原因,并且设计一个硬件电路的保护机制:若在主程序中出现IRET指令,则CPU不执行打入PC的操作,避免系统崩溃? 可否修改硬件电路和微指令列表,只用一个CPU周期实现微 程序版CPU的取指周期和中断处理周期? (提示:拆分独立的数据存储器ROM/RAM和程序存储器PROGRAM,数据存储器的地址寄存器仍为AR,程序计数器PC则作为程序存储器的地址寄存器,不再

9、直连到总线BUS。注意,因为取指周期只有一个CPU周期,需要谨慎考虑取指周期末尾PC+1的问题,以及取指周期开头把IR寄存器输出的OP码清零,从而避免影响微地址P1跳转的问题。),(一)微程序版CPU 实验,思考题: 在上述思考题的基础上,可否利用节省出来的空闲微指令地址安排新的微指令或增加指令功能?例如使OUT/OUTA指令既可以输出通用寄存器Rx内容(单字节指令),也可以输出立即数IMM(双字节指令),从而在I/O端口的操作中减少对寄存器资源的占用。,(一)微程序版CPU 实验,微程序版CPU组成原理,时序电路(CLOCK) 微程序控制器 微程序流程图(数据通路) 取指周期、中断处理周期及

10、系统指令 寄存器及I/O操作指令 存储器及堆栈操作指令 跳转系列指令 算术逻辑运算系列指令,时序电路图,微程序控制器电路图,控制存储器微指令寄存器微指令译码电路,微命令字段中每一位表示一个微命令:,P字段,S3,S2,S1,S0,M,SOP_EN,SHT_EN,BUS,P1,P3,微地址寄存器地址转移逻辑,微指令代码表,取指周期 中断处理周期 系统指令微程序流程图,存储器(ROM/RAM)和指令寄存器IR,中断触发电路,中断向量表原理,程序计数器PC、“断点”BP_PC和中断向量地址,断点”BP_PSW,微指令代码表,寄存器及IO操作指令的微程序流程图,通用寄存器R0R3,寄存器选择电路,外围设备及IO接口电路,存储器及堆栈操作指令的微程序流程图,存储器及堆栈

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论