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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.