Введение

PicoBlaze - это обозначение серии из трех свободных мягких процессорных ядер от Xilinx для использования в их продуктах FPGA и CPLD. Они основаны на 8-битной архитектуре RISC и могут достигать скорости до 100 MIPS на семье FPGA Virtex 4. Процессоры имеют 8-битный адрес и порт данных для доступа к широкому спектру периферийных устройств. Лицензия на ядра позволяет их свободно использовать, хотя и только на устройствах Xilinx, и они поставляются с инструментами разработки. Инструменты третьих сторон доступны у Mediatronix и других. Также существует PacoBlaze, поведенческая и устройственная независимая реализация ядра, выпущенная под лицензией BSD. PauloBlaze - это реализация VHDL с открытым исходным кодом под лицензией Apache. Дизайн PicoBlaze первоначально назывался KCPSM, что означает "Constant ((K) Coded Programmable State Machine" (ранее "PSM Кена Чапмана"). Кен Чепмен был дизайнером систем Xilinx, который разработал и реализовал микроконтроллер.

Выступление

Все инструкции выполняются в двух тактовых циклах, что делает производительность основного набора инструкций детерминированной. Ответ на прерывание не более пяти циклов часов. В качестве оптимизации ресурсов, возможно, что два ядра PicoBlaze будут использовать одну и ту же PROM инструкции 1k x 18, используя возможность двойного портирования этого блока на Xilinx FPGA.

Архитектурные примечания

Ксилинкс документирует, что ПикоБлейз требует всего 96 FPGA-резов. Небольшой размер реализации достигается частично благодаря довольно жесткому разделению стороны последовательности инструкций (счетчик программы, стек обратного вызова, подразумеваемый указатель стека и бит включения прерывания) от стороны выполнения (ALU, файл реестра, оперативная память скретчпада, биты состояния Z / C). Единственная информация, которая поступает с вычислительной стороны на секвенирующую сторону, - это ноль и биты статуса ALU, когда тестируется условной инструкцией JUMP и CALL. Невозможно реализовать вычисленные прыжки или указатели функций. Единственная информация, которая переходит от секвенирующей стороны к исполняющей стороне, - это поля операндов: регистр назначения (4 бита), опкод ALU (шесть бит), необязательный регистр источника (4 бита), необязательный 8-битовый адрес непосредственного значения / порта, необязательный 6-битовый адрес скретчпада. Не существует механизма проверки значения указателя стека, содержимого стека 31 входа, бита, позволяющего прерывать, или содержимого памяти программы. В стороне последовательности инструкций нет сложителя, поэтому относительные ветви и независимый от позиции код невозможны. Все адреса для скачков и вызовов абсолютны. PicoBlaze плохо подходит для программирования в компилируемых языках, таких как C. В дополнение к отсутствию поддержки указателей функций, нет инструкций или режимов адресации для ускорения набора вызовов на основе стека. Для PicoBlaze требуется две инструкции для реализации PUSH или POP и две инструкции для реализации относительного адресации от указателя стека, назначенного программным обеспечением. ПикоБлэйз лучше подходит для ручной оптимизации, основанной на регистре вызовов. Это не исключает использования стека данных типа Forth, и на самом деле PicoBlaze хорошо подходит для этого подхода, если 64-байтовая память скретчпада предлагает достаточно места.