A constant-valued expression is an expression whose operands are either constants or parameters. Foundation Express determines the value of these expressions.
In the following example, size-1 is a constant-valued expression. The expression (op == ADD) ? a+b : a-b is not a constant-valued expression because the value depends on the variable op. If the value of op is 1, b is added to a; otherwise, b is subtracted from a.
//all expressions are constant-valued,
//except in the assign statement.
module add_or_subtract(a,b,op,s);
//performs s=a+b if op is ADD
// s=a-b if op is not ADD
parameter size=8;
parameter ADD=1'b1;
input op;
input [size-1:0]a,b;
output[size-1:0]s;
assign s=(op==ADD)? a+b:a-b;//not a constant-
//valued expression
endmodule
The operators and operands used in an expression influence the way that a design is synthesized. Foundation Express evaluates constant-valued expressions and does not synthesize circuitry to compute their value. If an expression contains constants, they are propagated to reduce the amount of circuitry required.