我有一行代码,如
parameter [8:0] param1=8'd05, param2 = 8'd20;
A <= cond ? (1 << param1) : (1 << param2);
编译器会识别1 << param
是一个常量并用常量替换该表达式还是会尝试实现某种位移位器?
答案 0 :(得分:2)
参数在编译时计算,必须是常量。
来自IEEE Std 1364-2001:
3.11参数Verilog HDL参数不属于变量或网络组。 参数不是变量,它们是 常数。强>
因此,综合工具如何决定如何通过常量来实现移位,但任何合理的实现都只是从向量中选择正确的连线。
此外,由于您的示例是常量移位常量,因此整个表达式将减少为常量,代码将等效于:
A <= cond ? 32'h20 : 32'h100000;