- Для промежуточного программного обеспечения для grid-вычислений см. UNICORE .
Дизайнер | Центр исследований и разработок микропроцессоров |
---|---|
Биты | 32-битный |
Введено | 1999 г. |
Дизайн | RISC |
Кодирование | Фиксированный |
Разветвление | Код состояния |
Порядок байтов | Маленький |
Размер страницы | 4 КБ |
Регистры | |
Общее назначение | 31 год |
Плавающая запятая | 32 |
Unicore - это название архитектуры набора компьютерных команд, разработанной Центром исследований и разработок микропроцессоров (MPRC) Пекинского университета в КНР . Компьютер, построенный на этой архитектуре, называется Unity-863 . [1] ЦП интегрирован в полнофункциональную SoC для создания системы, подобной ПК. [2]
Процессор очень похож на архитектуру ARM , но использует другой набор инструкций. [3] [ нужен лучший источник ]
Он поддерживается ядром Linux, начиная с версии 2.6.39. [4] Поддержка будет удалена в ядре Linux версии 5.9, поскольку кажется, что никто не поддерживает ее, а код отстает от остального кода ядра и требований компилятора. [5]
Набор инструкций [ править ]
Инструкции почти идентичны стандартным форматам ARM, за исключением того, что условное выполнение было удалено, а биты переназначены для расширения всех спецификаторов регистров до 5 бит. [6] [7] Аналогичным образом, непосредственный формат - это 9 бит, повернутых на 5-битную величину (а не 8 бит, повернутых на 4), размеры смещения загрузки / сохранения составляют 14 бит для байта / слова и 10 бит для байта со знаком. или полуслова. Условные перемещения обеспечиваются кодированием условия во (не используемом ARM) поле второго исходного регистра Rn для инструкций MOV и MVN.
Описание | ||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | код операции | S | Rn | Rd | сдвиг | 0 | Ш | 0 | Rm | Работа ALU, Rd = Rn op Rm shift #shift | ||||||||||||||||||||
0 | 0 | 0 | код операции | S | Rn | Rd | Рупий | 0 | Ш | 1 | Rm | Работа ALU, Rd = Rn op Rm shift Rs | ||||||||||||||||||||
0 | 0 | 1 | код операции | S | Rn | Rd | сдвиг | imm9 | Операция ALU, Rd = Rn op # imm9 ROTL #shift | |||||||||||||||||||||||
0 | 1 | 0 | п | U | B | W | L | Rn | Rd | сдвиг | 0 | Ш | 0 | Rm | Загрузить / сохранить Rd по адресу Rn ± Rm shift #shift | |||||||||||||||||
0 | 1 | 1 | п | U | B | W | L | Rn | Rd | смещение14 | Загрузить / сохранить Rd по адресу Rn ± смещение14 | |||||||||||||||||||||
1 | 0 | 0 | п | U | S | W | L | Rn | Растровое изображение высокое | 0 | 0 | ЧАС | Растровое изображение низкое | Загрузить / сохранить несколько регистров | ||||||||||||||||||
1 | 0 | 1 | конд | L | offset24 | Переход (и ссылка), если условие истинно | ||||||||||||||||||||||||||
1 | 1 | 0 | Инструкции сопроцессора (FPU) | |||||||||||||||||||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | Номер ловушки | Программное прерывание | |||||||||||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | А | S | Rn | Rd | Рупий | 1 | 0 | 0 | 1 | Rm | Умножить, Rd = Rm * Rs (+ Rn) | ||||||||||||||||
0 | 0 | 0 | 1 | 0 | 0 | 0 | L | 11111 | 11111 | 00000 | 1 | 0 | 0 | 1 | Rm | Филиал и обмен (BX, BLX) | ||||||||||||||||
0 | 1 | 0 | п | U | 0 | W | L | Rn | Rd | 00000 | 1 | S | ЧАС | 1 | Rm | Загрузить / сохранить Rd по адресу Rn ± Rm (16 бит) | ||||||||||||||||
0 | 1 | 0 | п | U | 1 | W | L | Rn | Rd | imm_hi | 1 | S | ЧАС | 1 | imm_lo | Загрузить / сохранить Rd по адресу Rn ± # imm10 (16 бит) |
Значение различных битов флага (например, S = 1 позволяет устанавливать коды условий) идентично набору инструкций ARM. Команда загрузки / сохранения нескольких может иметь доступ только к половине набора регистров, в зависимости от бита H. Если H = 0, 16 битов указывают R0 – R15; если H = 1, R16 – R31.
Ссылки [ править ]
- ^ «Введение в MPRC» . Центр исследований и разработок микропроцессоров, Пекинский университет.
- ^ Сюй Чэн; Сяоинь Ван; Цзюньлинь Лу; Цзянфан И; Донг Тонг; Сюэтао Гуань; Фэн Лю; Сяньхуа Лю; Чун Ян; Yi Feng (март 2010), "Исследование Прогресс UNICORE процессоров и PKUnity SoCs" (PDF) , журнал компьютерных наук и технологий (JCST) , 25 (2): 200-213 , извлекаться 2012-07-11
- ^ Бергманн, Арнд (2012-07-09). «Re: [PATCH 00/36] AArch64 Linux kernel port» . linux-kernel (список рассылки) . Проверено 11 июля 2012 .
Другой интересный пример - unicore32, который на самом деле имеет больше кода с arch / arm, чем предлагаемый arch / aarch64.
Я думаю, что кодовая база unicore32 выиграет, если будет снова объединена в arch / arm в качестве третьего набора инструкций, но дополнительные затраты на обслуживание для всех, кто работает над ARM, делают это нереалистичным.
- ^ "Окно слияния закрыто - 2.6.39-rc1 out" . Линус Торвальдс .
- ^ "удалить поддержку unicore32" . Майк Рапопорт.
- ^ Сюй-Хунг Чан; Хуан-Цзя Ченг; Юань-Шин Хван (2012-02-25), «Удвоение количества регистров на процессорах ARM» (PDF) , 16-й семинар по взаимодействию между компиляторами и компьютерными архитектурами (INTERACT) , стр. 1–8, doi : 10.1109 / INTERACT .2012.6339620 , ISBN 1-4673-2613-5
- ^ Исходный код симулятора процессора Unicore . Форматы инструкций находятся в decode.c, дизассемблирование - в интерпретаторе, а эмуляция - в instEx.c.
- ^ Исходный код эмулятора QEMU Unicore32