电子说
复位保护电路,是在系统进行复位的过程中对接口进行硬性逻辑保护,避免毛刺和错误对周围系统产生影响的模块。
通常而言,复位保护电路的开启应该在复位之前,关闭应该在复位撤离之后。咱们针对握手接口来分类看下如何进行复位保护(使能接口也类似)。
在复位期间由于复位信号到达不同寄存器的时间不同,加之组合逻辑路径,可能会产生错误的valid信号对外输出。
显然在本系统单独复位的场景下,是不应该有对外的valid输出的,因此在复位前,需要将对外输出的valid信号&&0操作,确保复位和解复位期间没有valid误触发。
进入复位的阶段,对内输入的ready是可以不做处理的,因为即使复位时出现了对外valid的误触发,系统也马上就会进入复位状态了不会有任何影响。
在解复位阶段,如果流程内能够通过时钟关断或时钟降频等手段来保证系统内的寄存器同一拍解复位,在内部不产生valid误触,对内输入的ready可以不经过逻辑处理。
如果没有其他的手段保护,可以考虑对内的in_ready = out_ready || 1来保证在复位撤离阶段将误触发的valid通过假握手丢弃掉。
系统复位期间,从业务需求上其他系统理应不对该系统有事务操作。
如果真的出现了极端异常场景,那么比较合理的情况是对外输出的ready保证为1,将事务丢弃,不阻塞其他系统,如果为带rsp的事务那就等待其他系统的超时中断。
在复位和复位期间,一般而言输入的valid是无需理会的。解复位时最好也是通过其他手段保证不出现内部的ready误触,且当本系统单独复位期间其他系统理应不存在请求到来,因此对内输入的valid也是不需要经过特殊处理的。
如果没有其他的手段保护,可以考虑对内的in_valid = out_valid && 0,避免内部误触发的ready同in_valid进行了握手。
通常而言,复位保护的使能信号从寄存器输出,作用于RTL,那么同样存在一个异步路径的问题。因为使能复位保护和撤销复位保护时,RTL是没有处于工作状态的,且内部电路处于稳态。没有工作处于稳态时,对外的valid必然为0,ready必然为1(如果不满足这个条件,请单独讨论)。
对外out_valid = 0 && (~prot_en),此时prot_en由1跳变为0(或0跳变位1),输出逻辑不会改变,也不存在亚稳态采样的问题;对外输出的out_ready = 1 || (prot_en),此时prot_en由1跳变为0(或0跳变位1),输出逻辑不会改变,同样不存在亚稳态采样的问题。
因此个人认为, 由寄存器输出的prot_en作用于内部逻辑时,无需经过跨异步处理 。
全部0条评论
快来发表一下你的评论吧 !