On Saturday, February 03, 2007 7:24 PM [GMT+1], Paolo Ferraris <pieffe8@xxxxxxxxx> wrote:
Cosi` ad occhio, temo che una serie di OUTI consecutive non lascino abbastanza tempo. Basterebbe 1T-state in piu`, probabilmente. Faro` sicuramente una prova!Direi anche io. Siamo troppo al limite. Se anche funzionasse su uno Spectrum/Badaloc potrebbe essere "di culo" e magari su un'altro potrebbe fallire.
E infatti non ha funzionato. Per essere sicuro di non aver commesso qualche errore banale, ho verificato il corretto funzionamento a 14MHz della routine costituita dai 16 INI (che purtroppo e` risultata ok).
Si potrebbe mettere un NOP dopo ogni OUTI (20 T-states invece dei 21 del OTIR) ma il guadagno in termine di velocita' diventerebbe ridicolo.
Certo che ne pensi una piu` del diavolo! Se non altro, se tu dici che non c'e' modo di avere I/O cadenziato sui 17/18T-states, allora sono sicuro che NON C'E`. ...e se io mettessi 1 wait state sugli I/O eseguiti sulla porta SPI? :-) C'e' anche da dire un altra cosa: sullo spectrum il problema sarebberisolvibile dotando l'interfaccia di un proprio oscillatore piu` veloce, anche se
l'operazione sarebbe molto piu` complessa di quanto possa sembrare perche`il clock Z80 serve per sincronizzare il latch dei dati. Magari un multiplo...
Sul badaloc piu` di 21MHz temo mi creerebbero qualche grattacapo... il clock principale e` 85MHz e quello a 21 viene ottenuto mediante divisione /4 (21.25MHz)... /3 non si puo` fare perche` la cpld dovrebbe commutare anche sull'altro fronte. Dovrei portarlo a 42.5MHz, eccedendo pero` in tal modo la frequenza massima accettabile per la SD card, che e` 20MHz (SPI_CLK diventerebbe 21.25MHz).
Poco male, comunque...
Un vero peccato. L'ultimo incremento di velocita` l'ho ottenuto quando ho alzato la frequenza di clock della cpld I/O (prima era 14MHz fissi), arrivando agli attuali 1011KB/sec @21MHz (OTIR/INIR). Col tuo trucco avrei potuto raggiungere i 25fps di video :-)
Ciao!