Computer Engineering Minor

eb43d1b6-dc86-4d58-b1aa-36c3c776598c | 86095


The computer engineering minor provides students with a foundation in digital systems design, an understanding of computer organization, and an introduction to embedded systems programming.  Students build on this core through elective courses in the areas of hardware design, architectures, networks and systems.

Notes about this minor:

  • The minor is closed to students majoring in computer engineering, computer engineering technology, electrical engineering technology, or telecommunications engineering technology. 
  • Posting of the minor on the student's academic transcript requires a minimum GPA of 2.0 in the minor.


Notes about this minor:

  • The minor is closed to students majoring in computer engineering, computer engineering technology, electrical engineering technology, or telecommunications engineering technology. 
  • Posting of the minor on the student's academic transcript requires a minimum GPA of 2.0 in the minor.
Computer Science I (or equivalent)
This course serves as an introduction to computational thinking using a problem-centered approach. Specific topics covered include: expression of algorithms in pseudo code and a programming language; functional and imperative programming techniques; control structures; problem solving using recursion; basic searching and sorting; elementary data structures such as lists, trees, and graphs; and correctness, testing and debugging. Assignments (both in class and for homework) requiring a pseudo code solution and an implementation are an integral part of the course. An end-of-term project is also required.
Plus one of the following:
   Calculus B
This is the second course in three-course sequence (COS-MATH-171, -172, -173). The course includes Riemann sums, the Fundamental Theorem of Calculus, techniques of integration, and applications of the definite integral. The techniques of integration include substitution and integration by parts. The applications of the definite integral include areas between curves, and the calculation of volume.
   Project-based Calculus I
This is the first in a two-course sequence intended for students majoring in mathematics, science, or engineering. It emphasizes the understanding of concepts, and using them to solve physical problems. The course covers functions, limits, continuity, the derivative, rules of differentiation, applications of the derivative, Riemann sums, definite integrals, and indefinite integrals.
   Discrete Mathematics for Computing
This course introduces students to ideas and techniques from discrete mathematics that are widely used in Computer Science. Students will learn about the fundamentals of propositional and predicate calculus, set theory, relations, recursive structures and counting. This course will help increase students’ mathematical sophistication and their ability to handle abstract problems.
Required Courses
Digital System Design I
The course covers the specification, analysis, and design of basic digital systems, including the design of combinational and sequential circuits using basic logic components: AND, OR, INV, NAND, NOR, and XOR. Standard modules, such as decoders, multiplexers, shifter registers, adders, and counters, will be analyzed. Lectures will discuss fundamental design methodologies using Karnaugh Maps as well as Mealy and Moore state machines. The laboratory provides hands-on experiences of the design, implementation, and testing of digital systems using SSI, MSI, and FPGA components as well as CAD tools.
Assembly Language
This course introduces embedded systems, along with fundamental computer organization, assembly language programming, and mixed language programming with C and assembly. Using a modern microcontroller and embedded systems IDE, such as the ARM Cortex-M0+ and Keil Microcontroller Development Kit, the course covers embedded programming concepts and interface modules, as well as addressing methods, machine instructions, assembler directives, macro definitions, code relocatability, subroutine linkage, data structures, I/O programming, exception processing, and interrupts. Program design techniques necessary to write efficient, maintainable device drivers are considered.
Computer Organization
Provides an understanding of the information transfer and transformations that occur in a computer, with emphasis on the relations between computer architecture and organization. Topics include design levels and their respective primitives, modules and descriptive media, register transfer and micro-operations, basic computer organization and design, central processor organization, control unit and microprogramming, memory organization, input-output organization, computer architecture defining the hardware/software interface, and from architecture to organization (one to many).
Choose two of the following:
   Digital System Design II
This course presents modern approaches to the design, modeling and testing of digital system. Topics covered are: VHDL and Verilog HDL as hardware description languages (HDLs), simulation techniques, design synthesis, verification methods, and implementation with field programmable gate arrays (FPGAs). Combinational and both the synchronous and asynchronous sequential circuits are studied. Testing and design for testability techniques are emphasized and fault tolerant and fail safe design concepts are introduced. Laboratory projects that enable students gain hands-on experience are required. The projects include complete design flow: design of the system, modeling using HDLs, simulation, synthesis and verification.
   Applied Programming
An introduction to classical algorithms used in the solution of numerical problems encountered in science and engineering. The C language will be introduced as a tool for implementing these algorithms. Topics include an introduction to C, computer number representation and roundoff error, algorithms for finding roots of nonlinear equations, interpolation, numerical differentiation and integration, function approximation and data fitting solutions to systems of linear equations, and general matrix manipulation.
   Interface and Digital Electronics
This course covers various sensors, motors, signal conditioning circuits including amplification, filtering, level shifting, ADC, and DAC. Modern tools, such as Keil ARM MDK and PSpice will be used to simulate and debug modern microcontrollers, such as NXP Kinetis, analog active filters, and operational amplifier application circuits. Each team of two students is required to design a complete data acquisition system from sensors, amplification, filtering, ADC, and DAC to analog outputs through either wired transmission or wireless transmission circuits
   Digital Signal Processing
This course introduces the basic elements of continuous and discrete time signals and systems and fundamental signal processing techniques, such as FIR and IIR Filtering, the Fourier transform, the Discrete Fourier transform and the z transform. Theory is strengthened through MATLAB-based projects and exercises.
   Digital IC Design
This course will cover the basic theory and techniques of Digital Integrated Circuit Design in CMOS technology. Topics include CMOS transistor theory and operation, design and implementation of CMOS circuits, fabrication process, layout and physical design, delay and power models, static and dynamic logic families, testing and verification, memory and nanoscale technologies. Laboratory assignments and project facilitate in hands-on learning of circuit-level design and simulation, layout and parasitic extractions, pre and post-layout verification and validation, full-custom flow and Synthesis based flow, using industry standard CAD tools.
   Computer Architecture
The course covers various aspects of advanced uniprocessor computer architecture design. Instruction set architecture design alternatives are discussed with emphasis on the Reduced Instruction Set Computer (RISC) architecture. Techniques to enhance CPU performance such as pipelined execution optimizations, conditional branch handling techniques, exploitation of instruction-level parallelism, multiple-instruction issue and dynamic scheduling are studied. Cache, and memory hierarchy design and performance issues are also presented. The design aspects of efficient and reliable input/output systems are also covered.
   Data and Communication Networks
This course will give an overview of the technologies, architectures and protocols used to build various types of computer and communication networks - wired or wireless. The emphasis will be placed on discussions of various network design problems and solution approaches. Specific issues covered in this course include: framing and coding, error detection, multiple access control, addressing, routing, flow and congestion control, scheduling and switching.
   Multiple Processor Systems
The course introduces basic concepts of parallel and high-performance computing and current methodologies and trends in the design and programming of multiprocessor systems. Theoretical models of parallel computing and performance metrics are studied and contrasted with practical parallel system architectures, programming environments, and benchmarking techniques. Parallel architectures are classified according to mode and degree of parallelism, memory organization, and type and typology of interconnection networks used in the design. The suitability of various architectures in meeting demands is studied in depth including the study of representative examples of current commercial machines. Students will complete programming assignments on a parallel computer illustrating practical issues. A review and analysis of a commercial parallel processor system or an active research area is required; written review presented in class.
   Reconfigurable Computing
The objective of this course is to present the foundations of reconfigurable computing methodologies from both hardware and software perspectives. Topics covered are: architectures of modern field programmable gate arrays (FPGAs), digital system design methodologies using FPGAs, hardware-software co-design with embedded processors, hardware optimization techniques, system level integration under operating system, dynamic reconfiguration. Laboratory projects in which students will acquire a solid capability of Xilinx CAD tools and FPGA devices are required. The projects include the whole design flow: design of the system, VHDL modeling, software and hardware development, FPGA verification.
   Design for Cryptographic Applications
The objective of this course is to build knowledge and skills necessary for efficient implementations of cryptographic primitives on reconfigurable hardware. The implementation platform will be a field programmable gate array (FPGA) containing a general purpose processor and additional reconfigurable fabric for implementations of custom hardware accelerators. In the studio format, team projects require design of selected cryptographic primitives followed by comparison and contrast of various implementation alternatives, such as software, custom FPGA hardware, and hybrid hardware-software co-design. Project teams are ideally composed of one Computer Engineering student and one Software Engineering or Computer Science student. Computer Engineering students lead the hardware design portions of each project, and Software Engineering and Computer Science students lead the software development portions. Topics may include binary finite field arithmetic, block ciphers, hash functions, counter mode of operation for block ciphers, public key cryptosystems, hardware/software co-design methodologies with FPGAs, software development and profiling, high level synthesis, on-chip buses, hardware/software interfaces, custom hardware accelerators and side channel attacks.
   Real Time and Embedded Systems
This first course in a graduate elective sequence will begin by presenting a general road map of real-time and embedded systems. The course will be conducted in a studio class/lab format with lecture material interspersed with laboratory work. This course will introduce a representative family of microcontrollers that will exemplify unique positive features as well as limitations of microcontrollers in embedded and real-time systems. These microcontrollers will then be used as external, independent performance monitors of more complex real-time systems. The majority of the course will present material on a commercial real-time operating system and using it for programming projects on development systems and embedded target systems. Some fundamental material on real-time operating systems and multiprocessor considerations for real-time systems will also be presented. Examples include scheduling algorithms, priority inversion, and hardware-software co-design.
   Modeling of Real-Time Systems
This course introduces the modeling of real-time software systems. It takes an engineering approach to the design of these systems by analyzing system models before beginning implementation. UML will be the primary modeling methodology. Non-UML methodologies will also be discussed. Implementations of real-time systems will be developed manually from the models and using automated tools to generate the code.
   Performance Engineering of Real-Time and Embedded Systems
This course discusses issues of performance in real-time and embedded systems. Techniques for profiling the resource usage of a system and for measuring the effect of increasing system requirements will be covered. The control of physical systems will motivate the need for performance tuning of a real-time system. Students will write programs running under a real-time operating system that can maintain control of a physical system. The course will discuss and experiment with performance trade-offs that can be made using hardware-software co-design.
   Machine Intelligence
Machine intelligence teaches devices how to learn a task without explicitly programming them how to do it. Example applications include voice recognition, automatic route planning, recommender systems, medical diagnosis, robot control, and even Web searches. This course covers an overview of machine learning topics with a computer engineering influence. Includes Matlab programming. Course topics include unsupervised and supervised methods, regression vs. classification, principal component analysis vs. manifold learning, feature selection and normalization, and multiple classification methods (logistic regression, regression trees, Bayes nets, support vector machines, artificial neutral networks, sparse representations, and deep learning).
   Computer Vision
This course covers both fundamental concepts and the more advanced topics in Computer Vision. Topics include image formation, color, texture and shape analysis, linear filtering, edge detection and segmentation. In addition, students are introduced to more advanced topics, such as model based vision, object recognition, digital image libraries and applications. Homework, literature reviews and programming projects are integrated with lectures to provide a comprehensive learning experience.
   Design and Testing of Multi-Core Chips
Massive levels of integration following Moore’s Law is making modern multi-core chips all-pervasive in several domains ranging from scientific applications like weather forecasting, astronomical data analysis, bioinformatics applications to even consumer electronics. This course introduces students to current and future trends in IC Design. Students learn to identify bottlenecks in designing state-of-the-art multicore System-on-Chips (SoCs) and propose solutions to such design challenges from a cross-layer perspective spanning multiple levels of abstraction in the design process. Low-power and high-speed testing of multicore chips is an important design issue in Design for Testability (DFT) of such massive multicore systems. In this course students learn various issues and solutions to ongoing challenges in SoC testing. The instruction will rely on lectures, textbooks, seminal and cutting edge publication articles and term projects. Students will be evaluated based on homework assignments, class presentations, examinations and projects.
   Wireless Networks
This course will give an overview of the technologies, architectures and protocols used to build various types of computer and communication networks - wired or wireless. The emphasis will be placed on discussions of various network design problems and solution approaches. Specific issues covered in this course include: framing and coding, error detection, multiple access control, addressing, routing, flow and congestion control, scheduling and switching.
   High Performance Architectures
This course will focus on learning and understanding the available hardware options to satisfy the needs of high performance and computational intensive applications. Special attention will be paid to single platform massively parallel devices, their programming and efficient use of the hardware resources. The course will include hands on work with the actual device, lab work, and technical reports and conference paper reading as a relevant source information.