一种适用于RISC-V处理器的中断控制器的制作方法

文档序号:18009620发布日期:2019-06-25 23:50阅读:517来源:国知局
一种适用于RISC-V处理器的中断控制器的制作方法

本发明涉及计算机领域,更具体的,涉及一种适用于risc-v处理器的中断控制器。



背景技术:

risc-v指令集2010年诞生于加州大学伯克利分校,其特点在于开源与免费,任何人都可以使用risc-v指令集设计自己的芯片而不需要缴纳高额的授权费用。该指令集定义了3种类型的中断:外部中断、定时器中断和软件中断。其中定时器中断和软件中断属于处理器内部中断,中断源是处理器内部的定时器或者某条指令;外部中断一般来自于连接到处理器上的各种外设,比如外部定时器、gpio、看门狗、串口和spi等等。

由于处理器仅有一个外部中断输入信号,所以各种外设产生的中断必须经过中断控制器的处理才能进入处理器。中断系统作为处理器中最复杂的控制系统之一,在提高处理器的性能、对于外设的响应速度和能耗比等方面占有非常重要的地位。risc-v特权文档描述了一种平台级别中断控制器(platformlevelinterruptcontroller,plic),但其仅仅包含一些最基本的功能,缺少很多设计上的细节;risc-v基金会也未对risc-v处理器必须要实现plic作出硬性规定。在众多开源的risc-v处理器的设计中,很少涉及到中断控制器的具体实现,绝大部分设计都只实现了内核部分的功能。此外,由于risc-v指令集规定默认不支持中断嵌套,这也一定程度上降低了处理器的实时性。



技术实现要素:

为了解决现有技术中基于risc-v处理器的中断控制器功能较为单一的不足,本发明提供了一种适用于risc-v处理器的中断控制器。

为实现以上发明目的,采用的技术方案是:

一种适用于risc-v处理器的中断控制器,包括通信模块、中断源闸门模块、中断源边沿计数器、中断源使能寄存器、中断源嵌套优先级寄存器、中断源响应优先级寄存器、嵌套优先级阈值寄存器、响应优先级阈值寄存器、中断事件计数器、中断通知寄存器;所述的通信模块分别和中断源闸门模块、中断源边沿计数器、中断源使能寄存器、中断源嵌套优先级寄存器、中断源响应优先级寄存器、嵌套优先级阈值寄存器、响应优先级阈值寄存器、中断事件计数器、中断通知寄存器相连接;

通信模块,用于当处理器要读取其余模块的当前状态,或者发送控制信号来设置其余模块的工作模式时,负责将读取信号或控制信号发送到中断源闸门模块、中断源边沿计数器、中断源使能寄存器、中断源嵌套优先级寄存器、中断源响应优先级寄存器、嵌套优先级阈值寄存器、响应优先级阈值寄存器、中断事件计数器以及中断通知寄存器中;当处理器向中断控制器发送响应信号或者完成信号时,通信模块负责将此信号发送到中断通知寄存器。

中断源闸门模块,负责将不同类型的外部中断源发来的中断信号转化为统一形式的中断信号;

中断源边沿计数器,负责记录每个中断源发送的中断请求的次数;

中断源使能寄存器,用于判断中断源是否能向处理器发出中断通知;

中断源嵌套优先级寄存器,用于存储中断源的嵌套优先级;

中断源响应优先级寄存器,用于存储中断源的响应优先级;

嵌套优先级阈值寄存器,用于存储由处理器设置的嵌套优先级阈值;

响应优先级阈值寄存器,用于存储由处理器设置的响应优先级阈值;

中断事件计数器,用于记录处理器嵌套的中断的数量;

中断通知寄存器,用于记录经过多次比较之后最终发送给处理器的中断通知的中断源序号。

优选的,所述的中断源闸门模块支持4种中断信号的触发,包括低电平触发、高电平触发、下降沿触发以及上升沿触发。

优选的,在所述的中断源边沿计数器中,当中断源闸门模块被配置为边沿触发时,每接收到一个对应的边沿就将计数器的计数次数加1。

优选的,在所述的中断事件计数器中,处理器每次接收了中断控制器发送的中断通知,将计数器的计数次数加1;每次向中断控制器发送了中断完成信号,将计数器的计数次数减1。

与现有技术相比,本发明的有益效果是:

1.本发明能检测多种形式的由外设产生的中断信号,并且可以对边沿触发的中断信号产生次数进行记录,方便处理器获取外设的详细信息。

2.本发明可通过改变多个模块的配置寄存器对每个中断源进行单独控制,具有非常高的灵活性。

3.本发明支持中断嵌套,保证了中断响应系统的稳定性和实时性。

附图说明

图1为中断控制器与risc-v处理器构成的系统的整体架构示意图。

图2为中断控制器内部各个模块与通信模块的连接示意图。

图3为中断源闸门模块状态转化示意图。

