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

Subversion Repositories tinycpu

[/] [tinycpu/] [trunk/] [docs/] [design.md.txt] - Blame information for rev 5

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 earlz
This is the design of TinyCPU. It's goals are as follows:
2
 
3
1. 8-bit registers and operations (8 bit processor)
4
2. 16-bit address bus
5
3. fixed 16-bit instruction length
6
4. use a small amount of "rich" instructions to do powerful things
7
5. 1 instruction per clock cycle
8
 
9
Register list:
10 5 earlz
r0-r5 general purpose registers
11
sp stack pointer (represented as r6)
12 4 earlz
ip instruction pointer register (represented as r7)
13 3 earlz
cs, ds, es, ss segment registers (code segment, data segment, extra segment, stack segment)
14
tr truth register for conditionals
15
 
16
general opcode format
17
 
18
first byte:
19
first 4 bits: actual instruction
20 4 earlz
next 3 bits: (target) register
21
last 1 bit: conditional
22 3 earlz
 
23 4 earlz
second byte:
24
first 1 bit: second portion of condition (if not immediate) (1 for only if false)
25 5 earlz
next 1 bit: use extra segment
26 4 earlz
next 3 bits: other register
27
last 3 bits: extra opcode information or third register. such as for ADD it could be target=source+third_register
28 3 earlz
 
29
...or second byte is immediate value
30
 
31
For opcodes requiring 3 registers but without room, the target opcode is assume to be the second operation. Such as for AND, target=source AND target
32
 
33
short list of instructions: (not final, still planning)
34 4 earlz
immediates:
35
1. move reg, immediate
36
2. move [reg], immediate
37
3. push and move reg, immediate (or call immediate)
38
4. push immediate
39 5 earlz
5. jmp immediate
40 4 earlz
 
41
groups: (limited to 2 registers and no immediates. each group has 8 opcodes)
42
group 1:
43
move(store) [reg],reg
44
move(load) reg,[reg]
45
out reg1,reg2 (output to port reg1 value reg2)
46
in reg1,reg2 (input from port reg2 and store in reg1)
47 5 earlz
pop reg
48
push reg
49
move segmentreg,reg
50
move reg,segmentreg
51 4 earlz
 
52
group 2:
53
and reg1,reg2 (reg1=reg1 and reg2)
54
or reg, reg
55
xor reg,reg
56
not reg1,reg2 (reg1=not reg2)
57
left shift reg,reg
58
right shift reg,reg
59
rotate right reg,reg
60
rotate left reg,reg
61
 
62
group 3: compares
63
is greater than reg1,reg2 (TR=reg1>reg2)
64
is greater or equal to reg,reg
65
is less than reg,reg
66
is less than or equal to reg,reg
67
is equal to reg,reg
68
is not equal to reg,reg
69 5 earlz
equals 0 reg
70
not equals 0 reg
71 4 earlz
 
72 5 earlz
group 4:
73
push segmentreg
74
pop segmentreg
75
push and move reg, reg (or call reg)
76
exchange reg,reg
77
exchange reg,seg
78
clear TR
79
Set TR
80 4 earlz
 
81 5 earlz
group 5:
82
increment reg
83
decrement reg
84
far jmp reg1, reg2 (CS=reg1 and IP=reg2)
85
far call reg1,reg2
86
far jmp [reg] (first byte is CS, second byte is IP)
87
push extended segmentreg, reg (equivalent to push seg; push reg)
88
pop extended segmentreg, reg (equivalent to pop reg; pop seg)
89
reset processor (will completely reset the processor to starting state, but not RAM or anything else)
90 4 earlz
 
91
 
92 5 earlz
 
93 4 earlz
3 register instructions:
94
1. add reg1, reg2, reg3 (reg1=reg2+reg3)
95
2. sub reg1, reg2, reg3
96
 
97
 
98 5 earlz
opcodes used: 12 of 16. 4 more opcodes available. Decide what to do with the room later.
99 4 earlz
 
100
 
101 5 earlz
 
102 3 earlz
 
103
1 -move immediate (only uses first byte)
104
2 -move
105
3 -push
106
4 -push immediate
107
5 -push and move (or call when acting on ip)
108
6 -compare (is less than, is less than or equal, is greater than, is greater than or equal, is equal, is not equal) (6 conditions room for 2 more in extra)
109
7 -add
110
8 -subtract
111
9 -bitwise operations (xor, or, and, shift right, shift left, not)
112
 
113
x -multiply (if room)
114
x -divide
115
 
116
 
117
conditionals
118 4 earlz
 
119
1 -- only if true
120
for only if false, there should basically be another compare or if applicable an always afterwards
121 3 earlz
 
122
push
123
pop
124
move
125
add
126
sub
127 5 earlz
 
128
limitations that shouldn't be passed with instructions
129
* Doing 2 memory references
130
* pushing a memory reference (equates to 2 memory references)
131
 
132
Note it is possible however to read and write 16bits at one time to the memory to consecutive addresses.
133
 
134
 
135
segments:
136
DS is used in all "normal" memory references
137
SS is used in all push and pop instructions
138
ES is used when the ExtraSegment bit is set for either push/pop or normal memory references
139
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.