Перейти к содержанию

ModelSim, вопросы новичка

Доброго всем времени суток!

 

Решил отложить стандартный квартус-симулятор и изучить ModelSim. Отлаживаю модуль SPI, но картинка не та, которую я вижу в квартус-симуляторе, сигналы addr, data, miso в неопределенном состоянии. В чем может быть дело? Не заданы начальные условия или код модуля кривой? Картинка такая:

 

modelsim_1.png

 

Исходный файл и тестбенч к нему во вложении. Заранее спасибо.

SPI_slave2.vSPI_slave2_tb.v

Изменено пользователем Sprite

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте!

У вас в TestBench переменная "addr" задана как "wire" + присваивается значение константы - "0".

В самом модуле "spi_slave" вы начинаете с этой переменной работать.

Получается что с одной стороны вы переменной "addr" присваиваете присваиваете постоянное значение, а с другой, меняете его.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Доброго всем времени суток!

 

Решил отложить стандартный квартус-симулятор и изучить ModelSim. Отлаживаю модуль SPI, но картинка не та, которую я вижу в квартус-симуляторе, сигналы addr, data, miso в неопределенном состоянии. В чем может быть дело? Не заданы начальные условия или код модуля кривой? Картинка такая:

Насколько я помню, Вы не любите сигнал "Сброс".

Квартус "знает", что по исходному все триггера в проекте грузятся в 0. А Моделсим этого не знает...

А вот те, которые были зеленые, а стали красные - это значит скорее всего, что на сигнал пытаются воздействовать два драйвера...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Nieve, Иосиф Григорьевич, спасибо!

Проглядел).

А можно как-нибудь автоматизировать посылку разных значений по SPI? В идеале хочется иметь тестбенч такого формата, чтобы в нем задавались только 2 параметра: значение данных и время в которые они посылаются, а сама колбаса из 32-х битов проходила автоматом. Как решить эту задачку? Ставить внешний цикл for над всем тестбенчем?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Nieve, Иосиф Григорьевич, спасибо!

Проглядел).

А можно как-нибудь автоматизировать посылку разных значений по SPI? В идеале хочется иметь тестбенч такого формата, чтобы в нем задавались только 2 параметра: значение данных и время в которые они посылаются, а сама колбаса из 32-х битов проходила автоматом. Как решить эту задачку? Ставить внешний цикл for над всем тестбенчем?

Пишем файл паттерна с этими двумя параметрами. И в тесбенче вычитываем их из файла. Результаты приема можно тоже писать в файл... Или в консоль.... А потом исходный и полученный программным инструментом сравнить...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
А можно как-нибудь автоматизировать посылку разных значений по SPI? В идеале хочется иметь тестбенч такого формата, чтобы в нем задавались только 2 параметра: значение данных и время в которые они посылаются, а сама колбаса из 32-х битов проходила автоматом. Как решить эту задачку? Ставить внешний цикл for над всем тестбенчем?

Мне понятен этот вопрос, вспоминаю как я был нубасом по части тестбенчей в HDL-симуляторах, и кажется представляю что хочется.

Краткий ответ может быть таким банальным: Verilog состоит не только из конструкций, которые могут быть синтезированы в ПЛИС, но и несинтезируемых конструкций, которые по сути не уступают по гибкости классическим языкам программирования (особенно System Verilog).

Поэтому да, можно действительно сделать так, чтобы была очень сложная логика взаимодействия с тестируемым устройством, причем делать ее на порядок проще и "халявнее" чем изобретать ответную часть на синтезируемых конструкциях Verilog. В том числе и функция имитации SPI с двумя входными параметрами.

 

 

Пишем файл паттерна с этими двумя параметрами. И в тесбенче вычитываем их из файла. Результаты приема можно тоже писать в файл... Или в консоль.... А потом исходный и полученный программным инструментом сравнить...

Прошу прощения, но совет странный :) Файл? Зачем там.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Прошу прощения, но совет странный :) Файл? Зачем там.

Затем, что тестбенч будет один и тот же, и его не потребуется переписывать под новый массив данных, если их нужно будет изменить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А можно как-нибудь автоматизировать посылку разных значений по SPI? В идеале хочется иметь тестбенч такого формата, чтобы в нем задавались только 2 параметра: значение данных и время в которые они посылаются, а сама колбаса из 32-х битов проходила автоматом. Как решить эту задачку? Ставить внешний цикл for над всем тестбенчем?

Я обычно делаю так:

1. У меня есть отдельная папочка, которая называется SIM_MODELS.

