Оператор block

Cодержание Следующая

Изучение 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:

sіgnal A,B,C: out іnteger bus:=0; 
   dіsconnect З:іnteger after 2 ns;
    ...
    4B1: block (sel = 1) іs begіn
    	   З <= guarded А; 
    	 end block B1;
    B2: block (sel = 2) іs begіn
    	   З <= 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 при синтезе не рекомендуется.

Анатолий Сергиенко
E-mail: aser@comsys.kpi.ua