This course covers the basics of modern computer organization and architectures. The emphasis is on understanding the interaction between computer hardware units and the hierarchy in which these units are organized to achieve specific designed objectives. It has always been important to design computer systems to achieve high performance, but this requirement continues to provide a challenge. All of the basic performance characteristics of computer systems, including processor speed, memory speed, memory capacity, and interconnection data rates, are increasing rapidly. Moreover, they are increasing at different rates. This makes it difficult to design a balanced system that maximises the performance and utilisation of all elements. Thus, computer design increasingly becomes a game of changing the structure or function in one area to compensate for a performance mismatch in another area. This course will investigate design methodologies to address these challenges.