gpt4 book ai didi

vhdl - VHDL编码..从整数到bit_vector的转换

转载 作者:行者123 更新时间:2023-12-02 09:35:35 25 4
gpt4 key购买 nike

我面临着这个问题,我被要求在VHDL中实现一个函数,该函数接受一个整数并返回一个bit_vector,假设该整数由4位表示。

我不想使用已经内置的功能,我必须对该功能进行编码。

我已经做了一个将bit_vector转换成整数的函数,这有点容易,但是我被困在这里:S

任何想法我该怎么做?

最佳答案

VHDL标准软件包是自酿函数的良好灵感,numeric_bit软件包定义了to_unsigned函数,用于将natural类型转换为unsigned类型,这是VHDL实际用于转换为bit_vector的功能。该功能实现为:

function TO_UNSIGNED (ARG, SIZE: NATURAL) return UNSIGNED is
variable RESULT: UNSIGNED(SIZE-1 downto 0);
variable I_VAL: NATURAL := ARG;
begin
if (SIZE < 1) then return NAU;
end if;
for I in 0 to RESULT'LEFT loop
if (I_VAL mod 2) = 0 then
RESULT(I) := '0';
else
RESULT(I) := '1';
end if;
I_VAL := I_VAL/2;
end loop;
if not(I_VAL =0) then
assert NO_WARNING
report "NUMERIC_BIT.TO_UNSIGNED: vector truncated"
severity WARNING;
end if;
return RESULT;
end TO_UNSIGNED;

如果已知函数从未与使检查相关的值一起使用,则可以删除初始 if (SIZE < 1)和最终 if not(I_VAL =0)检查。

剩下的 for I in 0 to RESULT'LEFT loop每次迭代创建一个结果位。

根据Brian的回答,可以使用 TO_UNSIGNED函数初始化常量LUT,以避免手写文字:
function to_bv(n, size : natural) return bit_vector is

type bv_arr_t is array (0 to 2 ** size - 1) of bit_vector(size - 1 downto 0);

function bv_arr_init(size : natural) return bv_arr_t is
variable res_v : bv_arr_t;
begin
for i in 0 to 2 ** size - 1 loop
res_v(i) := bit_vector(TO_UNSIGNED(i, size));
end loop;
return res_v;
end function;

constant LUT : bv_arr_t := bv_arr_init(size);

begin
return LUT(n);
end to_bv;

关于vhdl - VHDL编码..从整数到bit_vector的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26575986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com