Hallo,
wie lange dauert es in etwa, bis ein FPGA von einem externen ROM seinen
Initialzustand geladen hat?
Ich moechte eine PC-Erweiterungskarte bauen, die schon direkt beim
Einschalten in der Lage ist, via Memory Mapping Daten in den Adressraum
einzublenden. Klassischerweise nimmt man dazu ja ein paralleles ROM und
knueppert das mit etwas Logik an den Bus. Da ich aber mehr
Funktionalitaet brauche (dafuer das FPGA) war meine Ueberlegung, ob ich
nicht auch das Memory Mapping ueber das FPGA erschlagen kann....nur muss
das Teil ja selber erst initialisiert werden. Wenn es zu spaet fertig
ist, dann kommt das Memory Mapping zu spaet und der PC wird das ROM
nicht erkennen :/
Danke fuer ein paar Kommentare!
Joerg
Datenblätter der Hersteller.
Ich kann nur für Actel ProAsic FPGAs sprechen, und die sind schnell
genug oben, um am Rechner zB als PCI-Device erkannt zu werden, dazu
gehören ja auch direkt am Start Zugriffe auf den Configspace des
Pci-Cores. Sind aber Flashbasierte FPGAs, die beim Start nicht erst
geladen werden müssen.
Das Open Graphics Project hatte genau damit mal Probleme, weil deren
FPGA nicht schnell genug oben war. Evtl findest du bei denen Info:
www.opengraphics.org/. Hab hier aber schon gesagt bekommen dass das
nicht mehr zwangsläufig ein Problem ist.
Ansonsten bist du mit den Flashbasierten Sachen auf der Sicheren Seite.
Manche FPGAs haben Flash drin, ansonsten CPLDs (die sind fast immer
Flash-basiert). Da brauchst du dann außerdem kein externes config-ROM
mehr.
Bietet PCI keine Möglichkeit den Start des Rechners oder zumindest die
PCI-Erkennung zu verzögern, bis die Karte initialisiert ist? Ich kann
mir irgendwie sonst nicht vorstellen, dass alle anderen Karten am Markt
mit jeder Rechnergeschwindigkeit klarkommen.
Je nach Komplexizität dauert das. Zum Beispiel ein Spartan 3E-250 gut
zur Hälfte befüllt, per Master Serial aus dem Platform Flash: etwa 2,5
Sekunden. Ein Virtex 4-LX40, auch etwa zur Hälfte voll, gleiche
Bootmethode etwa 4,5 Sekunden.
CoolRunner2 512 volles Design benötigt immerhin nur knapp 300ms etwa.
Gibts an dem Bus keine Busy oder Ready Leitung?
Nimm einem flashbasierten FPGA von Actel oder Lattice, und du hast keine
Probleme. Die sind wie dafür gemacht, XT Bus klingt auch nicht nach
extremen Timingforderungen (womit der Actel zB seine Probleme hat).
Vorteil des Lattice ist, dass der Konfigurationsspeicher flashbasiert
ist, die Logik jedoch wie bei Xilinx SRAM-basiert. Das heisst, er lässt
ähnliche Taktfrequenzen zu wie Xilinx/Altera, ist kommt aber ohne
externen Konfigurationsspeicher aus und ist schneller hochgefahren.
Vorteile der Actel FPGAs liegen allgemein im bedeutend niedrigerem
Strombedarf und in der Resistenz gegen Fehler durch elektromagnetische
Strahlung.
Die flash basierten FPGAs sind schon arg winzig, letztlich haengt die
ganze Sache davon ab welchen "Bus" die Karte nutzen soll und was fuer
ein FPGA es sein soll.
Aber im Endeffekt ist es keinerlei Problem einen FPGA schnell genug zu
konfigurieren, um sicher zu gehen dass es schnell genug ist sollte man
aber nicht seriell konfigurieren.
Und natuerlich sollte man in der Spec nachschlagen wieviel Zeit man hat.
(Natuerlich wird die Spec von den Boards nicht richtig implementiert.)
Ich weiß ja nicht, was du mit winzig meinst, aber ich finde 3Mio Gatter
und 75.000 Register beim ProAsic3E-3000 nicht so wenig. Hier gilt das
Prinzip, man wähle den Baustein nach Analyse der Aufgabe. Da die meisten
jedoch noch nie mit etwas anderem ausser Xilinx oder Altera in Berührung
gekommen sind, ist die Sicht dementsprechend eingeschränkt.
Für die oben genannte Aufgabe wäre ein ProAsic von Actel so ziemlich
ideal. Wenn man natürlich Zeit hat, sich mit etweigen Problemen bei der
Konfiguration rumzuschlagen, kann man auch nen Spartan3 oder so nehmen.
ProAsic3E-3000 ,ich kann jetzt noch genau abschaetzen wie gross der
Actel ist, aber ich seh als Nachteil, dass die Teile nichtmal SERDESe
haben und
nur 504 kBit RAM.
Also weit weg von einem grossen high performance FPGA, wie es sie von
Altera und Xilinx gibt. (Lattice sind nur auf Papier oder im Webbrowser
toll)
Aber vielleicht reicht der Platz ja.
Es gibt scheinbar einige Nutzer von PCIe mit Spartan3, dafuer gibt es
auch Eval Boards. Der Interessante Punkt ist, dass man einen externen
PHY fuer den Spartan3 braucht, weil er keine integrierten SERDESe hat.
Dieser PHY implementiert (wenn ich das richtig verstanden habe) dann
auch low level Teile von PCIe und gibt einem extra Zeit beim starten.
Also bei PCIe hat man 100µs.
Ich weiss allerdings nicht ob der PCIe core von xilinx ordentlich
funktioniert oder ob man timing Probleme hat.
@Christian R.:
Der Füllgrad des FPGAs sollte eigentlich nichts mit der
Konfigurationszeit zu tun haben. Die Bitfiles haben (im Prinzip) immer
die gleiche Größe und nicht genutzte Blöcke müssen mit Null
initialisiert werden.
Das stimmt natürlich nur solange, wie die Konfigurationsdaten nicht
komprimiert werden.
Rick