Unicore
Projektant | Centrum Badań i Rozwoju Mikroprocesorów |
---|---|
Bity | 32-bitowy |
wprowadzony | 1999 |
Projekt | RISC |
Kodowanie | Naprawił |
Rozgałęzienie | Kod warunku |
endianizm | Mały |
Rozmiar strony | 4 KiB |
Rejestry | |
Ogólny cel | 31 |
Zmiennoprzecinkowy | 32 |
Unicore to nazwa architektury zestawu instrukcji komputerowych zaprojektowanej przez Centrum Badań i Rozwoju Mikroprocesorów (MPRC) Uniwersytetu Pekińskiego w ChRL . Komputer zbudowany na tej architekturze nazywa się Unity-863. Procesor jest zintegrowany z w pełni funkcjonalnym SoC, aby stworzyć system podobny do komputera PC.
Procesor jest bardzo podobny do architektury ARM , ale wykorzystuje inny zestaw instrukcji. [ potrzebne lepsze źródło ]
Jest obsługiwany przez jądro Linuksa od wersji 2.6.39. Wsparcie zostanie usunięte w jądrze Linuksa w wersji 5.9, ponieważ wydaje się, że nikt go nie utrzymuje, a kod nie nadąża za resztą kodu jądra i wymaganiami kompilatora.
Zestaw instrukcji
Instrukcje są prawie identyczne ze standardowymi formatami ARM, z wyjątkiem tego, że usunięto wykonywanie warunkowe, a bity zostały ponownie przypisane, aby rozszerzyć wszystkie specyfikatory rejestrów do 5 bitów. Podobnie, format bezpośredni to 9 bitów obróconych o 5 bitów (zamiast 8 bitów obróconych o 4), rozmiary przesunięcia ładowania/przechowywania to 14 bitów dla bajtu/słowa i 10 bitów dla bajtu ze znakiem lub pół-słowo. Przesunięcia warunkowe są zapewniane przez zakodowanie warunku w (nieużywanym przez ARM) drugim polu rejestru źródłowego Rn dla instrukcji MOV i MVN.
Opis | ||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | kod operacji | S | Rn | R & D | zmiana | 0 | Cii | 0 | Rm | Operacja ALU, Rd = Rn op Rm shift #shift | ||||||||||||||||||||
0 | 0 | 0 | kod operacji | S | Rn | R & D | Rs | 0 | Cii | 1 | Rm | Operacja ALU, Rd = Rn op Rm przesunięcie Rs | ||||||||||||||||||||
0 | 0 | 1 | kod operacji | S | Rn | R & D | zmiana | imm9 | Operacja ALU, Rd = Rn op #imm9 ROTL #shift | |||||||||||||||||||||||
0 | 1 | 0 | P | u | B | W | Ł | Rn | R & D | zmiana | 0 | Cii | 0 | Rm | Załaduj/zapisz Rd do adresu Rn ± Rm przesunięcie #przesunięcie | |||||||||||||||||
0 | 1 | 1 | P | u | B | W | Ł | Rn | R & D | offset14 | Załaduj/zapisz Rd pod adresem Rn ± offset14 | |||||||||||||||||||||
1 | 0 | 0 | P | u | S | W | Ł | Rn | Wysoka bitmapa | 0 | 0 | H | Niska bitmapa | Załaduj/przechowuj wiele rejestrów | ||||||||||||||||||
1 | 0 | 1 | dyr | Ł | offset24 | Gałąź (i łącze), jeśli warunek jest prawdziwy | ||||||||||||||||||||||||||
1 | 1 | 0 | Instrukcje koprocesora (FPU). | |||||||||||||||||||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | Numer pułapki | Przerwanie programowe | |||||||||||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | A | S | Rn | R & D | Rs | 1 | 0 | 0 | 1 | Rm | Pomnóż, Rd = Rm * Rs (+ Rn) | ||||||||||||||||
0 | 0 | 0 | 1 | 0 | 0 | 0 | Ł | 11111 | 11111 | 00000 | 1 | 0 | 0 | 1 | Rm | Oddział i giełda (BX, BLX) | ||||||||||||||||
0 | 1 | 0 | P | u | 0 | W | Ł | Rn | R & D | 00000 | 1 | S | H | 1 | Rm | Załaduj/zapisz Rd na adres Rn ± Rm (16-bitowy) | ||||||||||||||||
0 | 1 | 0 | P | u | 1 | W | Ł | Rn | R & D | imm_czesc | 1 | S | H | 1 | imm_lo | Załaduj/zapisz Rd pod adresem Rn ± #imm10 (16-bitowy) |
Znaczenie różnych bitów flagi (np. S=1 umożliwia ustawienie kodów warunku) jest identyczne jak w zestawie instrukcji ARM. Instrukcja wielokrotnego ładowania/zapisywania może uzyskać dostęp tylko do połowy zestawu rejestrów, w zależności od bitu H. Jeśli H=0, 16 bitów oznacza R0–R15; jeśli H=1, R16–R31.
- ^ „Wprowadzenie do MPRC” . Centrum Badań i Rozwoju Mikroprocesorów Uniwersytetu Pekińskiego.
- Bibliografia _ Xiaoyin Wang; Junlin Lu; Jiangfang Yi; Dong Tong; Xuetao Guan; Feng Liu; Xianhua Liu; Chun Yang; Yi Feng (marzec 2010), „Postęp badań nad procesorami UniCore i układami SoC PKUnity” (PDF) , Journal of Computer Science and Technology (JCST) , 25 (2): 200–213, doi : 10.1007/s11390-010-9317- 1 , S2CID 7083916 , pobrano 2012-07-11
-
^
Bergmann, Arnd (2012-07-09). „Re: [PATCH 00/36] Port jądra AArch64 Linux” . linux-kernel (lista mailingowa) . Źródło 2012-07-11 .
Innym ciekawym przykładem jest unicore32, który faktycznie współdzieli więcej kodu z arch/arm niż proponowany arch/aarch64. Myślę, że baza kodu unicore32 skorzystałaby na ponownym połączeniu z arch/arm jako trzecim zestawem instrukcji, ale dodatkowe koszty utrzymania dla wszystkich pracujących nad ARM sprawiają, że jest to nierealne.
- ^ „Okno scalania zamknięte - wyjście 2.6.39-rc1” . Linusa Torvaldsa .
- ^ „usuń obsługę unicore32” . Mike'a Rapoporta.
- ^ Hsu-Hung Chiang; Huang-Jia Cheng; Yuan-Shin Hwan (25.02.2012), „Podwojenie liczby rejestrów w procesorach ARM” (PDF) , 16. warsztaty dotyczące interakcji między kompilatorami a architekturami komputerów (INTERACT) , s. 1–8, doi : 10.1109 / INTERACT .2012.6339620 , ISBN 978-1-4673-2613-1 , S2CID 6832041
- ^ Kod źródłowy symulatora procesora Unicore . Formaty instrukcji znajdują się w decode.c, dezasemblacja w interpret.c, a emulacja w instEx.c.
- ^ Kod źródłowy emulatora QEMU Unicore32