FPGA chips

Изучаем САПР Altera Quartus II / Intel Quartus Prime, язык описания аппаратуры Verilog HDL и кое-что про VHDL. Программируем FPGA Altera / Intel Cyclone III, Cyclone IV, MAX II, MAX10. Экспериментируем с платами разработчика  FPGA серии Марсоход, Марсоход2, Марсоход3. А еще разбираемся с FPGA Gowin.


sourcery codebench

Продолжаем строить Систему-на-Кристалле Amber для платы Марсоход2.

Для любого процессора нужна программа. Писать программу теоретически можно на ассемблере или C/C++. Чтобы запустить проект Amber в нашей плате Марсоход2 нам, конечно придется писать и компилировать программы. Как это делать?

ВНИМАНИЕ! Почти все написанное ниже довольно устарело, а именно, содержит устаревшую ссылку для скачивания компилятора Sourcery Codebench.

Вместо этого лучше самому сгенерировать тулчейн по вот этой инструкции.

soc Amber в плате Марсоход2

Согласно нашему плану, начинаем адаптировать проект Amber для платы Марсоход2. Сейчас нам не нужно вдаваться в мелкие подробности, нужно просто попытаться формально скомпилировать проект по восможности с минимальными переделками.

Итак, я решил портировать ARM-совместимый процессор с opencores.org на нашу плату Марсоход2.

Для скачивания исходников с сайта opencores сперва нужно зарегистрироваться на нем. После этого становится доступно собственно скачивание.

Заходим на страницу проекта: http://opencores.org/project,amber

amber project
The Amber processor core is an ARM-compatible 32-bit RISC processor. The Amber core is fully compatible with the ARM® v2a instruction set architecture (ISA) and is therefore supported by the GNU toolset. This older version of the ARM instruction set is supported because it is still fully supported by the GNU tool chain and is not covered by patents so can be implemented without a license from ARM. The Amber project provides a complete embedded system incorporating the Amber core and a number of peripherals, including UARTs, timers and an Ethernet MAC.


 

Первое впечатление очень хороше. Написано на Verilog, который я изучаю. Проект кажется стабильный, проверенный в FPGA. Говорят есть спецификация. Лицензия LGPL. Последний апдейт проекта – чуть больше месяца назад, значит он живет и совершенствуется. По статистике загрузок видно, что проект очень популярный. Посмотрим что там дальше.

OpenCores

Когда-то давным давно я помню спорил со своим знакомым о «правильных» методах программирования. Суть спора сводилась к следующему. Я говорил, что если задача четко поставлена, то имеет смысл реализовывать ее по возможности с нуля. В этом случае мы можем абсолютно свободно ориентироваться в своем проекте, в исходниках. Конечно, есть риски наделать ошибок, изобретая велосипед. Но и плюсы очевидны – велосипед-то наш: хочешь, можешь руль повыше сделать, хочешь сиденье поудобней. Напротив, мой знакомый говорил: «Прежде чем кодить, нужно поискать готовое решение. Наверняка кто-то уже занимался похожей задачей и есть готовые библиотеки и модули, нужно только использовать их». Ну что тут можно сказать. При таком подходе, если нужная библиотека найдена, наверняка придется изучать документацию по ее применению, изучать ее интерфейс. Это все изучение стоит времени (хотя может оно этого стоит?). Конечно и плюсы есть – скорее всего, найденное решение, если оно по настоящему OpenSource, уже многократно проверено многими людьми, возможные ошибки уже исправлены или будут исправлены в скором времени. Опять же – есть надежда, что готовый продукт будет получен раньше.

Вряд ли в споре рождается истина, но скорее всего она где-то посередине. В моей практике есть и положительные и отрицательные примеры для обоих подходов. Вот, например, наболело, прямо сейчас приходится заниматься проектом в котором автор кажется смешал все возможные стили и методы: в проекте используются библиотеки C++ Boost, Google Protobuf, OpenSSL, Zlib, QT, языки Python и Java, C и C++, make, qmake, cmake и много еще чего. Получился такой зоопарк, что просто волосы дыбом встают. Мало кто понимает как это все вместе работает, но, как обычно, переделывать уже нет ни времени ни желания. Вроде бы и исходники все OpenSource, но разбираться действительно не легко. Общий объем исходников составляет сотни мегабайт. Это был пример Software проекта. Но применимы ли эти рассуждения к аппаратным проектам? Конечно да. Hardware так же бывает OpenSource. Тут так же можно либо писать все с нуля, либо искать, находить, покупать, готовые модули.

Один из самых известных ресурсов OpenSource Hardware – это проект OpenCores.org

Теперь уже я вам советую: «Прежде чем кодить проект Verilog или VHDL, поищите похожее решение на OpenCores». Не обязательно его именно брать и внедрять. Но хотя бы познакомиться с существующими решениями обязательно нужно.

matras в динамической памяти

Плата Марсоход2 гораздо сложнее нашей первой платы, и прежде чем начинать с ней работу, хорошо бы убедиться в работоспособности всех ее узлов. Значительную их часть можно протестировать с помощью
нашего первого проекта. Это : программатор, тактовый генератор, кнопки, светодиоды, связь с компьютером через COM-порт и VGA интерфейс.

Теперь мы будем тестировать еще один важный компонент платы Марсоход2 - динамическое ОЗУ (SDR SDRAM MT48LC4M16A2).