#vhdl
#vhdl
Вопрос:
С помощью Ada я могу разделить свои модульные блоки на спецификации и тело с помощью файлов .ads и .adb.
Возможно ли разделить сущность и архитектуру VHDL? Если да, существует ли соглашение об именовании или рекомендуемый стиль для этого? И могут ли объекты быть размещены в пользовательской библиотеке / пакете?
Ответ №1:
Библиотеки
Все компилируется в библиотеку. По умолчанию это называется «работа», но вы можете переопределить это. Мне редко приходится это использовать — иногда это полезно с внешним IP, если возникают конфликты в пространстве имен. Как прокомментировал Чиггс, использование библиотек для создания пространств имен является хорошей практикой. Теперь большинство синтезаторов могут работать с несколькими библиотеками, хотя так было не всегда. Все симуляторы могут (насколько я знаю). При их настройке также возникает немного больше проблем (вы должны сообщить компилятору, где они все находятся).
может быть, пример — скажем, у вас есть контроллер i2c и контроллер spi. Вы могли бы вызвать оба блока controller
и скомпилировать их в их собственные библиотеки с именами i2c
и spi
, а затем создать их экземпляры следующим образом:
i2c_instance:entity i2c.controller...etc
spi_instance:entity spi.controller...etc
или вы могли бы вызвать их i2c_controller
и spi_controller
и сделать:
i2c_instance:entity work.i2c_controller...etc
spi_instance:entity work.spi_controller...etc
И библиотеки не являются «точно такими же», как папки на жестком диске. Они управляются компилятором VHDL, поэтому вы создаете и сопоставляете их, используя любой синтаксис, используемый инструментом.
Например, с помощью Modelsim vlib
создает библиотеку в определенном месте файловой системы (так что на данный момент она выглядит как папка) и vmap
сообщает компилятору, как сопоставить use some_lib;
предложение с определенным битом файловой системы.
Объекты, архитектуры, пакеты
Вы можете разделить свой объект и архитектуру (или даже более одной архитектуры на объект) на несколько файлов или сохранить их в одном файле. Сохранение architecture
в отдельном файле означает, что при его перекомпиляции вы не перекомпилируете entity
, что означает, что вам не нужно перекомпилировать все, что создает его экземпляр.
Аналогично с packages
и package body
s -телами в отдельном файле означает, что вы можете просто перекомпилировать эту часть, не перекомпилируя все остальное. Обратите внимание, что package
s не предназначены для ввода объектов.
(В стороне — в Modelsim есть -just
переключатель, который позволяет вам хранить все в одном файле и просто компилировать выбранные фрагменты файлов, например, только architecture
и / или body
части)
Краткие сведения
- Скомпилируйте повторно используемые ядра в их собственную библиотеку для защиты своего пространства имен
- Скомпилируйте все остальное в
work
библиотеку - Помещайте полезные константы, функции, процедуры, определения типов в один или несколько пакетов
- Помещение объектов и архитектур в один или несколько файлов — это вопрос вкуса и стиля разработки больше, чем что-либо другое
- Помещение пакетов и их тел в один или несколько файлов — это вопрос вкуса и стиля разработки больше, чем что-либо другое
Комментарии:
1. Скомпилируйте все в рабочую библиотеку (если у вас нет веских причин не делать этого) Вынужден не согласиться с этим утверждением — неспособность использовать пространства имен (хорошая практика) вернется к вам только тогда, когда дизайн расширится или вы захотите повторно использовать некоторые модули. Я бы посоветовал скомпилировать все в библиотеки с соответствующими именами и использовать прямое создание экземпляров объектов:
library i2c; i_i2c_controller : entity i2c.controller
2. @Chiggs Есть потенциальная веская причина не делать этого тогда 🙂 Мне никогда не приходилось, и я повторно использовал целую кучу кода. Поддержка нерабочих библиотек средствами синтеза может быть неполной, вот почему я избегал этого в прошлом. Я обновлю ответ…
3. Я думаю, что популярные цепочки инструментов довольны библиотеками — в конце концов, прошло всего 18 лет с тех пор, как они были представлены на VHDL! Ada95 представила поддержку иерархической библиотеки, которая, я надеюсь, перейдет в VHDL
4. Я знаю, что XST не было в прошлом (не уверен насчет сейчас) — Но я согласен, они должны быть 🙂 Мне также нравятся ваши предложения по иерархии и переименованию!
5. Обсуждение достоинств библиотек: velocityreviews.com/forums/t522692-use-of-libraries.html
Ответ №2:
Объект и архитектура являются отдельными единицами проектирования. Они могут находиться в одном файле или в отдельных файлах. Расширения файлов остаются прежними: обычно, .vhd
но .vhdl
также возможно. Для имен файлов не существует общепринятого соглашения об именовании. (На самом деле существуют сотни соглашений, так что это так же полезно, как и отсутствие соглашений вообще) Работает все; в качестве примера вы могли бы использовать myEntity.vhd
и myEntity_RTL.vhd
.
Вы можете компилировать объекты и архитектуры, которые вы пишете в своей собственной библиотеке. В качестве названия библиотеки можно использовать название вашей компании.
Однако не путайте библиотеки с пакетами! Пакет — это модуль компиляции, который содержит повторно используемые объявления. Библиотека — это именованный набор единиц компиляции.
Комментарии:
1. Значит, пакет предназначен только для функций типов данных? А библиотека предназначена для объектов и архитектур? Например, с помощью Modelsim я могу создать новую библиотеку, которая по сути является просто каталогом на жестком диске. Если мой исходный код VHDL находится внутри этого каталога, включается ли он автоматически в библиотеку? Должен ли я писать какую-то спецификацию библиотеки?
2. Библиотеки не обязательно соответствуют папкам на вашем диске. Библиотеки содержат объекты, архитектуры, пакеты, тела пакетов и /или конфигурации. Вы указываете ModelSim, в какой библиотеке находится данный файл, в командной строке:
vcom -work myLibrary myFile.vhd