Why software components?
1.
Ease design and development
2.
Tuning to environment
3.
Customization to user app
4.
Extensibility
5.
Verification and robustness
VLSI designers long used this approach successfully.