我必须转换一个整数来查找表示该整数所需的位数。 假设整数值 22 。我知道 5位需要表示这个整数。 VHDL中是否有任何属性可以执行此操作? 重要提示:结果也应该是一个整数,它应该代表位数。
答案 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中成功使用了它;它可能不会得到任何支持。