Сущность и архитектура VHDL

С помощью Ada я могу разделить свои модульные блоки на спецификацию и тело с файлами .ads и .adb.

Можно ли разделить объект VHDL и архитектуру? Если да, то существует ли соглашение об именах или рекомендуемый стиль для этого? И можно ли разместить объекты в пользовательской библиотеке/пакете?


person Dr. Watson    schedule 22.05.2011    source источник


Ответы (2)


Библиотеки

Все компилируется в библиотеку. По умолчанию это называется «работа», но вы можете переопределить это. Однако мне редко приходится использовать это - иногда это полезно с внешним 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 bodys - тела в отдельном файле означают, что вы можете просто перекомпилировать эту часть, не перекомпилируя все остальное. Обратите внимание, что packages не предназначены для размещения сущностей.

(Кроме того, в Modelsim есть переключатель -just, который позволяет хранить все в одном файле и просто компилировать выбранные биты файлов, например, только части architecture и/или body))

Резюме

  • Скомпилируйте повторно используемые ядра в свою собственную библиотеку, чтобы защитить их пространство имен.
  • Скомпилируйте все остальное в библиотеку work
  • Поместите полезные константы, функции, процедуры, определения типов в один или несколько пакетов.
  • Помещение сущностей и архитектур в один или несколько файлов — это вопрос вкуса и стиля разработки в большей степени, чем что-либо еще.
  • Помещение пакетов и тел пакетов в один или несколько файлов — это вопрос вкуса и стиля разработки в большей степени, чем что-либо еще.
person Martin Thompson    schedule 23.05.2011
comment
Скомпилируйте все в рабочую библиотеку (если у вас нет веских причин не делать этого) Вынужден не согласиться с этим утверждением - отказ от использования пространств имен (хорошая практика) вернется и укусит вас только тогда, когда дизайн разрастется. или вы хотите повторно использовать некоторые модули. Я бы посоветовал скомпилировать все в библиотеки с соответствующими именами и использовать прямое создание объектов: library i2c; i_i2c_controller : entity i2c.controller - person Chiggs; 24.05.2011
comment
@Chiggs Есть потенциальная веская причина не делать этого :) Мне никогда не приходилось этого делать, и я повторно использовал целую кучу кода. Поддержка инструментами синтеза нерабочих библиотек может быть неравномерной, поэтому в прошлом я избегал этого. Я обновлю ответ... - person Martin Thompson; 24.05.2011
comment
Я думаю, что популярные наборы инструментов довольны библиотеками - в конце концов, прошло всего 18 лет с тех пор, как они познакомились с VHDL! В Ada95 появилась поддержка иерархических библиотек, которая, как я надеюсь, добавится в VHDL< /а> - person Chiggs; 24.05.2011
comment
Я знаю, что XST не было в прошлом (не уверен насчет сейчас) - но я согласен, они должны быть :) Мне также нравятся ваши предложения по иерархии и переименованию! - person Martin Thompson; 25.05.2011

Сущность и архитектура являются отдельными единицами дизайна. Они могут быть в одном файле или в разных файлах. Расширения файлов остаются прежними: обычно .vhd, но возможно и .vhdl. Для имен файлов не существует общепринятого соглашения об именовании. (На самом деле существуют сотни соглашений, так что это так же полезно, как и полное отсутствие соглашений) Все работает; например, вы можете использовать myEntity.vhd и myEntity_RTL.vhd.

Вы можете компилировать сущности и архитектуры, которые вы пишете, в своей собственной библиотеке. Вы можете использовать название вашей компании в качестве имени библиотеки.

Однако не путайте библиотеки с пакетами! Пакет — это единица компиляции, содержащая повторно используемые объявления. Библиотека — это именованный набор единиц компиляции.

person Philippe    schedule 22.05.2011
comment
Итак, пакет предназначен только для функций типов данных? А библиотека для сущностей и архитектур? Например, с помощью Modelsim я могу создать новую библиотеку, которая по сути представляет собой просто каталог на жестком диске. Если у меня есть исходный код VHDL в этом каталоге, включается ли он автоматически в библиотеку? Должен ли я писать какую-то спецификацию библиотеки? - person Dr. Watson; 22.05.2011
comment
Библиотеки не обязательно соответствуют папкам на вашем диске. Библиотеки содержат сущности, архитектуры, пакеты, тела пакетов и/или конфигурации. Вы сообщаете ModelSim, в какой библиотеке находится данный файл, в командной строке: vcom -work myLibrary myFile.vhd - person Philippe; 24.05.2011