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

Subversion Repositories sxp

[/] [sxp/] [trunk/] [doc/] [instr.txt] - Blame information for rev 59

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 samg
SXP Processor
2
1st version.
3
Decoderless Stage Pipeline
4
 
5
This style does not make for a set number of instructions.
6
Instrucions are built from the configuration of the pre decoded
7
setup bits.
8
 
9
Issues:
10
1. How to organize a ext bus read and write
11
 
12
----------------------------------------------------------------------------------------------------
13
Destination for write back data
14
  00 Register  (Aritmetic,  Logical and Memory Loads)
15
  01 PC        (Flow control)
16
  10 Memory    (Store)
17
  11 Extension Interface
18
 
19
---------------------------------------------------------------------------------------------------
20
Source (Register or immediate)
21
 
22
1st Source for the ALU must be a register , PC or Ext Data Bus 1 (Ext Reg A)
23
2nd Source for the ALU must be a register, immediate or Ext Data Bus 2 (Ext Reg B)
24
 
25
       A    B
26
 000 (Reg, Reg)
27
 001 (Reg, Imm)  Dest Reg and Src Reg are same
28
 010 (PC , Reg)
29
 011 (PC , Imm)
30
 
31
 100 (Reg, Ext)
32
 101 (Ext, Reg)
33
 110 (Ext, Imm)
34
 111 (Ext, Ext)
35
 
36
--------------------------------------------------------------------------------------------------
37
ALU Instruction
38
 
39
  ALU Output       YA        YB
40
              |----------|-----------|
41
  000 PASS    |     A    |    B      |
42
  001 ADD     |  A + B   | A + B (SE)|
43
  010 SUB     |  A - B   | A - B (SE)|
44
  011 MULT    | A*B(MSW) |   A*B(LSW)|
45
  100 AND/OR  |    A & B |  A | B    |
46
  101 XOR     |    A ^ B | ~(A ^ B)  |
47
  110         | RESERVED | RESERVED  |
48
  111 PASS_SW |   Al:Ah  |  Bl:Bh    |
49
              |-----------------------
50
 
51
  Note: (SE) means sign extended from 16th bit up to 32nd bit.
52
        (MSW) means most significant word result
53
        (LSW) means least significant word result
54
 
55
The ALU instructions are condensed by using both YA and YB outputs for multiple functions.
56
 
57
  example:
58
  The add result that comes out of result YA is a A(32 bits) + B(32 bits) add.
59
  YB result is be a A(32 bits) + B(16 sign extended bits)
60
  *** This takes care of worrying about an instruction to sign extend bits for relative jumps.
61
 
62
 
63
 
64
  ALU Development Note:
65
  The best way to catagorize the ALU instructions is by number of inputs and number of outputs.
66
 
67
  Single Input -> Single Output (NOT and etc..)
68
  Single Input -> Double Output (I don't know of any)
69
  Double Input -> Single Output (ADD, SUB, AND, OR, XOR)
70
  Double Input -> Double Output (MULT)
71
 
72
  The double input single output instructions can be combined.
73
  I am tempted to say that there will not be any single input commands
74
  to simpluify the ALU module and instructions.
75
 
76
 
77
---------------------------------------------------------------------------------------------
78
  Write Back Data Source
79
 
80
  Code    Data Source
81
  ---- ---------------------------
82
  0000 ALU output A
83
  0001 ALU output B
84
  0010 From Memory (Load)
85
  0011 From Extension Interface
86
 
87
  0100 ALU A FLag Z (zero extended)
88
  0101 ALU A Flag N (zero extended)
89
  0110 ALU A Flag V (zero extended)
90
  0111 ALU A Flag C (zero extended)
91
 
92
  1000 ALU B FLag Z (zero extended)
93
  1001 ALU B Flag N (zero extended)
94
  1010 ALU B Flag V (zero extended)
95
  1011 ALU B Flag C (zero extended)
96
 
97
  1100 EXT ALU FLag Z (zero extended)
98
  1101 EXT ALU Flag N (zero extended)
99
  1110 EXT ALU Flag V (zero extended)
100
  1111 EXT ALU Flag C (zero extended)
101
 
102
  Note:
103
    Flag Z = Zero flag (1 if result all zeros)
104
    Flag N = Negative flag (1 if MSB is a one)
105
    FLag C = Carry flag (1 if carry with sub or add)
106
    Flag V = Overflow flag (1 if overflow with sub or add)
107
 
108
-----------------------------------------------------------------------------------------------
109
Conditional jump instructions
110
 
111
Dest = PC
112
Source = Reg, Reg
113
ALU = PASS
114
WB_SRC = YA
115
(The msb of YB will be used to determine if the jump should be taken)
116
 
117
JNZ R1 (Address) , R2 (lsb condition value)
118
JZ R1 (Address) , R2 (lsb condition value)
119
The (bits that control this are only used when PC is the target)
120
The lsb of the instruction is used to determine if this is a conditional (1) or uncond jump(0).
121
The next to lsb is used to determine if the jump is a JZ or JNZ for conditional jumps.
122
 
123
(NEW)
124
The third bit is used to detmermine if this is a jump and link as well.
125
The register for the link is held in the destination address.
126
This field was unused in pc dest operations and is perfect for all sort of
127
jump and link options. It also greatly simplified the architecture.
128
(Link address was tied to addrb which caused huge limitations.)
129
This conditional jump will happen if the lsb of the instruction is a 1
130
 
131
--------------------------------------------------------------------------------------------------
132
ALU Extension instructions
133
 
134
ALU input words A and B are always broadcasted to the ext interface.
135
 
136
If an extension ALU instruction is to be used then the write back source is
137
set to the extention inteface. This bypasses the base ALU completely and allow the
138
results to be written back to the destination.
139
 
140
-------------------------------------------------------------------------------------------------
141
 
142
Ext read instructions.
143
 
144
In Ext Bus reads, the Ext circuit should use the ALU Op + WB src fields to determine what
145
type of Ext operation is required.
146
 
147
Ex. ALU instruction 0 is used to make a call to the read the Ext bus.
148
If ALU instruction is 1 - 7 then it could be an ext ALU instruction.
149
 
150
----------------------------------------------------------------------------------------------------
151
The interupt is internal controlled by an interupt module inside the sxp.
152
 
153
Even though you cannot issue a [pc] dest, [pc,imm] src JAL type instruction, the interupt module
154
can control and insert the JAL signal.
155
 
156
I have not figured out how the user can generate an interupt that causes a JAL to happen.
157
One way is write the vector address in one reg and enter a JAL type instruction. This should
158
work OK, it is just not as clean as the internal interupt generated signal.
159
 
160
By using the immediate field, there are a total of 65535 possible interupts. This should
161
surfice.
162
 

powered by: WebSVN 2.1.0

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