Изучение VHDL

       

Изучение VHDLМетки в программе.


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

Обычно программисты пренебрегают расстановкой меток. VHDL и так требует много текстового описания (в ~1,5 раза больше, чем Verilog), а тут еще и метки… Но метки - это всё-таки неплохо. Как можно более широкое применение меток обуславливается следующими причинами.

1) В операторах процесса, блока и др. встречаются объявления констант, процедур и функций, которые видимы в пределах данного оператора. Чтоб они были видимы в другом месте, можно использовать описание use, в котором как адрес объявления, указывается метка.

2) Операторы, такие как процесс, блок, могут занимать большое количество строк текста. Тогда метка, поставленная в конце оператора, совпадающая с меткой вначале, служит закрывающей скобкой, по которой программист быстро найдет границу оператора.

3) Такие операторы, как вставка компонента и блок, обязательно имеют метку. По этой метке с помощью объявления конфигурации можно подставить нужную реализацию компонента или блока, отличную от заданной в объекте проекта.

4) При моделировании симулятор работает со скомпилированной программой, в которой всем параллельным операторам поставлены метки. Если у оператора не было метки, то симулятор ставит метку по своему усмотрению, например, номер строки, где стоит оператор. По этой метке программист ищет в модели переменные и сигналы, изменяемые в операторе. Поиск переменных удобнее делать по метке, название которой по смыслу указывает на место в программе.

5) При трансляции программы в логическую схему компилятор-синтезатор каждому параллельному оператору ставит в соответствие логическую схему или библиотечный компонент с именем, соответствующим метке оператора. Если метка отсутствует, то компилятор ставит произвольное имя, например, букву с порядковым номером. Такое имя затрудняет дальнейшие отладку и тестирование проекта на уровне логической схемы и схемы после размещения и трассировки. А по уникальной и смыслосодержащей метке можно легко найти тот самый вентиль или триггер в EDIF -файле, или VHDL-модели после разводки, в которые отразился соответствующий оператор из исходной программы. По-другому это сделать значительно труднее, так как размеры указанных файлов могут достигать нескольких сотен тысяч строк.

6) Имя метки может отражать специфику и алгоритм функционирования данного оператора. Например, процесс, моделирущий регистр с аккумулятором, может обозначаться меткой RG_ACC. В этом случае другому программисту легче разобраться в программе. Поэтому вставка смыслосодержащих меток операторов это обязательное требование для проектов, предназначенных для повторного использования.

Но при сочинении смыслосодержащей метки, как и смыслосодержащих имен переменных, сигналов, объектов проекта, нельзя переусердствовать с длиной имен. Существует практика написания длинных имен в программировании на Си, которая неприменима в программировании на VHDL.

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

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