MP32 представляет собой ядро процессора 4KEc с архитектурой MIPS32 для программируемых логических схем (ПЛИС, FPGA) фирмы Altera.
Используя MP32, можно создавать законченные микропроцессорные системы-на-чипе, способные работать под операционной системой RetroBSD или даже Linux. Ниже будет дан пример проектирования простой системы для платы Altera Embedded Systems Development Kit, Cyclone III Edition.
Ядро MP32 входит в состав системы разработки Altera Quartus II Web Edition. Скачать последнюю версию Quartus II для Windows или Linux, а также документацию можно на этой странице. Для быстрого ознакомления рекомендуются бесплатные видеокурсы (на английском) Using the Quartus II Software: An Introduction и Introduction to Qsys.
Для создания простой системы, способной нести RetroBSD Unix, выполняйте следующие шаги.
(1) Скачайте и установите Quartus II Web Edition по этой ссылке. Запустите Quartus II.
(2) Создаём новый проект. Выполните команду меню File / New Project Wizard, нажмите Next. В первом поле введите имя каталога для проекта, например “/home/vak/mp32-example”. Во втором поле требуется название проекта, скажем “mp32”. В третьем поле нужно название для объекта верхнего уровня, обозначающего всю микросхему, например “top”. Нажмите Next. На вопрос о создании нового каталоге ответьте Yes.
Откроется окно добавления файлов к проекту - это мы сделаем позже, а пока нажмите Next. Появится окно выбора типа микросхемы FPGA. В поле Family выберите Cyclone III, в поле Package: FBGA, Pin count: 780, Speed grade: 7. В списке Available devices выделите EP3C120F780C7 (второй снизу). Нажмите Next, еще раз Next и Finish. Мы получили пустой проект.
(3) Мы будем строить систему их готовых компонентов, имеющихся в библиотеке Quartus II. Для этого служит подсистема Qsys. Вызовите её из меню Tools / Qsys.
По каким-то причинам изначально в библиотеке отображаются не все нужные нам компоненты. Чтобы они появились, выполните команду меню Tools / Options. Выберите категорию Internal и поставьте галочку Enable internal features. Нажмите Finish. Теперь кликните правой кнопкой мыши на Library в левой части окна (панель Component Library). В появившемся меню выберите Show Hidden Components. После этого список Library существенно увеличится, и в нём появятся нужные блоки.
(4) Добавляем в систему процессор. В списке Library (левая часть окна) найдите раздел Processors и дважды кликните на нём мышкой. В раскрывшемся списке выберите Altera MP32 Processor и нажмите кнопку +Add ниже. Появится окно выбора параметров процессора. Поставьте следующие параметры:
Нажмите Finish. В разделе System Contents появится компонент с именем mp32_0.
(5) Добавляем порт отладки. В библиотеке найдите раздел Processor Additions, дважды кликните и выберите EJTAG. Нажмите кнопку +Add. В окне параметров установите:
Нажмите Finish, в системе появится компонент ejtag_0.
(6) Добавляем оперативную память. Как для RAM, так и для ROM будем использовать внутренние блоки памяти, имеющиеся на FPGA. Их вполне достаточно для работы RetroBSD. В библиотеке откройте раздел Memories and Memory Controllers, в нем раздел On-Chip, а в нём On-Chip Memory (RAM or ROM). Нажмите кнопку +Add. Для RAM установите параметры:
Нажмите Finish, в системе появится компонент onchip_memory2_0.
(7) Аналогично добавляем ПЗУ (ROM). Нажмите кнопку +Add и установите параметры:
(8) Добавляем сигналы ввода-вывода общего назначения. С их помощью можно будет мигать светодиодами или опрашивать кнопки. В библиотеке откройте раздел Peripherals, в нем раздел Microcontroller Peripherals, а в нём PIO (Parallel I/O). Нажмите кнопку +Add и установите параметры:
Нажмите Finish, в системе появится компонент pio_0.
(9) Добавляем асинхронный порт UART. В библиотеке откройте раздел Interface Protocols, в нем раздел Serial, а в нём UART (RS-232 Serial Port). Нажмите кнопку +Add и установите параметры:
Нажмите Finish, в системе появится компонент uart_0.
(10) Добавляем порт SPI. В том же разделе Interface Protocols / Serial выберите SPI (3 Wire Serial) и нажмите +Add. Установите параметры:
Нажмите Finish, в системе появится компонент spi_0.
(11) Используя мышку, подключите шины, сигналы и прерывания, как показано на рисунке (кликните чтобы увеличить). Имена компонентов можно при желании изменить, нажимая на каждый правой кнопкой мыши и выбирая Rename.
(12) Переключитесь на вкладку Address Map и введите следующие значения адресов:
cpu.instruction_master | cpu.data_master | ||||
ejtag.avalon_slave_ejtag | 0x19000000 | 0x19000000 | |||
ram.s1 | 0x00000000 | 0x00000000 | |||
rom.s1 | 0x1fc00000 | 0x1fc00000 | |||
pio.s1 | 0x18000000 | ||||
uart.s1 | 0x18000100 | ||||
spi.spi_control_port | 0x18000200 |
(13) Сохраните файл конфигурации получившейся системы. Выполните команду меню File / Save, введите имя файла “mp32” и нажмите Save. Если Вам неохота проделывать все вышеуказанные операции, готовый файл можно скачать здесь: mp32.qsys. Но автор не отвечает за его пригодность для каких бы то ни было целей.
(14) Переключитесь на вкладку Generation и установите параметры:
Нажмите кнопку Generate. Будут созданы файлы с исходным кодом всех компонентов проекта.
(15) Завершите работу программы Qsys (меню File / Exit).
(16) Добавляем систему, созданную с помощью Qsys, в наш проект. Выполните команду меню Project / Add/Remove Files in Project. Щелкните на троеточие справа от поля File, и в открывшемся окне выберите файл mp32.qsys. Нажмите Open, окно закроется. Теперь нажмите Add справа от имени файла. Затем нажмите Ok.
(17) Проект готов к пробному синтезу. Чтобы запустить компиляцию, щелкните правой кнопкой мыши на Compile Design в панели Tasks и из открывшегося меню выберите Start.
Осталось назначить для внешних сигналов соответствие ножкам микросхемы на конкретной плате, и полученный в результате файл можно будет загружать в FPGA.