图4为某个中断源闸门模块的功能示意图。

图5为中断源优先级寄存器示意图。

图6为中断控制器向处理器发送中断通知的过程示意图。

图7为中断控制器整体工作流程图。

图8为实施例3中一种可能的寄存器地址映射。

具体实施方式

附图仅用于示例性说明,不能理解为对本专利的限制;

以下结合附图和实施例对本发明做进一步的阐述。

实施例1

如图1和图2所示,本实施例提供了一种适用于risc-v处理器的中断控制器,其使用ahb-lite协议与处理器之间进行通信。

如图1所示,外部中断源向处理器发送的中断信号先输入中断控制器,由中断控制器进行处理,然后中断控制器再向处理器发送中断通知信号。处理器通过向中断控制器发送符合ahb-lite协议的控制信号,根据实际运行情况来设置中断控制器的工作方式。当中断控制器向处理器发送有效的中断通知信号时,处理器若能接收此中断通知,则向中断控制器发送响应信号;在处理器运行完特定的中断处理程序之后,向中断控制器发送完成信号。控制信号、响应信号和完成信号都会改变中断控制器的运行状态。

如图1所示,中断控制器能接收的外部中断源理论上可以有任意多个,但是在实现的时候应当结合硬件的资源限制。本实施例的中断控制器能接收32个外部中断。进一步的,risc-v规定中断序号为0的中断源为预留中断,表示“不可能存在的中断”,因此实际上中断控制器能接收的外部中断只有31个,有效的中断序号从1开始。

如图2所示,中断控制器中的通信模块根据处理器访问地址的不同,将控制信号、响应信号和完成信号传送到其他指定的模块。若与通信模块相连的其它模块为双向箭头,则表示该模块中的配置寄存器可读可写;若为单向箭头则表示该模块中的配置寄存器可读不可写。

实施例2

如图3和图4所示,本实施例中中断源闸门有3种工作状态:

a1:闲置状态,此时中断源闸门未收到任何有效的外部中断信号。在此状态中,若收到有效的外部中断信号,则将中断挂起寄存器(interruptpending,ip)置1,并进入状态a2。

a2:待响应状态,此时中断源闸门已经收到了有效的外部中断信号,ip为1,但是处理器还未向中断控制器发送响应信号,即还未能接收通过该中断源闸门的外部中断信号。在此状态中,若收到了处理器发送的响应信号,则将ip置0,并且进入状态a3。

a3:待完成状态,此时通过该中断源闸门的外部中断信号已经被处理器接收,但处理器还未完成对于此中断的处理,即还未向中断控制器发送完成信号。在此状态中,若收到了处理器发送的完成信号,则进入状态a1。

如图4所示,中断源闸门模块支持4种中断信号的触发:低电平触发、高电平触发、下降沿触发和上升沿触发。可用4个中断源闸门模块触发模式配置寄存器(low_level,high_level,falling_edge,rising_edge)对32个外部中断的触发模式进行选择。举例,将rising_edge[14]设置为1,low_level[14],high_level[14],falling_edge[14]都设置为0,则序号为14的中断源向对应的中断源闸门发送上升沿信号时,会被转化成符合规范的中断请求信号。在一般情况下,不应同时开启电平触发和边沿触发的功能。

如图4所示,当中断触发模式为高(低)电平触发时,持续的高(低)电平只会向中断控制器发送一次中断请求。假设场景1:t1时刻某个外部中断源向中断控制器发送高(低)电平,被中断源闸门成功接收,ip被置1,但处理器不能马上接收这个中断;t2时刻外部中断源向中断控制器发送低(高)电平,即取消中断请求,由于只有处理器向中断控制器发送的响应信号才能将ip置0,所以ip依然保持为1;t3时刻有效的ip向处理器发送的中断通知被处理器能接收,并且处理器向中断控制器发送响应信号,但实际上外部中断源已经不需要处理器对这个中断通知进行处理了,所以此时处理器实际上会错误的进入中断程序。为了避免执行不必要的中断处理程序,当处理器收到高(低)电平触发模式下的中断源发来的中断通知时,应当先检查中断源所连接的外设是否真的产生了中断请求,然后再决定是否真的需要执行中断处理程序。

如图4所示,当中断触发模式为上升(下降)沿触发时,中断源闸门每次收到一个有效的上升(下降)沿,就会将边沿计数器加1,用于记录在此工作模式下的外部中断源在一定的时间内向中断控制器发送的中断请求的次数。如图4所示,每个中断源的边沿计数器为4-bit,最多可记录15次外设发送的中断请求。当中断源闸门工作在状态a1时,即使外设没有向中断源闸门发送有效的上升(下降)沿,只要边沿计数器的值不为0,就会将ip置1。当处理器接收了此中断源的中断通知时,会将边沿计数器减1。当处理器通过发送控制信号修改某个中断源闸门的触发模式配置寄存器时,硬件会自动将对应的边沿计数器清零,因为之前记录的数值已经没有意义。

