духу не хватит столько провернуть-изучить-разобрать
У меня это было скорее не про путь к грандиозной цели, а про удовольствие от процесса. Хотелось что-нибудь спаять. Но если спаять что-то небольшое и завершенное, то я потом день поиграюсь и всё. А если сделать плату с FPGA, то играть можно еще не один год. Общая цель бралась скорее как ориентир (типа гулять не куда глаза глядят, а в направлении той горы, возвышающейся на горизонте...), и я не закладывался на то, чтобы во что бы то ни стало её достигнуть.
Было бы интересно почитать статьи по реализации отдельных узлов системы.
Боюсь, если глубоко уходить в детали, то скучно получится. К тому же, несмотря на то что проект затрагивает очень много всего, ни в какой из затронутых областей я не эксперт. И про разводку платы, и про verilog, и про драйвера в линуксе найдется кто-нибудь, кто напишет лучше.
Пожалуй самый простой вариант - buildroot. Набор скриптов, которые автоматически скачивают и собирают все что выбрано при конфигурации. Но там получается система без компилятора. А еще результат сборки "оптимизируется" по размеру - на заключительном этапе пишет "Finalizing root filesystem..." и удаляет нафиг /usr/include, маны, и все статические библиотеки. Мне пришлось отредактировать скрипт чтобы ничего не удалялось. Чтобы в системе был компилятор, нужно собрать toolchain отдельно и указать при конфигурации buildroot путь к нему. Для RISC-V я брал toolchain отсюда. Собирал командой make linux-native (почему-то не документирована) - так помимо кросс-компилятора собирается еще нативный компилятор для RISC-V, который можно потом скопировать в целевую систему.
При желании можно обойтись и без buildroot. Самый минимум - собрать ядро и busybox, уже достаточно чтобы можно было загрузиться и увидеть консольку.
Меня FPGA долго интриговали, всё хотелось понять: можно ли на них развести ЦПУ со своей системой команд?
Можно. Я, кстати, такое тоже пробовал, давал ссылку где-то ближе к началу статьи. Но после изобретения своей системы команд внезапно оказывается что и компиляторы и весь софт приходится писать/портировать самому. А это еще больший объем работы, чем процессор сделать. Энтузиазм быстро заканчивается. С этой точки зрения может быть лучше делать собственную реализацию какой-нибудь существующей архитектуры (тот же RISC-V) и, если захочется, добавить туда кастомное расширение со своими командами.
Да, можно сразу две или три FPGA. А можно взять одну большую. Например есть Ti180, как раз в три раза больше чем Ti60. Но производительности нормальных процессоров так все равно не достичь, так что нужно хорошо понимать в чем цель. Чем больше доступно ресурсов, тем больше кода на верилоге придется написать, чтобы их все эффективно использовать.
Efinity - их официальная среда разработки. Бесплатная, но не open source. Мне понравилась. Нативно работает в линуксе, синтезирует быстрее чем Quartus, легко интегрируется с самодельным программатором на ftdi. Удобный дебаггер.
Флюса пробовал два: NC191 и RF800. Проблема, что их куча всяких разных, сложно понять какой нужен. Капля иногда застревала между двумя пинами и было сложно от нее избавиться.
Выводы не паяют по одному, пайка всего ряда (стороны) производится одним движением – касаемся паяльником первого вывода и проводим вдоль до последнего, не останавливаясь.
Я видел такие видео на ютубе... Вжих и все готово. Тоже так хочу. А у меня вжих и капля припоя засела где-нибудь между вторым и третьим пином. Но я надеюсь что тоже когда-нибудь научусь.
Coremark пока не пробовал. Dhrystone выдает 495 DMIPS (см. предпоследнюю картинку в статье). gcc, g++, python работают, но довольно медленно. Hello world на С компилируется пару секунд. Думаю можно ядро линукса прямо там собрать, но займет много часов. Xorg пока не запускается - я что-то не так с драйвером фреймбуфера сделал, но эта проблема определенно решаемая.
60 MHz у меня получалось на предыдущей плате с Altera MAX10. Efinix Titanium в разы быстрее :)
Мне OHCI не очень нравился тем, что там требуется DMA, а это усложняет шину памяти, требует clock domain crossing и использует довольно много логических ячеек. Но у него есть неоспоримое преимущество - работает в линуксе без написания собственного драйвера.
Кстати собственный USB контроллер я тоже пытался делать, давно, когда только познакомился с верилогом. Код здесь, но сейчас даже я сам в нем уже не разберусь.
Скажите, какая тактовая частота вычислительного ядра у Вас получилась ?
А с USB как раз таки все получилось. Я использую OHCI из репозитория SpinalHDL, реализует USB 1.1 host controller. Мой код инициализации вот тут. Долго не получалось заставить этот код работать, уже от безысходности изучал исходники контроллера, потом оказалось, что TD и ED у меня выровнены в памяти по 4 байта, а надо по 16.
может следующим шагом карту расширения создать, специализированный вычислитель для пс или частоты FPGA сильно отстали для таких идей?
У некоторых серьезных FPGA есть встроенный интерфейс PCIe. Так что теоретически возможно. Но я пожалуй не возьмусь такое дома делать - еще больше выводов у микросхемы, еще больше слоев на плате, на порядок более строгие требования к трассировке.
Используемая у меня Ti60 не умеет выдавать сигнал с частотой более 1.5 GHz. А для PCIe нужно как минимум 2.5 GHz.
CoreMark 1.0 : 776.123615Добавил графику! В том числе работают файловый менеджер pcmanfm, браузер dillo (правда пока без интернета), mupdf, текстовый редактор leafpad.
Запустился DOOM (prboom v2.5.0), вполне играбельно.
У меня это было скорее не про путь к грандиозной цели, а про удовольствие от процесса.
Хотелось что-нибудь спаять. Но если спаять что-то небольшое и завершенное, то я потом день поиграюсь и всё. А если сделать плату с FPGA, то играть можно еще не один год. Общая цель бралась скорее как ориентир (типа гулять не куда глаза глядят, а в направлении той горы, возвышающейся на горизонте...), и я не закладывался на то, чтобы во что бы то ни стало её достигнуть.
Боюсь, если глубоко уходить в детали, то скучно получится. К тому же, несмотря на то что проект затрагивает очень много всего, ни в какой из затронутых областей я не эксперт. И про разводку платы, и про verilog, и про драйвера в линуксе найдется кто-нибудь, кто напишет лучше.
Пожалуй самый простой вариант - buildroot. Набор скриптов, которые автоматически скачивают и собирают все что выбрано при конфигурации. Но там получается система без компилятора. А еще результат сборки "оптимизируется" по размеру - на заключительном этапе пишет "Finalizing root filesystem..." и удаляет нафиг /usr/include, маны, и все статические библиотеки. Мне пришлось отредактировать скрипт чтобы ничего не удалялось.
Чтобы в системе был компилятор, нужно собрать toolchain отдельно и указать при конфигурации buildroot путь к нему. Для RISC-V я брал toolchain отсюда. Собирал командой
make linux-native(почему-то не документирована) - так помимо кросс-компилятора собирается еще нативный компилятор для RISC-V, который можно потом скопировать в целевую систему.При желании можно обойтись и без buildroot. Самый минимум - собрать ядро и busybox, уже достаточно чтобы можно было загрузиться и увидеть консольку.
$39 FPGA + $29 память + $8.44 TFP410 (TMDS transiver) + еще десяток компонентов/разъемов по 1-2 $. Остальное дешевое.
Наверное чуть меньше $100.
Можно. Я, кстати, такое тоже пробовал, давал ссылку где-то ближе к началу статьи. Но после изобретения своей системы команд внезапно оказывается что и компиляторы и весь софт приходится писать/портировать самому. А это еще больший объем работы, чем процессор сделать. Энтузиазм быстро заканчивается.
С этой точки зрения может быть лучше делать собственную реализацию какой-нибудь существующей архитектуры (тот же RISC-V) и, если захочется, добавить туда кастомное расширение со своими командами.
Да, можно сразу две или три FPGA. А можно взять одну большую. Например есть Ti180, как раз в три раза больше чем Ti60. Но производительности нормальных процессоров так все равно не достичь, так что нужно хорошо понимать в чем цель. Чем больше доступно ресурсов, тем больше кода на верилоге придется написать, чтобы их все эффективно использовать.
Разумеется! В KiCad есть продвинутая фича "отрегулировать длину отдельно взятой дорожки", без неё было бы тяжко.
Не, я не в курсе. Я сразу свою стал делать. У них на сайте есть какие-то девборды, но дорогие очень.
Efinity - их официальная среда разработки. Бесплатная, но не open source. Мне понравилась. Нативно работает в линуксе, синтезирует быстрее чем Quartus, легко интегрируется с самодельным программатором на ftdi. Удобный дебаггер.
Спасибо за советы, буду учиться.
Флюса пробовал два: NC191 и RF800. Проблема, что их куча всяких разных, сложно понять какой нужен. Капля иногда застревала между двумя пинами и было сложно от нее избавиться.
Я видел такие видео на ютубе... Вжих и все готово. Тоже так хочу. А у меня вжих и капля припоя засела где-нибудь между вторым и третьим пином. Но я надеюсь что тоже когда-нибудь научусь.
Coremark пока не пробовал. Dhrystone выдает 495 DMIPS (см. предпоследнюю картинку в статье).
gcc, g++, python работают, но довольно медленно. Hello world на С компилируется пару секунд. Думаю можно ядро линукса прямо там собрать, но займет много часов.
Xorg пока не запускается - я что-то не так с драйвером фреймбуфера сделал, но эта проблема определенно решаемая.
60 MHz у меня получалось на предыдущей плате с Altera MAX10. Efinix Titanium в разы быстрее :)
Мне OHCI не очень нравился тем, что там требуется DMA, а это усложняет шину памяти, требует clock domain crossing и использует довольно много логических ячеек. Но у него есть неоспоримое преимущество - работает в линуксе без написания собственного драйвера.
Кстати собственный USB контроллер я тоже пытался делать, давно, когда только познакомился с верилогом. Код здесь, но сейчас даже я сам в нем уже не разберусь.
220 MHz
О, действительно похоже! Я планирую как-нибудь для своего устройства тоже корпус сделать. И еще добавить небольшой e-ink дисплей.
А с USB как раз таки все получилось. Я использую OHCI из репозитория SpinalHDL, реализует USB 1.1 host controller. Мой код инициализации вот тут. Долго не получалось заставить этот код работать, уже от безысходности изучал исходники контроллера, потом оказалось, что
TDиEDу меня выровнены в памяти по 4 байта, а надо по 16.Я просто живу далеко, мне с этими проблемами сталкиваться не пришлось.
Я догадывался что серьезные электронщики с серьезным оборудованием и не такое могут ;)
У некоторых серьезных FPGA есть встроенный интерфейс PCIe. Так что теоретически возможно. Но я пожалуй не возьмусь такое дома делать - еще больше выводов у микросхемы, еще больше слоев на плате, на порядок более строгие требования к трассировке.
Используемая у меня Ti60 не умеет выдавать сигнал с частотой более 1.5 GHz. А для PCIe нужно как минимум 2.5 GHz.
Я теперь научился записывать сигналы непосредственно с FPGA :-) У Efinix довольно удобный дебаггер. И больше не нужно оставлять iverilog на ночь.
Чуть больше года.