Programmable system-on-chip