Sei sulla pagina 1di 19

ESERCITAZIONE 2022-12-23 42

SINTESI RETE SEQUENZIALE


▸ Progettare una rete sequenziale sincrona con ingresso X a 1 bit la cui
uscita Y assuma il valore 0 quando riconosca la sequenza di bit 0, 1, 1
negli ultimi valori presentati all’ingresso. L'uscita Y deve assumere il
valore 1 per tutte le altre sequenze di ingresso. Si producano il
diagramma degli stati, la tabella di transizione, il diagramma circuitale
e una possibile implementazione in SystemVerilog comprensiva di test
bench.
ESERCITAZIONE 2022-12-23 43

SINTESI RETE SEQUENZIALE


▸ Progettare una rete sequenziale sincrona con ingresso X a 1 bit la cui uscita Y assuma il valore 0 quando riconosca la
sequenza di bit 0, 1, 1 negli ultimi valori presentati all’ingresso. L'uscita Y deve assumere il valore 1 per tutte le altre
sequenze di ingresso. Si producano il diagramma degli stati, la tabella di transizione, il diagramma circuitale e una
possibile implementazione in SystemVerilog comprensiva di test bench.

0 S2
1 1
0 1
1 S1
1 0
0 S3
1 0
S0
reset
1

Diagramma degli stati


ESERCITAZIONE 2022-12-23 44

SINTESI RETE SEQUENZIALE


▸ Progettare una rete sequenziale sincrona con ingresso X a 1 bit la cui uscita Y assuma il valore 0 quando riconosca la
sequenza di bit 0, 1, 1 negli ultimi valori presentati all’ingresso. L'uscita Y deve assumere il valore 1 per tutte le altre
sequenze di ingresso. Si producano il diagramma degli stati, la tabella di transizione, il diagramma circuitale e una
possibile implementazione in SystemVerilog comprensiva di test bench.

Current Input: X Next


State: S X State: S’
S0 0 S1
S0 1 S0
0 S1 0 S1
S2
1 1 S1 1 S2
0 1 S2 0 S1
1 S1
1 0 S2 1 S3
0 S3
1 0 S3 0 S1
S0 S3 1 S0
reset
1

Diagramma degli stati Tabella di transizione

ESERCITAZIONE 2022-12-23 45

SINTESI RETE SEQUENZIALE


▸ Progettare una rete sequenziale sincrona con ingresso X a 1 bit la cui uscita Y assuma il valore 0 quando riconosca la
sequenza di bit 0, 1, 1 negli ultimi valori presentati all’ingresso. L'uscita Y deve assumere il valore 1 per tutte le altre
sequenze di ingresso. Si producano il diagramma degli stati, la tabella di transizione, il diagramma circuitale e una
possibile implementazione in SystemVerilog comprensiva di test bench.

0 S2
1 Current
1 Output: Y
0 1 State: S
1 S1
1 0 S0 1
0 S3
1 0 S1 1
S0 S2 1
reset
1 S3 0

Diagramma degli stati Tabella di uscita


ESERCITAZIONE 2022-12-23 46

SINTESI RETE SEQUENZIALE


▸ Progettare una rete sequenziale sincrona con ingresso X a 1 bit la cui uscita Y assuma il valore 0 quando riconosca la
sequenza di bit 0, 1, 1 negli ultimi valori presentati all’ingresso. L'uscita Y deve assumere il valore 1 per tutte le altre
sequenze di ingresso. Si producano il diagramma degli stati, la tabella di transizione, il diagramma circuitale e una
possibile implementazione in SystemVerilog comprensiva di test bench.

State S1S0

S0 00
S1 01 Current Input: Next State:
State: S1S0 X S’1S’0
S2 10
S3 11 00 0 01
Tabella di codi ca degli stati
00 1 00

Current
S′1 = S1S0 X + S1S0 X 01
01
0
1
01
10
Output: Y
State: S1S0 S′0 = S1S0 + X 10 0 01
00 1
01 1 Y = S1 + S0 10
11
1
0
11
01
10 1 11 1 00
11 0


Tabella di uscita (codi cata) Tabella di transizione (codi cata)

fi
fi
fi
ESERCITAZIONE 2022-12-23 47

SINTESI RETE SEQUENZIALE


▸ Progettare una rete sequenziale sincrona con ingresso X a 1 bit la cui uscita Y assuma il valore 0 quando riconosca la
sequenza di bit 0, 1, 1 negli ultimi valori presentati all’ingresso. L'uscita Y deve assumere il valore 1 per tutte le altre
sequenze di ingresso. Si producano il diagramma degli stati, la tabella di transizione, il diagramma circuitale e una
possibile implementazione in SystemVerilog comprensiva di test bench.

S10 S1
CLK

X
S00 S0
rst

S′1 = S1S0 X + S1S0 X


S′0 = S1S0 + X
Y = S1 + S0


ESERCITAZIONE 2022-12-23 48

module recog011(input logic clk, reset,


HDL RETE SEQUENZIALE x, output logic y);

logic [1:0] state, nextstate;


enum logic [1:0] {S0, S1, S2, S3}
▸ Progettare una rete sequenziale sincrona statevals;
con ingresso X a 1 bit la cui uscita Y
always_ff @(posedge clk, posedge
assuma il valore 0 quando riconosca la reset) begin
sequenza di bit 0, 1, 1 negli ultimi valori if(reset) begin
state<=S0;
presentati all’ingresso. L'uscita Y deve end else begin
state<=nextstate;
assumere il valore 1 per tutte le altre end
sequenze di ingresso. Si producano il end
diagramma degli stati, la tabella di always_comb begin
transizione, il diagramma circuitale e una case(state)
S0 : nextstate= (x ? S0 : S1);
possibile implementazione in S1 : nextstate= (x ? S2 : S1);
SystemVerilog comprensiva di test S2 : nextstate= (x ? S3 : S1);
S3 : nextstate= (x ? S0 : S1);
bench. default: nextstate= S0;
endcase
▸ Esempio di soluzione (1): traduzione end
assign y= ~(state==S3);
diretta della FSM
endmodule

ESERCITAZIONE 2022-12-23 49

HDL RETE SEQUENZIALE


▸ Progettare una rete sequenziale sincrona con ingresso X a 1 bit la cui uscita Y assuma il valore 0 quando riconosca la sequenza di bit 0, 1, 1
negli ultimi valori presentati all’ingresso. L'uscita Y deve assumere il valore 1 per tutte le altre sequenze di ingresso. Si producano il diagramma
degli stati, la tabella di transizione, il diagramma circuitale e una possibile implementazione in SystemVerilog comprensiva di test bench.

▸ Esempio di soluzione (2): ottenuta dalla traduzione delle equazioni

module recog011(input logic clk, reset, x, output logic y);

logic [1:0] state, nextstate;


enum logic [1:0] {S0, S1, S2, S3} statevals;

always_ff @(posedge clk, posedge reset) begin


if(reset) begin
state=S0;
end else begin
state<=nextstate;
end
end

assign nextstate[1]= (~state[1]&state[0]&x) | (state[1]&~state[0]&x);


assign nextstate[0]= (state[1]&~state[0]) | ~x;
assign y= ~state[1]|~state[0];
endmodule

ESERCITAZIONE 2022-12-23 50

