Просмотр полной версии : Tang9K Speccy
andykarpov
05.06.2023, 22:29
Вполне.
Вот тестовый спектрум на ней https://github.com/andykarpov/tang9k-speccy
- пока еще в разработке, но вот что уже есть:
-- выхлоп через HDMI
-- звук через PWM (нужна внешняя обвязка в виде фильтра)
-- USB клава
-- DivMMC
-- Turbosound
-- пентагоновские времянки (видео-модуль надо переделывать, ибо бордер-эффекты расползлись)
Из плюсов данной девборды:
- прилично LE
- есть встроенная PSRAM
- на борту HDMI, microSD, SPI флеха
Из минусов:
- PSRAM в режиме рандомного доступа капец медленный
- PLL всего 2 и они очень скудные
Вцелом IDE-шка мне их зашла, все понятно и не хуже кактуса.
Есть плата у них новая на GW2 чипе - Tang Nano 20k называется.
Вот там уже шикарно и по LE, и вместо PSRAM на борту встроенная SDRAM, и PLL есть внешний в дополнение к внутренним.
CityAceE
24.07.2024, 18:39
Вот тестовый спектрум на ней
Что-то не получается завести его. Вижу только матрац, хотя ПЗУ прошиваю во внешнюю память.
https://pic.maxiol.com/thumbs2/1721834842.780858384.screenshot202407241.png (https://pic.maxiol.com/?v=1721834842.780858384.screenshot202407241.png&dp=2)
В инструкции предлагается шить всё через openFpgaLoader:
Install openFpgaLoader tool
Upload ROM image rom/rom-tang9k-speccy.rom into the external SPI flash by openFPGALoader -b tangnano9k --external-flash rom/rom-tang9k-speccy.rom
Upload bitstream into the internal flash openFPGALoader -b tangnano9k -f impl/pnr/tang9k-speccy.fs
Connect USB keyboard (+5V, GND as well as D+, D- signals via 33 Ohm resistors)
Prepare the SD card (FAT32, ESXDOS 0.8.9)
Я же использую оригинальный софт под Windows:
https://pic.maxiol.com/thumbs2/1721834901.780858384.speccytang9k.png (https://pic.maxiol.com/?v=1721834901.780858384.speccytang9k.png&dp=2)
Пробовал различные варианты прошивки, но ни один из них не заработал. Что-то отказывается шить, потому что нет SPI, что-то даже файл не признаёт и не даёт его выбрать. Я его всё равно утрамбовал, просто вбив руками путь, то тоже не взлетело.
Далее, при попытке самому собрать проект, у меня всё в конце вылетает с ошибкой:
[100%] Generate report file "D:\Downloads\Tang9k\tang9k-speccy-master\impl\gwsynthesis\tang9k-speccy_syn.rpt.html" completed
GowinSynthesis finish
Reading netlist file: "D:\Downloads\Tang9k\tang9k-speccy-master\impl\gwsynthesis\tang9k-speccy.vg"
Parsing netlist file "D:\Downloads\Tang9k\tang9k-speccy-master\impl\gwsynthesis\tang9k-speccy.vg" completed
Processing netlist completed
Reading constraint file: "D:\Downloads\Tang9k\tang9k-speccy-master\src\tang9k_speccy.cst"
Physical Constraint parsed completed
ERROR (TA2003) : "D:\Downloads\Tang9k\tang9k-speccy-master\src\tang9k-speccy.sdc":11 | Can't set timing constraint to object cpuclk
WARN (TA1052) : "D:\Downloads\Tang9k\tang9k-speccy-master\src\tang9k-speccy.sdc":11 | Generated clock is ignored
Это мой вообще самый первый опыт общения с FPGA, так что я не знаю ничего и, вероятно, задаю слишком глупые вопросы.
andykarpov Прошу помощи!
звук через PWM (нужна внешняя обвязка в виде фильтра)
Где взять примерную схему этой обвязки?
Почему не получилось сделать звук через HDMI?
CityAceE
27.07.2024, 07:49
ПЗУ увиделось только будучи прошитым с помощью openFPGALoader под Linux и никак иначе. Но и после этого начались проблемы с запуском. Спектурм стартует только если его залить в ОЗУ или сразу после прошивки во флэш. Но как только отключаешь питание, то больше ничего не заводится, требуется повторная заливка в ОЗУ или флэш. Какая-то непонятная ситуация.
Также не завелась клавиатура. Но я её подключил не через сопротивления, а через преобразователь уровней (https://zx-pk.ru/threads/35329-protokol-ps-2.html?p=1188200&viewfull=1#post1188200). Через него прекрасно работает протокол PS/2 на моём эмуляторе Специалиста для Rapsberry Pi и Next186 (PC XT) на Tang Nano 9K. Попробовал все имеющиеся у меня клавиатуры, поддерживающие протокол UBS. Результат всегда один - "зажатая" клавиша EXT.MODE в tnag9k-speccy.
Также по-прежнему не удаётся собрать проект на актуальной версии Gowin из-за возникающей ошибки. А если закомментировать строку с ошибкой, то проект собирается, но не стартует.
В общем, пока лично у меня не получается запустить всё как следует.
andykarpov
05.08.2024, 00:08
Проект сырой, это была проба пера, так сказать, пощупать что оно такое :)
Ошибка сборки проекта - вероятно, от версии Gowin IDE зависит. Я собирал на 1.9.8.11 (64436) под linux.
Также все буквы в имени камня очень имеют значение. Возможно туда надо также покурить.
Что касается usb - надо пробовать через резисторы. У меня работало :)
Что касается заливки битстрима в камень - попробуйте через openFPGAloader также его залить, оно должно заливаться во встроенный flash внутри fpga (у 9к модели есть такой флеш на борту).
По поводу звука - можно подсмотреть из Reverse-U16, как там фильтр сделан. Звук по hdmi не ввинчен - потому что не влезло бы в камень.
Хотя, может кто-то попробует? У меня лично нет времени и желания пока что.
CityAceE
05.08.2024, 06:59
это была проба пера
По мне так, более, чем удачная проба! Спасибо за этот проект! Чуть осталось дополировать и будет просто огонь.
Что касается usb - надо пробовать через резисторы. У меня работало
Ну да, люди подтверждают, что работает. Да я и сам понял, что подключение по аналогии с PS/2 скорее всего не сработает. В любом случае, наверное, если понимать в FPGA, то не составит труда поменять модуль USB на PS/2. Но это пока (?) не про меня.
Звук по hdmi не ввинчен - потому что не влезло бы в камень.
Вот он ответ на мой главный вопрос! Теперь всё встало на свои места. Я почему-то об этом не подумал. Но если бы поместилось, то было бы очень удобно.
Ещё раз спасибо за проект и за ответы! Буду изучать FPGA и этот проект.
Что касается usb - надо пробовать через резисторы. У меня работало
У меня аналогичная ситуация с usb на основе ukp на Tang Nano 9k. Кто-то говорит, что у них всё работает, но у меня ни одна клавиатура, ни одна мышка не зацепилась. У меня их не так уж много, конечно, но все же точно известно, что они исправные. Что-то в этом хосте на основе ukp слегка не так.
andykarpov
09.08.2024, 14:16
У меня аналогичная ситуация с usb на основе ukp на Tang Nano 9k. Кто-то говорит, что у них всё работает, но у меня ни одна клавиатура, ни одна мышка не зацепилась. У меня их не так уж много, конечно, но все же точно известно, что они исправные. Что-то в этом хосте на основе ukp слегка не так.
оно, вероятно, не умеет хабы и композитные устройства. я пробовал с проводной простой клавой.
- - - Добавлено - - -
Ну да, люди подтверждают, что работает. Да я и сам понял, что подключение по аналогии с PS/2 скорее всего не сработает. В любом случае, наверное, если понимать в FPGA, то не составит труда поменять модуль USB на PS/2.
Ну, PS/2 ввинтить будет даже проще и по ресурсам меньше займет, чем текущая реализация.
оно, вероятно, не умеет хабы и композитные устройства. я пробовал с проводной простой клавой.
Я не удивлюсь, если все мои подручные устройства композитные. Но это получается не очень-то хорошее решение, если оно не поддерживает ничего из того, что у меня есть. Я переключился на адаптер, сделанный из rp2040-zero.
Привет!
Я - не новичок в железе и системном программировании, как и в сборке клонов спектрума в далекие 1987+, но впервые решил пощупать FPGA. Выбор Tang Nano 9k в заметной степени был определен как её возможностями и доступностью, так и наличием этого и подобных проектов. Хочу поделиться своими результатами.
TL;DR: собрал в GoWin IDE 1.9.11 (Linux) и завел звук через HDMI.
https://www.youtube.com/watch?v=T2YLFOwcp4Y
Кому интересны подробности - они ниже.
При попытке прошить готовую прошивку она точно также не завелась, как и у ряда других пользователей, судя по теме. Выводилось только debug OSD со значениями таймингов int и произвольное (больше черное) содержимое экрана спекки. Версию 1.9.8 IDE найти также не смог, зато нашел 1.9.9 и 1.9.11. Пересобирал обеими - не помогло, картинки не было вообще, зато повторилась та же ошибка, что не смогло сгенерировать cpuclk из-за содержимого SDC файла.
После комментирования этой строки в SDC файле и перегенерации GoWin IPs проект собрался и запустился! Не могу сказать, что он работал стабильно (особенно прошивка по F4, при ресетах глючащая местами на экране). Но большинство тестов всего прошли, ESXDOS с SD карты тоже поехал (взял последнюю версию), TAP игрушки грузятся, поют и играют. Это был успех!
USB клавиатуру купил самую простую (дома не оказалось, одни макбуки), подключил даже без резисторов, всё заработало и сразу. Погонял Quazatron - это была самая первая игра, которую я когда-то запустил на только что собранном львовском варианте.
Следующим желанием было вывести звук через HDMI, для чего пришлось поизучать матчасть, провести серию экспериментов и начать осваивать Verilog и VHDL. В целом результат ПОЧТИ достигнут, но именно почти, и тут я рассчитываю на помощь автора проекта, поскольку я сам - полный нуб в FPGA дизайне.
Что я сделал: я заменил реализацию HDMI SimpleVOut на альтернативную, которая умеет генерировать полноценный HDMI сигнал со служебной информацией и звуком. Однако, картинка не появилась. Чтобы высвободить часть ресурсов и улучшить тайминги, в самом этом HDMI проекте был заменен TMDS энкодер на альтернативную версию, реализующую pipeline при выводе, что снизило требования к времянкам. За ненадобностью временно отключил debug OSD overlay и Delta-Sigma DAC, поскольку при наличии HDMI он становится избыточным (хотя в целом-то и не мешает). По ресурсам FPGA в отключении потребности нет - всего хватало. Проблемы вылезли там, где не ожидались.
И вуаля - у меня появилась картинка и пошел звук по HDMI. Почти… В рабочем состоянии обновленного проекта картинка на экране не синхронизировалась с началом кадра, а звук по HDMI был очень тихий. И вроде бы ясно, что надо сделать, но любой шаг вправо-влево в коде приводит к потере сигнала (железка перестает работать).
Дело в том, что альтернативная реализация HDMI не получает hsync/vsync/blank, а сама их внутри генерирует и использует. Наружу она предоставляет готовые счетчики пикселов x/y для привязки отображаемых данных. Текущая реализации Speccy сама вычисляет как синхронизацию, так и ведет счетчики позиций. И нужно было исключить избыточность и как-то связать HDMI и video модуль проекта. Попытка это сделать тем или иным путем (заменить счетчики в модуле video, либо просто сбрасывать их в нули при нулях в HDMI) приводила к потере сигнала. Изначально я полагал, что что-то не понимаю в VHDL или Verilog. Но позже стало ясно, что проблема в таймингах. Отсюда, вероятно, и все известные проблемы: нестабильный старт, невозможность простого внесения изменений в проект… Даже простой сдвиг выхода аудио-миксера влево на несколько разрядов (чтобы нормализовать HDMI звук) ломает всё. А нужно-то всего лишь завести внешние счетчики пикселей внутрь Video модуля, чтобы использовать их там готовые. Наоборот будет сложнее, так как к развертке привязана передача звука и других служебных данных HDMI.
На текущий момент вышло следующее:
- синхронизация картинки сделана через синхронный reset и унификацию размера фрейма, но постоянной привязки нет и в теории картинка может уплыть;
- звук через HDMI выводится тише, чем хочется, но любое изменение топологии также приводит к нерабочей конфигурации. Перепробовал несколько вариантов, но пока больше нет времени играться вслепую.
Как я писал, я не специалист в FPGA. Но посмотрев на временной анализ GoWin IDE, видно, что там множество проблем. То есть, отдельные пути прохождения сигнала не укладываются в требуемые ограничения, в результате оно может работать, а может и нет. Причем, без понимания деталей и/или опыта я не представляю, как можно повлиять на разводку, кроме как явно указать отдельные сигналы как clocks. Система очень чувствительна к содержимому SDC. Например, чтобы у меня завелось всё со звуком, пришлось закомментировать base clk_vga, и казалось бы, это должно ухудшить результат, а вот и наоборот- без него картинка есть, а с ним нет.
В целом мне кажется, что данная FPGA все же медленная для этого проекта, поскольку с таким поведением рассчитывать, что конкретный экземпляр вдруг заработает, не приходится. Либо я просто не знаю, как её готовить, что вполне вероятно с учетом моего нулевого опыта в этой сфере. При этом ресурсов в ней вполне хватает для сборки всего, что было, плюс HDMI звука в альтернативном модуле. Но вот с таймингами просто беда.
Есть вариант попробовать собрать всё это альтернативными тулами (Yosys и NextPNR), но я не уверен, что все нужные IPs он умеет, это надо проверять. Плюс, будет ли оно эффективнее фирменной реализации - тоже вопрос (в случае с TMDS энкодером похоже, что OpenSource версия заметно лучше, чем GoWin IP - во всяком случае, в тестовом примере последнее кушало больше ресурсов платы).
Я пока не публиковал форк проекта. Но если будут желающие с опытом работы с FPGA, чтобы помочь в решении названных проблем, то надо будет сесть, чуток причесать проект и все же выложить.
но любое изменение топологии также приводит к нерабочей конфигурации
К сожалению это "нормально". Вернее это конечно же возмутительно, но обычно.
andykarpov
27.01.2025, 16:38
Кстати, я по этой же причине забросил и tang9k, и tang20k девборды, потому что решения в лоб, портированные с альтеровских fpga не работают или работают не так, как ожидается.
Изначально в проекте speccy под 9k все неправильно :) клоки, сформированные в счетчиках - это вот неправильно от слова совсем :)
Чтобы все работало как надо, имхо, нужно все клоки заводить через высокоскоростную шину для этого предназначенную и порождать клоки с помощью специальных IP для этого предназначенных.
Как то ж даже Амига работает на этих FPGA, значит не все так плохо :) нужно просто научиться правильно это готовить.
У меня лично - лапки по этому поводу :)))
По моему в 9k просто маловато ресурсов. Я в процессе портирования Вектора на 9K с TFT уткнулся в стену, ничего не мог сделать -- любое изменение, совершенно вообще незначимое, и всё разваливается вообще к чертям. Стал искать что можно упростить. Заменил T8080 на vm80a, 6502 на neo430, еще несколько своих вещей переделал и в итоге высвободил кучу ресурсов. Появилось много места и все стало собираться стабильно и хорошо. Но вот прикучивание HDMI с его 5х клоком снова все испортило и вот тут уж я устал, хотя картинку на HDMI один раз увидеть все-таки смог. Это типичное поведение FPGA -- чем меньше свободного места, тем чудесатее начинает вести себя проект.
- - - Добавлено - - -
P.S. большинство портов по-моему все-таки на 20K. Там больше свободного места и вменяемый SDRAM.
Кстати, я по этой же причине забросил и tang9k, и tang20k девборды, потому что решения в лоб, портированные с альтеровских fpga не работают или работают не так, как ожидается.
Честно говоря, так и подумал, что причина забрасывания - нестабильность решения. Изначально сама идея казалась красивой. Но по факту с сокращением ресурсов приходится тянуть связи все дальше и дальше, и понятно, что качество реализации падает. Но я никак не ожидал, что настолько заметно. И да, клоковые шины-то в 9K есть, но самих IP клоковых, хотя бы делителей нормальных явно не хватает. Тут вот еще и audio_clk 48KHz добавилось (тоже счетчиком)...
По моему в 9k просто маловато ресурсов...большинство портов по-моему все-таки на 20K. Там больше свободного места и вменяемый SDRAM
Ну вот я думал, что взять - 9К, 20К или что-то совсем другое. Решил поиграться на простом для начала. Но вот вовсе не уверен сейчас, что 20К решит эту проблему, и не лучше ли будет выбрать что-то посерьезнее. У меня все же проекты не для тиражирования, а как хобби. Тут цена вторична, но понять бы для начала, в чем проблема. Если 20К ведет себя лучше с этим проектом (а лучше?), то возьму её. С другой стороны, может, что получше надо сразу брать, но что?..
Ну вот я думал, что взять - 9К, 20К или что-то совсем другое. Решил поиграться на простом для начала. Но вот вовсе не уверен сейчас, что 20К решит эту проблему, и не лучше ли будет выбрать что-то посерьезнее. У меня все же проекты не для тиражирования, а как хобби. Тут цена вторична, но понять бы для начала, в чем проблема. Если 20К ведет себя лучше с этим проектом (а лучше?), то возьму её. С другой стороны, может, что получше надо сразу брать, но что?..
Кроме размера главное отличие в том, что в 9K PSRAM, а в 20K SDRAM. Портировать проект с SDRAM на SDRAM проще. Еще на 20К (по-моему) есть внешняя PLL, которая дает дополнительную гибкость в получении разных трудных клоков.
andykarpov
27.01.2025, 18:48
Главная беда 20к в том, что генератор на плате заведен на пин, который не умеет быть клоком :)
То же самое и с внешней PLL, там всего один из сигналов, кажется, это умеет. Вот такая беда.
Для тех, кто захочет пересобрать: вот ссылка на форк: https://github.com/osnwt/tang9k-speccy/tree/hdmi-audio (ветка hdmi-audio).
PS. Попробую пересобрать на 20K версии, посмотрим, будет ли лучше. Но будет не скоро - только заказал.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot