1 |
9 |
root |
<!--# include virtual="/ssi/ssi_start.shtml" -->
|
2 |
|
|
<link REL="stylesheet" TYPE="text/css" HREF="/people/tantos/styles.css">
|
3 |
|
|
|
4 |
|
|
<h1>WisboneTK</h1>
|
5 |
|
|
<h2>WishboneTK extensions</h2>
|
6 |
|
|
<h3>General Description</h3>
|
7 |
|
|
<p>
|
8 |
|
|
WhisnoneTK extends the original Wishbone specification with some signals. These signals are common in all WishboneTK cores.
|
9 |
|
|
The cores are still 100% compatible with the original Wishbone specification. Other Wishbone cores without this extended signal set
|
10 |
|
|
can be integrated with WishboneTK cores with no problem. The Wishbone specification does not specifiy the topology of the bus. It
|
11 |
|
|
allows for both multiplexer-driven, three-stated, cross-bar or any other topology. WishboneTK extensions make this integration effort
|
12 |
|
|
easyer by introducing a distributed multiplexer scheme.
|
13 |
|
|
<h3>Additional signals</h3>
|
14 |
|
|
<p>
|
15 |
|
|
The following additional signals are defined:
|
16 |
|
|
<table border>
|
17 |
|
|
<tr><th>Signal name</ht><th>Description</th></tr>
|
18 |
|
|
<tr><td>ACK_OI </td><td>WhisboneTK acknowledge chain input signal</td></tr>
|
19 |
|
|
<tr><td>RTY_OI </td><td>WhisboneTK retry chain input signal</td></tr>
|
20 |
|
|
<tr><td>ERR_OI </td><td>WhisboneTK error chain input signal</td></tr>
|
21 |
|
|
<tr><td>DAT_OI(..) </td><td>WhisboneTK data bus chain input signal</td></tr>
|
22 |
|
|
</table>
|
23 |
|
|
<p>
|
24 |
|
|
The operation of these pins are simple and the same for all pins. They all have a pair in the original Wishbone specification. ACK_OI for
|
25 |
|
|
example paired with ACK_O. The rule is that an additional 'I' character is appended to the original Wishbone name to get the name for
|
26 |
|
|
the extended signal. So the pairing of the signals is as follows:
|
27 |
|
|
<table border>
|
28 |
|
|
<tr><th>WishboneTK signal name</ht><th>Paired Wishbone signal name</th></tr>
|
29 |
|
|
<tr><td>ACK_OI </td><td>ACK_O</td></tr>
|
30 |
|
|
<tr><td>RTY_OI </td><td>RTY_O</td></tr>
|
31 |
|
|
<tr><td>ERR_OI </td><td>ERR_O</td></tr>
|
32 |
|
|
<tr><td>DAT_OI(..) </td><td>DATA_O()</td></tr>
|
33 |
|
|
</table>
|
34 |
|
|
|
35 |
|
|
<h3>Signal operation</h3>
|
36 |
|
|
<p>
|
37 |
|
|
All signal with it's associated pair works in a similar way so operation will be described using the ACK_O/ACK_OI signals.
|
38 |
|
|
<p>
|
39 |
|
|
The generation of the original Wishbone signal was slightly modified. There is an internal (let's call it I_ACK_O) signal inside each
|
40 |
|
|
core which has the same behaviour that Wishbone specification dictates. The external ACK_O signal will be the same as the internal
|
41 |
|
|
I_ACK_O signal if the device is selected (STB_I is active) and will be tha same as ACK_OI otherwise. The logic representation of
|
42 |
|
|
this is:<br>
|
43 |
|
|
<code>ACK_OI <= (I_ACK_O and STB_I) or (ACK_IO and not STB_I);</code>
|
44 |
|
|
<p>
|
45 |
|
|
Because Wishbone does not specify any bahaviour for these lines when STB_I is inactive this modification still fully conforms with
|
46 |
|
|
the original spec.
|
47 |
|
|
|
48 |
|
|
<h3>Signal usage for multiplexed buses</h3>
|
49 |
|
|
<p>
|
50 |
|
|
Multiplexed buses it is much easyer to build using this aproach. If you connect all salve devices in a chain by connecting previous
|
51 |
|
|
slave's ACK_O to the next devices ACK_OI and all other mentioned pins likewise you get a distributed multiplexer achitecture. Note
|
52 |
|
|
that during flattening the design (part of the synthetizis process) this distributed multiplexer will turn into a normal multiplexer.
|
53 |
|
|
<p>
|
54 |
|
|
For this achitecture you should connect the outputs of the last slave in the chain to the inputs of the master device. (As Wishbone
|
55 |
|
|
does not provide any arbitation mechanism there can be only one master in a bus and arbiter bridges must be used for a multi-master
|
56 |
|
|
configuration.)
|
57 |
|
|
<p>
|
58 |
|
|
The inputs of the first slave in the chain must be connected as follows:
|
59 |
|
|
<table border>
|
60 |
|
|
<tr><th>WishboneTK signal name</ht><th>Default value</th></tr>
|
61 |
|
|
<tr><td>ACK_OI </td><td>'0'</td></tr>
|
62 |
|
|
<tr><td>RTY_OI </td><td>'0'</td></tr>
|
63 |
|
|
<tr><td>ERR_OI </td><td>'1'</td></tr>
|
64 |
|
|
<tr><td>DAT_OI(..) </td><td>'-' (don't care)</td></tr>
|
65 |
|
|
</table>
|
66 |
|
|
<p>
|
67 |
|
|
You can easily do this by setting these values as the defaults in your component declaration. This will give you another benefit:
|
68 |
|
|
Wishbone defines a handshake between masters and slaves. The master will wait after a cycle issued until the slave signals the
|
69 |
|
|
end of the cycle by asserting either ACK_O, ERR_O or RTY_O. If the master (a micro-processor program) issues an access to an undefined
|
70 |
|
|
address, no slave will be addressed. In this case the master will wait endlessly if none of the handshake signals default to '1'.
|
71 |
|
|
If your design does not use the ERR_O handshake mechanism you should default another signal to '1'.
|
72 |
|
|
|
73 |
|
|
<h3>Signal usage for three-stated buses</h3>
|
74 |
|
|
<p>
|
75 |
|
|
For WishboneTK cores to be connected to three-stated buses use the following defaults:
|
76 |
|
|
<table border>
|
77 |
|
|
<tr><th>WishboneTK signal name</ht><th>Default value</th></tr>
|
78 |
|
|
<tr><td>ACK_OI </td><td>'L' (weak pull-down)</td></tr>
|
79 |
|
|
<tr><td>RTY_OI </td><td>'L' (weak pull-down)</td></tr>
|
80 |
|
|
<tr><td>ERR_OI </td><td>'H' (weak pull-up)</td></tr>
|
81 |
|
|
<tr><td>DAT_OI(..) </td><td>'Z' (hi-Z state)</td></tr>
|
82 |
|
|
</table>
|
83 |
|
|
Than connect all ACK_O signals of all slaves together and connect them to the master. Do the same with all other mentioned
|
84 |
|
|
(RTY_O, ERR_O, DAT_O) signals.
|
85 |
|
|
|
86 |
|
|
<h3>Signal usage in none-WishboneTK multiplexed-bus applications</h3>
|
87 |
|
|
<p>
|
88 |
|
|
If an external multiplexer is used to connect slave signals to master, use the following defaults:
|
89 |
|
|
<table border>
|
90 |
|
|
<tr><th>WishboneTK signal name</ht><th>Default value</th></tr>
|
91 |
|
|
<tr><td>ACK_OI </td><td>'-' (don't care)</td></tr>
|
92 |
|
|
<tr><td>RTY_OI </td><td>'-' (don't care)</td></tr>
|
93 |
|
|
<tr><td>ERR_OI </td><td>'-' (don't care)</td></tr>
|
94 |
|
|
<tr><td>DAT_OI(..) </td><td>'-' (don't care)</td></tr>
|
95 |
|
|
</table>
|
96 |
|
|
|
97 |
|
|
<h2>Author & Maintainer</h2>
|
98 |
|
|
<p>
|
99 |
|
|
<a href="/people/tantos">Andras Tantos</a>
|
100 |
|
|
<!--# include virtual="/ssi/ssi_end.shtml" -->
|