`timescale 1ns/1ns
HDL RETE SEQUENZIALE
module recog011_tb();
logic clk, reset, x, y;

▸ Progettare una rete sequenziale recog011 dut(clk, reset, x, y);


sincrona con ingresso X a 1 bit la cui always begin
uscita Y assuma il valore 0 quando clk=0; #10; clk=1; #10;
end
riconosca la sequenza di bit 0, 1, 1
initial begin
negli ultimi valori presentati $dumpfile("recog011_tb.vcd");
$dumpvars(0, recog011_tb);
all’ingresso. L'uscita Y deve assumere x=1;
il valore 1 per tutte le altre sequenze reset=1; #2;
reset=0; #2;
di ingresso. Si producano il #11;
x=0; #10;
diagramma degli stati, la tabella di x=1; #20;
transizione, il diagramma circuitale e x=0;
x=1;
#20;
#20;
una possibile implementazione in x=0; #20;
x=1; #20;
SystemVerilog comprensiva di test x=1; #25;
$finish;
bench. end
endmodule

ESERCITAZIONE 2022-12-23 51

HDL RETE SEQUENZIALE


▸ Progettare una rete sequenziale sincrona con ingresso X a 1 bit la cui uscita Y assuma il valore 0 quando riconosca la
sequenza di bit 0, 1, 1 negli ultimi valori presentati all’ingresso. L'uscita Y deve assumere il valore 1 per tutte le altre
sequenze di ingresso. Si producano il diagramma degli stati, la tabella di transizione, il diagramma circuitale e una
possibile implementazione in SystemVerilog comprensiva di test bench.

Visualizzazione con GTKWave del le VCD generato dal test bench


fi
ESERCITAZIONE 2022-12-23 52

SINTESI RETE SEQUENZIALE


▸ Progettare una rete sequenziale con un ingresso a un bit la cui uscita
riporti in maniera continua (sia trasparente) per tutta la durata del ciclo
i-esimo il valore dell’ingresso se quest’ultimo ha assunto il valore 1 in
corrispondenza al fronte di salita del clock del ciclo i-1-esimo. In caso
contrario l’uscita deve essere 0. Si producano il diagramma degli stati,
la tabella di transizione, il diagramma circuitale e una possibile
implementazione in SystemVerilog comprensiva di test bench.
ESERCITAZIONE 2022-12-23 53

SINTESI RETE SEQUENZIALE


▸ Progettare una rete sequenziale con un ingresso a un bit la cui uscita riporti in maniera continua (sia trasparente) per tutta
la durata del ciclo i-esimo il valore dell’ingresso se quest’ultimo ha assunto il valore 1 in corrispondenza al fronte di salita
del clock del ciclo i-1-esimo. In caso contrario l’uscita deve essere 0. Si producano il diagramma degli stati, la tabella di
transizione, il diagramma circuitale e una possibile implementazione in SystemVerilog comprensiva di test bench.

0/0

1/1

1/0 S3 0/0
S1 S2
0/0 1/1
1/0
0/0
reset S0

Diagramma degli stati (Mealy)


ESERCITAZIONE 2022-12-23 54

SINTESI RETE SEQUENZIALE


▸ Progettare una rete sequenziale con un ingresso a un bit la cui uscita riporti in maniera continua (sia trasparente) per tutta
la durata del ciclo i-esimo il valore dell’ingresso se quest’ultimo ha assunto il valore 1 in corrispondenza al fronte di salita
del clock del ciclo i-1-esimo. In caso contrario l’uscita deve essere 0. Si producano il diagramma degli stati, la tabella di
transizione, il diagramma circuitale e una possibile implementazione in SystemVerilog comprensiva di test bench.

0/0 Current Next Output:


Input: P
State: S State: Y
1/1
S0 0 S’
S0 0
S0 1 S1 0
1/0 S3 0/0 S1 0 S2 0
S2 S1 1 S3 0
0/0 S1 1/1
1/0 S2 0 S0 0
0/0 S2 1 S1 1
reset S0 S3 0 S2 0
S3 1 S3 1

Diagramma degli stati (Mealy) Tabella di transizione e uscita


ESERCITAZIONE 2022-12-23 55

SINTESI RETE SEQUENZIALE


▸ Progettare una rete sequenziale con un ingresso a un bit la cui uscita riporti in maniera continua (sia trasparente) per tutta
la durata del ciclo i-esimo il valore dell’ingresso se quest’ultimo ha assunto il valore 1 in corrispondenza al fronte di salita
del clock del ciclo i-1-esimo. In caso contrario l’uscita deve essere 0. Si producano il diagramma degli stati, la tabella di
transizione, il diagramma circuitale e una possibile implementazione in SystemVerilog comprensiva di test bench.

Current Input: Next State: Output:


State: S1S0 P S’1S’0 Y
00 0 00 0
00 1 01 0
State S1S0 S′1 = S0 01 0 10 0
01 1 11 0
S0 00 S′0 = P 10 0 00 0
S1
S2
01
10
Y = S1P 10 1 01 1
11 0 10 0
S3 11 11 1 11 1


Tabella di codi ca degli stati Tabella di transizione e uscita (codi cata)

fi
fi
ESERCITAZIONE 2022-12-23 56

SINTESI RETE SEQUENZIALE


▸ Progettare una rete sequenziale con un ingresso a un bit la cui uscita riporti in maniera continua (sia trasparente) per tutta
la durata del ciclo i-esimo il valore dell’ingresso se quest’ultimo ha assunto il valore 1 in corrispondenza al fronte di salita
del clock del ciclo i-1-esimo. In caso contrario l’uscita deve essere 0. Si producano il diagramma degli stati, la tabella di
transizione, il diagramma circuitale e una possibile implementazione in SystemVerilog comprensiva di test bench.

S10 S1
CLK

S′1 = S0 Y
S′0 = P P S00 S0
Y = S1P rst


ESERCITAZIONE 2022-12-23 57

module transparentn(input logic clk,


HDL RETE SEQUENZIALE reset, p, output logic y);

enum logic [1:0] {S0, S1, S2, S3}


statevals;
▸ Progettare una rete sequenziale con un logic [1:0] state, nextstate;
ingresso a un bit la cui uscita riporti in
always_ff @(posedge clk, posedge
maniera continua (sia trasparente) per tutta reset) begin
la durata del ciclo i-esimo il valore if(reset) begin
state<=S0;
dell’ingresso se quest’ultimo ha assunto il end else begin
valore 1 in corrispondenza al fronte di salita state<=nextstate;
del clock del ciclo i-1-esimo. In caso end
end
contrario l’uscita deve essere 0. Si
producano il diagramma degli stati, la always_comb begin
case(state)
tabella di transizione, il diagramma circuitale S0 : nextstate= (p ? S1 : S0);
e una possibile implementazione in S1 : nextstate= (p ? S3 : S2);
S2 : nextstate= (p ? S1 : S0);
SystemVerilog comprensiva di test bench. S3 : nextstate= (p ? S3 : S2);
default: nextstate= S0;
▸ Esempio di soluzione (1): traduzione diretta endcase
della FSM end

assign y=state[1]&p;
endmodule

ESERCITAZIONE 2022-12-23 58

module transparentn(input logic clk,


HDL RETE SEQUENZIALE reset, p, output logic y);

logic [1:0] state, nextstate;

▸ Progettare una rete sequenziale con un always_ff @(posedge clk, posedge


ingresso a un bit la cui uscita riporti in reset) begin
if(reset) begin
maniera continua (sia trasparente) per tutta state<=2'b00;
la durata del ciclo i-esimo il valore end else begin
state<=nextstate;
dell’ingresso se quest’ultimo ha assunto il end
valore 1 in corrispondenza al fronte di salita end
del clock del ciclo i-1-esimo. In caso
assign nextstate[1]=state[0];
contrario l’uscita deve essere 0. Si assign nextstate[0]=p;
producano il diagramma degli stati, la assign y=state[1]&p;
tabella di transizione, il diagramma circuitale endmodule
e una possibile implementazione in
SystemVerilog comprensiva di test bench.

▸ Esempio di soluzione (2): ottenuta dalla


traduzione delle equazioni o direttamente
individuando il registro a scorrimento

ESERCITAZIONE 2022-12-23 59

`timescale 1ns/1ns
HDL RETE SEQUENZIALE module transparentn_tb();
logic clk, reset, p, y;