2. В этой папочке хранятся, как ,наверное, легко догадаться - модели для симуляции. Эти модели я специально написал на несентизируемом подмножестве языка HDL. Обычно в качестве моделей я создаю распространенную периферию - источники сигнала, такие как UART, SPI, I2C, и пр. Недавно пришлось написать VGA источник, где в качестве параметра - генерируемое разрешение.

3. В модели у меня есть возможность задать необходимые параметры. Одним из таких параметров является возможность выбора файла откуда читаются внешние воздействия.

4. Когда я начинаю моделировать в Modelsim я просто подключаю к тестбенчу мою модель, в которой указываю файл откуда читать внешние воздействия.

5. В случае если модель не удовлетворяет необходимому функционалу - я её улучшаю.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Решил отложить стандартный квартус-симулятор и изучить ModelSim.
Сказали а, говорите сразу и б: управляйте ModelSim-ом с помощью tcl.

Потратите время на изучение, зато потом будете сильно экономить на отладке.

Не претендую на непогрешимость, но вот (в скрепке) пример: вдруг, чего себе возьмёте?

Любые вопросы и замечания приветствуются.

 

ARINC_TX_sim.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вроде как неплохо еще прогонять на случайных выборках сигналов. Т.е. задаете случайные данные, ставите передающий модуль, с приемного считываете и сравниваете с переданными. Это довольно легко поддается автоматизации и можно гонять случайные слова данных нужное количество раз. Еще попробуйте посмотреть в сторону Altera'ских bfm модулей для верификации. Из их исходников можно много интересного понадергать

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Altera'ских bfm модулей для верификации. Из их исходников можно много интересного понадергать

А где их взять ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно создать *.qsys проект в который добавить нужные BFM корки, потом выбрать пунккт Generate->Generate TestBench systems . После генерации в директории synthesis появятся *.sv файлы. Собственно это они и есть:) Еще у альтеры есть экземплы:

https://www.altera.com/support/support-reso...ication-ip.html

Там же и ссылка на документацию. Правда от последней, как по мне, не сильно много толку

 

Сейчас, как раз, занялся этим. Есть желание наковырять оттуда кода, и сделать для себя боле-менее обощенный пакет который можно былоб использовать в разных проектах

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Отлаживаю модуль SPI
Кстати, вдруг ещё не видели - ИМО там есть, что принять к сведению: SPI Verilog Master & Slave modules :: Overview. Да и, вообще, там погуляйте. И я вместе с Вами )

И ещё одна ссылка, как введение к первой: https://marsohod.org/projects/marsohod2/amb...c/215-opencores

Изменено пользователем Marat Zuev

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Не претендую на непогрешимость, но вот (в скрепке) пример: вдруг, чего себе возьмёте?

Пантово..! Очень пантово!) Прямо все как я люблю: нажал одну кнопку и ПЭМС! - файл симуляции готов!

Особенно мне понравились строчки "ThisPCLocationIsWORK" и "ThisPCLocationIsHOME" батника simulate :biggrin: Браво! Реально круто! :disco: Благодаря Вашему коду наткнулся на интересную статью, может кому пригодится.

 

Кстати, вдруг ещё не видели - ИМО там есть, что принять к сведению: SPI Verilog Master & Slave modules :: Overview. Да и, вообще, там погуляйте. И я вместе с Вами )

И ещё одна ссылка, как введение к первой: https://marsohod.org/projects/marsohod2/amb...c/215-opencores

Спасибо за инфу! Обязательно ознакомлюсь!

 

Еще один вопрос: verilog начал изучать совсем недавно, и мне привычнее представлять top_level в виде bdf-схемы, куда я далее вставляю veriog-модули и компилирую. ModelSim насколько мне известно может принимать только verilog. Как быть в этом случае? Описывать всю схему, связи в верилоге или есть еще какие варианты? И как в этом случае привязывать входы-выходы к конкретным пинам?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
наткнулся на интересную статью
Всё, чем Вы восторгались, написано, в том числе после прочтения статей, подобных этой )

Еще один вопрос: verilog начал изучать совсем недавно, и мне привычнее представлять top_level в виде bdf-схемы, куда я далее вставляю veriog-модули и компилирую. ModelSim насколько мне известно может принимать только verilog. Как быть в этом случае? Описывать всю схему, связи в верилоге или есть еще какие варианты? И как в этом случае привязывать входы-выходы к конкретным пинам?
Как раз для Вас с того же сайта: https://marsohod.org/11-blog/251-sch-or-txt
Изменено пользователем Marat Zuev

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти