Közben rájöttem miért mondhatta KYP, hogy az ő mostani kódja nem alkalmas.
Ugye a Nick esetében az van, hogy van egy kb. 14,xxx MHz-es clock domain, tehát a kapuk egy csoportja ezzel a sebességgel dolgzik (memória hozzáférés + képalkotás), illetve van a 4MHz-es clock domain, ahol a Z80-nal kapcsolatos dolgok történnek (I/O port olvasás, Memória hozzáférés átadása).
A probléma, hogy amikor két különböző sebességű clock domaint össze kell hozni, akkor kiegészítő hardvert kell gyártani (HDL kódot írni) az FPGA-n belül. Nem bonyolult a dolog, mert csak kétbemenetű memóráról van szó, csak ugye ehhez is le kell ülni átgondolni, és a végén pedig tesztelni.
KYP esetében van egy 50MHz-es kristály a panelon, tehát adja magát, hogy ennek szorzott/osztott értékéből tud csak dolgozni. Nem is bonyolította, neki a NICK és a Z80 is ezen a sebességen megy, a pixelek kirajzolását pedig megoldotta valahogy ebből.
A valódi EP-nél ez nem lehetséges, mert ZOZO oldalán ez a dokumentum köt minket.
http://enterprise.iko.hu/technical/NICK-Internal-timing-of-VDC-Elite.pdf A 64K video ram dinamikus memória hozzáférese úgy van, hogy először sort és ezután az oszlopot címzi, ami két egymást követő folyamat. Kiolvasással együtt a doku szerit 372 ns egy 8bites (1byte-os) memóriahozzáférés ideje. A clockdomain pedig 1/14MHz = 71ns. Ezzel kell gazdálkodni.
Ha kicseréli az ember a EP alaplapi 64K memóriáját, és a FPGA alá egy SRAM-ot épít 10ns memóriahozzáféréssel, akkor már nem is kell sort és oszlopot címezni, elég csak a címet kiadni, máris megvan az eredmény. A Z80 lassú hozzáférése nem változik, neki kell a kb. 372 ns, de a FPGA nick, a maga 2x372 ns alatt akár (2x372ns)/10ns= 74 hozzáférést is tud engedni az eddigi 2 (!) helyett. Sőt, még azt is meg lehet oldani, hogy ne kelljen a Z80 órajelét késleltetni, hanem azonnal nyújtja neki az adatot. Továbbmegyek, még 8 vagy 12 MHz-es talán még 16MHz-es Z80 procit is ki tudna szolgálni.
SRAM-ból nekem a fiókban éppen 1MByte-os van, tehát ezzel ki is lehet terjesztni a videomemórát 64KB-ról. (Nick 2.0)