Hallo, ich möchte ein Interface von ModPack zum SJA100 (CanController) in VHDL beschreiben, um ihn dann simulieren zu können. Anbei ein Schaltplan. Leider sind Fehler in dem Schaltplan, die ich nicht finde (ich habe mir das ispLever erst letzte Woche installiert). Der Schaltplan lässt sich deshalb nicht automatisch in VHDL übersetzen. Wie sieht der dazugehörige VHDL Code aus ? Vielen Dank Tilman
> SJA100 (CanController) Ja, CAN-Controller isn SJA1000. Das SJA100 ist ein Ferienhaus 6 Personen ;-) Diesen Plan würde ich niemals einfach so in VHDL umsetzen. Was mir schon so beim kurzen Überfliegen auffällt, ist, dass die FFs i11 und i10 Kombinatorik am Clear-Eingang haben. So asynchron beschreibt man heutzutage keine FPGAs. Zudem hat er ja scheinbar auch noch Fehler... Sinnvoller wäre da, sich ein Timing-Diagramm der Eingangssignale und der Ausgangssignale zu malen, und das dann runterzuhacken. Wenns aber nun unbedingt sein muß, dann instatiiere die Komponenten (Und, Oder, Nicht, Mux, Buffer...) händisch und verdrahte sie wie im Schaltplan. das dürfte am einfachsten sein, und du hast das selbe (zwielichtige) Verhalten.
Hallo nochmal anbei die Timingdiagramme vom SJA1000 auf der einen Seite und ModPack auf der anderen. ModPack sollte Ende der 90er standartisiert werden, hat es aber nie über den Draft-Status hinausgeschafft. Er war dazu gedacht, um Module als Piggyback einfach und billig an den VME-Bus anzuschliessen. Das VME-Interface ist auf einem Carrierboard implementiert; die eigentlichen Funktionen (ADC, DAC,DIO, etc) sind auf Piggybacks, die auf das Carrierboard aufgesteckt werden, als "ModPacks" realisiert. Da scheint noch etwas konzeptionelle Arbeit nötig zu sein, bevor man an eine Implementierung in VHDL denken kann. Anforderung: ============ 1) Die Datanleitung vom ModPack (D) und die Addressleitungen vom ModPack (A) sollen auf die Address/Datenleitungen des SJA100 (AD) gemultiplext werden. 2) Die Logik soll keine Zustände speichern (jedenfalls so weit wie das möglich ist). Ich will damit einen Lockup vermeiden, wenn ein Lese/Schreibzugriff nicht vollständig durchgeführt wurde. Sollte zwar von der VME-Seite her nicht passieren -- aber man weiss ja nie. 3) Die Logik sollte auch dann noch funktionieren, wenn AS vor DSL auf low geht. Das kann durch verschiedene Leitungsimpedanzen auf dem VME-Bus passieren. Anmerkung: ========== - AS=LOW bedeutet, dass ein gültiges Adresse auf den Addressleitung (A) liegt - DSL=LOW bedeuetet, dass ein gültiges Datenword auf den Datenleitung D0-D7 liegt (D) Diskussion der Logik: ===================== 1) Die Logik wird durch Reset oder DSL=High, bzw AS=High in den Ausgangszustand zurückgesetzt. 2) Die Addressleitung des Modpacks werden bei AS=Low bei der nächsten Flanke auf AD gemultiplext (ASOUT=High). ASOUT geht auf den AS/ALE des SJA1000 2a) Wenn DSL nicht kommen sollte, wird die Schaltung mit AS=High wieder zurückgesetzt. 3) Falls die Addresse bereits gemultiplext wurde (I11.Q =1), und DSL=LOW ist oder geht, dann wird mit der nächsten Flanke von SYSCLK die Datenleitungen gemultiplext. Abhangig von R/W wird entweder D auf AD, oder AD auf D geschaltet. 4) Falls AS und DSL gleichzeitig auf Low gehen (das sollte der Regelfall sein), wird zuerst durch die FF zuerst der Address bei einer Flanke von SYSCLK gemultiplext, und anschliessend die Daten. Für Verbesserungsvorschläge bin ich mehr als offen. Ist es ferner möglich, auf jede Flanke zu triggern, d.h. auf und absteigend ? SYSCLK läuft nur mit 16 Mhz (t=62,5ns), während der SJA1000 nur einige Nanosekunden braucht. Man könnte damit Wartezeit sparen Danke Tilman
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.