实验四  可编程中断控制器芯片8259a的设计_第1页
实验四  可编程中断控制器芯片8259a的设计_第2页
实验四  可编程中断控制器芯片8259a的设计_第3页
实验四  可编程中断控制器芯片8259a的设计_第4页
实验四  可编程中断控制器芯片8259a的设计_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

2018/1/22,1,计算机接口与通信实验,实验四 可编程中断控制器芯片8259A的设计,北京航空航天大学计算机学院,傅翠娇,2018/1/22,2,主要内容,实验目的预习要求实验要求实验原理 实验步骤/指导实验报告要求,2018/1/22,3,实验目的,学习了解可编程中断控制器芯片8259A的内部结构和工作过程掌握采用PLD实现8259A的设计方法,2018/1/22,4,预习要求,仔细阅读实验指导,了解8259A的控制原理,掌握8259A控制电路的设计思路和设计方法设计中断请求寄存器、中断服务寄存器、中断屏蔽寄存器、优先级判别器、读写控制电路,并对几部分电路进行时序仿真设计8259A顶层图形文件,进行时序仿真修改读写控制电路和8259A顶层图形文件对顶层设计文件进行引脚锁定,再编译,2018/1/22,5,实验要求,使用Verilog HDL语言设计设计一个可编程中断控制器芯片,使之具有与8259A芯片相似的功能在DE2教学开发实验板上进行设计的下载和验证设置8259A的初始化命令,写入操作命令字,并查看中断输出请求和中断屏蔽寄存器,中断服务寄存器中断请求寄存器的内容,2018/1/22,6,三、实验原理(1/7),18259A是一个中断控制器,它协助CPU进行中断处理。主要功能有:中断优先级的排队管理,接受和扩充外部设备的中断请求,提供中断类型号和进行中断的屏蔽和开放。,8259A内部逻辑框图,2018/1/22,7,实验原理(2/7),1数据总线缓冲器这是一个8位双向三态缓冲器,通常与数据总线的8位相连,是8259A与CPU间数据传送的接口,CPU向8259A发送的数据、命令、控制字及8259A向CPU输入的数据,回送的状态信息都要经过数据总线缓冲器。2读/写控制电路读/写控制电路接收CPU送来的读/写命令、片选信号以及端口选择信号,以实现CPU对8259A的读写操作。当CPU执行OUT指令时,信号有效并与配合,使8259A接收CPU由数据总线送来的初始化命令(ICW);当CPU执行IN指令时,信号有效并与配合,将8259A的内部状态经数据总线传送给CPU。,2018/1/22,8,实验原理(3/7),CS,RD,WR,A0四个信号对8259A的读/写控制,2018/1/22,9,实验原理(4/7),3级联缓冲器/比较器级联/缓冲器主要用于多片8259A级联和数据缓冲方式。多片级联时,总是连成主从结构,一片主片,最多8片从片供管理64级硬件中断。主片的级联信号CAS2CAS0作为输出连到每个从片的CAS2CAS0,作为从片的片选信号。当某一从片有中断申请时需要经过主片向CPU发出请求;当CPU响应中断时在第一个中断响应周期主片通过级联端输出被选中从片的标识(ID),通过CAS2CAS0传送到各个从片,通知从片的中断申请已被响应。而从片收到标识号后,与自身的标识号相比较,如果符合就在第二个负脉冲到来时,将中断类型号送到数据总线。因此,级联缓冲器/比较器模块就是用来存放和比较设备标识码(ID)的。,2018/1/22,10,实验原理(5/7),4中断请求寄存器IRR(Interupt Request Reg)中断请求寄存器IRR是一个具有锁存功能的8位寄存器,用来存放外部输入的中断请求信号IR7IR0。每一位对应一个外部中断请求信号IRi当某个IR端有中断请求,IRR中的相应位置“1“,其内容可用操作命令字OCW3读出5中断屏蔽寄存器IMRIMR寄存器可以对各个中断源进行屏蔽或开放。它与8级中断源IR7IR0相对应,可用软件将IMR中的某一位置“0“,表示对应的中断IRi被允许。反之,将IMR中的某一位IMRi置”1“,表示对应的IRi被屏蔽。屏蔽功能由操作字OCW1实现,2018/1/22,11,实验原理(6/7),6中断服务寄存器ISR(Interupt Service Reg)ISR寄存器是一个8位寄存器,与8级中断IR7IR0相对应,用来记录正在处理中的中断请求的优先级,当任何一级中断被响应后,在第一个负脉冲到来时,ISR中的相应为置“1“。ISR中的内容可用操作命令字OCW3读出7优先级判别器PR(Priority Resover)优先级判别器的主要功能包括:对IRR寄存器送来的中断申请信号进行优先级判别,选出优先级最高的中断申请;当出现多重中断时,PR将新出现的中断请求和正在被服务的中断优先级进行比较,确定新的优先级是否高于正在处理中的中断级,当一个中断请求被判定为具有最高优先级时,PR通过控制电路向CPU发出中断请求信号INT,并在8259A获得第一个中断响应信号时使ISR寄存器中相应位置“1“,2018/1/22,12,实验原理(7/7),8控制电路 1.控制电路根据IRR寄存器中的置位情况和中断屏蔽寄存器IMR的设置情况,通过优先级判别器PR进行优先级判别,并根据判别结果向8259A内部各部件发出控制信号 2.向CPU发出中断申请信号INT和接收CPU的中断响应信号 3.使中断服务寄存器ISR的相应位置“1“,使IRR寄存器中相应位清”0“ 4. 当第二个中断响应信号到来时,控制8259A向数据总线送出中断类型号,以便CPU形成中断服务程序的入口地址,2018/1/22,13,实验步骤/指导,1. 总体设计思路 根据设计要求,要实现一个全功能的8259A中断控制器,其控制逻辑部分非常复杂。因此,为了避免设计文件过于庞大而带来的干扰,将控制逻辑与操作器件的设计分开。按照模块化设计思想,根据前面的实验原理部分的介绍,我们将整个8259A划分成以下五大模块来进行设计。中断请求寄存器模块(IMR)中断服务寄存器模块(ISR)中断屏蔽寄存器模块(IRR)优先级判断模块(PR)控制模块 在设计的过程中,先实现四个主要部件IMR,ISR,IRR和PR。每个部件不仅要有相应的数据接口,更重要的是要有与设备功能相应的完备的控制信号,可以完成对器件的全部操作。,2018/1/22,14,实验步骤/指导,在控制逻辑模块中,首先必须实现4个初始化命令字的寄存器实现,模块的所有工作方式都是根据这4个寄存器的值实现的。至于操作命令字,则不需要专门设计寄存器,因为它们完成操作后就没有意义了。下面的工作就是要完成对初始化命令字读写的控制,以期能够实现8259A的初始化。由于,初始化命令是按规定的顺序输入的,所以在设计命令输入的时候使用了一个自动机,正确的模拟了初始化的流程,8259A的初始化流程图,2018/1/22,15,2中断请求寄存器电路的设计(1/4),功能:中断请求寄存器是一个具有锁存功能的8位寄存器,用来存放外部输入的中断请求信号IR7IR0。设计思路该模块主要由irr模块和三态门、双向输入输出端口组成的。中断请求寄存器irr.v:该模块是中断寄存器模块最主要的部分,主要用来寄存IR7IR0的中断请求。输入输出信号定义:input ir0,ir1,ir2,ir3,ir4,ir5,ir6,ir7;/中断请求input ltim;/触发方式选择input freeze; input rd;,2018/1/22,16,2中断请求寄存器电路的设计(2/4),input rd;input7.0 setzero;/清除中断请求output7.0 data;/中断请求输出output7.0 busdata;output en;程序框架如下:,assign data = irrreg;assign busdata = irrreg;assign en = rd;/设置irr寄存器/其中ltim为1时表示电平触发,为0时表示边沿触发。assign irrreg0 = freeze ? (senselatch0 /设置irr1irr7,2018/1/22,17,2中断请求寄存器电路的设计(3/4),对irr.v进行时序仿真,验证设计的正确性,(2)中断请求寄存器顶层模块的设计在irr.v子模块的基础上我们只需要加上相应的输入输出端口以及三态们就完成了中断请求寄存器irr_a.bdf的顶层模块的设计,2018/1/22,18,2中断请求寄存器电路的设计(4/4),中断请求寄存器模块(irr_a.bdf),对中断请求寄存器进行时序仿真验证是否满足设计要求,2018/1/22,19,3中断服务寄存器电路的设计(1/4),3中断服务寄存器电路的设计功能:中断服务寄存器是一个8位寄存器,与8级中断IR7IR0相对应,用来记录正在处理中的中断请求的优先级。设计思路该模块主要由isr模块和三态门、双向输入输出端口组成。中断服务寄存器isr.v:输入输出信号定义:input rd;input7.0 set;/中断置位信号input7.0clr;/中断清除信号output7.0 data;/正在服务中断输出output7.0 busdata;output en;,2018/1/22,20,3中断服务寄存器电路的设计(2/4),其中rd信号由控制模块发出,当rd有效时,en信号有效,set和clr信号分别是由优先级分析器发出的正在服务中断置位信号和清除中断服务信号,程序框架如下,/输出中断服务信号assign data = isrreg;assign busdata = isrreg;assign en = rd; /设置isr寄存器assign isrreg0 = clr0 ? 0 : (set0 ? 1 : isrreg0);/设置isr1isr7,对isr.v进行时序仿真,验证设计的正确性,2018/1/22,21,3中断服务寄存器电路的设计(3/4),(2)中断服务寄存器顶层模块的设计在isr.v子模块的基础上我们只需要加上相应的输入输出端口以及三态们就完成了中断服务寄存器isr_a.bdf的顶层模块的设计,2018/1/22,22,3中断服务寄存器电路的设计(4/4),对中断服务寄存器进行时序仿真,验证是否满足设计要求,4中断屏蔽寄存器电路的设计功能:中断屏蔽寄存器IMR是一个8位寄存器,与8259A处理的8级中断源IR7IR0相对应。通过IMR寄存器可以对各个中断源进行屏蔽或开放。设计思路:该模块主要由imr模块和三态门、双向输入输出端口组成。中断屏蔽寄存器imr.v,2018/1/22,23,4中断屏蔽寄存器电路的设计(1/3),输入输出信号定义:input clr;/清除中断屏蔽寄存器input writemask;/写入屏蔽信号input7.0 datain;/输入中断屏蔽字output7.0 imrreg; /输出中断屏蔽字程序框架如下:,/输出imr寄存器内容assign imrreg = clr ? 8b0: (writemask ? datain : imrreg);,当clr信号有效时,清除中断屏蔽字内容,即开放所有中断,否则根据当前是否允许输出中断屏蔽信号输出中断屏蔽信号。,2018/1/22,24,4中断屏蔽寄存器电路的设计(2/3),对imr.v进行时序仿真,验证其功能的正确性,中断屏蔽寄存器顶层模块的设计在imr.v子模块的基础上我们只需要加上相应的输入输出端口以及三态们就完成了中断服务寄存器imr_a.bdf的顶层模块的设计,对中断屏蔽寄存器顶层文件进行时序仿真,验证其功能的正确性,2018/1/22,25,4中断屏蔽寄存器电路的设计(3/3),5优先级判别电路的设计功能:管理和识别各中断申请信号的优先级别,并选出优先级最高的中断申请,向CPU发中断申请信号设计思路 :PR负责检查中断源的中断请求的优先级并和“正在服务中的中断”进行比较,确定是否某个中断请求送给处理器。若中断源的中断比正在服务中的中断有更高的优先级,则PR就使INT线变为高电平,送给CPU,为它提出申请,并且在进入中断时将相应的ISR位置位。若中断源的中断等级等于或低于正在服务中的中断等级,则PR不为其提出申请。在非特定屏蔽时,将IRR的输出的最高优先级与ISR的最高优先级比较,在特定屏蔽时,则直接选出IRR中优先级最高的。该分析器相当于一个优先级编码器和一个比较器电路,可实现中断判优及屏蔽的功能,2018/1/22,26,5优先级判别电路的设计(1/6),优先级判别器pr.v:输入输出信号定义:input7:0 mask;/屏蔽信号input7:0 request;/中断请求信号input7:0 isr;/中断服务信号input2:0 sp;/优先级设置信号input7:0 eoi;/中断结束信号output7:0 isr_set; /设置中断服务寄存器output7:0 isr_clr;/清除中断服务output intr;/发中断请求output2:0 code;/正在进行服务的中断源,2018/1/22,27,5优先级判别电路的设计(2/6),从各输入输出信号的定义我们不难知道各信号的作用,首先从中断请求寄存器中选出当前未被屏蔽掉的,且优先级最高的中断请求,并设置中断请求类型号,程序框架如下,always (sp)/ 中断优先级改变beginif(nmr != 0)/ 有中断请求且没有被屏蔽掉begincase(sp)/ 不同优先级排队管理7 : / IR0的中断优先级最高,其余依次递减beginif(nmr0 = 1)/ IR0有中断请求,以下类推begin,2018/1/22,28,5优先级判别电路的设计(3/6),position = 0; hp_nmr = 0;end else if(nmr1 = 1)begin position = 1;hp_nmr = 1;/其设置类似IR1中断请求end /处理IR2到IR7的中断请求end/60,对优先级进行轮询,2018/1/22,29,5优先级判别电路的设计(4/6),在选出了当前中断寄存器中具有最高优先级的中断请求后,还需要从中断服务寄存器中选出当前正在进行服务的最高优先级的中断请求,程序框架如下:,if(isr != 0)/断服务寄存器不为0,有中断处理正在进行begincase(sp)/不同优先级排队管理7 : beginif(isr0 = 1)hp_isr = 0;else if(isr1 = 1)hp_isr = 1;end/60输出当前正在进行中断服务位,2018/1/22,30,5优先级判别电路的设计(5/6),在选出了最高优先级的中断请求以及正在进行中断服务的中断之后,就需要根据他们优先级高低的比较结果来决定是否向CPU发送中断请求以及并根据是否设置特殊屏蔽方式来决定回送中断服务寄存器内容等,程序框架如下。,assign isr_clr = eoi; /向中断服务寄存器发中断清除位/设置中断服务位assign isr_set0 = (sm ,2018/1/22,31,5优先级判别电路的设计(6/6),设计仿真对优先级判别器进行时序仿真,验证设计的正确性,6读写控制电路的设计功能:读写控制电路是8259A的内部控制器,控制8259A的内部工作过程。整个8259A芯片就是在控制电路的控制下构成一个有机的整体并完成中断优先级的管理功能。设计思路:控制电路根据IRR寄存器中的置位情况和中断屏蔽寄存器IMR的设置情况,通过优先级判别器PR进行优先级判别,并根据判别结果向8259A内部各部件发出控制信号,并向CPU发出中断申请信号INT和接收,2018/1/22,32,6读写控制电路的设计(1/16),CPU的中断响应信号,使中断服务寄存器ISR寄存器中的相应位置“1”,使IRR寄存器中中相应的位清“0”。当第二个中断响应信号到来时,控制8259A向数据总线送出中断类型号,以便CPU形成中断服务程序的入口地址。读写控制电路有一个core控制模块和三态门以及输入输出端口组成。读写控制器core.v:主要输入输出端口定义:input cs;/片选信号input rd, wr;/读写信号intput inta;/中断响应intput a0;/奇偶地址选择input reset;/重置,2018/1/22,33,6读写控制电路的设计(2/16),input7:0 isrset;/中断服务寄存器input2:0 code;/中断源编号input7:0 datain,busdatain;output ltim;/中断触发方式output sm;/中断屏蔽方式output rd_isr;/读中断服务寄存器/读,写,清除中断屏蔽寄存器output rd_imr, wr_imr, clr_imr; ouput rd_irr;/读中断请求寄存器ouput7:0 eoi/发中断结束output7:0 setzero;/清除中断请求寄存器output2:0 sp;/中断优先级设置,2018/1/22,34,6读写控制电路的设计(3/16),读/写控制电路的设计比较复杂,下面介绍其实现过程。8259A的编程由编程命令实现。其编程命令有两类:初始化命令字ICW1-ICW4和操作命令字OCW1-OCW3。在中断系统进入正常运行之前,系统需要对每一个8259A都进行初始化,/初始化自动机always (posedge clk or posedge reset)beginif(reset)state = 1;elsebegincase(state)1 : / 初始化ICW1过程,设置芯片控制初始化命令字if(write2)/ 进入初始化ICW2过程2 :,2018/1/22,35,6读写控制电路的设计(4/16),beginif(icw11)/ 级联使用if(edge1 = 2b01)state = 3;/ 进入初始化ICW3过程else if(icw10)/ 需要设置ICW4else if(edge1 = 2b01)/ 设置命令操作字end3 : / 初始化ICW3过程,设置主从片初始化命令字beginif(icw10)/ 需要设置ICW4else if(edge1 = 2b10)state = 5; end4 :/ 初始化ICW4过程if(edge1 = 2b11)state = 5;5 : / 设置操作命令字if(write1 ,2018/1/22,36,6读写控制电路的设计(5/16),控制器根据当前所处状态和CPU以及用户设置的编程命令来分别设置ICW1ICW4和OCW1OCW3,程序框架如下:,/设定ICW、OCWassign icw1 = reset ? 8h00 : (state = 1 ,2018/1/22,37,6读写控制电路的设计(6/16),8259A的初始化命令字ICW1芯片控制初始化命令字icw13用来设定中断申请的信号的触发方式,1表示电平触发,0表示边沿触发。该位用来设置ltim信号,如下:,/ ltim 中断触发方式,1为电平触发,0为边沿触发assign ltim = icw13;,ICW2设置中断类型码基值初始化命令字icw27:3提供中断类型号的高5位,当CPU发读IMR、ISR或IRR信号时,icw27:3将与中断请求IRi组合成中断类型号一起回送给CPU,如下:,/ 读IMR或IRR或ISR寄存器或中断类型号assign dataout = (read2 | (read1 ,2018/1/22,38,6读写控制电路的设计(7/16),ICW3标识主片/从片初始化命令ICW3应写入奇地址端口,当采用多片级联方式时,当前片若为主片,则icwi为1表示IRi端上接有8259A从片,为0表示IRi端上未接从片。若为从片,则icw32:0表示从片连接在主片的哪个中断请求输入端IRi上ICW4方式控制初始化命令字icw44表示全嵌套方式,为1时表示特殊全嵌套方式,为0时表示非特殊全嵌套方式。icw43设置8259A与系统连接方式。为0表示非缓冲方式,为1表示缓冲方式。当采用缓冲方式时,icw42设置级联方式,当icw42为1时表示该片为主片,否则为从片。Icw41设置中断结束方式,为1表示自动EOI方式,为0表示非自动EOI方式。关于ICW4的程序代码我们将在后面的操作命令字部分加以介绍,2018/1/22,39,6读写控制电路的设计(8/16),8259A的操作命令字OCW1中断屏蔽操作命令字OCW1用来实现对中断源的屏蔽功能,OCW1的内容被置入IMR屏蔽寄存器,并且必须写入奇地址端口。每位对应一个中断请求IRi,当某位为1时,表示相应的中断请求被屏蔽,反之该中断请求被允许。输出端口busdataout用来输出中断屏蔽操作命令字,代码如下:,/ 输出中断屏蔽操作命令字assign busdataout = o1 ? ocw1 : 8b0;,OCW2优先级循环方式和中断结束方式操作命令字OCW2有两个功能:设置中断结束方式和优先级循环方式。要求写入偶地址。,2018/1/22,40,6读写控制电路的设计(9/16),ocw27决定系统中优先级是否按循环方式设置,为1表示中断优先级按循环方式设置,为0表示设置为固定优先级,即IR0最高,IR7最低。ocw26指明ocw22ocw20是否有效,为1表示有效,反之无效。ocw2 5中断结束命令位,为1表示中断服务程序结束后需要发送中断结束命令,为0则不需要发送中断结束命令。ocw24和ocw23为标志位,均为0。若ocw26有效,则ocw22 ocw20指出要清除ISR寄存器中的哪一位或当OCW2设置为特殊优先级循环方式时,指明循环开始时哪个中断源的优先级最低。中断结束方式的设置。程序框架如下:,/处理中断结束assign codeocw2 = code, ocw22:0;always (codeocw2)begin,2018/1/22,41,6读写控制电路的设计(10/16),if(reset | mclr)er = 8hff;else if(icw41)/ 自动结束方式beginif(flag2) begincase(code)0 : er = 8h01;/ 0号寄存器,1-7寄存器类似else if(o2) beginif(ocw25) begin/ 中断服务程序结束后需要发送中断结束命令if(ocw26) begin/ ocw26 = 1,sl位指明L2,L1,L0是否有效case(ocw22:0)/ 0号寄存器,1-7号寄存器类似0 : er = 8h01;elsebegin/ ocw26 = 0, L2,L1,L0无效。case(code)/ 按code提供的寄存器号来中断0 : er = 8h01;,2018/1/22,42,6读写控制电路的设计(11/16),优先级循环方式的设置。程序框架如下:,assign erocw2 = er, ocw22:0;/优先级设置always (erocw2)beginif(reset | mclr)pri = 7;else if(icw41) begin/ 自动EOI方式if(ocw27)begin/ 自动循环方式case(er)8h01 : pri = 0;else if(o2 ,2018/1/22,43,6读写控制电路的设计(12/16),OCW3特殊屏蔽方式和中断查询方式操作命令字OCW3有三个功能:设置和撤消特殊屏蔽方式;设置中断查询方式;设置读出ISR或IMR寄存器的内容。必须写入偶地址端口。ocw36,ocw35设置或取消特殊屏蔽方式,当ocw36和ocw35为0X时无效,为10时撤消特殊屏蔽方式,为11时将8259A设置为特殊屏蔽方式。设置8259A的屏蔽方式控制。程序框架如下:,/ 特殊屏蔽方式复位assign sm = (ocw36:5 = 2b10) ? 1 : 0;,2018/1/22,44,6读写控制电路的设计(13/16),OCW3的查询功能:ocw32为中断查询方式位,为1使8259A处于中断查询方式,此时CPU向8259A偶地址写入查询命令OCW3=0CH后,再执行一条输入指令,CPU便可读入8259A提供的查询字。OCW3的读操作功能:OCW3中的ocw31和ocw30用来指明读哪个寄存器,当为11时表CPU下一条指令读取ISR寄存器中的内容 ,为10时表示CPU下一条指令读取IRR寄存器中的内容。注意IMR寄存器的内容可有OCW1读奇地址端口直接读出。程序框架如下:,/ 读中断屏蔽寄存器assign rd_irr = (read1 ,2018/1/22,45,6读写控制电路的设计(13/16),读写控制器的仿真对读写控

温馨提示

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

评论

0/150

提交评论