Design constraints may include high level design goals, lower-level design goals (budgets), detailed specifications about the desired implementation, and descriptions of the desired handling for special cases. A designer may directly specify lower-level constraints, or they may be derived from higher-level constraints. Examples of design constraints are area and power constraints, clock skew, scan chain order, and desired adder architectures.
Budgets and boundary conditions are specific types of design constraints. Assertions are not design constraints, because they describe how a block should be used, rather than how it should be implemented.
Assertions may be associated with particular modes of operation, where they only apply when the block is operating in a particular mode.