Jump to content
    

Проблема с выводом текста через hdmi (ПЛИС - Tang Nano 9k)

Доброго времени суток, занимаюсь курсовой работой по предмету "Электроника и схемотехника", в этом деле ещё "зеленый", поэтому прошу прощения, если вопрос покажется простым 

В работе подразумевается вычисления значений sin / cos посредством ядра Cordic и с последующим выводом на монитор посредством hdmi
Столкнулся со следующей проблемой - после написания автомата передачи слова "sin" (см. /src/svo_hdmi.v, закомментирован), и попытке синтезировать вылетает следующая ошибка:
ERROR  (PA2122) : Not support 'mem_mem_0_0_s'(DPB) WRITE_MODE0 = 2'b10, please change write mode WRITE_MODE0 = 2'b00 or 2'b01.

При этом нигде в проекте не используются ядра памяти (DPB), или я их не нашел
Сама база проекта взята с официального GitHub репозитория - https://github.com/sipeed/TangNano-9K-example/tree/main/hdmi, EDA - Gowin EDA

Архив с проектом прилагается

Что делать в моей ситуации? Как можно исправить ошибку?

 

Заранее спасибо за ответы!

hdmi.rar

Share this post


Link to post
Share on other sites

52 минуты назад, Denis Nktn сказал:

вопрос покажется простым

Вопрос показался недоформулированным.

HDMI интерфейс не предназначен для передачи текста. У вас должна быть ещё какая-то оболочка, преобразующая текст в изображение, которое уже можно передать по HDMI на устройство отображения. А в этом случае для "передачи текста" уже не имеет никакого значения, HDMI там, Display Port или вообще VGA. Вы вероятно всё-таки не напрямую с HDMI имеете дело, а с какой-то программой. Разбираться в этой ерунде по вашему приложенному архиву - жалко времени. Напишите словами.

Share this post


Link to post
Share on other sites

Если я правильно понял суть изначального проекта, вывод текста возможен посредством svo_term.v, который как раз таки и преобразует текст в необходимый для вывода через HDMI формат

Иных программ, кроме как Gowin EDA, не используется

Share this post


Link to post
Share on other sites

3 часа назад, Denis Nktn сказал:

Архив с проектом прилагается

Первый раз такое встречаю
image.thumb.png.917107a0ae86b08de4306a6ff2b9a2f6.png
Поясните

Share this post


Link to post
Share on other sites

48 минут назад, Zversky сказал:

Первый раз такое встречаю
image.thumb.png.917107a0ae86b08de4306a6ff2b9a2f6.png
Поясните

Хм, странно, вроде бы пароля я не делал, сейчас попробую переотправить проект

56 минут назад, Zversky сказал:

Первый раз такое встречаю
image.thumb.png.917107a0ae86b08de4306a6ff2b9a2f6.png
Поясните

Как я понял, virustotal всегда запрашивает пароль от архива, даже если он не имеет пароля
hdmi_2.rar
Сам проект я смог без него на virustotal загрузить, просто оставив поле пустым

Но на всякий случай прикладываю архив без пароля (точнее, где я проверил, что пароля нет)

Share this post


Link to post
Share on other sites

10 часов назад, Denis Nktn сказал:

virustotal всегда запрашивает пароль от архива, даже если он не имеет пароля

Нет, ваш первый, попавшийся мне из десятков архивов, такой
 

10 часов назад, Denis Nktn сказал:

Но на всякий случай прикладываю архив без пароля

image.thumb.png.f2a01813835896f8567ae4b2a7ae4dcd.png

Share this post


Link to post
Share on other sites

2 минуты назад, Zversky сказал:

Нет, ваш первый, попавшийся мне из десятков архивов, такой
 

image.thumb.png.f2a01813835896f8567ae4b2a7ae4dcd.png

Хм, странно однако, даже не могу предположить, что именно тригерит блокировку загрузки / запрос пароля на virustotal

Единственное, что могу сказать - у меня все проверки на virustotal проходят успешно, база проекта взята с офф. GitHub'а, мои добавления "смуты" внести никак не могли, т.к. по сути менялся один файл

Share this post


Link to post
Share on other sites

2 hours ago, Denis Nktn said:

 мои добавления "смуты" внести никак не могли, т.к. по сути менялся один файл

выполните как минимум в своём проекте:

cd ".\impl\pnr\"
del "*.pr"
del "*.p"
del "*.db"
del /a:r "*.bin"
REM del /a:r "*.binx"

cd "..\gwsynthesis"
del "*.vg"

pause

в принципе и *.fs по вашему вопросу нам не интересен.

и киньте проект в zip.

 

Не бывает текстов, что в архиве весят 600кБ, у Вас там что "Война и Мир"?

Share this post


Link to post
Share on other sites

4 часа назад, Denis Nktn сказал:

менялся один файл

или так попробуйте


image.thumb.png.8d27e8b186b011ece01f3050976e6e73.png

19 часов назад, Denis Nktn сказал:

ERROR  (PA2122) : Not support 'mem_mem_0_0_s'(DPB) WRITE_MODE0 = 2'b10, please change write mode WRITE_MODE0 = 2'b00 or 2'b01.

Вы ИИ пользовать пробовали?:
------------------------------------

Эта ошибка возникает на этапе Place & Route в Gowin EDA (например, при сборке проектов под Tang Nano 9K).
Она означает, что синтезатор автоматически сгенерировал блок памяти Dual Port Block RAM (DPB) в режиме Read-before-Write (WRITE_MODE = 2'b10),
который аппаратно не поддерживается используемой серией ПЛИС Gowin. [1, 2, 3, 4, 5]
Ниже приведены способы быстрого решения этой проблемы.

Вариант 1. Исправление кода (для проектов типа Picotiny / HDMI / SVO)

Чаще всего эта ошибка возникает из-за неопределенного поведения в логике чтения/записи, когда в коде присваивается значение 'bx (X-состояние). [6]
 
  1. Откройте файл, в котором описывается или используется видеопамять (например, svo_term.v или svo_hdmi.v).
  2. Найдите строку, где порту чтения присваивается неопределенное значение при записи:
    mem_portA_rdata <= 'bx;
    
  3. Закомментируйте эту строку или замените её на явный ноль:
    // mem_portA_rdata <= 'bx; // Уберите или закомментируйте
    
    Это заставит синтезатор выбрать поддерживаемый режим WRITE_MODE0 = 2'b00 (Normal Mode). [3, 6, 7]

Вариант 2. Явное изменение режима записи в коде (Inference) [5]

Если вы описываете память вручную (RAM Inference) и используете раздельную маску байт (byte-enabled),
синтезатор Gowin v1.9.9+ может ошибочно выбирать режим 2'b10. [2]
 
  • Измените логику синхронного чтения так, чтобы чтение происходило строго после или независимо от записи (перейдите на режим Normal или Write-Through).
  • Убедитесь, что данные считываются в регистр по фронту тактовой частоты отдельно от условия записи if (we). [5, 8]

Вариант 3. Использование IP Core Generator (Самый надежный способ)

Вместо автоматического вывода памяти (Inference) через массивы Verilog/VHDL, сгенерируйте блок памяти через стандартные инструменты Gowin:
 
  1. В Gowin IDE откройте IP Core Generator.
  2. Перейдите в раздел Memory -> Block Memory -> Dual Port RAM (DPB).
  3. В настройках конфигурации явно укажите Write Mode: Normal (00) или Write-Through (01).
  4. Замените массив в вашем коде на сгенерированный IP-модуль. [5, 8]

Если вы собираете конкретный готовый проект, напишите его название или прикрепите фрагмент кода, где объявляется память mem_mem, и я помогу вам точно изменить логику под требования Gowin EDA.
 
 

Share this post


Link to post
Share on other sites

 

25 минут назад, Zversky сказал:

Вы ИИ пользовать пробовали?:

Да, пробовал, и ничего из предложенного вами она мне не предложила (даже сгенерировать ядро DPB не порекомендовала)
 

26 минут назад, Zversky сказал:

 

Вариант 1. Исправление кода (для проектов типа Picotiny / HDMI / SVO)

Чаще всего эта ошибка возникает из-за неопределенного поведения в логике чтения/записи, когда в коде присваивается значение 'bx (X-состояние). [6]
 
  1. Откройте файл, в котором описывается или используется видеопамять (например, svo_term.v или svo_hdmi.v).
  2. Найдите строку, где порту чтения присваивается неопределенное значение при записи:
    mem_portA_rdata <= 'bx;
    
  3. Закомментируйте эту строку или замените её на явный ноль:
    // mem_portA_rdata <= 'bx; // Уберите или закомментируйте
    
    Это заставит синтезатор выбрать поддерживаемый режим WRITE_MODE0 = 2'b00 (Normal Mode). [3, 6, 7]

 

 
 

Совет про комментирование строки "mem_portA_rdata <= 'bx" помог синтезировать проект (ошибка ушла), но проверить на практике возможности пока нет, как проверю - дам знать

Прикладываю на всякий случай уменьшенный zip-архив (сделал clean по совету Zversky и удалил .vg файл)

hdmi_4.rar

Share this post


Link to post
Share on other sites

1 час назад, Denis Nktn сказал:

проверить на практике

до проверки на практике нужно проверить моделированием. Вы, например, ваш ФАПЧ проверяли на работоспособность?

Share this post


Link to post
Share on other sites

7 часов назад, Zversky сказал:

до проверки на практике нужно проверить моделированием. Вы, например, ваш ФАПЧ проверяли на работоспособность?

Прошу простить за поздний ответ

Вообще тестовый вывод работает, т.е. все модули, включая pll, функционируют нормально

В крайнем случае проект я смогу проверить в среду, но постараюсь пораньше добраться до рабочего места

9 часов назад, Zversky сказал:


 

Вы ИИ пользовать пробовали?:
 

 

Можете сказать, какую модель ИИ использовали? 

Share this post


Link to post
Share on other sites

8 часов назад, Denis Nktn сказал:

Прошу простить за поздний ответ

Не имейте привычки просить прощения за то, в чём нет никакой вашей вины.
Этим извинением (если только оно - не placeholder) вы ставите себя ниже меня, а это ни в коем случае нельзя делать чисто психологически.
Мы с вами равноправны. Да и ЧСД держите высоко: по жизни очень пригождается. 
Это было лирическое отступление )

