Как мне скомпилировать и запустить программу VHDL на Mac с помощью ghdl?
Я только что написал простую программу VHDL. Я сохранил файл как VHD-файл. Затем я скомпилировал это с
ghdl -a test.vhd
а затем встроенный и исполняемый файл с
ghdl -e test
И наконец попытался запустить его с
ghdl -r test
То, что случилось, - то, что у меня теперь есть work-obj93.cf
видимый файл и два других файла, а именно ..
а также .
которые как-то невидимы.
Может кто-нибудь сказать, как именно я могу проверить программу VHDL на моем Mac? Может быть, в сочетании с GTKWave.
3 ответа
Это, как говорится, большой вопрос!
Существует версия ghdl для OS X, работающая на процессорах Intel для версий 10.5, 10.6,10.7 и 10.8, доступная по http://ghdl.free.fr/ (может быть загружена в GHDL для Mac OS X). Это версия mcode (как в Windows), что означает, что она не создает объектных кодов или отдельного исполняемого файла модели VHDL, в результате чего вы не можете привязать к ней посторонние объекты (подпрограммы).
Разработанная модель существует только в памяти во время выполнения, и сложная команда -e является излишней, кроме записи в файле.cf рабочей библиотеки. В версии ghdl для mcode также используется команда -r run. Все, что вы увидите, это файл work-obj93.cf для рабочего каталога и любые файлы.cf для предварительно проанализированных библиотек, по умолчанию они будут отображаться в /usr/local/ghdl/library, исполняемый файл ghdl находится в /usr/local/bin ссылается на /usr/local/ghdl/translate/ghdldrv/ghdl_mcode, а / usr / local / ghdl представляет собой урезанное дерево, полученное в результате компиляции версии ghdl_mcode.
Эта версия является производной от svn129 (после выпуска ghdl-0.29) и содержит двоичный файл i386.
Документация для ghdl находится в /usr/local/ghdl/doc/, есть страница руководства ghdl, которая связана в другом месте, ghdl.html и ghdl.texi, которые являются руководством ghdl и не связаны в другом месте. В ghdl.html вы можете искать каждое вхождение "Windows", чтобы найти ссылку на версию mcode. В качестве недосмотра я не подумал изменить руководство ghdl, включив в него слово mcode, где бы ни появлялась Windows, и выпустить измененное руководство.
Где бы ни появлялось "Windows", его следует читать как "Windows или другая версия mcode".
В руководстве по ghdl см. 1.3. Что такое GHDL?, (версия GHDL для Windows (TM) основана не на GCC, а на внутреннем генераторе кода). Также 2.1 Программа Hello World:
2.1 The hello world program
Чтобы проиллюстрировать большую цель VHDL, вот программа VHDL "Hello world" с комментариями.
-- Hello world program.
use std.textio.all; -- Imports the standard textio package.
-- Defines a design entity, without any ports.
entity hello_world is
end hello_world;
architecture behaviour of hello_world is
begin
process
variable l : line;
begin
write (l, String'("Hello world!"));
writeline (output, l);
wait;
end process;
end behaviour;
Предположим, эта программа содержится в файле hello.vhdl. Сначала вы должны скомпилировать файл; это называется анализ файла проекта в терминах VHDL.
$ ghdl -a hello.vhdl
Эта команда создает или обновляет файл work-obj93.cf, который описывает библиотеку 'работа'. В GNU/Linux эта команда генерирует файл hello.o, который является объектным файлом, соответствующим вашей программе VHDL. Объектный файл не создается в Windows.
Затем вы должны создать исполняемый файл.
$ ghdl -e hello_world
Опция "-e" означает "сложный". С этой опцией GHDL создает код для разработки дизайна, с сущностью 'hello' в верхней части иерархии.
В GNU/Linux результатом является исполняемая программа hello, которую можно запустить:
$ ghdl -r hello_world
или напрямую:
$ ./hello_world
В Windows файл не создается. Симуляция запускается с помощью этой команды:
> ghdl -r hello_world
Результат симуляции появится на экране:
Hello world!
Сохранение исходного кода команды hello_world в файл hello.vhdl и выполнение команд:
david_koontz @ Macbook: ghdl -a hello.vhdl
david_koontz @ Macbook: ghdl -e hello_world
david_koontz @ Macbook: ghdl -r hello_world
Урожайность:
Привет, мир!
на стандартный вывод (сеанс TTY в окне вашего терминала).
В результате вы получите файл конфигурации библиотеки work-obj93.cf в текущем рабочем каталоге и никаких других выходных файлов. Вы также захотите понять значение команды -r run (раздел 3.1.3), так как необязательный дополнительный модуль, передаваемый в командной строке, по умолчанию VHDL использует последнюю скомпилированную архитектуру.
Получив gtkwave gtkwave.app от Тони Байбелла, документация находится в /Applications/gtkwave.app/Contents/Resources/doc, как исходный файл.odt, так и файл PDF. (Вы можете выбрать приложение в папке "Приложения" и "Показать содержимое пакета", чтобы перейти к каталогу документов).
Существует уникальный для ghdl формат сигнала, называемый ghw, который можно вызвать с помощью параметра команды запуска '--wave=.ghw'. См. Руководство ghdl 4.1 Опции моделирования. Также посмотрите параметры vcd в этом каталоге, если вы решите использовать вместо этого VCD.
Вы также должны ограничить продолжительность времени работы с помощью защитного таймера, если на вашем испытательном стенде будут установлены часы свободного хода. VHDL прекратит выполнение только тогда, когда больше не будет запланированных обновлений сигналов или не истечет максимальное время выполнения. Это опция запуска команды в соответствии с параметром --stop-time=587200ns.
OS X gtkwave.app чувствителен к двум типам файлов с расширениями.ghw и.gtkw, первый файл дампа формы волны ghdl, второй файл конфигурации gtkwave с суффиксом OS X, позволяющим вызывать gtkwave, щелкая файл gtkw. Файл конфигурации должен быть сохранен после настройки отображения формы волны в gtkwave до его появления. Смотрите руководство по gtkwave. Можно щелкнуть файл ghw, и в gtkwave есть набор правил, используемых для поиска соответствующего файла gtkw.
Есть несколько преимуществ использования формата файла ghw. Автоматический вызов приложения gtkwave при нажатии на файлы - один. Другая причина в том, что ghdl сохраняет все сигнальные транзакции в своем файле дампа ghw. Вы всегда можете выбрать больше в gtkwave для отображения дополнительной информации. Хотя это может быть недостатком в больших моделях, формат ghw позволяет отображать литералы перечисления любого типа или подтипа.
Присоединение к списку обсуждений GHDL и размещение вопроса - хороший способ привлечь внимание эксперта GHDL. (И да, срок действия сертификата для gna.org истек или является недействительным). Тони Байбелл предоставляет контакт по электронной почте на веб-странице gtkwave, но необходимость оплачиваемой работы ограничивает его доступность.
Разработка примера использования ghdl и gtkwave.
Оригинальный плакат попросил несколько реальных примеров со значениями командной строки. Тем не менее, существует плохое руководство по GHDL/GTKWave (PDF, 234 КБ), которое содержит пример и использованный VCD.
Я перечислю командные строки для версии формата GHDL Waveform:
david_koontz @ Macbook: ghdl -a CarryRipple.vhd
david_koontz @ Macbook: ghdl -a CarryRipple_tb.vhd
david_koontz @ Macbook: ghdl -e carryRipple_tb
david_koontz @ Macbook: ghdl -r carryRipple_tb --wave = carryRipple_tb.ghw
Вызвать gtkwave.app можно либо щелкнув по полученному результату carryRipple_tb.ghw, либо используя команду open OS X:
david_koontz @ Macbook: открыть -a gtkwave carryRipple_tb.ghw
Окно SST в Gtkwave (вверху слева) будет отображаться сверху, развернув его, щелкнув поле +. Сделайте то же самое для раскрытого carryripple_tb. Нажмите. В окне сигналов выберите [3:0] и нажмите кнопку вставки. Повторите для б.
В окне SST выберите U0, а затем в окне сигналов выберите cin, нажмите кнопку вставки, затем то же самое для cout.
В окне SST выберите s, а в окне сигналов выберите s[3:0] и нажмите insert.
И да, получение исходного кода для двух файлов VHDL из "учебника" было болезненным. Я этого не делал.
Вы также можете отметить назначение 'X' для Cin при 60 нс на дисплее gtkwave, я сделал это, чтобы показать последние значения, назначенные в тестовом стенде.
Я бы не стал утверждать, что это хороший учебник, но вы получаете то, за что заплатили здесь. Делать лучше было бы большим вопросом.
Испытательный стенд (carryRipple_tb.vhd) стимулирует управление моделью (CarryRipple.vhd) во время моделирования. Модель прекращает выполнение после последнего сигнального события, поэтому нет необходимости передавать время остановки команде запуска (например, --stop-time=587200ns).
Есть также пять частей GHDL/GTKWave Tutorial на Youtube Чеда Керси. Разрешение не очень хорошее, и оно ориентировано на Linux. Часть 0 посвящена установке двух инструментов. Единственное реальное отличие в моем примере - использование формата волны ghw. Большинство браузеров позволяют вам видеть окно gtkwave, снятое ниже, в полном размере.
добавленной
Есть недавний ответ, показывающий демонстрацию с Toggle Flip Flop, показывающую ошибку в исходном коде VHDL, и три возможных исправления. Он использует объявления конфигурации для запуска различных фиксированных версий. Посмотрите, как избежать задержки в выводе простого оператора процесса в VHDL.
Новая версия GHDL для Mac OS X gcc
Существует новая версия ghdl, доступная из https://sourceforge.net/projects/ghdl-updates/files/Builds/ghdl-0.31/OSX/, версии gcc, которая включает версию mcode.
Известно, что он работает только на OS X 10.9, но я думаю, что он будет работать на OS X 10.8, если Xcode и его инструменты командной строки были установлены - версия gcc в настоящее время зависит от / usr / bin / as и / usr / bin / ld, которые часть пакета базовых компонентов, устанавливающего OS X 10.9 и доступного путем установки инструментов командной строки Xcode в OS X 10.8.
Как только эта версия ghdl установлена, в терминале вы можете
info ghdl
Прокрутите вниз, чтобы начать с GHDL, нажав возврат каретки. Прокрутите вниз до программ Hello World (возврат каретки), Полный сумматор (возврат каретки) или Начиная с дизайна (возврат каретки). Первая - это программа VHDL hello world, вторая - однобитный сумматор с тестовым стендом. Начало работы с дизайном приводит вас к ссылке для загрузки и указаниям по моделированию процессора DLX.
Я планирую разработать версию ghdl 10.6 - 10.9 gcc, которая не зависит от Xcode для 10.6 - 10.8 и работает на 10.9. Скорее всего, это будет версия 0.32 ghdl.
Gtkwave.app Тони Байбелла работает на OS X 10.6 - 10.9 и доступен вместе с руководством на странице GTKWave SourceForge. Последнюю версию приложения можно скачать по этой ссылке на Sourceforge - gtkwave.zip.
На YouTube доступно несколько учебных пособий по ghdl / gtkwave, хотя ни одно из них не относится к OS X, попробуйте поискать в Google.
У ghdl есть свой собственный формат gtkwave, GHW, который поддерживает VHDL и позволяет вам просматривать сложные составные типы. ghdl-0.33, вероятно, будет также включать поддержку формата FSB Тони Бибелла.
Более искушенный может собрать ghdl с нуля на OS X, см. Инструкции по сборке ghdl-0.31 с gcc4.8.2 на OS X 10.9. Сборка с gcc4.9.1 потребует релиз ghdl-0.32, доступный из архива Mercurial, найденного здесь. Когда выйдет версия ghdl-0.32, двоичные файлы также будут доступны от Sourceforge.
Ghdl-updates на сайте Sourceforge - это место, где ведется работа по разработке ghdl автором ghdl Тристаном Гингольдом.
Помимо присоединения к списку обсуждений ghdl или просмотра его архивов, вы можете отправлять отчеты об ошибках на странице заявок ghdl-updates, где вы можете просматривать как открытые, так и закрытые вопросы.
Будущее развития для GHDL ярко. Ожидается, что будущие выпуски будут сосредоточены на соответствии IEEE Std 1076-2008 на ближайшее будущее. Существует также развитие использования ghdl в качестве внешнего интерфейса llvm, а также чисто интерпретирующей версии для замены ghdl-mcode.
В бинарных выпусках ghdl и gtkwave возможно отделить пользователя от разработчика.
Я использую UMHDL на моей MacOS High Sierra, и это работает как шарм.
Было сложно связать GHDL и GTKWave с UMHDL, но я понял.
Я не знаю, относится ли это именно к этой дискуссии. Однако я очень рад, что мне удалось установить GHDL на мой Mac, El Capitan, сегодня. Я скачал последнюю версию GHDL с ghdl.free.fr для Mac, и все установлено нормально. Я получил сообщение о том, что объектные файлы были более новым форматом или что-то в этом роде. Тем не менее, мой VHDL-код скомпилирован.
У меня была проблема при попытке скомпилировать тестовый стенд для указанного VHDL-кода. Когда я скомпилировал их отдельно, я получил сообщения об ошибках. Когда я собрал их вместе, это
ghdl -a code.vhdl code_tb.vhdl
все работало так, как вы ожидаете.
ghdl -e code_tb
работал и так сделал
ghdl -r code_tb --vcd=code.vcd
Поэтому, возможно, возникла проблема с компиляцией vhdl. В моем случае, в отличие от Ubuntu, мне пришлось вместе анализировать code.vhdl и code_tb.vhdl. Возможно, это может быть полезно для будущих читателей.