595 Syllabus

Summer 20: 8 weeks from May 20 to July 14.
Object-oriented programming skills (in C++), Python scripting, algorithms, data structures, basics of machine learning, and several software technologies related to debugging, shell scripting, testing (Agile, etc.), data streaming, parallel processing, database design, etc.
In short, 595 could be looked at designing and optimizing problem solvers that are a collection of several algorithms, and also implementing those problem solvers using a combination of C++, Python, etc. Although it may take years to master even a subset of algorithms and solutions, 595 and also 580 focus on certain general algorithms and mathematical techniques that are very fundamental in problem solving.



580 Syllabus

Summer 20: 8 weeks from May 20 to July 14.
A more advanced version of 595, i.e., the main focus would be on programming and algorithms, but with some additional components necessary for the verification and validation (in addition to design). In addition to verification of functionality, other metrics such as security or performance could be the subject of verification. E.g., in 580 we try to answer a question such as "Is the intersection controller software of the 2020 Tesla Roadster safe?", or "Does this RISC-V processor work?".
580 has two focus areas, namely software and hardware focus areas as described below.
I believe a strong verification engineer should also be a strong designer. This means the job would be harder for verification engineers. Strong verification engineers would not only need to know how to design logic and be familiar with certain hardware technologies, but also need to possess strong programming, mathematical and algorithmic skills.
The core components of 580 are planning, formal verification and machine learning for verification of a system. The syste could be software-based (e.g., a software tool), hardware-based (e.g., a processor or System-on-Chip) or a combination of both (e.g., an embedded system which has both hardware and software components).
In addition to those core parts, 580 has two focus areas, namely software and hardware . Students are welcome to choose either one of the two.
Depending on which focus area students choose, some additional modules (e.g., related to UVM, power verification and FPGA prototyping for hardware, and more machine learning techniques for software) would be assigned.
We use Altera's DE2-115 FPGA board for our FPGA labs and project.
The final project depends on the focus area. For those who choose hardware, their project would involve Verilog, UVM, SystemVerilog, and FPGA prototyping). For those who choose software, their project would mainly involve formal verification and machine learning to verify a software framework such the controller of autonomous driving systems and networks, drone systems, misinformation (false rumor detection) system, etc.
The course material icludes both hardware and software modules, however depending on the focus area the students choose, they are responsible for a subset of the material. E.g., non-ECE students or non-VLSI/architecture students are highly advised to pick the software focus area and skip the hardware aspects (such as Verilog, SystemVerilog, UVM, etc.).



580 vs 595

Some of you asked which course, 595 or 580 you should take; or whether you could coregister for both. Please note that those who register for 580, will have automatic access to 595 material. Therefore if you register for 580, but have not taken 595 in a prior semester, you do not need to co-register for both 595 and 580 in the same semester. Also for 580 students, who pick the software focus area, I highly recommend spending more time (than those in the hardware area) on machine learning, classical algorithms and coding techniques of 595, and formal verification.
My general recommendation is those who feel very confident about their academic skills should choose 580, because 580 can be a superset of 595. More precisely, as long as you are a very strong student, you may directy take 580 and while working on the main components of 580, you would catch up with the 595 material that you would have access to.
If you directly take 580 then please follow the recommendation above as how to study on both 580 and 595 stuff with our guidance. If you have taken 595 and plan to take 580 afterwards, please focus on the 580 software or hardware materials (based on your selected focus area) and skip the 595 (that you must have seen in your version of 595).



595 DC Requirements

I had promised in January 2020 to those in the 595 waiting list, that I would teach the course once more who could not make it to Spring 20. Therefore those in the Spring 20 waiting list have priority. The department will start with those, and if there is any more spots, it would be assigned based on first come first serve (from the Summer 20 waiting list). This is a temporary relaxation as compared to 595 DC requirement (minimum of 3.7 USC GPA) and applies to Summer 2020 only. Future 595 will resume to 3.7 as the minimum USC GPA for DC eligibility.
If you cannot make it to 595 becuase it is full, but consider yourself as a strong student, then you have the option of taking 580. Please read the 580 syllabus and DC information and let me know if you have any questions (shahin.nazarian@gmail.com).



580 DC Requirements

The minimum requirement for receiving a 580 declearance is a USC GPA of 3.7. This is considering the heavy course work of 580. This can be waived if you are qualified for any other summer courses, but choose to take 580 over other summer courses, because you are really passionate about design, verification, algorithm and coding modules of 580. In other words the minimum requirement has been lowered to either a GPA of 3.7 or being qualified for other courses whichever that works on your case.
If qualified and interested, please email me (shahin.nazarian@gmail.com) your resume, your USC transcript, and a short summary of your prior software experiences if you have any.