Ну что... на MiSTer-е (DE10-nano) благодаря усилиям коллеги xolod работает. :cool:
Система грузится, TETRIS и MARS запускаются. :)
Еще раз спасибо forth32.
Вид для печати
Ну что... на MiSTer-е (DE10-nano) благодаря усилиям коллеги xolod работает. :cool:
Система грузится, TETRIS и MARS запускаются. :)
Еще раз спасибо forth32.
По первой ссылке продают два варианта платы - AX301 (6 килоячеек - маловато будет вроде) и AX4010 (10 килоячеек - вроде норм)
По второй ссылке - только AX4010
См дальше
- - - Добавлено - - -
По первой ссылке за доп деньги продаван предлагает вроде ещё модулей
Вроде как входит и USB bluster, но таблица на китайском - нихт нефига ферштейн.
Сами же платы - AX4010 - да, одно и тоже
- - - Добавлено - - -
А, ну собственно у второго есть похожая таблица с теми же доб модулями, но на человеческом языке.
Но вот некая странность - плата с кристаллом Altera, а usb bluster типа Xilinx. Вроде они (usb bluster-ы) у них одинаковые - но наверняка не скажу...
ксайлинковский прошивальшик в неск.раз дороже альтеровского. и они разные. К слову.
вот хорошая цена, если на то пошло
300 р на бластер - так себе, средне.
там Alinx - созвучно конечно)
Мои 5 копеек, как сделать проект портируемым на любую FPGA-плату:
- как пример можно посмотреть на мой cpu11 и его структуру каталогов - переносится за полдня на любую подходящую плату (включая живой прогон и тест)
- все элементы зависимые от семейства FPGA (циклон, спартан, zynq, etc) вынести в отдельные файлы-библиотеки (per FPGA-family)
- внешнюю шкурку, зависящую от распиновки сделать отдельной для каждой платы (per board), внутрь вывести совместимый интерфейс, куда подключать уже портируемое ядро
- для каждой платы - свой индивидуальный проект в каталоге, со своей распиновкой и файлом внешней шкурки, под тулзу нужного производителя (Quartus, Vivado, ISE, Tang Dynasty)
- надо начать использовать git по прямому назначению, а не как примитивную систему контроля версий и CMS для выкладывания на сервер (github).
Вот по последнему пункту, при правильной архитектуре проекта - ЛЮБОЙ человек, имеющий свою плату с FPGA, сможет сделать на ней свой проект, отладить
на своей личной плате, а затем СДЕЛАТЬ PULL REQUEST, и это может быть включено в основной репозиторий. И все платы и апдейты будут храниться в одном месте,
в одной репке. И все изменения будут ревьюиться и мержиться мейнтенером (forth32). Потому что я вижу что начинается обычный колхоз - проект растаскивают,
как-то где-то портируют, выкладывают на стороне. Это прекрасно, но серьезные проекты живут не так. Если будет сделана реорганизация, как описано выше - то сделаю
порты на DE0, и DE2-115, а может еще на какие имеющиеся платы. Да и любой может сделать то же самое для своей платы, и все это - будет храниться в одном месте,
ошибки и проблемы будут тречиться в одном месте, фиксы и дальнейшая разработка - в одном едином месте.
git - это система распределенной разработки прежде всего. Лично я бы очень хотел поучаствовать в разработке ДВК на ПЛИС. Но, я сознательно в это не лез, потому что это отдельная большая тема, мне просто не хватит ресурсов ее потянуть. Так что я сознательно ограничился разработкой ключевого компонента, продумал его дальнейшую интеграцию и ждал что кто-нибудь подхватит. Возможно если бы живая ДВК не нужна была для оборудования, то любительский проект до сих пор бы не появился, работы тут много, одного энтузиазма не всегда достаточно :). Но поучаствовать-то хотя бы частично хочется, есть свои идеи/модули, поэтому было бы круто если бы проект приобрел вид, пригодный для широкой контрибуции.
Ну что ж, в этом всем есть своя правда.
Изначально я очень не хотел засорять репозиторий кучей проектов под разные платы. Мне казалось, что тот, кто заинтересуется этой разработкой, а таких здесь можно по пальцам одной руки пересчитать, легко сможет адаптировать проект под свою плату, как я это в свое время сделал с тестовым стендом cpu11.
VSLAV, ты как всегда оказался дальновиднее. Логичнее будет собрать все кустарные порты в один репозиторий, а не размазывать их по форуму. Если бы до меня это дошло сразу, я бы заложил это в основу проекта. Теперь же придется глобально продумывать, что именно вынести на верхний уровень, потом перетаскивать туда куски схем вместе с тянущимися за ними жгутами проводов. Все это снова и снова перепроверять. И, самое противное, опять переписывать документацию. На это все требуется немало свободного времени. Что ж, придется в выходные этим заняться.
Есть еще один момент. По результатам временного анализа в процессоре ВМ2 у меня всегда вылезала кучка красных отрицательных слаков. Все эти пути лежат внутри процессорного ядра, идут от регистра PLM к разным другим регистрам. И, действительно, по этим путям в схеме висит длинная цепочка разнообразной логики.
Поскольку слаки были небольшими, около 0.1нс, я на это дело просто забил. TimeQuest показывает Fmax=99Мгц, процессор работает как надо, не сбоит, стресс-тест на несколько суток отрабатывает без проблем на 30-градусной жаре.
Когда я делал плату на процессоре М2, я как-то упустил из виду повторить временной анализ. А вот теперь сделал его, и несказанно удивился. Слаки стали огромными - по самым длинным путям стали около 2нс. И Fmax теперь предлагается 84 Мгц. Но, что странно, процессор так же отлично работает на 100Мгц, тесты идут, ничего не виснет.
Я вот думаю. Забить на такое уже нельзя. Может быть, сделать тактовую частоту 75 Мгц для всех процессоров? Или даже 50 Мгц? В конце концов, для проекта ДВК даже такая частота явно избыточна. И уж тем более для всяких управляющих контроллеров.
Главное, чтобы не начались проблемы с SDRAM. Впрочем, М4 у меня отлично работает на 50 Мгц с SDRAM без всяких проблем.
Фухххх.. Отлегло...
ISE вполне солидарен с Quartus-om оказывается, я вчера на весь этот ужас в Timing Analyzer посмотрел, поудивлялся (на бОльшее я тут не способен), попинал в очередной раз на свои кривые руки, и закрыл. В лучшем случае Fmax=64Мгц было, а то и в несколько раз меньше :((((
Ну работает же как то думаю, и ладно. Возможно трапы 4 и 10 из-за этого иногда и вылазят, спонтанно на ровном месте.
Ну и компиллер еще на один сигнал стал ругаЦЦа, что типа так категорически не рекомендуется!!, но это уже другаЙя история, не в ядре проца.
так, просто
Это абсолютно понятно. Поддержка "кучи плат" требует более сложной архитектуры, тем более лично тебе в данный момент эта "куча" не нужна и в проекте есть много других проблем. Вполне логично упростить и сосредоточится на более критичных задачах. Мой cpu11 шел точно так же - поддерживалась только DE0 и все. А потом пошли вопросы по другим архитектурам, стало ясно что не все так уже гладко с портированием и пришлось делать реорганизацию. Кстати, эту историю прекрасно видно в git log - тем git и хорош - хранит историю, отмечает вклад каждого и видно кто-где какие строчки внес и у кого можно проконсультироваться.
То что я высказал в предыдущем посту - это не критика, и даже не конкретная просьба, это просто видение как проект можно было бы улучшить (такой себе roadmap) и обеспечить дальнейшее развитие. Open Source - это не просто показать исходники, тут Open означает "открытый для контрибуции". В одиночку все интересы покрыть очень сложно, но если обеспечить хорошую базу и наладить взаимодействие с людьми, то может выйти интересно. Это не очень просто, не факт что получится, но пойти в этом направлении мне кажется интересным.
А предыдущий вариант не выкидывается же, гит все сохранит :). Я бы предложил сделать архитектуру в новой ветке, выложить как PR, обсудить его открыто (с конкретным сроком окончания дискуссии, чтобы не расползаться), и только потом замержить окончательный вариант.
А ты мейнтейнер, ты не должен (и не сможешь, хотя бы потому что у тебя некоторого железа не будет на руках) делать все сам. Если человек предлагает патчи на свою плату, то ты смотришь чтобы патчи не портили основную часть (а если они ее изменяют, то это должны быть отдельные коммиты, с пояснением почему и как, это легко отследить и проверить), а за часть для конкретной платы отвечает контрибутор, тесты и документация по плате - на нем/ней. Если нет документации - в ревью пишешь - вот это-это и это - надо описать, а вот тут тестов не хватает итд. Это как может быть, если проект сделать тру опенсорс. И можно двигаться постепенно - сначала новая архитектура для легкой контрибуции плат, на шаг вперед можно подумать как облегчить контрибуцию новых модулей (я хочу например сделать MX/MY чтобы они работали с реальными дисководами, КЦГД хочется, но там все в контроллер памяти упирается), подумать как процессоры сделать git-субмодулем чтобы все изменения в процессорах подтягивались автоматом итд.
Частоту хорошо бы сделать настраиваемой - PLL же программируется, заодно любителей оверклока порадуем.
Дискуссия про языки описания схем перенесена сюда.
Закончен очередной этап развития. Может быть, самый глобальный из всех.
Теперь дерево проекта может хранить в себе набор портов под различные FPGA-платы. Не нужно больше размазывать кустарные порты по форуму, они все могут лежать в одном месте.
В дереве проекта появился каталог boards/, а в нем набор подкаталогов, каждый из которых соответствует одной конкретной FPGA-плате. Теперь головным модулем проекта является интерфейсный модуль, производящий адаптацию ядра проекта под конкретную плату - для каждой платы создается свой собственный интерфейсный модуль. Соединительный модуль (корзина) topbaord теперь находится уровнем ниже и предоставляет унифицированный интерфейс к ядру проекта.
Кроме интерфейсного модуля, в каталоге проекта для каждой платы хранится свой собственный набор мегафункций - PLL и altsyncram.
На интерфейсный модуль также вынесены следующие подсистемы:
- PLL
- Контроллер SDRAM
- Схема управления видео-ЦАП
Все эти элементы сильно зависят от конкретной FPGA-платы.
Частоты PLL теперь настраиваются в зависимости от примененного процессорного модуля, а делители и умножители задаются в файле конфигурации config.v. Можно по результатам временного анализа устанавливать свои тактовые частоты для каждой конкретной FPGA.
Соединительный модуль topboard теперь предоставляет унифицированный интерфейс к контроллеру SDRAM. Адресную шину я сразу сделал 22-битной - а вдруг все же когда-нибудь пригодится? Конкретная реализация ОЗУ находится на интерфейсной плате. Можно воспользоваться входящим в проект контроллером стандартной SDRAM, можно сделать свой собственный, если на FPGA-плате установлен SDRAM другого типа, например DDR2. Если ресурсы позволяют, можно выделить 64К из внутренней памяти FPGA. Пример реализации такого подхода можно посмотреть в проекте для платы A-E115FB.
Я произвел пробное портирование схемы на некоторые свои FPGA-платы, попавшие под руку. Они все сделаны на различных вариантах FPGA Cyclone-4 - другие серии FPGA я уже давно не использовал. Все эти порты уже лежат в каталоге boards/ и могут служить примером для создания собственных портов. Для каждой платы приложен файл Readme.pdf с описанием особенностей данной платы и реализации проекта на ней.
Как обычно, документация проекта полностью переработана в соответствии со всеми изменениями, и крайне рекомендуется к ознакомлению.
Концепция построения иерархии проекта пока не окончательная - возможно, кто-то предложит вариант получше. Настолько получше, что мне не лень станет снова все переделывать и переписывать доку. Я, конечно, понимаю, что интересующихся этим проектом людей можно пересчитать по пальцам одной руки, но все же...
VSLAV, я обдумал твою идею насчет унификации IP-компонентов в пределах одной серии FPGA. Обдумал, и отказался. Не нравится мне, когда куски схем размазаны по всему дереву, как масло по бутерброду. Тем более, что у меня вообще сейчас нет ни одной платы с FPGA, отличных от циклона-4. Я решил, что проще хранить полный набор мегафункций вместе с каждой платой, много места они не занимают.
Теперь все желающие могут попробовать сделать порт под собственную плату, и оценить, насколько это удобно. Я сделал 5 разных портов, и это заняло у меня один день, что не так уж и плохо. Конечно, протестировать каждый порт со всеми вариантами конфигурации я не успел, но, по идее, все должно работать.
Я решил оставить старый репозиторий в неизменном виде. Новый вариант проекта лежит в новом репозитории с более адекватным именем - https://github.com/forth32/dvk-fpga. Ссылку в первом сообщении я пока не исправлял.
Еще полгода назад я даже не предполагал, в какого монстра превратится моя несчастная плата МС1201.02...
Ну что сказать... Круто, очень хороший прогресс!
Дело не в "нравится-не нравится", а в удобстве менеджмента проекта и его дальнейшем развитии. Давай посмотрим на шаг вперед? Вот у тебя сейчас 5 плат на Cyclone-IV. Берем папки ip components и видим минимум 90 процентное совпадение. Теперь представим что нам надо исправить какую-нибудь ошибку в pll.v? Да просто добавить еще один выход частоты для какого-то нового модуля? И "пошли онисолнцем палимы" по всем папкам обновлять? Хорошо, 5 плат пока всего. А три десятка будет?
Здорово, я как-то даже не пытался так PLL-ки конфигурить, попытаемся это же сделать и для Xilinx ит прочих.
Пока OK, но надо бы сразу всю физическую память SDRAM на борту покрывать - 8M там или 32M, потому что когда-нить доживем до RAM-диска или разделения памяти между разными системами. Но сейчас отлично, можно пока голову не забивать.
Ну что ж, надо мне делать порт на DE0, проект уже имеет структуру куда можно внести свой вклад, спасибо.
Update: хорошо бы еще прописать минимальный гайд/правила для контрибуторов - какие языки допускаются, правила оформления исходников, что должен включать порт - какую документациюб тесты и так далее.
есть такая плата EBAZ4205, на ней ксайлинкс цинк7010, озу, флеш, микросд, эйзернет и много gpio на удобных разъемах... при этом стоит примерно 1000руб (одну тысячу!) - их китайцы от майнеров продают кучами.
схема, топология, примеры (с файлами ног под виваду) есть на гитхабе.
на gpio можно VGA или HDMI цеплять.
по ресурсам (если даже забыть про два арм ядра) вроде как самое то под такой проект.
может кто из гуру портирует проект на нее?
В принципе ты прав, я тоже обдумывал эту ситуацию - массовое внесение исправлений в файлы мегафункций.
Но буквально на следующий день жизнь показала, что все это не совсем так. Возьмем в качестве примера плату A-E115FB. Я ее специально добавил в проект, потому что она принципиально отличается от всех остальных плат.
На этой плате нет генератора 50 Мгц. Вообще нет. Есть целых три других - 25, 27 и 48 Мгц. И вот что делать, если pll.v - общая для всех циклонов 4? Конечно, можно взять 48Мгц вместо 50, и надеяться, что параметры VGA-сигнала уплывут не сильно. Но это не наш метод. Нам придется сделать свою собственную копию pll.v, включить ее в дерево проекта вместо стандартной, и синтезировать эти самые 50Мгц из 25. В результате имеем бардак - где-то испоьзуется своя pll, где-то общая... Вот потому я и решил, что pll.v уникален для каждой платы. А потребуется еще одна частота - подключить вторую pll, их же, я так понимаю, как минимум две даже в самых младших FPGA. Может быть я и не прав, конечно...
Что касается компонентов altsyncram, то вот они уж точно будут одинаковыми для всего семейства. Но, с другой стороны, и ошибок они не могут содержать по определению - это же автоматически сгенерированные файлы.
Вообщем, давай пока оставим так как есть, а если новые платы попрут лавиной - будем решать как жить. Я лично сомневаюсь, что в проекте появится больше 10 плат, не того уровня проект чтобы массово им интересовались.
Во, это было бы отлично. В том смысле, что ты свежим взглядом можешь сразу ухватить, какие могут возникать проблемы при портировании. Тем более что DE0, как я понимаю, это уже другое семейство, cyclone 3.Цитата:
Ну что ж, надо мне делать порт на DE0,
Я-то к проекту уже привык, может быть каких проблем вообще не замечаю.
Самое главное - интерфейс к соединительной плате topboard, я в доке более-менее подробно описал.Цитата:
Update: хорошо бы еще прописать минимальный гайд/правила для контрибуторов - какие языки допускаются, правила оформления исходников, что должен включать порт - какую документациюб тесты и так далее.
А остальное... Да пусть, наверное, делают кому как удобнее, главное вообще чтобы хоть кто-то что-то попытался сделать. Я даже на VHDL согласен, сам я на этом языке писать не могу, но чужой код понимаю.
Собственно, основные требования диктуются здравым смыслом:
- добавить в проект файл readme, в котором описать, какая внешняя периферия к каким портам подключается, если ее нет на плате. Всякие ps/2, SD и прочее. И описать назначение кнопок-переключателей-светодиодов.
- не забыть подправить SDC-файл под свои настройки pll. Это для альтеры, конечно, у ксилинксов наверняка свой формат файлов временного анализа используется
- не трогать без уважительной причины остальные файлы проекта, не относящиеся к данной плате.
Или стоит внести это в документацию?
Я, вообщем-то, с ксилинксами дела не имел никогда в жизни. Но можно и попробовать. Я так понимаю, что ксилинкс XC Z7010 - это 28К логических ячеек и 2МБ внутренней памяти. Должно влезть с большим запасом. Вообще использовать такой мощный чип для этого проекта - верх расточительства - там же и ADC, и 2 ядра ARM, и все это пропадет впустую.
Заказал себе такую платку. Когда приедет, может быть и поиграюсь с ней. Давно хотел ксилинксы пощупать, пока их АМД окончательно не сожрала.
Пока рылся в коробках в поисках плат для портирования, нашел прикольную платку - LicheeTang Anlogic EG4S20. Наткнулся на нее случайно пару лет назад на алиэкспрессе, заказал для пробы, получил, убрал в коробку и забыл напрочь.
Платка совершенно копеечная, пришла в двух маленьких коробочках - сама платка и USB-JTAG адаптер. Но при этом для набортной FPGA Anlogic EG4S20BG256 китайцы заявляют 20К ячеек, 130Кб встроенной памяти и даже встроенную SDRAM на 8Мб! На платке есть SD-сокет, осталось подключить PS/2 и VGA - и можно пытаться запустить проект.
Но здесь надо использовать китайскую же среду разработки - какую-то TD IDE. Версия под линукс есть, но, боюсь, после привычного квартуса тяжеловато будет это дело использовать. Пусть пока полежит в коробке...
Частота кварца должна быть параметром конфигурации. Если модуль PLL сложно зависит от входной частоты, то надо выбрать набор входных поддерживаемых частот, скажем 25 и 50MHz и сделать нескорлько модулей PLL под ifdef.
А размер поменять? :)
Конечно, решаем проблемы по мере их поступления, пока бросаться переделывать не нужно.
Да, и при ревью патчей проверять соответствие. Но это опционально, если ты не хочешь общий стиль, канву, то можно и полную свободу дать.
- - - Добавлено - - -
Да, это классная платка, среда Династия Тан - тоже нормальная, работает - все мои процессоры на эту плату портированы и проверены.
Вчера перенес порт под MIST на новую структуру.
Но в проект собирается только топ уровень, а вся вложенная структура почемуто занимает ноль ячеек.
https://github.com/xolod79/dvk-fpga/...ain/board/MiST
кнопки инвертируй
Когда я смотрю результат синтеза, у меня на элементе kernal сигналы bt_halt, bt_reset, bt_terminal_rst, bt_timer висят в 1 (как я понимаю, всегда активны). Что то мне подсказывает, что это неправильно
- - - Добавлено - - -
По идее, они должны быть куда то подключены...
- - - Добавлено - - -
Ну а поскольку они постоянно в 1, дальше оптимизация и практически всё из схемы языком слизнуло...
Если я правильно помню про кнопки на DE10, то они инвертированные, то есть, если button ни куда не подключать, то тогда wire [3:0] button = 1, а не инвертирование кнопок
- - - Добавлено - - -
аха, вот только
inputКод:// кнопки
input bt_reset, // общий сброс
input bt_halt, // пультовое прерывание
input bt_terminal_rst, // сброс терминальной подсистемы
input bt_timer, // выключатель таймера
Так они и есть input. Входы от кнопок.
Тут же проблема в том, что активный уровень сигнала, например, bt_reset - высокий. А в модуле верхнего уровня описано wire button[3:0]=0 (я бы все же написал 3'b000). А дальше этот ноль инверитруется, получается 1, и схема синтезируется в режиме перманентного сброса. То есть от схемы гулькин хрен остается...
Да, спасибо! Слона я и не заметил.
Может тогда уже всё таки 4b'0000 или уж если по правильному 4b'1111?
Это я zebest-у
- - - Добавлено - - -
Всё зависит от физических кнопок
- - - Добавлено - - -
И ещё вопрос - как при этом руками сбросить
Вот и я про тоже. Начальный сброс по идее пройдёт, а дальше - ёк. У меня сейчас тестовый комп на KDJ11-B без кнопки сброса, но там хоть в большинстве случаев в пульт выйти можно, ну и если сильно припрёт, организовать программный RESET. Но если сам проц завис (есть такая фигня sunset loop, если в названии не ошибся), то только аппаратный сброс, а в моём случае - выключи-включи :)
Да нормально оно и с клавиатуры сбрасывается, ну кроме терминала. И потом, клавиатура всегда ближе, даже при наличии хардварных кнопок. Что то жИ не всегда бывает.
Наконец собрался и сделал порт проекта на китайскую плату 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
А вот ссылка на продавца этих плат - на самом деле их там много, это первый попавшийся.
Закон подлости в действии ;-) Только в субботу получил ALINX AX4010, а тут еще круче подгон. Теперь разрываюсь: то ли начинать изучать ALINX AX4010, то ли заказывать Sipeed TANG Primer и "воевать" уже с ним ...
Так и у меня ВМ1 тут теперь работает.
Я, честно говоря, прошлый раз как-то не обратил внимание на твои слова, что проект cpu11 портирован на эту плату. Давно уже не заглядывал в твой репозиторий.
Сейчас посмотрел - да, в новом варианте cpu11 есть такая плата. И модуль vm1_vcram лежит адаптированный, и mif-файл есть. Ну, а я об этом не знал и все то же самое сам проделал :). Зато удовольствие получил.
- - - Добавлено - - -
Заказывай, эта платка жрать не просит, а пригодиться может много для чего. Все-таки 64Кб встроенной памяти - на таком, например, и БК-0010 можно, при желании, сделать.
А пока она едет - можно и на AX4010 проект запустить. Благо там и изучать нужно только квартус, чтобы понять как собрать и залить прошивку в плату.