[an error occurred while processing this directive]
|
Описал поведенчески такую схему комбинационного сдвигателя. Квартус генерит на выходе комбинационной схемы защёлки, ну и в общем она не работает. Если поставить вместо null заремаркированную строку, то вообще ничего не генерится. На более поростые описания сдвигателей типа индексации сигнала другим сигналом квартус просто ругается. Как красиво поведенчески описать параметризируемый баррелевский сдвигатель. Ответ использовать другой синтезатор не подходит.
library ieee,work;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use work.pack.all;
entity p_barrel_shifter is
generic
(
width_data : INTEGER := 8;
width_shift : INTEGER := 2;
max_shift_value : INTEGER := 4;
width_result : INTEGER := 4
);
port
(
data : in STD_LOGIC_VECTOR (width_data - 1 downto 0);
shift : in STD_LOGIC_VECTOR (width_shift - 1 downto 0);
result : out STD_LOGIC_VECTOR (width_result - 1 downto 0)
);
end p_barrel_shifter;
architecture first of p_barrel_shifter is
begin
process (data, shift)
variable shift_var : INTEGER range 0 to max_shift_value;
begin
shift_var := TO_INTEGER(UNSIGNED(shift));
loop0 : for i in 0 to max_shift_value loop
if (i = shift_var) then
result <= data(width_result - 1 + i downto i);
else
null;
--result <= (others => 'X');
end if;
end loop loop0;
end process;
end first;
E-mail: info@telesys.ru