Нехай маємо восьмирозрядну вхідну шину даних in[7..0], дворозрядну шину для керування зсувом Cnt[1..0] і шістнадцяти розрядну вихідну шину Result[15..0].
Потрібно побудувати пристрій зсуву, який під дією керуючого сигналу Cnt зсуває вхідні дані або на чотири розряди вліво, або на вісім розрядів вліво, або взагалі не зсуває. Приймемо таку умову: якщо керуючий сигнал дорівнює нулю або трьом, то сигнал не зсувається. Якщо керуючий сигнал дорівнює одиниці, то вхідний сигнал зсувається на 4 розряди вліво. Якщо керуючий сигнал дорівнює двом, то вхідний сигнал зсувається на 8 розряди вліво.
Сказане можна записати так:
– якщо Cnt[]=0, Result[15..8]=0, Result[7..0]=in[7..0] — дані передаються без зсуву;
– якщо Cnt[]=1, Result[15..12]=0, Result[11..4]=in[7..0], Result[3..0]=0 — дані передаються із зсувом вліво на чотири розряди;
– якщо Cnt[]=2, Result[15..8]= in[7..0], Result[7..0]=0 — дані передаються із зсувом вліво на чотири розряди;
– якщо Cnt[]=3, Result[15..8]= in[7..0], Result[7..0]=0 — дані передаються без зсуву;
Логіка такого пристрою реалізовується наступною програмою
SUBDESIGN shifter
(in[7..0]:INPUT;
cnt[1..0]:INPUT;
result[15..0]:OUTPUT;)
BEGIN
CASE cnt[] IS
WHEN 1 => result[15..12]=0;
result[11..4]=in[];
result[3..0]=0;
WHEN 2 => result[15..8]=in[];
result[7..0]=0;
WHEN others => result[15..8]=0;
result[7..0]=in[];
END CASE;
END;
Символ та результати моделювання

