Instruction
[Label] : [Operation] [Rd], [Rs], [Rt], #[Imm/Dir] ;[Comment]
Examples
beq rg1, rg0, #16 ;Branch to address 16 if rg1 and rg0 are equal
lw rg3, r0, #0 ;Load word in rg3 to the address r0+0
inc op ;Increment the Ouput Port Register
Feature |
RISCKER |
# of Instructions |
30 |
# of Registers |
64 |
ALU |
16 bits |
Memory Architecture |
Harvard |
Instructions Size |
Fixed: 32-bits |
Multiplication and Division |
Dedicated Hardware Units |
Shift Operations |
Barrel Logic, Arithmetic and Rotation |
Addressing Modes |
Immediate,Direct, Indirect,Indexed |
Maximum Memory Size |
65536x32bits 65536x16bits |
# of Branch Conditions |
2 |
Timers |
2x16bit |
Interruptions |
2 by Timer and 2 External |
Control Unit |
HCU |
Similar architecture |
MIPS |
# of Registers |
Name |
Index |
Description |
1 |
r0 |
0 |
Value 0 |
8 |
rv0-rv7 |
01:08:00 |
Return Value |
8 |
rp0-rp7 |
09:16:00 |
Subroutine Arguments |
8 |
rt0-rt7 |
17:24:00 |
Temporary use Registers |
22 |
rg0-rg21 |
25-46 |
General Purpose |
4 |
ra0-ra3 |
47-50 |
Return Address |
1 |
sp |
51 |
Stack Pointer |
2 |
pr1-pr2 |
52-53 |
Timers Period |
2 |
ti1-ti2 |
54-55 |
Timer Interruptions Address |
2 |
eir1-eir2 |
56-57 |
External Interruptions Address |
1 |
op |
58 |
Output Port |
1 |
rc |
59 |
Control |
2 |
tmr1-tmr2 |
60-61 |
Timer values |
1 |
ip |
62 |
Input Port |
1 |
ipc |
63 |
Interruption PC |
64 |
|
|
|
Modifiable |
|
|
|
Special Purpose |
|
|
|
Read-Only |
|
|
|
Control Register
[0:1] |
TIRST<1,2> = Timer Interrupt Reset Flag |
[2:3] |
EIRST<1,2> = External Interrupt Reset Flag |
[4:5] |
TIE<1,2> = Timer Interrupt Enable |
[6:7] |
EIE<1,2> = External Interrupt Enable |
[8:9] |
PR1<1,2> = Timer1 Prescaler |
[10:11] |
PR2<1,2> = Timer2 Prescaler |
[12:13] |
TMRE<1,2> = Timer Enable |
[14:15] |
TRST<1,2> = Timer Reset |
|
Instructions Set
Operation |
Operands |
Description |
R-Type |
add |
Rd, Rs, Rt
Rd, Rt |
Rd = Rs + Rt |
Rd = Rd + Rt |
and |
Rd = Rs & Rt |
Rd = Rd & Rt |
or |
Rd = Rs | Rt |
Rd = Rd | Rs |
xor |
Rd = Rs ^ Rt |
Rd = Rd ^ Rs |
nand |
Rd = ~(Rs & Rt) |
Rd = ~(Rd & Rs) |
nor |
Rd = ~(Rs | Rt) |
Rd = ~(Rd | Rs) |
sub |
Rd = Rs - Rt |
Rd = Rd - Rs |
neg |
Rd,Rs Rd |
Rd = -Rs |
Rd = -Rd |
inc |
Rd = Rs + 1 |
Rd = Rd+1 |
mult |
Rd,Rs,Rt
Rd,Rt |
Rd[15:0] = Rs[7:0] * Rt[7:0] Rd[15:0] = Rd[7:0] * Rs[7:0] |
div |
Rd = {Rs[15:0] / Rt[15:0],Rs[15:0] % Rt[15:0]} Rd = {Rd[15:0] / Rs[15:0],Rd[15:0] % Rs[15:0]} |
rot |
Rd, Rt, shamt
Rd,shamt |
Rd = Rt rotates left by shamt |
Rd = Rd rotates left by shamt |
sll |
Rd = Rt << Shift Amount |
Rd = Rd << Shift Amount |
srl |
Rd = Rt >> Shift Amount |
Rd = Rd >> Shift Amount |
sra |
Rd = Rt>>Arithmetic by shamt |
Rd = Rd>>Arithmetic by shamt |
I-Type |
addi |
Rd,Rs,imm
Rd,imm |
Rd = Rs + imm |
Rd = Rd + imm |
andi |
Rd = Rs & imm |
Rd = Rd & imm |
ori |
Rd = Rs | imm |
Rd = Rd | imm |
xori |
Rd = Rs ^ imm |
Rd = Rd ^ imm |
nandi |
Rd = ~(Rs & imm) |
Rd = ~(Rd & imm) |
nori |
Rd = ~(Rs | imm) |
Rd = ~(Rd | imm) |
multi |
Rd = Rs[15:0] * imm |
Rd = Rd[15:0] * imm |
divi |
Rd,Rs,imm Rd, imm |
Rd = {Rs[15:0] / imm, Rs[15:0] % imm} Rd = {Rd[15:0] / imm, Rd[15:0] % imm} |
I-Type |
sw |
Rd, Rs, imm Rd, imm |
Memory[Rs+imm] = Rd Memory[Rd+imm] = Rd |
lw |
Rd, Rs, imm Rd, imm |
Rd = Memory[Rs+imm] Rd = Memory[Rd+imm] |
blt |
Rd, Rs, target |
((Rd-Rs)<0) ? PC = target |
beq |
Rd, Rs, target Rd, target |
((Rd-Rs)=0) ? PC = target ((Rd-Rd)=0) ? PC = target |
J-Type |
j |
target |
PC = target |
jrlw |
Rs, Rd, imm Rd, imm |
PC = Rs ; Rd = imm PC = Rs ; Rt0 = 0 |
jal |
Rd, target |
Rd = PC+1; PC = target |
|