- 1、本文档共24页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机系统结构 实验系列 一、微程序版CPU 二、硬布线版CPU 三、流水线版CPU 四、嵌套中断CPU 赖晓铮 博士 华南理工大学 laixz@scut.edu.cn QQ: (四)嵌套中断CPU 实验 实验内容: ● 设计一个嵌套中断的多中断源CPU,在功能和结构上完全兼容前述的微程序版本CPU:数据通路相同,指令体系相同,不同之处在于用硬布线逻辑电路构建的堆栈代替“断点”寄存器,可以“先入后出”的保存指令地址PC和运算器标志位PSW,实现多级中断嵌套。 实验目的: ● 理解堆栈的硬布线逻辑实现方法。 ● 掌握基于堆栈的嵌套中断CPU设计原理。 硬布线逻辑的堆栈电路 入栈时序: 信号push=1且pop=0,移位寄存器74LS194状态{S0,S1}={1,0},进入右移模式 T上升沿时刻,SR(DIN)?Q0且Qi?Qi+1(i=0,1,2) 出栈时序: 信号push=0且pop=1,移位寄存器74LS194状态{S0,S1}={0,1},进入左移模式,Q0(DOUT)输出 T上升沿时刻,Qi?Qi-1(i=1,2,3) 位堆栈电路 初始化时序: 启动仿真,SP状态{S0,S1}={1,1}, 第一个T上升沿时刻,SP输出端为{Q0,Q1,Q2,Q3}={0,0,0,1} 入栈时序(pop=0): push上升沿,SP状态{S0,S1}={1,0} T上升沿,SP+1(Qi?Qi+1) ,右移; push下降沿,SP输出锁存,刷新BPx 出栈时序(push=0) : pop上升沿,SP状态{S0,S1}={0,1}, 同时,SP输出锁存,刷新#OEx T上升沿,SP-1(Qi?Qi+1) ,左移; 字节堆栈指针 入栈时序(pop=0) push上升沿,拨码开关数据锁存SIN总线; push下降沿, 刷新BPx产生的上升沿把SIN总线数据打入新BPx所对应的寄存器STACK_x; 出栈时序(push=0) pop上升沿,刷新的#OEx所对应的寄存器STACK_x输出数据到SOUT总线;同时,pop=1令SOUT总线导通到BUS总线(数码管显示) 字节堆栈通路 嵌套中断CPU 电路图 多路中断源电路(无优先级) 程序计数器PC 中断矢量地址 电路(中断源对应) 思考题:若在中断ISR3程序里继续触发中断,会出现什么情况? 四级嵌套中断的时序图 PC“断点”堆栈(INTR=push, IRET=pop) PSW“断点”堆栈(INTR=push, IRET=pop) 初始化过程 时钟信号CLK接手动开关MANUAL,启动仿真,使能复位信号#RESET=0; 手动按钮MANUAL开关“0?1?0”,然后令信号#RESET=1. 注:初始化完成后,若时钟信号CLK继续接开关MANUAL,则CPU进入手动模式,手动MANUAL开关,生成时钟信号CLK,程序单步执行;若时钟信号CLK接信号源AUTO-CLK(主频10Hz),则CPU进入自动模式,程序自动运行,直到HLT指令的“断点”处暂停。 重启过程(跳出“断点”) 时钟信号CLK接开关MANUAL,手动令复位信号端#RESET的状态“1?0?1”变化,即重启完成,跳出“断点”继续执行 。 注:跳出“断点”后,CPU进入HLT指令的后续下一条指令的取指周期。 实验步骤 1)编译、烧写、运行后页所示的nested_ISR源程序,随机触发中断源0或1,观察PC、IR、通用寄存器Rx及总线BUS的数据变化(编译和烧写asm文件方法参见“2.6存储器实验”)。 2)在nested_ISR程序自动运行过程中,设置HLT指令“断点”,手动单步嵌套触发同一中断源或不同中断源。观察和记录进入各级中断时,程序计数器PC、标志位寄存器PSW、总线BUS以及BP_PC堆栈和BP_PSW堆栈的状态。 3)中断源1子程序会对主程序的R0数值有影响么?中断源0子程序会对主程序或中断源1子程序的R0或R1数值有影响么?因为中断的出现是随机的,所以一般情况下,中断子程序禁止改变主程序的寄存器数值。请问采取什么软件方法能避免中断子程序影响主程序? 汇编助记符 (M地址:机器指令) JMP 13H 00H01H04H; vector0 02H0CH; vector1 03HOUT R1, PORT0 ; sub0 04HSET R1, 80H 05H06HHLT 07HOUT R0, PORT0 08HSET R0, 80
文档评论(0)