跳转至

中断

中断是指令流水线检测到的异步事件,指令流水线可以根据检测策略,改变当前的指令序列,转移到其他序列中继续执行。和同步的异常不同,在逻辑上中断不需要立即打断当前的流水线步骤。

灵犀逻辑核中,中断可以来自灵犀物理核 内部,也可以来自其外部,这些中断由一组称为Xproxy的逻辑对象收集到一个统一数据结构上,并被灵犀逻辑核指令流水线统一调度。

在这些中断被响应前,这些中断会保持在一个Pending(挂起)的状态,这个状态可以从系统寄存器IPENDING获得。

下表列出当前支持的所有Xproxy收集的中断类型的列表。按优先级排序,越靠前者优先级越高:

  • ACR0中断: 绑定到ACR0的中断
  • ACR0_EI:绑定到ACR0的外部中断。用于灵犀物理核外产生的中断。
  • ACR0_TI:绑定到ACR0的内部时钟中断。用于灵犀物理核内的定时信号。
  • ACR1中断: 绑定到ACR1的中断
  • ACR1_EI:绑定到ACR1的外部中断。
  • ACR1_TI: 绑定到ACR1的内部时钟中断。

每种中断都有一个默认的绑定ACR 。这个ACR通常作为中断路由的默认目标ACR,除非有其他路由协议修改了它。

注意!

系统错误(比如RAS)现在被认为是一种ACR0_EI,未来有必要的时候可能会被分离出来。

中断可以被系统寄存器ECONFIG按中断类型去使能,也可以被系统寄存器CSTATE的I位对本ACR去使能。灵犀逻辑核(LxLC)在可以激发中断的时候,在符合如下所有规则的所有中断中,选择一个最高优先级的中断作为被激发的中断:

  • 该中断的对应系统寄存器IPENDING为1;
  • 该中断的对应系统寄存器ECONFIG为1;

  • 如下任一条件成立:

  • 该中断的目标路由ACR高于灵犀逻辑核(LxLC)的当前ACR;

  • 该中断的目标路由ACR等于灵犀逻辑核(LxLC)的当前ACR,并且当前CSTATE.I为1。

对于不同的ACRn,系统寄存器IPENDING和系统寄存器ECONFIG描述同一个中断收集数据结构,只有n大于或者等于所描述的绑定中断,对应的位才是有效的,否则,对应的位定义为“保留”。具体请参考对应的SSR描述。

灵犀逻辑核(LxLC)在激发中断的时候执行ASYNC_SERVICE_REQUEST流程。请注意:

  1. 在ASYNC_SERVICE_REQUEST流程中,灵犀逻辑核(LxLC)不会检测新的中断,所以中间不会有其他交叉的中断处理发生。
  2. ASYNC_SERVICE_REQUEST流程有可能访问EBSTATE,这个过程可以有可能发生异常,软件需要考虑有效手段避免这种可能性,否则异常流程可能覆盖一些公共的寄存器。

中断响应

软件通过向系统寄存器EOIEI写入中断代号响应中断。在中断被响应前,它保持在Pending状态。如果这个中断在下次中断检测中仍符合条件,中断会被再次激发。如果中断的Pending状态被消除后,Xproxy检测到新的信号,它可以重新设置这个状态。