The UNIX design philosophy is a good foundation to build on. However, VLSI CAD tools face distinctly different problems with individual tasks often being very complex and requiring configuration information that is quite involved. Today's CAD tools have a myriad of different configuration and data languages that make it difficult to make them interoperate. Therefore Broccoli will modify the UNIX design philosophy as follows:
- Write programs that do one thing and do it well.
- Write programs in which each step is separable from every other step through the command line interface.
- Write programs in C++ for performance.
- provide a complete C++ library and Python interface for interoperability.
- Write programs to work together.
- Write programs that consume configuration input through a Python interface, because that is a scriptable interface.
- Write programs that consume data input through text streams, because that is a universal interface.
- Prefer non-interactive interfaces.
- Write programs that are easy to contribute to
- Use a parsing expression grammar for all input formats
- Grammars should be only as specific as is necessary for the program
- No parsing should happen outside the grammar
- Document thoroughly in comments
- Always use public structures (we're all adults here)
- Use CamelCase (structs are capitalized, functions and instances are not)
- File conversion programs should have import and export functionaliy for all filetypes associated with a single purpose. (ex. storing geometry: gds, lef, def, rect, ...)
Structs Only needed for more complex structures
- Purpose of struct
- Example usage of struct
Functions Only needed for more complex functions
- Description of operation
- Inputs (format, purpose)
- Outputs (format, purpose)
- Example usage of function
Design Decisions
- Unique label for decision
- Who made this decision?
- What did we choose?
- What were the alternatives?
- Why did we choose this?
- What other design decisions interact with this?
// DESIGN(edward.bingham) myfunc.1
// ...
Todos
- Who created this todo?
- What needs to be done?
- Why does this need to be done?
// TODO(edward.bingham) description...