00 19/12/2007 19:55
Tentativo...
E’ davvero dura trovare un’ altra soluzione dopo aver visto quella del Prof!!!
Ma sinceramente, in un primo momento sarei partito senza i due registri, salvo poi, come mi è successo, rendermi conto della partenza falsa. E avendo un po’ di tempo, mi sono cimentato a trovare una soluzione, ma più di questo “obbrobrio” non ho saputo fare.
Spero si capisca qualcosa, almeno l’ idea di fondo.

1) si potrebbe eliminare un registro, pilotando R verso X,Y con due tristate abilitati da altrettanti segnali di controllo.

2) La macchina sequenziale è sincronizzata su SYSCLK, quindi dovrò inserire un segnale di CLR che mi resetta il Counter nel momento in cui faccio entrare X,Y nel modulo.

Dopo il segnale Start azzero il Counter e abilito OEPx,y in modo da partire subito con il primo confronto aspettando 32 SYSCLK sullo stato 1;

se R=0 mi restituisce il valore Y, abilitando OEPy
se R=1 mi restituisce Z=1, abilitando XYE, RYE
se R<>0,1 per sostituire X,Y con Y,R abilito OEPy che mi entra in X, e contemporaneamente prelevo R e la posto in Y abilitando RYE.
Qui i problemi per pilotare R e Y sono tanti, non so se è giusto il meccanismo dei tristate che ho pensato.
Nello stato 2 aspetto i 32 CK e rifaccio la verifica, ma stavolta se R<>0,1 devo stare attento a pilotare la Y “passata” su X (quindi prima abilito RXE) e R verso Y “presente” (quindi abilito XYE e lo mando in uscita con RYE).
N.B. Il problema è che sul modulo si presenta prima la X e poi la Y, quindi per funzionare si dovrebbe poter azionare il Modulo quando ad esempio attivo CLR per azzerare il counter e il modulo deve poter sovrascrivere in entrata i dati se ancora non è abilitato ad eseguire le operazioni.


------------------------------------------------------------------

P.S.
Nella soluzione del prof. La transizione A->C con R=1 non dovrebbe abilitare OER e non OEP, così da mandare in uscita R=1 e non Y?
[Modificato da michele78. 19/12/2007 19:59]
M.C.