Язык AHDL

Операторы и элементы языка аппаратуры фирмы Altera AHDL. Зарезервированные идентификаторы: шины, символы, строковые и символьные имена. Структура описания проекта на языке AHDL. Создание текстового выходного файла. Использование логики и констант.

Рубрика Программирование, компьютеры и кибернетика
Вид книга
Язык русский
Дата добавления 23.04.2015
Размер файла 144,7 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

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

Для n-битного конечного автомата, существует 2n возможных состояний. Если Вы объявили n бит Вы должны продолжать добавлять имена фиктивных состояний до тех пор, пока количество состояний не достигнет степени 2. Файл recover.tdf, приведенный ниже, содержит автомат, который может возвращаться из некорректных состояний.

SUBDESIGN recover

(

clk : INPUT;

go : INPUT;

ok : OUTPUT;

)

VARIABLE

sequence : MACHINE

OF BITS (q[2..0])

WITH STATES (

idle,

one,

two,

three,

four,

illegal1,

illegal2,

illegal3);

BEGIN

sequence.clk = clk;

CASE sequence IS

WHEN idle =>

IF go THEN

sequence = one;

END IF;

WHEN one =>

sequence = two;

WHEN two =>

sequence = three;

WHEN three =>

sequence = four;

WHEN OTHERS =>

sequence = idle;

END CASE;

ok = (sequence == four);

END;

Этот пример содержит 3 бита: q2, q1, и q0. Следовательно существует 8 состояний. Так как объявлено только 5 состояний, были добавлены 3 фиктивных состояния.

4.11 Реализация запоминающих устройств

MAX+PLUS II (и AHDL) снабжены несколькими LPM и мегафункциями, которые позволяют Вам реализовать RAM и ROM в устройствах MAX+PLUS II. Универсальная, масштабируемая природа каждой из этих функций гарантирует, что Вы можете использовать их для реализации любых поддерживаемых типов RAM или ROM в MAX+PLUS II.

Altera не рекомендует создавать заказные логические функции для реализации памяти. Вы должны использовать поставляемые Altera функции во всех случаях, где Вы хотите реализовать RAM или ROM.

Таблица 17. Мегафункции запоминающих устройств

Имя

Описание

lpm_ram_dq

Синхронная или асинхронная память с раздельными портами ввода вывода

lpm_ram_io

Синхронная или асинхронная память с единственным портов I/O

lpm_rom

Синхронная или асинхронная память только для считывания

csdpram

Двухпортовая память

csfifo

Буфер FIFO

В этих LPM функциях параметры используются для определения ширины входных и выходных данных; количество запоминаемых слов; регистровые или нет входы данных, адреса, управления и выхода; должен ли включаться файл начального содержимого памяти для блока RAM и т.д.

4.12 Реализация иерархических проектов

TDF файлы, написанные на языке AHDL, можно смешивать с другими файлами в проектную иерархию. Файлы низкого уровня могут быть или файлами, поставляемыми Altera-ой, или мега и макрофункциями, определенными пользователем.

4.12.1 Использование непараметрических функций

MAX+PLUS II включает библиотеки примитивов и непараметрических макрофункций. Все логические функции MAX+PLUS II можно использовать для создания иерархических проектов. Мега и макрофункции автоматически устанавливаются в подкаталогах каталога \maxplus2\max2lib, созданного во время инсталляции. Логика примитивов встроена в AHDL.

Существует два способа использовать (т.е. вставлять экземпляр) непараметрическую функцию в языке AHDL:

Объявить переменную для функции, т.е. имя экземпляра, в разделе Variable объявления Instance и использовать порты экземпляра функции в разделе Logic.

Использовать ссылку на логическую функцию в разделе Logic TDF файла.

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

Входы и выходы мега и макрофункций должны объявляться с помощью оператора прототипа функции (Function Prototype). Прототипы функций не требуются для примитивов. MAX+PLUS II снабжена файлами включения (Include Files), которые содержат прототипы для всех мега и макрофункций MAX+PLUS II в каталогах \maxplus2\max2lib\mega_lpm и \maxplus2\max2inc, соответственно. С помощью оператора Include, Вы можете передавать содержимое Include файла в файл TDF, для объявления прототипа мега или макрофункции MAX+PLUS II.

Файл macro1.tdf, приведенный ниже, демонстрирует 4-битный счетчик, соединенный с дешифратором 4 в 16. Экземпляры этих функций создаются с помощью объявлений Instance в разделе Variable.

INCLUDE "4count";

INCLUDE "16dmux";

SUBDESIGN macro1

(

clk : INPUT;

out[15..0] : OUTPUT;

)

VARIABLE

counter : 4count;

decoder : 16dmux;

BEGIN

counter.clk = clk;

counter.dnup = GND;

decoder.(d,c,b,a) = counter.(qd,qc,qb,qa);

out[15..0] = decoder.q[15..0];

END;

Этот файл использует операторы Include, для импортирования прототипов функций для двух макрофункций: 4count и 16dmux. В разделе Variable переменная counter объявлена как экземпляр функции 4count, а переменная decoder объявлена как экземпляр функции 16dmux. Входные порты функций, в формате <имя экземпляра>.<имя порта>, определены с левой стороны булевых уравнений в разделе Logic, а выходные порты с правой стороны.

Файл macro2.tdf, приведенный ниже, имеет такую же функциональность как и macro1.tdf, но создает экземпляры двух функций с помощью ссылок и узлов q[3..0]:

INCLUDE "4count";

INCLUDE "16dmux";

SUBDESIGN macro2

(

clk : INPUT;

out[15..0] : OUTPUT;

)

VARIABLE

q[3..0] : NODE;

BEGIN

(q[3..0], ) = 4count (clk, , , , , GND, , , , );

% эквивалент подставляемой ссылки со связью по имени порта %

% (q[3..0], ) = 4count (.clk=clk, .dnup=GND); %

% эквивалент подставляемой ссылки со связью по имени порта %

% и предложением RETURNS, определяющим требуемый выход %

% q[3..0] = 4count (.clk=clk, .dnup=GND) %

% RETURNS (qd, qc, qb, qa); %

out[15..0] = 16dmux (.(d, c, b, a)=q[3..0]);

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

% out[15..0] = 16dmux (q[3..0]); %

END;

Прототипы функций 4count.inc и 16dmux.inc приведены ниже:

FUNCTION 4count (clk, clrn, setn, ldn, cin, dnup, d, c, b, a)

RETURNS (qd, qc, qb, qa, cout);

FUNCTION 16dmux (d, c, b, a)

RETURNS (q[15..0]);

Ссылки на 4count и 16dmux появляются в первом и втором булевых уравнениях в разделе Logic, соответственно. Ссылка на 4count использует связь по положению порта, тогда как ссылка на 16dmux использует связь по имени порта. Входные порты обоих макрофункций определяются с правой стороны ссылки, а выходные порты с левой.

Комментарии демонстрируют эквивалентные ссылки для различных видов связи с портом. В ссылке порты с правой стороны символа равенства (=) можно перечислять с помощью или связи по положению или по имени порта. Порты с левой стороны символа равенства всегда используют связь по положению. При использовании связи по положению важен порядок портов, так как существует соответствие один в один между порядком портов в прототипе функции и портами, определенными в разделе Logic. В ссылке на 4count запятые используются как разделители для портов, которые не соединяются точно.

Предложение RETURNS является дополнительным с ссылке. RETURNS можно использовать для перечисления подмножества выходов функции, которые используются в экземпляре.

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

4.12.2 Использование параметрических функций

MAX+PLUS II содержит параметрические мегафункции, а также функции библиотеки параметрических модулей (LPM). Например, параметры используются для определения ширины порта или будет ли блок памяти RAM реализован как синхронный или асинхронный. Параметрические функции могут содержать другие подпроекты, которые в свою очередь могут быть параметрическими или непараметрическими. Параметры можно использовать с некоторыми макрофункциями, которые не являются параметрическими. (Примитивы не могут быть параметрическими). Все логические функции MAX+PLUS II можно использовать для создания иерархических проектов. Мега и макрофункции автоматически устанавливаются в подкаталоги каталога \maxplus2\max2lib, созданного во время инсталляции; логика примитивов встроена в язык AHDL.

Параметрические функции объявляются с помощью ссылки на функцию или объявления Instance таким же образом как для непараметрических функций, но с некоторыми дополнительными шагами:

Экземпляр логической функции должен содержать в себе предложение WITH, которое основано на предложении WITH в прототипе функции, в котором приводится список параметров, используемых экземпляром. Вы можете использовать предложение WITH для дополнительного присваивания значений параметрам экземпляра, однако, для всех необходимых параметров в функции, параметрическое значение должно прикладываться где-нибудь в пределах проекта. Если сам по себе экземпляр не содержит некоторых или всех значений для требуемых параметров, компилятор ищет их в порядке поиска значений параметров.

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

