Top-down knowledge-based design