Sei sulla pagina 1di 4

Esercizio 1 Sintetizzare una rete combinatoria che prende in ingresso tre numeri naturali A, B e C, ciascuno su n bit in base 2, li interpreta

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

0 Colore Rosso Verde Giallo Cod. 00 01 10

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 per naturali A


n n

Comparatore a n bit

Comparatore a n bit

Comparatore a n bit

Tabella di verita di RC xAB xBC xCA b1 b0 0 0 0 - 0 0 1 0 0 0 1 0 1 0 0 1 1 0 0 1 0 0 0 1 1 0 1 0 1 1 1 0 1 0 1 1 1 - -

Sintesi di RC
b0 = x AB
bout

bin

b1 = x AB xBC + xAB xCA x AB xBC xCA

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

Potrebbero piacerti anche