Ja das geht. Ich baue daran an mehreren Projekten wie VGA Grafikkarte
oder Propeller Clock. Ich benutz einen 10ns asynchronen SRAM, der CPLD
wird mit 32MHz getaktet was 32ns Periode und 16ns pro Flanke ergibt.
Der CPLD multiplext nun zwei Ein-/Ausgangsbusse auf den Bus des SRAMs.
Bei 1 am Takt Bus 1 und bei 0 am Takt Bus 2. Abwechselnd können also
beide Geräte seuqentiell gemultiplext mit max. 32Mhz auf den SRAM
zugreifen. Es entstehen dabei aber Unterschiede zu richtigen
Dual-Port-SRAMs. Es gibt nämlich keine richtige Synchronisierng bei dem
Konzept bei Zugriffen beider Geräte auf die gleichen Speicherzellen.
Immer das Gerät 1 ist einen Halbtakt früher beim Lesen der gleichen
Speicherzelle dran wie das Gerät 2. Schreibt Gerät 2 also die gleiche
Speicherzelle so hat Geräte 1 noch den alten Inhalt geladen. Usw. usw.
Bei Dual-Port-SRAM's wird dies verhindert, man hat zusätzliche
Steuerleitungen die solche Konflikte anzeigen und einige
Dual-Port-SRAM's haben sogar spezielle Speicherbereiche die die
Imnplementierung eines sauberen "Lockings" ermöglichen.
Nungut, bei mir geht esd hauptsächlich darum das drr AVR als Master
sowohl Lesend wie auch Schreibend auf den SRAM Zugriff hat (ohne
Waitstates). Parallel dazu hat der CPLD selber lesenden Zugriff,
sozusagen liest er den Bildschirmspeicher aus und wandelt das in die
entsprechenden Signale um.
Beim AVR ist das XMEM Interface ebenfalls asynchron. Deshalb ergibt
sich bei 16Mhz Takt des AVR's ein minimal Takt des CPLD's von 32MHz
(wenn er Flankenbasiert auf das SRAM zugreift). Innerhalb eines 16 MHz
Taktes = ~WR Signalperiode ist ca 62ns wird der CPLD also mindestens 1
mal einen kompletten Zugriff für den AVR auf den SRAM durchführen
können. Im besten Falle sind es aber zwei Zugriffe. D.h. der CPLD-SRAM
Takt muß 4 mal höher sein als der Takt der angeschlossenen Geräte, wenn
sie ebenfalls ansynchron zugreifen wollen.
Bei 32MHz ergibt das also 15.625ns Zugriffe auf das SRAM. Asynchrone
SRAM's haben keine Nachlaufzeiten, d.h. sie schalten sofort bei
steigenden Flanken an CE/OE/WR die Datenleitungen auf Z. Das ist
wichtig. Die maximale Ansprechzeit beträgt 10ns bei der die
Addressleitungen gültig sein müssen. +5 ns um die Datenleitungen vom
High-Z runterzubekommen. Ergibt maximal 15ns Timeslots die ein 10ns
SRAM hergeben kann. Man ist also mit 32MHz für den CPLD schon fast am
Ende der Fahnenstange wenn man 10ns SRAM's benutzen möchte (schnellere
sind schweineteuer). Als CPLD nehme ich 5ns Typen.
Gruß Hagen