Verilog按常量位移位,它是如何实现的?

Verilog bit shift by constant, how is it implemented?

我有一行代码像

parameter [8:0] param1=8'd05, param2 = 8'd20;
A <= cond ? (1 << param1) : (1 << param2);

编译器会识别 1 << param 是一个常量并用常量替换该表达式,还是会尝试实现某种移位器?

参数在编译时计算,必须是常量。

来自 IEEE 标准 1364-2001:

3.11 Parameters Verilog HDL parameters do not belong to either the variable or the net group. Parameters are not variables, they are constants.

所以这真的取决于综合工具如何决定通过 常数 实现转换,但任何合理的实现都会简单地 select 正确的连线超出向量。

此外,由于您的示例是常量移位一个常量,因此整个表达式简化为一个常量,代码将等效于:

A <= cond ? 32'h20 : 32'h100000;