Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VHDL编码。。从整数到位向量的转换_Vhdl - Fatal编程技术网

VHDL编码。。从整数到位向量的转换

VHDL编码。。从整数到位向量的转换,vhdl,Vhdl,我面临这个问题,我被要求在VHDL中实现一个函数,它接受一个整数并返回一个位向量,假设这个整数由4位表示 我不想使用已经内置的函数,我必须对函数进行编码 我已经做了一个函数,将位向量转换成整数,这有点容易,但我被困在这里:S 有什么想法吗?VHDL标准包是自制函数的好灵感,而数字位包定义了到无符号函数,用于将自然类型转换为无符号类型,这是VHDL实际用于转换为位向量的函数。该功能的实现方式如下: function TO_UNSIGNED (ARG, SIZE: NATURAL) return U

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

我不想使用已经内置的函数,我必须对函数进行编码

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


有什么想法吗?

VHDL标准包是自制函数的好灵感,而
数字位
包定义了
到无符号
函数,用于将
自然
类型转换为
无符号
类型,这是VHDL实际用于转换为
位向量的函数。该功能的实现方式如下:

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;

莫顿的答案是正确的,但有时值得尝试其他方法

由于问题涉及到一个小的(4位)范围,查找表变得很有吸引力:我假设了无符号整数,但它很容易适应

subtype bv4 is bit_vector(3 downto 0);
constant LUT : array(0 to 15) of bv4 := (
   "0000", "0001", "0010", "0011", "0100, "0101", "0110", "0111",
   "1000", "1001", "1010", "1011", "1100, "1101", "1110", "1111");

function to_bv(n : natural) return bit_vector is
begin
   return LUT(n);
end to_bv;

这通常会像您希望的那样进行合成,而不是实际创建ROM

是的,这一个对我来说是正确的,我试过了,但是当它大于4位时,它不是很有用,但是谢谢你的努力,伙计:)你的回答确实帮了我很多,谢谢你,伙计,但是你能告诉我你是如何从ise库>?从函数初始化LUT也是一种非常有用的技术。我的观点是,在这种情况下,显式文字可能更简单,工作量更少@MSherin:包的源文件可以在中找到
subtype bv4 is bit_vector(3 downto 0);
constant LUT : array(0 to 15) of bv4 := (
   "0000", "0001", "0010", "0011", "0100, "0101", "0110", "0111",
   "1000", "1001", "1010", "1011", "1100, "1101", "1110", "1111");

function to_bv(n : natural) return bit_vector is
begin
   return LUT(n);
end to_bv;