这要看你的用途而定,如果输入的整数是constant的话,可以用一个函数来实现。
function int2bcd(din:integer) return std_logic_vector(11 downto 0) is
variable temp:integer;
variable result:std_logic_vector(11 downto 0);
begin
--百位
result(11 downto 8):=conv_std_logic_vector(((din mod 1000)-(din mod 100))/100,4);
--十位
result(7 downto 4):=conv_std_logic_vector(((din mod 100)-(din mod 10))/10,4);
--个位
result(3 downto 0):=conv_std_logic_vector(((din mod 10)-(din mod 10)),4);
return result;
end;
如果你要实现组合逻辑,即输入数据不是constant,这个函数的代价就比较大,而且除法不能用这个现成的。你可以用altera带的lpm除法库函数来实现除法。