Здесь расскажу, как откомпилировать проект MIPSfpga для платы Марсоход3, как загрузить образ в плату, откомпилировать простую сишную программу и запустить ее в плате на процессоре MIPS.
Далее описано по шагам, что нужно сделать.
1) Получаем исходники mipsfpga-plus с github. Это еще не исходники ядра, а только скрипты специфичные для конкретных плат и FPGA:
> git clone https://github.com/marsohod4you/mipsfpga-plus.git
> git checkout support-for-marsohod3
В ветке support-for-marsohod3 я делаю изменения непосредственно для нашей платы Марсоход3. Эту ветку (branch) и нужно использовать.
2) Исходники ядра нужно брать у imgtech. Для этого регистрируемся на странице http://community.imgtec.com/register и после регистрации запросить ссылку на загрузку. Более полная и "официальная" инструкция http://www.silicon-russia.com/2015/12/11/mipsfpga-download-instructions
Я получил вот такой файл: MIPSfpga_SOC_1_0_2016_03_11.zip
В этом архиве довольно много всего. Нужно взять файлы из MIPSfpga_SOC_1_0_2016_03_11\packaged_ip\mips_packaged\rtl_up\* и скопировать их внутрь mipsfpga-plus\core\
(Исправлено в июне 2019, Wave Computing купила MIPS и теперь немного по другому).
Исходники ядра можно получить зарегистрировавшись на mipsopen.com: https://www.mipsopen.com/register/
После регистрации пройдите по ссылке https://www.mipsopen.com/resources/download/ Там на странице найдите блок "MIPS Open FPGA" и перейдите по ссылке для скачивания. Вас попросят заполнить небольшую форму, и после запроса на следующий день уже вероятно получите реальную ссылку для скачивания. У меня не было проблем. Я пробовал скачивать "MIPS Open FPGA Getting Started Package" (файл MIPS_Open_FPGA_GSG_1_0.zip, 70.003.537 байт) и скачивал "MIPS Open FPGA SOC" (MIPS_Open_FPGA_SOC_1_0.zip, 137.312.973 байт), возможно и "MIPS Open FPGA Labs" подходит, но не пробовал. Интересно, что в "MIPS Open FPGA Getting Started Package" и "MIPS Open FPGA SOC" исходники ядра немного отличаются, но насколько это критично я не знаю. Я пробовал компилировать для Марсоход3 и те и другие - работает одинаково.
Скачанный ZIP архив распакуйте.
Если вы скачали "MIPS Open FPGA Getting Started Package", то скопируйте содержимое папки MIPS_Open_FPGA_GSG_1_0\MIPS_Open_FPGA_GSG_1.0\* в папку проекта полученного с гитхаба mipsfpga-plus\core\
Если вы скачали "MIPS Open FPGA SOC", то скопируйте содержимое папки MIPS_Open_FPGA_SOC_1_0\MIPS_Open_FPGA_SOC_1.0\packaged_ip\mips_packaged\rtl_up\\* в папку проекта полученного с гитхаба mipsfpga-plus\core\
3) Заходим в папку mipsfpga-plus\boards\marsohod3\ и запускаем make_project.bat
Этот скрипт создает новую папку project и копирует туда файлы проекта quartus
4) Запускаем Intel Quartus Prime Lite Edition v17.0 (ну или какая у Вас стоит версия, может более новая?).
Открываем (меню File=>Open Project) проект mipsfpga-plus\boards\marsohod3\project\m3.qpf
Компилируем (меню Processing=>Start Compilation). Успешно. Отчет о компиляции:
Flow Status Successful - Thu Nov 09 20:50:07 2017
Quartus Prime Version 17.0.0 Build 595 04/25/2017 SJ Lite Edition
Revision Name m3
Top-level Entity Name m3
Family MAX 10
Device 10M50SAE144C8GES
Timing Models Preliminary
Total logic elements 17,483 / 49,760 ( 35 % )
Total registers 8449
Total pins 81 / 101 ( 80 % )
Total virtual pins 0
Total memory bits 112,000 / 1,677,312 ( 7 % )
Embedded Multiplier 9-bit elements 0 / 288 ( 0 % )
Total PLLs 1 / 1 ( 100 % )
UFM blocks 0 / 1 ( 0 % )
ADC blocks 1 / 1 ( 100 % )
5) Подключаем плату Марсоход3 кабелем USB2 к компьютеру. Можно убедиться в диспетчере устройств, что появилось два последовательных порта, так как программатор платы использует двухканальный чип FTDI 2232H. К плате Марсоход3 кабелем HDMI подключаем монитор (на мониторе потом будут отображаться виртуальные светодиоды и семисегментные индикаторы).
6) Запускаем программатор Quartus (меню Tools=>Programmer).
В диалоговом окне через кнопку Hardware Setup находим и выбираем программатор MBFTDI.
Через кнопку "Add File" выбираем файл для программирования mipsfpga-plus\boards\marsohod3\project\m3.sof
Нужно поставить галочку в колонке "Program/Configure". Нажимаем кнопку Start и загрузка проекта в ПЛИС платы Марсоход3 должно произойти успешно. После этого, подкюченный к плате HDMI монитор должен поймать синхронизацию и начать отображать 16 зеленых и 16 красных квадратиков - это виртуальные светодиоды. Так же, ниже на экране будет шесть виртуальных семисегментных индикаторов.
Про виртуальные светодиоды и индикаторы можно почитать в этом проекте. На плате Марсоход3 всего 8 светодиодов, а в примерах проекта MIPSfpga используются 16 красных и 16 зеленых светодиодов и еще 7-ми сегментные индикаторы. Вот пришлось их состояние отображать на мониторе. По моему довольно информативно получилось.
7) После пункта 6 процессор уже готов к работе, но нужно туда загрузить ему программу.
Примеры программ есть в папке mipsfpga-plus\programs\. Самый простой пример - это mipsfpga-plus\programs\00_counter. Его нужно откомпилировать. Надеюсь, вы уже скачали и установили Software Developr Kit bp https://www.mips.com/develop/tools/codescape-mips-sdk/ Тогда просто заходим в папку 00_counter, запускаем 02_compile_and_link.bat, получаем программу program.elf. Потом конвертируем elf файл в srecord файл командой 08_generate_motorola_s_record_file.bat.
8) Теперь загрузить программу на исполнение в процессор MIPSfpga можно просто с помощью 10_upload_to_the_board_using_uart.bat.
Программатор платы Марсоход3 построен на базе двухканальной микросхемы FTDI 2232H. При подключении платы она видна в диспетчере устройств как два последовательных порта (смотри выше). Первый порт "A" используется именно как JTAG порт через интерфейс MPSSE чипа FTDI. Второй порт - остается "последовательным портом" и через него можно передавать данные в ПЛИС и из ПЛИС. Посмотрите номер порта в диспетчере устройств. У меня сейчас это COM17
Возможно скрипт 10_upload_to_the_board_using_uart.bat придется исправить и записать туда тот номер порта, который получился у вас
set a=17
mode com%a% baud=115200 parity=n data=8 stop=1 to=off xon=off odsr=off octs=off dtr=off rts=off idsr=off
type program.rec >\\.\COM%a%
Таким образом, скрипт 10_upload_to_the_board_using_uart.bat позволяет загрузить программу в плату прямо через последовательный порт. После загрузки программы она сразу стартует и светодиоды на плате начинают моргать. Так же, виртуальные светодиоды и емисегментные индикаторы на мониторе, подключенном к плате начинают моргать.
Программа работает, что и показано на демонстрационном видео в начале статьи.
Подробнее...