Юникор
Дизайнер | Центр микропроцессорных исследований и разработок |
---|---|
Биты | 32-битный |
Представлено | 1999 |
Дизайн | РИСК |
Кодирование | Зафиксированный |
Ветвление | Код состояния |
Порядок байтов | Маленький |
Размер страницы | 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 бит для знакового байта или полуслова. Условные перемещения обеспечиваются путем кодирования условия во втором поле исходного регистра Rn (не используемом ARM) для инструкций MOV и MVN.
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Описание |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | код операции | С | Рн | Роуд | сдвиг | 0 | Ш | 0 | Рм | Работа АЛУ, Rd = Rn op Rm сдвиг #shift | ||||||||||||||||||||
0 | 0 | 0 | код операции | С | Рн | Роуд | рупий | 0 | Ш | 1 | Рм | Работа АЛУ, Rd = Rn op Rm сдвиг Rs | ||||||||||||||||||||
0 | 0 | 1 | код операции | С | Рн | Роуд | сдвиг | имм9 | Операция АЛУ, Rd = Rn op #imm9 ROTL #shift | |||||||||||||||||||||||
0 | 1 | 0 | П | В | Б | В | л | Рн | Роуд | сдвиг | 0 | Ш | 0 | Рм | Загрузить/сохранить Rd по адресу Rn ± Rm сдвиг #shift | |||||||||||||||||
0 | 1 | 1 | П | В | Б | В | л | Рн | Роуд | смещение14 | Загрузить/сохранить Rd по адресу Rn ± смещение14 | |||||||||||||||||||||
1 | 0 | 0 | П | В | С | В | л | Рн | Растровое изображение высокое | 0 | 0 | ЧАС | Растровое изображение низкое | Загрузка/сохранение нескольких регистров | ||||||||||||||||||
1 | 0 | 1 | состояние | л | смещение24 | Ветка (и ссылка), если условие истинно | ||||||||||||||||||||||||||
1 | 1 | 0 | Инструкции сопроцессора (FPU) | |||||||||||||||||||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | Номер ловушки | Программное прерывание | |||||||||||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | А | С | Рн | Роуд | рупий | 1 | 0 | 0 | 1 | Рм | Умножаем, Rd = Rm * Rs (+ Rn) | ||||||||||||||||
0 | 0 | 0 | 1 | 0 | 0 | 0 | л | 11111 | 11111 | 00000 | 1 | 0 | 0 | 1 | Рм | Отделение и обмен (BX, BLX) | ||||||||||||||||
0 | 1 | 0 | П | В | 0 | В | л | Рн | Роуд | 00000 | 1 | С | ЧАС | 1 | Рм | Загрузить/сохранить Rd по адресу Rn ± Rm (16 бит) | ||||||||||||||||
0 | 1 | 0 | П | В | 1 | В | л | Рн | Роуд | имм_привет | 1 | С | ЧАС | 1 | имм_ло | Загрузить/сохранить Rd по адресу Rn ± #imm10 (16 бит) |
Значение различных битов флагов (например, S=1 позволяет устанавливать коды условий) идентично набору команд ARM. Команда загрузки/сохранения нескольких регистров может получить доступ только к половине набора регистров, в зависимости от бита H. Если H=0, 16 бит обозначают R0–R15; если H=1, R16–R31.
Ссылки [ править ]
- ^ «Введение в MPRC» . Центр исследований и разработок микропроцессоров Пекинского университета.
- ^ Сюй Чэн; Цзюньлинь Лу; Цзянфан И; Сюэтао Лю; Сяньхуа Лю; Чунь Ян (март 2010 г.), «Прогресс исследований процессоров UniCore и SoC PKUnity» PDF ) ( Computer Science and Technology (JCST) , 25 (2): 200–213, doi : 10.1007/s11390-010-9317-1 , S2CID 7083916 , получено 11 июля 2012 г.
- ^ Бергманн, Арнд (9 июля 2012 г.). «Re: [PATCH 00/36] Порт ядра Linux AArch64» . linux-kernel (список рассылки) . Проверено 11 июля 2012 г.
Еще один интересный пример — unicore32, который на самом деле использует больше кода с Arch/arm, чем предлагаемый Arch/aarch64. Я думаю, что кодовая база unicore32 выиграет от объединения обратно в Arch/arm в качестве третьего набора инструкций, но дополнительные затраты на обслуживание для всех, кто работает над ARM, делают это нереальным.
- ^ «Окно слияния закрыто — выход 2.6.39-rc1» . Линус Торвальдс .
- ^ «удалить поддержку unicore32» . Майк Рапопорт.
- ^ Сюй-Хун Чан; Хуан-Цзя Чэн; Юань-Шин Хван (25 февраля 2012 г.), «Удвоение количества регистров на процессорах ARM» (PDF) , 16-й семинар по взаимодействию компиляторов и компьютерных архитектур (INTERACT) , стр. 1–8, doi : 10.1109/INTERACT .2012.6339620 , ISBN 978-1-4673-2613-1 , S2CID 6832041
- ^ Исходный код симулятора процессора Unicore . Форматы инструкций находятся в decode.c, дизассемблирование — в интерпретаторе и эмуляция — в instEx.c.
- ^ Исходный код эмулятора QEMU Unicore32