1 |
114 |
albert.wat |
S1 Core - Functional Specification
|
2 |
|
|
==================================
|
3 |
4 |
fafa1971 |
|
4 |
|
|
Preface
|
5 |
|
|
-------
|
6 |
|
|
The S1 is a CPU core that makes use of a single SPARC Core
|
7 |
|
|
extracted from the OpenSPARC T1, with the addition of a
|
8 |
|
|
Wishbone Bridge, a Reset Controller and an Interrupt
|
9 |
|
|
Controller.
|
10 |
|
|
___________________________________
|
11 |
114 |
albert.wat |
| S1 Core |
|
12 |
4 |
fafa1971 |
| _______ _____ ________ ________ |
|
13 |
|
|
|| || || || ||
|
14 |
|
|
|| Reset || Int || SPARC ||Wishbone||
|
15 |
|
|
|| Ctrl. ||Ctrl.|| Core || Bridge ||
|
16 |
|
|
|| || || || ||
|
17 |
|
|
| ------- ----- ------- -------- |
|
18 |
|
|
-----------------------------------
|
19 |
|
|
|
20 |
|
|
Instruction Set Architecture
|
21 |
|
|
----------------------------
|
22 |
|
|
The CPU inside the S1 Core is the SPARC Core of the
|
23 |
|
|
OpenSPARC T1 microprocessor, so you can read OpenSPARC
|
24 |
|
|
documents for the specification of this CPU.
|
25 |
|
|
Basically it follows the SPARC v9 64-bit ISA, specified
|
26 |
|
|
in the documents freely available on the opensparc.net
|
27 |
|
|
website; for the full documentation you also have to read
|
28 |
|
|
the datasheet and other specs included in the download
|
29 |
|
|
file of the T1 design.
|
30 |
|
|
|
31 |
|
|
Software Support
|
32 |
|
|
----------------
|
33 |
|
|
The SPARC v9 ISA is obviously supported by the GCC compiler;
|
34 |
|
|
also GNU/Linux is supported and the latest versions of the
|
35 |
|
|
kernel are ready for the T1.
|
36 |
|
|
There's also a complete GNU/Linux distribution, Ubuntu,
|
37 |
|
|
that comes ready for the SPARC Core of the T1 and could be
|
38 |
114 |
albert.wat |
used in a seamless way also for S1 based micros.
|
39 |
4 |
fafa1971 |
|
40 |
|
|
S1 Memory Map
|
41 |
|
|
-------------
|
42 |
|
|
The S1 Core has 64-bit wide Data Bus and Address Bus.
|
43 |
|
|
Each bit of the Address Bus has a different meaning:
|
44 |
|
|
- bits [63:59] specify the one-hot encoding for the T1 target region number;
|
45 |
|
|
- bits [58:40] are 19 bits always hardwired to zero;
|
46 |
|
|
- bits [39:0] are the 40-bit Physical Address as it comes from the SPARC Core.
|
47 |
|
|
|
48 |
|
|
For most applications the lowest 40-bit address coming from the SPARC Core
|
49 |
|
|
should be enough, so it should be safe to ignore the other bits (unless
|
50 |
|
|
you suspect that for instance Physical Address zero in region 0 is
|
51 |
|
|
different from address zero in region 1 and so forth).
|
52 |
|
|
|
53 |
|
|
S1 Physical Address [63:56]
|
54 |
|
|
---------------------------
|
55 |
|
|
the first byte specifies the T1 target region number (one-hot encoded
|
56 |
|
|
on the most significant 5 bits, the 3 least significant bits are
|
57 |
|
|
hardwired to zero):
|
58 |
|
|
- 0x08 RAM Bank 0 (bit 59 set)
|
59 |
|
|
- 0x10 RAM Bank 1 (bit 60 set)
|
60 |
|
|
- 0x20 RAM Bank 2 (bit 61 set)
|
61 |
|
|
- 0x40 RAM Bank 3 (bit 62 set)
|
62 |
|
|
- 0x80 I/O Bridge (bit 63 set)
|
63 |
|
|
|
64 |
|
|
As you can see one of the five most significant bits of the
|
65 |
|
|
address must be always set depending on the target region.
|
66 |
|
|
|
67 |
|
|
S1 Physical Address [39:32]
|
68 |
|
|
---------------------------
|
69 |
|
|
In the T1 bit 39 is zero for all memory addresses and 1 for I/O
|
70 |
|
|
addresses. Then the T1, from which the S1 is derived, uses the
|
71 |
|
|
following memory map for bits [39:32] (please note that this
|
72 |
|
|
mapping is NOT used by the S1):
|
73 |
|
|
- 0x00-0x7F RAM
|
74 |
|
|
- 0x80 JBus
|
75 |
|
|
- 0x81-0x95
|
76 |
|
|
- 0x96 Clock Unit
|
77 |
|
|
- 0x97 RAM Controller
|
78 |
|
|
- 0x98 I/O Bridge Management Block
|
79 |
|
|
- 0x99 TAP Unit
|
80 |
|
|
- 0x9A-0x9D
|
81 |
|
|
- 0x9E TAP2ASI
|
82 |
|
|
- 0x9F I/O Bridge Interrupt Table
|
83 |
|
|
- 0xA0-0xBF L2 Control Registers
|
84 |
|
|
- 0xC0-0xFE JBus
|
85 |
|
|
- 0xFF Boot ROM
|
86 |
|
|
|
87 |
|
|
For the S1 Core the memory map is different and the following
|
88 |
|
|
table applies:
|
89 |
|
|
- 0x00-0x7F RAM
|
90 |
|
|
- 0x80-0x95
|
91 |
|
|
- 0x96 Real Time Clock
|
92 |
|
|
- 0x97 RAM Controller
|
93 |
|
|
- 0x98 Wishbone Interconnect Arbiter
|
94 |
|
|
- 0x99 DMA Controller
|
95 |
|
|
- 0x9A-0x9D
|
96 |
|
|
- 0x9E General Purpose I/O
|
97 |
|
|
- 0x9F Interrupt Controller
|
98 |
|
|
- 0xA0-0xFE
|
99 |
|
|
- 0xFF Boot ROM
|
100 |
|
|
|
101 |
|
|
If you intend to use in your system not only the least significant
|
102 |
|
|
40 bits generated by the SPARC Core, take into account that for
|
103 |
|
|
accesses not directed to RAM but to configuration registers it
|
104 |
|
|
should be an access to the I/O region (bit 63 set), so for instance
|
105 |
|
|
the full 64-bit base address for the Interrupt Controller should
|
106 |
|
|
be 0x8000_009F_0000_0000.
|
107 |
|
|
|
108 |
|
|
S1 Physical Address [2:0]
|
109 |
|
|
-------------------------
|
110 |
|
|
The S1 Core implements a Wishbone Master interface with a data bus
|
111 |
|
|
of 64 bits and a granularity of 1 byte.
|
112 |
|
|
Then the address generated by the S1 is always aligned on 64-bit
|
113 |
|
|
boundaries, i.e. bits [2:0] are always zero; the information
|
114 |
|
|
about the bytes that have to be accessed during a Wishbone
|
115 |
|
|
bus cycle is obviously encoded on the SEL signals described
|
116 |
|
|
in the Wishbone spec.
|
117 |
|
|
|
118 |
|
|
Reset Controller
|
119 |
|
|
----------------
|
120 |
|
|
The boot sequence of the T1 is quite complex; we have then written
|
121 |
|
|
a reset controller for the S1 that just takes one reset signal
|
122 |
|
|
and generates all the signals required by the SPARC Core to boot
|
123 |
|
|
up properly.
|
124 |
|
|
|
125 |
|
|
Interrupt Controller
|
126 |
|
|
--------------------
|
127 |
|
|
Early versions of the S1 Core feature a very basic Interrupt
|
128 |
|
|
Controller that latches interrupt requests arriving to the core
|
129 |
|
|
that are then signaled to the SPARC Core with the proper CPX
|
130 |
|
|
packet.
|
131 |
|
|
Currently this block is untested and it will be enhanced in
|
132 |
|
|
the future.
|
133 |
|
|
|
134 |
|
|
Wishbone Bridge
|
135 |
|
|
---------------
|
136 |
|
|
The eight SPARC Cores inside the OpenSPARC T1 microprocessor
|
137 |
|
|
make use of a proprietary protocol to communicate with the
|
138 |
|
|
rest of the chip; this protocol is often referred to as
|
139 |
|
|
PCX/CPX protocol, where PCX stands for "Processor-to-Cache
|
140 |
|
|
Xbar" and is used for the requests outgoing the SPARC Cores
|
141 |
|
|
and CPX stands for "Cache-to-Processor Xbar" and is used for
|
142 |
|
|
incoming packets.
|
143 |
|
|
The main block designed specifically for the S1 Core is the
|
144 |
|
|
"SPARC Core to Wishbone Master interface bridge" that translates
|
145 |
|
|
the requests and return packets of the SPARC Core into the
|
146 |
|
|
Wishbone protocol.
|
147 |
|
|
You can find the full specification of the Wishbone protocol
|
148 |
|
|
on the OpenCores site at http://www.opencores.org
|
149 |
|
|
|
150 |
|
|
Interface Details
|
151 |
|
|
-----------------
|
152 |
|
|
These are the features of the bus interface of the S1 Core
|
153 |
|
|
(they can also be referred to as "Wishbone Datasheet"):
|
154 |
|
|
- Wishbone Master interface that follows revision B.3;
|
155 |
|
|
- standard signals names identified by leading "wbm_" chars;
|
156 |
|
|
- no ERR/RTY support;
|
157 |
|
|
- 64-bit Address Bus (with some bits unused, see above);
|
158 |
|
|
- 64-bit Data Bus supporting 8, 16, 32 and 64 bit accesses;
|
159 |
|
|
- data transfer ordering is Big Endian;
|
160 |
|
|
- supports Single Read/Write Cycles.
|
161 |
|
|
|