Forum: FPGA, VHDL & Co. CAN für Spartan6 EDK an AXI


von Frank B. (Gast)


Lesenswert?

Hallo,

hat jemand vielleicht schon den Opencores CAN IP als fertige Komponente 
in einem EDK integriert?

Gruß Frank

von Frank B. (frank_b39)


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

von Martin S. (martin91)


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

von Frank B. (frank_b39)


Angehängte Dateien:

Lesenswert?

Hallo Martin

anbei die Files für die AXI Komponente. User_logic ist is Verilog, da 
auch die CAN sourcen in Verilog sind.

Gruß Frank

von Martin S. (martin91)


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

von Frank B. (frank_b39)


Lesenswert?

Das wishbone kenne ich schon länger, daher habe ich dieses verwendet.
Bisher funktioniert alles wie gewünscht. Einen Treiber habe ich auch 
schnell gefunden und musste dann nur die Zugriffe auf 32-bit umstellen.
Gruß Frank

von Martin S. (martin91)


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

von Frank B. (Gast)


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

von Duke Scarring (Gast)


Lesenswert?

Martin S. schrieb:
> 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.
Die OPB/PLB-Sachen sind big-endian. Damit steht das LSB links.

Duke

von Martin S. (martin91)


Lesenswert?

Danke für die schnelle antworten!!

>Daher habe ich es mir einfach gemacht und mappe je ein 8 Bit Register
>auf eine 32 Bit Adresse.

das würde ich auch so machen, aber warum dann 22 .. 29 und nicht 24 .. 
31?
verliere ich bei 22 .. 29 nicht die untersten 2 LSBs?

Danke
martin

von Frank B. (Gast)


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

von Duke Scarring (Gast)


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

von Martin S. (martin91)


Lesenswert?

Danke für die Hilfe!
Es funktioniert jetzt mit den Bits 24-31!

martin

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.