OpenCores
URL https://opencores.org/ocsvn/tinycpu/tinycpu/trunk

Subversion Repositories tinycpu

[/] [tinycpu/] [trunk/] [docs/] [design.md.txt] - Diff between revs 4 and 5

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 4 Rev 5
Line 5... Line 5...
3. fixed 16-bit instruction length
3. fixed 16-bit instruction length
4. use a small amount of "rich" instructions to do powerful things
4. use a small amount of "rich" instructions to do powerful things
5. 1 instruction per clock cycle
5. 1 instruction per clock cycle
 
 
Register list:
Register list:
r0-r6 general purpose registers
r0-r5 general purpose registers
 
sp stack pointer (represented as r6)
ip instruction pointer register (represented as r7)
ip instruction pointer register (represented as r7)
cs, ds, es, ss segment registers (code segment, data segment, extra segment, stack segment)
cs, ds, es, ss segment registers (code segment, data segment, extra segment, stack segment)
tr truth register for conditionals
tr truth register for conditionals
 
 
general opcode format
general opcode format
Line 19... Line 20...
next 3 bits: (target) register
next 3 bits: (target) register
last 1 bit: conditional
last 1 bit: conditional
 
 
second byte:
second byte:
first 1 bit: second portion of condition (if not immediate) (1 for only if false)
first 1 bit: second portion of condition (if not immediate) (1 for only if false)
next 1 bit: unused
next 1 bit: use extra segment
next 3 bits: other register
next 3 bits: other register
last 3 bits: extra opcode information or third register. such as for ADD it could be target=source+third_register
last 3 bits: extra opcode information or third register. such as for ADD it could be target=source+third_register
 
 
...or second byte is immediate value
...or second byte is immediate value
 
 
Line 33... Line 34...
immediates:
immediates:
1. move reg, immediate
1. move reg, immediate
2. move [reg], immediate
2. move [reg], immediate
3. push and move reg, immediate (or call immediate)
3. push and move reg, immediate (or call immediate)
4. push immediate
4. push immediate
 
5. jmp immediate
 
 
groups: (limited to 2 registers and no immediates. each group has 8 opcodes)
groups: (limited to 2 registers and no immediates. each group has 8 opcodes)
group 1:
group 1:
move(store) [reg],reg
move(store) [reg],reg
move(load) reg,[reg]
move(load) reg,[reg]
out reg1,reg2 (output to port reg1 value reg2)
out reg1,reg2 (output to port reg1 value reg2)
in reg1,reg2 (input from port reg2 and store in reg1)
in reg1,reg2 (input from port reg2 and store in reg1)
 
pop reg
 
push reg
 
move segmentreg,reg
 
move reg,segmentreg
 
 
group 2:
group 2:
and reg1,reg2 (reg1=reg1 and reg2)
and reg1,reg2 (reg1=reg1 and reg2)
or reg, reg
or reg, reg
xor reg,reg
xor reg,reg
Line 59... Line 64...
is greater or equal to reg,reg
is greater or equal to reg,reg
is less than reg,reg
is less than reg,reg
is less than or equal to reg,reg
is less than or equal to reg,reg
is equal to reg,reg
is equal to reg,reg
is not equal to reg,reg
is not equal to reg,reg
 
equals 0 reg
 
not equals 0 reg
 
 
 
group 4:
 
push segmentreg
 
pop segmentreg
 
push and move reg, reg (or call reg)
 
exchange reg,reg
 
exchange reg,seg
 
clear TR
 
Set TR
 
 
 
group 5:
 
increment reg
 
decrement reg
 
far jmp reg1, reg2 (CS=reg1 and IP=reg2)
 
far call reg1,reg2
 
far jmp [reg] (first byte is CS, second byte is IP)
 
push extended segmentreg, reg (equivalent to push seg; push reg)
 
pop extended segmentreg, reg (equivalent to pop reg; pop seg)
 
reset processor (will completely reset the processor to starting state, but not RAM or anything else)
 
 
 
 
 
 
3 register instructions:
3 register instructions:
1. add reg1, reg2, reg3 (reg1=reg2+reg3)
1. add reg1, reg2, reg3 (reg1=reg2+reg3)
2. sub reg1, reg2, reg3
2. sub reg1, reg2, reg3
 
 
 
 
 
opcodes used: 12 of 16. 4 more opcodes available. Decide what to do with the room later.
 
 
 
 
 
 
0 -nop (doesn't do a thing)
0 -nop (doesn't do a thing)
1 -move immediate (only uses first byte)
1 -move immediate (only uses first byte)
2 -move
2 -move
Line 95... Line 122...
push
push
pop
pop
move
move
add
add
sub
sub
 
 
 
limitations that shouldn't be passed with instructions
 
* Doing 2 memory references
 
* pushing a memory reference (equates to 2 memory references)
 
 
 
Note it is possible however to read and write 16bits at one time to the memory to consecutive addresses.
 
 
 
 
 
segments:
 
DS is used in all "normal" memory references
 
SS is used in all push and pop instructions
 
ES is used when the ExtraSegment bit is set for either push/pop or normal memory references
 
CS is only used for fetching instructions

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.