在std_logic_vector变量上向左或向右移动

时间:2019-04-29 16:42:16

标签: vhdl

我想知道是否可以对std_logic_vector类型的变量执行右移或左移

当我使用信号而不是变量时,我通常使用shift_left或shift_right函数,但是我尝试在它们上使用它,但是它不起作用,或者我做错了。

例如variable a : std_logic_vector(16 downto 0);

1 个答案:

答案 0 :(得分:0)

移位运算符(slasrasllsrl)都是为 type 定义的,与实例无关(signalvariable)。实际上,这些运算符可以在引用类型的任何地方使用,甚至可以用于constantrecord等。

例如,假设您拥有:

type my_record is record
  a : std_logic_vector(7 downto 0);
  b : std_logic_vector(3 downto 0):
end record my_record;

还有几个实例,例如:

architecture behav of foo is
  signal x : my_record;
begin

  process
    variable y : my_record;
  begin
    y.a := y.a sll 1;
    y.b := x.b srl 1;
  end process;
end architecture behav;

请注意,运算符可用于该类型的任何实例。甚至对于子程序也可以接受,例如:

function myfunc(a : std_logic_vector) return std_logic_vector is
begin
  return (a sll 5);
end function myfunc;