FPGA & Verilog БлогFPGA chips

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


m2rpi

Объединение технологий FPGA и CPU давно будоражит пытливые умы разработчиков. Та же компания Intel не оставляет попыток "скрестить ежа с ужом", да и у разных производителей ПЛИС есть свои чипы с встроенным HPS. Об одной такой системе мы уже писали. Интерес этот понятен, каждая из технологий FPGA/CPU удобнее в какой-то своей сфере применения. На FPGA шире спектр подключаемой периферии и проще работать с задачами реального времени. На CPU удобнее обрабатывать и хранить данные, проще с пользовательским интерфейсом и связью с внешним миром. Но у существующих решений есть две серьезные проблемы - это высокий порог вхождения и цена. А нам хотелось бы реализовать симбиоз FPGA и CPU "для самых маленьких". Отсюда появилась идея сделать плату для Raspbery Pi. Хотя платы с FPGA для Raspbery Pi уже существуют, они имеют ряд недостатков. Опять-же, цена, нет плат с альтеровскими чипами и, на наш взгляд, не очень удачное конструктивное решение.

Первоначально, вариант обвязки MIPSfpga+ процессора MIPS microAptiv UP для FPGA написал Yuri Panchul на основе обвязки MIPSfpga 1.0 написанной Sarah Harris. Затем MIPSfpga+ существенно развил Stanislav Zhelnio, который и ведет проект сейчас. В проект также вносили добавления и создавали на его основе другие проекты разработчики из России, Украины, США, Великобритании, Италии и других стран.. В mipsfpga-plus репозитории на github есть примеры программ, которые можно запустить в процессоре.

Здесь я дам некоторые пояснения к некоторым программам и расскажу, как я запускаю их в плате Марcоход3.

Итак, в проекте mipsfpga_plus есть папка programs и в ней еще несколько подпапок:

00_counter
01_light_sensor
02_cache_misses
03_pipeline_bypasses
04_memtest
05_uart
06_timer_irq
07_eic
08_uart_irq
09_adc
10_linux

Это примеры программ, которые можно откомпилировать и запустить в процессоре (или правильнее сказать в SoC) MIPSfpga. В предыдущей статье я уже компилировал сам проект FPGA, загружал ПЛИС платы Марсоход3 и запускал программу 00_counter.

Давайте теперь попробуем запустить некоторые другие программы.

Здесь расскажу, как откомпилировать проект MIPSfpga для платы Марсоход3, как загрузить образ в плату, откомпилировать простую сишную программу и запустить ее в плате на процессоре MIPS.

Далее описано по шагам, что нужно сделать.

MIPSopen logo

На сайте habr.com появилось очень много статей о процессоре с архитектурой MIPS. Конечно это интересно. Компания Imagination Technologies Group еще 2013 году приобрела MIPS Technologies, Inc. и ее разработки в области архитектурных решений микропроцессорного ядра и IPCores. С тех пор многое изменилось. Стремясь вернуть МИПСу былое влияние на рынок, компания Imagination предприняла ряд решительных мер. Например, она открыла исходные тексты ядра всем заинтересованным лицам. Университеты могут бесплатно получить исходники и обучающие материалы по MIPS процессору и могут преподавать студентам его внутреннее устройство и принципы работы. Ядро MIPS можно запустить на многих платах с ПЛИС: de0_cv, de0_nano, de10_lite, nexys4 и других.

Позже, в 2018 году, Wave Computing приобрела технологии MIPS, однако, ядро MIPS остается открытым и это хорошая новость.

Мы подумали, что запуск ядра MIPSfpga в плате Марсоход3 должен быть интересным нашим читателям. Именно поэтому последнее время я занимаюсь портированием этого проекта на нашу плату.

 

Когда человек начинает осваивать какой нибудь микроконтроллер или ПЛИС, то первый проект, который он делает - это моргание светодиодом. На нашем сайте есть примеры таких простых проектов и для первой платы Марсоход, и для второй платы Марсоход2 и для третьей.

Плата Марсоход3 имеет 8 светодиодов, но даже этого иногда оказывается мало для отображения нужной информации. Конечно, можно отображать и изображения или даже видео, это слишком сложно и требует много ресурсов.

На плате Марсоход3 есть разъем видеовыхода HDMI. Я подумал, почему бы не сделать простой проект для отображения простейшей двоичной информации - такие виртуальные светодиоды и семисегментный индикатор, которые показываются на экране монитора?

Я сделал такой проект, его исходники можно взять на github: https://github.com/marsohod4you/hdmi_leds_seg7

Далее - описание проекта.