一个AMBA协议相关组合逻辑回环的问题

最近要设计一个单master控制两个slave的小系统,如下图所示。
一个AMBA协议相关组合逻辑回环的问题小系统框图
结果在综合和nlint的时候报出了组合逻辑回环的问题。
后来检查了一下代码,发现组合回环路径如下:
一个AMBA协议相关组合逻辑回环的问题组合回环路径
在BUSMATRIX(图中的BM1和BM2)中和返回给其master的hreadyout和其收到的htrans是组合关系。其组合路径就是图中的1和4。为了避开这种组合路径我之前设计不敢直接用返回的hreadyoutm,耍了个小聪明,使用了另一个端口的hreadyout,结果就出现了如上图的巨大组合回环路径。
之所以使用hreadyout来组合控制HTRANSM是为了解决以下场景:
Master访问BM1然后马上切换去访问BM2。访问BM1的数据phase和访问BM2的地址phase就重合了。为了在重合的时候将BM2的trans发送到BM2,就需要用BM1的ready来组合控制(在BM1的数据phase还未完成时,时不能将BM2的trans发下去,后面解释原因)。于是就产生了上面的组合回环路径。
也就是说直接在BM1的地址phase和数据phase都不然BM2的trans发下去。BM2需要在BM1的数据phase结束后的一个再讲trans发下去,这样就必须在BM2的数据phase的最后一个周期(此时ready1拉高)时,将trans,haddrs等信息保存下来。因为在当这个时候,回复给CPU的ready是有效的,也就意味着此时的CPU就可以认为给BM2的地址phase结束了,然后CPU下发的trans,地址等就可以跳变了。如果不在这个时候存下来,那么在下一个周期,haddrs等信息就不一样了,这样给BM2的地址phase就会漏掉一个。我之所以最开始没采用这种方法,就是因为这种方法需要增加若干寄存器,而且需要增加选择逻辑,而且在overlap的切换时要delay一个周期。但是组合逻辑回环的出现使得我只能采用这种方法。
另外在最初的设计中,还简单的在BM1的数据phase,直接将BM2的地址phase下发。结果总线被拉死了,具体原因和整个大系统有关,小系统可能看不出来。但是这样是有问题的。因为BM1的数据phase还没有结束,这个时候回复CPU的rdy是拉低的,所以CPU发出的trans可能一直是有效,CPU认为下一个传输还没有开始。但是这个时候就将BM2的数据phase发下去了,而BM2的ready为高,那么BM2就会开始处理这个传输,但是BM2把这个传输处理完了,确无法送达给CPU,因为CPU还在等BM1的数据phase结束。CPU的trans会一直保持有效,而BM2确认为我上一笔传输已经处理完了,这个时候CPU发起的是新的传输。BM2就会连绵不断的进行处理。从而导致BM2的slave口一直被无效的传输占用。