VHDL-带级联的N次移位操作



我想知道如果我有两个输入,一个输入,DATA1是一个数字(std_logic_vvector),第二个输入DATA2表示我想移位第一个输入的次数,我如何在VHDL中进行移位操作。例如,如果我必须总是左移一次,那么代码就是

OUTALU <= '0' & DATA1(N-1 downto 1);

如果我想转换DATA2次,写对吗

for i in 0 to DATA2 loop
  OUTALU <= '0' & DATA1(N-1 downto 1);
  DATA1 <= OUTALU
end loop;

对吗?我必须定义信号并分配给这些信号DATA1和DATA2?感谢您的帮助

您想要的是一个桶形移位器。你可以这样做:

OUTALU <= std_logic_vector(shift_left(unsigned(DATA1),  to_integer(unsigned(DATA2)))); -- Shift left
OUTALU <= std_logic_vector(shift_left(unsigned(DATA1),  to_integer(unsigned(DATA2)))); -- Shift right
OUTALU <= std_logic_vector(shift_left(  signed(DATA1),  to_integer(unsigned(DATA2)))); -- Arithmetic shift left
OUTALU <= std_logic_vector(shift_left(  signed(DATA1),  to_integer(unsigned(DATA2)))); -- Arithmetic shift right

这意味着您使用ieee.numeric_std.all' and that DATA1 and DATA2`arestd_logic_vvector,因此使用强制转换。

datao <= std_logic_vector(unsigned(data1) sll to_integer(unsigned(data2)));

sll是左移逻辑,填充有"0"

您也可以使用sla(左移算术,用右位填充)代替sll。

ps:datao<='0’&data1(7 downto 1)是一个右移器,而不是左移器:)。使用srl或sra。

最新更新