Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Оператор CASE



Оператор CASE може використовуватися в одній з наступних форм:

CASE __expression IS WHEN __constant_vaiue => __statement; __statement WHEN __constant_vaiue => __statement; __statement WHEN OTHERS => __statement; __statement END CASE; CASE __expression IS WHEN __constant_vaiue => __statement; __statement WHEN __constant_vaiue => __statement; __statement END CASE;

Оператор CASE дозволяє оцінити значення однорозрядної змінної (однорозрядного виводу), групи змінних (групи виводів) і по результатах оцінки вибрати той або інший оператор для виконання.

Використання оператора CASE проілюструємо на прикладі опису пріоритетного шифратора, представленого раніше в модулях TRUTH_TABLE і IF_THEN.

SUBDESIGN CASE_

(

high, middle, low: INPUT;

highest_level[1..0]: OUTPUT;

)

BEGIN

CASE (high, middle, low) IS

WHEN B"1XX" => highest_level[]=3;

WHEN B"01X" => highest_level[]=2;

WHEN B"001" => highest_level[]=1;

WHEN OTHERS => highest_level[]=0;

END CASE;

END;

В операторі CASE оцінюється значення часової групи (high, middle, low). Якщо її значення відповідає:

■ двійковому числу В"1хх", то виконується оператор, що присвоює групі виходів highest_level[] десяткове число 3;

■ двійковому числу В"01х", то групі виходів highest_level[] присвоюється десяткове число 2;

■ двійковому числу В"001", то групі виходів highest_level[] присвоюється десяткове число 1;

■ іншим (WHEN OTHERS), не зазначеним вище трирозрядним двійковим числам, то групі виходів highest_level[] буде присвоєне десяткове число 0.

Нагадаємо, що двійкове число В"1хх" відповідає набору чисел: В"100”, В"101", В" 110", В"111". Тому оператор WHEN OTHERS => highest_level[]= у даному прикладі еквівалентний операторові WHEN В"000" => highest_level[]=0.

Нижче (рис. 11) наведено часові діаграми, отримані при моделюванні з використанням пакета MAX+plus II роботи пріоритетного шифратора

Рис. 11.

3.8. Базові значення логічних функцій

Необхідність у заданні базових значень логічних функцій виникає тоді, коли вони визначені не на всіх наборах аргументів. Базові значення можуть бути задані:

■ неявно (за замовчуванням);

■ явно.

Базове значення, що задається за замовчуванням - логічний нуль. Проілюструємо неявне задання базових значень на прикладі:

SUBDESIGN DEFAULT_1

(

ADR[15..0], mem/io: INPUT;

ROM, RAM, PRINT, SP[1..0]: OUTPUT;

)

BEGIN

TABLE

mem/io, ADR[] => ROM, RAM, PRINT, SP[];

1, B"00xxxxxxxxxxxxxx" =>1, 0, 0, 1;

1, B"11xxxxxxxxxxxxxx" =>0, 1, 0, 2;

0, B"1000000010100111" =>0, 0, 1, 3;

END TABLE;

END;

Логічні функції ROM, RAM, PRINT, SP[2], SP[1] визначені не на всіх наборах аргументів. Оскільки немає явного задання їхніх базових значень, то за замовчуванням вони будуть дорівнювати нулю на всіх, не наведених в таблиці істинності наборах аргументів

Результати моделювання модуля DEFAULT_1 представлені на рис. 12

Рис. 12.

Для явного задання базових значень логічних функцій застосовується оператор DEFAULTS:

DEFAULTS,

node_name = constant_value;

END DEFAULTS;

Використання цього оператора ілюструється в наступному прикладі:

SUBDESIGN DEFAULT_2

(

IN[3..0]: INPUT;

ASCII_CODE[7..0]: OUTPUT;

)

BEGIN

DEFAULTS

ASCII_CODE[]=B"00111111"; -- величина коду, яка

-- задана за замовчуванням (код, що відповідає символу «?»)

END DEFAULTS;

TABLE

IN[] =>ASCII_CODE[];

8 => B"01100001"; -- ASCII код букви "а".

12 => B"01100010"; -- ASCII код букви "b".

14 => B"01100011"; -- ASCII код букви "c".

15 => B"01100100"; -- ASCII код букви "d".

END TABLE;

END;

Група виводів ASCII_CODE[] на всіх, не зазначених в таблиці істинності наборах аргументів, буде мати значення В"00111111", явно задане в операторі DEFAULTS.

При описі логічної функції за допомогою операторів CASE і IF THEN доцільно явне визначення її на всіх наборах аргументів.

SUBDESIGN DEFAULT_3

(

IN[3..0]: INPUT;

ASCII_CODE[7..0]: OUTPUT;

)

BEGIN

CASE IN[] IS

WHEN 8 => ASCII_CODE[]=B"01100001";-- ASCII код букви "а".

WHEN 12 => ASCII_CODE[]=B"01100010";-- ASCII код букви "b".

WHEN 14 => ASCII_CODE[]=B"01100011";-- ASCII код букви "c".

WHEN 15 => ASCII_CODE[]=B"01100100";-- ASCII код букви "d".

WHEN OTHERS => ASCII_CODE[]=B"00111111";-- ASCII код символу "?"

END CASE;

END;

У наведеному прикладі використана конструкція WHEN OTHERS (коли інші) оператора CASE. Ця конструкція задає групі виходів ASCII_CODE[] значення В"00111111" на всіх, не зазначених раніше в операторі CASE, наборах аргументів.

Результати моделювання логічно еквівалентних модулів DEFAULT_2 і DEFAULT_3 наведені на рис. 13

Рис.13.

Відмітимо, що якщо значення логічної функції на деяких набоpax аргументів для нас байдуже, то на цих наборах аргументів їй варто присвоїти значення В"х", що дозволить компіляторові більш ефективно мінімізувати логічну функцію.





Дата публикования: 2014-11-29; Прочитано: 206 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...