Щоб уникнути засувок, вам потрібно переконатися, що всі ваші виходи призначені для всіх можливих гілок коду.
наприклад,
if a = '1' then
b(0) <= '1';
else
b(1 downto 0) <= "00";
end if;
буде генерувати засувку, оскільки в першій умові значення b (1) не вказане, тому компілятор вирішив, що ви хочете зберегти попереднє значення b (1) там. Один із способів написати це, що не створить засувку:
if a = '1' then
b <= prev_b;
b(0) <= '1';
else
b(1 downto 0) <= "00";
end if;
...
if rising_edge (clk)
prev_b <= b;
end if;
Тут ви чітко заявляєте, що b має зберегти своє старе значення, а потім замініть b (0) на нове значення.
Інший спосіб - дати ба за замовчуванням значення, як у відповіді @ TomiJ.
Якщо ви опублікуєте код, на який ви отримуєте засувку, ми можемо допомогти вам знайти конкретну причину.