Forum: FPGA, VHDL & Co. altera pcie ip core DMA Read/write


von martin s. (Gast)


Lesenswert?

Hallo,

ich habe einen Pcie hard ip core generiert mit quartus v12.1 und Qsys 
welcher über avalon MM interface verfügt.
das ganze läuft auch auf einem board und der ipcore wird erkannt und ich 
kann auf die bar0 schreiben/lesen unter linux.

ich habe nicht alles klicki/klacki mit qsys realisiert sondern ich habe 
eine eigene logik geschrieben für die avalon mm interfaces.

wenn ich nun einen DMA zugriff starten möchte passiert genau gar nix. da 
sowohl in der simulation als auch im betrieb der ip core das 
readdatavalid nicht setzt.

nun habe ich gelesen das der ip core das readdatavalid deshalb nicht 
setzt weil die address nicht stimmt.

mein erster lösungsansatz war es von der statischen addresstabelle auf 
eine dynamische addresstabelle zu wechseln und dann die addresse mittels 
dem cra interface einzustellen.

leider brachte diese änderung auch keine änderung bei dem readdatavalid.

auch in der simulation ist komisch das ich bei readdata "undefined" 
bekomme.

mittlerweile habe ich glaub ich die ref manuals schon mehrere male 
durchgelesen und die example projects von altera durchgeackert.. nichts 
gefunden.

gibt es einen trick bei der ganzen sache?

die softwareabteilung meinte jedenfalls bezüglich treiber, dass der so 
passt.. und die meinen mein projekt sei schuld.

nun bin ich echt ratlos wo der fehler sein kann ..
da mein design die daten schaufelt, jedoch der ipcore nicht darauf 
reagiert. und der treiber hat auch genug mem freigeschaufelt.

gibt es irgendein register oder eine einstellung die man unbedingt haben 
muss?

mfg
martin

von Andreas B. (andreas_b77)


Lesenswert?

martin s. schrieb:
> gibt es einen trick bei der ganzen sache?

QSys verwenden vielleicht? Wenn ich das richtig verstehe, hast du hier 
den ganzen Avalon Interconnect von Hand gebastelt, da ist vielleicht ein 
Fehler drin.

Die andere Möglichkeit dir mir einfällt wäre, dass dein Treiber das 
Busmastering für die Karte nicht aktiviert. Damit dürfte sich der PCIe 
Core weigern, irgendwelche derartigen Zugriffe zu durchzuführen.

von thomas s. (Gast)


Lesenswert?

also unter lspci kommt folgender text (als betriebssystem verwende ich 
CENTOS) :
1
[root@testpc design]# lspci -vvv -s01:00.0
2
01:00.0 Non-VGA unclassified device: Altera Corporation Device 0004 (rev 01)
3
        Subsystem: Altera Corporation Device 0004
4
        Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
5
        Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
6
        Latency: 0, Cache Line Size: 64 bytes
7
        Interrupt: pin A routed to IRQ 16
8
        Region 0: Memory at fd9f8000 (32-bit, non-prefetchable) [size=32K]
9
        Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
10
                Address: 0000000000000000  Data: 0000
11
        Capabilities: [78] Power Management version 3
12
                Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
13
                Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
14
        Capabilities: [80] Express (v1) Endpoint, MSI 00
15
                DevCap: MaxPayload 256 bytes, PhantFunc 0, Latency L0s <64ns, L1 <1us
16
                        ExtTag- AttnBtn- AttnInd- PwrInd- RBE+ FLReset-
17
                DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
18
                        RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+
19
                        MaxPayload 128 bytes, MaxReadReq 512 bytes
20
                DevSta: CorrErr+ UncorrErr- FatalErr- UnsuppReq- AuxPwr- TransPend-
21
                LnkCap: Port #1, Speed 2.5GT/s, Width x1, ASPM L0s, Latency L0 unlimited, L1 unlimited
22
                        ClockPM- Surprise- LLActRep- BwNot-
23
                LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk+
24
                        ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
25
                LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
26
        Capabilities: [100 v1] Virtual Channel
27
                Caps:   LPEVC=0 RefClk=100ns PATEntryBits=1
28
                Arb:    Fixed+ WRR32- WRR64- WRR128-
29
                Ctrl:   ArbSelect=Fixed
30
                Status: InProgress-
31
                VC0:    Caps:   PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
32
                        Arb:    Fixed- WRR32- WRR64- WRR128- TWRR128- WRR256-
33
                        Ctrl:   Enable+ ID=0 ArbSelect=Fixed TC/VC=ff
34
                        Status: NegoPending- InProgress-
35
        Kernel driver in use: syn1588nic

Andreas B. schrieb:
> QSys verwenden vielleicht? Wenn ich das richtig verstehe, hast du hier
> den ganzen Avalon Interconnect von Hand gebastelt, da ist vielleicht ein
> Fehler drin.

ich habe eine eigene pipeline geschrieben die in der simulation sowie pc 
auf pcie express funktioniert. ich kann über ein konsolen programm daten 
über bar0 auf bestimmte addressen in ein Dualport memory schreiben sowie 
auch in 5 register.

mit den registern möchte ich den DMA zugriff steuern und damit 
addressoffsets angeben auf die ich in den PC schreiben/lesen will.

in der simulation funktioniert das auch bis auf wie gesagt das 
readdatavalid

von Andreas B. (andreas_b77)


Lesenswert?

thomas s. schrieb:
> also unter lspci kommt folgender text

Nicht wirklich relevant. Alle PCI(e) Devices haben erst mal Busmastering 
deaktiviert. Der Treiber muss beim Initialisieren pci_set_master() 
aufrufen – am Besten erst nachdem sichergestellt ist, dass das Device in 
einem sauberen Zustand ist und nicht gleich an irgendwelche Adressen 
schreiben würde.

Falls das nicht daran liegt weiß ich jetzt auch nicht was es sein 
könnte. Ohne QSys habe ich das Ding nie angeflanscht.

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.