Prova A

Esercizio 1 (20 punti). Si deve costruire un circuito il cui compito è di riconoscere un messaggio in arrivo su un canale (linea) seriale. Ogni messaggio è costituito da una stringa di 16 bit preceduti dalla stringa "111111", che è il "codice di inzio messaggio".

Il circuito da progettare deve:

Questo processo di monitoraggio del bus, riconoscimento di un messaggio, e sua memorizzazione, deve avvenire in modo ciclico, ovvero, il riconoscitore di stringa deve operare finché non riconosce la stringa, quindi deve riprendere il proprio compito solo dopo la memorizzazione dei 16 bit.

NOTE e SUGGERIMENTI:

(esempio (è solo un esempio!!!): c1: abilita la scrittura sul registro R1)

 

Esercizio 2 (10 punti). Progettare il circuito combinatorio minimo che implementa l’espressione booleana:

(x+y)(x+z)

Si usino solo circuiti NAND.

 

Soluzioni

Esercizio 2

Osservazione: l'esercizio richiedeva di ottenere il circuito minimo. L'espressione minimizzata poteva essere ottenuta o applicando le regole dell'algebra booleana (in particolare, xx=x e x+1=1), oppure ricavando la tabella di verità e quindi l'espressione booleana minima con il metodo di Karnaugh. Quindi, applicando DeMorgan, si ottiene l'espressione booleana in forma NAND.

Esercizio 1

Il funzionamento del circuito è schematizzato come segue.

Figura 1

L’input seriale x viene esaminato da un automa (A1) che riconosce la stringa "111111". Questo automa ha 7 stati ma è di banale progettazione.

La Figura 2 mostra il grafo dell'automa.

L'automa ha due input (i1,i2): il primo è l'ingresso x della linea seriale, il secondo è un segnale di controllo, c1, che abilita o disabilita il riconoscimento. Tale segnale sarà zero durante la fase di memorizzazione dei 16 bit. Durante tale periodo, l'automa A1 resterà "bloccato" nello stato S6

Nota: In figura non sono evidenziate(per una migliore leggibilità del grafo) le transizioni nello stato S0 a partire dagli stati S1…S5, quando l'input seriale x =0. In figura, X ha il solito significato "don't care".

L'uscita di A1 , che chiamiamo c2, coincide con l'evento "stringa riconosciuta", che fa partire il secondo automa.

Il progetto formale del secondo automa, A2, richiede più tempo di una sua descrizione intuitiva.

A1 deve restare in uno stato di riposo finché non rileva la transizione ad "1" del segnale c2, che per A1 è un output ma per A2 è un INPUT.

Durante il periodo in cui c2=1, occorre: attivare un contatore che conti i 16 bit, attivare la memorizzazione dei 16 bit su un registro ad ingresso seriale (si può ipotizzare che la lettura sia parallea, dunque usare un SIPO), ed infine "bloccare" A1 nello stato S6. Quest'ultimo effetto può essere ottenuto facendo sì che la transizione ad 1 di c2 provochi la generazione di un segnale c1 attivo "basso" (ovvero = 0). Si noti che c1 è un output per A2 ed un input per A1, come mostrato in Figura 2. Quanto al contatore e al registro, si tratta solo di regolarne l'attivazione-disattivazione.

Per attivare-disattivare contatore e registro possiamo usare il segnale c2 come "interruttore" del clock (vedi Figura 3). Il registro riceve in ingresso l'input seriale x , e memorizza un bit del messaggio ad ogni fronte di clock. Contemporanemante, il contatore si incrementa. L' AND delle uscite del contatore viene usato per il set-reset di un FF, la cui uscita è il segnale c1. Finché il conteggio non raggiunge il valore 16, c1 è 0, dunque l'automa A1 resta bloccato nello stato S6, c2 permane alto, ed il segnale di clock per il contatore ed il registro continua a "passare". Quando il conteggio è ultimato, c1 diventa alto, dunque c2 torna basso (si veda la Figura 2) , ed il controllo ritorna all'automa A1, che ricomincia a monitorare la stringa di ingresso x, mentre A2 torna nello stato di riposo (contatore e registro non ricevono più il segnale di clock, "bloccato" da c2=0).

 

 

 

Per riassumere:

c1 = fine conteggio

c2 = stringa riconosciuta