EE/CS 380 Computer Organization and Design: 3 Credits

Hardware and software organization and design of a typical computer; computer performance; instruction set design, machine language and assembler language programming, computer arithmetic; datapath and controller design; pipelining, memory structures, interfacing peripheral devices, and input-output structures. Prereq: EE 280.


ISBN 978-0-12-374493-7, Computer Organization & Design, The Hardware/Software Interface, Fourth Edition, Patterson & Hennessy, Morgan Kaufmann publisher, 4th Edition, 2009.

Additional materials provided to the students fill gaps in this text and also allow use of older editions: 2nd, 3rd, or 3rd revised.


Dr. Henry G. Dietz, Professor


The goals of this course center on giving students a basic understanding of how high-level-language programs can be implemented on systems constructed using digital logic, with sufficient depth and breadth to allow them to appreciate the properties of different computer organizations. This understanding integrates the concept of the Instruction Set Architecture (ISA), analytical evaluation of computer system performance, assembly language instruction set design and its relationship to high-level-language constructs, and understanding of how computer hardware is organized. The organization includes the fundamentals of datapath, memory organization, control logic, arithmetic function units, and input-output subsystem structures. Organizations from simple multi-cycle to more advanced pipelined and parallel architectures are introduced, with an emphasis on the MIPS ISA and understanding how computing systems are designed and how performance of alternative designs can be expected to differ. Software simulators are provided that allow the students to conduct experiments involving assembly language programming, implementation of instructions, and computer organization.


EE/CS 280


  1. The History/Continuing Evolution of Computer Organization
  2. Computer Abstractions and Technology
  3. How Integrated Circuits Have Influenced Computer Organization, Design, and Performance
  4. The Role and Importance of Computer Performance
  5. Different Types of Computer Instructions: The Language of a Computer
  6. How Computers Perform Arithmetic
  7. Design of a Central Processing Unit (CPU) Consisting of a Datapath and a Control Unit
  8. The Principle of Pipelining and How it Enhances Performance
  9. The Levels and Function of a Computer Memory Hierarchy
  10. The Interfacing of Processors and Peripherals
  11. Overview of Parallel Processing and High-End Computing Systems


Upon completion of this course the students should demonstrate the ability to:

  1. Understand the levels of software and hardware comprising the Instruction Set Architecture (ISA) of a computer
  2. Analytically and experimentally analyze, evaluate, and compare the performance of computers
  3. Understand how specific high-level-language program constructs are implemented in assembly language
    (formerly worded as: Design the assembly language instruction set of a high performance computer for a particular application environment of the compute)
  4. Understand how computers perform integer and floating-point (IEEE 754 format) addition, subtraction, multiplication, and division
  5. Organize, design, and implement at the gate and register level the datapath, controller, and memory of a computer
  6. Make design decisions based on performance data
  7. Write and run assembly language programs on a simulator of a designed computer
  8. Understand the historical and continuing evolution of computing systems and the effects of technological changes on computer design

Each online homework problem begins with one or more links that indicate which of the above outcomes are relevant.


Students write, assemble, and run assembly language programs on simulators for computers designed in this class. The simulators also are used to experiment with simple changes to the organization and/or implementation of instructions. Some of the simulations are supported by standard software (e.g., the SPIM MIPS simulator), but much of the simulation support was modified or created at the University of Kentucky specifically for this course. For example, although the support software can run in a UNIX or Windows environment, in response to student requests, WWW-browser-interfaced versions also have been developed for the students to use.


Using a MIPS-based assembly language instruction set as the starting point, students are exposed to computer system design at the gate, register-transfer, and module functionality levels. The lower-level coverage involves creation of complete designs for both a multi-cycle/microprogrammed and a single-cycle/pipelined system. Higher-level design coverage extends through treatment of out-of-order and speculative execution, BTB/BHB (branch target/history buffers), caches, TLBs (translation lookaside buffers), and parallel systems including superscalar execution, multi-core processors, GPUs (graphics processing units), and clusters. Functional block diagrams for state-of-the-art microprocessors also are referenced and contrasted for the purpose of enabling students to make system design decisions involving selection among commercial processor designs.


Lecture 3 hours per week


Engineering Science: 1.5 Credits (50%)
Engineering Design: 1.5 Credits (50%)


This course and the outcomes listed above support the following COE program outcomes:

(a) an ability to apply knowledge of mathematics, science, and engineering

(b) an ability to design and conduct experiments, as well as to analyze and interpret data

(c) an ability to design a system, component, or process to meet desired needs within realistic constraints such as economic, environmental, social, political, ethical, health and safety, manufacturability, and sustainability

(e) an ability to identify, formulate, and solve engineering problems

(i) a recognition of the need for, and an ability to engage in life-long learning

(j) a knowledge of contemporary issues

(k) an ability to use the techniques, skills, and modern engineering tools necessary for engineering practice

(m) an ability to analyze and design complex electrical and electronic devices, software, and systems containing hardware and software components

(n) a breadth of knowledge over computer engineering (analog and digital circuit design and analysis, electronics, signals and systems, program design and abstraction, software engineering, computer organization and architecture, algorithm design and analysis, embedded systems, operating systems and compilers)


Henry G. Dietz, May 28, 2010