一、前言
在进行Verilog设计时,有时需要根据内存大小来计算地址的位宽,或者根据变量的值来确定变量的位宽,这时可以自己编写相关的可综合函数,或者verilog-2005起开始支持的$clog2系统函数。
二、自己编写的function
function integer log2;input [31:0] value;integer i;beginlog2 = 1;for(i=0;2**i < value;i=i+1)log2 = i+1;end endfunction
三、$clog2()系统函数
此处直接粘贴Verilog-2005标准的截图,从图中可以清楚看到该函数以2为底求log,而不是网上有人说的以自然数e为底来求log。
同样从图中也可以看出该函数是向上取整(符合求地址位宽或者向量位宽的需求),且当输入为0时输出也为0.
四、参考资料
IEEE 1364-2005