Best approach to reuse IP interfaces at SoC

I am not sure whether this is the correct forum to ask this question, but I recently moved to SoC verification where I didn’t like the way interfaces are connected to IPs (though reused the IP reference models the way it should be).

Below is the rough High Level SoC architecture diagram.

Current Implementation:

  • Instantiated interfaces per IP
  • Connected interface signals with IP signals by either forcing or assigning with hierarchical reference
 /*Exa 1:*/ force ip1_intf.sig1 = platform1.IP1.sig1
/*Exa 2:*/ assign ipA_intf.sig2 = platform2.platform2_ctrl.IP_A.sig2

Instead of this hierarchical connection, I think there should be some wrapper from IP having this connection which can be reused at SoC. But not sure how does it work.

Can anyone please suggest the better approach to reuse the IP interfaces at SoC.

I looked at multiple papers and blog, but mostly all are talking about the component reuse like agents or env. But couldn’t find anything addressing this area.