Students gain a foundation in digital systems design, an understanding of computer organization, and an introduction to embedded systems programming. They also build on this core through elective courses in the areas of hardware design, architectures, networks and systems.
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. Lec/Lab 6 (Fall, Spring).
Plus one of the following:
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. (Prerequisites: C- or better in MATH-171 or 1016-171T or 1016-281 or 1016-231 or equivalent course.) Lecture 5 (Fall, Spring).
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. (Prerequisites: MATH-111 or (NMTH-220 and NMTH-260 or NMTH-272 or NMTH-275) or equivalent courses with a minimum grade of B-, or a score of at least 65% on the RIT Mathematics Placement Exam.
Co-requisites: MATH-181R or equivalent course.) Lecture 6 (Fall, Spring).
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. (Co-requisites: MATH-182 or MATH-182A or MATH-172 or equivalent courses.) Lecture 3, Recitation 1 (Fall, Spring).
Digital System Design I
This course covers the specification, analysis, modeling and design of digital systems. Standard modules, such as decoders, multiplexers, shifter registers, adders, and counters, will be analyzed. Lectures will discuss fundamental design methodologies, state machines, and digital system modeling with the use of VHDL as a hardware description language. The laboratory provides hands-on experiences of the design, modeling, implementation, and testing of digital systems using commercial IC components as well as CAD tools. (Co-requisite: CSCI-105 or CSCI-140 or CSCI-141 or equivalent course.) Lab 2, Lecture 3 (Fall, Spring).
Assembly and Embedded Programming
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. (Prerequisites: CMPE-160 or EEEE-120 or equivalent courses.
Co-requisites: CSCI-140 or CSCI-142 or CSCI-242 or equivalent courses.) Lab 2, Lecture 3 (Fall, Spring).
The course covers the important aspects of the design, organization, and performance evaluation of modern computer systems. Topics include computer performance measures, instruction set architecture classification, input/output organization, CPU datapath and control unit design, microprogramming, arithmetic and logic unit design, and the memory hierarchy, including cache levels and virtual memory. (Prerequisites: CMPE-250 or equivalent course.) Lecture 3 (Fall, Spring).
Choose two of the following:
Introduction to Quantum Computing and Information Science
We are entering a “quantum age” where it is possible to design and create complex quantum systems whose behaviors are drastically altering the ways we think about computing and information. This course will help students from a broad range of disciplinary backgrounds understand the basic principles of quantum mechanics and how they are leading to innovations in computing and communication. This course teaches the fundamentals of quantum information science with a focus on quantum computing and quantum cryptography. Two state systems (e.g., quantum bits) will be used to introduce foundational concepts of quantum mechanics and the appropriate mathematical formalism needed to understand communication protocols (e.g., quantum key distribution), quantum logic gates, circuits, and algorithms (e.g., Shor’s factoring algorithm). Students will learn about the potential applications of quantum computers and the broader impact they will have on science, technology, and society. Students will also gain hands-on experience with quantum computing tools and simulators developed by quantum computing hardware companies. (Prerequisites: (PHYS-111 or PHYS-207 or PHYS-211 or PHYS-211A or PHYS-216) and (MATH-172 or MATH-182 or MATH-182A) or equivalent courses.) Lecture 3 (Spring).
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. (Prerequisites: CMPE-160 or CMPE-161 or equivalent courses.
Co-requisites: PHYS-212 or PHYS-208 or EEEE-281 or equivalent courses.) Lab 2, Lecture 3 (Fall, Spring).
Introduction to Hardware Security
The objective of this course is to build the knowledge and skills necessary to design, evaluate, and implement secure hardware systems. Course topics will span the fundamentals of hardware security and trust, which may include security principles and properties, encryption/decryption, side-channel attacks, hardware manufacture and test, physically uncloneable functions (PUF), true random number generation, hardware trojan detection, secure system design, and trusted execution environments. Laboratory assignments and projects facilitate the hands-on learning of course topics including cryptographic hardware design, side-channel attacks, integrated circuit test and verification, PUFs, true random number generation, and secure system design using a field programmable gate array (FPGA) and an embedded processor as an implementation platform. (Prerequisites: CMPE-250 and CMPE-260 or equivalent courses.) Lab 2, Lecture 3 (Fall).
Applied Programming in C
This course uses the C language to implement algorithms used in the numerical solution of common problems encountered in science and engineering. Topics include an introduction to C, computer number representation and roundoff error, algorithms for finding roots of nonlinear equations, interpolation, threading, software security, numerical differentiation and integration, function approximation and data fitting solutions to systems of linear equations, and general matrix manipulation. (Prerequisites: MATH-241 and CMPE-250 or equivalent courses.) Lab 2, Lecture 2 (Fall, Spring).
Interface and Digital Electronics
This course covers various sensors, motors, and signal conditioning circuits, including amplification, filtering, level shifting, ADC, and DAC. Modern tools, such as Arm Keil MDK and PSpice, are used to simulate and debug modern microcontrollers, such as TI Arm-based MSP, analog active filters, and operational amplifier application circuits. Students typically work in teams of two to design a complete data acquisition system from sensors, amplification, filtering, ADC, and DAC to analog signals through either wired or wireless transmission circuits. (Prerequisites: EEEE-282 and (EEEE-380 or EEEE-381) and CMPE-250 or equivalent courses.
Corequisites: CMPE-380 or equivalent course.) Lab 2, Lecture 3 (Fall, Spring).
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. (Prerequisites: MATH-231 and MATH-241 and EEEE-282 or equivalent courses.) Lecture 3 (Fall, Spring).
Digital Integrated Circuit 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. (Prerequisites: CMPE-260 and EEEE-282 and (EEEE-380 or EEEE-381) or equivalent courses.) Lab 2, Lecture 3 (Fall, Spring).
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. The course concludes with an introduction to concepts of multiprocessor systems design. (Prerequisite: CMPE-350 or equivalent course.) Lecture 3 (Fall, Spring).
Data and Communication Networks
This course gives an overview of the technologies, architectures, and protocols used to build various types of computer and communication networks. The course emphasizes various network design problems and solution approaches. Specific issues covered include framing and coding, error detection, multiple access control, addressing, routing, flow and congestion control, scheduling, and switching. (Prerequisites: CMPE-380 and MATH-251 or equivalent courses.) Lecture 3 (Fall, Spring).
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. (Prerequisite: CMPE-550 or equivalent course or graduate standing in the CMPE-MS program.) Lecture 3 (Fall, Spring).
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. (Prerequisites: CMPE-260 or equivalent course or graduate standing in the CMPE-MS program.) Studio 3 (Fall).
Hardware and Software 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. (Prerequisites: CMPE-260 or CMPE-240 or equivalent course or graduate standing in the CMPE-MS program.) Studio 2 (Spring).
Real-time & 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. (Prerequisites: CMPE-380 or SWEN-220 or graduate standing in the CMPE-MS program.) Lecture 3 (Fall).
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. (Prerequisite: SWEN-220 or CSCI-251 or CMPE-380 or graduate standing in the CMPE-MS program.) Lecture 3 (Spring).
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. (Prerequisite: SWEN-220 or CSCI-251 or CMPE-380 or graduate standing in the CMPE-MS program.) Lecture 3 (Fall).
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). (Prerequisites: CMPE-380 and CMPE-480 and MATH-251 or graduate standing in the CMPE-MS, CMPE-BS/MS program.) Lecture 3 (Fall).
Deep learning has been revolutionizing the fields of object detection, classification, speech recognition, natural language processing, action recognition, scene understanding, and general pattern recognition. In some cases, results are on par with and even surpass the abilities of humans. Activity in this space is pervasive, ranging from academic institutions to small startups to large corporations. This course emphasizes convolutional neural networks (CNNs) and recurrent neural networks (RNNs), but additionally covers reinforcement learning and generative adversarial networks. In addition to achieving a comprehensive theoretical understanding, students will understand current state-of-the-art methods, and get hands-on experience at training custom models using popular deep learning frameworks. (Prerequisites: CMPE-677 or equivalent course and students in CMPE-BS or CMPE-MS programs.) Lecture 3 (Spring).
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. (Prerequisites: CMPE-480 or equivalent course or graduate standing in the CMPE-MS program.) Lecture 3 (Spring).
Design and Test 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. (Prerequisites: CMPE-530 or CMPE-630 or equivalent course.) Lecture 3 (Fall).
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. (Prerequisite: CMPE-350 or equivalent course or graduate standing in the CMPE-MS program.) Lecture 3 (Fall).
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. (Prerequisites: CMPE-570 or CMPE-670 or equivalent course.) Lecture 3 (Spring).