ECE 506C Compiler Design

Course Level

Graduate

Course Description

The ability to translate human-readable code into efficient machine instructions is a cornerstone of software development, enabling the creation of everything from operating systems to application software. Understanding compiler design is crucial for computer scientists and engineers to optimize program performance, enhance language features, and support new programming paradigms. In this course, students will not only learn the theoretical foundations and practical skills needed to construct compilers but also appreciate the impact of compiler technology on modern computing. This course introduces the fundamental concepts of compiler design, including lexical analysis, syntax analysis, semantic analysis, code generation, and optimization. Students will explore the theory and practical techniques used to construct compilers for high-level programming languages.

Course Units
3
Core Designation
Typically Offered
Fall

ECE 506 Reconfigurable Computing

Required course: No

Course Level

Graduate

Course Description

In this class, we investigate the state-of-the-art in reconfigurable computing both from a hardware and software perspective; understand both how to architect reconfigurable systems and how to apply them to solving challenging computational problems. The purpose of this course is to prepare students for engaging in research on reconfigurable computing. Initially, we review in detail the basic building blocks of most reconfigurable computers. Characteristics of FPGA architecture such as the organization of device logic and interconnection resources are examined to quantify hardware limitations. These physical limitations are then contrasted with computer-aided design issues such as the selection of circuit component locations in devices (the placement problem) and subsequent circuit interconnection between components (the routing problem). We then focus on the architecture for existing multi-FPGA systems and on compilation techniques for mapping applications described in a hardware description language to reconfigurable hardware. We will explore the question of “What makes an application suitable for reconfigurable computing?” with case studies in bioinformatics, image processing, video Processing, cryptography, molecular dynamics and computational fluid dynamics. We evaluate the FPGA based application acceleration with the emerging multicore architectures from the perspectives of price/performance and performance/watt. Specific contemporary reconfigurable computing systems are examined to identify existing system limitations and to highlight opportunities for research in dynamic and partial configuration areas.

Enrollment Requirements

ECE 562 and ECE 574A

Course Texts

Reconfigurable Computing: The Theory and Practice of FPGA-Based Computation, Scott Hauck, André DeHon, Morgan Kaufman, 2007.

Other reading material will be either presented in the class or available as online papers.

Schedule

150 minutes lecture per week

Assessment

  • Homework: 3-5 assignments
  • Project: 1 project
  • Exams: 1 midterm exam
  • Typical grading policy: 20% midterm, 50% project, 20% homework, 10% participation
Course Units
3
Core Designation
Typically Offered
Spring

ECE 505C Advanced Data Structures

Course Level

Graduate

Course Description

This course focuses on the study and application of data structures that are critical for solving complex computational problems. Topics include advanced trees, graphs, hashing, priority queues, and advanced sorting algorithms. Special emphasis is placed on understanding the algorithmic complexities and performance trade-offs associated with various data structures. Through lectures, hands-on projects, and problem-solving exercises, students will learn to design and implement efficient data structures for real-world applications.

Course Units
3
Core Designation
Typically Offered
Spring

ECE 503C Algorithms Design and Analysis for Engineering Applications

Course Level

Graduate

Course Description

This course provides an introduction to the design and analysis of computer algorithms. The topics covered include the design of common algorithms for various computational problems, the data structures used to implement these algorithms, and the rigorous analysis of their correctness and efficiency. The course places particular emphasis on fundamental principles and practical skills for solving real-world engineering problems.

Enrollment Requirements

ECE 201 and CSC 355.
Course Units
3
Core Designation
Typically Offered
Fall
Available Online

ECE 502C Operating System Design

Course Level

Graduate

Course Description

This is a foundational course that offers an introduction to computer operating systems and their applications in engineering systems, the course delves into the principles and techniques involved in designing and implementing operating systems. It covers a wide range of topics, including operating system structures, process management, process synchronization, memory management, storage management, file systems, device management, and network and distributed operating systems. While the course covers important theoretical concepts, formal proofs are not emphasized. Instead, concepts are conveyed through real-world examples from modern engineering systems. A key focus of the course is providing students with practical experience in C programming for low-level operating system development, students will have the opportunity to work with and understand low-level tools for system diagnostics. By engaging in hands-on projects and assignments, students will gain significant exposure to the intricacies of operating systems and enhance their programming skills. May be convened with ECE402C.

Course Units
3
Core Designation
Typically Offered
Spring

ECE 501C Data Management

Required course: No

Course Level

Graduate

Course Description

This course provides students with a comprehensive introduction to the design and programming aspects of data management systems. This course covers fundamental concepts, techniques, and tools that are essential for developing databases and utilizing them in various engineering applications. The course encompasses a wide range of topics, including the understanding of data types and their lifecycle, the entity-relationship data model, Structured Query Language (SQL), logical and physical database design, query languages, query processing and optimization, concurrency control, and crash recovery mechanisms. By the end of this course, students will have a solid foundation in the design and programming of databases, enabling them to develop sophisticated and reliable data management systems for a variety of engineering applications.

Enrollment Requirements

ECE 201 and CSC 355 or equivalent recommended.

 

Course Units
3
Core Designation
Typically Offered
Fall
Available Online
Contact Us
Contact Us
Loading...