Программирование Xilinx Программирование XC2C64A в среде Xilinx ISE WebPack Fri, October 11 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

Программирование XC2C64A в среде Xilinx ISE WebPack Печать
Добавил(а) microsin   

В этой статье описаны базовые шаги для программирования микросхем логики CPLD на примере микросхемы XC2C64A.

1. Запустите ISE Project Navigator.

2. Выберите в меню File -> New Project.

ISE Project Navigator New Project1

Используйте диалог New Project Wizard - Create New Project Page для ввода общей информации для Вашего проекта. Этот диалог содержит следующие опции для настройки.

Name. Задает имя для проекта.

Location. Указывает место для размещения (папку) проекта. Вы можете выбрать на диске нужный каталог или ввести имя для директории. Если Вы введете имя директории, которая не существует, то Project Navigator создаст эту директорию. По умолчанию программное обеспечение автоматически создаст подкаталог на основе введенного имени в поле Name.

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

Working Directory. Задает место размещения рабочей директории. По умолчанию рабочая директория совпадает с директорией проекта (указанной в поле Location). Однако Вы можете указать рабочую директорию, если хотите содержать Ваш файл проекта ISE Design Suite (с расширением .xise) отдельно от рабочей области.

Description. Позволяет добавить произвольное текстовое описание для Вашего проекта. Это поле опционально (его заполнять не обязательно).

Top-Level Source Type. Выпадающий список, который задает тип исходного модуля для верхнего уровня проекта (top-level design).

HDL

Выберите этот вариант, если Ваш модуль верхнего уровня должен быть файлом на языке VHDL или Verilog. Проект HDL может включать модули уровнем ниже с другими типами файла, такие как другие файлы HDL, файлы схемы и "черные ящики", такие как интегрированные ядра процессоров (IP cores) и файлы EDIF.

Schematic

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

Примечание: для новичков вариант Schematic подходит лучше всего.

EDIF

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

NGC/NGO

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

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

ISE Project Navigator New Project2

Используйте диалог свойств проекта для ввода устройства и другой информации.

Evaluation Development Board. Указывает модель платы разработчика, используемой в проекте, если это имеет место. Выбор платы автоматически установит следующие опции: Product Category, Family, Device, Package и Speed. Если Вы хотите установить эти опции вручную, установите тип платы None Specified (не указано).

Product Category. Задает применимую категорию проекта. Этот выбор фильтрует семейства устройств и устройства, которые доступны для выбора в опциях Family и Device.

Family. Задает семейство устройства или архитектуру Xilinx®, в которой реализуется проект.

Device. Задает устройство, в котором будет реализован проект.

Package. Задает тип корпуса устройства. От этого зависит количество доступных выводов для подключения внешних цепей.

Speed. Указывает быстродействие (speed grade) применяемого устройства.

Top-Level Source Type. Задает тип исходного кода для модуля верхнего уровня проекта.

HDL. Выберите эту опцию, если Ваш модуль верхнего уровня проекта это файл VHDL или файл Verilog. Проект HDL может включать в себя друге модули уровня ниже различных типов, включая файлы HDL, схемы и "черные ящики", такие как ядра интегрированных процессоров (IP cores).

Schematic. Выберите эту опцию, если Ваш модуль верхнего уровня проекта это схема. Проект в виде схемы может включать в себя друге модули уровня ниже различных типов, включая файлы HDL, схемы и "черные ящики", такие как ядра интегрированных процессоров (IP cores). Project Navigator автоматически преобразует любые файлы схем в Вашем дизайне в структурированный HDL перед запуском имплементации проекта; таким образом, Вы должны указать инструмент синтеза, когда работаете со схематическими проектами.

EDIF

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

NGC/NGO

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

Synthesis Tool. Задает инструментарий синтеза и язык синтеза для проекта. Для инструментов синтеза, которые поддерживают только один язык дизайна, выберите для проекта подходящий язык - например Synplify (VHDL) или Synplify (Verilog).

XST. Синтез Xilinx Synthesis Technology (XST) предоставляется вместе с ISE® Design Suite. Он поддерживает проекты, которые используют файлы дизайна VHDL, Verilog и схем. Т. е. поддерживается дизайн, состоящий из смеси языков. Для дополнительной информации см. XST Synthesis Overview site:xilinx.com.

Synplify and Synplify Pro. Synplify and Synplify Pro это сторонний интегрированный инструментарий синтеза, который должен быть приобретен отдельно у компании Synopsys, Inc. Программное обеспечение Synplify не поддерживает проекты, которые включают в себя все разновидности языков файлов проекта. Поддерживаются проекты, которые содержат в одном проекте смесь языковых файлов на VHDL и Verilog. Программное обеспечение Synplify и Synplify Pro не поддерживает проекты, которые включают в файлы схем. Для дополнительной информации см. Using Synplify or Synplify Pro Software for Synthesis site:xilinx.com.

Precision. Это сторонний интегрированный инструментарий синтеза, который должен быть приобретен отдельно у компании Mentor Graphics, Inc. Программное обеспечение Precision поддерживает проекты, которые включают файлы схем и проекты, которые включают смесь исходных файлов на языках VHDL и Verilog в одном проекте. Для дополнительной информации см. Using Precision Software for Synthesis site:xilinx.com.

Обратите внимание, что сторонние инструменты синтеза, такие как Synplify и Precision, доступны только как опция, если это ПО установлено на Вашем компьютере. Если инструмент синтеза установлен, но не появляется в качестве опции, то убедитесь, что путь до инструмента правильно установлен на странице Integrated Tools диалога настроек Preferences.

Simulator. Укажите инструмент, используемый для симуляции и язык, используемый для генерации списков сетей симуляции.

ISim. Симулятор ISim поставляется в составе ISE Design Suite. Для дополнительной информации см. ISim User Guide (UG660) site:xilinx.com.

ModelSim SE/ModelSim PE/ModelSim DE. Симулятор ModelSim это сторонний инструмент, используемый вместе с ISE Design Suite. Для дополнительной информации см. Using the ModelSim or Questa Simulator site:xilinx.com.

Имейте в виду, что после приобретения и установки ModelSim укажите перед симуляцией корректный путь до исполняемого файла на странице Integrated Tools диалога настроек Preferences.

Questa. Симулятор Questa это сторонний инструмент, используемый вместе с ISE Design Suite. Для дополнительной информации см. ModelSim or Questa Simulator site:xilinx.com.

Имейте в виду, что при использование симулятора, который не интегрирован с ISE Design Suite, Вы должны указать ISim. Это гарантирует, что все сгенерированные файлы записаны в правильном формате.

Preferred Language. Управляет установкой по умолчанию для обработки свойств, которые генерируют вывод HDL, такие как исходные файлы, промежуточные файлы или структурированные списки цепей симуляции. Если опции Synthesis Tool и Simulator установлены в инструмент на одном языке, то язык по умолчанию для сгенерированных выходных файлов HDL установится автоматически. Если обе опции Synthesis Tool и Simulator установлены на смешанные языки (VHDL/Verilog), то Вы можете использовать свойство Preferred Language для выбора языка, в котором будут создаваться генерируемые выходные файлы HDL.

Verilog. Выберите эту опцию, если в обоих установках Synthesis Tool и Simulator заданы смешанные языки, и если Вы хотите использовать в качестве языка по умолчанию Verilog.

VHDL. Выберите эту опцию, если в обоих установках Synthesis Tool и Simulator заданы смешанные языки, и если Вы хотите использовать в качестве языка по умолчанию VHDL.

N/A. Эта опция появляется, если обе установки Synthesis Tool и Simulator установлены на один язык, потому что генерируемый язык базируется на языке, который выбран в опциях Synthesis Tool и Simulator.

Примечание: альтернативно Вы можете поменять целевой язык для каждого процесса в по отдельности в окне Processes панели Design, для этого выберите Process -> Process Properties, и установите язык в окне диалога. Например, для процесса View HDL Functional Model Вы можете указать язык структурированного списка цепей цели в окне диалога Functional Model Properties.

Property Specification in Project File. Управляет тем, как свойства сохраняются в файле .xise проекта.

Store non-default values only. Выберите эту опцию для сохранения только тех установок, которые не являются установкой свойства по умолчанию.

Store all values. Выберите эту опцию для сохранения всех установок свойств, включая значения свойств по умолчанию. Эта опция полезна, когда ведется работа с системами управления исходным кодом, и когда проекты перемещаются между разными версиями ISE Design Suite, потому что будут явно сохранены все свойства проекта.

Примечание: для получения дополнительной информации по файлу проекта .xise см. Understanding the Project File site:xilinx.com.

Manual Compile Order. По умолчанию порядок компиляции RTL определяется автоматически на основе иерархии дизайна. Эта опция позволяет Вам изменить поведение по умолчанию и установить порядок компиляции вручную. Выбор этой опции запрещает весь иерархический анализ файлов исходного кода HDL, когда они добавляются в проект, и исходные модули дизайна отображаются как плоский список вместо иерархического. Для проектов с большим количеством исходных модулей HDL это может позволить быстрее добавлять файлы в проект. Для дополнительной информации см. Setting a Custom Compile Order site:xilinx.com.

VHDL Source Analysis Standard. Задает стандарт языка VHDL, используемый парсером иерархии проекта. Для дополнительной информации см. Understanding the Front-End Design Parser site:xilinx.com.

VHDL-93. Выберите эту опцию для установки стандарта VHDL-93, который предоставляет продвинутую поддержку всех конструкций VHDL-93.

VHDL-200X. Выберите эту опцию для установки стандарта VHDL-200X, который предоставляет поддержку для выбора дополнительных конструкций, представленных в post-VHDL-93.

Примечание: установка этой опции позволяет Project Navigator анализировать проекты, использующие конструкции VHDL-200X. Из-за того, что XST не поддерживает конструкции VHDL-200X, Вы должны использовать разные инструменты синтеза для своего проекта.

Enable Message Filtering. Показывает количество сообщений, которые Вы отфильтровали. Вы должны разрешить эту опцию, отфильтровать сообщения, и затем запустить программное обеспечение, чтобы показать количество отфильтрованных сообщений. Для дополнительной информации см. Using Message Filters site:xilinx.com.

ISE Project Navigator New Project3

После клика на кнопке Finish откроется окно пустого проекта.

ISE Project Navigator Empty Design

3. Выберите в меню Project -> New Source...

ISE Project Navigator New Source1

Здесь нас интересует тип Schematic. Выберите его, введите в поле "File Name" имя модуля (я ввел имя top), кликните Next и OK.

ISE Project Navigator New Source2

Я не случайно назвал этот модуль "top". Это особый модуль проекта, так называемый модуль верхнего уровня. Если сравнивать с языками программирования C/C++, то это аналог модуля исходного кода, где находится функция main. Известно, что такой модуль исходного кода на C/C++ может быть только один, то же самое и здесь - в проектах, которые содержат одну микросхему CPLD или FPGA, может быть только один модуль верхнего уровня. В простых проектах вся логика может содержаться только в этом модуле, в более сложных к нему в качестве подчиненных могут быть добавлены дополнительные модули.

В нашем случае мы создаем в качестве учебного примера простой логический элемент 2И-НЕ, поэтому будет только один модуль, модуль верхнего уровня, именно поэтому я и назвал его "top" (получится файл top.sch).

4. После создания нового модуля схемы откроется окно редактора схемы (Schematic Editor) с пустой схемой.

ISE Project Navigator Schematic Editor01

Если текущий инструмент редактора Select (кнопка со стрелкой), то закладка Options покажет возможный выбор опций для этого инструмента.

ISE Project Navigator Schematic Editor Select tool

ISE Project Navigator Schematic Editor Select Options Настройка выбора объектов


Когда выполняете клик на ветке:
• выбирается вся ветка
• выбирается её сегмент



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


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

Выбор через прямоугольную область:
• выбираются объекты, включая
   окна атрибутов
• выбираются объекты, исключая
   окна атрибутов
• только окна атрибутов

5. Перейдите на закладку Symbols. Для начала давайте создадим простейший логический элемент, как в старой доброй микросхеме К155ЛА3, т. е. 2И-НЕ. Для этого нам понадобится инструмент Add Symbol.

ISE Project Navigator Schematic Editor Add Symbol tool

Слева в разделе Categories выберите пункт Logic, чуть ниже в разделе Symbols выберите nand2, переведите курсор мыши в правую часть окна - возле курсора появится символ логического элемента, который можно вставить в схему.

ISE Project Navigator Schematic Editor02

Кликните на любое место чертежа, на схему будет добавлен элемент NAND2. Колесиком мыши можно приближать и удалять (zoom) отображаемое поле схемы.

ISE Project Navigator Schematic Editor03

6. Логический элемент создан, теперь нужно его входы и выходы подключить к выводам реального чипа. Для этого сначала нужно к выводам подключить соединительные провода, что делается кнопкой Add Wire.

ISE Project Navigator Schematic Editor Add Wire tool

Если текущий инструмент редактора Add Wire, то закладка Options покажет возможный выбор опций для этого инструмента.

ISE Project Navigator Schematic Editor Add Wire Options Опции добавления соединений



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


При соединении с символом
вывода автоматически добавлять
ввод в шину между шиной
и сигналом.






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

Добавьте проводники, получится примерно так:

ISE Project Navigator Schematic Editor04

7. Подключение буферов ввода-вывода. Снова выберите инструмент Add Symbol, и перейдите в категорию символов IO, и подключите ко входам символ ibuf, а к выходу символ obuf. Получится вот такая схема:

ISE Project Navigator Schematic Editor05

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

8. Размещение маркеров ввода/вывода. Для этого служит инструмент Add IO Marker.

ISE Project Navigator Schematic Editor Add IO Marker tool

Если текущий инструмент редактора Add IO Marker, то закладка Options покажет возможный выбор опций для этого инструмента.

ISE Project Navigator Schematic Editor Add IO Marker Options Опции добавления маркера порта
ввода/вывода


При клике на конце ветви:
• автоматически определять тип
   добавляемого маркера
• добавлять маркер входа
• добавлять маркер выхода
• добавлять маркер двунаправленного
   сигнала
• удалять маркер



Когда добавляете маркер, то
ориентация направления:
• маркер ориентируется автоматически
• маркер ориентируется вниз
• маркер ориентируется влево
• маркер ориентируется вправо
• маркер ориентируется вверх


В дополнение к кликам на конце ветви Вы можете выделить курсором мыши прямоугольную область вокруг одной или большего количества точек окончания ветви, чтобы добавить или удалить маркеры I/O в этих точках.

Получится примерно следующая схема:

ISE Project Navigator Schematic Editor06

9. Назначение имен сигналов схемы. Сейчас пока что на маркерах проставлены имена, назначенные автоматически. Чтобы дать более осмысленные названия, двойным кликом на маркере можно отредактировать эти значения.

ISE Project Navigator Schematic Editor Net Attributes

Внешний вид завершенной схемы:

ISE Project Navigator Schematic Editor07

10. Для того, чтобы маркеры IO соответствовали именно тем ножкам чипа, которые нам нужны, следует добавить в проект новый файл, так называемый файл ограничений реализации (Implementations Constraints File). Выберите в меню Project -> New Source..., и в качестве типа файла укажите Implementations Constraints File. Дайте имя для файла, для простоты я назвал его pins.

ISE Project Navigator New Source Add Constraints1

ISE Project Navigator New Source Add Constraints2

Примечание: термин "файл ограничений пользователя" (User Comstraints File, UCF) поначалу вводит начинающего пользователя в заблуждение, поскольку для него трудно ожидать, что этот файл задает привязку создаваемой логики к выводам корпуса микросхемы. Но на самом деле это действительно ограничения, потому что требует от системы синтеза и разводки определенным образом прокладывать на кристалле логические связи. При отсутствии таких ограничений разводка может быть сделана более оптимально - либо с минимальными задержками, либо с минимальной тратой ресурсов микросхемы. Кроме того, файл UCF также может вводить ограничения на интервалы времени (в этом обзоре такие ограничения не рассматриваются).

Файл получит расширение *.ucf (сокращение от User Constraints File), и он будет размещен в дереве иерархии проекта (Design Hierarchy) как дочерний по отношению к файлу top.

ISE Project Navigator Design Hierarchy1

Это простой текстовый файл, в котором можно вручную прописать назначение определенных цепей нужным ножкам микросхемы. Предположим, что нужно сделать такое подключение цепей (цоколевку используемой микросхемы можно посмотреть в даташите):

Имя сигнала Банк_НомерIO XC2C64A, корпус VQ44
IN1 BANK2_0 выв. 38
IN2 BANK2_1 выв. 37
OUT1 BANK2_9 выв. 28

Тогда файл ограничений (у нас это pins.ucf) будет такой:

NET "IN1" LOC = "P38";
NET "IN2" LOC = "P37";
NET "OUT1" LOC = "P28";

Здесь команда NET задает имя цепи схемы, а команда LOC задает номер ножки выбранного корпуса микросхемы (P28 соответствует выводу 28 корпуса, P38 выводу 38, и т. д.).

1. На закладке Sources (Design -> Hierarchy), выберите вариант просмотра Implementation.

2. Выберите корневой элемент проекта (на рисунке это xc2c64a-7VQ44).

3. На закладке Processes раскройте раздел User Constraints.

ISE Project Navigator run PACE1

4. Сделайте двойной клик курсором мыши на пункт Floorplan IO - Pre-Synthesis. Откроется окно запроса "Этот процесс требует добавления файла UCF к проекту и привязки его к выбранному модулю проекта. Хотите ли Вы, чтобы Project Navigator автоматически создал UCF и добавил его к проекту? Если выберете 'No', то Вам нужно будет создать или добавить существующий файл UCF к проекту перед тем, как запустить этот процесс."

ISE Project Navigator run PACE2

Выберите Yes, будет автоматически создан файл UCF (для нашего примера это top.ucf) и добавлен к проекту. Также запустится окно редактора Xilinx PACE.

ISE Project Navigator run PACE3

5. С помощью этого редактора можно очень удобно создавать файл ограничений реализации UCF. В окошке Design Object List показана таблица с сигналами нашей схемы (IN1, IN2, OUT1), где можно редактировать привязку этих сигналов к внешним выводам корпуса и их атрибуты, а справа окно Package Pins дает подсказку по именам выводов (P1..P44).

Через меню View -> Toolbars -> Legend (Ctrl+L) можно открыть легенду обозначения выводов выбранной микросхемы (Package Pin Legend).

ISE Project Navigator PACE Package Pin Legend

6. Редактированием столбца Loc таблицы Design Object List делается привязка сигналов к выводам:

ISE Project Navigator PACE edit Design Object List1

Обратите внимание, что после редактирования поменялась картинка Package Pins, на ней синим цветом закрашиваются выбранные выводы корпуса. Косой черной штриховкой обозначен текущий редактируемый сигнал в таблице (OUT1/P28).

ISE Project Navigator PACE edit Design Object List2

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

Slew. Этот атрибут можно отредактировать для выхода OUT1, установив его в значение FAST или SLOW. Этот параметр задает скорость переключения выхода микросхемы. Вариант SLOW будет переключать выход медленнее, но снизит энергопотребление.

I/O Std. Задает уровни логики, с которыми работает этот сигнал можно выбрать один из вариантов: LVCMOS15, LVCMOS18, LVCMOS25, LVCMOS33 или LVTTL. Цифры обозначают уровни 1.5V, 1.8V, 2.5 и 3.3V. Если Ваша схема питается от 3.3V, то можно выбрать вариант LVCMOS33.

Termination. Задает наличие подтяжки к лог. 1 (PULLUP), отсутствие подтяжки (FLOAT) и терминирование по внешней цепи (KEEPER). Подробнее про эти варианты терминирования см. руководство Constraints Guide (папка doc\cgd.pdf [3]).

Schmitt. Если выбрать ON, то к сигналу будет подключен триггер Шмитта.

Globals. Позволяет выбрать варианты CLK, COOL_CLK, OE или SR (подробнее см. руководство Constraints Guide, папка doc\cgd.pdf [3]).

В результате редактирования у меня получилась такая таблица:

ISE Project Navigator PACE edit Design Object List3

8. Сохраните UCF выбором в меню File -> Save. Откроется оно запроса Bus Delimiter, оставьте там все по умолчанию и кликните OK.

ISE Project Navigator PACE Bus Delimiter

На диске в корневой папке проекта обновится файл ограничений. У меня получился следующий файл:

#PACE: Start of Constraints generated by PACE
 
#PACE: Start of PACE I/O Pin Assignments
NET "IN1"  LOC = "P38" | IOSTANDARD = LVCMOS33  | PULLUP ;
NET "IN2"  LOC = "P37" | IOSTANDARD = LVCMOS33  | PULLUP ;
NET "OUT1"  LOC = "P28" | SLEW = SLOW  | IOSTANDARD = LVCMOS33  | FLOAT ;
 
#PACE: Start of PACE Area Constraints
 
#PACE: Start of PACE Prohibit Constraints
 
#PACE: End of Constraints generated by PACE

11. Все готово к генерации прошивки для микросхемы. Кликните на кнопку с зеленым треугольником Implament Top Module. Друг за другом запустятся процессы Implement Design: Synthesize - XST, Translate, Fit, Generate Programming File.

ISE Project Navigator Design Implement

Зеленые кружки с галочками показывают, что все соответствующие процессы завершены успешно.

[Запись полученной программы в микросхему]

Осталось теперь запрограммировать нашу микросхему XC2C64A.

12. Подключите адаптер Xilinx Program Cable USB к компьютеру и к программируемому устройству через JTAG. На адаптере светодиод должен загореться красным, сигнализируя об успешном подключении к порту USB. Подайте питание 3.3V на программируемую микросхему (у нас это CPLD XC2C64A. На адаптере светодиод поменяет цвет на зеленый, показывая тем самым, что питание на микросхему подано, и железо готово к работе.

13. Выберите в меню Tools -> iMPACT..., запустится окно утилиты программатора. При первом запуске утилиты iMPACT откроется предупреждение, что пока что не существует файл проекта.

ISE iMPACT no project file warning

14. Выберите в меню Edit -> Launch Wizard..., откроется окно Welcome to iMPACT.

ISE iMPACT Wizard1

 

Оставьте выбранным первый вариант "Configure devices using Boundary-Scan chain -> Automatically connect to a cable and identify Boundary-Scan chain", кликните OK.

15. Через несколько секунд автоматически будет обнаружена JTAG-цепь подключенной микросхемы XC2C64A, и будет выведено сообщение "Identify Succeeded". Окно утилиты iMPACT поменяется, справа символически будет показана детектированная цепочка JTAG, состоящая из одной нашей микросхемы.

ISE iMPACT main window

Примечание: при наличии проблем с подключением выберите Output -> Cable Setup..., откроется диалог настройки подключения к адаптеру Xilinx Program Cable (программатор JTAG). Радиокнопками Communication Mode выберите тип кабеля (мой кабель, купленный на aliexpress, соответствует варианту Platform Cable USB/II) и кликните OK.

ISE iMPACT Cable Communication Setup

16. После детектирования цепочки JTAG мастер отобразит окно запроса "Auto Assign Configuration Files Query Dialog" (Вы хотите продолжить и назначить файл (файлы) конфигурации?):

ISE iMPACT Wizard2

Кликните Yes, откроется окно выбора файла, выберите файл top.jed, находящийся в корневой папке проекта, он добавится в проект iMPACT, и откроется окно Device Programming Properties для настройки цепочки JTAG.

ISE iMPACT Device Programming Properties

Ничего менять в этом окне не надо, просто нажмите OK.

17. Кликните на микросхему, слева будет показан список возможных операций над ней. Кликните на Program. Через несколько секунд микросхема запрограммируется, и будет готова к работе.

ISE iMPACT Program DONE

Сохраните файл проекта iMPACT (файл с расширением *.ipf).

[Проверка результата]

Для проверки, как работает мой логический элемент 2И-НЕ, я собрал вот такой стенд:

XC2C64A maket

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

logic levels generator

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

logic levels indicator

После программирования созданный элемент 2И-НЕ работает как полагается:

XC2C64A nand2 00 XC2C64A nand2 01 XC2C64A nand2 10 XC2C64A nand2 11
На входах 00, красный светодиод горит, показывая на выходе 1 На входах 01, красный светодиод горит, показывая на выходе 1 На входах 10, красный светодиод горит, показывая на выходе 1 На входах 11, красный светодиод погас, показывая на выходе 0

[Реализация с помощью схемы]

RC-генератор можно сделать по классической схеме, с помощью двух инверторов (категория Logic, символ inv), одного входного буфера, двух выходных буферов (категория Buffer, символы ibuf и obuf соответственно), и подключенных снаружи резистора и конденсатора.

ISE Project Navigator generator sch

Пример таблицы настроек портов в программе ISE PACE и соответствующий файл UCF:

ISE Project Navigator PACE constraints table for generator

NET "XTALIN"  LOC = "P12" | IOSTANDARD = LVTTL ; 
NET "XTALOUT1"  LOC = "P18" | SLEW = FAST  | IOSTANDARD = LVTTL ; 
NET "XTALOUT2"  LOC = "P14" | SLEW = FAST  | IOSTANDARD = LVTTL ;

Частота RC-генератора не стабильна, и зависит не только от емкости конденсатора и номинала резистора, но и от температуры и напряжения питания. Если конденсатор не ставить, то схема будет генерировать на частоте порядка 70..100 МГц. Если установить кварцевый резонатор вместо конденсатора, то получится кварцевый генератор, работающий на стабильной частоте.

XC2C64A quartz generaror

Соответствующий автоматически сгенерированный код на языке VHDL (файл top.vhd):

library ieee;
use ieee.std_logic_1164.ALL;
use ieee.numeric_std.ALL;
library UNISIM;
use UNISIM.Vcomponents.ALL;
 
entity top is
   port ( XTALIN   : in    std_logic; 
          XTALOUT1 : out   std_logic; 
          XTALOUT2 : out   std_logic);
end top;
 
architecture BEHAVIORAL of top is
   attribute BOX_TYPE   : string ;
   signal XLXN_25  : std_logic;
   signal XLXN_58  : std_logic;
   signal XLXN_61  : std_logic;
   component IBUF
      port ( I : in    std_logic; 
             O : out   std_logic);
   end component;
   attribute BOX_TYPE of IBUF : component is "BLACK_BOX";
   
   component OBUF
      port ( I : in    std_logic; 
             O : out   std_logic);
   end component;
   attribute BOX_TYPE of OBUF : component is "BLACK_BOX";
   
   component INV
      port ( I : in    std_logic; 
             O : out   std_logic);
   end component;
   attribute BOX_TYPE of INV : component is "BLACK_BOX";
 
begin
   XLXI_29 : IBUF
      port map (I=>XTALIN,
                O=>XLXN_25);
   
   XLXI_31 : OBUF
      port map (I=>XLXN_61,
                O=>XTALOUT1);
   
   XLXI_32 : INV
      port map (I=>XLXN_25,
                O=>XLXN_61);
   
   XLXI_33 : INV
      port map (I=>XLXN_61,
                O=>XLXN_58);
   
   XLXI_59 : OBUF
      port map (I=>XLXN_58,
                O=>XTALOUT2);
end BEHAVIORAL;

Сокращенный отчет (файл top.rpt):

Device Used: XC2C64A-7-VQ44
Fitting Status: Successful
 
*************************  Mapped Resource Summary  **************************
Macrocells     Product Terms    Function Block   Registers      Pins           
Used/Tot       Used/Tot         Inps Used/Tot    Used/Tot       Used/Tot       
2  /64  (  3%) 2   /224  (  1%) 2   /160  (  1%) 0  /64  (  0%) 3  /33  (  9%)
 
** Function Block Resources **
Function Mcells   FB Inps  Pterms   IO       CTC      CTR      CTS      CTE     
Block    Used/Tot Used/Tot Used/Tot Used/Tot Used/Tot Used/Tot Used/Tot Used/Tot
FB1       0/16      0/40     0/56     0/ 8    0/1      0/1      0/1      0/1
FB2       0/16      0/40     0/56     0/ 9    0/1      0/1      0/1      0/1
FB3       1/16      1/40     1/56     1/ 9    0/1      0/1      0/1      0/1
FB4       1/16      1/40     1/56     1/ 7    0/1      0/1      0/1      0/1
         -----    -------  -------   -----    ---      ---      ---      ---
Total     2/64      2/160    2/224    2/33    0/4      0/4      0/4      0/4 
 
CTC - Control Term Clock
CTR - Control Term Reset
CTS - Control Term Set
CTE - Control Term Output Enable
 
** 2 Outputs **
Signal              Total Total Bank Loc     Pin   Pin       Pin     I/O      I/O       Slew Reg     Reg Init
Name                Pts   Inps               No.   Type      Use     STD      Style     Rate Use     State
XTALOUT1            1     1     2    FB3_15  18    I/O       O       LVTTL              FAST         
XTALOUT2            1     1     1    FB4_14  14    I/O       O       LVTTL              FAST         
 
** 1 Inputs **
Signal              Bank Loc     Pin   Pin       Pin     I/O      I/O
Name                             No.   Type      Use     STD      Style
XTALIN              1    FB4_11  12    I/O       I       LVTTL    KPR
 
******************************  Device Pin Out *****************************
Device : XC2C64A-7-VQ44
   --------------------------------  
  /44 43 42 41 40 39 38 37 36 35 34 \
 | 1                             33 | 
 | 2                             32 | 
 | 3                             31 | 
 | 4                             30 | 
 | 5         XC2C64A-7-VQ44      29 | 
 | 6                             28 | 
 | 7                             27 | 
 | 8                             26 | 
 | 9                             25 | 
 | 10                            24 | 
 | 11                            23 | 
 \ 12 13 14 15 16 17 18 19 20 21 22 /
   --------------------------------  
 
Pin Signal                         Pin Signal                        
No. Name                           No. Name                          
  1 KPR                              23 KPR                           
  2 KPR                              24 TDO                           
  3 KPR                              25 GND                           
  4 GND                              26 VCCIO-3.3                     
  5 KPR                              27 KPR                           
  6 KPR                              28 KPR                           
  7 VCCIO-3.3                        29 KPR                           
  8 KPR                              30 KPR                           
  9 TDI                              31 KPR                           
 10 TMS                              32 KPR                           
 11 TCK                              33 KPR                           
 12 XTALIN                           34 KPR                           
 13 KPR                              35 VCCAUX                        
 14 XTALOUT2                         36 KPR                           
 15 VCC                              37 KPR                           
 16 KPR                              38 KPR                           
 17 GND                              39 KPR                           
 18 XTALOUT1                         40 KPR                           
 19 KPR                              41 KPR                           
 20 KPR                              42 KPR                           
 21 KPR                              43 KPR                           
 22 KPR                              44 KPR                           
 
Legend :  NC  = Not Connected, unbonded pin
        PGND  = Unused I/O configured as additional Ground pin
         KPR  = Unused I/O with weak keeper (leave unconnected)
         WPU  = Unused I/O with weak pull up (leave unconnected)
         TIE  = Unused I/O floating -- must tie to VCC, GND or other signal
         VCC  = Dedicated Power Pin
      VCCAUX  = Power supply for JTAG pins
   VCCIO-3.3  = I/O supply voltage for LVTTL, LVCMOS33, SSTL3_I
   VCCIO-2.5  = I/O supply voltage for LVCMOS25, SSTL2_I
   VCCIO-1.8  = I/O supply voltage for LVCMOS18
   VCCIO-1.5  = I/O supply voltage for LVCMOS15, HSTL_I
        VREF  = Reference voltage for indicated input standard
       *VREF  = Reference voltage pin selected by software
         GND  = Dedicated Ground Pin
         TDI  = Test Data In, JTAG pin
         TDO  = Test Data Out, JTAG pin
         TCK  = Test Clock, JTAG pin
         TMS  = Test Mode Select, JTAG pin
  PROHIBITED  = User reserved pin

XC2C64A PWM simple

Автоматически сгенерированный код на языке VHDL (файл top.vhd):

library ieee;
use ieee.std_logic_1164.ALL;
use ieee.numeric_std.ALL;
library UNISIM;
use UNISIM.Vcomponents.ALL;
 
entity COMPM8_MXILINX_top is
   port ( A  : in    std_logic_vector (7 downto 0); 
          B  : in    std_logic_vector (7 downto 0); 
          GT : out   std_logic; 
          LT : out   std_logic);
end COMPM8_MXILINX_top;
 
architecture BEHAVIORAL of COMPM8_MXILINX_top is
   attribute BOX_TYPE   : string ;
   signal EQ_1  : std_logic;
   signal EQ_3  : std_logic;
   signal EQ_5  : std_logic;
   signal EQ_7  : std_logic;
   signal EQ2_3 : std_logic;
   signal EQ4_5 : std_logic;
   signal EQ6_7 : std_logic;
   signal GE0_1 : std_logic;
   signal GE2_3 : std_logic;
   signal GE4_5 : std_logic;
   signal GE6_7 : std_logic;
   signal GTA   : std_logic;
   signal GTB   : std_logic;
   signal GTC   : std_logic;
   signal GTD   : std_logic;
   signal GT_1  : std_logic;
   signal GT_3  : std_logic;
   signal GT_5  : std_logic;
   signal GT_7  : std_logic;
   signal GT0_1 : std_logic;
   signal GT2_3 : std_logic;
   signal GT4_5 : std_logic;
   signal LE0_1 : std_logic;
   signal LE2_3 : std_logic;
   signal LE4_5 : std_logic;
   signal LE6_7 : std_logic;
   signal LTA   : std_logic;
   signal LTB   : std_logic;
   signal LTC   : std_logic;
   signal LTD   : std_logic;
   signal LT_1  : std_logic;
   signal LT_3  : std_logic;
   signal LT_5  : std_logic;
   signal LT_7  : std_logic;
   signal LT0_1 : std_logic;
   signal LT2_3 : std_logic;
   signal LT4_5 : std_logic;
   component AND2B1
      port ( I0 : in    std_logic; 
             I1 : in    std_logic; 
             O  : out   std_logic);
   end component;
   attribute BOX_TYPE of AND2B1 : component is "BLACK_BOX";
   
   component OR4
      port ( I0 : in    std_logic; 
             I1 : in    std_logic; 
             I2 : in    std_logic; 
             I3 : in    std_logic; 
             O  : out   std_logic);
   end component;
   attribute BOX_TYPE of OR4 : component is "BLACK_BOX";
   
   component NOR2
      port ( I0 : in    std_logic; 
             I1 : in    std_logic; 
             O  : out   std_logic);
   end component;
   attribute BOX_TYPE of NOR2 : component is "BLACK_BOX";
   
   component AND3
      port ( I0 : in    std_logic; 
             I1 : in    std_logic; 
             I2 : in    std_logic; 
             O  : out   std_logic);
   end component;
   attribute BOX_TYPE of AND3 : component is "BLACK_BOX";
   
   component OR2
      port ( I0 : in    std_logic; 
             I1 : in    std_logic; 
             O  : out   std_logic);
   end component;
   attribute BOX_TYPE of OR2 : component is "BLACK_BOX";
   
   component AND3B1
      port ( I0 : in    std_logic; 
             I1 : in    std_logic; 
             I2 : in    std_logic; 
             O  : out   std_logic);
   end component;
   attribute BOX_TYPE of AND3B1 : component is "BLACK_BOX";
   
   component XNOR2
      port ( I0 : in    std_logic; 
             I1 : in    std_logic; 
             O  : out   std_logic);
   end component;
   attribute BOX_TYPE of XNOR2 : component is "BLACK_BOX";
   
   component AND2
      port ( I0 : in    std_logic; 
             I1 : in    std_logic; 
             O  : out   std_logic);
   end component;
   attribute BOX_TYPE of AND2 : component is "BLACK_BOX";
   
   component AND4
      port ( I0 : in    std_logic; 
             I1 : in    std_logic; 
             I2 : in    std_logic; 
             I3 : in    std_logic; 
             O  : out   std_logic);
   end component;
   attribute BOX_TYPE of AND4 : component is "BLACK_BOX";
   
begin
   I_36_1 : AND2B1
      port map (I0=>A(7),
                I1=>B(7),
                O=>LT_7);
   
   I_36_3 : OR4
      port map (I0=>LTD,
                I1=>LTC,
                I2=>LTB,
                I3=>LTA,
                O=>LT);
   
   I_36_4 : NOR2
      port map (I0=>GT4_5,
                I1=>LT4_5,
                O=>EQ4_5);
   
   I_36_5 : AND3
      port map (I0=>EQ6_7,
                I1=>EQ4_5,
                I2=>LT2_3,
                O=>LTB);
   
   I_36_6 : OR2
      port map (I0=>LT_3,
                I1=>LE2_3,
                O=>LT2_3);
   
   I_36_7 : OR2
      port map (I0=>GT_3,
                I1=>GE2_3,
                O=>GT2_3);
   
   I_36_8 : OR2
      port map (I0=>GT_1,
                I1=>GE0_1,
                O=>GT0_1);
   
   I_36_9 : AND3B1
      port map (I0=>A(0),
                I1=>EQ_1,
                I2=>B(0),
                O=>LE0_1);
   
   I_36_10 : AND3B1
      port map (I0=>B(0),
                I1=>EQ_1,
                I2=>A(0),
                O=>GE0_1);
   
   I_36_11 : AND3B1
      port map (I0=>A(2),
                I1=>EQ_3,
                I2=>B(2),
                O=>LE2_3);
   
   I_36_12 : AND3B1
      port map (I0=>B(2),
                I1=>EQ_3,
                I2=>A(2),
                O=>GE2_3);
   
   I_36_13 : XNOR2
      port map (I0=>A(1),
                I1=>B(1),
                O=>EQ_1);
   
   I_36_14 : AND2B1
      port map (I0=>B(1),
                I1=>A(1),
                O=>GT_1);
   
   I_36_15 : XNOR2
      port map (I0=>A(3),
                I1=>B(3),
                O=>EQ_3);
   
   I_36_16 : AND2B1
      port map (I0=>A(1),
                I1=>B(1),
                O=>LT_1);
   
   I_36_17 : AND2B1
      port map (I0=>B(3),
                I1=>A(3),
                O=>GT_3);
   
   I_36_18 : OR2
      port map (I0=>LT_1,
                I1=>LE0_1,
                O=>LT0_1);
   
   I_36_19 : AND2B1
      port map (I0=>A(3),
                I1=>B(3),
                O=>LT_3);
   
   I_36_20 : AND2
      port map (I0=>GT4_5,
                I1=>EQ6_7,
                O=>GTC);
   
   I_36_21 : AND2
      port map (I0=>EQ6_7,
                I1=>LT4_5,
                O=>LTC);
   
   I_36_22 : NOR2
      port map (I0=>GTD,
                I1=>LTD,
                O=>EQ6_7);
   
   I_36_23 : OR2
      port map (I0=>LT_5,
                I1=>LE4_5,
                O=>LT4_5);
   
   I_36_24 : AND2B1
      port map (I0=>B(7),
                I1=>A(7),
                O=>GT_7);
   
   I_36_25 : AND2B1
      port map (I0=>A(5),
                I1=>B(5),
                O=>LT_5);
   
   I_36_26 : XNOR2
      port map (I0=>A(7),
                I1=>B(7),
                O=>EQ_7);
   
   I_36_27 : AND2B1
      port map (I0=>B(5),
                I1=>A(5),
                O=>GT_5);
   
   I_36_28 : XNOR2
      port map (I0=>A(5),
                I1=>B(5),
                O=>EQ_5);
   
   I_36_29 : AND3B1
      port map (I0=>B(6),
                I1=>EQ_7,
                I2=>A(6),
                O=>GE6_7);
   
   I_36_30 : AND3B1
      port map (I0=>A(6),
                I1=>EQ_7,
                I2=>B(6),
                O=>LE6_7);
   
   I_36_31 : AND3B1
      port map (I0=>B(4),
                I1=>EQ_5,
                I2=>A(4),
                O=>GE4_5);
   
   I_36_32 : AND3B1
      port map (I0=>A(4),
                I1=>EQ_5,
                I2=>B(4),
                O=>LE4_5);
   
   I_36_33 : OR2
      port map (I0=>GT_5,
                I1=>GE4_5,
                O=>GT4_5);
   
   I_36_34 : OR2
      port map (I0=>GT_7,
                I1=>GE6_7,
                O=>GTD);
   
   I_36_35 : OR2
      port map (I0=>LT_7,
                I1=>LE6_7,
                O=>LTD);
   
   I_36_36 : AND4
      port map (I0=>EQ6_7,
                I1=>EQ4_5,
                I2=>EQ2_3,
                I3=>LT0_1,
                O=>LTA);
   
   I_36_37 : AND4
      port map (I0=>GT0_1,
                I1=>EQ2_3,
                I2=>EQ4_5,
                I3=>EQ6_7,
                O=>GTA);
   
   I_36_38 : AND3
      port map (I0=>GT2_3,
                I1=>EQ4_5,
                I2=>EQ6_7,
                O=>GTB);
   
   I_36_39 : NOR2
      port map (I0=>GT2_3,
                I1=>LT2_3,
                O=>EQ2_3);
   
   I_36_40 : OR4
      port map (I0=>GTD,
                I1=>GTC,
                I2=>GTB,
                I3=>GTA,
                O=>GT);
end BEHAVIORAL;
 
library ieee;
use ieee.std_logic_1164.ALL;
use ieee.numeric_std.ALL;
library UNISIM;
use UNISIM.Vcomponents.ALL;
 
entity CJD8CE_MXILINX_top is
   port ( C   : in    std_logic; 
          CE  : in    std_logic; 
          CLR : in    std_logic; 
          Q   : out   std_logic_vector (7 downto 0));
end CJD8CE_MXILINX_top;
 
architecture BEHAVIORAL of CJD8CE_MXILINX_top is
   attribute BOX_TYPE   : string ;
   signal Q7B     : std_logic;
   signal Q_DUMMY : std_logic_vector (7 downto 0);
   component INV
      port ( I : in    std_logic; 
             O : out   std_logic);
   end component;
   attribute BOX_TYPE of INV : component is "BLACK_BOX";
   
   component FDDCE
      generic( INIT : bit :=  '0');
      port ( C   : in    std_logic; 
             CE  : in    std_logic; 
             CLR : in    std_logic; 
             D   : in    std_logic; 
             Q   : out   std_logic);
   end component;
   attribute BOX_TYPE of FDDCE : component is "BLACK_BOX";
   
begin
   Q(7 downto 0) <= Q_DUMMY(7 downto 0);
   I_36_61 : INV
      port map (I=>Q_DUMMY(7),
                O=>Q7B);
   
   XLXI_1 : FDDCE
      port map (C=>C,
                CE=>CE,
                CLR=>CLR,
                D=>Q_DUMMY(2),
                Q=>Q_DUMMY(3));
   
   XLXI_2 : FDDCE
      port map (C=>C,
                CE=>CE,
                CLR=>CLR,
                D=>Q_DUMMY(1),
                Q=>Q_DUMMY(2));
   
   XLXI_3 : FDDCE
      port map (C=>C,
                CE=>CE,
                CLR=>CLR,
                D=>Q_DUMMY(0),
                Q=>Q_DUMMY(1));
   
   XLXI_4 : FDDCE
      port map (C=>C,
                CE=>CE,
                CLR=>CLR,
                D=>Q7B,
                Q=>Q_DUMMY(0));
   
   XLXI_5 : FDDCE
      port map (C=>C,
                CE=>CE,
                CLR=>CLR,
                D=>Q_DUMMY(3),
                Q=>Q_DUMMY(4));
   
   XLXI_6 : FDDCE
      port map (C=>C,
                CE=>CE,
                CLR=>CLR,
                D=>Q_DUMMY(4),
                Q=>Q_DUMMY(5));
   
   XLXI_7 : FDDCE
      port map (C=>C,
                CE=>CE,
                CLR=>CLR,
                D=>Q_DUMMY(5),
                Q=>Q_DUMMY(6));
   
   XLXI_8 : FDDCE
      port map (C=>C,
                CE=>CE,
                CLR=>CLR,
                D=>Q_DUMMY(6),
                Q=>Q_DUMMY(7));   
end BEHAVIORAL;
 
library ieee;
use ieee.std_logic_1164.ALL;
use ieee.numeric_std.ALL;
library UNISIM;
use UNISIM.Vcomponents.ALL;
 
entity top is
   port ( D0       : in    std_logic; 
          D1       : in    std_logic; 
          D2       : in    std_logic; 
          D3       : in    std_logic; 
          D4       : in    std_logic; 
          D5       : in    std_logic; 
          XTALIN   : in    std_logic; 
          PWMN     : out   std_logic; 
          PWMP     : out   std_logic; 
          XTALOUT1 : out   std_logic; 
          XTALOUT2 : out   std_logic);
end top;
 
architecture BEHAVIORAL of top is
   attribute BOX_TYPE   : string ;
   attribute HU_SET     : string ;
   signal A        : std_logic_vector (7 downto 0);
   signal B        : std_logic_vector (7 downto 0);
   signal Q        : std_logic_vector (7 downto 0);
   signal XLXN_25  : std_logic;
   signal XLXN_58  : std_logic;
   signal XLXN_61  : std_logic;
   signal XLXN_176 : std_logic;
   signal XLXN_177 : std_logic;
   signal XLXN_179 : std_logic;
   signal XLXN_180 : std_logic;
   component IBUF
      port ( I : in    std_logic; 
             O : out   std_logic);
   end component;
   attribute BOX_TYPE of IBUF : component is "BLACK_BOX";
   
   component OBUF
      port ( I : in    std_logic; 
             O : out   std_logic);
   end component;
   attribute BOX_TYPE of OBUF : component is "BLACK_BOX";
   
   component INV
      port ( I : in    std_logic; 
             O : out   std_logic);
   end component;
   attribute BOX_TYPE of INV : component is "BLACK_BOX";
   
   component CJD8CE_MXILINX_top
      port ( C   : in    std_logic; 
             CE  : in    std_logic; 
             CLR : in    std_logic; 
             Q   : out   std_logic_vector (7 downto 0));
   end component;
   
   component PULLUP
      port ( O : out   std_logic);
   end component;
   attribute BOX_TYPE of PULLUP : component is "BLACK_BOX";
   
   component GND
      port ( G : out   std_logic);
   end component;
   attribute BOX_TYPE of GND : component is "BLACK_BOX";
   
   component COMPM8_MXILINX_top
      port ( A  : in    std_logic_vector (7 downto 0); 
             B  : in    std_logic_vector (7 downto 0); 
             GT : out   std_logic; 
             LT : out   std_logic);
   end component;
   
   component BUF
      port ( I : in    std_logic; 
             O : out   std_logic);
   end component;
   attribute BOX_TYPE of BUF : component is "BLACK_BOX";
   
   attribute HU_SET of XLXI_134 : label is "XLXI_134_0";
   attribute HU_SET of XLXI_137 : label is "XLXI_137_1";
begin
   XLXI_29 : IBUF
      port map (I=>XTALIN,
                O=>XLXN_25);
   
   XLXI_31 : OBUF
      port map (I=>XLXN_61,
                O=>XTALOUT1);
   
   XLXI_32 : INV
      port map (I=>XLXN_25,
                O=>XLXN_61);
   
   XLXI_33 : INV
      port map (I=>XLXN_61,
                O=>XLXN_58);
   
   XLXI_59 : OBUF
      port map (I=>XLXN_58,
                O=>XTALOUT2);
   
   XLXI_134 : CJD8CE_MXILINX_top
      port map (C=>XLXN_61,
                CE=>XLXN_176,
                CLR=>XLXN_177,
                Q(7 downto 0)=>Q(7 downto 0));
   
   XLXI_135 : PULLUP
      port map (O=>XLXN_176);
   
   XLXI_136 : GND
      port map (G=>XLXN_177);
   
   XLXI_137 : COMPM8_MXILINX_top
      port map (A(7 downto 0)=>A(7 downto 0),
                B(7 downto 0)=>B(7 downto 0),
                GT=>XLXN_179,
                LT=>XLXN_180);
   
   XLXI_138 : OBUF
      port map (I=>XLXN_179,
                O=>PWMP);
   
   XLXI_139 : OBUF
      port map (I=>XLXN_180,
                O=>PWMN);
   
   XLXI_143 : BUF
      port map (I=>Q(5),
                O=>A(5));
   
   XLXI_144 : BUF
      port map (I=>Q(4),
                O=>A(4));
   
   XLXI_145 : BUF
      port map (I=>Q(3),
                O=>A(3));
   
   XLXI_146 : BUF
      port map (I=>Q(2),
                O=>A(2));
   
   XLXI_148 : BUF
      port map (I=>Q(1),
                O=>A(1));
   
   XLXI_149 : BUF
      port map (I=>Q(0),
                O=>A(0));
   
   XLXI_175 : IBUF
      port map (I=>D5,
                O=>B(5));
   
   XLXI_176 : IBUF
      port map (I=>D4,
                O=>B(4));
   
   XLXI_177 : IBUF
      port map (I=>D3,
                O=>B(3));
   
   XLXI_178 : IBUF
      port map (I=>D2,
                O=>B(2));
   
   XLXI_179 : IBUF
      port map (I=>D1,
                O=>B(1));
   
   XLXI_180 : IBUF
      port map (I=>D0,
                O=>B(0));
end BEHAVIORAL;

Сокращенный отчет (файл top.rpt):

Device Used: XC2C64A-7-VQ44
Fitting Status: Successful
 
*************************  Mapped Resource Summary  ************************** 
Macrocells     Product Terms    Function Block   Registers      Pins           
Used/Tot       Used/Tot         Inps Used/Tot    Used/Tot       Used/Tot       
14 /64  ( 22%) 42  /224  ( 19%) 28  /160  ( 17%) 8  /64  ( 12%) 11 /33  ( 33%)
 
** Function Block Resources **
 
Function Mcells   FB Inps  Pterms   IO       CTC      CTR      CTS      CTE     
Block    Used/Tot Used/Tot Used/Tot Used/Tot Used/Tot Used/Tot Used/Tot Used/Tot
FB1      10/16     12/40    21/56     0/ 8    1/1*     0/1      0/1      0/1
FB2       0/16      0/40     0/56     0/ 9    0/1      0/1      0/1      0/1
FB3       3/16     15/40    20/56     3/ 9    0/1      0/1      0/1      0/1
FB4       1/16      1/40     1/56     1/ 7    0/1      0/1      0/1      0/1
         -----    -------  -------   -----    ---      ---      ---      ---
Total    14/64     28/160   42/224    4/33    1/4      0/4      0/4      0/4 
 
CTC - Control Term Clock
CTR - Control Term Reset
CTS - Control Term Set
CTE - Control Term Output Enable
 
* - Resource is exhausted
 
** 4 Outputs **
Signal              Total Total Bank Loc     Pin   Pin       Pin     I/O      I/O       Slew Reg     Reg Init
Name                Pts   Inps               No.   Type      Use     STD      Style     Rate Use     State
PWMN                14    14    2    FB3_1   29    I/O       O       LVTTL              FAST         
PWMP                10    14    2    FB3_2   28    I/O       O       LVTTL              FAST         
XTALOUT1            1     1     2    FB3_15  18    I/O       O       LVTTL              FAST         
XTALOUT2            1     1     1    FB4_14  14    I/O       O       LVTTL              FAST         
 
** 7 Inputs **
Signal              Bank Loc     Pin   Pin       Pin     I/O      I/O
Name                             No.   Type      Use     STD      Style
D0                  2    FB1_1   38    I/O       I       LVTTL    KPR
D1                  2    FB1_2   37    I/O       I       LVTTL    KPR
D2                  2    FB1_3   36    I/O       I       LVTTL    KPR
D3                  2    FB1_9   34    GTS/I/O   I       LVTTL    KPR
D4                  2    FB1_10  33    GTS/I/O   I       LVTTL    KPR
D5                  2    FB1_11  32    GTS/I/O   I       LVTTL    KPR
XTALIN              1    FB4_11  12    I/O       I       LVTTL    KPR
 
******************************  Device Pin Out *****************************
Device : XC2C64A-7-VQ44
 
   --------------------------------  
  /44 43 42 41 40 39 38 37 36 35 34 \
 | 1                             33 | 
 | 2                             32 | 
 | 3                             31 | 
 | 4                             30 | 
 | 5         XC2C64A-7-VQ44      29 | 
 | 6                             28 | 
 | 7                             27 | 
 | 8                             26 | 
 | 9                             25 | 
 | 10                            24 | 
 | 11                            23 | 
 \ 12 13 14 15 16 17 18 19 20 21 22 /
   --------------------------------  
 
Pin Signal                         Pin Signal                        
No. Name                           No. Name                          
  1 KPR                              23 KPR                           
  2 KPR                              24 TDO                           
  3 KPR                              25 GND                           
  4 GND                              26 VCCIO-3.3                     
  5 KPR                              27 KPR                           
  6 KPR                              28 PWMP                          
  7 VCCIO-3.3                        29 PWMN                          
  8 KPR                              30 KPR                           
  9 TDI                              31 KPR                           
 10 TMS                              32 D5                            
 11 TCK                              33 D4                            
 12 XTALIN                           34 D3                            
 13 KPR                              35 VCCAUX                        
 14 XTALOUT2                         36 D2                            
 15 VCC                              37 D1                            
 16 KPR                              38 D0                            
 17 GND                              39 KPR                           
 18 XTALOUT1                         40 KPR                           
 19 KPR                              41 KPR                           
 20 KPR                              42 KPR                           
 21 KPR                              43 KPR                           
 22 KPR                              44 KPR                           
Legend : NC = Not Connected, unbonded pin PGND = Unused I/O configured as additional Ground pin KPR = Unused I/O with weak keeper (leave unconnected) WPU = Unused I/O with weak pull up (leave unconnected) TIE = Unused I/O floating -- must tie to VCC, GND or other signal VCC = Dedicated Power Pin VCCAUX = Power supply for JTAG pins VCCIO-3.3 = I/O supply voltage for LVTTL, LVCMOS33, SSTL3_I VCCIO-2.5 = I/O supply voltage for LVCMOS25, SSTL2_I VCCIO-1.8 = I/O supply voltage for LVCMOS18 VCCIO-1.5 = I/O supply voltage for LVCMOS15, HSTL_I VREF = Reference voltage for indicated input standard *VREF = Reference voltage pin selected by software GND = Dedicated Ground Pin TDI = Test Data In, JTAG pin TDO = Test Data Out, JTAG pin TCK = Test Clock, JTAG pin TMS = Test Mode Select, JTAG pin PROHIBITED = User reserved pin
 
****************************  Compiler Options  ****************************
Following is a list of all global compiler options used by the fitter run.
 
Device(s) Specified                         : xc2c64a-7-VQ44
Optimization Method                         : DENSITY
Multi-Level Logic Optimization              : ON
Ignore Timing Specifications                : OFF
Default Register Power Up Value             : LOW
Keep User Location Constraints              : ON
What-You-See-Is-What-You-Get                : OFF
Exhaustive Fitting                          : OFF
Keep Unused Inputs                          : OFF
Slew Rate                                   : FAST
Set Unused I/O Pin Termination              : KEEPER
Global Clock Optimization                   : ON
Global Set/Reset Optimization               : ON
Global Ouput Enable Optimization            : ON
Enable Input Registers                      : ON
Function Block Fan-in Limit                 : 38
Use DATA_GATE Attribute                     : ON
Set Tristate Outputs to Termination Mode    : KEEPER
Default Voltage Standard for All Outputs    : LVCMOS18
Input Limit                                 : 32
Pterm Limit                                 : 28

[Реализация на VHDL]

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

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.numeric_std.all;
use IEEE.std_logic_arith.all;
 
entity top is
    Port ( XTALIN : in  STD_LOGIC;
           XTALOUT1: out STD_LOGIC;
           XTALOUT2: out STD_LOGIC;
           D : in  STD_LOGIC_VECTOR (5 downto 0);
           PWMP : out  STD_LOGIC;
           PWMN : out  STD_LOGIC);
end top;
 
architecture Behavioral of top is
signal COUNT : unsigned ( 5 downto 0 );
signal CLK: STD_LOGIC;
 
begin
CLK <= not XTALIN;
XTALOUT1 <= CLK;
XTALOUT2 <= not CLK;
 
process (CLK)begin
   if CLK'event and CLK='1' then
      COUNT <= COUNT + 1;
   end if;
end process;
 
PWMP <= '0' when std_logic_vector(COUNT) < D else '1';
PWMN <= '0' when std_logic_vector(COUNT) >= D else '1';
 
end Behavioral;

Различия по используемым ресурсам CPLD для схематической реализации и реализации на VHDL я для сравнения свел в таблицу. 

Реализация Mcells FB Inps Pterms IO CTC CTR CTS CTE
Схема 14/64 28/160 42/224 4/33 1/4 0/4 0/4 0/4
VHDL 12/64 17/160 21/224 4/33 1/4 0/4 0/4 0/4

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

[Реализация на Verilog]

Тот же самый проект, но реализованный на Verilog.

`timescale 1ns / 1ps

module top(
    input XTALIN,
    output XTALOUT1,
    output XTALOUT2,
    output PWMP,
    output PWMN,
    input [5:0] D
    );

wire clk;
reg [5:0] counter;

assign clk = !XTALIN;
assign XTALOUT1 = clk;
assign XTALOUT2 = !clk;

always @(posedge clk)
begin
	counter = counter + 1;
end

wire [5:0] diff = counter-D;
wire sign = diff[5];
assign PWMP = diff?0:1;
assign PWMN = !PWMP;

endmodule

Интересно, что реализация на Verilog по некоторым параметрам обошла реализацию на VHDL.

Реализация Mcells FB Inps Pterms IO CTC CTR CTS CTE
Verilog 10/64 20/160 20/224 4/33 1/4 0/4 0/4 0/4
VHDL 12/64 17/160 21/224 4/33 1/4 0/4 0/4 0/4

[Ссылки]

1. Как установить Xilinx ISE Design Tools.
2. Разработка цифровых устройств на основе ПЛИС Xilinx с применением языка VHDL. И. Е. Тарасов, 2-е издание, 2016 г.
3. 171111hello-world.zip - исходный код (проект ISE WebPack 14.1), документация.
4WebPack ISE: быстрый старт.

 
Top of Page