Cтраница 1
Оператор вхождения может рассматриваться как вызов подпрограммы с проблемно-ориентированным интерфейсом вызова. Кроме того, отличие состоит в том, что внутренние переменные включаемого модуля определены как статические, сохраняющие значения между инициализациями. Формальные объекты включаемого модуля ( параметры и сигналы) при инициализации оператора замещаются фактическими объектами вызывающей программы. Оператор вхождения модуля обязательно параллельный, это означает, что преобразования, определенные в операторной части включаемого модуля, выполняются всякий раз, когда изменяются фактические объекты оператора вхождения. [1]
Основными операторами SAB являются операторы вхождения компонентов ( Component Instantiation Statement), которые определяют порядок соединения включаемых в проект модулей и, возможно, их параметры. [2]
Средства структурного представления проекта включают оператор вхождения компонента ( Component Instance Statement), задающий тип используемых структурных компонентов и способы их соединений, декларации конфигурации ( Configuration Declaration), с помощью которых можно выбирать вариант реализации включаемого компонента, и ряд других конструкций языка. [3]
![]() |
Структурное представление проекта. [4] |
Каждый компонент в архитектурном теле представлен своим оператором вхождения, метка которого определяет его имя в проекте, вслед за чем записано имя прототипа и списки соответствий. [5]
О Вызов подпрограммы инициирует исполнение тела подпрограмм, являющегося набором последовательных операторов. Оператор вхождения вызывает к исполнению архитектурное тело, которое содержит параллельные операторы, и сам является параллельным оператором, исполняемым при каждом изменении его входных сигналов. [6]
В разделе объявлений SAB, кроме характерных для любых архитектурных тел деклараций, таких как декларации типов, сигналов, констант, включаются специфические подразделы: обязательный подраздел декларации прототипов используемых компонентов и необязательный подраздел объявления конфигураций. Раздел операторов SAB содержит операторы вхождения компонентов, которые, собственно, и определяют порядок соединения компонентов. Могут включаться и другие параллельные операторы, а если таких операторов относительно много, подобное архитектурное тело называют смешанным, или структурно-поведенческим. [7]
Модуль, содержащий декларацию параметров настройки ( generic), называют параметризованным. Фактическое значение задается в списке соответствий оператора вхождения. [8]
Обратим внимание на форму записи списков соответствия. Для компонентов U и U2, прототипами которых являются модули Уи соответственно, используется сокращенная форма записи списков соответствия портов, причем для компонента U2 опущен список соответствия параметров, что означает, что принято значение по умолчанию - в данном случае width: a. Оператор вхождения для компонента Z показывает полные формы списков соответствия. Ключевое слово open в качестве формального параметра означает неиспользуемый порт. Для входного порта это соответствует использованию постоянного значения сигнала, определенного по умолчанию. [9]
Большинство современных языков проектирования аппаратуры поддерживают возможность описания проекта в виде совокупности заранее описанных компонентов и их связей, и язык Verilog не является исключением. Всякая иерархия представлена главным проектным модулем, который называют вершиной проекта, и совокупности подчиненных проектных модулей. Вершина проекта содержит операторы вхождения компонентов. Подчиненный проектный модуль может быть, в свою очередь, вершиной следующей иерархии. В общем случае, проектные модули независимы в том смысле, что каждый может использоваться самостоятельно в различных конструкциях и быть вершиной проекта. Проектные модули, относящиеся к одному проекту, могут находиться в одном файле или представляться несколькими файлами. В последнем случае проектные файлы должны компилироваться в библиотеку проекта в порядке их вхождения в иерархию снизу вверх. [10]
Оператор вхождения может рассматриваться как вызов подпрограммы с проблемно-ориентированным интерфейсом вызова. Кроме того, отличие состоит в том, что внутренние переменные включаемого модуля определены как статические, сохраняющие значения между инициализациями. Формальные объекты включаемого модуля ( параметры и сигналы) при инициализации оператора замещаются фактическими объектами вызывающей программы. Оператор вхождения модуля обязательно параллельный, это означает, что преобразования, определенные в операторной части включаемого модуля, выполняются всякий раз, когда изменяются фактические объекты оператора вхождения. [11]
Если в устройстве есть несколько одинаковых модулей, то прототип декларируется только один раз. Например, если в проект входит несколько однотипных регистров, представленных в библиотеке одним и тем же entity, to в структурном теле размещается единственная декларация прототипа регистра, даже если конкретные экземпляры имеют различные параметры. Тем не менее каждому экземпляру, включаемому в проект, называемому также вхождением модуля ( instance), при структурном описании присваивается собственное имя. Это собственное имя предъявляется в разделе операторов архитектурного тела в виде метки оператора вхождения компонента. [12]
Понятие макромодуля с точки зрения принципов описания функционирования не отличается от понятия модуля. Есть только незначительные ограничения по использованию некоторых конструкций. Разница, в основном, относится к организации процедуры моделирования иерархических проектов. Если обычный модуль компилируется таким образом, что при моделировании вложенные программные единицы ( подпрограммы, операторы вхождения модулей) интерпретируются как вызовы соответствующих процедур, то компиляция макромодуля предусматривает прямое вложение операторов макромодуля в вызывающую программу. [13]
Оператор вхождения может рассматриваться как вызов подпрограммы с проблемно-ориентированным интерфейсом вызова. Кроме того, отличие состоит в том, что внутренние переменные включаемого модуля определены как статические, сохраняющие значения между инициализациями. Формальные объекты включаемого модуля ( параметры и сигналы) при инициализации оператора замещаются фактическими объектами вызывающей программы. Оператор вхождения модуля обязательно параллельный, это означает, что преобразования, определенные в операторной части включаемого модуля, выполняются всякий раз, когда изменяются фактические объекты оператора вхождения. [14]