1 |
8 |
dgisselq |
# WB2AXIP: A Pipelind Wishbone B4 to AXI4 bridge
|
2 |
|
|
|
3 |
|
|
Built out of necessity, [this core](rtl/wbm2axisp.v) is designed to provide
|
4 |
|
|
a conversion from a [wishbone
|
5 |
|
|
bus](http://zipcpu.com/zipcpu/2017/11/07/wb-formal.html) to an AXI bus.
|
6 |
|
|
Primarily, the core is designed to connect a
|
7 |
|
|
[wishbone bus](http://zipcpu.com/zipcpu/2017/11/07/wb-formal.html),
|
8 |
|
|
either 32- or 128-bits wide, to a 128-bit wide AXI bus, which is the natural
|
9 |
|
|
width of a DDR3 transaction (with 16-bit lanes). Hence, if the
|
10 |
|
|
Memory Interface Generator DDR3 controller is running at a 4:1 clock rate,
|
11 |
|
|
memory clocks to AXI system clocks, then it should be possible to accomplish
|
12 |
|
|
one transaction clock at a sustained or pipelined rate. This
|
13 |
|
|
[bus translator](rtl/wbm2axisp.v) is designed to be able to handle one
|
14 |
|
|
transaction per clock (pipelined), although [(due to Xilinx's MIG design)
|
15 |
|
|
the delay may be up to 27 clocks](http://opencores.org/project,wbddr3). (Ouch!)
|
16 |
|
|
|
17 |
16 |
dgisselq |
Since the initial build of the core, I've added the
|
18 |
|
|
[WB to AXI lite](rtl/wbm2axilite.v) bridge. This is also a pipelined bridge,
|
19 |
|
|
and like the original one it is also formally verified.
|
20 |
|
|
|
21 |
8 |
dgisselq |
# AXI to Wishbone conversion
|
22 |
|
|
|
23 |
16 |
dgisselq |
As of 20181228, the project now contains an
|
24 |
|
|
[AXI4 lite read channel to wishbone interface](rtl/axilrd2wbsp.v), and also an
|
25 |
|
|
[AXI4 lite write channel to wishbone interface](rtl/axilwr2wbsp.v).
|
26 |
|
|
A third core, the [AXI-lite to WB core](rtl/axlite2wbsp.v) combines these
|
27 |
|
|
two together using a [Wishbone arbiter](rtl/wbartbiter.v). All four of these
|
28 |
|
|
designs have been formally verified, and should be reliable to use.
|
29 |
8 |
dgisselq |
|
30 |
16 |
dgisselq |
As of 20190101, [this AXI-lite to WB bridge](rtl/axlite2wbsp.v) has been
|
31 |
|
|
FPGA proven.
|
32 |
8 |
dgisselq |
|
33 |
16 |
dgisselq |
The full AXI4 protocol, however, is rather complicated--especially when
|
34 |
|
|
[compared to WB](http://zipcpu.com/zipcpu/2017/11/07/wb-formal.html). As a
|
35 |
|
|
result, while there is a full-fledged
|
36 |
|
|
[AXI4 to Wishbone bridge](rtl/axim2wbsp.v) within this project,
|
37 |
|
|
this bridge is still not ready for prime time. It is designed to
|
38 |
|
|
synchronize the write channels, turning AXI read/write requests into pipeline
|
39 |
|
|
wishbone requests, maintaining the AXI ID fields, handle burst transactions,
|
40 |
|
|
etc. As designed, it ignores the AXI xSIZE, xLOCK, xCACHE, xPROT, and xQOS
|
41 |
|
|
fields, while supporting xBURST types of FIXED (2'b00) and INCR (2'b01)
|
42 |
|
|
but not WRAP (2'b10) or reserved (2'b11). The design supports bridging
|
43 |
|
|
between busses of different widths. The only problem is ...
|
44 |
|
|
this full AXI4 to WB converter _doesn't work_ (yet). I know this because it
|
45 |
|
|
doesn't yet pass formal verification.
|
46 |
8 |
dgisselq |
|
47 |
|
|
# Formal Verification
|
48 |
|
|
|
49 |
|
|
Currently, the project contains formal specifications for
|
50 |
|
|
[Avalon](bench/formal/fav_slave.v), [Wishbone](bench/formal/fwb_slave.v), and
|
51 |
16 |
dgisselq |
[AXI](bench/formal/faxi_slave.v) busses.
|
52 |
8 |
dgisselq |
|
53 |
|
|
# Commercial Applications
|
54 |
|
|
|
55 |
|
|
Should you find the GPLv3 license insufficient for your needs, other licenses
|
56 |
|
|
can be purchased from Gisselquist Technology, LLc.
|
57 |
|
|
|
58 |
|
|
# Thanks
|
59 |
|
|
|
60 |
|
|
I'd like to thank @wallento for his initial work on a
|
61 |
|
|
[Wishbone to AXI converter](https://github.com/wallento/wb2axi), and his
|
62 |
16 |
dgisselq |
encouragement to improve upon it. While this isn't a fork of his work, the
|
63 |
|
|
[pipelined wishbone to AXI bridge](rtl/wbm2axisp.v) took its initial
|
64 |
|
|
motivation from his work.
|