Юникор
Дизайнер | Центр микропроцессорных исследований и разработок |
---|---|
Биты | 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, дизассемблирование — в интерпретаторе.c, а эмуляция — в instEx.c.
- ^ Исходный код эмулятора QEMU Unicore32