Course Offerings

EECS 31/CSE 31/ICS 151: Digital Logic Design

Visit EECS 31/CSE 31/ICS 151 Course Web Site

ICS 151 1999 class pictureEECS 31/CSE 31/ICS 151 is the introductory course in digital design. First, students learn basic concepts of computer science and computer engineering such as binary number representation and arithmetic, Boolean algebra, finite-state-machine and instruction-set processors. They also learn basic logic and register-transfer components for design such as gates, flip flops, adders, multipliers, registers, memories and processors. Secondly, students learn the basics of design science. That is, how to convert design specifications into working implementations. They learn how to construct register-transfer components and how to optimize them for performance and cost. Furthermore, they learn how to design basic system components such as simple processors and custom hardware blocks. The course stresses the principles of design science and gives in each lecture clear and simple procedures on how to arrive at the best design from the given specification.

Text:

EECS 31L/CSE 31L: Digital Design Laboratory

Visit EECS 31L/CSE 31L Course Web Site

This is a laboratory course in which students learn the design process of modeling, simulation and synthesis of simple digital designs. Students in this class learn how to model designs on different levels of abstraction using C and VHDL languages. The course consists of four labs. In the first lab students are given a simple combinatorial design and then are required to generate VHDL structural and behavioral models and simulate using ModelSim. In the second assignment students define a simple structural FSM model in VHDL language and learn how to generate it from behavioral model. In the third lab they optimize the model hardware implementation of a 8-bit adder/subtractor. In the last lab the students generate datapath and control units that execute the given algorithm and model it by a clock-cycle accurate structural model. In this class students are given the opportunity to be creative and to produce the best possible design for the given constraints.

Text:

Videos:

ICS 152: Computer Systems Architecture

ICS 152 is the basic course in computer architecture. First, students learn basic concepts of computers and systems design such as instruction sets, instruction execution cycles, pipelining, multithreading, and multiprocessing. Second, the students learn basic components of computer systems such as processor organization, memory architecture, connection networks and I/O implementation. Thirdly, they learn different architectural styles such as CISC and RISC processors, superscalar and VLIW processors, multiprocessors and distributed computers. Students also learn how to specify a computer system; how to build it from the specification and how to design its software and hardware components.

Text:

ICS 155B: Computer Design Laboratory

Visit ICS 155B Course Web Site (will open a new window)

This is a laboratory course in which students learn the design process of converting algorithms into software/hardware designs. Students in this class learn how to model designs on different levels of abstraction using C and VHDL languages. The course consists of five labs. In the first lab students are given a well-known algorithm from DSP or multimedia applications and then are required to debug C and VHDL specifications or behavioral models. In the second assignment students complete a clock-cycle accurate behavioral model of the algorithm in VHDL language and learn how to generate it from behavioral models. In the third lab they optimize the model for software and in the fourth they optimize the model for hardware implementation. In the last lab the students generate databases and control units that execute the given optimized algorithm and model it by a clock-cycle accurate structural model. In this class students are given the opportunity to be creative and to produce the best possible design for the given constraints.

Text:

ICS 256: Design Synthesis

This course is an introduction to hardware synthesis on logic and register-transfer levels. First, the course deals with synthesis algorithms for logic synthesis and optimization for performance, cost and power. Second, the courses addresses the synthesis process from a behavioral description into a register-transfer (cycle accurate) implementation consisting of control units and datapaths for custom and standard processors. The course introduces the topics of component databases, component allocation, time-constrained and resource-constrained scheduling, functional unit, memory and bus binding, design estimation, modeling styles for synthesis, and design environments for automatic and interactive synthesis, The course also offers an introduction to common models and design processes for software/hardware codesign.

Text:

ICS 257: System Tools

This course deals with specification and design of embedded systems. The course starts with different models of computations and requirements for embedded systems. It then gives a survey of specification languages for generating executable specification for embedded systems. Furthermore, the course covers embedded systems architectures, architectural explorations and optimizations using different types of intellectual properties (IPs). The course defines the problems of architecture allocation behavior, variable and channel partitioning and mapping, selection of communications protocols, memory architectures, and estimation of performance, power, and cost. The topics also include synthesis of software and hardware for embedded systems and their relation to the overall design process. The course also covers different types of models necessary for the design process from specification to implementation and CAD tools needed in the process.

Text:

EECS 222: Embedded System Design and Exploration

Visit EECS 222 Course Web Site

EECS 222 1999 class pictureThe Embedded System Design and Exploration course introduces a model-based approach to system level design. It presents modeling techniques for both computation and communication at different levels of abstraction, such as specification, transaction level and cycle-accurate level. It discusses synthesis methods for system level architectures, embedded software and hardware components. Using these methods, designers can develop applications with high level models, which are automatically translatable to low level implementations. Furthermore, this course describes simulation-based and formal verification methods that are essential for achieving design confidence. Finally, we conclude with an overview of existing tools along with a design case study outlining the practice of embedded system design.

Text: