Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
38
Добавлен:
10.12.2013
Размер:
592.21 Кб
Скачать

Государственный комитет РФ по высшему образованию

Пермский государственный технический университет

Кафедра автоматики и телемеханики

ИЗУЧЕНИЕ ЦИФРОВОЙ СХЕМОТЕХНИКИ С ИСПОЛЬЗОВАНИЕМ САПР MAX+PLUSII

Основные элементы языка AHDL

Пермь 2003 г.

СОДЕРЖАНИЕ

 

ВВЕДЕНИЕ

3

СТРУКТКРА ТЕКСТОВОГО ОПИСАНИЯ

3

Общая структура

3

Title Statement (оператор заголовка)

4

Include Statement (оператор включения)

4

Constant Statement (оператор задания константы)

5

Define Statement (оператор обозначения)

5

Parameters Statement (оператор объявления параметров)

6

Function Prototype Statement (оператор описания прототипа)

6

Options Statement (оператор задания опции)

7

Assert Statement (оператор контроля)

8

Subdesign Section (раздел описания интерфейса модуля)

8

Variable Section (раздел переменных)

9

Logic Section (раздел описания логики)

10

ПРИМЕНЕНИЕ КОНСТРУКЦИЙ ЯЗЫКА

10

Числа

10

Логические уравнения (Boolean Equation)

11

Группы

12

Базовые значения логических функций (Defaults Statement)

12

Константы (Constant Statement)

13

Таблица истинности (Truth Table Statement)

13

Оператор IF THEN (If Then Statement)

14

Оператор CASE (Case Statement)

14

Оператор цикла (For Generate Statement)

15

Примитивы (Primitives)

16

Прототип модуля (Function Prototype Statement)

17

2

ВВЕДЕНИЕ

Язык AHDL (Altera Hardware Description Language) – язык описания цифровой ап-

паратуры, созданный фирмой Altera. Язык AHDL, в отличие от таких языков, как VHDL и VerilogHDL, более прост в изучении и оптимизирован для проектирования отельных СБИС. Однако, несмотря на свою относительную простоту, он содержит типичный для современных языков описания аппаратуры набор высокоуровневых конструкций.

СТРУКТКРА ТЕКСТОВОГО ОПИСАНИЯ

Общая структура

Текстовое описание на языке AHDL должно иметь определенную структуру. Основные компоненты структуры перечислены ниже в том порядке, в котором их следует использовать.

Title Statement (optional) Include Statement (optional) Constant Statement (optional) Define Statement (optional) Parameters Statement (optional)

Function Prototype Statement (optional) Options Statement (optional)

Assert Statement (optional) Subdesign Section Variable Section (optional)

If Generate Statement (optional) Node Declaration (optional) Instance Declaration (optional) Register Declaration (optional) State Machine Declaration (optional) Machine Alias Declaration (optional) Assert Statement (optional)

Logic Section

Defaults Statement (optional)

Следующие описания могут быть вставлены в произвольном порядке: Boolean Equation

Case Statement

For Generate Statement

If Generate Statement If Then Statement

In-Line Logic Function Reference Truth Table Statement

Assert Statement

Не все перечисленные операторы и разделы являются обязательными. Необязательные разделы отмечены в скобочках – optional. Так, в простейшем случае, текстовое описание может содержать только разделы Subdesign Section и Logic Section.

В текстовом редакторе САПР Altera MAX+plusII имеются шаблоны для всех конструкций языка AHDL, которые можно вызвать через меню Templates | AHDL Template…

Ниже подробнее рассмотрены все разделы текстового описания языка AHDL.

3

Title Statement (оператор заголовка)

Title Statement (оператор заголовка) имеет следующую конструкцию:

TITLE "__your_title";

Он позволяет задать название для генерируемого компилятором файла отчета (Report File). Для правила использования оператора необходимо выполнять следующие требования:

