Вот и я про тоже. Начальный сброс по идее пройдёт, а дальше - ёк. У меня сейчас тестовый комп на KDJ11-B без кнопки сброса, но там хоть в большинстве случаев в пульт выйти можно, ну и если сильно припрёт, организовать программный RESET. Но если сам проц завис (есть такая фигня sunset loop, если в названии не ошибся), то только аппаратный сброс, а в моём случае - выключи-включи![]()
Да нормально оно и с клавиатуры сбрасывается, ну кроме терминала. И потом, клавиатура всегда ближе, даже при наличии хардварных кнопок. Что то жИ не всегда бывает.
Profi v3.2 -=- Speccy2010,r2
Наконец собрался и сделал порт проекта на китайскую плату Sipeed TANG Primer.
Эта плата - наверное, самая необычная из всех имеющихся у меня FPGA-плат. Она основана на микросхеме EG4S20BG256 китайской фирмы Anlogic. Не путать с Amlogic — это совершенно разные фирмы. Название этой фирмы - совершенно в китайском стиле, вспомним всякие Toshibra и Panasonix. У фирмы есть свой сайт - http://www.anlogic.com/, но сайт чисто китайский - вместо английской страницы вылезает заглушка. Соответственно, я ничего хорошего от этой платы заранее не ждал, но все оказалось совсем не так.
FPGA EG4S20BG256 обладает очень неплохими заявленными характеристиками - 23К логических ячеек, 64К внутренней статической памяти, 270 внешних портов, встроенный блок динамической памяти SDRAM объемом 2M*32bit, что позволяет обойтись без установки на плату внешней микросхемы SDRAM. Имеются и другие встроенные IP-блоки — АЦП на 8 каналов, монитор напряжения питания, итд, что может пригодиться для реализации функций контроллера, управляющего каким-либо оборудованием. Для реализации нашего проекта такой FPGA должно хватить с огромным запасом.
Сама плата Tang Primer - совсем маленькая плата в форм-факторе DIP-40W (как многие модули Arduino). Ее размеры - 60х20 мм. Вот как она выглядит:
Скрытый текст
[свернуть]
На плате уже установлен JTAG-отладчик, выведенный на разъем micro-USB - внешний интерфейс jtag не потребуется. Разработчик этой платы - фирма Sipeed, у них тоже есть свой сайт, причем даже с английской версией. Вот ссылка на страницу этой платы.
Из полезного для нас на плате имеется только слот micro-SD, поэтому для запуска проекта придется сделать плату ввода-вывода, установив на нее разъемы VGA и PS/2, а также 4 кнопки, 4 переключателя и 5 светодиодов. Компоновка платы может быть любой, я сделал ее на скорую руку из обычной макетной платы, попавшейся под руку:
сама плата
[свернуть]с подключенным интерфейсом RS-232
[свернуть]
Для сборки прошивки и заливки ее в плату используется специальная китайская среда разработки - Anlogic TD (Tang Dynasty). Скачать ее с официального сайта практически невозможно, если вы не знаете китайский язык. К счастью, эта среда лежит в архивах на многих сайтах, в том числе и на сайте разработчика платы sipeed.
Сама среда TD оставляет странное впечатление. Вроде бы все что нужно там есть - аналоги SignalTap, Timing Analyzer, RTL Viewer, Pin Planner/Assignments Editor, даже симулятор какой-то есть. Но все какое-то странное, с непонятными ограничениями. Например в ChipWatcher, аналоге signalTap, нельзя распределить буфер размером более 8К. В выводе Timing Analyzer вообще сходу без стакана не разобраться. Вот, например, так он показывает путь прохождения сигнала:
Все эти имена вроде reg1_b6.e[0] формируются синтезатором, в исходной схеме их нет, и увидеть их можно только просматривая схему в RTL Viewer. Ну прямо очень удобно...Скрытый текст
Код:Slack (setup check) -0.306 ns StartPoint: kernel/graphics/reg2_b5.clk (rising edge triggered by clock pll1/pll_inst.clkc[3]) EndPoint: _al_u11930|kernel/graphics/reg1_b6.e[0] (rising edge triggered by clock pll1/pll_inst.clkc[0]) Clock group: pll1/pll_inst.refclk Point Type Incr Info --------------------------------------------------------------------------------------------------------- kernel/graphics/reg2_b5.clk clock 2.268 launch clock edge clock 0.000 kernel/graphics/reg2_b5.q[0] cell 0.146 kernel/graphics/add1/ucin_al_u14841.a[1] (kernel/graphics/lineadr[5]) net (fanout = 5) 0.735 ../../hdl/kgd-graphics.v(58) kernel/graphics/add1/ucin_al_u14841.fco cell 0.881 kernel/graphics/add1/u3_al_u14842.fci (kernel/graphics/add1/c3) net (fanout = 1) 0.000 kernel/graphics/add1/u3_al_u14842.f[1] cell 0.264 _al_u7075|_al_u6111.c[0] (n5[5]) net (fanout = 1) 0.651 _al_u7075|_al_u6111.f[0] cell 0.251 _al_u11930|kernel/graphics/reg1_b6.e[0] (_al_u6111_o) net (fanout = 1) 0.594 ../../hdl/topboard.v(152) _al_u11930|kernel/graphics/reg1_b6 path2reg0 0.400 Arrival time 6.190 (4 lvl) (69% logic, 31% net) _al_u11930|kernel/graphics/reg1_b6.clk 1.834 capture clock edge 4.166 cell setup -0.116 clock uncertainty -0.000 clock recovergence pessimism 0.000 Required time 5.884 --------------------------------------------------------------------------------------------------------- Slack -0.306 ns[свернуть]
Есть в среде TD и положительные черты - например, неплохой текстовый редактор. Лучше, чем в квартусе. Но есть и очень серьезный недостаток - очень низкая скорость компиляции. Одна и та же схема на моем Ryzen 9 в квартусе собирается полторы минуты, а здесь - 6 минут. В 4 раза дольше! При такой скорости отладкой заниматься ну очень весело.
Следующая проблема - PLL. Если в альтере я могу просто задать умножитель-делитель входной частоты для каждого канала, то здесь все делается совсем по-другому. Входную частоту можно умножить или разделить на что угодно для формирования опорной частоты одного выбранного канала. этот канал объявляется каналом обратной связи, на его основе формируется опорная частота VCO. А затем эту самую VCO можно только разделить на любое целое число для формирования выходной частоты всех оставшихся каналов. Получилось несколько сумбурно, но в фирменном даташите на FPGA все это рассматривается очень подробно, с картинками, вообщем разобраться при желании можно.
Я в качестве опорной выбрал частоту 960 Мгц, умножив на 40 частоту кварца платы (24 МГц). Из нее формируются тактовые сигналы процессора, SD-карты, а также тактовый сигнал терминального модуля, только вместо 50 Мгц я использовал 48 Мгц - разница невелика, тайминги развертки VGA за пределы допусков не ушли.
И, наконец, вылезла совершенно неожиданная проблема: здесь синтезатор не синтезирует конструкцию initial. То есть нет возможности задать начальное состояние регистра в момент включения питания. Из-за этого таймер на всех платах по умолчанию отключен, включить его можно только кнопкой. Что хуже, эта конструкция использовалась VSLAV для инициализации регистрового файла процессора ВМ1. Пришлось переделать его модуль vcram в мегафункцию, а данные вынести в отдельный mif-файл. Также пришлось сделать модули-переходники для адаптации сформированных в TD мегафункций статической памяти к альтеровскому интерфейсу. Это оказалось совсем несложно. Все эти переходники я собрал в единый файл memory_adapter.v.
В конце концов, как ни странно, все заработало. Получился маленький компактный блок, чуть больше спичечного коробка, помещающийся в карман, и при этом являющийся полноценной ДВК-3. Графика работает, в игрушки можно играть. Всем, кто не определился с выбором платы для запуска проекта, и кто не планирует заниматься собственными доработками, я вполне могу рекомендовать плату Sipeed TANG Primer к приобретению. Плата эта свободно продается на алиэкспресс, стоит около 22$. Продающийся вместе с ней отладчик RV Debugger покупать не обязательно - здесь он не потребуется. Конечно, придется немного посидеть с паяльником, но оно того стоит.
Сайт разработчика FPGA - http://www.anlogic.com/
Страница платы TANG Primer на официальном сайте - https://tang.sipeed.com/en/hardware-...w/lichee-tang/. Там лежит красивая картинка с распиновкой платы, ее схема, АНГЛИЙСКИЕ (почти) даташиты на FPGA.
Еще одна страница этой платы, со ссылками на среду TD - https://www.seeedstudio.com/Sipeed-T...rd-p-2881.html
А вот ссылка на продавца этих плат - на самом деле их там много, это первый попавшийся.
Последний раз редактировалось forth32; 23.03.2021 в 20:11.
Закон подлости в действии ;-) Только в субботу получил ALINX AX4010, а тут еще круче подгон. Теперь разрываюсь: то ли начинать изучать ALINX AX4010, то ли заказывать Sipeed TANG Primer и "воевать" уже с ним ...
УКНЦ, ДВК-3, Ленинград-1 (48 кб)
Так и у меня ВМ1 тут теперь работает.
Я, честно говоря, прошлый раз как-то не обратил внимание на твои слова, что проект cpu11 портирован на эту плату. Давно уже не заглядывал в твой репозиторий.
Сейчас посмотрел - да, в новом варианте cpu11 есть такая плата. И модуль vm1_vcram лежит адаптированный, и mif-файл есть. Ну, а я об этом не знал и все то же самое сам проделал. Зато удовольствие получил.
- - - Добавлено - - -
Заказывай, эта платка жрать не просит, а пригодиться может много для чего. Все-таки 64Кб встроенной памяти - на таком, например, и БК-0010 можно, при желании, сделать.
А пока она едет - можно и на AX4010 проект запустить. Благо там и изучать нужно только квартус, чтобы понять как собрать и залить прошивку в плату.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)