module simple_fsm(
clk,
reset,
pi_money,
po_cola);
//---Ports declearation: generated by Robei---
input clk;
input reset;
input pi_money;
output po_cola;
wire clk;
wire reset;
wire pi_money;
reg po_cola;
//----Code starts here: integrated by Robei-----
//状态机
parameter IDLE = 3'b001;
parameter ONE = 3'b010;
parameter TWO = 3'b100;
//reg define
reg [2:0]state;
//时序逻辑--描述状态的转移
always @(posedge clk or negedge reset)
if(reset == 0)
state <= IDLE;
else begin
case (state)
IDLE: if(pi_money == 1'b1)
state <= ONE;
else state <= IDLE;
ONE: if(pi_money == 1'b1)
state <= TWO;
else state <= ONE;
TWO: if(pi_money == 1'b1)
state <= IDLE;
else state <= TWO;
default:state <= IDLE;
endcase
end
//时序逻辑--描述输出信号
always@(posedge clk or negedge reset)
if(reset == 0) begin
po_cola <= 0;
end
else if(state == TWO && pi_money == 1) begin
po_cola <= 1'b1; end
else begin
po_cola <= 1'b0;
end
endmodule //simple_fsm
module simple_fsm_tb();
reg clk;
reg reset;
reg pi_money;
wire po_cola;
//----Code starts here: integrated by Robei-----
initial
begin
clk = 1;
end
always#1 clk = ~clk;
initial begin
reset = 0;
pi_money = 0;
#1
reset = 1;
#2
pi_money = 1;
#4;
pi_money = 0;
#6
pi_money = 1;
#2
pi_money = 0;
#2
pi_money = 1;
#2
pi_money = 0;
$finish;
end
initial begin
$dumpfile ("D:/Robei_project/Robei_study_simple_fsm/simple_fsm_tb.vcd");
$dumpvars;
end
//---Module instantiation---
simple_fsm simple_fsm1(
.clk(clk),
.reset(reset),
.pi_money(pi_money),
.po_cola(po_cola));
endmodule //simple_fsm_tb