Forum: FPGA, VHDL & Co. BAR mit PCIe Devices


von Raya N. (rayan)


Lesenswert?

Hallo zusammen,

Ich soll 11 Registersätze (4KB/Register)in meinem FPGA für PCIe 
festlegen:
- 6 UARTs
- 2 CANs
- GPIO
- LED
- SRAM

Nun lautet meine Frage:
Bei ALTERA PCIe Core gibt es BAR 0 bis 5 aber ich brauche bis zu 11 
Registersätze?
Wie kann am bestens die Aufteilung schaffen?

Grüße

von Thomas R. (Firma: abaxor engineering) (abaxor)


Lesenswert?

Am einfachsten ist es, wenn du einen BAR0 Bereich von 64 kiB fest legst. 
Innerhabl des BAR0-Bereichs dekodierst du dir deine Register-Sätze von 
je 4kiB.

Ich habe einen BAR-Bereich für die Steuerung des PCI-Devices, also zum 
Setzen bestimmter Parameter die für alle Schnittstellen gleich sind. 
U.U. gibt es so etwas bei dir nicht.

Der BAR1 Bereich dient dann zum Austausch der Prozessdaten. PCIe ist 
aber nichts was man mal so nebenbei macht. Da du schon bei den 
einfachsten Sachen Probleme hast, solltest du dir eine Schulung gönnen.


Tom

von Matthias (Gast)


Lesenswert?

Leg doch die UARTs und die CANs jeweils gemeinsam in einen Bereich. Das 
macht auch logisch Sinn.

von Raya N. (rayan)


Lesenswert?

Vielen Dank für deine Hinweise,

Ich habe keine Erfahrung mit FPGA-PCIe und es kein passendes Buch dafür 
gibt.
Ich dachte dass man keinen Adressdecoder bei PCIe braucht.
Bitest du vielleicht eine Schulung dafür an oder kannst du mir 
Unterlagen oder Bücher empfehlen?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Raya Ngi schrieb:
> Ich habe keine Erfahrung mit FPGA-PCIe
Das ist wie wenn du sagst:
"ich habe keine Erfahrung mit dem Ableiten von Funktionen."

Das ist klar, denn vor dem Differenzieren mußt du erst mal die 
Grundrechenarten Addition...Division lernen. Und die "Grundrechenart" 
von PCIe ist PCI. Lies also erst mal ein PCI-Buch durch, denn dort ist 
dann die ganze Geschichte mit der Adressraumaufteilung hinreichend klar 
beschrieben.

> Ich dachte dass man keinen Adressdecoder bei PCIe braucht.
Du hast nicht GEDACHT, du hast ANGENOMMEN.
Natürlich macht es für deine sinple Anwendung Sinn, nur dir 1 Adressraum 
(1 BAR) von (mindestens) 64kB vom System zuweisen zu lassen. Dort passen 
alle deine Register hinein.

> Bücher?
http://www.amazon.de/PCI-System-Architecture-Mindshare-PC/dp/0201309742/ref=pd_sim_b_1
http://www.amazon.de/PCI-Express-System-Architecture-Mindshare/dp/0321156307/ref=pd_bxgy_eb_text_b

von Thomas R. (Firma: abaxor engineering) (abaxor)


Lesenswert?

Raya Ngi schrieb:
> Ich dachte dass man keinen Adressdecoder bei PCIe braucht.

Ganz im Gegenteil, du musst nicht nur Adressen dekodieren, zusätzlich 
sind auch noch die notwendigen Completions zu erstellen. PCIe erledigt 
man mal nicht im vorbeigehen.

Tom

von Keller T. (fabito)


Lesenswert?

Hallo,

Ich habe mit folgenden zu überwinden:
Einsatz: Lattice ECP3

Ich habe im BAR0= 2 MB Nonprefectchable folgende Komponente:
SRAM = 1 MB
6x UARTs
CAN
4xLEDs
INPUTs/OUTPUTs
---------------------
03:00.0 Communication controller: Lattice Semiconductor Corporation 
Device ec30 (rev 01)
        Subsystem: Lattice Semiconductor Corporation Device 3010
        Flags: bus master, fast devsel, latency 0, IRQ 17
        Memory at a0000000 (32-bit, non-prefetchable) [size=2M]
        Capabilities: [50] Power Management version 3
        Capabilities: [70] MSI: Enable- Count=1/8 Maskable- 64bit+
        Capabilities: [90] Express Endpoint, MSI 00
        Capabilities: [100] Device Serial Number 00-00-00-00-00-00-00-00
        Kernel driver in use: ls4000fpga
00: 04 12 30 ec 07 00 10 00 01 00 80 07 10 00 00 00
------------------------
Alles hat gut funktioniert. Nur es ist mir nicht gelungen Modemleitungen 
zu testen.
Dann wollte ich setserial und danach Minicom benutzen um das Ziel zu 
erreichen.
Aber es is mir gefallen dass, UART ein I/O Port dafür braucht.

Frage 1:
Ich möchte 6xUARTs als I/O Map in separat BAR0 festlegen und alle andere 
als Memory Map auf BAR1.
Wo soll ich der Unterschied zwischen Zugriff auf BAR0 oder BAR1 
definieren?

Oder hat jemand ein besseren Vorschlag ?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Warum kaperst du mit deiner Frage alle möglichen Threads?
Mach einen neuen Thread auf, stell alle Informationen zur Verfügung:
Welche Cores? Woher?
Was sind das für UARTS?

keller thomas schrieb:
> Wo soll ich der Unterschied zwischen Zugriff auf BAR0 oder BAR1
> definieren?
Es gibt im "Receive TLP Interface" Ausgänge, die das Ansprechen eines 
BARs anzeigen: rx_bar_hit[6:0]

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.