如何用VHDL做矢量产品

时间:2016-06-16 14:16:21

标签: vhdl fpga

我如何在VHDL中使用矢量产品?

e.g。我有2个向量定义如下:

0000 1111

Linux@Linux:~/imgs/ImageTesting# ls -l

-rw-r--r-- 1 root root 4781261 Jun 16 15:47 hexd_ss.fit
-rw-r--r-- 1 root root 4781260 Jun 16 15:33 ss.fit

然后我希望该示例中的产品为[5,12,21,32]。

我将如何做到这一点?

1 个答案:

答案 0 :(得分:2)

VHDL允许为自定义类型重新定义中缀运算符,如*,因此您可以声明一个执行向量乘法的函数,如:

function "*"(a, b : array_4_8bit) return array_4_8bit is
  variable result_v : array_4_8bit;
begin
  for idx in result_v'range loop
    result_v(idx) := std_logic_vector(unsigned(a(idx)) * unsigned(b(idx)));
  end loop;
  return result_v;
end function;

上面的假设是,向量元素是无符号值,并且每次乘法的结果都被截断为8位。

为了生成输入数据,您还可以考虑:

type array_4_integer is array (0 to 3) of integer;

function to_array_4_8bit(v : array_4_integer) return array_4_8bit is
  variable result_v : array_4_8bit;
begin
  for idx in result_v'range loop
    result_v(idx) := std_logic_vector(to_unsigned(v(idx), 8));
  end loop;
  return result_v;
end function;

Array_Last4Vals <= to_array_4_8bit((5, 6, 7, 8));
Multiplier <= to_array_4_8bit((1, 2, 3, 4));