如何在e硬件验证语言中计算log2的上限

时间:2013-12-04 18:42:48

标签: specman

'e'语言有'ilog2'功能,但我需要'log2'类型的功能 - 这是最好的方法吗?

我可以通过系统命令调用Perl并使用POSIX :: ceil ...

3 个答案:

答案 0 :(得分:1)

调用perl脚本可能计算成本很高。而是将0.5添加到log2并将类型转换(不确定e语言是否支持它)添加到整数。

另一次尝试:

  Let y = ilog2(x);
  if ((x & x-1) == 0)  //Check if x is power of 2 
      return y; 
  else 
      return y+1;

答案 1 :(得分:1)

我会做这样的事情:

ceil_log2(in : uint): uint is {  
    var bottom := ilog2(in);  
    result = (in == ipow(2,bottom)) ? bottom : bottom + 1;  
};

答案 2 :(得分:0)

如果你不介意真的这样做:

ceil_log2(in: uint): uint is {
  result = ceil(log10(in)/log10(2)).as_a(uint);
};