How to Achieve Efficient Communication and Data Sharing in Multi-Core SoC Designs