Оператор начинается с ключевого слова TITLE, за которым следует текстовая строка, заключенная в двойные кавычки ("). В конце оператора заголовка ставится точка с запятой (;):

Текстовая строка может содержать до 255 символов включительно. Она не должна содержать символов конца строки или конца страницы. Для включения в текстовую строку двойных кавычек следует использовать дополнительную пару двойных кавы-

чек: TITLE "Series ””Flex 10K”” Median Filter";

В файле с текстовым описанием данный оператор может быть использован только один раз.

Include Statement (оператор включения)

Конструкция оператора имеет следующий вид:

INCLUDE "__include_filename.inc";

Include Statement позволяет включить содержимое файла, указанного в операторе, в текущее текстовое описание. Правила использования оператора следующие:

Оператор начинается с ключевого слова INCLUDE, за которым в двойных кавычках (") указывается имя файла включения (Include file). Далее ставится точка с запятой

(;).

Если явно не задано расширение файла включения, то компилятор ищет файл, имеющий заданное имя и расширение . INC.

Имя файла, указанное в операторе включения, не должно содержать пути к фай-

лу.

В файле с текстовым описанием данный оператор может использоваться неограниченное число раз.

Последовательность поиска файлов включения при компиляции модуля следую-

щая:

в директории проекта;

в библиотеках пользователя, заданных командой User Libraries (меню Options);

в директориях \maxplus2\max2lib\mega_lpm и \maxplus2\max2inc, созданных в процессе инсталляции пакета.

Файл включения может содержать следующие операторы:

Function Prototype Statement — оператор описания прототипа;

Define Statement — оператор обозначения;

Parameters Statement — оператор объявления параметров;

Constatnt Statement — оператор задания константы.

4

Constant Statement (оператор задания константы)

Оператор имеет следующий вид:

CONSTANT __constant_name = __constant_value;

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

Правила использования оператора:

Оператор начинается с ключевого слова CONSTANT, за которым следует символическое имя, символ равно (=), число или арифметическое выражение. Далее ставится точка с запятой (;).

Имя константы должно быть уникальным и не должно содержать пробелов. Для улучшения читаемости имени следует применять символ подчеркивания (_).

Ссылка на константу допускается только после ее задания.

При задании константы могут использоваться заданные ранее константы.

Циклическое задание констант недопустимо.

В файле с текстовым описанием данный оператор может использоваться неограниченное число раз.

Отметим, что арифметическое выражение, задающее константу, оценивается компилятором и заменяется числом на этапе проверки синтаксиса, Поэтому применение арифметических выражений при задании констант не приводит к использованию дополнительных логических ресурсов СБИС ПЛ.

Define Statement (оператор обозначения)

Для этого оператора принята следующая конструкция написания: DEFINE __evaluated_function_name (__variable, __variable) = __expression;

Оператор обозначения позволяет обозначить арифметическое выражение символическим именем.

Правила использования оператора:

Оператор начинается с ключевого слова DEFINE, за которым следует символическое имя обозначаемого арифметического выражения со списком аргументов, заключенным в скобки. За списком аргументов ставится знак «равно» (=), далее - само арифметическое выражение для этих аргументов и точка с запятой.

Список аргументов может содержать один или более аргументов. Аргументы в списке отделяются друг от друга запятой.

Символическое имя должно быть уникальным и не должно содержать пробелов. Для улучшения читаемости имени следует применять символ подчеркивания (_).

Ссылка на символическое имя арифметического выражения допустима только после его задания в операторе обозначения.

Обозначаемое арифметическое выражение может содержать символическое имя обозначенного ранее арифметического выражения.

В файле с текстовым описанием данный оператор обозначения может использоваться неограниченное число раз.

5

Отметим, что обозначенное арифметическое выражение оценивается компилятором и заменяется числом на этапе проверки синтаксиса. Поэтому его применение не приводит к использованию дополнительных логических ресурсов СБИС ПЛ.

Parameters Statement (оператор объявления параметров)

Объявление параметров осуществляется следующим образом:

PARAMETERS

(

__parameter_name = __parameter_default_value, __parameter_name,

__parameter_name

);

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

Оператор объявления параметров позволяет объявить параметры, управляющие реализацией параметризированных модулей.

Правила использования оператора:

Оператор начинается с ключевого слова PARAMETERS, за которым следует заключенный в скобки список параметров. После закрывающей скобки ставится точка с запятой (;).

Список параметров может содержать один или несколько параметров.

Параметры в списке отделяются друг от друга запятой (,).

Исходное (defaults) значение параметра указывается после символа «равно» (=). Задание исходного значения является необязательным.

Параметр может задаваться через другой параметр.

Циклическое задание параметров недопустимо.

Заданное пользователем символическое имя параметра должно быть уникальным и не должно содержать пробелов. Для улучшения читаемости имени следует использовать символ подчеркивания (_).

Область действия параметра — текстовое описание, в котором он был объявлен.

В файле с текстовым описанием оператор объявления параметров может использоваться неограниченное число раз.

Компилятор присваивает параметру значение, заданное следующим образом (источники указаны в порядке уменьшения старшинства):

при объявлении параметризированного модуля в разделе Variable Section или при непосредственном использовании (In_Line_Reference) параметризированного модуля;

при объявлении в разделе Variable Section модуля, в состав которого входит параметризированный модуль;

как глобальное значение параметра (команда Global Project Parameters меню Assign). Глобальное значение параметра хранится в файле назначений и конфигурации про-

екта (Assigment & Configuration File);

как исходное (defaults) значение параметра.

Function Prototype Statement (оператор описания прототипа)

6

Оператор имеет два способа его задания:

не параметризированный

FUNCTION __function_name(__input_name, MACHINE __state_machine_name) RETURNS (__output_name, __bidir_name, MACHINE __state_machine_name);

параметризированный

FUNCTION __function_name(__input_name, MACHINE __state_machine_name) WITH (__parameter_name, __parameter_name)

RETURNS (__output_name, __bidir_name, MACHINE __state_machine_name);

Оператор описания прототипа позволяет описать интерфейс (входы, выходы, передаваемые параметры) модулей или примитивов, которые будут использованы в данном текстовом описани.

Правила использования оператора:

Оператор начинается с ключевого слова FUNCTION, за которым следует имя модуля, а за ним — заключенный в скобки список входов модуля. При описании прототипа параметризированного модуля далее следует ключевое слово WITH и заключенный в скобки список передаваемых в модуль параметров. Затем указывается ключевое слово RETURNS, и далее — заключенный в скобки список выходов модуля. Оператор оканчивается точкой с запятой.

Элементы списков (входов, передаваемых параметров, выходов) отделяются друг от друга запятыми.

В файле с текстовым описанием данный оператор может использоваться неограниченное число раз.

Options Statement (оператор задания опции)

Оператор задается следующим образом:

OPTIONS BIT0 = __option_value;

Оператор задания опции позволяет определить в группе элемент с меньшим индексом (BIT0) как:

LSB — младший разряд (Least Significant Bit). При этом индексы в группах должны указываться в убывающей слева направо последовательности;

MSB — старший разряд (Most Significant Bit). При этом индексы в группах должны указываться в возрастающей слева направо последовательности;

ANY. При этом порядок перечисления индексов в группе произвольный.

Нарушение порядка перечисления индексов в группах ведет к появлению предупреждения на этапе синтаксического анализа текстового описания.

Правила использования оператора:

Оператор задания опции начинается с ключевого слова OPTIONS, за которым следует ключевое слово BIT0, символ «равно» (=) и одно из трех ключевых слов LSB, MSB, ANY. Далее ставится точка с запятой (;).

Если опция не задана, то по умолчанию предполагается, что BIT0 = LSB.

7

Значение опции, заданное в файле верхнего уровня иерархии описаний проекта, распространяется и на файлы с описанием модулей нижних уровней иерархии, если в них явно не задано другое значение опции.

В файле с текстовым описанием данный оператор может использоваться только

один раз.

Assert Statement (оператор контроля)

Оператор имеет следующую конструкцию:

ASSERT __expression

REPORT __report_string __report_parameter, __report_parameter SEVERITY __severity_level;

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

Правила использования оператора:

Оператор начинается с ключевого слова ASSERT, за которым следует арифметическое выражение. Если значение выражения ложно (False), то контролируемое условие считается невыполненным, и процессор сообщений (Message Processor) отображает заключенное в двойные кавычки сообщение, следующее за ключевым словом REPORT.

Сообщение может содержать символ процент (%), который заменяется значением переменной, указываемой после закрывающих двойных кавычек. Если используется несколько символов процента (%), то переменные перечисляются через запятую в том порядке, в котором должны подставляться их значения.

Необязательное ключевое слово SEVERITY позволяет задать реакцию компилятора («уровень строгости» сообщения): ERROR — ошибка, WARNING — предупреждение, INFO — информация. При отсутствии ключевого слова SEVERITY сообщение, по умолчанию, имеет «уровень строгости» — ERROR.

Если ключевое слово REPORT и соответствующее сообщение не были указаны

воператоре, то при невыполненных условиях контроля процессор сообщений (Message Processor) отображает следующую строчку:

<"уровень строгости" >:Line<номер строки>, File<имя файла>Assertion failed

Оператор контроля оканчивается символом точка с запятой (;).

Допустимо применение оператора в разделе описания логики (Logic Section).

В файле с текстовым описанием данный оператор может использоваться неограниченное число раз.

Subdesign Section (раздел описания интерфейса модуля)

Конструкция оператора имеет следующий вид:

SUBDESIGN __design_name

 

(

 

__input_name, __input_name

: INPUT = __constant_value;

__output_name, __output_name

: OUTPUT;

__bidir_name, __bidir_name

: BIDIR;

8

__state_machine_name

: MACHINE INPUT;

__state_machine_name

: MACHINE OUTPUT;

)

Раздел описания интерфейса позволяет задать имя модуля и перечислить его выводы. Имя модуля должно совпадать с именем логического файла, в котором хранится его текстовое описание. Если модуль является модулем верхнего уровня иерархии, то его имя является и именем проекта, а, следовательно, это имя будут иметь и все вспомогательные файлы проекта.

Правила использования раздела:

Раздел начинается с ключевого слова SUBDESIGN, за которым следует имя модуля. Максимальная длина имени 32 символа. Имя модуля должно совпадать с именем файла, в котором хранится его текстовое описание.

После имени модуля следует заключенный в круглые скобки список его выво-

дов.

Типы выводов: INPUT - вход, OUTPUT - выход, BIDIR - двунаправленный вывод, MACHINE INPUT - вход импортируемых состояний автомата, MACHINE OUTPUT - выход экспортируемых состояний автомата. Выводы MACHINE INPUT и MACHINE OUTPUT не могут быть использованы в текстовом описании верхнего уровня иерархии, т. е. при описании модуля, выводы которого являются выводами СБИС.

Выводы перечисляются через запятую в одну или несколько строчек. В конце перечня однотипных выводов ставится двоеточие, затем ключевое слово, указывающее тип выводов, и далее — точка с запятой. Однотипные выводы могут объединяться в группы (шины), после названия которых ставятся квадратные скобки [], в которых через двойную точку указывается начало и конец диапазона группы (например, b[4..0], c[1..7]).

После ключевого слова INPUT может быть указано базовое значение (GND — логический нуль, VCC — логическая единица) входного сигнала. Базовое значение — значение, которое будет подаваться на вход в том случае, если он окажется неподключенным при использовании данного модуля как компонента при описании модуля более высокого уровня иерархии. Если неподключенным окажется вход, для которого не указано базовое значение, то компилятор пакета МАХ+р1и§ II выдаст сообщение об ошибке.

В файле с текстовым описанием данный раздел может использоваться только

один раз.

Variable Section (раздел переменных)

Раздел переменных позволяет задавать внутренние переменные модуля, предназначенные для использования в разделе описания логики (Logic Section).

Переменная — это символическое имя:

линии связи;

линии связи с тремя состояниями;

модуля, используемого в текстовом описании в качестве компонента (примитива, конечного автомата).

Правила использования раздела:

Раздел начинается с ключевого слова VARIABLE. Далее указывается: символическое имя переменной, символ двоеточие, тип переменной, точка с запятой. Имена однотипных переменных могут быть перечислены через запятую.

Допустимые типы переменных: NODE — линия связи; TRI_STATE_NODE — линия связи с тремя состояниями; модуль более низкого уровня иерархии; примитив; конечный автомат; псевдоним конечного автомата.

9

Раздел переменных может также содержать оператор IF GENERATE, позволяющий, в зависимости от значения оцениваемого в операторе арифметического выражения, управлять заданием переменных.

В файле с текстовым описанием данный раздел может использоваться только

один раз.

Logic Section (раздел описания логики)

Конструкция оператора имеет следующий вид:

BEGIN

END;

Раздел описания логики позволяет задать алгоритм работы проектируемого модуля. Правила использования раздела:

Раздел начинается с ключевого слова BEGIN и заканчивается ключевым словом END, за которым следует точка с запятой (;).

В разделе могут быть использованы следующие операторы:

1)Defaults Statement (оператор задания исходных значений);

2)Boolean Equation (логические уравнения);

3)Boolean Control Equation (логические уравнения для управляющих сигналов);

4)Case Statement (оператор CASE);

5)For Generate Statement (оператор For);

6)If Generate Statement (оператор If generate);

7)If Then Statement (оператор If then);

8)In-Line Logic Function Reference (непосредственное обращение к модулям нижнего уровня иерархии описаний и примитивам);

9)Truth Table Statement (таблица истинности);

10)Assert Statement (оператор контроля);

Если в разделе логики используется оператор задания исходных значений (Defaults Statement), то он должен стоять сразу после ключевого слова BEGIN логической секции. Другие операторы могут быть использованы в произвольном порядке и неограниченное число раз.

В файле с текстовым описанием данный раздел может использоваться только один раз.

ПРИМЕНЕНИЕ КОНСТРУКЦИЙ ЯЗЫКА

Числа

Язык AHDL допускает возможность использования десятичных, двоичных, восьмеричных, шестнадцатеричных чисел. Правила задания чисел:

Десятичное число — совокупность цифр от 0 до 9.

Двоичное число — В "совокупность символов 0, 1, х", либо b "совокупность символов 0, 1, х".

Восьмеричное число — О "совокупность цифр от 0 до 7", либо о "совокупность цифр от 0 до 7", либо Q "совокупность цифр от 0 до 7", либо q "совокупность цифр от 0 до

7".

Шестнадцатеричное число — H "совокупность цифр от 0 до 9 и букв от A до F", либо h "совокупность цифр от 0 до 9 и букв от A до F", либо X "совокупность цифр от 0 до 9 и букв от А до F", либо x "совокупность цифр от 0 до 9 и букв от А до F".

10

Соседние файлы в папке Схемотехника(1)