Forum: FPGA, VHDL & Co. BFM PCIe Rootpoint modellieren


von andreas (Gast)


Lesenswert?

Hallo,

ich bin auf der Suche nach einen Bus Functional Model das einen PCIe 
Rootpoint nachstellt. Ziel ist es das ich ein paar Schreib und 
Lesezugriffe auf den Endpoint durchzuführen.

Daher meine Frage kennt jemand ein frei verfügbare BFM und alternativ 
wie aufwendig wäre die Entwicklung eines solchen Modells und wo müsste 
ich am besten anfangen. Altera bietet zwar eine Testbench an, die dort 
verfügbareb Befehle stellen allerdings große Einschränkungen dar.


Vielen Dank für die Antwort!


mfg
andreas

von user (Gast)


Lesenswert?

Die Altera-Testbench hat doch fast alle Möglichkeiten

von andreas (Gast)


Lesenswert?

Hallo,

na mein Problem ist z.B. gerade das die BAR-Adressen automatisch 
konfiguriert werden und ich möchte diese Adressen manuell vergeben. Da 
die Konfigurationsroutine von Altera, dies über einen "Shared Memory" 
macht such ich mich gerade durch die vhdl sourcen um dies manuell zu 
editieren.

Falls jemand eine Idee hat wie man das machen könnte bitte einmal posten


mfg

von Volker (Gast)


Lesenswert?

>na mein Problem ist z.B. gerade das die BAR-Adressen automatisch
>konfiguriert werden

Hast du mittlerweile herausfinden können, wo ma die BAR-Adressen 
einstellen kann? Habe gerade das gleiche Problem.

Volker

von Lupinus Digitalus (Gast)


Lesenswert?

Schau Dir doch mal diese Lösung an:
http://www.trellisys.eu/Downloads/EcpxPCIeBFM.pdf

Den Lattice Core gibt es momentan für kleines Geld:
http://www.latticesemi.com/products/fpga/ecp3/ecp3surgepromotions.cfm

Gruss

Lupi

von Volker (Gast)


Lesenswert?

>Schau Dir doch mal diese Lösung an:
>http://www.trellisys.eu/Downloads/EcpxPCIeBFM.pdf
>Den Lattice Core gibt es momentan für kleines Geld:
>http://www.latticesemi.com/products/fpga/ecp3/ecp3...


Ja für Lattice und Aldec, aber nicht für Altera und Modelsim!

von andreas (Gast)


Lesenswert?

Hallo,

@Volker:
Ich glaube jetzt eine Lösung gefunden zu haben. Und zwar sind die 
Adressen zweimal hinterlegt - einmal im Endpoint und einmal im Rootpoint 
(genauer im Shared Mem). Beide müssen geändert werden. Am besten du 
schaust dir mal den "Configuration space" von dem PCIe-EP an. 
Desweiteern musst du die Routine "ebfm_cfgwr_imm_wait" von Altera 
nutzen. Damit schreibst du die neuen Basis adressen in die Regsiter 10h 
bis 24h. Zur erinerung sind BAR-Adressen vom PCIe. Danach nicht 
vergessen die Änderungen im Shared Mem durchzuführen, sonst klappt keine 
Adressierung über BAR und Offset mehr. Dazu die variable 
"protect_bfm_shmem := 0;". Löst den Schreibschutz für die entsprechenden 
Abschnitte im Shared Mem und dann mit der Procedure "shmem_write" an die 
Scpeicherstellen 10h bis 24h die BAR Adressen ebenfalls aktualisieren. 
Danach den shared Mem wieder Schreibschützen mit "protect_bfm_shmem := 
1;".
Falls noch Unklarheiten bleiben kann ich mal noch einen VHDL-Schnippsel 
hochladen.

viele Grüße
andreas

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.