CSCI 502/702 – Hardware/Software Co-Design

Spring 2021 Semester

Course Instructor: Dr. Almas Shintemirov  

Class Times:   Mondays, Wednesdays 1.30 – 2.45 pm

Course Overview 

The course introduces fundamental hardware and software aspects of computer system operation and system programming. The course will also introduces principles of embedded control system design based on examples from robotics and mechatronics. Topics covered include basic microprocessor architectures, memory allocation, concurrency principles, real-time principles (multi-tasking, synchronization, scheduling (optional) and mechatronic system design basics. Through a series of practical lab/projects assignments using on PC based Ubuntu Linux operating systems students will acquire skills in the design/implementation of core hardware control functionality using Linux based C/C++ programming tools and libraries.

Due to continuing COVID-19 pandemic, the Spring 2021 semester is being held in online synchronous (via Zoom) and asynchronous teaching modes.  Since the students do not have access to the course microprocessor board hardware, the course practical part are being redesigned to focus more on systems programming and computer systems topics with Ubuntu Linux OS based C/C++ and x86 Assembly programming homework labs and assignments suitable for completion by students on their home PCs.

Course Textbooks

Randal E. Bryant and David R. O’Hallaron, Computer Systems: A Programmer’s Perspective, 3rd Global Edition, 2016

Real-Time Embedded Systems: Open-Source Operating Systems Perspective by I. C. Bertolotti and G. Manduchi, 2012
Logic and Computer Design Fundamentals by M.M. Mano and C.R. Kime,          5th edition, 2016

Course Topics

  • Numbers Systems, Binary Logic and Digital Circuit Basics;
  • Registers, Memory Basics;
  • Computer Design Basics: Datapath and Instruction Set Architecture;
  • Hardware Architectures:  RISC and CISC architectures, Pipelining;
  • C/C++ Programming Review. Pointer Arithmetics, Dynamic Memory Allocation;
  • x86-64 Assembler Language;
  • Operating systems, Linux System Calls and Processes;
  • Concurrency, Intertask Communication and Process Synchronization: Semaphores, Message Passing, Robot Operating System (ROS)
  • Threads, Concept of Real-Time Systems;
  • Finite State Machines.
  • Real-time process scheduling and priority inversion

Spring 2020 Semester

Course Overview 

The course introduces hardware and software aspects of embedded processor architectures and embedded operating systems, and design concepts of embedded control systems that drive complex mechatronics systems such as robots, automobiles, avionics, etc. Students will learn how apply these principles on the example of a mobile robot hardware/software design. Topics covered include embedded processor architectures, concurrency principles, real-time principles (multi-tasking, synchronization, scheduling, priority inversion), finite state machines, Through a series of practical projects assignments using a state-of-the-art system-in-chip microprocessor board, a popular Robot Operating System (ROS), real-time Linux with Xenomai extension students will acquire skills in the design/implementation of core hardware control functionality using Linux based Python and C/C++ programming tools and libraries. Specifically, upon completing this course, students should be able to:

  • Understand specific aspects of embedded systems and its practical applications
  • Learn main elements of creating specifications for designing embedded systems
  • Have a practical experience with embedded systems and Robot Operating System (ROS) for robotic/mechatronic system design and control
  • Work in Linux operating system and program multitasking/real-time  applications in C/C++ environment
  • Work in a part of the team on design projects developing creative thinking and communicative skills
  • Self-study and work independently on projects that can be used as part of master theses

Course Textbooks

Real-Time Embedded Systems: Open-Source Operating Systems Perspective by I. C. Bertolotti and G. Manduchi, 2012
Logic and Computer Design Fundamentals by M.M. Mano and C.R. Kime,          4th edition, 2014
Exploring BeagleBone with Embedded Linux by D. Molloy, 2014
Operating System Concepts by A. Silberschatz, P. Baer Galvin and G. Gagne, 9th edition, 2012

Course Topics
– Numbers Systems, Binary Logic and Digital Circuit Basics;
– Registers, Memory Basics;
– Computer Design Basics: Datapath and Instruction Set Architecture;
– Embedded Systems Hardware:  RISC and CISC architectures, Pipelining, Interrupts, I/O interface, Direct Memory Access, Analog-Digital Conversion;
– Operating systems, Multithreading, Real-Time Systems;
– Intertask Communication and Process Synchronization: Semaphores, Message Passing;
– Embedded Linux, POSIX PThreads library programming practice;
– Preemptive and Real-Time Task Scheduling in Xenomai;
– Finite State Machines;
– BeagleBone Black and ROS based hand-on projects.

Selected 2021 Course Projects

Due to the COVID-19 pandemic the course was taught in online synchronous mode with no specific final course projects. The last assignment focused on Finite State Machine based mobile robot control in the Robot Operating System (ROS) Gazebo simulation environment.

Selected 2020 Course Projects   

Due to the COVID-19 pandemic the course was taught in distance learning mode and the course final projects were focusing on software implementations of Finite State Machine -based systems

Selected 2019 Course Projects

Selected 2017 Course Projects 


  https://github.com/roboticsNU/Dagu-Rover-5-with-Joystick 

Selected 2016 Course Projects