This course is a study of the evolution of computer architecture and the factors influencing the design of hardware and software elements of computer systems. Topics may include: instruction set design; processor micro-architecture and pipelining; cache and virtual memory organizations; protection and sharing; I/O and interrupts; in-order and out-of-order superscalar architectures; VLIW machines; vector supercomputers; multithreaded architectures; symmetric multiprocessors; and parallel computers. We will also address the modern computing unit design, such as Field-Programmable Gate Array (FPGA) architectures. Through lectures, assignments and projects, the students in the course will learn the fundamentals of modern micro-processors and reconfigurable computing units.