Welcome to the Northeastern University, Department of ECE, EECE7368 Course Page
System complexities are growing exponentially driven by ever increasing application demands and technological advances that allow us to put complete multi-processor systems on a chip (MPSoCs). System-level design that jointly covers hardware and software is one approach to address the associated complexities in the design process and the market pressures. This course presents state-of-the-art methods, tools and techniques for system-level design and modeling of complete multi-processor systems from specification down to implementation across hardware-software boundaries. Using the SystemC language and an integrated processor simulator (QEMU), we will specify, simulate, analyze, model and design hardware-software systems based on examples of typical embedded applications.
The course touches on many design aspects that span both hardware and software. We will use software (e.g. SystemC) to reason about how hardware will perform. We will cross the hardware / software boundary constantly in our discussions. It is intriguing to discover how both share similar aspects how they differ. Making the connections between algorithm / system / software / hardware fosters a solid system-level design understanding and trains the ability to abstract.
Topics
- Overview of Embedded systems, electronic system-level (ESL) design
- Models of Computation: FSMs, dataflow, process networks
- Introduction to System-level design languages (SLDLs): SystemC
- Discrete event simulation semantics
- Specification, profiling and analysis of HW/SW systems
- System-level design methodologies and tools for Partitioning, Scheduling, Communication and System Synthesis
- System-level modeling:
- Transaction-Level Modeling (TLM), link
- Processor and RTOS modeling
- Embedded hardware and software implementation: synthesis and cosimulation
- System design examples and case studies.
Prerequisites
- EECE 7205 - Fundamentals of Computer Engineering
- Strong C++ development skills. As SystemC is a library extension of C++, it utilizes many language tricks. In result, compilation error messages can become tricky to understand.
- Working knowledge of algorithms and data structures
- Working knowledge of operating systems (preferably real-time operating systems)
- Understanding of digital systems and computer architecture
- Familiarity with Unix, version control systems (ie. git, github)
Textbook
- D. D. Gajski, S. Abdi, A. Gerstlauer, G. Schirner, Embedded System Design: Modeling, Synthesis, Verification, Springer, September 2009. ISBN 978-1-4419-0503-1 available online
- Resources on the web, see tab References on Canvas
Assignments
The programming assignments in this course mostly focus on C++ / SystemC and are tracked on GitHub Classroom. The programming environment and compilation tools are Linux based (see Guides section below).
This course will include the following type of assignments:
- a sequence of lab assignments that guide throught developing a neural network accelerator
- home work assignments / quizzes to evaluate the conceptual understanding
- a on-paper midterm exam 2/3 into the semester.
- a final project, modeling a SoC design at different levels of abstraction and which evaluates some design alternatives through modeling. Projects are completed individually, or in pairs. Projects are tracked in project management system (e.g. github), must have intermediate milestones and deadlines, and include a comprehensive final report. The project report is due at the start of finals week.
Guides
The Canvas page tracks the official assignments and lists. We use GitHub Classroom for assignments with code aspects. Each Canvas assisgnment will contain the respective links.
Links to additional content:
- Discussion for general discussions, problems and help. To get access:
- Accept the first github classroom assignment “Discussion” see link on Canvas. This grants access to the repository hosting the discussions (discusssion-all)
- Subscribe to notifications by clicking on “Watch” in the repo discussions-all
- Setup Lab Environment for labs and excercises
- ARM Cross Compilation and Simulation ARMXCompSim
- Cosimulation ARM and SystemC SystemCCosimulation, walk through
- Automating cosimulation startup with tmux script CosimTmux
- ACC Timing Emulation in FPGA
- Remote Edit how to remotely edit files on COE
- Assignment Submissions Instructions link
Processor Manuals
- Xilinx, Zynq-7000 All Programmable SoC Technical Reference Manual, v1.10, 02/23/2015
http://www.xilinx.com/support/documentation/user_guides/ug585-Zynq-7000-TRM.pdf - Xilinx, Zynq-7000 All Programmable SoC Software Developers Guide, v12.0 09/30/2015
http://www.xilinx.com/support/documentation/user_guides/ug821-zynq-7000-swdev.pdf - Avnet, ZedBoard Hardware User’s Guide, v2.2 01/27/2014, http://zedboard.org/sites/default/files/documentations/ZedBoard_HW_UG_v2_2.pdf
- Avnet, ZedBoard Getting Started Guide, v7.0 01/30/2014, http://zedboard.org/sites/default/files/documentations/GS-AES-Z7EV-7Z020-G-V7.pdf
SystemC
- Books
- David C. Black, Jack Donovan, Bill Bunton, Anna Keist, “SystemC: From the Ground Up” Second Edition link
- Tutorials
- References
Linux References
- Books
- Linux Device Drivers, Third Edition, O’Reilly, 2005 https://lwn.net/Kernel/LDD3/ Note Book examples are for kernel version 2.6, updated examples here
- Tutorials /Training Course
- Linux Kernel Teaching part of Operating Systems II class at University POLITEHNICA of Bucharest.
- Writing Linux Kernel Module (explains some of the background again, but still short) link
- Slides / Materials for Embedded Linux training course (4 days) link
- Slides / Materials for Linux Kernel Module development (5 days) link , based on BBB, PLENTY of details
- Xilinx: Introduction to Linux Device Drivers - Part1, The Basics Video 25min
- Xilinx: Introduction to Linux Device Drivers - Part 2 Platform and Character Drivers Video 32min
- Background Info
- Why not C++ in Kernel? link
- References
- Device Tree for Dummies, Thomas Petazzoni (Apr. 2014): http://j.mp/1jQU6NR