Файл lpm_add1.tdf, приведенный ниже, реализует 8-битный сумматор с помощью ссылки на параметрическую мегафункцию lpm_add_sub.

INCLUDE "lpm_add_sub.inc";

SUBDESIGN lpm_add1

(

a[8..1], b[8..1] : INPUT;

c[8..1] : OUTPUT;

carry_out : OUTPUT;

)

BEGIN

% Экземпляр мегафункции со связью порта по положению %

(c[], carry_out, ) = lpm_add_sub(GND, a[], b[], GND,,)

WITH (LPM_WIDTH=8,

LPM_REPRESENTATION="unsigned");

%Эквивалентный экземпляр со связью по имени %

--(c[],carry_out,)= lpm_add_sub(.dataa[]=a[],.datab[]=b[],

-- .cin=GND, .add_sub=GND)

-- WITH (LPM_WIDTH=8,

LPM_REPRESENTATION="unsigned");

END;

Прототип функции для lpm_add_sub приведен ниже:

FUNCTION lpm_add_sub(cin, dataa[LPM_WIDTH-1..0], datab[LPM_WIDTH-1..0], add_sub)

WITH (LPM_WIDTH, LPM_REPRESENTATION, LPM_DIRECTION, ADDERTYPE,

ONE_INPUT_IS_CONSTANT)

RETURNS (result[LPM_WIDTH-1..0], cout, overflow);

Здесь требуется только параметр LPM_WIDTH и экземпляр функции lpm_add_sub в файле lpm_add1.tdf определяет значения параметров только для LPM_WIDTH и LPM_REPRESENTATION.

Файл lpm_add2.tdf, приведенный ниже, идентичен с lpm_add1.tdf, но реализует 8-битный сумматор с помощью объявления Instance.

INCLUDE "lpm_add_sub.inc";

SUBDESIGN lpm_add2

(

a[8..1], b[8..1] : INPUT;

c[8..1] : OUTPUT;

carry_out : OUTPUT;

)

VARIABLE

8bitadder : lpm_add_sub WITH (LPM_WIDTH=8,

LPM_REPRESENTATION="unsigned");

BEGIN

8bitadder.cin = GND

8bitadder.dataa[] = a[]

8bitadder.datab[] = b[]

8bitadder.add_sub = GND

c[] = 8bitadder.result[]

carry_out = 8bitadder.cout

END;

4.12.3 Использование заказных мега- и макрофункций

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

После того как Вы определили логику для заказной функции в файле проекта, необходимо выполнить несколько шагов при использовании функции в других TDF файлах или в других типах файлов проекта.

Чтобы подготовить заказную мега или макрофункцию к использованию в другом файле проекта требуется:

Откомпилировать и при необходимости промоделировать файл проекта для обеспечения его правильного функционирования.

Если Вы планируете использовать функцию в нескольких проектах, Вы должны назначить каталог для хранения файла проекта в качестве библиотеки пользователя с помощью команды User Libraries (меню Options) или сохранения копии файла в существующем каталоге пользовательской библиотеки. Или же сохраните копию файла в каталоге, содержащем проект, который будет использовать заказную функцию.

I. С помощью открытия файла в окне текстового редактора создайте Include файл и символ, который представляет текущий файл:

A. Выберите команду Create Default Include File (меню File) для создания Include файла, который можно использовать в TDF файле верхнего уровня. С помощью оператора Include Вы можете импортировать содержимое Include файла в TDF файл, объявляя прототип мега или макрофункции.

B. Выберите команду Choose Create Default Symbol (меню File) для создания символа, который можно использовать в GDF файле.

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

4.12.4 Импорт и экспорт конечных автоматов

Вы можете импортировать и экспортировать конечные автоматы между TDF файлами и другими файлами проекта, определяя входные и выходные порты как MACHINE INPUT или MACHINE OUTPUT в разделе Subdesign. Прототип функции, который представляет файл, содержащий конечный автомат, должен указывать, какие входы и выходы принадлежат конечному автомату с помощью предварения имен сигналов ключевым словом MACHINE.

Типы портов MACHINE INPUT и MACHINE OUTPUT нельзя использовать в файле проекта верхнего уровня. Хотя высокоуровневый файл с этими портами полностью не компилируется, Вы можете использовать команду Project Save & Check (меню File) для проверки его синтаксиса и команду Create Default Include File (меню File) для создания Include файла, который представляет текущий файл.

