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