11815

Учебное-методическое пособие по выполнению лабораторных работ По курсу Проектирование на ПЛИС

Книга

Информатика, кибернетика и программирование

Учебно-еметодическое пособие по выполнению лабораторных работ По курсу Проектирование на ПЛИС Аннотация Данное пособие содержит краткое описание базовых процедур по выполнению лабораторных робот по курсу Проектирование на ПЛИС. В пособии рассмотрена САПР MAX...

Русский

2013-04-11

1.25 MB

229 чел.

Учебное-методическое пособие по выполнению лабораторных работ

По курсу «Проектирование на ПЛИС»

Аннотация

Данное пособие содержит краткое описание базовых процедур по выполнению лабораторных робот по курсу «Проектирование на ПЛИС». В пособии рассмотрена САПР MAX+PLUSII, предназначенная  для проектирования  ПЛИС фирмы «Altera». Рассмотрены типовые варианты лабораторных работ.


 Содержание

Аннотация………………………………………………………………………

Введение………………………………………………………………………..

1. Структура САПР «MAX+PLUSII»…………………………………………

   1.1. Основные характеристики САПР «MAX+PLUSII»…………………..

   1.2. Программные модули…………………………………………………..

2. Маршрут проектирования ПЛИС в САПР «MAX+PLUSII»……………..

   2.1. Способы описания проектов БИС…………………………………….

   2.2. Подготовка контролирующих тестов…………………………………

   2.4. Этапы отладки проекта БИС…………………………………………..

   2.3..Создание проекта в среде «MAX+PLUSII»…………………………..

3. Основные проектные модули САПР «MAX+PLUSII»……………………

    3.1. Графический редактор  схемы………………………………………..

    3.2. Ввод и редактирование тестов.……………………………………….

    3.3. Программа моделирования……………………………………………

    3.4. Программатор ПЛИС………………………………………………….

4. Проектирование ПЛИС в базисе примитивов……………………………..

    4.1. Мультиплексор..……………………………………………………….

    4.2. Шифратор..……………………………………………………………..

    4.3. Демультиплексор..……………………………….………………….....

    4.4. Сумматор..………………………….………………………………….

    4.5. Вычитатель…………………………………………………………….

    4.6. Асинхронные счетчики ……………..………………………………..

    4.7. Синхронные счетчики …………………..……….……………………

    4.8. Последовательные сумматоры и вычитатели………………………..

    4.9. Дешифратор..…………………………………………………………..

5. Проектирование ПЛИС с использованием LPM модулей………………..

   5.1. LPM модуль счетчика…………………………………………………..

   5.1. LPM модуль сдвигового регистра..…………………………………....

   5.2. LPM модуль ПЗУ.………………………………………………………

6. Описание работы схем  на поведенческом уровне на языке AHDL……..

   6.1.Введение в язык AHDL…………………………………………………

   6.2. Структура текстового описания схем на языке AHDL……………....

   6.3. Основные элементы языка……………………………………………..

       6.3.1. Булевы уравнения, группы………………………………………..

       6.3.2. Оператор IF THEN, CASE ………………………………………...

       6.3.3. Описание схем с помощью таблиц истинности………….………

       6.2.4. Операторы FOR ENERATE IF GENERATE ……………………..

       6.2.5.. Использование примитивов элементов в языке AHDL……….


7. Проектирование типовых схем на языке AHDL…………..………………

    7.1. Простые комбинационные схемы….……………..……..…………....

    7.2. Мультиплексоры…………………...…………………….…………….

    7.3. Шифраторы…………………………………………………………….

    7.4. Демультиплексоры…………...………………….………..…………...

    7.5. Сумматоры…………………..…….……………………………………

    7.6. Вычитатели…………………………………………………..…………

    7.7. Шинные формирователи…………………………………..…………..

    7.8. Счетчики…………….………………………………………………….

    7.9. Дешифраторы………………………………………………….……….

    7.10. Компараторы………………………………………………………….

Литература……………………………………………………………………...


Введение

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

 Поэтому, Несмотря на то, что ПЛИС уступают заказным схемам по быстродействию в 35 раз, а по расходу кремния в 710 раз, они очень популярны среди разработчиков аппаратуры, поскольку позволяют в несколько раз сократить сроки разработки аппаратуры, улучшить качество её отладки.

Очень популярны ПЛИС в России. Это объясняется тем, что Российские разработчики аппаратуры практически не имеют возможности заказывать изготовление специализированных БИС за рубежом. Уровень же отечественных предприятий, выпускающих микросхем очень сильно отстаёт от мирового. В такой ситуации ПЛИС являются той самой «палочкой-выручалочкой», позволяющей Российским разработчикам создавать современную аппаратуру. По этой причине практически все специализированные узлы аппаратуры систем связи, обработки сложной графической информации, специализированных вычислителей разрабатываются в России исключительно на базе ПЛИС.

В России наиболее популярны ПЛИС фирм Altera и Xilins С помощью этих микросхем можно достаточно быстро выполнять разработку цифровой аппаратуры самого различного спектра. Наиболее доступными являются все-таки ПЛИС фирмы Altera. Фирма Altera проводит достаточно демократическую политику на Российском рынке. Имеется небольшая, но достаточно эффективная дилерская сеть. Заинтересованным пользователям Фирма Altera предлагает бесплатные средства проектирования – САПР MAX+PLUSII (полная версия) и САПР QUARTUS (начальная редакция). С помощью этих бесплатных средств можно разрабатывать  достаточно серьёзные проекты БИС. Если учесть, что ПЛИС фирмы более дешевые и доступные, то становиться понятным, что большинство разработок в России  используют ПЛИС Altera.

Фирма Altera предоставляет широкий набор различных ПЛИС для применения в аппаратуре различного назначения. Эти ПЛИС можно разбить на 3 основные группы (классические PLD, ПЛИС архитектуры MAX и ПЛИС архитектуры FLEX).

Классические  PLD представляют собой ПЛИС небольшого  объёма, выполненные на основе программируемый логических матриц (ПЛМ). Имеют степень интеграции несколько сотен вентилей и  используются для разработки БИС, реализующих простые функции.

ПЛИС архитектуры МАХ являются более сложными микросхемами. Они состоят из совокупности  несколько PLD, объединённых матрицей коммутации.  По степени интеграции ПЛИС архитектуры МАХ  могут достигать 20000 вентилей. Они применяются для разработке аппаратуры средней сложности.

ПЛИС архитектуры FLEХ являются самыми сложными микросхемами, построенными на базе системы программируемых логических блоков.  По степени интеграции ПЛИС архитектуры FLEХ  достигают  объёма в несколько миллионов вентилей. На их основе возможно создавать даже программируемые системы на кристалле (ПСНК).

С учетом вышесказанного, курс «проектирование на ПЛИС» ориентирован на изучение проектирования ПЛИС применительно к средствам проектирования ПЛИС Altera. Базовой системой проектирования выбрана доступная САПР ПЛИС – «MAX+PLUSII».


1. Структура САПР MAX+PLUSII

1.1. Основные характеристики САПР MAX+PLUSII

САПР MAX+PLUSII представляет собой архитектурно-независимую среду проектирования, которая легко приспосабливается к конкретным проектным требованиям и может работать на различных компьютерных платформах.

Система проектирования MAX+PLUSII, как показано на рис 1.1.,  является функционально полной САПР для реализации для реализации проектов на микросхемах программируемой    логики  фирмы   Altera семейств MAX 3000, MAX 5000, MAX 7000, MAX 9000, FLEX 6000, FLEX 8000, FLEX 10K, ACEX 1K.

САПР MAX+PLUSII, разработанный фирмой Altera, предоставляет полный спектр возможностей для разработки цифровых микросистем:

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

САПР MAX+PLUSII позволяет обрабатывать файлы языка AHDL (Altera Hardware Description Language), стандартные файлы EDIF, Verilog HDL, VHDL, схемотехнические файлы OrCAD. Кроме этого, MAX+PLUSII читает файлы Xilinx и позволяет получать файлы в формате SDF (Standard Delay Format).

 Рис. 1.1. Задачи, решаемые САПР MAX+PLUSII.

MAX+PLUSII имеет богатый графический интерфейс, дополненный иллюстрированной справочной системой. Обширная библиотека разработанных компанией Altera мега и макрофункций, включая операционные устройства из библиотеки параметризованных модулей (Library of Parameterized Modules), обеспечивает широкий спектр возможностей для ввода проекта.  Полный пакет MAX+PLUSII включает 11 интегрированных приложений, которыми пользуются при создании проектов (рис 1.2).

Приложения MAX+PLUSII

 Рис. 1.2. Структура пакета MAX+PLUSII

Кроме пакета из 11 приложений MAX+PLUSII включает менеджер проектов, под управлением которого выполняется проектирование микросхем. При работе в менеджере проектов одновременно активными могут быть несколько приложений,  можно переключаться между ними с помощью одного щелчка мыши или с помощью команды меню. В то же время можно выполнять одно из фоновых приложений – компилятор, симулятор, анализатор времени или программатор. Одинаковые команды в разных приложениях облегчают задачу разработчика. Можно легко минимизировать окно приложения, превратив его в значок, не закрывая само приложение, а потом восстановить его первоначальный размер. Эта особенность позволяет эффективно работать с компонентами, не загромождая экран.


1.2. Программные модули

Структурно в САПР MAX+PLUSII входят следующие программные модули..

Окно иерархии – показывает текущую иерархию файлов в виде дерева с «ответвлениями», представляющие файлы нижнего уровня. Беглого взгляда достаточно, чтобы определить, содержит ли данный файл схему, текст или временную диаграмму, какие файлы в текущий момент открыты, а также какие служебные файлы доступны в текущем проекте. Можно открывать и закрывать файлы, назначать им ресурсы прямо в дереве иерархии.

Графический редактор – позволяет осуществлять сборку схемы в режиме WYSIWYG (what-you-see-is-what-you-get – что видишь, то и получаешь). В качестве базовых блоков можно использовать примитивы (логические элементы, буфера и т.п.), мегафункции и макрофункции фирмы Altera, либо самостоятельно разработанные примитивы.

Редактор примитивов – позволяет редактировать существующие и создавать новые примитивы.

