itsme_rudj

Mealy Tollgate FSM

Jan 14th, 2024
344
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VeriLog 1.99 KB | Source Code | 0 0
  1. module TollGateFSM (
  2.   input wire vehicleApproaches,
  3.   input wire rfidDetected,
  4.   input wire sufficientBalance,
  5.   output reg vehiclePasses,
  6.   output reg gateOpen,
  7.   output reg tollCollected
  8. );
  9.  
  10.   // Enumerated states
  11.   `define Closed 2'b00
  12.   `define Open   2'b01
  13.   `define Error  2'b10
  14.   parameter Closed = 2'b00;
  15.   parameter Open   = 2'b01;
  16.   parameter Error  = 2'b10;
  17.  
  18.   // State register and next state logic
  19.   reg [1:0] currentState, nextState;
  20.  
  21.   // Initial state assignment
  22.   initial begin
  23.     currentState = Closed;
  24.     nextState = Closed;
  25.     gateOpen = 0;
  26.     tollCollected = 0;
  27.   end
  28.  
  29.   always @(posedge vehicleApproaches or posedge rfidDetected or posedge sufficientBalance) begin
  30.     case (currentState)
  31.       Closed:
  32.         if (rfidDetected && sufficientBalance && vehicleApproaches) begin
  33.           nextState <= Open;
  34.           vehiclePasses <= 1;
  35.           gateOpen <= 1;  // Open the gate when transitioning to Open state
  36.           tollCollected <= 1;  // Collect toll when transitioning to Open state
  37.         end
  38.         else if (rfidDetected && !sufficientBalance && vehicleApproaches) begin
  39.           nextState <= Closed;
  40.           vehiclePasses <= 0;
  41.           gateOpen <= 0;
  42.           tollCollected <= 0;
  43.         end
  44.         else if (!rfidDetected && vehicleApproaches) begin
  45.           nextState <= Closed;
  46.           vehiclePasses <= 0;
  47.           gateOpen <= 0;
  48.           tollCollected <= 0;
  49.         end
  50.         else begin
  51.           nextState <= Error;
  52.         end
  53.       Open:
  54.         if (vehiclePasses) begin
  55.           nextState <= Closed;
  56.           gateOpen <= 0;
  57.           tollCollected <= 0;
  58.         end
  59.         else begin
  60.           nextState <= Open;
  61.         end
  62.  
  63.       Error:
  64.         nextState <= Error;
  65.     endcase
  66.   end
  67.  
  68.   // State update
  69.   always @(posedge vehicleApproaches or posedge rfidDetected or posedge sufficientBalance) begin
  70.     if (currentState != nextState) begin
  71.       currentState <= nextState;
  72.     end
  73.   end
  74.  
  75. endmodule
Tags: Code FSM Mealy
Advertisement
Add Comment
Please, Sign In to add comment