Язык AHDL

       

Оператор Case


Файл decoder.tdf, приведенный ниже, описывает дешифратор 2 в 4 бита. Он преобразует 2-битный код в унарный код.

SUBDESIGN decoder

(

            code[1..0]         : INPUT;

            out[3..0]            : OUTPUT;

)

BEGIN

            CASE code[] IS

                        WHEN 0 => out[] = B"0001";

                        WHEN 1 => out[] = B"0010";

                        WHEN 2 => out[] = B"0100";

                        WHEN 3 => out[] = B"1000";

            END CASE;

END;

В этом примере входной код шины имеет значения 0, 1, 2 или 3. В операторе Case за символом => следует активизируемое уравнение. Например, если code[] равен 1, то выход out1 устанавливается в B"0010". Поскольку все значения выражения различны, в одно время можно активизировать только одну область WHEN




Оператор Case определяет список альтернативных вариантов, которые могут быть активизированы в зависимости от значения переменной, группы или выражения, следующего за ключевым словом CASE.

Следующий пример демонстрирует использование оператора Case:

CASE f[].q IS

            WHEN H"00" =>

                        addr[] = 0;

                        s = a & b;

            WHEN H"01" =>

                        count[].d = count[].q + 1;

            WHEN H"02", H"03", H"04" =>

                        f[3..0].d = addr[4..1];

            WHEN OTHERS =>

                        f[].d = f[].q;

END CASE;

Оператор Case имеет следующие характеристики:

¨    Булевское выражение, группа или конечный автомат  располагаются между ключевыми словами CASE и IS (в примере, показанном выше,  это f[ ].q).

¨    Оператор Case завершается ключевыми словами END CASE за которыми следует символ (;).

¨    Телом оператора Case является список из одного или более неповторяющихся альтернативных вариантов, следующих за ключевым словом WHEN. Каждому альтернативному варианту предшествует ключевое слово WHEN.

¨    Каждый альтернативный вариант представляет собой одно или более отделенных друг от друга запятыми значений констант, за  которыми следует символ (=>).

¨    Если значение булевского выражения, стоящего за ключевым словом CASE, соответствует какому - либо альтернативному варианту, то все операторы, следующие за соответствующим символом (=>) активизируются. В примере, приведенном выше, если f[ ].q равно h”01”, то активизируется булевское выражение count[ ].d = count[ ].q + 1.

¨    Если значение булевского выражения, стоящего за ключевым словом CASE не равно ни одному из альтернативных вариантов, то активизируется  альтернативный вариант, стоящий за ключевыми словами WHEN OTHERS. В примере, показанном выше, если значение f[ ].q не равно H”00”, H’01” или H”CF”, то активизируется выражение f[ ].d = f[].q.

¨    Оператор Defaults  определяет значение по умолчанию для тех случаев, когда ключевые слова WHEN OTHERS не используются.

¨    Если оператор Case используется для определения переходов конечного автомата, то ключевые слова WHEN OTHERS не могут использоваться для выхода из недопустимых состояний. Если состояния конечного автомата определяются n -мерным кодом и при этом автомат имеет 2^n состояний, то использование ключевых слов WHEN OTHERS является допустимым.

¨    Каждый альтернативный вариант должен заканчиваться символом (;).

Содержание раздела