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;
我有一行代码像
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;