Использование конкатенации для сдвига в VHDL

#vhdl

#vhdl

Вопрос:

 Data_Int<='0' amp; Data_Int(7 downto 1); --if shift then shift it right
  

Как конкатенация используется для сдвига позиции? Я думал, что в VHDL есть оператор сдвига вправо. Может кто-нибудь, пожалуйста, объяснить мне это?

Предположим

 Data_Int : std_vector(10 downto 0);
-- and Data_Int has "1010010011" 
  

Большое вам спасибо.

Ответ №1:

Операторы сдвига (sll, srl, sla, sra, rol и ror) не предусмотрены в VHDL-87, поэтому вы увидите, что много кода явно сдвигается с использованием конкатенации и частичных массивов. Более универсальным методом записи приведенного выше сдвига (который будет работать с различными размерами массива) было бы:

Data_Shift <= ‘0’ amp; Data_Int(data_int’влево вниз до data_int’вправо 1);

Конкатенация обеспечивает сдвиг, поскольку вы отбрасываете один бит (в данном случае бит 0) и заменяете его на стороне старшего порядка чем-то другим (здесь логический ноль, хотя вы также можете сдвинуть логическую 1, расширить знак и т. Д.).