一种降低响应延时提高系统效率的中断控制器及控制方法
【技术领域】
[0001]本发明属于计算机科学领域,具体是一种降低响应延时提高系统效率的中断控制器及控制方法。
【背景技术】
[0002]在现代CPU系统中中断响应方式大同小异,在实时性系统中要求有严苛的中断响应速度,来保证系统的正常运行,目前业界最快的中断响应处理器被ARM Cortex-M系列CPU取得,在理想情况下(没有处理器外部延时)可以做到12个时钟周期,进入中断服务函数(排除末尾连锁tail-chaining模式"6个周期",因为末尾连锁并非关键中断,其可以等到当前中断处理完成,只是缩短了其等待时间)。
[0003]中断响应过程可以划分为现场保护以及CPU程序指针的跳转两个部分,其中第二部分是程序转移必不可少的条件,因此,要提高中断响应速度(进程切换等)就只能通过降低现场保护时间的方向努力。
[0004]现有技术中有两种降低中断响应延时的方法:
a)中天微系统的CK系列CPU中断控制器采用一条较为复杂的指令完成所有的现场保护工作,其目的在于降低多条压栈指令的取指操作所带来的时间开销,与通用的中断控制器相比确实降低了中断响应延时。此外,为实现快速中断响应,CK的处理器提供了CPU内部通用寄存器(GPR)影子寄存器的可配置选项,当CPU配有影子寄存器时,可以实现一个周期完成现场切换,从而极大的提高了中断响应速度。但是,此高速中断不允许嵌套使用,因为影子寄存器只有一组,当更高优先级的中断到来时,此时已没有影子寄存器可用,必须通过普通的压栈操作来实现现场保护。因此,其处理器可以在某个关键中断的处理上具有比ARM更高的响应速度。
[0005]b)在当前的ARM Cortex-M系列系统中,CPU收到中断后由硬件完成通用寄存器的保护工作,硬件压栈。既然是压栈必然是顺序的,在CortexM系列中共需要压入8个寄存器,而这部分时间消耗是ARM 12个CPU周期响应延时的重要组成部分。与中天微系统的中断处理相比虽然其在整体上占优(对于中天微系统的处理器中,使用影子寄存器的中断响应,其响应延时会优于ARM),但仍然存在优化的空间,本发明人认为在实时性严苛的系统中,适当的增加开销来满足系统实时性的需求是很有必要的。。
【发明内容】
[0006]本发明主要目的在于提升处理器的中断响应(进程切换类似)速度。为解决中断响应过程中现场保护所带来的时间开销问题,本发明目的在于设计一个基于硬件自动并行保存(不需要处理器指令支持)现场,支持在多级嵌套的情况下仍然能够高速响应高优先级中断的中断控制器。牺牲一部分硬件开销,将中断响应速度做到极致。其技术方案如下:
一种降低响应延时提高系统效率的中断控制方法,包括如下步骤:
步骤一、当中断控制器接收到外设的中断信号后,根据其寄存器堆中的配置以及记录的当前中断状态,来决定是否将当前的中断信号传送给处理器。若处理器当前正处于异常处理级,且当前中断没有抢占权,该中断将进入等待状态,等待当前中断返回;若当前处理器处在正常执行级,或者当前中断优先级高于正在处理的中断,中断控制器将把当前中断请求以及中断向量号发给处理器;
步骤二、处理器收到中断信号后,自动将堆栈指针(SP)减去9(取决于处理器在异常时需要保存的寄存器数目),并给出进入中断指示信号“core」nt_aCk”,指示处理器即将响应中断,即下一步开始计算异常入口地址;
步骤三、中断控制器检测到“Core_int_aCk”信号后,主动保存当前处理器状态到CPU寄存器缓冲区中。
[0007]与此同时,CPU根据中断控制器提供的向量号,计算异常入口地址。
[0008]进一步的,CPU得到入口异常地址后,开始通过指令总线取指令,开始异常处理。
[0009]进一步的,步骤三中,在中断控制器暂存CPU现场后,根据暂存的堆栈指针(SP)主动将暂存的现场写入主存中,并拉高标志位。
[0010]进一步的,当CPU异常处理完成后查询中断控制器的现场写回标志位,如果该标志位有效,则开始从SP恢复现场。
[0011]—种降低响应延时提高系统效率的中断控制器,包括:
优先级解码器:用于接收外设提供的中断信号(支持边沿和电平中断),以及中断优先级管理用于管理各个中断源之间的优先级;
等待优先级控制器:用于中断等待状态管理,判断当前等待状态中断的先后;
寄存器堆:寄存相关逻辑,控制、指示中断控制器中各个模块的状态;
中断屏蔽逻辑部:根据寄存器堆,以及等待优先级控制器的状态控制中断的屏蔽与开启;
中断信号生成器:用于产生给处理器的中断请求信号;
中断向量生成器:中断向量生成逻辑,提供当前中断请求发生的中断向量号。
[0012]进一步的,还包括:
系统总线从机接口:AMBA总线从机接口,提供给系统主机访问,便于控制中断行为;系统总线主机接口: AMBA总线主机接口,用于将CPU寄存器缓冲区中暂存的处理器现场写入系统主存中,以便中断返回时CHJ可以从主存中恢复现场。
[0013]进一步的,还包括:
CPU寄存器缓冲区:用于保存CPU现场的寄存器堆,其中需要保存的寄存器依CPU不同。
[0014]进一步的,该中断控制器的外部端口信号包括5个部分:(1)中断控制器与各中断源之间的中断信号;(2)中断控制器与处理器之间的中断信号,包括中断指示信号INT,中断向量号VEC;(3)AMBA从机端口信号,用于系统主机对中断控制器的特性配置;(4)中断控制器与处理器之间的寄存器映射以及中断响应握手,现场写回指示信号;(5)AMBA主机端口信号,用于中断控制器将现场写入主存。
[0015]本发明的中断控制器及控制方法可以做到CPU在10个周期以内,甚至更低的中断响应延时。同样,此中断控制器为进程的快速切换提供了新的途径。在多核系统中,通过中断控制器的通用寄存器、写缓冲寄存器可以实现更高效的核间通信。
【附图说明】
[0016]图1是本发明的降低响应延时提高系统效率的中断控制器内部结构示意图;
图2是降低响应延时提高系统效率的中断控制应用流程图。
【具体实施方式】
[0017]下面结合附图对本发明作进一步说明。
[0018]本发明通过在通用中断控制器中添加通用寄存器的影子寄存器堆(CPU寄存器缓冲区),用于自动保存处理器状态,以减少中断响应过程中现场保护的时间开销。为了使中断嵌套发生时,仍然有高速响应的特点,考虑到硬件开销以及嵌套层数的不确定性。本文采用中断控制器主动将缓冲区中的数据写到主存中,并返回写状态。在多级嵌套的情况下,不至于中断控制器中的缓冲区溢出而出现混乱。
[0019]如图1所示,本发明的降低响应延时提高系统效率的中断控制器由9个模块组成,分别为:优先级解码器;等待优先级控制器;寄存器堆;中断屏蔽逻辑部;中断信号生成器;中断向量生成器;系统总线从机接口 ;系统总线主机接口); CPU寄存器缓冲区。
[0020]优先级解码器:用于接收外设提供的中断信号,以及中断优先级管理。
[0021]等待优先级控制器:用于中断等待状态管理。
[0022]寄存器堆:寄存相关逻辑,控制、指示各个模块的状态。
[0023]中断屏蔽逻辑部:根据寄存器堆,以及等待优先级控制器的状态控制中断的屏蔽与开启。
[0024]中断信号生成器:用于产生给
处理器的中断请求信号。
[0025]中断向量生成器:中断向量生成逻辑,提供当前中断请求发生的中断向量号。
[0026]系统总线从机接口:AMBA总线从机接口,提供给系统主机访问,便于软件控制中断行为。
[0027]系统总线主机接口:AMBA总线主机接口,用于将CPU寄存器缓冲区中暂存的处理器现场写入系统主存中,以便中断返回时CHJ可以从主存中恢复现场。
[0028]CPU寄存器缓冲区:用于保存CPU现场的影子寄存器组,其中需要保存的寄存器依CPU不同(不同架构处理器保存现场需要保存的GPR会有不同)可配置,其作用类似于数据高速缓存结构中的写缓冲区。CPU在收到中断后不用考虑现场问题,只需要更新堆栈指针即可。(为了在中断返回时找到中断控制器保存的现场位置)
如图2所示,中断控制器的主动现场保护行为,帮助CPU减少中断响应延时,达到实时处理的目的。
[0029]由于不同的处理器在实现细节上略有不同,本文以中天微系统CK802处理器为例,介绍本中断控制方法:
中断控制器的外部端口包括5个部分:(1)中断控制器与各中断源之间的中断信号,支持边沿和电平两种方式;(2)中断控制器与处理器之间的中断信号,包括中断指示信号INT,中断向量VEC等;(3)AMBA从机端口信号,用于系统主机对中断控制器的特性配置;(4)中断控制器与处理器之间的寄存器映射以及中断响应握手,影子寄存器写回指示信号等;(5)AMBA主机端口信号,用于中断控制器将现场写入主存。
[0030]当中断控制器接收到外设的中断信号后,根据寄存器堆中的配置以及记录的当前中断状态,决定是否将当前的中断信号传送给处理器。如果处理器当前正处于异常处理级,且当前中断没有抢占权,当前中断将进入等待状态,等待正在处理的中断返回。假如当前处理器处在正常执行级,或者当前中断优先级高于正在处理的中断,中断控制器将把中断请求以及中断向量号发给处理器,处理器收到中断信号后,自动将堆栈指针(SP)减去9(现场保护的寄存器数目),并给出进入中断指示信号“core_int_aCk“,指示CPU收到中断即将响应中断,(已经更新SP)即下一步开始计算异常入口地址,中断控制器收到“core_int_ack”信号后主动保存当前处理器状态(GPR0-3,GPR12,GPR13,GPR15,EPC,EPSR)到影子寄存器组中。同时,CPU根据中断控制器提供的向量号,计算异常入口地址。在CPU得到异常地址后(通常只需要1?2个cycle),便开始通过指令总线取指令,开始异常处理,而不用担心现场被破坏。如此CPU的异常响应延时可以控制在几个(实际测试中7个CPU周期)周期内。在中断控制器暂存了 CPU现场后,根据暂存的堆栈指针(SP)主动将现场写入主存中,并拉高标志位。当CHJ异常处理完成后查询该位,如果该位有效,则开始从SP恢复现场。
【主权项】
1.一种降低响应延时提高系统效率的中断控制方法,该方法包括如下步骤: 步骤一、当中断控制器接收到外设的中断信号后,根据其寄存器中的配置以及记录的当前中断状态,决定是否将当前的中断信号传送给处理器。2.若处理器当前正处于异常处理级,且当前中断没有抢占权,该中断将进入等待状态,等待当前中断返回;若当前处理器处在正常执行级,或者当前中断优先级高于正在处理的中断的优先级,中断控制器将把中断请求以及中断向量号转发给处理器; 步骤二、处理器收到异常信号后,自动将堆栈指针(SP)减去9(实际的压栈操作将由中断控制器完成),并给出进入中断指示信号“Core_int_aCk”,指示处理器即将响应中断,处理器下一步开始计算异常入口地址; 步骤三、中断控制器收到指示信号“Core_int_aCk”后保存当前处理器状态到CPU寄存器缓冲区)中,随后通过总线的Master接口,主动将缓冲寄存器中的数据压入堆栈中。3.如权利要求1所述的降低响应延时提高系统效率的中断控制方法,其特征在于: 使用中断控制器中的CPU寄存器缓冲区作为现场保护的“写缓冲”释放CPU,达到更快的中断响应目的 如权利要求2所述的降低响应延时提高系统效率的中断控制方法,其特征在于:CHJ得到入口异常地址后,开始通过指令总线取指令,开始异常处理,而不用忙于现场保护的压栈操作。4.如权利要求1所述的降低响应延时提高系统效率的中断控制方法,其特征在于:步骤三中,在中断控制器暂存CPU现场后,根据暂存的堆栈指针(组存中的堆栈地址)主动将暂存的现场写入主存中,并拉高标志位。5.如权利要求4所述的降低响应延时提高系统效率的中断控制方法,其特征在于:当CHJ异常处理完成后查询该标志位,如果该标志位有效,则开始从SP恢复现场。6.—种降低响应延时提高系统效率的中断控制器,包括: 优先级解码器:用于接收外设提供的中断信号,以及中断优先级管理支持边沿和电平两种中断; 等待优先级控制器:用于中断等待状态管理,判断当前中断是否应该进入等待状态; 寄存器堆:寄存相关逻辑,控制各个模块的状态; 中断屏蔽逻辑部:根据寄存器堆中的状态,以及等待优先级控制器的状态控制中断屏蔽与开启; 中断信号生成器:用于产生给处理器的中断请求信号; 中断向量生成器:中断向量生成逻辑,提供当前中断请求发生的中断向量号; CPU寄存器缓冲区:作为CPU内部寄存器的影子寄存器组(缓冲区),以达到CPU寄存器快速保存的目的。7.如权利要求6所述的降低响应延时提高系统效率的中断控制器,其特征在于:在中断控制器包括: 系统总线从机接口:AMBA总线从机接口,提供给系统主机访问,便于控制中断行为; 系统总线主机接口: AMBA总线主机接口,用于将CPU寄存器缓冲区中暂存的处理器现场写入系统主存中,以便中断返回时CHJ可以从主存中正确的恢复现场。8.如权利要求6或7所述的降低响应延时提高系统效率的中断控制器,其特征在于:包括: CPU寄存器缓冲区:用于保存CPU现场的影子寄存器组,其中需要保存的寄存器可根据CPU不同而定制。9.如权利要求8所述的降低响应延时提高系统效率的中断控制器,其特征在于:该中断控制器的外部端口信号包括5个部分:(1)中断控制器与各中断源之间的中断信号;(2)中断控制器与处理器之间的中断信号,包括中断指示信号INT,中断向量号VEC;(3)AMBA从机端口信号,用于系统主机(CPU)对中断控制器的特性配置如使能或屏蔽某个中断;(4)中断控制器与处理器之间的寄存器映射以及中断响应握手,寄存器堆写回指示信号等;(5)AMBA主机端口信号,用于中断控制器将现场主动写入主存提高系统并行性。
【专利摘要】本发明公开了一种降低响应延时提高系统效率的中断控制方法,包括如下步骤:当中断控制器接收到外设的中断信号后,根据其寄存器堆中的配置以及记录的当前中断状态,来决定是否将当前的中断信号传送给处理器。若处理器当前正处于异常处理级,且当前中断没有抢占权,该中断将进入等待状态,等待当前中断返回;若当前处理器处在正常执行级,或者当前中断优先级高于正在处理的中断,中断控制器将把当前中断请求以及中断向量号发给处理器;处理器收到中断信号后,自动将堆栈指针减去9,并给出进入中断指示信号,指示处理器即将响应中断,即下一步开始计算异常入口地址;中断控制器检测到信号后,主动保存当前处理器状态到CPU寄存器缓冲区中。
【IPC分类】G06F13/24
【公开号】CN105487989
【申请号】CN201510842999
【发明人】李奕均, 冯炯, 黄凯杰
【申请人】杭州朔天科技有限公司
【公开日】2016年4月13日
【申请日】2015年11月27日