current | nextState | |||
reset | input | state | output | state |
1 | - | - | 0 | OFF |
0 | 0 | OFF | 0 | OFF |
0 | 1 | OFF | 1 | ON |
0 | 0 | ON | 0 | OFF |
0 | 1 | ON | 1 | ON |
reset 값은 OFF 에서 시작.
output 은 input 과 서로 독립적이며 state 값을 따른다.
`timescale 1ns / 1ps // moore machine
module LED_FSM(
input clk,
input reset,
input i_ledswitch,
output reg o_led
);
parameter S_OFF = 1'b0, S_ON = 1'b1;
reg state = S_OFF, nextState;
// state register
always@(posedge clk, posedge reset) begin
if(reset) state <= S_OFF;
else state <= nextState;
end
// nextState logic
always@(i_ledswitch, state) begin
case(state)
S_OFF : begin if(i_ledswitch == 1'b1) nextState = S_ON; else nextState = S_OFF; end
S_ON : begin if(i_ledswitch == 1'b0) nextState = S_OFF; else nextState = S_ON; end
default : nextState = S_OFF;
endcase
end
//output logic
always@(state) begin
case(state)
S_OFF : begin o_led = 1'b0; end
S_ON : begin o_led = 1'b1; end
default : o_led = 1'b0;
endcase
end
endmodule
current | nextState | |||
reset | input | state | output | state |
1 | - | - | - | OFF |
0 | 1 | OFF | 1 | ON |
0 | 0 | OFF | 0 | OFF |
0 | 0 | ON | 0 | OFF |
0 | 1 | ON | 1 | ON |
reset 값은 OFF 에서 시작.
output 은 input 의 영향을 받는다.
`timescale 1ns / 1ps // mealy machine
module LED_FSM(
input clk,
input reset,
input i_ledswitch,
output reg o_led
);
parameter S_OFF = 1'b0, S_ON = 1'b1;
reg state = S_OFF, nextState;
// state register
always@(posedge clk, posedge reset) begin
if(reset) state <= S_OFF;
else state <= nextState;
end
// nextState logic
always@(i_ledswitch, state) begin
case(state)
S_OFF : begin if(i_ledswitch == 1'b1) nextState = S_ON; else nextState = S_OFF; end
S_ON : begin if(i_ledswitch == 1'b0) nextState = S_OFF; else nextState = S_ON; end
default : nextState = S_OFF;
endcase
end
//output logic
always@(i_ledswitch, state) begin
case(state)
S_OFF : begin if(i_ledswitch == 1'b1) o_led = 1'b1; else o_led = 1'b0; end
S_ON : begin if(i_ledswitch == 1'b0) o_led = 1'b0; else o_led = 1'b1; end
default : o_led = 1'b0;
endcase
end
endmodule
'[Harman] 반도체 설계 > Vivado' 카테고리의 다른 글
[Vivado] 07. Calculator 8bit, PB FSM StopWatch (0) | 2023.08.05 |
---|---|
[Vivado] 06. Calculator 8bit, FSM StopWatch 0.1s UpCount (0) | 2023.08.05 |
[Vivado] 04. FndController, Adder 8bit (0) | 2023.08.05 |
[Vivado] 03. Adder 8bit (0) | 2023.08.05 |
[Vivado] 02. FndController, Counter, DigitSplitter, clkDivider (0) | 2023.08.05 |