Material Collection about the Kernel Accelerator Device


Material for Easterhegg 2006, Apr.14

The slides of the KAD-lecture held at Easterhegg 2006, Viena can be found here very soon. The Lecture will be held today at Rathaussstrasse 6, Vienna 1 at 16.00h
The Slides can be downloaded here

Material for Whatthehack

Additional Material is at this small server:
194.231.188.66


Material for 21c3

Additional to the KAD-Lecture held at 21C3 in Berlin, Eastern Germany, this page provides a paper to you
which gives an introduction about the technologies involved, the KAD-Project and its philosophy.

Here is The Paper about the KAD.

Here are The Slides from the KAD-Lecture.

The Audiotrack of the KAD-lecture held at 21c3 is aviable here at koeln.ccc.de as ogg-audio.
The local mirror of the file is available here.

The Videos of the KAD-lecture and the other lectures at 21C3 may be aviable on ftp.ccc.de/congress/2004.
So stay tuned - As always.



Some News and Ideas:

Which FPGA?

After looking around I decided to use the Xilinx SPARTAN3E FPGAs, because

How to support 5V-PCI?

To support 5V-pci is impossible using cheap 90nm-FPGAs.
Because the older 5V types will die soon, I decided to do the design witch level-shifters from TI:
sn74cb3t16211 The Datasheet can be found here.
So we connect VIO to the supply of one side of the level shifter which provides us a universal pci-Interface from 33Mhz PCI@5V to 66MHz PCI@3.3V.
I am just thinking about making the KAD 64 bit PCI.

In the next weeks I will find some time to fiddle around with Open-Office-Calc to design the setup and hold times. As the level shifter provides a propagation delay of <0.25ns we won't have much trouble though.

What about PCI-Express? Old PCI is outdated!

Sorry Folks, but we have to get along with the old and dusty PCI for now:
Unfortunately, there is no wishbone-bridge for PCI-Express.
But we are thinking about using a PCI-Express Phy together with a user-fpga to provide the hardware for a single line pci-express link. A pci-express project started at opencores.org so we will get in touch with the project maintainer.
A PCI-Express-Phy will be needed, because the I/O-Cells of cheap FPGAs can not provide 2.5Gb/s. A Phy provides excellent signal integrity and the serdes and the coding on the pysical layer of pci-express.
We will use the Intel PIPE-Interface or the Phillips PXPIPE-Interface to talk to the pci-e-Phy. For the FPGA we have to code the PCI-Express-Transport-Layer and a wrapper to embedd the Wishbone-PCI-Bride.
But at the moment we will focus on the hardware implementation (adding a phy for pci-express) to allow for pci-express support in later firmware-revisions.

What about tools?

At the moment I evaluate the Designflow with gnu-eda and gnu-pcb. If it is really suitable for the KAD I will provide a GNU-Eda-Distribution with some libraries and tools to be used with the KAD project. So you will only have to unpack a tarball and do some configures and makes.
For FPGA-Core development we will use Xilinx Webpack:
Get Full ISE7.1 Webpack for linux
Xilinx's Webpack-Home is here.
(If you experience problems when trying to view the webpack-page, then try using this excerpt for reference about webpack.)
Stay tuned. mail me, if you want to support me.

What should the board-level wishbone bus look like?

As the WB has a lot of signals (64 bit address, 32 bit data, and some control lines) the board-level bus has to be serialized somehow to save on lines because
The SCSI-Idea:
The Idea is to use the electrical interface of U2W-SCSI with some modification:
we are 32 bit instead of 16 Bit.
So we can use the termination-ICs (NOT the PLUGS!) which were made for SCSI3, because we provide lvds-signaling for the 32 bits of our board-level-wishbone-bus. So we need 'only' 64 lines.
But how do we transfer all the bus signals?
We introduce 2 clocks which are 90 degrees out of phase:
CLKA and CLKB are now quad-pumped clocks which provide 4 States to the 32Bit bus. So we can transfer 128Bit in one Meta-Cycle which consists of 4 quad-pump-cycles.
Now we can set the wishbone-bus clock to the clock of the Meta-Cycle and we get a transparent transport from the wishbone bus point of view.
But the Idea has a draw back:

We have to consider the timing of the wishbone bus and provide enough timing margin Maybe, we need 2 extra clock lines to carry a sender-based clock which guarantees that each sender provides a clock that is nailed to the transmitted data in order to avoid timing problems because of bus-length issues.

So these two clocks are made from the master-clocks CLKA and CLKB which were already mentioned. So if a FPGA wants to write a signal to the bus it has to put its clock to the transmit-clock lines. Obviously, we need some kind of arbitration here...

The Board-Level-Bus has to be as fast as possible because it only has a quarter of its clock frequency from the wishbone point of view. So we might get an effective 33MHz Wishbone using 133MHz 'Quad-pump-Speed' on the KAD. This results in 66MHz CLKA, CLKB and 133MHz data.
Additionally, the board level Wishbone Bus will be the bottle-neck for all fpga designs (user cores) if they are synchronous to the wishbone bus.

What to think next?

The concept for the reconfiguration of the fpgas is in a early planing stage but quite stable though. The most important thing is the board level wishbone bus, because it is critical to the board level design and the vhdl design which was started by Hagen (see chipforge.org) some months ago.
Any Ideas for the timing discussion and the Layout of the board-level-wishbone bus are welcome.

I will give a lecture about the KAD at the whatthehack. So there should be enough room for discussion afterwards.
Hopefully, the KAD-Stuff develops further so as time permits there will be a first revision of the board-level-wb specification.


Transputer-Like Links Additionally, if io-count allows, wie will conect each fpga with 2->3 other fpgas using interlinks which are point2point and unclocked (they ring via strobe/ack) The Idea is to use 24 Lines per link, and upto 3 links.
Here is a copy of an idea I exchanged with hagen in german:
(It will be refined and translated into english very soon.)

>
L:>> Was noch hinzu kommen wird ist ein Interlink so aehnlich wie die Transputer-links. Evtl. koennen wir auch Transputer-Links nehmen.
>> Auf jedenfall duplex, und wenn Du magst koennen wir auch einen ripple-clock (strobe/ack) drauf fahren, und so die Interlinks selbstschwingen lassen.
>> Elektrisch ist impedanzkontrolliertes single-ended punkt-zu-punkt gedacht.
>> Hier werde ich sehen, was die maximale Geschwindigkeit bieten  kann.
>>
>> Die "Transputerlinks" sind optional.
>>   
>
>
H:> Okay, habe ich vorgemerkt. Über selbstschwingend hatten wir ja schon gesprochen, das ich da was in der Mappe habe. 
Je Richtung macht dies auch so schon zwei Leitungen, d.h. 4 Leitungen für eine Punkt-zu-Punkt-Verbindung.
>
> - Data von A nach B,
> - Strobe von A nach B, und für den Rückkanal
> - Data von B nach A,
> - Strobe von B nach A.
>
> Der Transputerlink sieht nur 8 bit je Zeichen vor, die Steuerzeichen sind nur 3 bit lang. Ich würde gern etwas länger ran gehen, so 32 bit vielleicht.
>
>  
>
L: 

Vom Strippenziehen her ist es egal, notfalls haben wir mit meinem Vorschlag mehr bits:
Warum willst Du jedes Bit bestaetigen?!
Wenn die Leitungen gleich lang sind, und das werden sie dank delay_property, reicht es 8bit, oder  sogar nur 16bit zu stroben/ackn.

Es wuerde doch reichen jedes Byte zu bestaetigen:
8bit leitungen, 1 bit parity, 1 bit strobe, 1 ack=11 Leitungen, damit es rund wird 12 (reserve oder besser error, falls parity-error, dann gibts einen retry.)

Du braeuchtest fuer einen 8bit-Link ohne Parity 16 Leitungen, macht 32 Leitungen fuer den kompletten Link.
Metzgerfrage: darfs mehr sein?! nagut, optional 4 mehr damit haben wir 1 parity high_byte, 1 strobe_high_byte 1_ack high_byte, 1 error highbyte.

