Hallo Experten 
Zur Zeit besteht das System aus einem Microcontroller(AT91SAM7A2) der über ein FPGA eine PC104 SChnittstelle realisiert. Die SChnittstelle nimmt eine MVB-Buskoppelkarte auf.
Nun gibt es aber kostengünstige Asics, die den MVB-Standard realisieren.
Ich habe momentan folgendes Problem:
Der Asic verwendet ein externes RAM als traffic memory. Die CPU und der externe MVB Master müssen zugriff auf das traffic memory haben.
Der MVB-Master hat oberste Priorität und kann einen Speicherzugriff der CPU auf das TM unterbrechen.
Nun das eigentliche Problem: Der verwendete MC hat keinen eigenen RDY Eingang (der MVB-ASIC schon) und somit bemerkt der MC auch nicht wenn er durch den MVB-Master im Speicherzugriff unterbrochen wird. Der MC ließt trotzdem munter die Daten aus oder versucht die Daten zu schreiben.
Zur kurzen Erläuterung: Lesezugriff vom MC auf den TM (über den MVB-ASIC): MC setzt RD und CS, legt dann Adresse raus und ließt nach einer festgelegten Anzahl von Waitstates die Daten ein (und nicht wenn das Rdy signal vom ASic das ok gibt). Wenn nun der MVB-Master auch einen Zugriff auf den Speicher macht (und zwar während den oben genannten Waitstates, dann kommt es zur Kollision).
Es ist ausgeschlossen, einen neuen MC mit Rdy eingang einzubauen. (das Engineering hierfür würde den Zeitrahmen sprengen)
Eine Idee wäre vielleicht, ein externes FPGA anzuordnen, dass zwischen MC und MVB-Asic geschalten ist, und das Rdy signal vom Asic auswertet. Eine integrierte Logik könnte dann über 2 Buszugriffe eine Leseoperation ausführen.
Meine eigentliche Frage: Gibt es für diesen Zweck einen fertigen IC?
Also der IC sollte die Speicherarbitrierung von 2 MC’s mit unterschiedlicher Priorität vornehmen (Master hat Vorrang) und ohne einen dedizierten Rdy Eingang an den MC’s auskommen.
Bin mal auf eure Meinung gespannt 
mfG,
Bernd
Falsches Brett, oder?
Wäre da nicht ein Brett im Bereich ‚Hardware‘ richtiger…?
MOD: richtiges Brett
Hallo Fragewurm,
Wäre da nicht ein Brett im Bereich ‚Hardware‘ richtiger…?
Nein, er ist hier mit seinem Problem schon richtig, steht auch so in der Brettbeschreibung.
MfG Peter(TOO)
Hallo Bernd,
Wie Zeitkritisch sind diese Zugriffe und wie oft kommen solche Kollisionen vor ?
Und wie sind die Zugriffe im Code verteilt ?
Ich frage mich gerade ob du eine Möglichkeit hast, im falle einer Kollision, über den NMI etwas zu machen.
Eine andere Methode ist ein FlipFlop zusetzen.
Man löscht das FlipFlop vor dem Zugriff und checkt es danach. Wurde es gesetzt, war der Speicherzugriff für die Katz und muss wiederholt werden.
Wird z.B. bei RTC so gehandhabt, da tritt dieser Fall aber nur jede Sekunde einmal auf.
MfG Peter(TOO)
Hallo Bernd,
zur Synchronisierung von 2 asynchronen Speicherzugriffen wird ein Arbiter benötigt, der jeweils für den einen oder anderen Zugriff entscheidet. Die einzige Möglichkeit, das so ein Arbiter ohne RDY-Eingang arbeitet, ist ein vielfach schnelleres Ram, das es dem Arbiter erlaubt, innerhalb der externen Zykluszeit notfalls beide Zugriffe auszuführen - natürlich muss er dazu die externen in schnelle eigene Zyklen umsetzen, der Arbiter ist also eine komplexe Aufgabe.
Ausserdem gibt es Dual-Port-Rams, die gleichzeitiges Schreiben und Lesen von 2 Interfaces erlauben, wie das intern ermöglicht wird, kann dem Anwender egal sein.
Gruss Reinhard
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Eine andere Methode ist ein FlipFlop zusetzen.
Man löscht das FlipFlop vor dem Zugriff und checkt es danach.
Wurde es gesetzt, war der Speicherzugriff für die Katz und
muss wiederholt werden.
Dieses Prinzip könnte tatsächlich klappen!
Vielen Dank für den Vorschlag - ich werd mir das im Detail überlegen.
lG,
Bernd
zur Synchronisierung von 2 asynchronen Speicherzugriffen wird
ein Arbiter benötigt, der jeweils für den einen oder anderen
Zugriff entscheidet. Die einzige Möglichkeit, das so ein
Arbiter ohne RDY-Eingang arbeitet, ist ein vielfach
schnelleres Ram, das es dem Arbiter erlaubt, innerhalb der
externen Zykluszeit notfalls beide Zugriffe auszuführen -
natürlich muss er dazu die externen in schnelle eigene Zyklen
umsetzen, der Arbiter ist also eine komplexe Aufgabe.
Der Arbiter ist im Asic integriert und ist für diese Vorgehensweise leider nicht ausgelegt.
Ausserdem gibt es Dual-Port-Rams, die gleichzeitiges Schreiben
und Lesen von 2 Interfaces erlauben, wie das intern ermöglicht
wird, kann dem Anwender egal sein.
Die Idee ist gut aber leider funktioniert das in meinem Fall nicht, da der Microcontroller nicht nur auf das exterene RAM zugreift sondern auch auf die Register des Asics und somit müssten auch die internen Register dieses Chips „dual-port-fähig“ sein.
Trotzdem danke für die Vorschläge!
lG,
Bernd
Ich habe mir das Problem nun genauer angesehen und will das nun detailierter schildern:
Der MC hat macht einen Buszugriff über den parallelen Bus einfach nur durch Waitstates. D.H er legt zuerst die Adresse raus, wartet eine definiterte Zeit und ließt/schreibt dann auf den Datenbus.
Nun kann der Zugriff durch den MVB-Master eine Verzögerung des Lese/Schreibzyklus auslösen und somit hab ich ohne RDY-Eingang am MC schon ein Problem (beim lesevorgang denkt der MC zb, dass die Daten bereits valide sind und ließt diese in den internen Speicher obwohl die Daten noch nciht valide sind, da der Vorgang durch einen Zugriff des MVB-Masters verlängert wurde).
Folgende wichtige Ausgänge stellt der MVB-ASic zur Verfügung:
– Data-Latch_Enable
– Adress-LAtch-Enable
– RDY-Signal (ist immer standardmäßig auf Low-Pegel (auch bei einem Zugriff durch den MVB-Master), wird auf log. 1 gesetzt wenn ein Zugriff durch den MC erfolgt (mittels CS)… sobald die Daten valide sind (und das kann unterschiedlich lange dauern - je anchdem ob der Master unterbrochen hat) wird der RDY-Ausgang des Asics wieder auf 0 gesetzt.
– RD, WR, CS
Wichtig: der Asic hat einen integrierten Arbiter der bei einem Master-Zugriff einfach das RDY-Signal so lange auf 1 lässt bis der MC wieder an der Reihe ist, und bei der fallenden Flanke von RDY valide Daten vorfindet.
Ich habe zwar schon einige Ideen, aber mit keiner bin ich richtig zufrieden.
vielleicht fällt dir/euch noch etwas ein 
lG und danke im vorraus,
Bernd
Hallo Bernd,
Das hilft jetzt so alles nicht viel, dazu müsste man das ganze Timing kennen.
„Sieht“ der MC in jedem Fall einmal die Daten, wärend er darauf wartet? Dann könnte ein Latch helfen.
Übrigens, kennst du das Wort „gültig“ ? Wird an Stelle von valide benutzt.
MfG Peter(TOO)
Hallo Peter,
Das hilft jetzt so alles nicht viel, dazu müsste man das ganze
Timing kennen.
Ja, da hast du wohl recht. Ich denke, es macht wohl wenig Sinn, ohne Angabe der Zeitverläufe und des Schaltplans eine Lösung zu erhoffen.
„Sieht“ der MC in jedem Fall einmal die Daten, wärend er
darauf wartet? Dann könnte ein Latch helfen.
Ich werde 2 Latches für Daten und Adresse verwenden - das stand schon immer fest.
Übrigens, kennst du das Wort „gültig“ ? Wird an Stelle von
valide benutzt.
Übrigends, kennst du das Wort „Zeitverhalten“ ? Wird an Stelle von Timing benutzt.
Ja, mir gefällt es auch nicht wenn die englischen Begriffe mit deutschen vermischt werden aber über viele Begriffe zerbreche ich mir dann gar nicht mehr den Kopf. Download, Website, usw… die Begriffe wirst du doch auch verwenden und trotzdem ist das nicht konsistent mit der deutschen Sprache. Also wozu die Aufregung? 
Aber mal vorweg: Lassen wir lieber eine Diskussion diesbezüglich - wär ja auch Offtopic (argghhh ich hab den Begriff „Offtopic“ verwendet *g*)
mfG,
Bernd
Hallo Bernd,
Das hilft jetzt so alles nicht viel, dazu müsste man das ganze
Timing kennen.
Ja, da hast du wohl recht. Ich denke, es macht wohl wenig
Sinn, ohne Angabe der Zeitverläufe und des Schaltplans eine
Lösung zu erhoffen.
„Sieht“ der MC in jedem Fall einmal die Daten, wärend er
darauf wartet? Dann könnte ein Latch helfen.
Ich werde 2 Latches für Daten und Adresse verwenden - das
stand schon immer fest.
Und wie sollst jetzt weiter gehen ??
MfG Peter(TOO)
Und wie sollst jetzt weiter gehen ??
Ich bedanke mich erstmal für die wertvollen Tipps und versuche, anhand der Timings zu überprüfen ob die von mir angedachten Lösungen realisierbar sind. Wenn ich dann noch auf Probleme stoße, würd ich gern hier weiterdiskutieren.
mfG,
Bernd