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

Subversion Repositories tinycpu

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

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 4 earlz
r0-r6 general purpose registers
11
ip instruction pointer register (represented as r7)
12 3 earlz
cs, ds, es, ss segment registers (code segment, data segment, extra segment, stack segment)
13
tr truth register for conditionals
14
 
15
general opcode format
16
 
17
first byte:
18
first 4 bits: actual instruction
19 4 earlz
next 3 bits: (target) register
20
last 1 bit: conditional
21 3 earlz
 
22 4 earlz
second byte:
23
first 1 bit: second portion of condition (if not immediate) (1 for only if false)
24
next 1 bit: unused
25
next 3 bits: other register
26
last 3 bits: extra opcode information or third register. such as for ADD it could be target=source+third_register
27 3 earlz
 
28
...or second byte is immediate value
29
 
30
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
31
 
32
short list of instructions: (not final, still planning)
33 4 earlz
immediates:
34
1. move reg, immediate
35
2. move [reg], immediate
36
3. push and move reg, immediate (or call immediate)
37
4. push immediate
38
 
39
groups: (limited to 2 registers and no immediates. each group has 8 opcodes)
40
group 1:
41
move(store) [reg],reg
42
move(load) reg,[reg]
43
out reg1,reg2 (output to port reg1 value reg2)
44
in reg1,reg2 (input from port reg2 and store in reg1)
45
 
46
 
47
group 2:
48
and reg1,reg2 (reg1=reg1 and reg2)
49
or reg, reg
50
xor reg,reg
51
not reg1,reg2 (reg1=not reg2)
52
left shift reg,reg
53
right shift reg,reg
54
rotate right reg,reg
55
rotate left reg,reg
56
 
57
group 3: compares
58
is greater than reg1,reg2 (TR=reg1>reg2)
59
is greater or equal to reg,reg
60
is less than reg,reg
61
is less than or equal to reg,reg
62
is equal to reg,reg
63
is not equal to reg,reg
64
 
65
 
66
 
67
 
68
3 register instructions:
69
1. add reg1, reg2, reg3 (reg1=reg2+reg3)
70
2. sub reg1, reg2, reg3
71
 
72
 
73
 
74
 
75 3 earlz
 
76
1 -move immediate (only uses first byte)
77
2 -move
78
3 -push
79
4 -push immediate
80
5 -push and move (or call when acting on ip)
81
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)
82
7 -add
83
8 -subtract
84
9 -bitwise operations (xor, or, and, shift right, shift left, not)
85
 
86
x -multiply (if room)
87
x -divide
88
 
89
 
90
conditionals
91 4 earlz
 
92
1 -- only if true
93
for only if false, there should basically be another compare or if applicable an always afterwards
94 3 earlz
 
95
push
96
pop
97
move
98
add
99
sub

powered by: WebSVN 2.1.0

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