2014-02-14 37 views
1

我必须转换一个整数才能找到需要多少位来表示该整数。假设整数值为。我知道需要5位来表示这个整数。 VHDL中是否有任何属性可以做到这一点? 重要提示:结果也应该是一个整数,它应该表示位数。以VHDL表示整数的位数

回答

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

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

use ieee.math_real.all;

常数nbits:自然:=整数(ceil(log2(real(n))));

我使用math_real进行在线生成正弦/余弦表...再次它是架构和开始...再次,不要尝试在综合中使用math_real。

我已经在Quartus,ISE,Vivado,Modelsim中成功使用了它;它可能不被所有的东西支持。

+0

只要它是编译时评估的,你的常量语句就可以用于综合。 – JHBonarius