Обновить

Комментарии 24

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

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

Поэтому методика отладки должна быть такая:

  1. Моделирование отдельных модулей.

  2. Моделирование всей сборки (IP-блока)

  3. Прогон в железе.

Без третьего пункта - в серию изделия пускать нельзя.

С такой последовательностью я конечно согласен. Просто из вашей фразы

Подключать отладчик (а может даже и осциллограф), искать баги и сбои

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

Само-собой вначале моделирование. Здесь вы полностью правы. В первом пункте статьи я это кратко упомянул. Просто не стал подробно расписывать, иначе объем статьи был бы слишком большим.

А про осциллограф - это наша железячная реальность :) В серии каких только косяков не встречал. Проблемы с питанием, лишние дорожки на плате. Не те номиналы или даже элементы, непропаи и прочее...

...и не всё железо ведёт себя, как написано. Нет, вообще-то верно, но как только сложнее, чем демоплата...

У Вас проект открытый ? Умеет ли контроллер работать с DDR ? Вы не пробовали собирирать свой проект с помощью Yosys (OSS CAD) ?

Проект может быть выложу у себя на сайте. но пока не уверен. Если он на текущем месте работы будет использоваться, тогда не смогу выложить
Это только для SDR SDRAM. Может быть чуть позже DDR буду смотреть

Yosys (OSS CAD)

с этой вещью дела никогда не имел

OSS CAD это опенсорсный набор тулов для синтеза на базе Yosys. Если есть задача сделать проект независимым от производителя микросхем, то не плохо бы портировать его на Yosys.

Я почему спросил. В микросхемах ПЛИС от Gowin GW1NR (платки серии Tang Nano) есть встроенная SDRAM на 64 Мбит. Хочу задействовать эту SDRAM. Есть проприетарный блок SDRAM контроллера от производителя, но я использую Yosys и проприетарных IP-блоков стараюсь всячески избегать.

да, надо мне будет подробнее почитать про Yosys, спасибо.

я кстати тоже не люблю применять проприетарные блоки. В случае смены производителя будет огромная проблема

Интересная статья, было приятно прочитать. Жаль что нет однозначного решения об размещения исходников контроллера памяти.
Есть ряд вопросов и мыслей:

  1. Я когда то тоже делал контроллер SDRAM, но как показала практика он работает только с той микросхемой под которую ее делал, несмотря на то что основные параметры между собой схожи. Полагаю у вас так же?

  2. Реализовать текстовый режим на экране наверное сложно было? картинка генерировалась налету или сначала в буфере ПЛИС(хотя откуда там столько места под 800х600)?

  3. Вы упомянули что весь проект работает на 50МГц, или я не правильно понял и на этой частоте только VGA ? Если весь проект на 50МГц то и sdram тоже?

  4. У вас в контроллере количество потоков 2, но SDRAM одна.... зачем два потока если все равно сводить все в один канал? Или у вас заложен механизм независимой работы с двумя микросхемами?

  5. Вы написали что микросхема не может работать выше 143МГц, но вы пробовали поднять частоту и прогнать тесты? были ли ошибки? Я в своей статье делал подобный тест и память справлялась, хотя для нее(моего варианта) рабочая частота была заявлена в 133МГц, я же запускал на 150МГц, но чисто ради эксперимента.

  1. Я писал код контроллера полностью аппаратно независимым. То есть внутри контроллера нет никаких привязок к Альтере. PLL и IO-буферы вынесены наружу. Поэтому код контроллера должен собираться под микросхемы любых производителей. Некоторые части этого контроллера, например FIFO, работают в железе на ПЛИС Xilinx и Efinix.

  2. Видео - самое простое. VGA - там вообще только импульсы синхронизации. А символы текста хранятся в блочной памяти, организованной как ROM. Самое трудоемкое для меня было нарисовать эти символы. Сама картинка (синий фон) генерятся налету. И налету накладываются строки символов. Они хранятся в небольшом буфере на блочной памяти. 1 байт - 8 пикселей.

  3. 50 МГц - это только видео. Контроллер памяти - любая частота, задаю на PLL. Максимальная у меня - 143 МГц.

  4. Многопоточность - это как раз та самая фишка контроллера. Да шина памяти одна, но доступ к ней можно дать нескольким абонентам. Можно до 16 независимых абонентов подключить к контроллеру. Причем каждый на своей собственной тактовой частоте. И как раз внутренний арбитр контроллера организует их мультиплексирование на шину памяти. И каждый такой абонент может писать в память или читать независимо от других абонентов. И ему не нужно знать состояние контроллера или другого абонента. Нужно только проверять заполненность FIFO, на которое он подключен.

  5. Да, я пробовал чуть выше частоту давать. Если при 143 МГц, а точнее при 7 наносекундах все нормально, то уже примерно при ~6.9-6.8 нс начинаются ошибки. Несколько ошибок на цикл.

  1. я имел ввиду микросхему самой памяти SDRAM, ваш контроллер будет работать только для ISSI IS42S16320F-7TL , верно?

  2. Получается вы регулярно обновляете буфер с актуальной строкой? и затем много кратно(и повторно) вычитываете символы пока не закончится строка из них?

  1. для любой микросхемы типа SDR SDRAM. С любой шириной шины данных DQ. Ну по крайней мере в теории)

  2. Не совсем, буфер строк перезаписывается только если я даю команду записать строку символов в буфер строк. При перезаписи извлекается символ из ROM и переносится в буфер строк. А вычитывается буфер строк каждый кадр

Изучил вопрос касательно совместимости контроллера SDRAM для IS42S16320F и MT48LC16M16A2. В инициализации памяти есть стадия "LOAD MODE REGISTER" и она различается между чипами, точнее значения в этой стадии.

Вот из даташита взял описание для MODE REGISTER. Мне казалось, что это вообще из стандарта на SDRAM. Для всех производителей должно быть одинаково. Но может я не прав.
В любом случае всегда надо на даташит опираться для конкретной микросхемы.

полез я тут изучать подробнее состояние "LOAD MODE REGISTER " для этих микросхем, и обнаружил что я ошибся. все выглядит так что механизмы работы идентичные.
Нужна проверка на практике

а теперь это снова «Altera»

Ооо, это прекрасно, не заметил это событие.

А какой latency получился? У меня на обычной SRAM 16нс для разовой операции чтения (250Мгц). Пока хватает, но посматриваю на варианты по-быстрее.

Если про CAS_LATENCY, то это стандартные 2 или 3 такта. В зависимости от микросхемы и частоты.

Если общая latency для контроллера - то это 4 такта задержки при извлечении данных (или команды чтения) из ФИФО, и еще 2 такта на формирование адреса на шину памяти

Тем самым я постарался обеспечить возможность использования данного IP-блока в ПЛИС любых производителей.

Жаль только, что не все производители ПЛИС поддерживают VHDL.

Всё отлично поддерживается

PangoMicro недавно добавила экспериментальную поддержку подмножества VHDL-93 в свой синтезатор. Если это "отлично", то ок.

В Pango версии 2022.2 я успешно собирал своё 10gig eth MAC-ядро. Написано на VHDL-2008. Собиралось без проблем.

В то время там был Synplify, сейчас только ADS.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации