Проектирование объектов и архитектуры VHDL

#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