Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module TollGateFSM (
- input wire vehicleApproaches,
- input wire rfidDetected,
- input wire sufficientBalance,
- output reg vehiclePasses,
- output reg gateOpen,
- output reg tollCollected
- );
- // Enumerated states
- `define Closed 2'b00
- `define Open 2'b01
- `define Error 2'b10
- parameter Closed = 2'b00;
- parameter Open = 2'b01;
- parameter Error = 2'b10;
- // State register and next state logic
- reg [1:0] currentState, nextState;
- // Initial state assignment
- initial begin
- currentState = Closed;
- nextState = Closed;
- gateOpen = 0;
- tollCollected = 0;
- end
- always @(posedge vehicleApproaches or posedge rfidDetected or posedge sufficientBalance) begin
- case (currentState)
- Closed:
- if (rfidDetected && sufficientBalance && vehicleApproaches) begin
- nextState <= Open;
- vehiclePasses <= 1;
- gateOpen <= 1; // Open the gate when transitioning to Open state
- tollCollected <= 1; // Collect toll when transitioning to Open state
- end
- else if (rfidDetected && !sufficientBalance && vehicleApproaches) begin
- nextState <= Closed;
- vehiclePasses <= 0;
- gateOpen <= 0;
- tollCollected <= 0;
- end
- else if (!rfidDetected && vehicleApproaches) begin
- nextState <= Closed;
- vehiclePasses <= 0;
- gateOpen <= 0;
- tollCollected <= 0;
- end
- else begin
- nextState <= Error;
- end
- Open:
- if (vehiclePasses) begin
- nextState <= Closed;
- gateOpen <= 0;
- tollCollected <= 0;
- end
- else begin
- nextState <= Open;
- end
- Error:
- nextState <= Error;
- endcase
- end
- // State update
- always @(posedge vehicleApproaches or posedge rfidDetected or posedge sufficientBalance) begin
- if (currentState != nextState) begin
- currentState <= nextState;
- end
- end
- endmodule
Advertisement
Add Comment
Please, Sign In to add comment