Изучение VHDL

       

Изучение VHDLОператор block.


В языке VHDL блок представляет собой выделенное множество парал­лельных операторов. Этот оператор, как и оператор процесса является основным операторам языка VHDL. Все операторы вставки компонента в проекте можно заменить на эквивалентные операторы блока. Большой иерархический объект проекта можно представить одним объектом, в котором компоненты заменены эквивалентными блоками. Синтаксис этого оператора:

\оператор block\::=[\метка\]: block [\выражение сдерживания\] [is]

            [generic(\объявление настроечной константы\

                   {; \объявление настроечной константы\});]

            [generic map(\связывание настроечной константы\

                      {, \связывание настроечной константы\});]

            [port (\объявление порта\ {;\объявление порта\});]

            [port map (\связывание порта\ 

                      {,\связывание порта\})];

                      {\объявление в блоке\}

             begin

                       {\параллельный оператор\ }



             end block [\метка\];

В описании блока фраза generic объявляет типы внутренних настроеч­ных констант блока, фраза generic map, описывает список связывания на­строечных конс­тант, поступающих извне с внутренними настроечными конс­тантами, объявле­ния порта описывают входные и выходные сигналы блока, а список связываний портов задает соответствие внешних сигналов и сигна­лов портов. В блоке могут быть объявлены те же объекты языка, которые объявляются в теле архитектуры.

Отдельное необязательное булевское выражение сдерживания неявно задает специальный необъявляемый сигнал guard, который разрешает или запрещает (сдерживает) выполнение операторов присваивания сигналу с условием guard. Этот же сигнал может участвовать как операнд в выраже­ниях в пределах блока.

Как и в других языках программирования, блоки в VHDL выполняют две основные функции: создание локальной памяти для сигналов и введение обособленной области их действия (области видимости). Также блоки могут иметь иерархическое построение, т.е. могут применяться в блоках на более высоком уровне. С помощью оператора конфигурации можно вместо одних блоков подставлять блоки с другим исполнением. Эквивалентным блоком можно заменить любую пару объект-архитектура, используемую как компо­нент.

В разделах, посвященных операторам процесса и присваивания сигналу указыва­лось, что нельзя одному сигналу присваивать значение в разных процессах, если над типом сигнала не определена функция разрешения. Для реализации корректного присваивания сигналу любого типа в разных процессах, язык VHDL предоставляет операторы присваивания сигналу со сдерживанием.

Для этого, во-первых, процесс с оператором присваивания сигналу или соответ­ствующий параллельный оператор помещают в блок с выражением сдерживания. Во-вторых, оператор присваивания сигналу оформляют как оператор со сдержива­нием, для чего перед выражением оператора ставится ключевое слово guarded. Например, блоки В1 и В2:

signal A,B,C: out integer bus :=0;

disconnect С:integer after 2 ns;

4B1: block (sel = 1) is begin

       С <= guarded А;

    end block B1;

B2: block (sel = 2) is begin

       С <= guarded D;

    end block B2;

выдают в общую шину, представленную сигналом С, целое значение А при условии равенства 1 управляющего сигнала sel (т.е. когда сигнал guard<=(sel = 1) равен true) и значение сигнала D при другом условии в выражении сдерживания. Если guard = false, то источник сигнала отключается от шины, т.е. выполняется его сдерживание. Отключение источника может происходить с задержкой, устанав­ливаемой в объявлении disconnect, которое следует за объявлением сигнала. В приведенном примере отключение происходит с задержкой 2 нс.

В случае, когда не выбран ни один источник, сигнал принимает свое предыдущее значение, если источник сигнала типа register или предвари­тельно заданное значение, если источник сигнала типа bus. Ключевыми словами register и bus  сигналы обозначаются при их объявлении. Благо­даря механизму сдерживания, один сигнал может иметь несколько источни­ков – выходов блоков. При этом правильное поведение этого сигнала состо­ит в выборке не более одного источника сигнала одновременно, т.е. сигнал guard защищает (guards) общую шину от неправильного функциони­рования. Таким образом, еще одной основной функцией блоков в VHDL является организация нескольких источников для одного сигнала.

Обычно трансляция операторов блоков поддерживается компиляторами-синтезатора­ми. Но использование механизма подключения к общей шине, обеспечивае­мого блоками, а также программирование поведения модели, связанное с ключевыми словами register, bus, disconnect, как правило, запреща­ют­ся. Также не поддерживаются связывания портов и настроечных констант в блоках. Следует отметить, что при внедрении проекта устройства иногда его необходимо перевести на язык Verilog, в котором отсутствует оператор, эквивалентный оператору block. Поэтому использование оператора block при синтезе не рекомендуется.

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