Slides 3
Slides 3
Michele Lora
21 dicembre 2023
Outline
5 Esercizi
5 Esercizi
.search nomeFileComp.blif
.model REGISTRO
.inputs A
.outputs O
.latch A O re NIL 0
.end
.model REGISTRO4
.inputs A3 A2 A1 A0
.outputs O3 O2 O1 O0
.subckt REGISTRO A=A3 O=O3
.subckt REGISTRO A=A2 O=O2
.subckt REGISTRO A=A1 O=O1
.subckt REGISTRO A=A0 O=O0
.search registro.blif
.end
.model SOMMATORE
.inputs A B CIN
.outputs O COUT
.names A B K
10 1
01 1
.names K CIN O
10 1
01 1
.names A B CIN COUT
11- 1
1-1 1
-11 1
.end
.model SOMMATORE2
.inputs A1 A0 B1 B0 CIN
.outputs O1 O0 COUT
.subckt SOMMATORE A=A0 B=B0 CIN=CIN O=O0 COUT=C0
.subckt SOMMATORE A=A1 B=B1 CIN=C0 O=O1 COUT=COUT
.search sommatore.blif
.end
.model MUX1
.inputs S1 S0 i3 i2 i1 i0
.outputs out
.names S1 S0 i3 i2 i1 i0 out
001––- 1
01-1–- 1
10–-1- 1
11––-1 1
.end
.model MUX2
.inputs X1 X0 a1 a0 b1 b0 c1 c0 d1 d0
.outputs o1 o0
.subckt MUX1 S1=X1 S0=X0 i3=a1 i2=b1 i1=c1 i0=d1 out=o1
.subckt MUX1 S1=X1 S0=X0 i3=a0 i2=b0 i1=c0 i0=d0 out=o0
.search mux1.blif
.end
.model MUX3
.inputs A2 A1 A0 B2 B1 B0 S
.outputs O2 O1 O0
.names S A2 B2 O2
11- 1
0-1 1
.names S A1 B1 O1
11- 1
0-1 1
.names S A0 B0 O0
11- 1
0-1 1
.end
.model DEMUX
.inputs S1 S0 IN
.outputs X Y Z W
.names S1 S0 IN X
001 1
.names S1 S0 IN Y
011 1
.names S1 S0 IN Z
101 1
.names S1 S0 IN W
111 1
.end
.model UGUALE4
.inputs A3 A2 A1 A0 B3 B2 B1 B0
.outputs O
.subckt xnor A=A3 B=B3 X=X3
.subckt xnor A=A2 B=B2 X=X2
.subckt xnor A=A1 B=B1 X=X1
.subckt xnor A=A0 B=B0 X=X0
.names X3 X2 X1 X0 O
1111 1
.search xnor.blif
.end
.model 6le
.inputs C5 C4 C3 C2 C1 C0 D5 D4 D3 D2 D1 D0
.outputs CleD
.subckt 6gt A5=C5 A4=C4 A3=C3 A2=C2 A1=C1 A0=C0 ...
B5=D5 B4=D4 B3=D3 B2=D2 B1=D1 B0=D0 AgtB=z
.names z CleD
0 1
.search 6gt.blif
.end
5 Esercizi
Per evitare incidenti, il circuito di controllo deve garantire che le luci sulle
strade NS e EO siano sempre accese in opposizione. Il circuito assegna
priorità alla strada NS e commuta dal verde al rosso su NS solo se
TRAFFICONS=0 e TRAFFICOEO=1, in caso contrario mantiene il verde
su NS. In assenza di traffico sia su NS che su EO il semaforo non modifica
la configurazione raggiunta. Non appena giunge traffico su NS,
indipendentemente da cosa succede su EO, il semaforo assegna la luce
verde a NS e la luce rossa a EO.
Per evitare incidenti, il circuito di controllo deve garantire che le luci sulle
strade NS e EO siano sempre accese in opposizione. Il circuito assegna
priorità alla strada NS e commuta dal verde al rosso su NS solo se
TRAFFICONS=0 e TRAFFICOEO=1, in caso contrario mantiene il verde
su NS. In assenza di traffico sia su NS che su EO il semaforo non modifica
la configurazione raggiunta. Non appena giunge traffico su NS,
indipendentemente da cosa succede su EO, il semaforo assegna la luce
verde a NS e la luce rossa a EO.
Il controllore non commuta mai un semaforo da verde a rosso senza
aver atteso 1024 cicli di clock.
5 Esercizi
Tre processi:
blocco sequenziale sincrono che emula il comportamento dei registri
del modello di Huffman;
blocco sequenziale asincrono, sensibile ai cambiamenti di stato, dei
segnali di ingresso della FSM, che implementa la macchina a stati. Il
processo è solitamente implementato con costrutti case ed if.
blocco sequenziale sincrono che implementa le operazioni nel
datapath. Il flusso di controllo del blocco sequenziale è solitamente
regolato dai valori dei segnali di controllo generati dalla FSM (ed
eventualmente, dai segnali d’ingresso nel datapath).
module SemaforoTemporizzato(
input clk, trafficons, trafficoeo,
output reg lucens, luceeo);
reg [1:0] stato = 2’b00;
reg [1:0] stato_prossimo = 2’b00;
reg inizio = 1’b0, fine = 1’b0;
reg [2:0] registro = 3’b000;
...
always @(posedge clk) begin : DATAPATH
if(inizio) begin
registro = 3’b000;
fine = 1’b0;
end else begin
if(registro < 3’b111) begin
registro = registro + 1’b1;
fine = 1’b0;
end else begin
fine = 1’b1;
end
end
end
...
2’b11:
begin inizio = 1’b0;
if(fine) begin
lucens = 1’b1; luceeo = 1’b0;
stato_prossimo = 2’b00;
end else begin
lucens = 1’b0; luceeo = 1’b1;
stato_prossimo = 2’b11;
end end
endcase
end
endmodule
5 Esercizi
clk = 1’b0;
trafficons = 1’b0;
trafficoeo = 1’b0;
$fdisplay(tbf, "simulate %b %b", trafficons, trafficoeo);
#20
$fdisplay(outf, "Outputs: %b %b", lucens, luceeo);
trafficons = 1’b0;
trafficoeo = 1’b1;
$fdisplay(tbf, "simulate %b %b", trafficons, trafficoeo);
#20
$fdisplay(outf, "Outputs: %b %b", lucens, luceeo);
...
...
#20
$fdisplay(outf, "Outputs: %b %b", lucens, luceeo);
$fdisplay(tbf, "quit");
// E’fondamentale chiudere i file con $fclose.
$fclose(tbf);
$fclose(outf);
$finish;
5 Esercizi