Hardware prototyping and software debugging of multi-core architectures