(Microsoft PowerPoint - verilog_ucyf_cz5.ppt [tryb zgodno\234ci])

Transkrypt

(Microsoft PowerPoint - verilog_ucyf_cz5.ppt [tryb zgodno\234ci])
Układy cyfrowe
w Verilog HDL
Elementy języka z przykładami
wersja: 10.2009 cz.5
H
D
L
dr inŜ. Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
1
Automat eliminujący drgania
Układ eliminujący drgania z mechanicznego
przełącznika - debouncer
Przykład (ze strony http://www.fpga4fun.com)
H
D
L
dr inŜ. Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
2
Automat eliminujący drgania
Układ eliminujący drgania z mechanicznego
przełącznika – debouncer
Wersje realizacji
sygnał
z przełącznika
sygnał
z eliminatora
drgań - 1
sygnał
z eliminatora
drgań - 2
H
D
L
dr inŜ. Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
3
Realizacja automatu – wersja 1
module debouncer(clk, reset, data_in, data_out);
input clk, reset, data_in;
output reg data_out;
localparam [2:0] zero = 3'b000, wait1_1= 3'b001, wait1_2= 3'b010,
one = 3'b100, wait0_1= 3'b101, wait0_2= 3'b110;
localparam n=2; // dł. licznika
reg [n-1:0] q_reg;
wire [n-1:0] q_next;
wire q_tick;
reg [2:0] state_reg, state_next;
// licznik
always@(posedge clk, posedge reset)
if(reset)
q_reg <= 0;
else
q_reg <= q_next;
assign q_next = q_reg + 1;
assign q_tick = (&q_reg) ? 1'b1 : 1'b0;
H
D
L
…
// automat
always@(posedge clk, posedge reset)
if(reset)
state_reg <= zero;
else
state_reg <= state_next;
dr inŜ. Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
4
Realizacja automatu – wersja 1
…
wait0_1: begin
always@* begin
data_out = 1'b1;
state_next = state_reg; // domyślne
if(data_in)
data_out = 1'b0; // wartości
state_next = one;
case(state_reg)
else if(q_tick)
zero: if(data_in)
state_next = wait0_2;
state_next = wait1_1;
end
wait1_1:
wait0_2: begin
if(~data_in)
data_out = 1'b1;
state_next = zero;
if(data_in)
else
state_next = one;
if(q_tick)
else if(q_tick)
state_next = wait1_2;
state_next = zero;
wait1_2:
end
if(~data_in)
default: state_next = zero;
state_next = zero;
endcase
else
end // always
if(q_tick)
endmodule
state_next = one;
one: begin
data_out = 1'b1;
if(~data_in)
state_next = wait0_1;
end
H
D
L
dr inŜ. Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
5
Realizacja automatu – wersja 1
H
D
L
dr inŜ. Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
6
Realizacja automatu – wersja 1
H
D
L
dr inŜ. Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
7
Realizacja automatu – wersja 2
module debouncer(clk, reset, data_in, data_out);
input clk, reset, data_in;
output reg data_out;
localparam [2:0] zero = 3'b000, wait1_0= 3'b001, wait1_1= 3'b010,
one = 3'b100, wait0_0= 3'b101, wait0_1= 3'b110;
localparam n=2; // dł. licznika
reg [n-1:0] q_reg;
wire [n-1:0] q_next;
wire q_tick;
reg [2:0] state_reg, state_next;
// licznik
always@(posedge clk, posedge reset)
if(reset)
q_reg <= 0;
else
q_reg <= q_next;
assign q_next = q_reg + 1;
assign q_tick = (&q_reg) ? 1'b1 : 1'b0;
H
D
L
// automat
always@(posedge clk, posedge reset)
if(reset)
state_reg <= zero;
else
state_reg <= state_next;
dr inŜ. Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
8
Realizacja automatu – wersja 2
always@* begin
state_next = state_reg; // domyślne
data_out = 1'b0; // wartości
case(state_reg)
zero: if(data_in)
state_next = wait1_0;
wait1_0: begin
data_out = 1'b1;
if(q_tick)
state_next = wait1_1;
end
wait1_1: begin
data_out = 1'b1;
if(q_tick)
if(data_in)
state_next = one;
else
state_next = zero;
end
one: begin
data_out = 1'b1;
if(~data_in)
state_next = wait0_0;
end
wait0_0:
if(q_tick)
state_next = wait0_1;
wait0_1:
if(q_tick)
if(data_in)
state_next = one;
else
state_next = zero;
default: state_next = zero;
endcase
end // always
endmodule
H
D
L
dr inŜ. Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
9
Realizacja automatu – wersja 2
H
D
L
dr inŜ. Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
10
Realizacja automatu – symulacja
Wersja 1
Wersja 2
H
D
L
dr inŜ. Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
11