Unicore

From Wikipedia, the free encyclopedia

Unicore is a computer instruction set architecture designed by the Microprocessor Research and Development Center (MPRC) of Peking University in the PRC. The computer built on this architecture is called the Unity-863.[1] The CPU is integrated into a fully functional SoC to make a PC-like system.[2]

DesignerMicroprocessor Research and Development Center
Bits32-bit
Introduced1999
DesignRISC
Quick facts Designer, Bits ...
Unicore
DesignerMicroprocessor Research and Development Center
Bits32-bit
Introduced1999
DesignRISC
EncodingFixed
BranchingCondition code
EndiannessLittle
Page size4 KiB
Registers
General-purpose31
Floating-point32
Close

The processor is very similar to the ARM architecture, but uses a different instruction set.[3][better source needed]

It was supported by the Linux kernel starting from version 2.6.39;[4] support was removed in Linux kernel version 5.9 as according to a developer "nobody seemed to maintain it and the code was falling behind the rest of the kernel code and compiler requirements".[5]

Instruction set

The instructions are almost identical to the standard ARM formats, except that conditional execution has been removed, and the bits reassigned to expand all the register specifiers to 5 bits.[6][7] Likewise, the immediate format is 9 bits rotated by a 5-bit amount (rather than 8 bit rotated by 4), the load/store offset sizes are 14 bits for byte/word and 10 bits for signed byte or half-word. Conditional moves are provided by encoding the condition in the (unused by ARM) second source register field Rn for MOV and MVN instructions.

More information Description ...
Unicore32 instruction set overview[8]
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
Description
000opcodeSRnRdshift0Sh0RmALU operation, Rd = Rn op Rm shift #shift
000opcodeSRnRdRs0Sh1RmALU operation, Rd = Rn op Rm shift Rs
001opcodeSRnRdshiftimm9ALU operation, Rd = Rn op #imm9 ROTL #shift
010PUBWLRnRdshift0Sh0RmLoad/store Rd to address Rn ± Rm shift #shift
011PUBWLRnRdoffset14Load/store Rd to address Rn ± offset14
100PUSWLRnBitmap high00HBitmap lowLoad/store multiple registers
101condLoffset24Branch (and link) if condition true
110Coprocessor (FPU) instructions
11111111Trap numberSoftware interrupt
000000ASRnRdRs1001RmMultiply, Rd = Rm * Rs (+ Rn)
0001000L1111111111000001001RmBranch and exchange (BX, BLX)
010PU0WLRnRd000001SH1RmLoad/store Rd to address Rn ± Rm (16-bit)
010PU1WLRnRdimm_hi1SH1imm_loLoad/store Rd to address Rn ± #imm10 (16-bit)
Close

The meaning of various flag bits (such as S=1 enables setting the condition codes) is identical to the ARM instruction set. The load/store multiple instruction can only access half of the register set, depending on the H bit. If H=0, the 16 bits indicate R0–R15; if H=1, R16–R31.

References

Related Articles

Wikiwand AI