def connect(s, other, parent): # We are doing GiveIfcRTL (s) -> [ AND ] -> RecvIfcRTL (other) # Basically we AND the rdy of both sides for enable if isinstance(other, RecvIfcRTL): connect(s.ret, other.msg) m = And(Bits1) if hasattr(parent, "give_recv_ander_cnt"): cnt = parent.give_recv_ander_cnt setattr(parent, "give_recv_ander_" + str(cnt), m) else: parent.give_recv_ander_cnt = 0 parent.give_recv_ander_0 = m connect_pairs( m.in0, s.rdy, m.in1, other.rdy, m.out, s.en, m.out, other.en, ) parent.give_recv_ander_cnt += 1 return True elif isinstance(other, CalleeIfcCL): if s._dsl.level <= other._dsl.level: raise InvalidConnectionError( "CL2RTL connection is not supported between RecvIfcRTL" " and CalleeIfcCL.\n" " - level {}: {} (class {})\n" " - level {}: {} (class {})".format( s._dsl.level, repr(s), type(s), other._dsl.level, repr(other), type(other))) m = GetRTL2GiveCL(s.MsgType) if hasattr(parent, "GetRTL2GiveCL_count"): count = parent.GetRTL2GiveCL_count setattr(parent, "GetRTL2GiveCL_" + str(count), m) else: parent.GetRTL2GiveCL_count = 0 parent.GetRTL2GiveCL_0 = m connect_pairs( s, m.get, m.give, other, ) parent.GetRTL2GiveCL_count += 1 return True return False
def connect( s, other, parent ): # We are doing SendCL (other) -> [ RecvCL -> SendRTL ] -> RecvRTL (s) # SendCL is a caller interface if isinstance( other, CallerIfcCL ): m = RecvCL2SendRTL( s.MsgType ) if hasattr( parent, "RecvCL2SendRTL_count" ): count = parent.RecvCL2SendRTL_count setattr( parent, "RecvCL2SendRTL_" + str( count ), m ) else: parent.RecvCL2SendRTL_count = 0 parent.RecvCL2SendRTL_0 = m connect_pairs( other, m.recv, m.send.msg, s.msg, m.send.en, s.en, m.send.rdy, s.rdy ) parent.RecvCL2SendRTL_count += 1 return True elif isinstance( other, CalleeIfcCL ): if s._dsl.level <= other._dsl.level: raise InvalidConnectionError( "CL2RTL connection is not supported between RecvIfcRTL" " and CalleeIfcCL.\n" " - level {}: {} (class {})\n" " - level {}: {} (class {})".format( s._dsl.level, repr( s ), type( s ), other._dsl.level, repr( other ), type( other ) ) ) m = RecvCL2SendRTL( s.MsgType ) if hasattr( parent, "RecvCL2SendRTL_count" ): count = parent.RecvCL2SendRTL_count setattr( parent, "RecvCL2SendRTL_" + str( count ), m ) else: parent.RecvCL2SendRTL_count = 0 parent.RecvCL2SendRTL_0 = m connect_pairs( other, m.recv, m.send.msg, s.msg, m.send.en, s.en, m.send.rdy, s.rdy ) parent.RecvCL2SendRTL_count += 1 return True return False