8 часов назад, Denis Nktn сказал:

Вообще тестовый вывод работает, т.е. все модули, включая pll, функционируют нормально

Покажите. Смоделированные ВД есть?

8 часов назад, Denis Nktn сказал:

но постараюсь пораньше добраться до рабочего места

Не спешите. Кто понял жизнь, тот не спешит (с) ))

8 часов назад, Denis Nktn сказал:

Можете сказать, какую модель ИИ использовали? 

image.thumb.png.571f2164182230430216b37973b868eb.png

ПС. Хотите, пишите в ЛС

Share this post


Link to post
Share on other sites

20 минут назад, Zversky сказал:

Покажите. Смоделированные ВД есть?

Смоделированных данных у меня пока нет, тк с конкретно моделированием verilog-модулей я пока не сталкивался (если не считать симуляцию через icarus verilog, но через неё прогнать проект не получится)

Как можно моделирование провести? Я слышал о ModelSim, оно подойдет или нужные иные утилиты?

25 минут назад, Zversky сказал:

Не имейте привычки просить прощения за то, в чём нет никакой вашей вины.
Этим извинением (если только оно - не placeholder) вы ставите себя ниже меня, а это ни в коем случае нельзя делать чисто психологически.
Мы с вами равноправны. Да и ЧСД держите высоко: по жизни очень пригождается. 
Это было лирическое отступление 

Понял, обязательно учту 🙂

Share this post


Link to post
Share on other sites

1 час назад, Denis Nktn сказал:

Как можно моделирование провести? Я слышал о ModelSim, оно подойдет или нужные иные утилиты?

Спросите ИИ )

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...