Unicore

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.

Omówienie zestawu instrukcji Unicore32
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
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.

  1. ^ „Wprowadzenie do MPRC” . Centrum Badań i Rozwoju Mikroprocesorów Uniwersytetu Pekińskiego.
  2. 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
  3. ^ 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.
  4. ^ „Okno scalania zamknięte - wyjście 2.6.39-rc1” . Linusa Torvaldsa .
  5. ^ „usuń obsługę unicore32” . Mike'a Rapoporta.
  6. ^    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
  7. ^ Kod źródłowy symulatora procesora Unicore . Formaty instrukcji znajdują się w decode.c, dezasemblacja w interpret.c, a emulacja w instEx.c.
  8. ^ Kod źródłowy emulatora QEMU Unicore32