Advertisement
markkurvers

Untitled

Jun 30th, 2021
476
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. `timescale 1ns / 1ps
  2.  
  3. module beer_draft_top(
  4.     input clk,
  5.     input reset,
  6.     input next,draft,
  7.     input [1:0] beer_level,
  8.     output reg beer,
  9.     output reg [1:0] state_display);
  10.        
  11.       localparam    s0 = 2'b00,
  12.                     s1 = 2'b01,
  13.                     s2 = 2'b10;
  14.                    
  15.     reg b;
  16.     reg [1:0] cur_state;
  17.     reg [1:0] next_state;
  18.     reg prev_next;
  19.    
  20.     always @(posedge clk)
  21.     begin
  22.         cur_state<=next_state;
  23.         prev_next<=next;
  24.         state_display<=cur_state;
  25.         beer<=b;
  26.     end
  27.    
  28.     always @(*)
  29.     begin
  30.         if(reset)
  31.         begin
  32.             b=1'b0;
  33.             next_state=s0;
  34.         end
  35.         else if(next&&prev_next!=next)
  36.         begin
  37.             case(cur_state)
  38.                 s0: begin
  39.                         if(~draft || (draft&&beer_level==2'b00)) begin   next_state=s0;
  40.                                                                         b=0;
  41.                                                                 end
  42.                             else    begin   next_state=s1;
  43.                                             b=0;
  44.                                     end
  45.                     end
  46.                 s1: begin
  47.                         if(draft&&beer_level==2'b10)
  48.                         begin
  49.                             next_state = s2;
  50.                             b=1;
  51.                         end
  52.                         else if(~draft || (draft&&beer_level==2'b00)) begin  next_state=s0;
  53.                                                                             b=0;
  54.                                                                      end    
  55.                         else    begin
  56.                                     next_state=s1;
  57.                                     b=0;
  58.                                 end
  59.                     end
  60.                 s2: {next_state,b} = (draft&&beer_level==2'b10)?{s2,1'b1}:{s1,1'b0};
  61.                 default: {next_state,b} = {s0,1'b0};
  62.             endcase
  63.         end
  64.     end
  65.  
  66.  
  67. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement