Forum: FPGA, VHDL & Co. RocketIO (Virtex-5) Neuling


von Andi (Gast)


Lesenswert?

Ich bin zurzeit in Amerika fuer ein Praktikum und soll nun das ml 507
board  (virtex 5 XC5VFX70T) programmieren und mit Rocket I/O protokoll
ausstatten. Welche naeheren Spezifikationen das Protokoll haben wir ist
noch unklar, wird aber sicher ueber "fiber optic" uebertragen zu einem
anderen FPGA. Leider muss ich sagen das ich bis auf Hello World und ein
paar blinkende Leds keine Ahnung vom VHDL FPGA programmieren habe.
Somit tu ich mich im Moment auch mit dem Verstaendniss der gesamten
Rocket I/O Sache noch ein bisschen schwer.

Vielleicht koennt ihr mir mal grundsaetzlich ein paar Fragen
beantworten.

1. Rocket I/O ist ein Uebertragungsstandard oder eigenes protokoll?

2. Also nehmen wir an ich will einen integer schicken ueber Rocket I/O
an ein anderes FPGA board, dann laeuft das wie ab?
Hier gehts mir Hauptsaechlich mal um das Verstaendniss , warum gibt es
denn fuer die Rocket I/O noch verschiedene Standards wie Aurora,
Fiber.... XAUI ?? Was ist das, sind ja Protokolle , was ist dann Rocket
I/O auch ein Protokoll??


3. Vielleicht hat ja jemand auch noch ein kleines beispiel rumliegen,
das klar ausweist ..... -- hier Daten fuer Senden --- gehen an (was auch
immer Aurora Protokoll---- geht an Rocket IO -"Fiber optic"----zum 2 ten
FPGA --- Rocket IO----Aurora.... --- hier Daten die Empfangen werden,
sowas waere zum Verstaendniss super!!

4. !! Zumal ich ja nichtmal weis ob das so laeuft....


hab mir bereits mit dem Core generator Rocket IO Kerne erzeugt aber was
ich dann mach und wie ich die einbinde und Daten sende da weis ich
leider nicht weiter......

Danke bereits im Voraus,

Andi

von Christian R. (supachris)


Lesenswert?

Hättest du nicht zig Postings gekapert, hättest du vielleicht gemerkt, 
dass ich dir hier Beitrag "Re: IP Core Wizard Rocket IO Xilinx" 
schon eine ausführliche Antwort gebenen hatte.

von Andi (Gast)


Lesenswert?

Doch hab ich gesehen danke, dachte nur so wird schneller jemand 
aufmerksam. Danke für die Infos natürlich.

von Christian R. (supachris)


Lesenswert?

So ein Mehrfach-Geposte wird hier gar nicht gerne gesehen.

von Duke Scarring (Gast)


Lesenswert?

Andi schrieb:
> dachte nur so wird schneller jemand
> aufmerksam.
Ja. Da wird jemand aufmerksam. Aber im negativen Sinne...

Duke

von Andi (Gast)


Lesenswert?

Hab mich nun eh entschuldigt... allerdings auch in jedem Thread, ohhhh 
kommt mir grad war wohl auch nicht die beste Idee, naja sie werdens 
schon ueberleben, bisschen Nachsicht mit einem Neuling ;)

von Christian R. (supachris)


Lesenswert?

Hast du denn das von mir verlinkte Xilinx Dokument durchgearbeitet? Das 
hilft dir auf jeden Fall für das absolut nötiges Basiswissen. Wenn du 
dann spezielle Fragen hast, kannst du gern nachfragen.

von Andi (Gast)


Lesenswert?

Ja hab ich danke, warte im Moment auf mehr INFOs von einem anderen 
Kollegen. Ist immer noch nicht sicher welche Art des Datenaustauschs sie 
verwenden, hab mir sagen lassen vielleicht doch nicht Rocket IO.... wir 
werden sehen, danke fuer das Angebot natuerlich, ich melde mich sobald 
ich was weiss und nicht mehr weiter komme.

von Andi (Gast)


Lesenswert?

Sodala da hab ich doch gleich nochmal eine Frage!

Bin jetzt mal soweit durch, hab das abgeklaert, die Kommunikation laeuft 
ueber Aurora 8B/10B zwischen einem ML405 eval board (FPGA: XC4VFX20) und 
meinem ML507 eval board (FPGA: XC5VFX70T). Hab mir nun einmal mit dem 
Core Generator einen Aurora Single Line 8B/10B Core erzeugt diesen in 
ein neues ISE 12.2 Project eingebunden und wollte dieses nun mit 
Chipscope Pro Analyzer testen, kompilieren funktioniert, runterspielen 
mit Impact auch, wenn ich mich dann allerdings mit Chipscope drauf 
verbinde passiert mal garnichts, ich sehe DATA ports welche alle LOW 
sind bis auf einen , konnt aber noch nicht rausfinden welcher das ist, 
sollte ich nicht etwas sehen wie ein PWM signal, wenigstens vom CLOCK 
signal, oder so welches im Testmodus (Chipscope) von TX nach RX ueber 
den LOOP Modus geschickt wird??

Hab mal das automatisch erstellte .UCF angehaengt, auch hierzu mal eine 
Frage also das erste ist die REFCLK 8ns sind 125 MHZ , das passt so 
moechte ich das auch, die 2 weiteren sind 2 mal USER CLK(8ns = 125 MHZ 
und 16ns = 62.5 MHz) ok fuer was werden die verwendet? Und warum gibt es 
dort noch ein " mgt clock module constraints " welches auf eine 
differential CLK zugreift?? Wie kann ich rausfinden mit wieviel MHz 
diese Clk laeuft?

Nochmal was grundsaetzlich, an sich laueft der Core jetzt schon wenn ich 
mein ISE projekt runterspiele, oder?, das Board sendet und wartet auf 
Daten zum empfangen?

Koennte ich das auch testen indem ich TXDATA an einen Button haenge und 
RXDATA an ein LED, Ausgang und Eingang mit einem echten Kabel verbinde 
und sage wenn RXDATA != 0 dann LED an? Moechte nur testen ob die 
Uebertragung schon lauft und das Board schon sendeet und empfaengt! Oder 
bin ich da noch weit davon entfernt?



######################################################################## 
########
##   ___  ___
##  /   /\/   /
## ___  \  /
## \   \   \/     Vendor : Xilinx
##  \   \         Version : 1.7
##              Application : GTX Wizard
## ___   /\     Filename : rocketio_wrapper_top.ucf
## \   \  /  \
##  \___\/\___\
##
##
## USER CONSTRAINTS FILE FOR MGT WRAPPER EXAMPLE DESIGN
## Generated by Xilinx GTX Transceiver Wizard
##
## Device:  xc5vfx70t
## Package: ff1136

################################## Clock Constraints 
##########################

NET tile0_refclk_i PERIOD = 8.0 ns;



# User Clock Constraints
NET "tile0_txusrclk20_i" TNM_NET = "tile0_txusrclk20_i";
TIMESPEC "TS_tile0_txusrclk20_i" = PERIOD "tile0_txusrclk20_i" 8.0;

NET "tile0_txusrclk0_i" TNM_NET = "tile0_txusrclk0_i";
TIMESPEC "TS_tile0_txusrclk0_i" = PERIOD "tile0_txusrclk0_i" 16.0;




######################## locs for top level ports ######################


#GTX PLLLKDET pins
NET TILE0_PLLLKDET_OUT LOC=AG25;  #LED

######################### mgt clock module constraints 
########################

NET TILE0_REFCLK_PAD_N_IN  LOC=H3;
NET TILE0_REFCLK_PAD_P_IN  LOC=H4;

################################# mgt wrapper constraints 
#####################

##---------- Set placement for tile0_rocketio_wrapper_i/GTX_DUAL ------
INST rocketio_wrapper_i/tile0_rocketio_wrapper_i/gtx_dual_i 
LOC=GTX_DUAL_X0Y5;


Danke bereits im Voraus fuer die Antworten!

Andi

von Klakx (Gast)


Lesenswert?

läuft denn auch schon die simulation?

von Duke Scarring (Gast)


Lesenswert?

Andi schrieb:
> Nochmal was grundsaetzlich, an sich laueft der Core jetzt schon wenn ich
> mein ISE projekt runterspiele, oder?
Möglicherweise schon. Bevor ich sowas auf dem Board teste, schaue ich 
aber in der Simulation nach, ob sich dort was tut. In den allermeisten 
Fällen habe ich nämlich irgendwas falsch konfiguriert, so das es auf dem 
FPGA gar nicht laufen kann. In der Simulation kann ich aber viel 
besser der Ursache auf den Grund gehen.

> Koennte ich das auch testen indem ich TXDATA an einen Button haenge und
> RXDATA an ein LED, Ausgang und Eingang mit einem echten Kabel verbinde
> und sage wenn RXDATA != 0 dann LED an? Moechte nur testen ob die
> Uebertragung schon lauft und das Board schon sendeet und empfaengt!
Könnte funktionieren. Aber genau das (Tastendruck + LED), läßt sich auch 
super einfach simulieren.
Ich würde allerdings zum Testen zwei LFSR nehmen. Eins auf der 
Sendeseite und zum Vergleich eins auf der Empfangsseite. Bei 
Abweichungen wird dann ein Error-Flag (LED) gesetzt.

Duke

von Andi (Gast)


Angehängte Dateien:

Lesenswert?

Also ich hab nun mal die Simulation gestartet, nur den generierten 
RocketIO Core, wie erwartet hab ich einen Haufen 'U' = "uninitialized" 
INPUTs bekommen, nun dachte ich mir ich koennte diese ja einfach am 
Beginn meines Codes mit einem INITIAL Block einfuegen sowas wie das 
hier,

process
begin
   signal_a <= '0';
   signal_b <= "000000";
   .........
   .........
   .........
  wait;
end process;

allerdings habe ich Schwierigkeiten den richtigen Platz zu finden, damit 
meine ich wo auch immer ich bis jetzt diesen Block hingesetzt habe bekam 
ich einen Error, daher nun im Anhang mein rocketIO_wrapper CODE und ein 
Screenshot meines ISIM Fensters damit ihr einen Ueberblick habt, meine 
Frage wo muss ich meine Signale oder eben auch die CLKs initialisieren, 
wo soll ich den Block hinsetzen im Code??? Bzw. sollte ich das so machen 
oder gibt es eine galantere Methode??


Danke fuer den Tip mit den LFSR, gute Idee werd ich sobald die SIM 
laeuft mal ausprobieren!


Danke wieder mal im Voraus,

Andi

von Christian R. (supachris)


Lesenswert?

Wenn du in ISE eine Test Bench erstellst (New Source -> Test Bench) dann 
macht der das automatisch für dich. Jedenfalls alles auf 0. Ob das immer 
sinnvoll ist, musst du selbst herausfinden. Auch für die Clocks wird ein 
Prozess erzeugt. Und du darfst natürlich nicht das RocketIO MOdul selber 
simulieren, sondern die Testbench. Hast du denn überhaupt schon mal was 
mit FPGA und VHDL gemacht? Da fehlen ja die grundlegendsten Kenntnisse.
Und hast du inzwischen mal den User Guide für die Rocket I/Os und das 
von mir lverlinkte Paper durchgelesen?

von Andi (Gast)


Lesenswert?

Hi, danke fuer die schnelle Antwort. Ja hab schon mit FPGA und VHDL 
"gearbeitet", war ein Hobby waehrend eines nicht sehr anstrengenden 
Semesters, jedoch ohne Simulation. Wie bereits weiter oben beschrieben 
waren das sehr sehr einfache Basisprogramme (LED, SWITCH ,.....). Und ja 
habe bereits den User Guide für die Rocket I/Os und das von dir 
verlinkte Paper durchgelesen. Und tut mir natuerlich leid wenn ich eure 
Zeit so in Anspruch nehme, bin wirklich sehr dankbar ueber die Hilfe. :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.