Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
come le lunghezze di tre lati, e produce due uscite ret e area. Luscita ret, su 1 bit, vale 1 se A, B e C sono i lati di un triangolo rettangolo e zero altrimenti. Luscita area, su ? bit, contiene larea del triangolo (a meno di approssimazioni) se ret vale 1, ed un valore non significativo altrimenti. Se lo si ritiene opportuno, si risolva lesercizio supponendo di avere a disposizione una rete MAX3, che prende in ingresso i numeri A, B e C e presenta in uscita la codifica, su 2 bit, del massimo tra i tre numeri. Nota: Si descriva esplicitamente qualunque rete non descritta a lezione. Domanda facoltativa: Si sintetizzi la rete MAX3
Esercizio 2 Descrivere e sintetizzare la rete di figura, che pilota il semaforo allincrocio tra due strade, individuate dai numeri 0 ed 1. In particolare, la rete ha in ingresso la lunghezza della fila in ciascuna delle due strade che incidono sullincrocio, rappresentata da un numero naturale su 8 bit fila0/fila1, e produce in uscita i comandi di accensione del semaforo nelle due direzioni, cmd0/cmd1, ciascuno su 2 bit. La codifica dei comandi del semaforo riportata nella tabella sottostante. Il comportamento della rete il seguente: 1) in ciascuna delle due strade, il verde dura tra 1024 e 4096 cicli di clock 2) il giallo dura esattamente 1024 cicli di clock 3) se, durante il permanere del verde sulla strada x, la dimensione della fila sullaltra strada x + 1 2 risulta ad un certo punto essere di lunghezza maggiore, allora il semaforo sulla strada x passa immediatamente al giallo, sempre nel rispetto dei limiti di cui al punto 1. Nota: Data lassoluta semplicit dellesercizio, si ponga particolare cura al rispetto delle temporizzazioni.
fila0
8
cmd0
2
fila1
8
XXX
p /reset
cmd1
2
Soluzione Esercizio 1 Luscita area sta su 2n-1 bit. Una soluzione possibile per la produzione delluscita ret la seguente:
0 n n 0 MUL 0 0 0 MUL 2n 0 0 MUL 2n 2n+1 2n+1 SOMM. 2n+1bit COMP. 2n+1 bit 2n 2n+1
ipo B
n
ORDINA
ret
cat1 C
n n
2n+1
cat2
Dove la rete ORDINA pone sulluscita ipo il valore max(A,B,C), e sulle altre due uscite gli altri due valori. ORDINA fatta come segue:
La rete COMP un comparatore a 2n+1 bit, che pu essere realizzato con una barriera di 2n+1 porte XOR seguiti da una porta NOR a 2n+1 ingressi, o dal NOR delle uscite di un sottrattore a 2n+1 bit. Per quanto riguarda la produzione delluscita area, la rete la seguente:
0
cat1 cat2
n n MUL 2n
2n-1
area
Ovviamente, se il triangolo non rettangolo, luscita area contiene un valore che non ha nulla a che vedere con larea del triangolo stesso.
Domanda facoltativa: la sintesi della rete MAX3 riportata di seguito (la soluzione identica a quella riportata in un precedente esercizio, 13/2/06):
A
n n
B
n
B
n
C
n
C
n
Comparatore a n bit
Comparatore a n bit
Comparatore a n bit
Sintesi di RC
b0 = x AB
bout
bin
n b1
RC
b0
xAB
Soluzione Esercizio 2 Si pu osservare che le uscite di XXX ciclano in sequenza tra questi 4 stati: {verde, rosso}, {giallo, rosso}, {rosso, verde}, {giallo, verde}. Ciascuno di questi stati pu essere codificato in un registro SEGNALE a 2 bit, il cui contenuto, tramite una rete combinatoria, produce le uscite cmd0 e cmd1.
module XXX (fila0, fila1, cmd0, cmd1, p, reset_); input p, reset_; input [7:0] fila0, fila1; output [1:0] cmd0, cmd1; reg [11:0] COUNT; reg [1:0] SEGNALE; reg [2:0] STAR; parameter S0=0, S1=1, S2=2, S3=3, S4=4, S5=5, rosso=2B00, verde=2B01, giallo=2B10; assign {cmd0,cmd1}= (SEGNALE==2B00)?{verde,rosso}: (SEGNALE==2B01)?{giallo,rosso}: (SEGNALE==2B10)?{rosso,verde}: /*(SEGNALE==2B11)?*/{rosso,giallo}; always @(posedge p or negedge reset_) if (reset_==0) begin SEGNALE=2B11; STAR=S0; end else #3 casex(STAR) S0: begin COUNT<=1020; SEGNALE<=SEGNALE+1; STAR<=S1; end S1: begin COUNT<=COUNT-1; STAR<=(COUNT==0)?S2:S1; end S2: begin COUNT<=3072; STAR<=S3; end S3: begin COUNT<=COUNT-1; STAR<=((stop(fila0,fila1,SEGNALE)==1)|(COUNT==0))?S4:S3; end S4: begin COUNT<=1022; SEGNALE<=SEGNALE+1; STAR<=S5; end S5: begin COUNT<=COUNT-1; STAR<=(COUNT==0)?S0:S5; end endcase function stop; input [7:0] fila0, fila1; input [1:0] segnale; wire [8:0] diff; assign diff = (segnale[1]==0)?({0,fila0}-{0,fila1}): ({0,fila1}-{0,fila0}); stop=diff[8]; endfunction; endmodule
Le corrette inizializzazioni del registro COUNT possono essere facilmente ricavate dal seguente diagramma di temporizzazione, disegnato a partire dal reset asincrono ipotizzando che non ci siano cicli in nessuno stato. Si osserva facilmente che il verde sulla fila 0 resta attivo per 4 cicli di clock, ed il giallo per 2. Il resto viene di conseguenza.
STAR cmd0
S0 rosso
S1 verde
S2 verde
S3 verde
S4 verde
S5 giallo
S0 giallo
STAR cmd0
S0 giallo
S1 rosso
S2 rosso
S3 rosso
S4 rosso
S5 rosso
S0 rosso