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.