Course Themes
As part of our agile hardware design process, the following themes keep reappearing:
Close the Loop - Improve through iterative revision, not an overly ambitious initial design. Strive to get the minimum viable design running through the tools, and then add on functionality and optimize. You can better design your system once you see how things fit together and best allocate your efforts.
Design for Reuse - Reusing solid components improves productivity & reduces error. Add the necessary flexibility to your components to make them more reusable. Generators are a great way to encapsulate that flexibility.
Make Tools Do the Work - Look for opportunities to make the tools do the work instead of humans (e.g. logic optimization, register retiming, integration). Understand the capabilities and limitations of the tools and adjust your design methodology accordingly. Look for opportunities to automate.
Design for Readability - Appreciate that code will be read many more times than it is written. Thus, it is worth revising code thinking about its readability as a primary concern. Consider how to make the functionality and purpose readily apparent.