Hallo, ich starte eben autoditaktisch mich mit PCIe zu beschäftigen und hätte eine Frage an PCIe Experten, die den XILINX PCIe V2.0 IP Core z.b. für Virtex oder Kintex nutzen. Wenn ich das richtig sehe, bauen die IP Cores selbständig die unterste Ebene der PCIe Verbindung (Physical Layer) auf, ohne dass irgend eine SW involviert ist. Meine Frage ist nun: wenn man ein minimales Design nur zum Test erzeugt, z.B. eine PCIe Lane mit RX,TX ,REFCLK, PWRGD, WAKE und PRSNT als Endpoint für einen PCIe Slot im PV, was muss man denn dem IP Core im FPGA minimal "anbieten" dass die physical Layer Verbindung aufgebaut wird ? Ich meine würde der passende Anschluss (jetzt Xilinx spezifisch) bei pipe_mmcm_rst_n sys_clk sys_rst_n reichen ? Was würde noch fehlen ? Klar kann man damit noch nichts anfangen, aber wenn die unterste Verbindung schon mal aufgebaut würde, müsste man dann doch schon im PCI Tree des PCs den Endpoint finden oder liege ich da total daneben? Ich beanke mich schon mal für sachdienliche Hinweise.
ja genau die Karte sollte sich sogar schon am Betriebsystem anmelden.
Vivado macht dir alles fertig, sagst nur wo sind PCIe lanes, wo PERST und wo REFCLK, der rest wird generiert.
Hallo, ich denke es wird nicht ganz so einfach gehen wie in Deinem OP Text. Es wird auch eine minimale Configuration Space benötigt (Mindestens ein BAR und eine PM capability Structure, ggfs auch eine PCIe Capability Structure. IDs, Classcode etc sind zunächst nicht so wichtig). Sonst wird Dein Endpoint nicht enummeriert. Mit PCI Tree meinst Du vermutlich so etwas wie - lspci -vvv unter Linux - Systemsteuerung oder Tool unter Windows Wenn nur das physikalische verdrahtet ist, sagt das System irgendwann "Hmph, schaut eh nach Messgerät aus" und entweder schaltet den Port wieder ab oder geht in den Compliance Test Mode damit Du ein Augendiagram messen kannst. Viel Erfolg, Charles
Danke sehr für die Antworten, klingt schon mal nicht schlecht. Dann liege ich zunächst mal nicht ganz falsch. Ja, ich benutze Vivado und es ist schon klar, zum Generieren des Cores muss man eigentlich alles fertig angeben (BAR etc.), das habe ich mir schon angesehen. Ich will aber zunächst nur den Teil nach "aussen" nutzen, das AXI Zeugs würde dann später kommen. Mir geht es darum (zur Selbstmotivation) so bald wie möglich eine Reaktion am PC zu sehen, bevor man dann weitermacht mit dem "Rest" Es gibt Tools , in meinem Fall für Windows, die den PCI Tree darstellen mit allen Parametern die vom Endpoint kommen. Da würde ich dann die Einstellungen wie z.B. Hersteller ID ect. die man bei der Coregenerierung angeben muss erwarten , wenn die physikalische Verbindung zustande kommt. Vielen Dank nochmals für die Unterstützung.
Meines Wissens werden da auch Files für ein Beispeilprojekt generiert, bzw. kann man sich ein solches Projekt generieren lassen. Rechte Maustaste auf den Core und dann Generate Example Project. Da ist schon mal das wichtgste drin. Ansonsten gibts zu den Boards mit PCIe immer fertige Beispiele dazu.
ich versuche es noch einmal vivado starten, IP catatlog PCIe core generieren warten bis alle Dateien fertig sind dann Beispiel design offnen PCIe lane, PERST pin und REF clock festlegen bitgen flashgen PCIe kart in linux oder win pc rein wird erkannt ehrlich, mehrmals so getan, genau so geht das ist natürlich ein fertiges Demo Beispiel nur aber für Este Test ok, wenn es so geht dann: viado starten, neues IPI block desing kostenloses microblaze AXI memory mapped PCIe und lost geht spass..
Danke, super. So dachte ich mir das auch. Werde in Kürze mal den ersten Versuch starten. Eine möglicherweise dumme Frage zum Prinzip habe ich aber noch. Die Pinbelegung des PCIe Slots die man findet, gibt diese die Signale des Motherboards an, so wie sie von der Bridge oder vom Root Complex kommen? Ich meine also, es muss idealerweise z.B. B14(HSoP0) mit HSiP0 B15(HSoN0) mit HSiN0 vom zu steckenden Board und A16(HSiP0) mit HSoP0 A17(HSiN0) mit HSoN0 vom zu steckenden Board verbunden sein. Ist das so richtig? Vielen Dank.
Jetzt ist aber nicht verständlich was du willst. In ersten mail war es deutlich: XILINX bei Xilinx gibt es namen wie: HSxPx nicht. Das in und out is natürlich immer problem, aber wenn du fertiges FPGA board hast, dann sollte es schon richtig sein. Wenn du falsch zuweisungen macht, dann meckern die tools so oder so.
Das stimmt was Xilinx angeht, aber ich habe inzwischen das http://de.wikipedia.org/wiki/PCI_Express gefunden und auch anderweitig und da gibt es diese Bezeichnung schon. Hier sieht man auch die Richtungen. Das habe dann wohl richtig interpretiert. Mir geht es hier grundsätzlich ums Verständnis was damit gemeint ist. Danke für die ausdauernde Unterstützung.
Jetzt muss ich doch noch was nachfragen. Kann man wirklich mit WAKE (sofern man es bedienen kann), das Root-port dazu bewegen, die Verbindung ab und dann die Trainingssequenz wieder anzustoßen um die Verbindung wieder aufzubauen ? So oft man will in dem anfangs beschriebenen Status nur zum Test? Danke
aus Deinem Text verstehe ich leider nicht was Du insgesamt vor hast. Bzgl. WAKE wage ich zu bezweifeln, dass man das einfach beliebig toggeln kann. Ein PCI(e) Endpoint hat 4 Device Powerstates D0, D1, D2, D3. D0 ist vollfunktionsfähig, D3 ist ausgeschaltet wobei ein D3-hot definiert ist, der z.b. für wake-on-fax/wake-on-lan verwendet werden kann. D0 und D3 muessen implementiert werden (logisch irgendwie), D1 D2 sind optional. PCI(e) kennt auch einen Power Management Event (PME) das bedeutet, dass ein EP vom System in einen anderen Powerzustand versetzt werden möchte. Was passiert hängt natürlich vom aktuellen EP Powerzustand sowie der Gerätetreiber ab. WAKE macht eigentlich nur Sinn wenn der EP im D3 (jedenfalls > D0) ist. Folge sollte sein, dass der EP periodisch PM_PME Messages an das System schickt. Wenn der EP ein PME_TURN_OFF Message erhält muss er das senden von PM_PME unterbinden. Irgendwann wird das System dann das Device von D3 nach D0 versetzen. Hierbei erfolgt natürlich ein Link-Training beim Durchgang durch den Recovery State. Das war jetzt die Vogel-Perspektive. Damit das alles funktioniert muss natürlich die PM Capability Structure auch richtig konfiguriert werden und zwar in der Regel zumindest Teilweise vom Gerätetreiber. Ich vermute sehr stark, dass der EP im D0 gar keinen PM_PME sendet wenn Du einfach am WAKE# toggelst. m.E. wäre das nicht sinnvoll. Wenn Du aus welchem Grund auch immer Training Sequenzen auf Knopfdruck sehen willst, wäre mein Empfehlung, dass Du ein 16550 Kompatiblen UART an Deinem EP hängst und diesen unter Windows mit dem standard serial.sys Treiber verbindest. Wenn Du das richtig machst bekommst Du automatisch einen Com Port zugeteilt. Die Microsft Com-Port Spec verlangt, dass ein nicht benutztes Com Port nach D3 geschickt wird. Mit einer Applikation, die den Com Port auf und zu macht muesstest Du bei jedem Übergang einen Recovery Durchgang auslösen (zuminest von D3 nach D0). Hier werden Training Sequenzen ausgetauscht. Es gibt übrigens im Link-Control Register der PCIe Capability Structure ein 'Retrain Link' bit. Nur, zumindest nach PCIe Spec steht dieses Bit einem EP nicht zur Verfügung. Viel Erfolg, Charles
pcieIP schrieb: > Jetzt muss ich doch noch was nachfragen. > > Kann man wirklich mit WAKE (sofern man es bedienen kann), das > Root-port dazu bewegen, die Verbindung ab und dann die > Trainingssequenz wieder anzustoßen um die Verbindung > wieder aufzubauen ? So oft man will in dem anfangs beschriebenen > Status nur zum Test? > Mit WAKE# geht da gar nichts. WAKE# ist normalerweise nicht mit dem Rootport verbunden, sondern direkt mit dem Power Management Controller des Systems. Und zwar typischerweise von allen Slots gemeinsam um das System einzuschalten (z.B. bei Wake On Lan, USB Keyboard etc). Einfach am WAKE# zu ziehen ist aber nicht erlaubt, denn das System will anschliessend feststellen wer es war. Was du vermutlich suchst ist Hotplugging, da sieht es allerdings düster aus. Mir ist bislang nur ein Mainboard untergekommen das es supported, und das war ein Intel Developmentboard in den Anfangszeiten von PCIe. Das heisst natürlich nicht dass es heute keine gibt, und ich habe auch nicht danach gesucht.
Danke euch beiden für die Klarstellung. In meiner naiven Vorstellen dachte ich das könnte man so machen. Dann habe ich meine spärliche Doku die ich gefunden haben wohl nicht richtig verstanden. Vielen Dank nochmals.
Wenn es dir nur darum geht, den FPGA neu laden zu können ohne das System neu zu starten, da gibt es eine Möglichkeit. Vorrausgesetzt dass sich an der Definition des Configiration Space nichts geändert hat, reicht es im Gerätemanager (oder devcon utililty) den Treiber neu zu starten (d.h. disable/enable).
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.