An Paul:
Ich verstehe deine Idee zur MMU nicht so ganz, speziell die heartbeat LED.
Zur Synchronisierung dachte ich nur an zwei 32-Bit Register im Hub-RAM:
- HubAddrReg als Adresse in RAM
- HubDataReg für die Daten Daten vom RAM
Der Main-Cog schreibt HubAddrReg und liest aus HubDataReg. Der MMU Cog vice versa.
Immer wenn die Daten gelesen wurden, wird das Register auf Null gesetzt.
Dies setzt sowohl für Daten (Instruktionen) als auch Adressen voraus, dass diese nie Null werden. In C ist Null sowieso eine ungültige Speicheradresse.
Die Idee war, dass der MMU Cog nach einem Lesevorgang bereits die nächste Adresse im RAM einliest. Taucht im HubAddrReg diese Adresse auf, kann er sofort reagieren, Im anderen Fall muss er den Wert zur neuen Adresse neu einlesen, seine Pipeline quasi verwerfen.
Damit hätten wir eine zweistufige Pipeline.
Für den MMU-Vorgang dachte ich an zwei Cogs die parallel arbeiten, um die Sache zu beschleunigen.
An yeti:
Die oben genannte Lösung scheint mir relativ leicht zu implementieren. Eine echte Cache Lösung im HUB-RAM scheint mir schwieriger, auch aus persönlicher Erfahrung mit diversen Mikrocontrollern

. Da würde ich lieber die Finger weglassen. Außerdem habe ich Bedenken, dass die zusätzlich notwendige Logik die Sache wieder unnötig ausbremst.
Vorstellbar wäre noch, dass einzelne Schleifen in C mit
markiert werden, Diese Sequenz würde dann im Hub-RAM zwischengespeichert und mehrfach ausgeführt. Macht aber nur bei kurzen Sequenzen Sinn.
Täglich verschwinden Rentner im Internet, weil sie "Alt" + "Entfernen" gleichzeitig drücken...