Текстовый редактор – позволяет создавать и редактировать текстовые файлы проекта, написанные на языках AHDL,VHDL и Verilog HDL. С помощью текстового редактора можно также создавать, просматривать и редактировать файлы в кодировке ASCII, используемые другими приложениями MAX+PLUSII. Хотя можно создавать файлы для описанных выше языков и с помощью других редакторов, редактор MAX+PLUSII позволяет использовать преимущества справочной системы, системы выделения цветом разных синтаксических конструкций, а также шаблонов AHDL, VHDL и Verilog HDL.

Редактор временных диаграмм – выполняет двойную роль: служит инструментом для описания поведения схем, а также используется для ввода тестовых сигналов и просмотра результатов моделирования (симуляции).

Редактор общей топологической структуры – позволяет назначать логическим элементам выводы ПЛИС и ресурсы логических ячеек в графической среде. Можно редактировать расположение выводов ПЛИС и индивидуально назначать сигналы логическим ячейкам в блоке LAB. Также можно просматривать результаты последней компиляции.

Компилятор – является сердцем системы MAX+PLUSII, обеспечивающим эффективную обработку проекта. Он позволяет задавать параметры компиляции для достижения наилучшей реализации вашего проекта в выбранной микросхеме. Имеет развитые средства локализации ошибок проектов, позволяя очень быстро выполнять отладку проектов. Компилятор обрабатывает проекты, предназначенные для устройств Altera Classic, MAX 5000, MAX 7000, MAX 9000, FLEX 6000, FLEX 8000 и FLEX 10K. Большинство задач компилятором выполняется автоматически. Тем не менее, можно настроить выполнение любого шага компиляции необходимым образом.

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

Анализатор времен – анализирует производительность логической схемы после того, как она была синтезирована и оптимизирована компилятором.

Программатор – позволяет программировать, конфигурировать, проверять и тестировать устройства.

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

На рисунке 1.3. показан экран с окнами: иерархии, редактора временных диаграмм и справочной системы MAX+PLUSII.

 Рис 1.3. Вид рабочего экрана при работе в САПР MAX+PLUSII.

Многие команды, такие как открытие файлов, выполняются несколькими приложениями MAX+PLUSII, поэтому, изучив одно приложение, легко изучить другие. Конструкторские редакторы и вспомогательные редакторы также выполняют многие действия сходным образом. Можно комбинировать несколько типов файлов разработки в иерархическом проекте, выбирая наилучший формат для каждого функционального блока. Программа имеет достаточно простой интерфейс.


2. Маршрут проектирования ПЛИС в
САПР MAX+PLUSII

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

Схематично маршрут проектирования ПЛИС в САПР MAX+PLUSII показан на рис. 2.1.

Проектирование ПЛИС начинается с осмысливания ТЗ, разработки алгоритмов и структуры БИС, продумывается методология тестирования кристалла (это нужно делать сразу, потом могут возникнуть проблемы)

После этого разрабатывается описание проекта, которое может быть в виде:

  •  графического описания;
  •  описание на поведенческом уровне;
  •  описания в виде списка цепей (net list);

Для удобства восприятия и для уменьшения объёма разрабатываемых схем очень полезно использовать иерархическое представление проектов.

2.1. Способы описания проектов БИС.

Графическое описание: 

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

  •  создается графическое представление схемы на основе библиотеки логических элементов (символов), в том числе параметризованных;
  •  создаются и редактируются  символы;
  •  создаются метки для сшивания страниц (многолистные схемы);
  •  при необходимости готовится иерархическое представление проекта.

Графический редактор САПР MAX+PLUSII  имеет богатые графические возможности: графический интерфейс с пользователем, меню, всплывающие окна, растяжка связей, drag & drop, удобное создание шин с помощью примитивов, иерархический подход, смена цветов, шрифта, наличие контроля простых ошибок и т.д.


     Маршрут  проектирования ПЛИС в рамках системы MAX+plus II

           НЕТ

        

        

     ДА

           НЕТ

     ДА

 Рис 2.1.


Описание на высоком уровне (языке типа HDL, АHDL, Verilog HDL)

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

Существует несколько возможных способов описания поведения:

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

Это наиболее подходящий инструмент для представления проекта на высоком уровне. Подходит для описания очень сложных проектов, позволяет сэкономить много времени. Основные характеристики:

  •  компактность представления;
  •  невысокая наглядность, трудность с разбором полетов;
  •  идеальное средство для миграции проекта (перенесения в другой базис).

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

2.2. Подготовка описания тестовых воздействий для моделирования работы БИС.

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

  •  текстовое описания в алфавите 0,1,L,H,X,D;
  •  графическое представление в виде графиков;
  •  текстовое описание с учетом векторного представления сигналов в десятичном или шестнадцатеричном виде;
  •  описание в виде программ или процедур.

Для обеспечения контроля правильности работы БИС желательно описывать  как входные воздействия, так и ответные реакции.


2.3. Этапы отладки проекта ПЛИС

Компиляция

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

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

a) Распознавание конструкций входного файла и установление соответствия их с элементами ПЛИС путем задания логических функций и связей. Примеры распознавания: арифметическая сумма операндов трансформируется в сумматор, оператор CASE - в мультиплексор. Сложная комбинационная логика для FLEX10K эффективно трансформируется в соответствующее ПЗУ.

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

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

c). Временной синтез, в процессе которого выполняется учет параметров и ограничений, установленных пользователем.

d) Контроль за соблюдение правил проектирования (асинхронные входы, начальные состояния, риск гонок, иголок и т.д.)

e) Формирование выходных файлов: для программирования, моделирования, временного анализа, отчет.

f) Выдача сообщений об ошибках, предупреждений, автоматическое открытие файлов и локализация ошибок.

g) Оптимизация в зависимости от типа ПЛИС. Разные стратегии.

h). Разбиение проекта на несколько ПЛИС. Оптимизация внешних цепей.

Моделирование

На этапе моделирования проектировщик ПЛИС проверяет правильность работы схемы путём анализа реакции модели ПЛИС на входные тестовые сигналы.

На этапе логическое моделирования решаются следующие задачи:

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

Временной анализ

На этапе временного анализа строится матрица задержек распространения сигналов от входов БИС до их выходов. На основании этой матрицы выполняется анализ быстродействия проекта

Топологическое редактирование

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

Данный подход, несмотря на дополнительную трудоемкость, имеет свои плюсы:

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

Программирование и загрузка

На этапе программирования и загрузки выполняются операции по записи конфигурационного файла. Этот файл записывается либо непосредственно в ПЛИС (для ПЛИС, выполненных на базе EEPROM или FLESH памяти) либо в специальное конфигурационное ПЗУ (для ПЛИС, выполненных на базе SRAM памяти).

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

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


2.4. Создание проекта в среде MAX+PLUS II

Процесс разработки ПЛИС в укрупнённой  форме может быть представлен следующим образом.

1. Создается новый файл схемы либо иерархия из нескольких таких файлов в любой комбинации с помощью редакторов MAX+PLUS II (Графического, Текстового, Редактора Временных Диаграмм).

2. Устанавливается название проекта по имени файла наивысшего уровня.

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

4. Открывается окно компиляции MAX+PLUS II и с помощью кнопки Start производится компиляция проекта. При желании можно подключить модуль Timing SNF Extractor, в результате чего создается файл списка соединений для временного моделирования и временного анализа.

5. Если проект скомпилирован успешно, можно произвести моделирование и временной анализ.

Для того чтобы произвести временной анализ необходимо открыть окно Анализатора Времен MAX+PLUS II (Timing Analyzer), выбрать режим анализа и нажать кнопку Start.

Для того чтобы произвести моделирование, необходимо создать вектор входных сигналов, либо в файле Simulator Channel File (.scf) с помощью Редактора Временных Диаграмм (Waveform Editor), либо в файле Vector File (.vec) с помощью Текстового Редактора. Затем, следует открыть окно моделирования  MAX+PLUSII и нажать кнопку Start.

6. После успешного проведения моделирования можно перейти к процедуре программирования и загрузке MAX+PLUS II. Программируемая ПЛИС либо вставляется в программатор (Matser Programming Unit – MPU), либо к ней подсоединяется один из кабелей - загрузчиков: BitBlaster, ByteBlaster или FlexDownLoad. После этого нажимается кнопка Program для того, чтобы запрограммировать ПЛИС, конфигурация которых определяется внутренним ПЗУ (EPROM или EEPROM), либо нажимается кнопка Configure для записи информации в конфигурационное ПЗУ ПЛИС (для ПЛИС,  выполненных по технологии SRAM). 


3. Основные проектные процедуры САПР
MAX+PLUSII.

3.1. Графический ввод и редактирование схемы

Работа по созданию графического описания схемы начинается с вызова графического редактора. Это осуществляется нажатием кнопки «new» меню «file». После этого появляется всплывающее окно, в котором нужно выбрать пункт «graphic editor file». После этого открывается чистая страница для рисования схемы. Файлы графического редактора имеют расширение «.gds»

Процедура создания графического представления схемы включает в себя набор шагов по вводу необходимых объектов и рисования связей между ними. Для ввода объекта необходимо щелкнуть кнопкой мыши в пустом пространстве окна графического редактора для того, чтобы указать точку установки объекта и выполнить команду Enter Symbol из меню Symbol, ввести объект можно также с помощью двойного щелчка мышью в пустом месте Графического Редактора. При этом появляется всплывающее окно диалог «Ввод Символа» – Enter Symbol (рис. 3.1.1). В этом окне отображается список библиотек, которые присутствуют в системе. Нужно сначала указать требуемую библиотеку, а затеи выбрать  в ней нужный элемент. Для этого нужно ввести название добавляемого в схему символа (примитива) и нажать кнопку «ОК», допускается выбор элемента из списка.

                               

  Рис 3.1.1. Окно диалога «Ввод символа»


Обычно для создания графического представления необходимо ввести следующие объекты:

  •  элементы схемы;
  •  внешние выводы;
  •  метки сигналов земли-питания;
  •  имена цепей.

Внешние выводы могут иметь типы «input», «output», «bidir». Ввод внешних выводов и меток земли-питания осуществляется также по команде «Enter Symbol». При этом нужно выбрать библиотеку примитивов (prim) и найти в ней требуемые элементы.

