CAN für Spartan6 EDK an AXI

#2227957
Lesenswert?

Funktioniert jetzt. Falls jemand das gleiche vor hat...

In Xilinx EDK 13.1 scheint die Generierung noch fehlerhaft zu sein.
Für Verilog und den Opencores CAN:

ADDR, RNW im Wizard durchrouten lassen. CS wird fehlerhfafterweise nicht 
richtig beschalten, daher muss RdCE und WrCE verwendet werden, selbst 
wenn die user registers abgewählt sind.

Bei Interesse an der CAN Komponente, einfach eine Nachricht an mich.

Gruß Frank
#2457794
Lesenswert?

hallo frank,

ich versuche den can controller von opencores in xilinx edk 10.1 
einzubinden.
Ich möchte den can controller in einem plb slave template instanzieren.
das hab ich im ISE auch schon soweit hinbekommen.

meine frage ist jedoch, wie ich am besten mit dem can controller 
kommuniziere...genauer, wie viele register sollte ich zb verwenden? für 
jedes input signal eines?
und welche signale vom plb kann ich direkt and den can controller 
mappen? (clk und rst hätte ich genommen, kann ich wr und re auch direkt 
mappen?
wie hast du das gelöst?

danke
mfg
martin
#2459332
Lesenswert?

Danke für die schnelle Antwort und die Files!!
Das hilft mir sehr!

Ein paar fragen hätt ich noch, wieso hast du das wishbone und nicht das 
standard interface genommen? oder kann man eh beides verwenden und es 
ist nur geschmackssache?

Und hat bei dir alles einwandfrei funktioniert oder hattest du 
irgendwelche probleme mit dieser methode?

Vielen Dank!!
Martin
#2470974
Lesenswert?

Hallo Frank!

Eine Frage hätt ich noch zu deiner user_logic.

warum verwendest du die Bits 2 - 9 von addressbus?

.wb_adr_i         ( Bus2IP_Addr[ 9:2 ]),

ich möchte doch den offset von meiner Baseaddresse an den CAN Controller 
weitergeben? Meine Baseadresse ist jetzt zb 0xc1200000, sollte ich dann 
nicht die letzten beiden stellen an den controller übergeben?

ich weiß noch nicht genau ob bei mir das LSB links oder rechts steht, da 
bei mir alle Vektoren mit (0 to 31) beschrieben sind, und ich noch nicht 
genau weiß wie das EDK das macht.
Aber müsste ich dann nicht den bereich [0 : 7] bzw. [24 : 31] verwenden?

Danke für deine Hilfe!

lg martin
Gast #2470990
Lesenswert?

Hi Martin

Der sja1000 hat einen 8 Bit Bus. Wenn du jetzt mit einem 32 Bit Bus da 
ankommst dann musst du auch 4 Bytes auf einen Rutsch da rein bringen. 
Dann musst du auch die Byte enable Leitungen beachten usw.
Daher habe ich es mir einfach gemacht und mappe je ein 8 Bit Register 
auf eine 32 Bit Adresse. Dann kann ich auch bestehende Sja1000 Treiber 
fast eins zu eins wieder verwenden.

Wenn du den PLB verwendest dann sind deine Bits andersherum angeordnet, 
wie du schon vermutet hast. Dann also 22 .. 29

Gruß Frank
Gast #2471021
Lesenswert?

Hi Martin

Die Zugriffe sind sowieso immer 32 Bit aligned, daher werden diese 
beiden Leitungen immer "00“ sein, zumindest nach meinem Verständniss. 
Werden einzelne Bytes angesprochen, so sind die Byte enable Leitungen 
nicht alle auf 1.

0x0000 000000AA
0x0004 000000BB
....

Dann sieht bei mir das Speicherlayout so aus. BB ist dann das zweite 
Register innerhalb des Sja1000

Gruß Frank
Gast #2471027
Lesenswert?

Martin S. schrieb:
> verliere ich bei 22 .. 29 nicht die untersten 2 LSBs?
In den 32-Bit-Systemen, mit denen ich bisher zu tun hatte, wurde 
Byteweise adressiert:

Adresse 00: 44 33 22 11
Adresse 01: 44 33 22 11
Adresse 02: 44 33 22 11
Adresse 03: 44 33 22 11

Da wurden die zwei LSB für die Adressierung des Bytes innerhalb des 
32-Bit-Wortes verwendet.

Duke

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren