Прототип модуля
Язык AHDL позволяет при описании модуля использовать в качестве его компонентов созданные ранее модули. Для этого текстовое описание модуля верхнего уровня иерархии должно содержать описания прототипов этих модулей.
Прототип задается с помощью оператора Function Prototype Statement, который может быть расположен либо непосредственно в текстовом описании, либо в файле включения (Include File), содержимое которого подсоединяется к текстовому описанию на этапе компиляции.
Файл включения (Include File) с описанием прототипа модуля создается с помощью команды Create Default Include File (меню File), выполняемой в окне текстового редактора.
В языке AHDL определены два способа обращения к прототипу модуля:
Непосредственное обращение (In_Line Reference)
Присвоение прототипу символического имени, т.е. объявление его переменной, и обращение к нему как к переменной.
Данные способы обращения к прототипу совпадают с описанными ранее способами обращения к примитиву.
В языке AHDL определено два типа модулей:
Параметризированные (Parameterized)
Непараметризированные (Unparameterized)
Рассмотрим вариант текстового описания модуля Top_level_module, представленного ниже:
В нем используется три компонента, каждый из которых является модулем более низкого уровня в иерархии описаний. Предположим, что для модулей Module_1 и Module_LPM созданы файлы включения:
Файл Module_1.inc
Файл Module_LPM.inc
Ниже представлено текстовое описание, в котором осуществляется непосредственное обращение к прототипам модулей
Прототипы модулей Module_1 и Module_LPM, содержащиеся в файлах включения, подсоединяются к данному текстовому описанию с помощью оператора Include. Прототип же модуля Module_2 задан непосредственно в текстовом описании.
В разделе Variable объявлены две переменные Int_A[8..1] и Int_D[8..1], являющиеся символическими именами шин, связывающих компоненты Module_1 и Module_LPM, Module_LPM и Module_2 соответственно.
Уравнение Int_A[ ]=Module_1(.CLK=CLK, .D[ ]=Din[ ]) иллюстрирует непосредственное обращение к прототипу модуля и сопоставление входов прототипа и передаваемых значений по именам. Возвращаемое значение, другими словами выходной сигнал компонента, присваивается внутренней переменной Int_A[ ].
В следующей строке текстового описания, в строке с комментариями, приведено уравнение, логически эквивалентное уравнению, рассмотренному выше. Однако в нем используется позиционное сопоставление входов прототипа и передаваемых значений.
Значение параметра WIDTH задается при непосредственном обращении к прототипу параметризированного модуля.
Рассмотрим теперь текстовое описание модуля Top_Level_Module в котором компоненты объявляются внутренними переменными.
В разделе переменных объявлены три переменные – символические имена модулей, используемых в данном текстовом описание как компоненты.
Отметим, что при объявлении переменной Var_Module_LPM, обозначающей параметризированный модуль, задано значение параметра WIDTH.
Лекция 19.12.12
