The ultimate ambition for this project is to be able to automatically explore the design space of implementations of significantly complex functional specifications.
Design choices fall into two major categories: 1) Quantitative (How many? How wide? How large?) and 2) Qualitative (What kind?).
Quantitative parameters are simply traits that can be described quantitatively: How many buffers? How wide a datapath?
Examples of qualitative parameters: What kind of buffer? What protocol or reshuffling? Which kind of adder? Whether or not to use a speculative path? Whether or not to introduce resource arbitration? Parallel or serial?
Objectives. Area, energy, performance, efficiency. How about aesthetics and simplicity (design time)?