如何在VHDL中乘以2 32位带符号的std_logic_vector

时间:2012-08-24 13:12:58

标签: vhdl

我们有一个32位“std_logic_vector”大小为3的数组,它的定义方式如下:

subtype scalar is std_logic_vector(31 downto 0);
type vector_nd is array (natural range <>) of scalar;
subtype vector_3d is vector_nd(2 downto 0);

我们有一个“vector_3d”类型的信号,我们想要乘以2并将结果放入“标量”类型的信号中:

signal v_normal_out_sig := vector_3d;
signal mult1_in1_sig    := scalar;
--...
mult1_in1_sig <= 2*signed(v_normal_out_sig(0)) when cau_state = st_cycle18;

当我们编译它时,我们得到错误:

No feasible entries for infix operator "*".

实施我们想要的正确方法是什么?我们使用以下库:

  • ieee.std_logic_1164.all
  • ieee.std_logic_arith.all
  • ieee.std_logic_unsigned.all

1 个答案:

答案 0 :(得分:0)

我们最终做的是休假:

mult1_in1_sig <= v_normal_out_sig(0)(31) & v_normal_out_sig(0)(29 downto 0) & '0' when cau_state = st_cycle18;

测试给出了正数和负数的正确结果。