1 Considerare il circuito descritto dal seguente listato VERILOG
Transcript
1 Considerare il circuito descritto dal seguente listato VERILOG
Esercizio 1a - 1 Considerare il circuito descritto dal seguente listato VERILOG. Individuare un hazard (se ne sono presenti piu` di uno, basta indicarne uno), dire per quali ingressi e transizione avviene, scrivere un testbench che evidenzi solamente l’hazard di interesse introducendo un opportuno ritardo nel circuito (solo due segnali che non cambiano ed uno che varia). Esercizio 1a - 2 Considerare il circuito descritto dal seguente listato VERILOG. Individuare un hazard (se ne sono presenti piu` di uno, basta indicarne uno), dire per quali ingressi e transizione avviene, scrivere un testbench che evidenzi solamente l’hazard di interesse introducendo un opportuno ritardo nel circuito (solo due segnali che non cambiano ed uno che varia). module mlog(z,a,b,c); input a,b,c; output z; not n1(na,a); not n2(nb,b); not n3(nc,c); nor n4(x1,na,b); nor n5(x2,nb,na); nor n6(x3,b,c); nor n7(z,x1,x2,x3); endmodule module mlog(z,a,b,c); input a,b,c; output z; not n1(na,a); not n2(nb,b); not n3(nc,c); nor n4(x1,c,b); nor n5(x2,c,na); nor n6(x3,na,nc); nor n7(z,x1,x2,x3); endmodule Soluzione Mappa di karnaugh Soluzione Mappa di karnaugh BC A 0 1 00 0 0 01 BC 11 10 A 0 0 0 0 1 00 0 0 01 11 10 0 0 0 L’hazard considerato si ha per A=…1....... B=….0/1.... C=…0 o 1...... (scrivere 0/1 o una freccia per l’ingresso in transizione) L’hazard considerato si ha per A=…..1..... B=….0 o 1.... C=…0/1....... (scrivere 0/1 o una freccia per l’ingresso in transizione) Introduco un ritardo di….......#1....................... nella porta …...........n2................. Introduco un ritardo di…..........#1.................... nella porta …............n3................ Il testbench module tb; reg a,b,c; mlog dut(z,a,b,c); initial begin a=1; b=0; c=1; // o c=0 #10 b=1; #10 b=0; end endmodule Il testbench module tb; reg a,b,c; mlog dut(z,a,b,c); initial begin a=1; b=0; c=0; // o b=1 #10 c=1; #10 c=0; end endmodule Esercizio 1a -3 Considerare il circuito descritto dal seguente listato VERILOG. Individuare un hazard (se ne sono presenti piu` di uno, basta indicarne uno), dire per quali ingressi e transizione avviene, scrivere un testbench che evidenzi solamente l’hazard di interesse introducendo un opportuno ritardo nel circuito (solo due segnali che non cambiano ed uno che varia). Esercizio 1a - 4 Considerare il circuito descritto dal seguente listato VERILOG. Individuare un hazard (se ne sono presenti piu` di uno, basta indicarne uno), dire per quali ingressi e transizione avviene, scrivere un testbench che evidenzi solamente l’hazard di interesse introducendo un opportuno ritardo nel circuito (solo due segnali che non cambiano ed uno che varia). module mlog(z,a,b,c); input a,b,c; output z; not n1(na,a); not n2(nb,b); not n3(nc,c); nand n4(x1,c,b); nand n5(x2,c,na); nand n6(x3,na,nc); nand n7(z,x1,x2,x3); endmodule module mlog(z,a,b,c); input a,b,c; output z; not n1(na,a); not n2(nb,b); not n3(nc,c); nand n4(x1,na,b); nand n5(x2,nb,na); nand n6(x3,b,c); nand n7(z,x1,x2,x3); endmodule Soluzione Mappa di karnaugh Soluzione Mappa di karnaugh BC A 0 1 00 1 01 1 BC 11 1 1 10 1 A 0 1 00 1 01 1 11 1 1 10 1 L’hazard considerato si ha per A=….0...... B=….0 o 1.... C=…..0/1..... (scrivere 0/1 o una freccia per l’ingresso in transizione) L’hazard considerato si ha per A=…..0..... B=…0/1..... C=…..0 o 1..... (scrivere 0/1 o una freccia per l’ingresso in transizione) Introduco un ritardo di…..........#1.................... nella porta …...............n3............. Introduco un ritardo di…..........#1.................... nella porta …......n2...................... Il testbench module tb; reg a,b,c; mlog dut(z,a,b,c); initial begin a=0; b=1; c=0; //o b=0 #10 c=1; #10 c=0; end endmodule Il testbench module tb; reg a,b,c; mlog dut(z,a,b,c); initial begin a=0; b=0; c=1; //o c=0; #10 b=1; #10 b=0; end endmodule Esercizio 1b - 1 La macchina a stati, descritta dalla seguente tabella dello stato successivo, si comporta di fatto come un contatore di fronti. Dopo un certo numero di fronti (con EN a 1) mette la sua unica uscita Z a 1. La macchina e` dotata di un ingresso RESET attivo alto che la riporta allo stato A. Tale macchina e` stata implementata con l’assegnamento degli stati come da tabella delle transizioni (vedi tra parentesi) e realizzando le reti combinatorie in accordo con gli implicanti evidenziati nelle mappe di Karnaugh. Per un errore di progettazione del circuito stampato che la realizza c’e` una interferenza che fa si che quando la macchina si trova nello stato 101, si attiva (con un piccolo ritardo) il clear (attivo basso) del flip-flop che ha come uscita Q2. Completare la descrizione VERILOG strutturale, i moduli richiamati nelle parti gia` disponibili nella soluzione, non sono da progettare (notare che tra l’altro e` da completare l’assign che simula l’errore, manca la logica per gestire il reset e per ricavare Z). Dire in poche righe come si evidenzia il malfunzionamento e che influenza ha sulla funzionalita` svolta dalla macchina. Scrivere un testbench che permetta di evidenziare una situazione di malfunzionamento e tracciare i grafici che si ottengono in uscita (solo uno zoom sulla zona dove si manifesta l’errore). Si consiglia di ragionare sugli stati non sui codici binari per quanto possibile (cioe` non mettersi a fare i grafici dei singoli bit). EN EN Z Z 0 1 Q2Q1Q0 (S) 0 1 A A B 0 000 (A) 000 100 0 B B C 0 100 (B) 100 101 0 C C D 0 101 (C) 101 110 0 D D E 0 110 (D) 110 111 0 E E A 1 111 (E) 111 000 1 S* Q2*Q1*Q0* Tabella dello stato successivo Tabella delle transizioni Verilog strutturale module macstati(ck,EN,Z,RESET); input EN,ck,RESET; output Z; logicaD2 xd2(D2,Q0,Q1,Q2,EN) ; //simula la logica D1 logicaD1 xd1(D1,Q0,Q1,Q2,EN) ; //simula la logica D1 logicaD0 xd0(D0,Q0,Q1,Q2,EN) ; //simula la logica D0 flipflopD dd0(ck,D0,Q0,clr_l) ; flipflopD dd1(ck,D1,Q1,clr_l) ; flipflopD dd2(ck,D2,Q2,clr2_l) ; assign #1 clr2_l= clr_l& (q2’|q1|q0’);//COMPLETARE! simula il disturbo assign clr_l=~RESET; assign z= q1& q0& q2; Soluzione Z EN A B C D E 0 A B C D E 1 B C D E A XF XG XH S* 0 0 0 0 1 Z EN Q2Q1Q0 (S) 000 (A) 100 (B) 101 (C) 110 (D) 111 (E) 0 000 100 101 110 111 1 100 101 110 111 000 0 0 0 0 1 001 (XF) 010 (XG) 011 (XH) 100 110 0 endmodule Descrizione degli effetti del malfunzionamento Quando avviene il malfunzionamento il contenuto del flip-flop diventa 001 (XF). Se EN vale 1 non ci si accorge del difetto perche` prosegue in 110 che e` lo stesso stato in cui andrebbe comunque. Se EN vale 0 passa a 100 e se torna EN a 1 reincontra l’errore, si allunga di diversi passi il numero di colpi di clock che servono per avere l’uscita uguale a 1. Q2*Q1*Q0* Testbench module tb; reg ck, EN, RESET; macstati (ck, EN, Z, RESET); Esercizio 1b - 2 initial begin RESET=0; EN=0; #7 RESET=1; #12 RESET=0; #10 EN=1 #200 EN=0 ; #10 $stop ; end La macchina a stati, descritta dalla seguente tabella dello stato successivo, si comporta di fatto come un contatore di fronti. Dopo un certo numero di fronti (con EN a 1) mette la sua unica uscita Z a 1. La macchina e` dotata di un ingresso RESET attivo alto che la riporta allo stato A. Tale macchina e` stata implementata con l’assegnamento degli stati come da tabella delle transizioni (vedi tra parentesi) e realizzando le reti combinatorie in accordo con gli implicanti evidenziati nelle mappe di Karnaugh. Per un errore di progettazione del circuito stampato che la realizza c’e` una interferenza che fa si che quando la macchina si trova nello stato 110, si attiva (con un piccolo ritardo) il clear (attivo alto) del flip-flop che ha come uscita Q2. Completare la descrizione VERILOG strutturale, i moduli richiamati nelle parti gia` disponibili nella soluzione, non sono da progettare (notare che tra l’altro e` da completare l’assign che simula l’errore, manca la logica per gestire il reset e per ricavare Z). Dire in poche righe come si evidenzia il malfunzionamento e che influenza ha sulla funzionalita` svolta dalla macchina. Scrivere un testbench che permetta di evidenziare una situazione di malfunzionamento e tracciare i grafici che si ottengono in uscita (solo uno zoom sulla zona dove si manifesta l’errore). Si consiglia di ragionare sugli stati non sui codici binari per quanto possibile (cioe` non mettersi a fare i grafici dei singoli bit). always #5 ck=~ck; endmodule EN 0 A B C D E A B C D E Grafici CK Z 1 B C D E A 0 0 0 0 1 Q2Q1Q0 (S) 000 (A) 100 (B) 101 (C) 110 (D) 111 (E) S* Tabella dello stato successivo EN EN 0 1 000 100 100 101 101 110 110 111 111 000 Q2*Q1*Q0* Tabella delle transizioni Z 0 0 0 0 1 STATO 100 001 110 111 000 100 Z Soluzione EN A B C D E 0 A B C D E XF XG XH S* EN Z 1 B C D E A 0 0 0 0 1 Z Q2Q1Q0 (S) 000 (A) 100 (B) 101 (C) 110 (D) 111 (E) 0 000 100 101 110 111 1 100 101 110 111 000 0 0 0 0 1 001 (XF) 010 (XG) 011 (XH) 110 100 0 Q2*Q1*Q0* Verilog strutturale module macstati(ck,EN,Z,RESET); input EN,ck,RESET; output Z; logicaD2 xd2(D2,Q0,Q1,Q2,EN) ; //simula la logica D1 logicaD1 xd1(D1,Q0,Q1,Q2,EN) ; //simula la logica D1 logicaD0 xd0(D0,Q0,Q1,Q2,EN) ; //simula la logica D0 flipflopD dd0(ck,D0,Q0,clr) ; flipflopD dd1(ck,D1,Q1,clr) ; flipflopD dd2(ck,D2,Q2,clr2) ; assign #1 clr2= clr |(q2 & q1 & q0’).;//COMPLETARE! simula il disturbo assign clr=RESET; assign z=q1& q0; initial begin RESET=0; EN=0; #7 RESET=1; #12 RESET=0; #10 EN=1 #200 EN=0 ; #10 $stop ; end always #5 ck=~ck; endmodule Grafici CK EN STATO 100 Z endmodule Descrizione degli effetti del malfunzionamento Quando avviene il malfunzionamento il contenuto del flip-flop diventa 010 (XG). Se EN vale 0 non ci si accorge del difetto perche` prosegue in 110 che e` lo stesso stato in cui andrebbe comunque. Se EN vale 1 passa a 100 e se si innesca un loop per il quale non si arrivera` mai ad avere l’uscita uguale a 1. Testbench module tb; reg ck, EN, RESET; macstati (ck, EN, Z, RESET); 101 010 100 101 010 Esercizio 1b - 3 La macchina a stati, descritta dalla seguente tabella dello stato successivo, si comporta di fatto come un contatore di fronti. Dopo un certo numero di fronti (con EN a 1) mette la sua unica uscita Z a 1.. La macchina e` dotata di un ingresso RESET_L attivo basso che la riporta allo stato A. Tale macchina e` stata implementata con l’assegnamento degli stati come da tabella delle transizioni (vedi tra parentesi) e realizzando le reti combinatorie in accordo con gli implicanti evidenziati nelle mappe di Karnaugh. Per un errore di progettazione del circuito stampato che la realizza c’e` una interferenza che fa si che quando la macchina si trova nello stato 101, si attiva (con un piccolo ritardo) il clear (attivo alto) del flip-flop che ha come uscita Q2. Completare la descrizione VERILOG strutturale, i moduli richiamati nelle parti gia` disponibili nella soluzione, non sono da progettare (notare che tra l’altro e` da completare l’assign che simula l’errore, manca la logica per gestire il reset e per ricavare Z). Dire in poche righe come si evidenzia il malfunzionamento e che influenza ha sulla funzionalita` svolta dalla macchina. Scrivere un testbench che permetta di evidenziare una situazione di malfunzionamento e tracciare i grafici che si ottengono in uscita (solo uno zoom sulla zona dove si manifesta l’errore). Si consiglia di ragionare sugli stati non sui codici binari per quanto possibile (cioe` non mettersi a fare i grafici dei singoli bit). EN EN Z Z 0 1 Q2Q1Q0 (S) 0 1 A A B 0 000 (A) 000 100 0 B B C 0 100 (B) 100 101 0 C C D 0 101 (C) 101 110 0 D D E 0 110 (D) 110 111 0 E E A 1 111 (E) 111 000 1 S* Q2*Q1*Q0* Tabella dello stato successivo Tabella delle transizioni i Verilog strutturale module macstati(ck,EN,Z,RESET_L); input EN,ck,RESET_L; output Z; logicaD2 xd2(D2,Q0,Q1,Q2,EN) ; //simula la logica D1 logicaD1 xd1(D1,Q0,Q1,Q2,EN) ; //simula la logica D1 logicaD0 xd0(D0,Q0,Q1,Q2,EN) ; //simula la logica D0 flipflopD dd0(ck,D0,Q0,clr) ; flipflopD dd1(ck,D1,Q1,clr) ; flipflopD dd2(ck,D2,Q2,clr2) ; assign #1 clr2= clr | (q2 & q1’& q0);//COMPLETARE! simula il disturbo assign z= q1 & q0; assign clr=~RESET_L ; Soluzione Z EN A B C D E 0 A B C D E 1 B C D E A XF XG XH S* 0 0 0 0 1 Z EN Q2Q1Q0 (S) 000 (A) 100 (B) 101 (C) 110 (D) 111 (E) 0 000 100 101 110 111 1 100 101 110 111 000 0 0 0 0 1 001 (XF) 010 (XG) 011 (XH) 001 110 0 endmodule Descrizione degli effetti del malfunzionamento Quando avviene il malfunzionamento il contenuto del flip-flop diventa 001 (XF). Se EN vale 1 non ci si accorge del difetto perche` prosegue in 110 che e` lo stesso stato in cui andrebbe comunque. Se EN vale 0 rimane in 001 e quindi non si evidenzia alcun difetto. Q2*Q1*Q0* Testbench module tb; reg ck, EN, RESET; macstati (ck, EN, Z, RESET); Esercizio 1b - 4 initial begin RESET=0; EN=0; #7 RESET=1; #12 RESET=0; #10 EN=1 #200 EN=0 ; #10 $stop ; end La macchina a stati, descritta dalla seguente tabella dello stato successivo, si comporta di fatto come un contatore di fronti. Dopo un certo numero di fronti (con EN a 1) mette la sua unica uscita Z a 1. La macchina e` dotata di un ingresso RESET_L attivo basso che la riporta allo stato A. Tale macchina e` stata implementata con l’assegnamento degli stati come da tabella delle transizioni (vedi tra parentesi) e realizzando le reti combinatorie in accordo con gli implicanti evidenziati nelle mappe di Karnaugh. Per un errore di progettazione del circuito stampato che la realizza c’e` una interferenza che fa si che quando la macchina si trova nello stato 110, si attiva (con un piccolo ritardo) il clear (attivo basso) del flip-flop che ha come uscita Q2. Completare la descrizione VERILOG strutturale, i moduli richiamati nelle parti gia` disponibili nella soluzione, non sono da progettare (notare che tra l’altro e` da completare l’assign che simula l’errore, manca la logica per gestire il reset e per ricavare Z). Dire in poche righe come si evidenzia il malfunzionamento e che influenza ha sulla funzionalita` svolta dalla macchina. Scrivere un testbench che permetta di evidenziare una situazione di malfunzionamento e tracciare i grafici che si ottengono in uscita (solo uno zoom sulla zona dove si manifesta l’errore). Si consiglia di ragionare sugli stati non sui codici binari per quanto possibile (cioe` non mettersi a fare i grafici dei singoli bit). always #5 ck=~ck; endmodule EN 0 A B C D E A B C D E Grafici CK Z 1 B C D E A 0 0 0 0 1 Q2Q1Q0 (S) 000 (A) 100 (B) 101 (C) 110 (D) 111 (E) S* Tabella dello stato successivo EN EN 0 1 000 100 100 101 101 110 110 111 111 000 Q2*Q1*Q0* Tabella delle transizioni Z 0 0 0 0 1 i STATO 100 001 110 111 000 100 Z Soluzione Z EN A B C D E 0 A B C D E 1 B C D E A XF XG XH S* 0 0 0 0 1 Z EN Q2Q1Q0 (S) 000 (A) 100 (B) 101 (C) 110 (D) 111 (E) 0 000 100 101 110 111 1 100 101 110 111 000 0 0 0 0 1 001 (XF) 010 (XG) 011 (XH) 110 110 0 Q2*Q1*Q0* Verilog strutturale module macstati(ck,EN,Z,RESET_L); input EN,ck,RESET_L; output Z; logicaD2 xd2(D2,Q0,Q1,Q2,EN) ; //simula la logica D1 logicaD1 xd1(D1,Q0,Q1,Q2,EN) ; //simula la logica D1 logicaD0 xd0(D0,Q0,Q1,Q2,EN) ; //simula la logica D0 flipflopD dd0(ck,D0,Q0,clr_l) ; flipflopD dd1(ck,D1,Q1,clr_l) ; flipflopD dd2(ck,D2,Q2,clr2_l) ; assign #1 clr2_l= clr_l& (q2’| q1’ |q0).;//COMPLETARE! simula il disturbo assign z= q2 & q1 & q0; assign clr_l=RESET _L ; macstati (ck, EN, Z, RESET); initial begin RESET=0; EN=0; #7 RESET=1; #12 RESET=0; #10 EN=1 #200 EN=0 ; #10 $stop ; end always #5 ck=~ck; endmodule Grafici CK EN STATO 100 Z endmodule Descrizione degli effetti del malfunzionamento Quando avviene il malfunzionamento il contenuto del flip-flop diventa 010 (XG). Sia che EN valga 0 o valga 1 rimane torna nello stato 110 che fa tornare in 010, quindi non si arrivera` mai ad avere l’uscita uguale a 1. Testbench module tb; reg ck, EN, RESET; 101 010 010 010 010 Esercizio 2 - 1 Esercizio 2 -2 Si vuole realizzare una macchina a stati di Moore che gestisca una luce di occupato in una cabina elettorale. La luce e` accesa quando qualcuno si trova dentro. Per identificare l’ingresso/uscita della persona sono a disposizione due celle fotoelettriche in ingresso distanziate di pochi centimetri in orizzontale sul percorso di accesso. L’ingresso della persona e` evidenziato dall’attivazione della prima, da un momento in cui entrambe sono attive e dall’attivazione di solo la seconda. L’uscita e` caratterizzata dalla transizione opposta. Devono esistere tutte e tre le fasi perche` l’ingresso o uscita sia ritenuta valida (cioe` la transazione e` finita quando le due celle fotoelettriche tornano inattive), tutti gli altri casi sono da considerarsi abbagli o ripensamenti sull’ingresso o sull’uscita. Gli ingressi sono quindi A e B (prima e seconda fotocellula), se la fotocellula e` attraversata da qualcosa A (o B) vale 0. Quindi durante l’entrata di una persona la coppia di bit AB e` caratterizzata dalle seguenti fasi ognuna di lunghezza imprecisata (anche piu` colpi di clock) 11 01 00 10 11, la sequenza per l’uscita della persona invece da 11 10 00 01 11. L’uscita Z vale 1 se c’e` una persona dentro, 0 se la cabina e` libera. Il dispositivo che verra` realizzato avra` un tasto di reset attivabile solo quando si e` dentro la cabina (cioe` la prima azione che si aspetta la macchina dopo il reset e` l’uscita di una persona). Scrivere la tabella dello stato successivo, e l’uscita di una macchina che faccia tutto questo, se ne faccia un assegnamento degli stati ragionato e ben giustificato e si scriva la descrizione Verilog algoritmica della macchina cosi` ideata. Si vuole realizzare una macchina a stati di Moore che gestisca una luce di occupato in una cabina elettorale. La luce e` accesa quando qualcuno si trova dentro. Per identificare l’ingresso/uscita della persona sono a disposizione due celle fotoelettriche in ingresso distanziate di pochi centimetri in orizzontale sul percorso di accesso. L’ingresso della persona e` evidenziato dall’attivazione della prima, da un momento in cui entrambe sono attive e dall’attivazione di solo la seconda. L’uscita e` caratterizzata dalla transizione opposta. Devono esistere tutte e tre le fasi perche` l’ingresso o uscita sia ritenuta valida (cioe` la transazione e` finita quando le due celle fotoelettriche tornano inattive), tutti gli altri casi sono da considerarsi abbagli o ripensamenti sull’ingresso o sull’uscita. Gli ingressi sono quindi A e B (prima e seconda fotocellula), se la fotocellula e` attraversata da qualcosa A (o B) vale 0. Quindi durante l’entrata di una persona la coppia di bit AB e` caratterizzata dalle seguenti fasi ognuna di lunghezza imprecisata (anche piu` colpi di clock) 11 01 00 10 11, la sequenza per l’uscita della persona invece da 11 10 00 01 11. L’uscita Z vale 1 se c’e` una persona dentro, 0 se la cabina e` libera. Il dispositivo che verra` realizzato avra` un tasto di reset attivabile solo quando si e` fuori dalla cabina (cioe` la prima azione che si aspetta la macchina dopo il reset e` l’entrata di una persona). Scrivere la tabella dello stato successivo, e l’uscita di una macchina che faccia tutto questo, se ne faccia un assegnamento degli stati ragionato e ben giustificato e si scriva la descrizione Verilog algoritmica della macchina cosi` ideata. Soluzione Soluzione AB S SA SB SC SD SE SF SG SH SI SL 00 01 SA** SB SC SB SC SA**/SB** SA**/SC** SA** SE** SE** SG SE** SG SH SE**/SG** SH 11 SA SA** SA** SE SE SE** SE** SA 10 SA** SA** SD SD SF SF SE**/SF** SE** Z 0 0 0 0 1 1 1 1 Stato SA SB SC SD SE SF SG SH SI SL codifica 100 101 111 110 000 001 011 010 S SA SB SC SD SE SF SG SH SI SL AB 00 01 SA** SB SC SB SC SA**/SB** SA**/SC** SA** SE** SE** SG SE** SG SH SE**/SG** SH 11 SA SA** SA** SE SE SE** SE** SA 10 SA** SA** SD SD SF SF SE**/SF** SE** Z 0 0 0 0 1 1 1 1 Stato SA SB SC SD SE SF SG SH SI SL codifica 000 001 011 010 100 101 111 110 S* ** potevano essere scelti in modo diverso S* ** potevano essere scelti in modo diverso Giustificazione della scelta della codifica degli stati Il reset porta nello stato SE, per agevolare il reset dei flip-flop viene quindi scelto per quello 000 Viene usato il negato del primo bit per codificare l’uscita. Gli altri sono in sequenza di Grey. Giustificazione della scelta della codifica degli stati Il reset porta nello stato SA, per agevolare il reset dei flip-flop viene quindi scelto per quello 000 Viene usato il primo bit per codificare l’uscita. Gli altri sono in sequenza di Grey. Esercizio 2 - 3 Esercizio 2 -4 Si vuole realizzare una macchina a stati di Moore che gestisca una luce di occupato in una cabina elettorale. La luce e` accesa quando qualcuno si trova dentro. Per identificare l’ingresso/uscita della persona sono a disposizione due celle fotoelettriche in ingresso distanziate di pochi centimetri in orizzontale sul percorso di accesso. L’ingresso della persona e` evidenziato dall’attivazione della prima, da un momento in cui entrambe sono attive e dall’attivazione di solo la seconda. L’uscita e` caratterizzata dalla transizione opposta. Devono esistere tutte e tre le fasi perche` l’ingresso o uscita sia ritenuta valida (cioe` la transazione e` finita quando le due celle fotoelettriche tornano inattive), tutti gli altri casi sono da considerarsi abbagli o ripensamenti sull’ingresso o sull’uscita. Gli ingressi sono quindi A e B (prima e seconda fotocellula), se la fotocellula e` attraversata da qualcosa A (o B) vale 1. Quindi durante l’entrata di una persona la coppia di bit AB e` caratterizzata dalle seguenti fasi ognuna di lunghezza imprecisata (anche piu` colpi di clock) 00 10 11 01 00, la sequenza per l’uscita della persona invece da 00 01 11 10 00. L’uscita Z vale 1 se c’e` una persona dentro, 0 se la cabina e` libera. Il dispositivo che verra` realizzato avra` un tasto di reset attivabile solo quando si e` fuori dalla cabina (cioe` la prima azione che si aspetta la macchina dopo il reset e` l’entrata di una persona). Scrivere la tabella dello stato successivo, e l’uscita di una macchina che faccia tutto questo, se ne faccia un assegnamento degli stati ragionato e ben giustificato e si scriva la descrizione Verilog algoritmica della macchina cosi` ideata. Si vuole realizzare una macchina a stati di Moore che gestisca una luce di occupato in una cabina elettorale. La luce e` accesa quando qualcuno si trova dentro. Per identificare l’ingresso/uscita della persona sono a disposizione due celle fotoelettriche in ingresso distanziate di pochi centimetri in orizzontale sul percorso di accesso. L’ingresso della persona e` evidenziato dall’attivazione della prima, da un momento in cui entrambe sono attive e dall’attivazione di solo la seconda. L’uscita e` caratterizzata dalla transizione opposta. Devono esistere tutte e tre le fasi perche` l’ingresso o uscita sia ritenuta valida (cioe` la transazione e` finita quando le due celle fotoelettriche tornano inattive), tutti gli altri casi sono da considerarsi abbagli o ripensamenti sull’ingresso o sull’uscita. Gli ingressi sono quindi A e B (prima e seconda fotocellula), se la fotocellula e` attraversata da qualcosa A (o B) vale 1. Quindi durante l’entrata di una persona la coppia di bit AB e` caratterizzata dalle seguenti fasi ognuna di lunghezza imprecisata (anche piu` colpi di clock) 00 10 11 01 00, la sequenza per l’uscita della persona invece da 00 01 11 10 00. L’uscita Z vale 1 se c’e` una persona dentro, 0 se la cabina e` libera. Il dispositivo che verra` realizzato avra` un tasto di reset attivabile solo quando si e` dentro la cabina (cioe` la prima azione che si aspetta la macchina dopo il reset e` l’uscita di una persona). Scrivere la tabella dello stato successivo, e l’uscita di una macchina che faccia tutto questo, se ne faccia un assegnamento degli stati ragionato e ben giustificato e si scriva la descrizione Verilog algoritmica della macchina cosi` ideata. Soluzione Soluzione AB S SA SB SC SD SE SF SG SH SI SL 00 SA SA** SA** SE SE SE** SE** SA 01 11 10 SA** SA** SB SA** SC SB SD SC SA**/SB** SD SA**/SC** SA** SF SE** SE** SF SG SE** SE**/SF** SG SH SE** SE**/SG** SH Z 0 0 0 0 1 1 1 1 Stato SA SB SC SD SE SF SG SH SI SL codifica 000 001 011 010 100 101 111 110 S SA SB SC SD SE SF SG SH SI SL 00 SA SA** SA** SE SE SE** SE** SA AB 01 11 10 SA** SA** SB SA** SC SB SD SC SA**/SB** SD SA**/SC** SA* SF SE** SE** SF SG SE** SE**/SF** SG SH SE** SE**/SG** SH Z 0 0 0 0 1 1 1 1 Stato SA SB SC SD SE SF SG SH SI SL codifica 100 101 111 110 000 001 011 010 S* **potevano essere scelti in modo diverso S* ** potevano essere scelti in modo diverso Giustificazione della scelta della codifica degli stati Il reset porta nello stato SA, per agevolare il reset dei flip-flop viene quindi scelto per quello 000 Viene usato il primo bit per codificare l’uscita. Gli altri sono in sequenza di Grey. Giustificazione della scelta della codifica degli stati Il reset porta nello stato SE, per agevolare il reset dei flip-flop viene quindi scelto per quello 000 Viene usato il negato del primo bit per codificare l’uscita. Gli altri sono in sequenza di Grey.