Most large scale designs will utilize common functional blocks throughout the design
In both behavioral and RTL level coding, such functionality may be defined within a subprogram. The subprogram may then be called as necessary throughout the design structure
This provides flexibility and modularity to the overall code, reducing the shear volume of coding necessary in a large scale design
VHDL offers two such subprograms - functions and procedures