Для рисования связей, проставления надписей, редактирования расположения элементов и связей,  необходимо пользоваться панелью инструментов, находящейся на левой стороне окна. Для более удобного просмотра изображения в этой панели инструментов вы найдёте лупы «+» и «-».

Пример несложного графического представления схемы приведен на рис. 3.1.2.

Рисунок 3.1.2 Пример графического представления схемы.

На рисунке 3.1.2. показано окно графического редактора после добавления нескольких объектов и проведения связей между ними.

После того как задуманная схема будет нарисована и сохранена, необходимо сделать компиляцию проекта. Для этого необходимо создать проект, как показано в разделе 2.4.,  а затем вызвать программу компиляции, что можно сделать либо выбором пункта меню Compiler в меню MAX+PLUSII(рис 5) либо нажать соответствующую кнопку  (фабрика с трубой) на панели инструментов. После этого открывается оно компилятора, имеющее вид, показанный на рис 3.1.3.

Рисунок 3.1.3.  Окно компилятора САПР MAXPLUS II.

Для запуска  компилятора требуется кнопку Start. По мере того, как компилятор обрабатывает проект, вся возникшая информация, ошибки и предупреждения появляются в окне Обработчика Сообщений (Message Processor), которое появляется автоматически.

После того как проект скомпилирован, можно приступить к его моделированию.


3.2 Ввод и редактирование тестов

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

Задание входных воздействий и анализ ответных реакциях выполняется в программе Waveform Editor. Стандартное расширенин файлов, содержащих временные диаграммы «.scf». Для вызова редактора временных диаграмм необходимо в меню «File» нажать кнопку «New» и указать тип файла «Waveform Editor File». В результате этих действий откроется окно, представленное на рис 3.2.1.

Рис 3.2.1. Окно редактора временных диаграмм.

Перед началом создания временной диаграммы полезно командой «End Time» меню «File» задать время сценария моделирования, а командой  «Grid Size» меню «Options»  установить размер временной сетки.

После этого можно приступить к заданию входных воздействий. Сначала нужно задать список выводов, которые будут участвовать в задании временной диаграммы. Для этого нужно открыть диалоговое окно ввода выводов (рис. 3.3.2) выполнив команду «Enter Nodes From SNF» из меню «Nodes».

Рисунок 3.2.2 Диалоговое окно «Enter Nodes From SNF».

Затем нужно нажать кнопку List, чтобы получить список входных(I) или выходных(O) узлов проекта. Выбор требуемого узла производится двойным щелчком левой клавиши мыши и нажатием кнопки ОК. После того, как все требуемые узлы выбраны, необходимо сохранить файл командой Save As из меню File.

После выбора узлов  создаются временные диаграммы для входных сигналов. Для того что бы задать логический уровень тому или иному входному сигналу, нужно щелкнуть мышью в поле Value(рис. 3) или выделить ту временную часть, в течении которой входной узел будет  иметь желаемый логический уровень, нажав левую клавишу мыши в начале интервала и отпустив в конце. После этого задается логический уровень при помощи команды «Overwrite Low(0)», «Overwrite High(1)» меню «Edit.» Если требуется ввести синхросигнал тактовых импульсов, то нужно выделить часть временной диаграммы и при помощи команды  «Overwrite Clock» меню «Edit» в появившемся окне задать параметры сигнала.

Для удобства восприятия многоразрядных сигналов в редакторе временных диаграмм предусмотрена возможность объединения их в группы, которые могут отображаться в битовом, восмеричном, десятичном или шестнадцатеричном виде. Для создания группы нужно с помощью мышки, и клавиш «Ctrl», «Shift» выделить нужную группу сигналов и далее, нажав правую кнопку мышки вызвать диалоговое окно работы с выводами (рис 3.2.3.),  в котором набрать команду ввода группы «Enter Groop», после чего в диалоговом окне параметров группы (рис 3.2.4.) указать нужный тип группы.

 Рис 3.2.3. Диалоговое окно работы с выводами.

 Рис 3.2.4. Диалоговое окно параметров группы.

Внешний вид окна редактора временных диаграмм после задания входных воздействий показан на рис 3.2.4.

Рис 3.2.5. Внешний вид окна редактора временных диаграмм после задания входных сигналов


3.3. Программа моделирование

После того как значения всех входных воздействий заданы, выполняется моделирование проекта. Для этого необходимо запустить симулятор САПР MAXPLUS II при помощи команды Simulator меню MAX+PLUS II или нажав соответствую кнопку на панели инструментов (экран монитора с временными диаграммами). После того как откроется окно симулятора (рис. 3.3.1) необходимо запустить процесс моделирования нажав кнопку Start.

 

Рисунок 3.3.1  окно симулятора САПР MAX+PLUS II

После окончания процедуры моделирования появляется окно, в котором выдаётся краткая справка о результатах моделирования. Пример окна справки представлен на рис 3.3.2.

 

Рис 3.3.2. Окно справки моделирования.

После завершения процесса симуляции MAX+PLUSII выдаст сообщение об успешном (либо неуспешном) завершении работы и список возникших сообщений (если они возникнут) в окне Обработчика Сообщений. Для перехода к анализу диагностических сообщений необходимо нажать кнопку ОК (рис. 3.3.2).

В результате проведения логического моделирования будут рассчитаны ответные реакции БИС. Для того, чтобы перейти к анализу результатов моделирования и посмотреть ответные реакции  необходимо открыть файл симулятора SCF (Simulator Channel File), нажав кнопку «Open SCF» в диалоговом окне симулятора. Теперь виден результат моделирования выходных узлов.

Программа моделирования MAX+PLUSII позволяет вести моделирование в режиме сравнения эталонных и вычисленных ответных реакций схемы, выдавая все найденные расхождения. Для включения этого режима нужно активизировать режим «Check Outputs»  в диалоговом окне симулятора (рис 3.3.1).

Задание эталонных ответных реакций это самый надёжный способ быстро убедиться, что схема работает правильно (достаточно посмотреть, что нет расхождений в окне справки по результатам моделирования.)

 


3.4 Программатор ПЛИС.

Завершающим этапом проектирования ПЛИС является программирование и загрузка в процессе которой информация о карте памяти физически переписывается в ПЛИС или конфигурационное ПЗУ.

Для выполнения процедуры программирования необходимо в меню MAX+PLUSII  нажать кнопку «Programmer» или нажать на панели инструментов соответствующую кнопку (коробок с кабелем).

После этого открывается диалоговое окно программатора (рис. 3.4.1.) в котором можно выполнить следующие операции по программированию ПЛИС:

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

 Рис. 3.4.1. Диалоговое окно программатора.

 

Для записи информации в ПЛИС или конфигурационное ПЗУ необходимо устройство, например Byte Bluster(MV), который подключается к LPM порту компьютера и позволяет вести запись информации через стандартный JTAG интерфейс.


4. Проектирование ПЛИС в базисе примитивов.

4.1. Мультиплексор

Мультиплексор представляют собой логическую схему, имеющую n сигнальных входов, m входов адреса и один выход Q.

 D1

 D2

               . . .

 Dn

               Q

К1

К2

           . . .

Кm

Обычно выполняется соотношение

 n=2m

Алгоритм работы мультиплексора достаточно прост: На выход Q передается значение сигнала с входа, номер которого определяется адресом. Например, для восьмивходового мультиплексора если входной адрес равен пяти (К1=1, К2=0, К3=1) то Q=D5.

Наиболее просто мультиплексоры реализуются по пирамидальной схеме, при которой мультиплексоры большой размерности строятся из стандартного «кирпичика» - мультиплексора 21. Схема такого элементарного мультиплексора приведена на рисунке 4.1.1.

 Рис 4.1.1. Мультиплексор 21.

Используя модуль мультиплексора 21 можно набирать схемы большой размерности. Пример построения мультиплексора 81 приведен на рисунке 4.2


  Рис. 4.1.2. Схема мультиплексора 4
1.

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

Рис 4.1.3. Временная диаграмма работы мультиплексора.


4.2. Шифратор

Шифратор  представляют собой логическую схему, имеющую n входов и m выходов

 D1

 D2

          D3      Q1

      Q2

. . .       . . .

      Qm

 Dn

Обычно выполняется соотношение

 n=2m

Для простого шифратора предполагается, что только на один вход подана логическая единица, значения остальных входов равно нулю. Алгоритм работы шифратора достаточно прост: На выходах Q формируется номер шины, на которую подана единица.  Например, для восьмивходового шифратора, если D6=1, а значения остальных входов =0, выходной сигнал будет равен 6, т.е. Q1=0, Q2=1 и Q3=1.

Обычно шифраторы реализуются на элементах многовходовой логики «ИЛИ». Пример простого шифратора приведён на  рис. 4.2.1. Данная схема при отсутствии сигналов на входах формирует выходной код «000». При появлении единицы на одном из входов D1D4, значение выходной шины будет равно номеру входа, на который подана единица.

 Рис. 4.2.1. Схема простого шифратора.

Временная диаграмма работы шифратора приведена на рис 4.2.2.


 Рис 4.2.2. Временная диаграмма работы шифратора.


4.3. Демультиплексор

Демультиплексор представляют собой логическую схему, имеющую один информационный вход, m входов адреса и n выходов.

 

 D      Q1

A1      Q2

. . .      . . .

 Am      Qn

Обычно выполняется соотношение

 n=2m

Демультиплексор имеет следующий алгоритм работы. С входного вывода D информация передаётся на выход Qi, номер которого, определяется адресом. Например, для восьмивыходного демультиплексора если входной адрес равен пяти (A1=1, A2=0, A3=1) то Q5=D.

Обычно демультиплексоры реализуются на элементах многовходовой логики «И». Пример простого демультиплексора приведён на  рис. 4.3.1.

 Рис. 4.3.1. Схема демультиплексора.


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

Рис. 4.3.2. Временная диаграмма работы демультиплексора.


4.5. Сумматоры

Сумматоры являются очень широко распространёнными схемами, позволяющими реализовать операцию арифметического сложения чисел, представленных в двоичной системе. Очень часто многоразрядные сумматоры строятся из одноразрядных, работающих с двумя разрядами складываемых чисел. Одноразрядный сумматор имеет два входа текущих разрядов A и B, а также вход переноса из предыдущего разряда (PP).

                 PP                   S 

                 A

                 B                     P

Выходами  одноразрядного сумматора являются выход суммы текущего разряда (S) и выход переноса в следующий разряд (P).

 Таблица истинности схемы одноразрядного сумматора имеет следующий вид.

    A

    B

   PP

    S

    P

     0

     1

     0

     1

     0

     1

     0

     1

     0

     0

     1

     1

     0

     0

     1

     1

     0

     0

     0

     0

     1

     1

     1

     1

     0

     1

     1

     0

     1

     0

     0

     1

     0

     0

     0

     1

     0

     1

     1

     1

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

 Рис 4.5.1. Схема формирования переноса.

 Рис 4.5.2. Схема формирования суммы.

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

 Рис 4.5.3. Схема четырехразрядного сумматора.


На схеме, представленной на рисунке 4.5.3. схемы формирования суммы и переноса младшего разряда упрощены, так как для него отсутствует вход переноса.

Временная диаграмма работы такого сумматора представлена на рис 4.5.4.

Рис 4.5.4. Временная диаграмма работы четырехразрядного сумматора.


4.6. Вычитатели

Вычитатели являются очень широко распространёнными схемами, позволяющими реализовать операцию арифметического вычитания чисел, представленных в двоичной системе. В принципе, операцию вычитания можно реализовать через операцию сложения уменьшаемого с вычитаемым, если вычитаемое преобразовать в дополнительный код. Однако при этом получаются более громоздкие схемотехнические решения. Очень часто многоразрядные вычитатели  строятся из одноразрядных, работающих с двумя разрядами вычитаемых чисел. Одноразрядный вычитатель  имеет два входа текущих разрядов U и V, а также вход заёма  из предыдущего разряда (ZP).

                 PP                   S 

                 A

                 B                     P

Выходами  одноразрядного вычитателя  являются выход разности текущего разряда (R) и выход заёма в  старшем разряде (Z).

 Таблица истинности схемы одноразрядного вычитателя имеет следующий вид.

?

?

Существует множество схемотехнических реализаций одноразрядного вычитателя. Рассмотрим одну из них, состоящую из схемы формирования разности и схемы формирования заёма. Отметим, что таблица истинности для выхода R вычитателя и выхода S  сумматора полностью совпадают, поэтому для них можно использовать одну и ту же схему, представленную на рис 4.5.2. Для формирования сигнала заёма необходима новая схема. Возможный вариант такой схемы представлен на рис 4.6.1.


   Рис. 4.6.1. Схема формирования заёма.

Используя представленные блоки, можно легко строить многоразрядные  вычитатели требуемого размера. Пример построения схемы двухразрядного вычитателя  приведен на рис. 4.6.2, а временная диаграмма работы на рис 4.6.3.

  Рис 4.6.2. Схема двухразрядного вычитателя.

В примере, приведенном на рис 4.6.2. отсутствует сигнал заёма  в младшем разряде. По этой причине  выводы PI и Z1 элементов sum(11) и raz(1) соединены с шиной земли (логический 0)


Рис 4.6.3. Временная диаграмма работы двухразрядного вычитателя.


4.7. Асинхронные счетчики.

Асинхронные счетчики позволяю с минимальными затратами аппаратуры организовать подсчет тактовых импульсов. Строятся асинхронные счетчики на основе D триггеров, включенных в счетном режиме. Каждый каскад счетчика выполняет функцию деления входной частоты на два. Характеристики асинхронных счетчиков:

  •  наиболее простые;
  •  работают на максимально высоких частотах;
  •  наиболее трудно управляемые, имеются сложности с дребезгом переключения.

Пример схемы четырёхразрядного счетчика, считающего от 0 до F, приведен на рис 4.7.1.

 

Рис 4.7.1. Схема четырехразрядного счётчика.

Временная диаграмма работы счетчика приведена на рис 4.7.2.


Рис 4.7.2. Временная диаграмма работы четырехразрядного асинхронного счетчика.


4.8. Синхронные счетчики

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

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

Схема одного разряда счётчика приведена на рис 4.8.1.

 Рис 4.8.1. Схема одного разряда синхронного счетчика.

На представленной схеме  входы S и R являются входами установки и сброса. Вход В является входом переноса из младшего разряда а выход P –  выходом переноса в старший разряд. Вход К управляет направлением счета, при К=0 счёт ведётся по возрастанию, а при К=1 – по убыванию.

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

  Рис 4.8.2. Схема счётчика, считающая от 3 до С.

В схему представленного счётчика включен узел сброса-установки на базе элемента 3И-НЕ. Как только счетчик досчитывает до числа D, являющегося следующим после числа С, на выходе элемента 3И-НЕ сформируется сигнал «0», по которому спустя время, равное времени срабатывания нескольких элементов, на входах сброса-установки одиночных разрядов появится управляющий сигнал низкого уровня, который переключит триггер в состояние «3».

Временная диаграмма работы этого счетчика представлена на рис 4.8.3.


Рис 4.8.3. Временная диаграмма работы синхронного счетчика считающего от 3 до С.


4.9. Последовательные сумматоры и вычитатели.

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

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

 Рис   4.9.1. Схема последовательного сумматора.

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

  •  схема формирования переноса (per), представленная на рис 4.5.1;
  •  схема формирования суммы (sum), представленная на рис 4.5.2;
  •  триггер хранения значения переноса из младшего разряда DFF(2);
  •  сдвиговый регистр (триггеры DFF(3),DFF(4), DFF(5)).

Алгоритм работы схемы следующий. На каждом такте своей работы последовательный сумматор исходя из текущих значений разрядов слагаемых Ai и Bi а также значения переноса Pi-1, сформированного на предыдущем такте и хранящегося  в триггере DFF(2) формирует новое значение переноса Pi и значение суммы Si. При приходе активного фронта тактового сигнала Pi записывается в триггер DFF(2), а Si поступает на вход сдвигового регистра и затем, на последующих тактах сдвигается в сторону младших разрядов. Работа сумматора заканчивается, когда значение суммы младшего разряда попадает в младший разряд сдвигового регистра.

Отметим, что для построения схемы вычитателя в схеме, представленной на рис 4.9.1. достаточно заменить узел формирования переноса pr  на схему формирования заёма raz, представленную на рис  4.6.1.

Временная диаграмма работы сумматора представлена на рис 4.9.2.

 

Рис 4.9.2. Временная диаграмма работы последовательного сумматора.

На временной диаграмме, представленной на рис 4.9.2. показан пример сложения трехразрядных чисел 5 и 6. После прихода  фронта третьего тактового сигнала на выходе сумматора появляется число 11.


4.10. Дешифратор

Дешифратор  представляют собой логическую схему, имеющую n входов и m выходов

      Q1

 A1      Q2

 A2      . . .

. . .       Qn

 Am

Обычно выполняется соотношение

 n=2m

Дешифратор работает по следующему алгоритму. Из всех выходных шин Qi только одна, номер которой определяется кодом адреса А[m..1], имеет значение, равное 1. Все остальные имеют состояние, равное 0.

Обычно дешифраторы реализуются на элементах многовходовой логики «И». Пример простого дешифратора приведён на  рис. 4.10.1. Временная диаграмма работы дешифратора представлена на рис 4.10.2.

 

Рис 4.10.1. Схема 8-разрядного дешифратора.

Рис 4.10.2. Временная диаграмма работы восьми разрядного дешифратора.


5. Проектирование ПЛИС с использованием
LPM модулей

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

При работе в графическом редакторе ввод LPM модуля производится при помощи двойного щелчка мышью в том месте, куда его необходимо вставить. Далее возможны два варианта. Нужно либо ввести название мегафункции в поле «Symbol Name» диалога «Enter Symbol», либо выбрать библиотеку мегафункций mega_lpm в списке «Symbol Libraries» и соответствующую мегафункцию в списке «Symbol Files», а затем нажать кнопку ОК.

На рисунке 5.1. приведен пример вставленной в файл графического редактора мегафункции счетчика (ее название – lpm_counter). В этом случае сразу после закрытия диалога «Enter Symbol» появится диалог «Edit Ports/Parameters» (см. рис. 5.2.). В этом диалоге можно настроить входые/выходные выводы элемента а также задать параметры мегафункции. Настройка выводов производится при помощи списка «Name» группы «Ports» (выбор порта) и флагов группы «Port Status» (используется/не используется – Used/Unused).

Параметры мегафункции устанавливаются в группе «Parameters». В группе «Parameter Name» находится имя изменяемого параметра (необходимый параметр автоматически появляется в этой группе после выбора его в списке «Name»). Далее в поле «Parameter Value» устанавливается значение параметра Например, параметр LPM_WIDTH отвечает за разрядность счетчика, LPM_MODULUS за модуль счета и т.д. При необходимости можно получить справку, нажав кнопку «Help on LPM_COUNTER».

Рисунок 5.1. Стандартная мегафункция счетчика

Рисунок 5.2. Диалог редактирования параметров мегафункции счетчика

Для ввода в проект нового варианта существующих LPM модулей можно использовать менеджер мастеров MegaWisard Plug-In Manager, доступный при нажатии соответствующей кнопки из диалога «Enter Symbol». В этом случае элемент будет выглядеть так, как показано на рисунке 5.3 На первом шаге будет предложено два варианта: создать новый вариант мегафункции (create a new custom megafunction variation) или редактировать существующий (Edit an existing custom megafunction variation). Следует выбрать первый вариант и нажать кнопку «Next». На следующем шаге необходимо выбрать модифицируемую мегафункцию из группы арифметических (arithmetic – LPM_ABS (абсолютное значение), LPM_ADD_SUB (сложение/вычитание), LPM_COMPARE (компаратор), LPM_COUNTER(счетчик), LMP_DIVIDE (деление), LPM_MULT (умножение)), вентильных (gates, например LMP_CONSTANT (константное значение), LMP_DECODE (дешифратор), LPM_MUX(мультиплексор)) и элементов хранение информации (storage, например LMP_SHIFTREG (сдвиговый регистр). Кроме того, необходимо ввести в поле «What name do you want for the output file?» уникальное имя вновь создаваемого примитива. Далее после нажатия кнопки «Next» происходит настройка выбранного элемента. Например, для счетчика настраиваются разрядность, направление счета, модуль счета (если нужен), выводы Clock Enable, Count Enable и другие параметры. Перенастроить уже созданный мастером элемент можно с помощью двойного щелчка мыши над этим элементом. В этом случае для того, чтобы обновить элемент в графическом редакторе, необходимо выполнить команду меню Symbol|Update Symbol

Рисунок 5.3 Счетчик, созданный при помощи MegaWisard Plug-In Manager

На рисунке 5.4 показана последовательность действий, которая привела к созданию счетчика, показанного на рисунке 5.3.

Рисунок 5.4. Создание счетчика с помощью MegaWisard Plug-In Manager – Шаг 1

Рисунок 5.5. Создание счетчика – шаг 2

Рис. 5.6. Создание счетчика – шаги 3-6

5.1  LPM модуль счетчика

LPM модуль счетчика имеет возможность изменять параметры и использовать различные комбинации выводов ввода-вывода. В этом модуле возможны следующие выводы:

  •  data[]- входная шина, используемая в качестве данных для инициализации счетчика во время сигналов сброса или установки, разрядность определяется параметром LPM_WIDTH;
  •  clock – входной сигнал синхронизации, срабатывающий по положительному фронту;
  •  clk_en – входной сигнал, разрешающий работу синхронных узлов;
  •  cnt_en – сигнал разрешения счета, отключает счет при cnt_en = “0”;
  •  updown - вход управляющий направления счета, при updown =1 счет выполняется по возрастанию,  при updown =0 счет выполняется по убыванию;
  •  cin - вход переноса из младшего бита;
  •  aset - вход асинхронной установки счетчика;
  •  aclr - вход асинхронного сброса, если активны оба сигнала aset и aclr то сигнал aclr доминирует;
  •  aload – вход, асинхронной загрузки счетчика значением с входа data;
  •  sclr – вход синхронного сброса счетчика;
  •  sset – вход синхронной установки счетчика, если активны оба сигнала sclr и sset, то sclr преобладает;
  •  sload – вход синхронной загрузки счетчика значением входа data.
  •  q[] – выходные сигналы  счетчика, разрядность определяется параметром LPM_WIDTH;
  •  eq[15..0] – выходные сигналы встроенного дешифратора, дешифратор имеет 16 выходных шин и может работать только с четырьмя младшими разрядами счетчика;
  •  cout – выход переноса в старший разряд.

На рисунке 5.1.1 показана схема LPM модуля счетчика, реализованная в среде MAXPLUSII., а на рисунке 5.1.2. его временная диаграмма работы.

Рисунок 5.1.1.

Рисунок 5.1.2.


5.2 LPM модуль сдвигового регистра.

LPM модуль сдвигового регистра позволяет формировать сдвиговые регистры различного типа. В модуле можно использовать следующие  входные и выходных выводы:

  •  data[]  - вход, который используется в качестве данных для инициализации регистра во время сигналов сброса или установки, разрядность определяется параметром LPM_WIDTH;
  •  clock – сигнал синхронизации, срабатывающий положительным фронтом;
  •  enable – вход разрешения сдвига , отключает сдвиг при enable = 0;
  •  aset - вход асинхронной установки сдвигового регистра;
  •  acl - вход асинхронного сброса, если активны оба сигнала aset и aclr то сигнал aclr доминирует.
  •  sclr – вход синхронного сброса сдвигового регистра;
  •  sset – вход синхронной установки сдвигового регистра, если активны оба сигнала sclr и sset, то sclr преобладает;
  •  load – сигнал выбора операций загрузки и сдвига, при load=1 осуществляется а при load=0 – сдвиг.
  •  shiftin – информационный вход.

На рисунке 5.2.1. показана схема LPM модуля сдвигового регистра, реализованная в среде MAX+PLUSII, а на рисунке 5.2.2. его  временная диаграмма работы.

Рисунок 5.2.1.

Рисунок 5.2.2.


5.3  
LPM модуль ПЗУ.

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

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

address[] – вход адреса информации, записанной в  ПЗУ, разрядность определяется параметром LPM_WIDTHAD;

inclock – вход синхронизации адреса, если этот вывод задействован, входной адрес синхронизируется, иначе вход  является асинхронными;

outclock - вход синхронизации выхода, если этот вывод задействован, выходные данные  синхронизируется, иначе выход является асинхронными;

 memenab- вход разрешения выдачи данных, при memenab=1 выходная информация появляется на выходе q[],  при memenab=0 выход находится в третьем состоянии;

q[] – выход данных ПЗУ, разрядность определяется параметром LPM_WIDTH.

На рисунке показана 5.3.1. показана схема LPM модуля ПЗУ, реализованная в среде MAX+PLUSII, а на рисунке 5.3.2. его  временная диаграмма работы.

Рисунок 5.3.1

Рисунок 5.3.2


Информация, записываемая в ПЗУ, хранится в специальном файле, имеющем расширение
.mif. Ниже приведено содержимое  файла, для примера, рассмотренного выше. В примере присутствуют комментарии, наглядно показывающие как сформировать  этот файл для различной конфигурации ПЗУ.

DEPTH = 32; % Memory depth and width are required %

WIDTH = 8; % Enter a decimal number %

ADDRESS_RADIX = DEC; % Address and value radixes are optional %

DATA_RADIX = BIN; % Enter BIN, DEC, HEX, or OCT; unless %

CONTENT

BEGIN

0:00001111;

1:00110011;

2:01010101;

3:00000000;

4:10000000;

5:01000000;

6:00100000;

7:00010000;

8:00001000;

9:00000100;

10:00000010;

11:00000001;

12:11000000;

13:01100000;

14:00110000;

15:00011000;

16:00001100;

17:00000110;

18:00000011;

19:11100000;

20:01110000;

21:00111000;

22:00011100;

23:00001110;

24:00000111;

25:11110000;

26:01111000;

27:00111100;

28:00011110;

29:00001111;

30:11111000;

31:01111100;

END;


6. Описание работы схем на поведенческом языке
AHDL.

       6.1. Введение в язык AHDL 

Язык AHDL (Altera high Level Languish), позволяет описывать работу схем, проектируемых на базе ПЛИС на поведенческом уровне. Используя язык AHDL, пользователь описывает не структуру схемы, а её поведение. Стандартное расширение файлов, содержащих поведенческое описание схем - .tdf.

AHDL является высокоуровневым, модульным языком, полностью интегрированным в систему MAX+PLUS II. Он хорошо подходит для проектирования сложной комбинационной логики, шин, конечных автоматов, таблиц истинности арифметических схем и параметрической логики. В качестве текстового редактора можно использовать текстовой редактор системы MAX+PLUS II или любой другой для создания текстовых файлов проектов (AHDL Text Design Files (.tdf)). Затем можно откомпилировать TDF файлы для получения выходных файлов, пригодных для последующего моделирования, временного анализа и программирования устройства. Кроме того, компилятор системы MAX+PLUS II может создавать текстовые файлы экспортирования (AHDL Text Design Export Files (.tdx)) и текстовые выходные файлы (Text Design Output Files (.tdo)), которые можно сохранить как TDF файлы и повторно использовать в качестве файлов проекта.

Язык AHDL является удобным инструментом для  представления проекта на высоком уровне. Подходит для описания очень сложных проектов, позволяет сэкономить много времени. Основные характеристики

  •  компактность представления;
  •  невысокая наглядность, трудность с разбором полетов;
  •  идеальное средство для миграции проекта (перенесения в другой базис).

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

Ключевые слова языка

    U

    V

   ZP

    R

    Z

     0

     1

     0

     1

     0

     1

     0

     1

     0

     0

     1

     1

     0

     0

     1

     1

     0

     0

     0

     0

     1

     1

     1

     1

     0

     1

     1

     0

     1

     0

     0

     1

     0

     0

     1

     0

     1

     0

     1

     1?

AND

ASSERT

BEGIN

BIDIR

BITS

BURIED

CASE

CLIQUE

CONNECTED_PINS

CONSTANT

DEFAULTS

DEFINE

DESIGN

DEVICE

DIV

ELSE

ELSIF

END

FOR

FUNCTION

GENERATE

GND

HELP_ID

IF

INCLUDE

INPUT

IS

LOG2

MACHINE

MOD

NAND

NODE

NOR

NOT

OF

OPTIONS

OR

OTHER

OUTPUT

PARAMETERS

REPORT

RETURNS

SEGMENTS

SEVERITY

STATES

SUBDESIGN

TABLE

THEN

TITL

TO

TRI_STATE_NODE

VARIABLE

VCC

WHEN

WITH

XNOR

XOR

Стандартные, зарезервированные идентификаторы.

CARRY

CASCADE

CEIL

DFFE

DFF

EXP

FLOOR

GLOBAL

JKFF

JKFFE

LATCH

LCELL

MCELL

MEMORY

OPENDRN

SOFT

SRFFE

SRFF

TFFE

TFF

TRI

USED

WIRE

X

 Имена в AHDL

Имена в AHDL могут иметь длину до 32 символов. С помощью символических имён можно определять:

  •  символические имена;
  •  имена модулей;
  •  имена выводов.

Символические имена, используются для задания

  •  переменных;
  •  констант;
  •  состояний и разделов конечных автоматов;
  •  параметров;
  •  обозначений арифметических выражений;
  •  именованных операторов.

Группы в AHDL

В языке AHDL допускается задание групп – наборов однотипных переменных или выводов. Группы бывают одномерные и двумерные. Например:

A[5..0] – одномерная группа,

  B[8..0][9..1] – двумерная группа.

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

(A, B[2], C, d[1]) – временная группа.

В языке AHDL допускается числа следующих типов.

            123  - десятичные;

    B011010 – двоичные;

      O2357  - восьмеричные;

      H09AF  - шестнадцатеричные;


Выражения

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

          A+B

          A[23]+LOG*3

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

+,-,!,^,MOD,DIV,*,LOG2,==,!=,>,>=,<,<=,

Логические выражения – используются для логических уравнений (Boolean Equation), в операторах CASE, IF THEN. При написании логических выражений используются следующие Логические операции

! NOT, & AND, !& NAND, # OR, !# NOR, $ XOR, !$ XNOR

При написании  логических выражений допускается векторная запись. Например:

 R[4..1]=(A,B,C,D)#OP[3..0]

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

 Примитивы.

В отличие от других языков поведенческого описания работы БИС, язык позволяет напрямую ссылаться на внутренние объекты ПЛИС (буфера, триггеры, логические элементы). В частности, допускаются ссылки на следующие типы буферов MAX+PLUSII.

  •  CARRY      – буфер цепочки переноса
  •  CASCADE – буфер каскадного наращивания логической
  •  функции
  •  EXP           – буфер логического расширителя,
  •  GLOBAL  – буфер глобального сигнала,
  •  CLOCK, SET, CLR, ENA
  •  LCELL      – не удаляемый буфер размещения макроячейки,
  •  OPNDRN  –  буфер выхода с открытым коллектором,
  •  SOFT         – удаляемый буфер размещения макроячейки,
  •  TRI             - буфер выхода с Z состоянием.


Кроме примитивов буферов в MAX+PLUSII часто используют следующие примитивы триггеров:

 DFF     –  фронтовой D триггер;

 DFFE    -  фронтовой D триггер с разрешением работы;

 JKFF     -  фронтовой JK триггер;

 JKFFE   - фронтовой JK триггер с разрешением работы;

LATCH –  триггер типа «защелка»;

SRFF      - стробируемый RS триггер;

SRFFE    - стробируемый RS триггер с разрешением работы;

TFF         - счетный триггер;

TFFE       - счетный триггер с разрешением работы;


6.2. Структура текстового описания БИС на языке AHDL

В общем случае описание проекта на языке AHDL включает в свой состав следующие разделы:

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

   Пример:                 TITLE ”Binary counter”;

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

  По умолчанию тип файла   .inc

  Пример: INCLUDE  ”constant.tex

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

Пример:  CONSTANT NUMBER=5;

CONSTANT NUMBER1=NUMBER+1;

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

  Пример:  DEFINE  SUM(a,b) = a+2*b+1;

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

 Пример: PARAMETERS

     (WIDTH, SIZE,

      FILE=”Myfile.dat”, LONG);

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

  Пример: FUNCTION compare(a[3..0],b[3..0])

                   RETURN (less, equal, grate);

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

Определяет в группе элемент с наименьшим индексом.

(LSB,MSB,ANY)

Пример:  OPTIONS  BITO = MSB;

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

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

Пример:

ASSERT (WIDTH>0)

REPORT ”Width (%) must be a positive integer” WIDTH

SEVERITY ERROR;

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

Определяет имя модуля и его выводы. Имя модуля должно совпадать с именем файла, в котором хранится его описание. Имя модуля верхнего уровня является именем проекта.

 Пример: SUBDESIGN F_prog

  (  A,B[4..0]    : INPUT = VCC;

         D             :INPUT = GND;

     C[7..1]         :OUTPUT;

     E[3..2]         :BIDIR;)

Описание модуля хранится в файле «F_prog»

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

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

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

 Пример:

INCLUDE “halfadd.inc”

VARIABLE

             a, b, c : NODE;

              add : halfadd;

          tsnode : TRI_STATE_NODE;

        fff[3..0] : DFF;

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

В этом разделе описывается алгоритм работы проектируемого модуля.

Начало -BEGIN, конец - END;

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

  •  Defaults Statement
  •  Assert Statement
  •  Boolean Equations
  •  Boolean Control Equations
  •  Case Statement
  •  For Generate Statement
  •  If Then Statement
  •  If Generate Statement
  •  In Line Logic Function Reference
  •  Truth Table Statement


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

6.3.1 Булевы уравнения, группы.

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

Файл template1.tdf,  приведенный ниже, демонстрирует два простых булевых выражения, представляющие два логических вентиля.

SUBDESIGN template1

(

  in0, in21, in3  : INPUT;

  out1, out2 : OUTPUT;

)

BEGIN

  out1 = in0 OR in1;

  out2 = out1 & !in3;

END;

В этом файле выход out1 является логическим ИЛИ входов in0 и in1, а выход out2 логическим И out1 и НЕ in3. Следует заметить, что порядок следования их в файле не важен.

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

В булевых уравнениях группа может приравниваться булеву выражению, другой группе, единственному узлу, VCC, GND, 1 или 0. В каждом из этих случаев  значение группы различно. Оператор Options можно использовать для определения того, каким будет самый младший бит: наиболее значимым битом (MSB) или наименее значимым битом(LSB) или каким-либо другим.

Как только группа определена, скобки [ ] являются коротким способом определения всего диапазона. Например, in0[4..1] можно также указать как in0[]; out0[5..4][3..2] можно представить  как out0[][].

Следует заметить, что :

1) Если группа приравнивается к VCC или GND, все биты шины соединяются с этим значением.

2) Если группа приравнивается к 1, только наименее значимый бит шины соединяется со значением VCC. Остальные биты шины соединяются с GND.

3) Если группа приравнивается к другой группе того же самого размера, то каждый член справа приравнивается каждому члену слева в соответствующей позиции.

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

Пример : out[6..3] = in[2..1]. В этом уравнении биты отображаются следующим образом: out6 = in2, out5 = in1, out4 = in2, out3 = in1.

6.3.2 Операторы IF THEN, CASE.

 

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

Следует помнить, что условную логику, реализуемую с помощью операторов If Then и Case, не следует путать с логикой, создаваемой условно оператором If Generate, так как  эта логика не обязательно является условной.

 Файл if_then.tdf, демонстрирует приоритетный шифратор, который преобразует уровень активного входа с наивысшим приоритетом в значение с использованием оператора If Then.

SUBDESIGN if_then

(

  in_f, in_s, in_t   : INPUT;

  out[1..0] : OUTPUT;

)

BEGIN

  IF in_f THEN

     out[] = 3;

  ELSIF in_s THEN

     out[] = 2;

  ELSIF in_t THEN

     out[] = 1;

  ELSE

     out[] = 0;

  END IF;

END;


Файл case.tdf, описывает дешифратор из 3 в 8 бит с использованием оператора CASE.

SUBDESIGN case

(

in[2..0] : INPUT;

out[7..0] : OUTPUT;

)

BEGIN

CASE in[] IS

 WHEN 0 => out[] = B"00000001";

 WHEN 1 => out[] = B"00000010";

 WHEN 2 => out[] = B"00000100";

 WHEN 3 => out[] = B"00001000";

WHEN 4 => out[] = B"000100000";

WHEN 5 => out[] = B"001000000";

WHEN 6 => out[] = B"010000000";

WHEN 7 => out[] = B"100000000";

END CASE;

END;

В этом примере входной код шины имеет значения от 0 до 8. В операторе Case за символом => следует активизируемое уравнение. Например, если in[] равен 1, то выход out1 устанавливается в B"00000010".

 


6.3.3 Проектирование на языке AHDL с помощью таблиц истинности.

Язык AHDL позволяет описывать комбинационные схемы при помощи таблиц истинности.

Файл truth_table.tdf, является дешифратором описанным при помощи таблицы истинности.

SUBDESIGN truth_table

(

in[2..0]  : INPUT;

out0, out1, out2, out3, out4, out5, out6 : OUTPUT;

)

BEGIN

  TABLE

     i[3..0]  => out0, out1, out2, out3, out4;

     H"0"    => 1, 1, 1, 1, 0;

     H"1"    => 1, 0, 0, 0, 0;

     H"2"    => 0, 1, 1, 0, 1;

     H"3"    => 1, 1, 0, 0, 1;

     H"4"    => 1, 0, 0, 1, 1;

     H"5"    => 1, 1, 0, 1, 1;

     H"6"    => 1, 1, 1, 1, 1;

     H"7"    => 1, 1, 0, 1, 0;

  END TABLE;

END;

В приведенном примере описан выходной набор для всех 8 возможных комбинаций входных воздействий.

Файл truth_table_with_x.tdf, является примером когда при помощи таблицы истинности описывается не весь набор входных воздействий, а лишь те, которые влияют на состояние выходных сигналов.

SUBDESIGN truth_table_with_x

( in[10..0], en         : INPUT;

out0, out1, bus[2..0] : OUTPUT; )

BEGIN

  TABLE

     en, in[10..0]                  => out0, out1, bus[];

     1,    B"00XX1XXX0XX"    => 1, 0, B"000";

     1,    B"100XXX1XXX0"    => 0,  1, B"001";

     0,    B"00000010101"        => 0,  0, B"010";

     1,    B"00000010110"       => 0,  0, B"011";

     0,    B"00010011011"        => 0,  0, B"100";

  END TABLE;

END;

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

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

При помощи оператора DEFAULT можно присваивать значения по умолчанию для операторов IF THEN, CASE и таблиц истинности.


6.3.4 Операторы If Generate, For Generate

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

Следующий пример демонстрирует использование оператора If Generate:

IF DEVICE_FAMILY == "FLEX8K" GENERATE

c[] = adder16a(a[], b[], cin);

ELSE GENERATE

c[] = adder_def(a[], b[], cin);

END GENERATE;

Оператор If Generate имеет следующие характеристики:

Между ключевыми словами If  Generate заключается арифметическое выражение, значение которого подвергается оценке. За ключевым словом GENERATE следует список операторов, каждый из которых заканчивается символом «;». Операторы активизируются в том случае, если арифметическое выражение принимает истинное значение.

За ключевыми словами ELSE GENERATE следует один или более операторов, которые активизируются в случае, если арифметическое выражение принимает ложное значение.

Оператор If Generate заканчивается ключевыми словами END GENERATE, за которыми следует символ «;».

Оператор If Generate может использоваться в разделе Logic и в разделе Variable.

В отличие от операторов If Then, которые могут оценивать лишь значения булевских выражений, операторы If Generate могут оценивать значения наборов арифметических выражений. Основное различие между операторами If Then и If Generate состоит в том, что в первом случае значение булевского выражения оценивается аппаратным способом (в кремнии), а во втором случае значение набора арифметических выражений оценивается на этапе компиляции.


Оператор For Generate. Следующий пример показывает использование итерационного оператора For Generate:

CONSTANT WIDTH  = 6;

SUBDESIGN adder

(

suma[WIDTH ..1], sumb[WIDTH..1],

carry_in : INPUT;

out[WIDTH..1], carry_out: OUTPUT;

)

VARIABLE

cout[(WIDTH +1)..1] : NODE;