Ich braeuchte 16bit+par+err+strobe+ack=24 pro richtung in der Edelversion,
wobei durch trennung von high und lowbyte das delay-property auf jeweils 1 byte+4steuerleitungen beschraenkt sein kann.
In der Medium-Version (ohne strobe-ack fuer highbyte) 22 Leitungen pro seite
In der Low-Version (ohne par,err,stb,ack fuer highbyte 20 leitungen pro seite
in der zu Dir (falls Du 8bit mit 8bit stb/ack meinst) inkompatiblen schmalspurversion 8bit,par,err,ack,stb 10 Leitungen pro Seite.

Problem:
Wir haben sinnvollerweise 3 Links pro FPGA um die Netzstruktur "Leiter" zu bekommen.
4  Links ist zwar besser:  Beliebige Matte / Schokotafel auch in der Mitte oder Leiter mit durchkreuzten Raeumen zwischen den Sprossen.

Wenn wir noch wishbone und user-io betrachten wird wieder eng. Man kann nicht alles haben!

Ich habe Dich doch recht verstanden, dass Du 8bit-parallel transportieren willst mit einzelbestaetigung pro bit=16strippen pro Seite=32strippen in Summe ?!
Falls Du nur 1 Bit meinst, dann lass uns zumindes 8bit breit werden, denn die billig-fpgas koennen so ca. 300mhz pro io und  eben nicht 2-3ghz 
wie der stratix oder der virtex4 (stratix hat bessere Signalqualitaet)
Da wir aber nicht in der stratix-liga spielen (dann waere gigabit-ethernet und pci-express auch kein Thema)
muessen wir 8bit breit werden, um das speed-penalty auszugleichen!

Daher lass uns mindestens 8bit+stb+ack+par+err =12 LEitungen pro Richtung =24 Leitungen pro Link=72Strippen bei 3 Links und 96 Strippen bei 4 Links (4 sind wohl etwas heftig) nehmen.

Ich denke, 3 Links mit je 24 Strippen sind gut, denn 2 Links gibt als absolutes Minimum nur einen Kreis und bedeutet  je nach Boardgroesse viel Traffic auf dem Ring, 
anderseits koennte man sich Strategien von Tokenring (Daten muessen einmal umgelaufen sein) als Kontrolle der Daten und Echtzeitfaehigkeit zu Nutze machen.
3 Links bieten den Vorteil, das man segmente abkoppeln kann, und "mac-basiertes" routing macht: wer zu wem? eine kleine Routing-tabelle sagt, welches fpga an welchem link erreichbar ist. 
Das hast schon was: Beim Hinzufuegen/start von cores werden die kad-Links mit broadcast-paketen belegt, jeder core hat eine kleine mac-addresse und gibt sie zurueck. 
Jedes paket, das ueber ein anderes fpga geht bekommt die mac des via-fpgas dazu. Die FPGAs koennen dann lernen, wer rechts, links mittig am link haengt und auf kurze hops das routing optimieren.
Besser macht das der pc, denn der weis, was er wohin geladen hat und setzt die routingtabelle entsprechend der gewuenschten Optimierung in den fpgas auf, und vergibt die macs.


Das ist doch cool...


---
L:
Falls wir mehr Leitungen uebrig haben, dann nehmen wir 16bit oder 12bit (1byte und 1 nibble:-) als link.

Ich will zusehen, dass ich einen bidirektionalen I/O-Standard nehme, sodass beide Loesungen ohne HW-Aenderungen (umbestueckungen fuer Wechsel der Senderichtung tun aua) gehen.

Also werden wir 24 Leitungen punkt-zu punkt ziehen, wie Verstaerkungsstege zwischen den Stuecken einer Schokoladentafel von lindt. Signaltechnisch Single-Ended impedanzkontrolliert.
Will man den transputerlink ueber das ganze kad nutzen, muss man eben einen router in den fpgas haben.
Date: Sat Dec 24 12:44:08 CET 2005. Hagen und Ludwig
This idea will be rifined and translated to english
A refined specification of the kad is to be released soon.

Stay tuned, and mail me some ideas and questions if they relate to the topics herein...

Have fun with hardware.


luja




I have set-up a wiki-page at a free ad sponsored wiki-provider.
This is a temporary solution because the openhardware project will soon
move to a full featured server which runs in the basement of my house.
Then there will be all the bells and whistles one might demand.

Meanwhile, feel free to discuss the KAD-Stuff at this hosted wiki




Robert A. Pease: "The Soldering Iron is my favourite Programming Language ..."

If you do not know him, visit one of his analog lectures sponsored by national semiconductor.
He is a real analog zar, and it is fun to listen to him.