Вы можете переименовать конечный автомат с помощью временного имени, вводя объявление псевдоимени автомата в раздел Variable. Вы можете использовать это псевдоимя в файле, где создан этот автомат или в файле, который использует порт MACHINE INPUT для импорта конечного автомата. Затем Вы можете применить это имя вместо исходного имени автомата.

Файл ss_def.tdf, приведенный ниже, определяет и экспортирует конечный автомат ss с помощью порта ss_out.

SUBDESIGN ss_def

(

clk, reset, count : INPUT;

ss_out : MACHINE OUTPUT;

)

VARIABLE

ss: MACHINE WITH STATES (s1, s2, s3, s4, s5);

BEGIN

ss_out = ss;

CASE ss IS

WHEN s1=>

IF count THEN ss = s2; ELSE ss = s1; END IF;

WHEN s2=>

IF count THEN ss = s3; ELSE ss = s2; END IF;

WHEN s3=>

IF count THEN ss = s4; ELSE ss = s3; END IF;

WHEN s4=>

IF count THEN ss = s5; ELSE ss = s4; END IF;

WHEN s5=>

IF count THEN ss = s1; ELSE ss = s5; END IF;

END CASE;

ss.(clk, reset) = (clk, reset);

END;

Файл ss_use.tdf, приведенный ниже, импортирует конечный автомат с помощью порта ss_in.

SUBDESIGN ss_use

(

ss_in : MACHINE INPUT;

out : OUTPUT;

)

BEGIN

out = (ss_in == s2) OR (ss_in == s4);

END;

Файл top1.tdf, приведенный ниже, использует ссылки для вставки экземпляров функций ss_def и ss_use. Прототипы функций для ss_def и ss_use содержат ключевые слова MACHINE, которые указывают какие входы и выходы являются автоматными.

FUNCTION ss_def (clk, reset, count)

RETURNS (MACHINE ss_out);

FUNCTION ss_use (MACHINE ss_in)

RETURNS (out);

SUBDESIGN top1

(

sys_clk, /reset, hold : INPUT;

sync_out : OUTPUT;

)

VARIABLE

ss_ref: MACHINE; %объявление псевдоимени автомата %

BEGIN

ss_ref = ss_def(sys_clk, !/reset, !hold);

sync_out = ss_use(ss_ref);

END;

Внешний конечный автомат можно также реализовать в TDF файле верхнего уровня с помощью объявления экземпляра в разделе Variable. Файл top2.tdf, приведенный ниже, имеет такую же функциональность, как и top1.tdf, но использует объявления экземпляров, вместо ссылок.

FUNCTION ss_def (clk, reset, count)

RETURNS (MACHINE ss_out);

FUNCTION ss_use (MACHINE ss_in)

RETURNS (out);

SUBDESIGN top2

(

sys_clk, /reset, hold : INPUT;

sync_out : OUTPUT;

)

VARIABLE

sm_macro : ss_def;

sync : ss_use;

BEGIN

sm_macro.(clk, reset, count) = (sys_clk, !/reset, !hold);

sync.ss_in = sm_macro.ss_out;

sync_out = sync.out;

END;

Размещено на Allbest.ru

...

