first of all, i apologize for posting this in multiple groups. i recently start teaching at a university and i am trying to develop a course in electronic design automation. typically such a course is offered at the graduate level in most colleges/universities, i am thinking of developing a two-semester course rather than the traditional one semester (i.e. 12-14 weeks). the target audience will be seniors and graduate students since villanova is mainly an undergraduate institution so far.
i wanted to get some of your opinions on the current course content that i have in mind (see below), and what you think should be the most important topics students should know from taking a course in EDA. clearly it is a very broad area and the amount of time and my knowledge in EDA limits what I can and cannot teach.
my main goal is to ensure students understand some of the basic algorithms that are used in EDA tools and be able to program a simple stand-alone EDA system (a very simple version of SIS - the synthesis tool from Berkeley) in two semesters. the idea is to help them in three fronts, algorithms for EDA, EDA programming, general software development techniques. note that the goal of this course is not to use EDA tools but to try to see how such tools are developed.
in the first semester I have the following basic topics (and assignments) in mind. the first semester will consist mainly of introduction to basic ideas and topics while the second semester will go in more detail into the algorithms.
- CAD/EDA design flow
- Circuit I/O, Parsing, and Data Structures (a simple BLIF/NetBLIF format) HW - write a circuit parser and netlist generator
- Gate-level logic simulation, threshold logic/majority/minority logic simulation - Brute force (one vector at a time) - Parallel simulation (32/64 vecs at a time) - Event-driven parallel simulation HW - write a event-driven logic simulator
- Representation of Boolean functions - Truth tables, covers, binary decision diagrams, reduced ordered binary decision diagrams - Uses of ROBDDs HW - write a simple BDD
- Introduction to Boolean Satisfiability - CNF representation - Convering a gate level circuit to CNF - Use boolean satifiability in circuit verification, mitre circuits HW - write a simple SAT solver
- Introduction to Synthesis and Technology Mapping - Explain synthesis - Technology libraries, cost models, technology mapping using tree covering - Netlist generation HW - write a basic technology mapper with a small library (10 gates) and a few cost models
- Introduction to Static Timing Analysis - Component/Gate delay calculation, setup/hold/arrival times HW - write a basic static timing analyzer
- Introduction to FPGA systems - Architecture - LUT - How synthesis tools are different/same from non-FPGA (i.e. ASIC) systems
- Two-level synthesis - quine-mcluskey - heurisitc based using expand, reduce, irredundant
- Multi-level synthesis - albegraic/boolean factorization - kernels and co-kernels HW- implement two-level synthesis? (not sure, its not that easy to program, i.e. significant code..espresso)
- Introduction to Testing - Fault models, collapsing - Fault simulation (types of fault simulation, parallel, concurrent etc) HW - Implement a fault simulator Test Generation - D/PODEM/FAN - based on boolean satifiability HW - Implement PODEM and/or boolean satisfiability (use the SAT solver we developed earlier)
- Introduction to Routing - Partitioning and placement - Routing HW - very difficult to give, requires significant code and most techniques are quite adhoc
- Introduction to Synthesis of FSM
- Current research trends in CAD/EDA - CAD for post-CMOS technologies...
hopefully as the course evolves, new assigments on additional topics will be created such that they fit in within the entire "example" EDA system the students will be writing in semester 1/2. from there the goal would be me to make this entire set of assignments open source so others who want to learn about EDA can choose to do so by having access to the program code, skeleton files, etc, lecture slides..
i would appreciate your comments on the course content or any other suggestions you think would be worthwhile to consider as i start developing this course. note that i can't teach much about FPGA/ routing/DFM/DSM as i'm not very familiar with them yet. you can email me at the above address if you don't want to post here. all responses will be kept confidential.
thanks for your help.