This undergraduate course presents the entire hierarchical structure of computer architecture, beginning at the lowest level with a simple machine model (e.g., a simple von Neumann machine). Topics include: (1) microprocessors, (2) memory hierarchy, (3) process and thread management, (4) I/O handling, and (5) assembler concepts. Students gain an understanding of the interactions of hardware and software in a general-purpose computer system.
This undergraduate course presents the fundamental concepts for constructing digital systems. Topics include: (1) numbering systems, (2) Boolean algebra, (3) combinational logic, (4) graphical simplification, (5) sequential logic, (6) registers, and (7) state machines. Students are also introduced to the basics of hardware description languages.
This undergraduate course presents both the design and the applications of field-programmable gate arrays (FPGAs). Topics include: (1) Electronic Design Automation (EDA) tools for design, placement, and routing, (2) Hardware Description Languages (HDL) for simulation and synthesis, and (3) state machine specification, design, and simulation. Students work in teams on laboratory assignments and a cumulative design project using FPGA hardware design kits. Skills developed include designing embedded systems, as well as developing test benches for design verification.
This graduate course presents advanced concepts that improve the performance of computing systems. Topics include: (1) modern microarchitectures, (2) memory systems, (3) storage systems, and (4) parallel computing. Students also examine case studies of microprocessors, and work in teams to evaluate system performance on benchmark suites. This course also serves as a gateway course in the computers domain of the electrical engineering graduate program.
This graduate course presents techniques in computer architecture design that can mitigate the effects of soft errors in microprocessors. Reliability is examined from both a hardware perspective and a software perspective. Topics include: (1) architectural vulnerability factors, (2) fault injection, (3) error detection and correction (EDAC), and (4) redundant multi-threading.