Design a finite state machine FSM that cycles through the la

Design a finite state machine (FSM) that cycles through the last 4 digits of your student ID in a loop. In your design there should be an input that changes the direction of the cycle. Each number of the ID should be displayed on the seven-segment display while the current state of the FSM should be displayed on its corresponding LED. Nonvalid states should keep all LEDs off. For Example, a particular student has the UTEP ID 80-210543. The state diagram and outputs for his design are as follows:

Draft the behavioral Verilog module for the FSM.

Solution


`timescale 1ns/1ns
module student_id_fsm (
                       clock,               //SYSTEM CLOCK
                       student_id,           //STUDENT ID
                       clockwise,           //DIRECTION
                       seven_segment_out,   //SEVENSEGMENT
                       four_bit_led       // LED INDICATION
);

//Port assignments
input clock;
input student_id;
input clockwise;

output seven_segment_out;
output four_bit_led;

//Port types
wire clock;
//integer student_id;
wire clockwise;

reg [6:0] seven_segment_out;
reg [3:0] four_bit_led;

//Temporary variables
integer temp_student_id;
integer state_0,state_1,state_2,state_3;
reg [6:0] seven_segment_state0, seven_segment_state1, seven_segment_state2, seven_segment_state3;
reg [3:0] four_bit_led0, four_bit_led1, four_bit_led2, four_bit_led3;
integer state_value;

always@(student_id) begin                           // LOGIC for the last 4 digits
       temp_student_id = student_id;
          state_3 = temp_student_id % 10;
       temp_student_id = temp_student_id / 10;
          state_2 = temp_student_id % 10;
       temp_student_id = temp_student_id / 10;
          state_1 = temp_student_id % 10;
       temp_student_id = temp_student_id / 10;
          state_0 = temp_student_id % 10;
end

always@(state_0) begin                           //LED pattern and seven segment for last digit
   four_bit_led0 = 4\'b0001;
case (state_0)
0: seven_segment_state0 = \'b1111110;
1: seven_segment_state0 = \'b0000110;
2: seven_segment_state0 = \'b1011011;
3: seven_segment_state0 = \'b1001111;
4: seven_segment_state0 = \'b0100111;
5: seven_segment_state0 = \'b1101101;
6: seven_segment_state0 = \'b1111101;
7: seven_segment_state0 = \'b1000110;
8: seven_segment_state0 = \'b1111111;
9: seven_segment_state0 = \'b1101111;
default: seven_segment_state0 = \'b0000000;
endcase
end

always@(state_1) begin                           //LED pattern and seven segment for digit at 10th place
   four_bit_led1 = 4\'b0010;
case (state_1)
0: seven_segment_state1 = \'b1111110;
1: seven_segment_state1 = \'b0000110;
2: seven_segment_state1 = \'b1011011;
3: seven_segment_state1 = \'b1001111;
4: seven_segment_state1 = \'b0100111;
5: seven_segment_state1 = \'b1101101;
6: seven_segment_state1 = \'b1111101;
7: seven_segment_state1 = \'b1000110;
8: seven_segment_state1 = \'b1111111;
9: seven_segment_state1 = \'b1101111;
default: seven_segment_state1 = \'b0000000;
endcase
end

always@(state_2) begin                         //LED pattern and seven segment for digit at 100th place
   four_bit_led2 = 4\'b0100;
case (state_2)
0: seven_segment_state2 = \'b1111110;
1: seven_segment_state2 = \'b0000110;
2: seven_segment_state2 = \'b1011011;
3: seven_segment_state2 = \'b1001111;
4: seven_segment_state2 = \'b0100111;
5: seven_segment_state2 = \'b1101101;
6: seven_segment_state2 = \'b1111101;
7: seven_segment_state2 = \'b1000110;
8: seven_segment_state2 = \'b1111111;
9: seven_segment_state2 = \'b1101111;
default: seven_segment_state2 = \'b0000000;
endcase
end

always@(state_3) begin                         //LED pattern and seven segment for digit at 1000th place
   four_bit_led3 = 4\'b1000;
case (state_3)
0: seven_segment_state3 = \'b1111110;
1: seven_segment_state3 = \'b0000110;
2: seven_segment_state3 = \'b1011011;
3: seven_segment_state3 = \'b1001111;
4: seven_segment_state3 = \'b0100111;
5: seven_segment_state3 = \'b1101101;
6: seven_segment_state3 = \'b1111101;
7: seven_segment_state3 = \'b1000110;
8: seven_segment_state3 = \'b1111111;
9: seven_segment_state3 = \'b1101111;
default: seven_segment_state3 = \'b0000000;
endcase
end

always@(posedge clock) begin                         //state transitions
   if(clockwise == 1) begin
       if(state_value == 3)
           state_value = 0;
       else
           state_value = state_value + 1;
   end
   else begin
       if(state_value == 0)
           state_value = 3;
       else
           state_value = state_value - 1;
   end
end

always@(state_value) begin                         //LED pattern and seven segment when each state
   case(state_value)
   0 : begin seven_segment_out = seven_segment_state0;
              four_bit_led = four_bit_led0;
       end
   1 : begin seven_segment_out = seven_segment_state1;
              four_bit_led = four_bit_led1;
       end
   2 : begin seven_segment_out = seven_segment_state2;
              four_bit_led = four_bit_led2;
       end
   2 : begin seven_segment_out = seven_segment_state3;
              four_bit_led = four_bit_led3;
       end
    endcase
end  


endmodule

Design a finite state machine (FSM) that cycles through the last 4 digits of your student ID in a loop. In your design there should be an input that changes the
Design a finite state machine (FSM) that cycles through the last 4 digits of your student ID in a loop. In your design there should be an input that changes the
Design a finite state machine (FSM) that cycles through the last 4 digits of your student ID in a loop. In your design there should be an input that changes the

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site