在VHDL中表示整数的位数

时间:2014-02-14 15:30:15

标签: vhdl

我必须转换一个整数来查找表示该整数所需的位数。 假设整数值 22 。我知道 5位需要表示这个整数。 VHDL中是否有任何属性可以执行此操作? 重要提示:结果也应该是一个整数,它应该代表位数。

2 个答案:

答案 0 :(得分:2)

没有VHDL属性或功能,但您可以创建如下函数:

-- Returns number of bits required to represent val in binary vector
function bits_req(val : natural) return natural is
  variable res_v    : natural;  -- Result
  variable remain_v : natural;  -- Remainder used in iteration
begin
  res_v := 0;
  remain_v := val;
  while remain_v > 0 loop  -- Iteration for each bit required
    res_v := res_v + 1;
    remain_v := remain_v / 2;
  end loop;
  return res_v;
end function;

但是,有时候ceil_log2函数也很有用,因为它根据内存映射中的条目提供了所需的地址位数,ceil_log2(val) = bits_req(val - 1)

答案 1 :(得分:1)

使用math_real库。它不是用于综合,而是在架构和开始语句之间工作得很好。

使用ieee.math_real.all;

常数nbits:natural:= integer(ceil(log2(real(n))));

我使用math_real进行内联生成sin / cos表...再次在架构和开始之间......再次,不要尝试在综合中使用math_real。

我在Quartus,ISE,Vivado,Modelsim中成功使用了它;它可能不会得到任何支持。