Сдвиг влево или вправо на переменную std_logic_vector - PullRequest
0 голосов
/ 29 апреля 2019

Мне интересно, возможно ли выполнить сдвиг вправо или влево для переменной типа std_logic_vector

, когда я использую сигнал вместо переменной, я обычно использую функции shift_left или shift_right, но у меня естьпопытался использовать это на них, но это не работает, или, возможно, я делаю это неправильно.

например variable a : std_logic_vector(16 downto 0);

1 Ответ

0 голосов
/ 17 мая 2019

Операторы сдвига (sla, sra, sll и srl) все определены для типа , независимо от экземпляра (signal или variable),Действительно, эти операторы могут использоваться везде, на которые ссылается тип, даже для constant, record и т. Д.

Например, скажем, у вас есть:

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;
...