|
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 |
|