|
|
|||||||||
Il ricevitore di linea seriale attende, dalla linea LINE_IN, un segnale come quello descritto nella figura seguente: Il pacchetto di 10 bit è composto da:
La prossima figura mostra il ricevitore, basato su di una macchina a stati finiti, utilizzata come controllore (un click sulla figura aprirà lo schema nell'editor del d-DcS): Il sistema è composto da un contatore del tempo di bit (Bit Time Counter), un registro a scorrimento (Shift Register), un contatore nel numero di bit (Bit Counter), e un controllore (Controller). Contatore del tempo di bit (Bit Time Counter) Registro a scorrimento (Shift Register) Contatore dei bit (Bit Counter) Controllore (Controller) La frequenza di clock del controllore è pari a 16 volte la velocità di bit del pacchetto ricevuto. Per catturare il bit di start, il controllore campiona, nello stato (a), ad ogni ciclo di clock, il suo ingresso LIN (collegato a LINE_IN). Quando LIN passa a uno, il controllore continua a leggerne il valore, nello stato (b). Se LIN, al raggiungimento della metà del tempo di bit, è ancora a uno, il controllore dichiara valido il bit di start, passando nello stato (c). Altrimenti, se nel frattempo LIN ritorna basso, il controllore ricomincia daccapo, mettendosi nuovamente in attesa di un nuovo bit di start. Si noti che la metà del tempo di bit è segnalata dalla linea TCB, che è generata dal contatore del tempo di bit, inizializzato nello stato (a) al valore di partenza '0110' (per mezzo della linea LD). Come risultato di questa inizializzazione, la prima occorrenza di TCB è generata dopo solo la metà del tempo di bit; successivamente, invece, l'attivazione di TCB avviene allo scadere di un tempo di bit completo (cioè ogni 16 cicli di clock, pari al modulo del contatore, a partire dalla metà del bit di start). Lo stato (c) ha il compito di sincronizzare l'acquisizione dei bit dalla linea seriale ed il loro scorrimento nel registro di ricezione. Infatti, quando TCB è attivato, il controllore si sposta nello stato (d): generando S0 = '1' e S1 = '0', ottiene l'acquisizione del dato presente in quel momento su LINE_IN (tramite InR del componente Univ8) e, allo stesso tempo, lo scorrimento a destra di tutti gli altri bit memorizzati nel registro. Dallo stato (c) si esce, poi, quando è attivato TCN, ossia dopo avere acquisito 8 bit. TCN è infatti generato dal contatore dei bit quando raggiunge lo zero, e cioè quando i bit da ricevere sono terminati. Si osservi che tale contatore è decrementato nello stato (d), attivando EN, ogni volta che un bit è acquisito nel registro a scorrimento. Il prossimo compito dell'algoritmo riguarda la verifica del bit di stop. Nello stato (c), quando TCB è attivato, ma è attivo anche TCN (perchè tutti i bit sono stati ricevuti), invece di acquisire il bit di stop nel registro a scorrimento , il controllore ne testa direttamente il suo valore. Se il bit di stop è zero, il formato del pacchetto si assume valido, ed è generato il segnale RDY, passando nello stato (e) e rimandovi per la durata di un tempo di bit. Altriumenti, se il bit di stop è alto, i bit ricevuti vengono ignorati (non generando il segnaleRDY) e l'algoritmo riparte dallo stato (a). Infine, lo stato di attesa (f) permette di risolvere in modo semplice lo stato di errore dovuto al bit di stop errato: qui il controllore attende che la linea LIN sia tornata bassa, prima di attendere l'arrivo del prossimo bit di start (sebbene questa non sia la soluzione migliore per gestire la ricezione di un bit di stop errato). Il circuito può essere testato con il simulatore del d-DcS, sia in modalità animazione che temporale . Una opportuna sequenza di test è disponibile nella finestra del diagramma temporale.
|