Supporting Distributed Shared Memory on multi-core Network-on-Chips using a dual microcoded controller