MP32: микропроцессор MIPS для ПЛИС Altera

MP32 представляет собой ядро процессора 4KEc с архитектурой MIPS32 для программируемых логических схем (ПЛИС, FPGA) фирмы Altera.

LEAD Technologies Inc. V1.01

Используя 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.

Пример системы-на-чипе для FPGA Cyclone III

Для создания простой системы, способной нести 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.