(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