|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
2 l. s4 l9 s$ M! u# F/ {
本期内容我们将为大家介绍CPU处理外部事件的中断技术,以丰富RISC-V系列内容中处理器技术主题的内容。2 Y: j3 v% u- z/ R5 x; s
& f( F5 j. ^& D1、什么是中断6 q, F5 f: _8 w% V1 T( o6 T
中断是CPU处理外部事件的一个重要技术。它能使CPU暂停正在执行的任务,转而处理中断请求,处理完成后返回断点,继续执行原来的任务。( T( q& l! o2 Z& T8 B5 R5 [* P
+ \" X6 y$ T' @2、中断与轮询的区别
; \. H9 q& s ]+ Z5 V5 s在一个SOC中,外部设备与CPU的交互一般有两种手段:轮询和中断。
0 Z- `% O" Z2 U/ [ ?6 o轮询是指CPU不断查询外设的状态寄存器,从而了解设备的状态,进行必要的操作。为了节约CPU资源,查询工作往往不是连续的,而是定时进行。轮询方式具有简单,易实现,易控制的优势,同时也存在浪费CPU和系统资源,无法及时感知设备状态变化的不足。
. |$ d3 R6 ^$ [9 ? m中断,顾名思义,就是打断正在进行的工作。中断不需要处理器轮询设备的状态,设备在自己发生状态改变时将主动发送一个中断请求给处理器,后者在接收到这一请求时,会暂停当前正在执行的任务,转而去处理外设的中断请求。+ E" M7 Z" |' |) M( Y, b
目前大多数SoC的外设都采用中断的方式与处理器进行沟通,本文将重点介绍与中断实时性相关的技术。$ d* f o+ g2 x* o9 p3 d+ F
7 R# f5 Q l Z- M/ H! U& \: ?, W3、中断实时性的概念
- ?( P7 b7 _( H9 v4 K! k, P中断实时性是指CPU响应中断的快慢程度,我们可以用中断响应时间来衡量它。CPU响应中断,可以分为以下几个步骤:
: V4 E: B4 q' Y; C6 `(1)完成当前指令的执行
J/ A; r) S6 f* n/ n(2)保护现场* C, @1 I+ _2 z- g# L$ ]( m
(3)寻找中断入口2 Z h# Q; f& w
(4)执行中断处理程序
3 K9 X# a/ c3 ]/ a: F% f(5)中断返回并恢复现场4 R* D! ^: s$ k+ l4 C2 @3 J5 l
中断响应时间,就是从上述第(1)步开始,到第(4)步的第一条指令为止,所花费的时间。在很多系统,特别是实时系统中,必须尽量缩短中断响应时间,以提高中断的实时性。
0 T" P- Q+ {7 M# U: d* [% R( l1 V" o8 k3 w I/ V9 H
4、提高中断实时性的技术5 w5 S! T7 y+ ]+ R! R& I
我们重点介绍两项技术,分别用来加速上述的第(1)步和第(4)步。
* |. J1 X* f6 e# c0 `4.1 中断快速响应模式——加速完成当前指令
. I9 d9 ~% H# r- A: S* @在通常情况下,CPU会在每条指令的“退休”阶段响应中断。所谓“退休”,是指一条指令已经完成了所有的操作,即将从流水线上退出。如果CPU执行了多周期指令或者执行延时不可预期指令,那么该条指令需要较长的时间才能到达“退休”阶段。此时的中断响应速度会受到极大影响,大幅降低系统的实时性。8 G! p7 ?4 \4 J
在中断快速响应模式下,CPU无需等待指令退休,即可直接响应中断。这一机制可以打断较长执行延时的指令,从而提高中断响应的速度。/ \ M! @/ z% N" P0 y u/ \! a
【例】玄铁R807实现了中断快速响应模式,软件可以通过控制寄存器打开/关闭此功能。
! A5 M8 z: j3 ^3 r6 z% r0 e* H假设当前指令是一条Load指令,在没有cache或cache miss的情况下,CPU需要读取memory。受总线带宽和memory延时的影响,该指令的执行时间不确定。6 d6 b9 H* \3 \0 K! e# S$ E) ?
在普通模式下,CPU必须等到Load指令退休以后才能响应中断,等待时间可能是几十~几百个时钟周期,严重影响实时性。 s! S3 z9 X1 Q: c
在中断快速响应模式下,CPU放弃当前的Load指令,直接响应中断,等待时间几乎为零
+ E0 o6 A( e2 C- w. x! G# p8 @; ?
+ c0 n* C: z/ [4.2 利用TCM——更快开始处理中断
4 K% ]7 R# l& x0 Q1 F8 l" p7 Z5 V% iTCM是Tightly Coupled Memory的缩写,意思是紧耦合Memory。所谓“紧耦合”,是指与CPU的流水线紧密结合。我们可以把TCM通俗地理解为“CPU身边的memory”。它可以像一般memory一样读写,同时不受总线带宽的影响,可以保证单周期访问。TCM用于存放对实时性有严格要求的指令和数据,当然也是加速中断处理的有力手段。
1 H. Y5 _* }$ j1 l3 O# l, i【例】玄铁I805和R807实现了TCM。下面对比一下使用TCM与否的差别。
% ~" n; ]/ ?- x$ P% P不使用TCM:处理中断时,CPU跳转到普通memory空间取指令,访问延时不确定。虽然Cache可以起到加速的作用,但是Cache存在Miss、Eviction等不确定因素,所以不能100%保证实时性。0 C- e* N: e0 g1 q. i2 H }/ Z8 K
使用TCM:系统初始化时,通过专用接口将一些关键中断的处理函数搬运到TCM,并且把中断入口地址映射到TCM。处理中断时,CPU跳转到TCM区域取指令,TCM可以保证稳定的低延时指令流,从而100%满足实时性的要求。 |
|