▸ Progettare una rete sequenziale con un transparentn dut(clk, reset, p, y);

ingresso a un bit la cui uscita riporti in always begin


clk=0; #10; clk=1; #10;
maniera continua (sia trasparente) per tutta end
la durata del ciclo i-esimo il valore
initial begin
dell’ingresso se quest’ultimo ha assunto il $dumpfile("transparentn_tb.vcd");
valore 1 in corrispondenza al fronte di salita $dumpvars(0, transparentn_tb);
reset=1; #2;
del clock del ciclo i-1-esimo. In caso reset=0;
contrario l’uscita deve essere 0. Si end
initial begin
producano il diagramma degli stati, la p=1; #3;
p=0; #4;
tabella di transizione, il diagramma circuitale p=1; #8;
e una possibile implementazione in p=0; #10;
p=1; #20;
SystemVerilog comprensiva di test bench. p=0; #20;
p=1; #20;
p=0; #20;
▸ I due blocchi initial vengono eseguiti p=1; #20;
in parallelo da t=0 p=1; #25;
$finish;
end
endmodule

ESERCITAZIONE 2022-12-23 60

HDL RETE SEQUENZIALE


▸ Progettare una rete sequenziale con un ingresso a un bit la cui uscita riporti in maniera continua (sia trasparente) per tutta
la durata del ciclo i-esimo il valore dell’ingresso se quest’ultimo ha assunto il valore 1 in corrispondenza al fronte di salita
del clock del ciclo i-1-esimo. In caso contrario l’uscita deve essere 0. Si producano il diagramma degli stati, la tabella di
transizione, il diagramma circuitale e una possibile implementazione in SystemVerilog comprensiva di test bench.

Visualizzazione con GTKWave del le VCD generato dal test bench


fi

Potrebbero piacerti anche