在工程项目中,不管是小到模块级验证,还是大到系统级验证,都有一项不可缺少的feature,那就是中断。
中断是一种硬件与软件间、cpu与外设间的交互手段,中断一旦出问题,芯片很可能会因此缺失某些特性,甚至于毁了整颗芯片,中断验证由此显得极为关键。
本期,小编将给大家带来工程项目中常常碰到的中断的验证。
1 何为中断
我们先来了解下什么是中断?
中断是指:芯片在执行程序指令流的过程中,突然出现某些意外情况而需要中止执行当前程序,并转入处理新的程序指令流,处理完毕后又返回原被暂停的程序指令流继续运行的机制。
(注意,工程实践中需要注意中断和查询的区别,中断是事件触发型的,可以是软件也可以是硬件,而查询,一般是软件行为,循环poll某个状态或者寄存器值。比如,中断就好比你点了个外卖,然后你就去干你别的事了,过了一会外卖小哥打电话叫你下楼取外卖;而查询与中断的区别在于,外卖小哥不会打电话给你,你点完外卖后要一直拿着手机查询订单状态,当外卖到楼下后自己下楼取餐。)
2 中断执行
中断的具体流程是怎么样的呢?
1、当设备遇到某一事件或错误发生时,将发出IRQ中断给中断控制器(有的设备可能无中断控制器)。
2、中断控制器对这个IRQ进行硬件处理,把一些信息记录在中断控制器的寄存器上,然后中断控制器通过IRQ中断线给cpu发送中断信号。
3、cpu收到中断信号后会对中断控制器中的寄存器进行访问,读取中断信息存入自身的状态寄存器中,并且有的中断控制器还会通过mask寄存器屏蔽对应的中断,之后cpu执行存好的中断驱动程序。
后面的操作就得根据具体的驱动程序来决定了,大致上就是备份数据,清中断源等,最后就是恢复数据,这整个就是一个中断发生后的处理流程啦!
3 中断类型
说完中断流程,我们来看下中断类型,按照功能类型来划分,中断可以分为事件中断和异常中断。
事件中断:一般是由硬件触发某个寄存器并拉高中断线,通知软件介入处理某些具体事务,比如一些周期性的神经网络训练请求或者完成一次DMA搬运操作等,事件中断属于软硬件协同工作上的一环。
异常中断:顾名思义,就是一些硬件不可预期的行为导致的错误发生,发生异常中断时,硬件可能已不能自我解决这种错误,需要向cpu申请支援。异常中断按照程度可以分为两类,分别为致命中断和非致命中断,它俩的区别在于硬件是否会由于异常错误挂死,甚至导致整个芯片崩溃宕机。
按照异常种类划分,例如可包括:
1、溢出中断,可能是某个计数器 ,也可能是某个buffer引发的溢出中断;
2、数据译码错误,比如,ecc中断,奇偶校验中断等;
3、协议违反中断,比如,axi协议的len不匹配数据,jedec协议的ca命令错误等等;
4、特性违反错误,比如,具体某个模块中的描述符错误,地址越界,传输错误等等。
对于模块级验证中的中断特性,验证人员需要考虑的是这些中断能不能被正常触发,触发中断后能不能正常上报,上报之后中断状态可不可查,中断源能不能被清除,清除之后能不能再次触发,中断是否可支持mask等。在这个一系列过程中,我们还要考虑中断类型与寄存器对应bit是否匹配(比如,ECC错误出现,feature中描述对应的寄存器的第1bit拉高,但是硬件模块错误的把第8bit拉高)、中断之间是否存在相互干扰、多中断发生时是否能准确上报、无异常发生时中断不能拉高、清除某个中断时不能错误清除其他的中断等等。
对于系统级中断验证,验证人员考虑的可能就不是那些底层的中断功能能否正常实现,而是要考虑各个模块,各个子系统的中断线能否正常汇聚到中断控制器,中断控制器的中断线是否能正常发送到cpu的中断管脚、进入低功耗模式前后的中断状态等等。
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !