Используйте диалог 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 в качестве модуля исходного кода верхнего уровня для Вашего проекта.
Следующее окно задает свойства проекта, такие как семейство и тип микросхемы, тип корпуса, скорость, инструмент синтеза и т. д.
Используйте диалог свойств проекта для ввода устройства и другой информации.
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.
После клика на кнопке Finish откроется окно пустого проекта.
3. Выберите в меню Project -> New Source...
Здесь нас интересует тип Schematic. Выберите его, введите в поле "File Name" имя модуля (я ввел имя top), кликните Next и OK.
Я не случайно назвал этот модуль "top". Это особый модуль проекта, так называемый модуль верхнего уровня. Если сравнивать с языками программирования C/C++, то это аналог модуля исходного кода, где находится функция main. Известно, что такой модуль исходного кода на C/C++ может быть только один, то же самое и здесь - в проектах, которые содержат одну микросхему CPLD или FPGA, может быть только один модуль верхнего уровня. В простых проектах вся логика может содержаться только в этом модуле, в более сложных к нему в качестве подчиненных могут быть добавлены дополнительные модули.
В нашем случае мы создаем в качестве учебного примера простой логический элемент 2И-НЕ, поэтому будет только один модуль, модуль верхнего уровня, именно поэтому я и назвал его "top" (получится файл top.sch).
4. После создания нового модуля схемы откроется окно редактора схемы (Schematic Editor) с пустой схемой.
Если текущий инструмент редактора Select (кнопка со стрелкой), то закладка Options покажет возможный выбор опций для этого инструмента.
Настройка выбора объектов
Когда выполняете клик на ветке: • выбирается вся ветка • выбирается её сегмент
Когда перемещаете объект: • соединения с другими объектами сохраняются • соединения разрываются
Выбор через прямоугольную область: • выбирается то, что попадает внутрь целиком • выбирается все, что касается области
Выбор через прямоугольную область: • выбираются объекты, включая окна атрибутов • выбираются объекты, исключая окна атрибутов • только окна атрибутов
5. Перейдите на закладку Symbols. Для начала давайте создадим простейший логический элемент, как в старой доброй микросхеме К155ЛА3, т. е. 2И-НЕ. Для этого нам понадобится инструмент Add Symbol.
Слева в разделе Categories выберите пункт Logic, чуть ниже в разделе Symbols выберите nand2, переведите курсор мыши в правую часть окна - возле курсора появится символ логического элемента, который можно вставить в схему.
Кликните на любое место чертежа, на схему будет добавлен элемент NAND2. Колесиком мыши можно приближать и удалять (zoom) отображаемое поле схемы.
6. Логический элемент создан, теперь нужно его входы и выходы подключить к выводам реального чипа. Для этого сначала нужно к выводам подключить соединительные провода, что делается кнопкой Add Wire.
Если текущий инструмент редактора Add Wire, то закладка Options покажет возможный выбор опций для этого инструмента.
Опции добавления соединений
При добавлении соединений: • использовать автороутер для добавления одного или большего числа сегментов между точками соединения • вручную рисовать сегменты
При соединении с символом вывода автоматически добавлять ввод в шину между шиной и сигналом.
Для соединения двух точек схемы используйте клик левой кнопкой мыши на начальной точке, перетаскивание и отпускание левой кнопки на конечной точке. Используйте последовательные клики, чтобы задавать отдельные сегменты проводника. Двойным кликом завершайте ввод соединения.
Добавьте проводники, получится примерно так:
7. Подключение буферов ввода-вывода. Снова выберите инструмент Add Symbol, и перейдите в категорию символов IO, и подключите ко входам символ ibuf, а к выходу символ obuf. Получится вот такая схема:
Примечание: ISE позволяет пропустить этот шаг, поскольку настройки компиляции по умолчанию автоматически добавят буферы IO на завершающих шагах компиляции проекта.
8. Размещение маркеров ввода/вывода. Для этого служит инструмент Add IO Marker.
Если текущий инструмент редактора Add IO Marker, то закладка Options покажет возможный выбор опций для этого инструмента.
Опции добавления маркера порта ввода/вывода
При клике на конце ветви: • автоматически определять тип добавляемого маркера • добавлять маркер входа • добавлять маркер выхода • добавлять маркер двунаправленного сигнала • удалять маркер
Когда добавляете маркер, то ориентация направления: • маркер ориентируется автоматически • маркер ориентируется вниз • маркер ориентируется влево • маркер ориентируется вправо • маркер ориентируется вверх
В дополнение к кликам на конце ветви Вы можете выделить курсором мыши прямоугольную область вокруг одной или большего количества точек окончания ветви, чтобы добавить или удалить маркеры I/O в этих точках.
Получится примерно следующая схема:
9. Назначение имен сигналов схемы. Сейчас пока что на маркерах проставлены имена, назначенные автоматически. Чтобы дать более осмысленные названия, двойным кликом на маркере можно отредактировать эти значения.
Внешний вид завершенной схемы:
10. Для того, чтобы маркеры IO соответствовали именно тем ножкам чипа, которые нам нужны, следует добавить в проект новый файл, так называемый файл ограничений реализации (Implementations Constraints File). Выберите в меню Project -> New Source..., и в качестве типа файла укажите Implementations Constraints File. Дайте имя для файла, для простоты я назвал его pins.
Примечание: термин "файл ограничений пользователя" (User Comstraints File, UCF) поначалу вводит начинающего пользователя в заблуждение, поскольку для него трудно ожидать, что этот файл задает привязку создаваемой логики к выводам корпуса микросхемы. Но на самом деле это действительно ограничения, потому что требует от системы синтеза и разводки определенным образом прокладывать на кристалле логические связи. При отсутствии таких ограничений разводка может быть сделана более оптимально - либо с минимальными задержками, либо с минимальной тратой ресурсов микросхемы. Кроме того, файл UCF также может вводить ограничения на интервалы времени (в этом обзоре такие ограничения не рассматриваются).
Файл получит расширение *.ucf (сокращение от User Constraints File), и он будет размещен в дереве иерархии проекта (Design Hierarchy) как дочерний по отношению к файлу top.
Это простой текстовый файл, в котором можно вручную прописать назначение определенных цепей нужным ножкам микросхемы. Предположим, что нужно сделать такое подключение цепей (цоколевку используемой микросхемы можно посмотреть в даташите):
Имя сигнала
Банк_Номер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.
4. Сделайте двойной клик курсором мыши на пункт Floorplan IO - Pre-Synthesis. Откроется окно запроса "Этот процесс требует добавления файла UCF к проекту и привязки его к выбранному модулю проекта. Хотите ли Вы, чтобы Project Navigator автоматически создал UCF и добавил его к проекту? Если выберете 'No', то Вам нужно будет создать или добавить существующий файл UCF к проекту перед тем, как запустить этот процесс."
Выберите Yes, будет автоматически создан файл UCF (для нашего примера это top.ucf) и добавлен к проекту. Также запустится окно редактора Xilinx PACE.
5. С помощью этого редактора можно очень удобно создавать файл ограничений реализации UCF. В окошке Design Object List показана таблица с сигналами нашей схемы (IN1, IN2, OUT1), где можно редактировать привязку этих сигналов к внешним выводам корпуса и их атрибуты, а справа окно Package Pins дает подсказку по именам выводов (P1..P44).
Через меню View -> Toolbars -> Legend (Ctrl+L) можно открыть легенду обозначения выводов выбранной микросхемы (Package Pin Legend).
6. Редактированием столбца Loc таблицы Design Object List делается привязка сигналов к выводам:
Обратите внимание, что после редактирования поменялась картинка Package Pins, на ней синим цветом закрашиваются выбранные выводы корпуса. Косой черной штриховкой обозначен текущий редактируемый сигнал в таблице (OUT1/P28).
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]).
В результате редактирования у меня получилась такая таблица:
8. Сохраните UCF выбором в меню File -> Save. Откроется оно запроса Bus Delimiter, оставьте там все по умолчанию и кликните OK.
На диске в корневой папке проекта обновится файл ограничений. У меня получился следующий файл:
#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.
Зеленые кружки с галочками показывают, что все соответствующие процессы завершены успешно.
[Запись полученной программы в микросхему]
Осталось теперь запрограммировать нашу микросхему XC2C64A.
12. Подключите адаптер Xilinx Program Cable USB к компьютеру и к программируемому устройству через JTAG. На адаптере светодиод должен загореться красным, сигнализируя об успешном подключении к порту USB. Подайте питание 3.3V на программируемую микросхему (у нас это CPLD XC2C64A. На адаптере светодиод поменяет цвет на зеленый, показывая тем самым, что питание на микросхему подано, и железо готово к работе.
13. Выберите в меню Tools -> iMPACT..., запустится окно утилиты программатора. При первом запуске утилиты iMPACT откроется предупреждение, что пока что не существует файл проекта.
14. Выберите в меню Edit -> Launch Wizard..., откроется окно Welcome to iMPACT.
Оставьте выбранным первый вариант "Configure devices using Boundary-Scan chain -> Automatically connect to a cable and identify Boundary-Scan chain", кликните OK.
15. Через несколько секунд автоматически будет обнаружена JTAG-цепь подключенной микросхемы XC2C64A, и будет выведено сообщение "Identify Succeeded". Окно утилиты iMPACT поменяется, справа символически будет показана детектированная цепочка JTAG, состоящая из одной нашей микросхемы.
Примечание: при наличии проблем с подключением выберите Output -> Cable Setup..., откроется диалог настройки подключения к адаптеру Xilinx Program Cable (программатор JTAG). Радиокнопками Communication Mode выберите тип кабеля (мой кабель, купленный на aliexpress, соответствует варианту Platform Cable USB/II) и кликните OK.
16. После детектирования цепочки JTAG мастер отобразит окно запроса "Auto Assign Configuration Files Query Dialog" (Вы хотите продолжить и назначить файл (файлы) конфигурации?):
Кликните Yes, откроется окно выбора файла, выберите файл top.jed, находящийся в корневой папке проекта, он добавится в проект iMPACT, и откроется окно Device Programming Properties для настройки цепочки JTAG.
Ничего менять в этом окне не надо, просто нажмите OK.
17. Кликните на микросхему, слева будет показан список возможных операций над ней. Кликните на Program. Через несколько секунд микросхема запрограммируется, и будет готова к работе.
Сохраните файл проекта iMPACT (файл с расширением *.ipf).
[Проверка результата]
Для проверки, как работает мой логический элемент 2И-НЕ, я собрал вот такой стенд:
Для подачи логических сигналов на входы использовались DIP-переключатели, и состояние уровня показывал зеленый светодиод. Схема для одного входа:
Для оценки выходного сигнала использовался красный светодиод, включенный вот по такой схеме:
После программирования созданный элемент 2И-НЕ работает как полагается:
На входах 00, красный светодиод горит, показывая на выходе 1
На входах 01, красный светодиод горит, показывая на выходе 1
На входах 10, красный светодиод горит, показывая на выходе 1
На входах 11, красный светодиод погас, показывая на выходе 0
RC-генератор можно сделать по классической схеме, с помощью двух инверторов (категория Logic, символ inv), одного входного буфера, двух выходных буферов (категория Buffer, символы ibuf и obuf соответственно), и подключенных снаружи резистора и конденсатора.
Пример таблицы настроек портов в программе ISE PACE и соответствующий файл UCF:
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 МГц. Если установить кварцевый резонатор вместо конденсатора, то получится кварцевый генератор, работающий на стабильной частоте.
Соответствующий автоматически сгенерированный код на языке VHDL (файл top.vhd):
architectureBEHAVIORALoftopisattribute BOX_TYPE :string ;
signal XLXN_25 :std_logic;
signal XLXN_58 :std_logic;
signal XLXN_61 :std_logic;
componentIBUFport ( I :instd_logic;
O :outstd_logic);
endcomponent;
attribute BOX_TYPE of IBUF :componentis"BLACK_BOX";
componentOBUFport ( I :instd_logic;
O :outstd_logic);
endcomponent;
attribute BOX_TYPE of OBUF :componentis"BLACK_BOX";
componentINVport ( I :instd_logic;
O :outstd_logic);
endcomponent;
attribute BOX_TYPE of INV :componentis"BLACK_BOX";
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
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
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
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. Код, написанный вручную, получается намного проще автоматически сгенерированного из схемы, хотя он выполняет те же самые функции:
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.numeric_std.all;
useIEEE.std_logic_arith.all;
entitytopisPort ( XTALIN :inSTD_LOGIC;
XTALOUT1:outSTD_LOGIC;
XTALOUT2:outSTD_LOGIC;
D :inSTD_LOGIC_VECTOR (5downto0);
PWMP :outSTD_LOGIC;
PWMN :outSTD_LOGIC);
endtop;
architectureBehavioraloftopissignal COUNT : unsigned ( 5downto0 );
signal CLK:STD_LOGIC;
begin
CLK <=not XTALIN;
XTALOUT1 <= CLK;
XTALOUT2 <=not CLK;
process (CLK)beginif CLK'eventand CLK='1'then
COUNT <= COUNT +1;
endif;
endprocess;
PWMP <='0'whenstd_logic_vector(COUNT) < D else'1';
PWMN <='0'whenstd_logic_vector(COUNT) >= D else'1';
endBehavioral;
Различия по используемым ресурсам 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-термов.