Подобные документы

  • Описание комбинационных и последовательностных логических устройств, групповых операций, цифровых таблиц истинности с учетом архитектурных особенностей. Особенности языка AHDL. Зарезервированные ключевые слова. Реализация иерархического проекта.

    реферат [2,2 M], добавлен 23.01.2014

  • Графический ввод схемы и симуляция в Quartus II. Основные логические элементы. Описание логических схем при помощи языка AHDL, его элементы. Зарезервированные ключевые слова. Моделирование цифровых схем с использованием параметрических элементов.

    курсовая работа [1,7 M], добавлен 07.06.2015

  • Разработка структурной схемы системы. Выбор и обоснование не указанных в задании элементов. Анализ временных параметров системы. Разработка файла конфигурации для системы сбора-обработки данных на языке AHDL. Моделирование цифровой части системы.

    курсовая работа [1,1 M], добавлен 26.10.2014

  • Элементы языка Object Pascal: идентификаторы, константы, переменные, выражения. Структура проекта Delphi. Операторы и метки. Типы данных языка OPascal. Статические и динамические массивы. Записи с вариантными полями. Совместимость и преобразование типов.

    курс лекций [385,4 K], добавлен 18.02.2012

  • Символьный тип данных как составляющая языка программирования: управляющие символы, лексемы и разделители. Разработка программного обеспечения для практической реализации решения задач, содержащих символьные величины языка программирования Turbo Pascal.

    курсовая работа [37,7 K], добавлен 03.05.2012

  • История разработки языка программирования Си. Программа на Си как одна или несколько единиц компиляции (файлов), стадии работы компилятора. Идентификаторы и ключевые слова, типы констант. Форма Бекуса-Наура описания синтаксиса формальных языков.

    презентация [257,7 K], добавлен 05.01.2014

  • Идентификаторы, объекты и операции языка VHDL. Последовательные и параллельные операторы. Описание интерфейса устройства. Синтез схем по описаниям на языке VHDL. Последовательность букв и цифр произвольной длины. Цифровое устройство и его модель.

    курсовая работа [132,5 K], добавлен 28.06.2009

  • Создание приложения по выбору варианта заполнения прямоугольной матрицы: случайными числами или из текстового файла. Идентификаторы метода "main". Расчет количества столбцов, содержащих хотя бы один нулевой элемент. Инструкция по работе с программой.

    курсовая работа [563,8 K], добавлен 28.10.2014

  • Создание программы для перевода кодов с языка Pascal на язык Си. Обработка программ операторами case, assign, rewrite и write. Способы объявления файла, комментария, переменных, логических и арифметических выражений. Виды синтаксических анализаторов.

    курсовая работа [461,0 K], добавлен 03.07.2011

  • Общая характеристика языков программирования. Описание языка Паскаль: основные субъекты языка; структура Паскаль-программы; типизация и объявление данных. Операторы присваивания и выражения. Структурные операторы, организация ветвлений и циклов.

    дипломная работа [276,6 K], добавлен 26.01.2011

  • Переменные и операции языка СИ: используемые символы, константы, идентификаторы и ключевые слова. Использование комментариев в тексте программы. Типы данных и их объявление. Приоритеты операций и порядок вычислений. Функции, переменные, макроподстановки.

    учебное пособие [135,0 K], добавлен 17.02.2012

  • История создания и применение языка Basic. Стандартные математические и строковые функции. Операции и выражения языка. Блоки данных и подпрограммы. Операторы управления, цикла, ввода-вывода и преобразования информации. Константы, переменные, массивы.

    контрольная работа [2,3 M], добавлен 04.05.2015

  • Ознакомление со структурой, комментариями, переменными и типами данных, константами, перечислениями, преобразованием типов языка программирования высокого уровня С++. Ключевые понятия языка, идентификаторы, ключевые слова, функции, операторы, выражения.

    контрольная работа [31,2 K], добавлен 12.12.2009

  • Главная идея LaTeX, возможности системы. Структура документа - текстового файла, содержащего специальные команды языка разметки. Формат текста и вспомогательные программы. Отображение математических и других формул, символы функций и исходные команды.

    курсовая работа [704,6 K], добавлен 21.02.2015

  • Стандартизированный процедурный язык программирования. Создание системного программного обеспечения и прикладных программ. Особенности языка Си, его основные недостатки. Передача параметров в функцию по значению. Стандартная библиотека языка Си.

    презентация [396,3 K], добавлен 12.11.2012

  • Рассмотрение принципа работы процессора и его практической реализации с использованием языка описания аппаратуры Verilog. Проектирование системы команд процессора. Выбор размера массива постоянной памяти. Подключение счетчика инструкций и файла регистра.

    курсовая работа [1,2 M], добавлен 26.05.2022

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

    курсовая работа [305,9 K], добавлен 03.07.2011

  • Составление Win32 App проекта - простейшего текстового редактора, который позволяет выполнять такие операции: редактирование текста, копирование и вставку из одного окна проекта в другое окно проекта. Методы вызова диалогов сохранения и открытия файла.

    курсовая работа [716,3 K], добавлен 09.11.2010

  • Информационные технологии и защиты данных. Методы защиты информации. Виды информационной безопасности и умышленные угрозы. Программирование на языке Turbo Pascal. Типы числовых данных. Функции ввода и вывода. Логические операторы, символьные переменные.

    курсовая работа [1,7 M], добавлен 16.05.2016

  • Ознакомление со структурой языка программирования Turbo-Pascal 7.0, его алфавитом, выражениями и простейшими конструкциями (метками, идентификаторами). Способы описания арифметических, вещественных, логических и символьных операций в программной среде.

    реферат [68,2 K], добавлен 07.02.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.