BEGIN

cout[1] = carry_in;

  FOR i IN 1 TO WIDTH GENERATE

   out[i]=suma[i]$sumb[i]$cout[i];% Полный сумматор %

   cout[i+1]=suma[i]&sumb[i]#cout[i]&(suma[i]$sumb[i]);

  END GENERATE;

  carry_out=cout[WIDTH +1];

END;

Оператор For Generate имеет следующие характеристики:

Между ключевыми словами FOR и GENERATE  заключаются следующие параметры:

1. Временная переменная, представляющая собой символическое имя. Эта переменная используется лишь в пределах оператора For Generate и заканчивает свое существование после того, как компилятор обработает этот оператор. В примере, показанном выше, такой переменной является переменная i. Это имя не может использоваться в качестве имени константы, параметра или узла в пределах данного проекта.

2.  За ключевым словом IN следует диапазон, ограниченный двумя арифметическими выражениями. Арифметические выражения разделяются между собой ключевым словом TO. В примере, показанном выше, арифметическими выражениями являются 1 и WIDTH. Границы диапазона могут  содержать выражения, состоящие только из констант и параметров; использование переменных при этом недопустимо.

За ключевым словом GENERATE следует один или более логических операторов, каждый из которых заканчивается символом (;).

Оператор If Generate заканчивается ключевыми словами END GENERATE, за которыми следует символ (;).  


6.3.5. Проектирование на языке AHDL с использованием примитивов.

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

В AHDL определены два способа обращения к примитиву:

  •  непосредственное обращение (In_line Reference);
  •  присвоение примитиву символического имени, т.е. объявление его переменной, и обращение к нему как к переменной.

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

<имя вывода>=<имя примитива>(список выводов);

Список выводов может быть организован либо по именам, либо позиционно.

Ниже приведен пример позиционного обращения к примитиву:

SUBDESIGN Prim1

 ( D_in, Ena  : INPUT;

   D_tri          : OUTPUT;

 )

BEGIN

  D_tri=TRI(D_in,Ena);

END;

Неиспользуемые выводы примитивов получают значения определенные по умолчанию.

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

SUBDESIGN Prim2

 ( D_in, Ena, CLK  : INPUT;

                 D_out     : OUTPUT;

 )

BEGIN

  D_tri=DFFE(.CLK=CLK, .D=D_in,  .ENA=Ena);

END;


Обращение к примитиву как к переменной
.

В этом случае необходимо в разделе переменных (Variable) символическому имени или группе символических имён сопоставить примитив. Объявленная таким образом переменная, а также каждая переменная из объявленной группы переменных будет иметь тот же набор выводов, что и примитив.

Ниже приведен пример обращения к примитиву, как к переменной.

SUBDESIGN Prim3

 ( En_BUSA, En_BUSB,  LoadA, LoadB, CLK : INPUT;

   BUS_A, BUS_B : OUTPUT;

 )

VARIABLE

 RG_BUSA, RG_BUSB : DFFE;

 BUF_A, BUF_B: Tri;

BEGIN

 (RG_BUSA, RG_BUSB).CLK = CLK;

 RG_BUSA.(D,ENA)=(BUS_A, LoadB);

 RG_BUSB.(D,ENA)=(BUS_B, LoadA);

 BUF_A.(IN.OE)       =(RG_BUSA,0,En_BUSA);

 BUF_B.(IN.OE)       =(RG_BUSB,0,En_BUSB);

 BUS_A=BUF_A.OUT;

 BUS_B=BUF_B.OUT;

END;


7. Проектирование типовых схем на языке
AHDL

7.1. Простые комбинационные схемы

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

 Рис. 7.1.1. Простая комбинационная схема.

Эквивалентное описание этой схемы на языке AHDL выглядит следующим образом.

SUBDESIGN BOOL

(

  A0,A1,B   : INPUT;

  OUT2 : OUTPUT; )

VARIABLE

  T1:NODE;

BEGIN

   T1=A1 & !A0;

   OUT2=T1 # B;

END;

Для упрощения записи логических выражений в схему введена внутренняя переменная T1.

Временная диаграмма работы схемы представлена на рис. 7.1.2.

 

Рис. 7.1.2. Временная диаграмма работы комбинационной  схемы.

7.2. Мультиплексоры

Рассмотрим схему мультиплексора 41, описанную на языке AHDL.  Мультиплексор имеет четыре информационных входа In[4..1], два входа адреса Adr[2..1], вход разрешения работы ENA и один выход OUT. Мультиплексор реализован на базе оператора CASE. Описание мультиплексора имеет следующий вид.

SUBDESIGN MUX

( In[4..1], Adr[2..1] :INPUT;

                 ENA :INPUT;

                 OUT :OUTPUT; )

BEGIN

IF ENA THEN

   CASE ADR[]  IS

     WHEN 0 => OUT = In[1];

     WHEN 1 => OUT = In[2];

     WHEN 2 => OUT = In[3];

     WHEN 3 => OUT = In[4];

   END CASE;

 END IF;

END;

Временная диаграмма мультиплексора представлена на рис. 7.2.1

Рис 7.2.1. Временная диаграмма работы мультиплексора.


    7.3. Шифраторы

Рассмотрим схему шифратора  84, описанную на языке AHDL.  Шифратор имеет восемь  информационных входов D[7..0] и четыре выхода Q[3..0]. Шифратор реализован на  базе оператора TABLE. Описание шифратора  имеет следующий вид.

SUBDESIGN SHIFRAT

( D[7..0] : INPUT;

 Q[3..0]: OUTPUT;)

BEGIN

 TABLE

                D[]=>Q[];

      B"00000000" => B"0000";

      B"00000001" => B"0001";

      B"00000010" => B"0010";

      B"00000100" => B"0011";

      B"00001000" => B"0100";

      B"00010000" => B"0101";

      B"00100000" => B"0110";

      B"01000000" => B"0111";

      B"10000000" => B"1000";

  END TABLE;

END;

Ниже, на рис 7.3 приведена временная диаграмма работы шифратора.

Рис. 7.3. Временная диаграмма работы шифратора.


    7.4. Демультиплексоры

Рассмотрим схему демультиплексора  18, описанную на языке AHDL.  Демультиплексор имеет один информационных вход данных D, три входа, задающие адрес ADR[3..1] и восемь  выходов OUT[7..0]. Демультиплексор  реализован на  базе оператора CASE. Описание шифратора  имеет следующий вид.

SUBDESIGN DMUX

( IN, ADR[3..1] :INPUT;

 OUT[7..0]     :OUTPUT; )

BEGIN

 CASE ADR[] IS

  WHEN 0 => OUT[0]=IN;

  WHEN 1 => OUT[1]=IN;

  WHEN 2 => OUT[2]=IN;

  WHEN 3 => OUT[3]=IN;

  WHEN 4 => OUT[4]=IN;

  WHEN 5 => OUT[5]=IN;

  WHEN 6 => OUT[6]=IN;

  WHEN 7 => OUT[7]=IN;

 END CASE;

END;

Ниже, на рис 7.4 приведена временная диаграмма работы демультиплексора.

Рис. 7.4. Временная диаграмма работы демультиплексора.

    7.5. Сумматоры

Рассмотрим схему четырехразрядного сумматора, описанную на языке AHDL. Разрядность сумматора задаётся параметром NB. Сумматор имеет входные группа сигналов шины A[NB..1] и B[NB..1], выходную группу сигнала суммы S[NB..1] и сигнал выхода переноса cout из старшего разряда. Представленный сумматор реализован по стандартной схеме на базе одноразрядных сумматоров. Булевы уравнения, заданные в векторном виде, имеют стандартный вид и выглядят следующим:

 Si= AiBiPi-1

 Pi+1=AiBi+ AiPi-1+BiPi-1

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

CONSTANT NB=4;

SUBDESIGN SUMA

(  A[NB..1]:INPUT;

  B[NB..1]:INPUT;

  S[NB..1],cout:OUTPUT;

)

VARIABLE

  Per[NB..1] :NODE;

BEGIN

   S1=A1$B1;

   Per1=A1&B1;

   S[NB..2]=A[NB..2]$B[NB..2]$Per[(NB-1)..1];

   Per[NB..2]=A[NB..2]&B[NB..2] # Per[(NB-1)..1]&(A[NB..2]#B[NB..2]);

 cout = Per[NB];

END;  

Ниже, на рис 7.5 приведена временная диаграмма работы сумматора.

Рис. 7.5. Временная диаграмма работы сумматора.


    7.6. Вычитатели

Рассмотрим схему четырехразрядного вычитателя, описанную на языке AHDL. Разрядность вычитателя задаётся параметром NB. Сумматор имеет входные группа сигналов шины A[NB..1] - (уменьшаемое) и B[NB..1] - (вычитаемое), выходную группу сигнала разности S[NB..1] и сигнал выхода заёма cout из старшего разряда. Представленный вычитатель реализован по стандартной схеме на базе одноразрядных вычитателей. Булевы уравнения, заданные в векторном виде, имеют стандартный вид и выглядят следующим:

  Si= AiBiPi-1

___                        _            _               _______

 Pi+1=AiBi+ AiPi-1+BiPi-1

Описание вычитателя   имеет следующий вид.

CONSTANT NB=4;

SUBDESIGN RAZ

(  A[NB..1]:INPUT;

  B[NB..1]:INPUT;

  S[NB..1],cout:OUTPUT;)

VARIABLE

  Per[NB..1] :NODE;

BEGIN

   S1=A1$B1;

   Per1=!A1&B1;

   S[NB..2]=A[NB..2]$B[NB..2]$Per[(NB-1)..1];

   Per[NB..2]=!A[NB..2]&B[NB..2] # Per[(NB-1)..1]&(!A[NB..2]#B[NB..2]);

 cout = Per[NB];

END;  

Ниже, на рис 7.6 приведена временная диаграмма работы вычитателя.

Рис. 7.6. Временная диаграмма работы вычитателя.
    7.7. Шинные формирователи

 Шинные приёмо-передатчики позволяют организовать передачу и приём информации между несколькими источниками и приёмниками по общей шине данных. В каждый момент времени на общей шине данных может быть активен только один источник сигнала. Управлением работой шинных формирователей осуществляет специальное логическое устройство, называемое арбитром.

