一.状态机
状态机类型:
状态机写法:
二.状态机+LED流水灯
一段式写法
一段式:
module fsm_led(
input clk,//时钟
input rst_n,//复位信号
output reg [3:0] led//4个LED灯
);
parameter T = 50_000_000; //变量
reg [1:0] cstate; //现态
//状态空间划分
localparam state_led0 = 0;
localparam state_led1 = 1;
localparam state_led2 = 2;
localparam state_led3 = 3;
reg [25:0] cnt = 0; //计时器
//计数器模块
always@(posedge clk or negedge rst_n)begin
if(!rst_n)
cnt <= 1'b0; //按下复位键,清零
else if(cnt == T -1) //计时达到最大值,清零
cnt <= 1'b0;
else
cnt <= cnt + 1'b1; //其余时间,计数器加一
end
always@(posedge clk or negedge rst_n)begin
if(!rst_n)
begin
cstate <= state_led0;
led <= 4'b0000; //复位信号来临,让led灯全灭,让现态为led0亮
end
else
case(cstate)
state_led0: begin
led <= 4'b0001; //led0亮
if(cnt == T - 1) //LED亮灯时间持续1s,然后改变当前状态为led1亮
cstate <= state_led1;
else
cstate <= cstate;
end
state_led1