Как сделать тестбенч в квартусе

Обновлено: 02.07.2024

Волею судьбы занят сейчас программированием ПЛИС компании Altera семейства Cyclone IV. А тут, как известно, рано или поздно встает вопрос о моделировании.
Вы возможно скажете: "Ну так бери ModelSim и моделируй". Только одна проблема! Я ленивый.

Мне нужно промоделировать блок у которого на вход приходит адрес (16 битное число) и сигнал CS, а на выход он выплевывает кучу разнообразных сигналов управления.
Но в данном контексте это не важно.
Важно то, что мне нужно перебрать кучу значений адреса, что довольно трудозатратно.
Но не беда! Просто сделаем так, чтобы ModelSim брал данные для симуляции из такого файла:

Исследуемый блок выглядит так:

Начнем делать наш Testbench.

Объявим пустой entity и библиотеки.

Приступим к архитектуре. Тут нужно обявить по сигналу для каждого входа/выхода и компонент.

Тут главное не пропустить декларацию файла.
Дальше создаем схему.

Тут тоже все просто. Соединяем наши сигналы со входами/выходами компонента.
А теперь вся магия.
Процесс загрузки данных из файла.

Тут мы построчно читаем файл. В каждой строке пропускаем все после диеза (это у нас символ комментария такой).
Дальше при помощи функции read читаем сигналы из строки. И если все хорошо (goodc и gooda в значении 1), то присваиваем считанные значения сигналам. После каждой такой процедуры ждем 10нс.

VHDL&Verilog

Олег Зайцев

Олег Зайцев запись закреплена

Здравствуйте. Подскажите, как ПРАВИЛЬНО сделать симуляцию в Modelsim-Altera. Проект мигания светодиода c частотой 2 Гц. Тестбенч создаю в Квартусе в Test Bench Template Writter(см приложение). Время симуляции ставлю Run simulation until all the vectors stimuli are used. В итоге в окне Wave рисует только 1 период clk (см картинку). В чем может быть проблема?

Сергей Коробов

поставь End simulation at и выбери просто время которое тебя устроит так будет проше

Раз уж в прошлой статье я начал рассказывать о принципах оцифровки и воспроизведения звука, то наверное можно и немного рассказать о самом проектировании на ПЛИС. Сегодня я покажу, как реализовать проект "с нуля" - безо всяких makefile и докеров - просто на запущенном Quartus Prime под Windows. Ну а поскольку последним проектом у меня была музыкальная шкатулка , то и продолжу я с той же ноты - сделаю мини-пиано для исполнения кусочка "в лесу родилась ёлочка".

Правда кнопки у меня на плате только 4, много не наиграешь.

Поскольку сегодня формат урока, то начнём с требуемых для его выполнения вещей. Урок ориентирован на Quartus, поэтому нужна плата с ПЛИС от фирмы Altera (выкуплена Intel-ом, так что новые уже идут под Intel-овским брендом). Продвигаемые самим Intel платы стоят как туалет на МКС, поэтому обратимся к китайцам. А китайцы в 2020 году внезапно решили, что на любой уважающей себя плате с ПЛИС обязательно должен быть RS-232 порт 🤦‍♂️ Вот тольку куда его пихать сегодня. И ладно бы поставили, так они его ставят вместо usb-uart интерфейсов, что совсем огорчает. Зачем они это сделали - непонятно, но если закрыть глаза на него, то вот эта плата выглядит неплохой:

У неё на борту разъём D-SUB (VGA) для подключения монитора, 7-сегментный индикатор, 8мб оперативки, 1кб eeprom (читай flash) и 2 мегабайта flash-памяти на конфигурационном хранилище (которое и как флешку тоже можно использовать), кнопочки и светодиодики. Главное - в комплекте идёт USB Blaster. Без него плату с компьютером вам не подружить (COM-порт на плате нельзя использовать для прошивки)

Более достойным вариантом я считаю вот эту плату .

Самое главное преимущество - куда как более жирный ПЛИС. на 15к логических элементов вместо 6к. Это значит, что проекты вы на нём сумеете запускать куда как более сложные. В 2 раза больший объём встроенной в ПЛИС оперативки: 504 к бит вместо 273 к бит . Количество ног в 4 раза больше. Так же на плате есть D-SUB, 7-сегментник (но только 3 разряда), тоже кнопочки и тоже светодиодики, 8мб флешки (теперь флешка одна на всё), целых 32 мб оперативки, гигабитный Ethernet! и usb-uart преобразователь. В целом - на порядок лучше предыдущей, хоть в комплекте и не идёт USB Blaster, нужно покупать отдельно .

Всё что я указывал - это ценовой диапазон "до 3 000 руб комплект" и с хорошей периферией на борту. Но Aliexpress в помощь, можно найти и вот такой вариант с новеньким Intel (уже Intel) Cyclone 10 на 16к логических элементов и модным HDMI . Или вот такая - пусть и не самая передовая, зато по-настоящему богатая на периферию. В целом - на любой вкус и цвет - такой он алик. Можно даже взять эконом-вариант: CPLD платку . Но нужно понимать, что тут всего 240 логических элементов и ни единого байта встроенной оперативки. Для примера - на всех остальных как минимум 6 000 логических элементов.

Сам я когда-то купил вот такую платку

Хоть и не всё на ней продумано, но в целом устраивает. Сегодня таких уже не найти.

Хватит о железках, пора качать Quartus. Если у вас Cyclone IV или новее, то качайте просто самую последнюю Lite версию. Она бесплатна. А вот с более старыми циклонами, придётся качать и более старый квартус. К примеру у меня валяется вот такая платка . Для неё идёт только Quartus 13 и старше. Даже Quartus 13.1 уже не подходит.

Так же приходится качать 13-й квартус и мне с моим USB Blaster-ом. Возможно китайцы сегодня пихают в них более новые прошивки, но мой на Windows напрочь отказывается дружить с драйверами, идущими в комплекте новых Quartus-ов. Хуже того, сочетание нового драйвера с этим USB Blaster-ом приводит к экранам смерти. Забавненько. Хотя мне от старого Quartus-а нужен только лишь драйвер из комплекта. Этот старый драйвер дружит и с виндой 10-кой (подписан, сертифицирован, все дела), и с новыми Quartus-ами и с моим USB Blaster-ом. Он идеален.

Но так как Quartus - штука проприетарная, то даже скачка превращается в квест. Обязательно надо зарегится. Без этого никак. Перейти на страницу скачки и выбрать последнюю версию в Lite исполнении. Качать всё не обязательно. Достаточно скачать сам Quartus и пак, содержащий ваш ПЛИС. Для меня это Cyclone IV device support . Если пака с вашим ПЛИС нет, то смотрите более старые версии Quartus.

Запускаем Quartus Prime. Если у вас Windows или Linux, то это должно вам даться безо всяких усилий. Разные хитрости только на macOS нужны.

Как только загрузиться главное окно Quartus, нажимаем Ctrl+N . В открывшемся списке выбираете New Quartus Prime Project .

Появится окно, на котором нужно просто нажать Next

Далее нужно указать, что создавать. В первом поле выбираете папку. И тут внимание - Quartus будет сохранять файлы прямо в эту папку, так что укажите пустую, предназначенную для этого конкретного проекта,

Имя проекта (второе поле) и объекта верхнего уровня (третье) пусть будет top

На следующей вкладке оставляете Empty project , и сразу Next , на очередной вам предложат добавить файлы, которых у вас нет, так что снова Next . Так мы и пришли к окну выбора вашего FPGA. На мой взгляд, самый простой способ - это ввести название своего камня в поле
Name filter.

Вводить достаточно до тех пор, покуда не увидите нужное в списке Available devices. Как увидите - выбирайте и жмите сразу Finish , так как ничего интересного больше не будет. Проект готов, нужно добавлять файлы.

Ещё раз нажмите на Ctrl+N . Но теперь выбирайте
Verilog HDL File
И жмите OK .

Открывается новый пустой файл в редакторе, в котором нужно что-то писать.

Вот теперь и начинается тот самый этап, из-за которого я откладывал изучение FPGA несколько лет. Проектирование. И главное, что должен для себя уяснить каждый программист - тут проектируется не программа, а микросхема! При декомпозиции нужно думать, что вы выделяете именно микросхему, а не блок кода. Для программера со стажем это не всегда просто.

Задача данного проекта - выводить на ногу ПЛИС меандр с определённой частотой. Откуда взять - использовать сигнал с присутствующего на платке кварцевого генератора. А генератор присутствует на любой платке ПЛИС. Даже на упомянутой выше CPLD с 240 логическими элементами. Но генератор этот генерирует сигнал высокочастотный: как правило 48 или 50 мгц. Это несколько выше слухового диапазона. Соответственно частоту меандра надо делить.

Делается это при помощи счётчика, который каждый такт входного сигнала увеличивает своё значение на 1. Как только он достигает своего максимального значения, счётчик сбрасывается а выходная ножка меняет своё состояние на противоположенное. Значит, выбирая различные максимальные значения для счётчика, можно получить различные коэффициенты деления. А следовательно - разную частоту на выходе. Это именно то что надо. Такой счётчик-делитель уже хорошо годиться на выделение в отдельный модуль.

Запомнили и думаем дальше - нам нужно поддержать 4 разные кнопки, и при нажатии на каждую из них должна воспроизводиться своя нота. Сделать это можно 2-мя способами:

1. Держать целых 4 делителя, каждый выводит сигнал определённой частоты. При нажатии кнопки, коммутировать один из делителей с выходом схемы.

NHẬN XÉT • 13

Здравствуйте. Подскажите пожалуйста, где можно писать прошивку для стенда "Nexys A7-100T"?

@Школа Цифрового Дизайна я вот установил vivado 2020.1, но там нет моего типа процессора Artix-7 Part XC7A100T-1CSG324C. Есть подобные, но именно такого нет.

@Владислав Мирошниченко Да, конечно.

@Школа Цифрового Дизайна а varilog поддерживается в vivado?

@Школа Цифрового Дизайна спасибо Вам

Добрый день. Nexys A7 - это отладочный стенд с ПЛИС фирмы Xilinx. Вы можете использовать пакет Vivado для программирования этой платы.

Какой ужас, сколько сложных телодвижений и настроек ради тестирования элементарного кода. Представляю как трудно отладить через симуляцию работу какого то тяжелого проекта, с использованием nios ii например. Снимите об этом видео, будет интересно посмотреть

@Школа Цифрового Дизайна мне просто интересно, а как большие проекты в modelsim отлаживают? Цос фильтры или какие то high-speed транссиверы.
Мне так кажется это только в железе можно отладить, снимите об этом тоже ролик, будет интересно глянуть

@Школа Цифрового Дизайна я в итоге симуляцию запустил, с 50мгц тактового сигнала nios до 200-500мс симуляции реально еще как то можно глянуть, но ни о каких секундах и речи нет, не хватает ресурсов компьютера. Пришлось скомпилировать тестбенч при сборке nios и потом глубоко в проекте найти папку mentor с tcl файлом, через коммандную строку его запустить. Где то раза после третьего и правок tcl-файла удалось это сделать. Такое оно все убогое и на костылях.
По сравнению с каким то pic или avr микроконтроллером, или даже arm7 процессором в proteus, где все отлично симулируется вплоть до real-time вообще небо и земля

@Yuri Bochkarev Сложно и непривычно, тут я согласен. Не с первого раза получилось.

@Школа Цифрового Дизайна я как раз сейчас пытаюсь запустить в симуляции один проект на nios ii написаный в quartus 13й версии, пытаюсь rtl стмуляцию запустить из самого квартуса, и modelsim открывается, и проект в нем компилируется и пока безуспешно)) разобраться в этом моделсиме крайне трудно

Ну, теловижений в реальности не много. Для тестирования любого проекта код тестбенча нужно писать.
Потом его подключили к модулю и запустили ModelSim. А запуск ModelSim будет почти такой-же.

Читайте также: