Forum: FPGA, VHDL & Co. FPGA updaten via PCI-Bus


von Andreas Starzer (Gast)


Lesenswert?

Hallo!

Ich habe vor, einen FPGA mit einem PCI-Bus an ein CPU-Modul anzubinden.
Dieser soll somit der CPU komfortabel weitere Peripherie via PIC zur 
Verfügung stellen.
Die Platine/FPGA ist also NUR über den PCI-Bus mit derm CPU-Modul 
verbunden. (Also kein JTAG oder sonstige Möglichkeiten den FPGA zu 
programmieren)

Ich habe bereits nur in Erfahrung bringen können, dass es 
"wahrscheinlich" möglich ist einen (bestimmten) Lattice-FPGA (der den 
Flash integriert hat) über PCI upzudaten.

Nun zu meiner Frage: Hat irgendjemand Erfahrung/Tipps/Lösungen/..., ob 
es überhaupt möglich ist bzw. wie man den FPGA updaten könnte und ob es 
z.B. ein Lattice sein muss oder ob es ev. auch mit 1x externen Flash mit 
z.B. Altera möglich wäre.

Bin für jede Information dankbar!

Andreas

von Morin (Gast)


Lesenswert?

Der PCI-Teil deiner Karte kann nicht vom FPGA bedient werden. Dieser 
braucht nämlich ca. 1/2 Sekunde beim Hochfahren um Programmiert zu 
werden, und in dieser Zeit muss der PCI-Kram schon laufen, da er vom 
Mainboard schon angesprochen wird. Damit hatten schon andere Projekte 
Probleme, ich glaub das war beim "Open Graphics Project".

Deshalb wirst du eine Spezialschaltung für das PCI-Interface brauchen, 
z.B. auf Basis eines einfachen CPLD (diese sind ja sofort programmiert, 
weil die Programmierung im internen Flash steht). Mit etwas Geschick 
müsstest du es hinkriegen, dass dieses PCI-Interface auch einen 
beliebigen FPGA (nicht nur deinen speziell rausgesuchten) über den PCI 
programmieren kann.

Einen separaten Flash-Speicher auf der Karte brauchst du dann (dafür) 
nicht mehr sondern kannst alles vom Host aus programmieren.

von Mathi (Gast)


Lesenswert?

Du brauchst keinen CPLD für einen PCI-Master/Target. Ein FPGA ist 
schnell genug konfiguriert. Selber schon gemacht.
Soll das FPGA denn als Master/Target fungieren? Wenn ja, brauchst Du 
aber zumindest ein Konfigurationsflash. Wenn der Rechner dann 
hochgefahren ist, könntest Du einen speziellen Zugriff auf Dein 
PCI-Target machen und das Flash neu schreiben. Allerdings musst Du dann 
sowieso den Rechner neu starten damit das FPGA konfiguriert und 
enumeriert werden kann. Es gibt zwar die Möglichkeit PCI-geräte 
hotplugeable zu machen, habe ich aber noch nie versucht.
Du spielst wohl auf den Lattice XP bzw. XP2 an. Die haben die 
Möglichkeit die Konfiguration zur Laufzeit zu wechseln. Allerdings muss 
das PCI-Subsystem trotzdem konfiguriert werden, was einen neustart 
erfordert.

von Andreas Starzer (Gast)


Lesenswert?

Danke für die raschen Antworten, haben mir schon weitergeholfen.
Der FPGA soll anfangs nur als Target dienen (um die Sache fürn Anfang 
einfacher zu halten).
Aber in weiterer Folge ev. auch als Master.

Versuche gerade mir ein Bild zu machen, welchen PCI Core ich verwenden 
soll.
Hersteller-spezifische (z.B. durch Wizards fertig generierte), oder 
vllt. doch gleich die opencores pci-bridge mit definiertem WB-interace 
(aber leider in verilog), oder eine dritte Lösung hätt ich auch noch bei 
der Hand welche die Daten einfach in einer FIFO zur Verfügung stellt 
(nur Target verfügbar).

Alles hat irgendwie Vor-&Nachteile. Vllt könntet ihr mir auch hier eure 
Meinung sagen.

Ich persönlich würde gleich zur PCI-bridge von opencores tendieren, aber 
ich hab noch nicht rausgefunden wie schwierig es ist (bzw. welche 
Komplikationen es verursachen könnte) den Verilog-Code in die 
VHDL-Umgebung einzubinden.

PS: Hohe Geschwindigkeiten sind nicht die Priorität, eher die 
Flexibilität z.B. durch einfachen Austausch von Komponenten -> 
definiertes FPGA-internes Interface (z.B. Wishbone).

von Gast (Gast)


Lesenswert?

Verilog sollte sich in das VHDL-Modell einbinden lassen, zumindest wird 
dies schon von vielen Tools unterstuetzt. Bisher sind mir das nur 
Probleme bei der case-sensistivitaet bewusst, also Verilog unterscheidet 
Gross- und Kleinschreibung, VHDL nicht und somit kann VHDL evtl. manche 
Verilog-Signale nicht unterscheiden.

von Mathi (Gast)


Lesenswert?

Ich verwende den PCI-Master/Target von Lattice mit einem ECP2. Das 
funktioniert soweit auch ganz gut. Gab allerdings einige Fallstricke zu 
überwinden. Wie die anderen Cores sind, kann ich nicht beurteilen.
Das schöne an dem Master-Target core ist, das Target und Master 
"getrennt" sind. D.h. man kann vollkommen unabhängig vom Master erstmal 
ein Target bauen und dann den Master hinterher. Als Synthesetool kommt 
für Mixed-mode bei Lattice Mentors Precision synthesis zum Einsatz. Man 
kann ganz einfach die Verilog-Komponenten wie VHDL-Komponenten 
instanziieren.

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.