Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- `timescale 1ns / 1ps
- module beer_draft_top(
- input clk,
- input reset,
- input next,draft,
- input [1:0] beer_level,
- output reg beer,
- output reg [1:0] state_display);
- localparam s0 = 2'b00,
- s1 = 2'b01,
- s2 = 2'b10;
- reg b;
- reg [1:0] cur_state;
- reg [1:0] next_state;
- reg prev_next;
- always @(posedge clk)
- begin
- cur_state<=next_state;
- prev_next<=next;
- state_display<=cur_state;
- beer<=b;
- end
- always @(*)
- begin
- if(reset)
- begin
- b=1'b0;
- next_state=s0;
- end
- else if(next&&prev_next!=next)
- begin
- case(cur_state)
- s0: begin
- if(~draft || (draft&&beer_level==2'b00)) begin next_state=s0;
- b=0;
- end
- else begin next_state=s1;
- b=0;
- end
- end
- s1: begin
- if(draft&&beer_level==2'b10)
- begin
- next_state = s2;
- b=1;
- end
- else if(~draft || (draft&&beer_level==2'b00)) begin next_state=s0;
- b=0;
- end
- else begin
- next_state=s1;
- b=0;
- end
- end
- s2: {next_state,b} = (draft&&beer_level==2'b10)?{s2,1'b1}:{s1,1'b0};
- default: {next_state,b} = {s0,1'b0};
- endcase
- end
- end
- endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement