System on chip design