实施例3

如图5、图6、图7以及图8所示,本实施例中每个中断源都有自己的嵌套优先级寄存器和响应优先级寄存器,均占4-bit,最多支持16种优先级,优先级数字越大意味着优先级越高。嵌套优先级为0表示“不可能嵌套”,响应优先级为0表示“不可能中断”。当多个中断源同时将对应的ip置1时,只有响应优先级最高的中断源才能向处理器发出中断通知,若有两个或以上的中断源的响应优先级相同,则选择序号较小的那个向处理器发出中断通知。进一步的,只有响应优先级大于响应优先级阈值的中断源才能向处理器发送中断通知。响应优先级阈值为15表示屏蔽所有中断;响应优先级阈值为0表示不屏蔽所有中断。进一步,如图6所示的,由比较器选出的响应优先级最大,或者序号最小的中断源,即使其响应优先级不大于响应优先级阈值,也会将中断源通知寄存器的值修改为该中断源的序号,以便处理器在未收到来自于中断控制器发送的中断通知的情况下能够主动读取中断源通知寄存器的值。

如图6所示,若有一个或多个中断源闸门的工作状态为a3,说明处理器正在处理这些中断源的中断通知。比较器会对这些中断源的嵌套优先级进行比较,并选出最大值,将其存进嵌套优先级阈值寄存器。当有新的中断源将其对应的ip置1时,比较器会将该中断源的嵌套优先级与嵌套优先级阈值进行比较。若该中断源的嵌套优先级大于嵌套优先级阈值,则允许其向处理器发送新的中断通知,并且修改中断通知寄存器中存储的中断源序号。进一步的,嵌套优先级阈值寄存器不仅会在处理器向中断控制器发送响应信号的时候自动被比较器的输出修改,也可以被处理发送的控制信号所修改,以满足特殊需求。

中断控制器向处理器发出中断通知之后,若处理器能够接收此中断通知,则会通过向中断控制器中的中断通知寄存器发送读命令来执行响应操作。中断控制器在收到处理器发来的响应信号之后,会将中断通知寄存器中存储的中断源序号返回给处理器,处理器可据此决定具体要执行哪一个中断处理函数。与此同时,中断控制器会将此中断源序号对应的中断源闸门的工作状态从a2转为a3,并将对应的ip清零。如果中断控制器向处理器返回的中断源序号为0,则表示无中断通知。

进一步的,如果处理器完成了某个中断源的中断处理函数,则需要向中断控制器发送完成信号,具体的实现方式为向中断通知寄存器写入其执行完毕的中断处理函数对应的中断源序号。中断通知寄存器在收到写命令之后,会将中断源序号对应的中断源闸门的工作状态由a3转为a1,即允许此中断源经过中断源闸门发起下一次中断请求。进一步的,处理器在执行某个高优先级中断的时候,中断控制器中可能有多个低优先级中断源的ip为1,因此在处理器向中断源通知寄存器写入一个中断源序号,即发送完成信号之后,中断源通知寄存器的值会变为某个低优先级中断源的序号而不会变为0。因此处理器在发送完成信号之后,退出某个中断处理函数之前,可以再次读取中断源通知寄存器的值,若为0则可以正常退出,若不为0则根据读取到的中断源序号选择执行其它的中断处理函数。这样大大减少了进入和退出中断处理函数时必须执行的压栈和出栈操作,提高了系统的实时性。

为了记录当前嵌套的中断层数,中断计数器在处理器每次向中断控制器发送响应信号时加1,在处理器每次向中断控制器发送完成信号时减1。处理器可根据需要读取中断计数器的值来确定当前多个中断的嵌套状态。

如图7所示,一个完整的中断请求流程如下:

b1.如果中断源闸门处于a1状态,则中断源经过中断源闸门发起中断请求,硬件自动将ip置1,并将中断源闸门的工作状态由a1转为a2,后续的中断将会被闸门屏蔽。

b2.按照上述仲裁机制,选择出符合条件的中断源向处理器发送中断通知。

b3.处理器收到中断通知之后,如果能够接收,则向中断源通知寄存器发出读命令以获取引起中断通知的中断源序号。同时中断控制器将对应的中断源闸门的工作状态由a2转为a3,并将ip清零。

b4.处理器根据读取到的中断源序号选择进入某个中断处理程序。

b5.处理器执行完中断处理程序之后,向中断源通知寄存器发送写命令,写入的数据为b3中读取到的中断源序号。中断控制器在收到该写入命令之后将对应的中断源闸门的工作状态由a3转为a1。

综上所述,处理器通过修改中断控制器中不同寄存器的值来配置中断控制器的工作模式,因此中断控制器的每个32-bit寄存器都应当是存储器地址映射的。本实施例的中断控制器能接收32个外部中断,因此一种可能的寄存器地址映射如图8所示。

显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1