Рассмотрим схему типичного шинного приёмо-передатчика, представленную на рис 7.7.1.

Рис 7.7.1. Схема типичного шинного приёмо-передатчика.

Представленная схема шинного приёмо-передатчика имеет двунаправленную шину данных DB1, DB2. При различных комбинациях сигналов управления CS и ADR возможны следующие режимы передачи данных:

  •  сигнал IN передается на шину DB  и на шину OUT;
  •  сигнал IN передается на шину DB,  шина OUT отключена;
  •  сигнал  DB  и на шину OUT;
  •  шина OUT отключена.

Ниже приведен текст описания работы шинного приёмо-передатчика нa языке AHDL.

SUBDESIGN SHINA

 ( IN1,IN2,CS,ADR: INPUT;

   DB1,DB2:BIDIR;

   OUT1,OUT2: OUTPUT;)

 VARIABLE

   TRI_A[1..0]:TRI;

   TRI_B[1..0]:TRI;

 BEGIN

   CASE (CS,ADR) IS

     WHEN B"11" =>TRI_A[].OE=VCC;

     WHEN B"10" =>TRI_B[].OE=VCC;

   END CASE;

   TRI_A[].IN= (IN2,IN1);

   TRI_B[].IN= (DB2,DB1);

 (DB2,DB1)= TRI_A[].OUT;

(OUT2,OUT1)= TRI_B[].OUT;

 END;

Временная диаграмма работы шинного типичного приёмо-передатчика, представлена на рис 7.7.2.

Рис 7.7.2. Временная диаграмма работы шинного приёмо-передатчика,


    7.8. Счетчики

Счетчики являются широко распространёнными электронными узлами, позволяющими организовать подсчёт импульсов. На языке AHDL счетчики наиболее просто построить, используя обращения к примитивам триггеров. Чаше всего используют триггеры типа DFF или DFFE .

Для организации счёта по различным модулям и с различными условиями сброса-установки можно использовать операторы CASE или IF THEN.

Ниже приведен пример счетчика, считающего импульсы от 3 до 12. Переход при счёте от значения 12 до значения 3 организован с помощью оператора CASE.

SUBDESIGN CNT3_15

( CLK :INPUT;

   R  :INPUT=GND;

   Q[4..0]:OUTPUT;

)

 Variable

  RG[4..0]: DFF;

  BEGIN

  RG[].CLRN=!R;

  RG[].CLK=CLK;

     case Q[] IS

      WHEN B"01111"=>  RG[].D=B"00011";

      WHEN OTHERS  =>  RG[].D  =RG[].Q+1;

    END CASE;

    Q[] = RG[].Q;

  END;

Временная диаграмма работы счетчика приведена на рис 7.8.

Рис 7.8. Временная диаграмма работы счетчика.

    7.9. Дешифраторы

Дешифраторы принадлежат к одним из наиболее распространённых типов узлов цифровой аппаратуры. Дешифратор работает по следующему алгоритму. Из всех выходных шин Qi только одна, номер которой определяется кодом адреса А[m..1], имеет значение, равное 1. Все остальные имеют состояние, равное 0.

На языке дешифраторы удобно реализовывать с помощью оператора CASE, либо с помощью таблицы истинности.

Ниже приведен пример восьмиразрядного дешифратора, реализованного с помощью таблицы истинности:

SUBDESIGN Desh8

( A[2..0] : INPUT;

 Dec[7..0] :OUTPUT; )

BEGIN

 TABLE

    A[]    =>   Dec[];

  B"000" => B"00000001";

  B"001" => B"00000010";

  B"010" => B"00000100";

  B"011" => B"00001000";

  B"100" => B"00010000";

  B"101" => B"00100000";

  B"110" => B"01000000";

  B"111" => B"10000000";

   END TABLE;

END;

Временная диаграмма работы дешифратора приведена на рис 7.9.

Рис 7.9. Временная диаграмма работы дешифратора.


    7.10. Компараторы

Компараторы позволяют решать задачу определения отношения между двумя двоичными числами. Отношения могут быть следующих типов: «>», «<», «>=», «<=», «==», «!=». Компараторы работают по сканирующему алгоритму. Они последовательно анализирую одноимённые разряды двух чисел, начиная со старших. При анализе разрядов формируются код сравнения Ki, который может иметь значение  «больше», «меньше», «равно» (m, b, r). Если на текущем шаге Ki=m или Ki=b, отношение определено и анализ заканчивается. Если Ki=r, то анализ продолжается на следующем разряде.

На языке AHDL компараторы удобно реализовывать с помощью оператора IF THEN.

 Ниже приведен пример компаратора трехразрядных чисел, который выдает «1», если A>B  и «0» в противном случае.

SUBDESIGN comp

 ( A[2..0],B[2..0] : INPUT;

   Q : output; )

 BEGIN

 IF A2 & !B2==1

    THEN Q=B"1";

 ELSIF B2 & !A2==1

    THEN Q=B"0";

 ELSIF A1 & !B1==1

    THEN Q=B"1";

 ELSIF B1 & !A1==1

    THEN Q=B"0";

 ELSIF   A0 & !B0==1

    THEN Q=B"1";

    ELSE Q=B"0";

 END IF;

 END;

Временная диаграмма работы компаратора представлена на рисунке 7.10

Рис 7.10. Временная диаграмма работы компаратора.

Литература

1. Комолов Д.А., Мяльк Р.А., Зобенко А.А., Филиппов А.С. Системы автоматизированного проектирования фирмы Altera MAX+PLUS II и QUARTUS II. –Москва: ИП РадиоСофт, 2002-352с.: ил.

2. Антонов А.П., ЯЗЫК ОПИСАНИЯ ЦИФРОВЫХ УСТРОЙСТВ AlteraHDL. Москва, РадиоСофт, 2002. – 224с.

3. Стешенко В.Б. ПЛИС фирмы ALTERA: проектирование устройств обработки сигналов. – Москва: ДОДЭКА, 2002 – 128с.


 

А также другие работы, которые могут Вас заинтересовать

22102. Детская беспризорность 37 KB
  Причины Беспризорность вызывается причинами социальноэкономического характера такими как войны революции голод стихийные бедствия и другие изменения условий жизни влекущие за собой сиротство детей. Детская беспризорность в России Гражданская война Резко увеличилось число беспризорных детей после Первой мировой войны и Гражданской войны. В 1919 году образован Государственный совет защиты детей во главе с А.
22103. ТЕОРИИ ДЕВИАЦИЙ 34 KB
  При работе с клиентами в обязанности школьного социального педагога входит: обеспечение педагогической направленности содержания форм методов используемых в ходе работы; изучение медикопсихологопедагогических условий влияющих на личность его интересы потребности; организация социальнопедагогической деятельности в социуме различных видов сотрудничества детей и взрослых; содействие детям и взрослым в решении личных и социальных проблем; предотвращение правонарушений; реабилитация клиентов; представление и защита интересов...
22104. Методы абстрактного синтеза 40 KB
  Задача абстрактного синтеза заключается в составлении таблиц переходов и выходов автоматов по заданным условиям его функционирования представленным в форме регулярных выражений. Построенный по этим таблицам автомат обычно содержит лишние внутренние состояния. На втором этапе производится минимизация количества внутренних состояний заданного автомата. Синтезируемый автомат может быть задан либо как автомат Мура либо как автомат Мили.
22105. Общие правила подчинения мест регулярного выражения 54.5 KB
  Определим вначале внутренние состояния в которые переходит автомат из состояния 0 при подаче на его вход сигнала x1. Следовательно автомат из состояния 0 под действием сигнала x1 переходит в состояние 2. Аналогично сигнал x2 переводит автомат из состояния 0 в состояние 1 т. Отсюда получаем следующую отмеченную таблицу переходов: yg e e e e e e y1 e y2 xj ai 0 1 2 3 4 5 6 7 8 x1 2 2 4 2 6 2 7 7 2 x2 1 1 3 1 5 1 8 8 1 yg E e e y1 e y2 xj ai A0 a1 a2 a3 a4 a5 x1 A1 a2 a3 a4 a4 a1 x2 A0 a0 a0 a5 a5 a0 Из построенной таблицы видно что из...
22107. Структурный синтез конечных автоматов 28 KB
  По таблице переходов автомата определяют к каким группам принадлежат внутренние состояния в которые автомат из данного состояния под воздействием каждой буквы входного алфавита. Эти состояния запишем в виде последовательности букв под каждым из состояний автомата. Например из состояния 0 автомат переходит в состояния 2 3 и 1 которые принадлежат соответственно к следующим группам a b и a. Проводят новое разделение внутренних состояний на группы объединяя в каждой группе состояния отмеченные одинаковой последовательностью букв.
22108. Элементарные автоматы 30.5 KB
  Таблица переходов Т триггера имеет вид: yg 0 1 xj ai 0 1 T=0 0 1 T=1 1 0 Из таблицы переходов видно что Ттриггер обладает полной системой переходов и выходов поскольку для каждой пары состояний 00 01 10 11 имеется входной сигнал обеспечивающий переход из одного состояния в другое. На практике более удобно вместо отмеченных таблиц переходов пользоваться так называемыми матрицами переходов элементарных автоматов. Матрица переходов определяет значения сигналов на входах элементарного автомата обеспечивающие каждый их четырех...
22109. D-триггер(триггер задержки) 28.5 KB
  Название Dтриггера происходит от слова €œdelay€ – задержка. Из определения следует что состояние триггера в момент времени t1 повторяет значение входного сигнала Dt в момент времени t отсюда и название триггера задержки. Матрица переходов для Dтриггера: D Qt Qt1 0 0 0 1 0 1 0 1 0 1 1 1 Обозначения асинхронного и синхронного Dтриггеров. Матрица переходов RS триггера имеет вид.
22110. J-K триггер (универсальный триггер) 24 KB
  Триггером JK типа называют автомат Мура с двумя устойчивыми состояниями и двумя входами J и K который при условии J K = 1 осуществляет инверсию предыдущего состояния т. при J K = 1 Qt1 = Qt а в остальных случаях функционируют в соответствии с таблицей истинности RS триггера при этом вход J эквивалентен входу S а вход K входу R. Этот триггер уже не имеет запрещенной комбинации входных сигналов и его таблица истинности т.