实验报告 · 07 | 项目设计:状态机设计(1)(含代码)
课程:初级 | FPGA工程师基础启航(含板卡+证书) · 第二节 Verilog HDL语法篇
发布自课程云笔记 · FPGA 实验证据骨架
【同步·课后作业】
【作业要求】
1、简述状态机的含义,有限状态机的简称是什么?
状态寄存器+组合逻辑电路
FSM
2、简述有限状态机FSM分为哪两类?有何区别?有限状态机的状态编码主要有哪三种?FSM的三段式描述中,三段分别描述什么?
①米利型②摩尔型
①米利型FSM的输出由当前状态和输入信号共同决定,响应速度更快 ②摩尔型FSM的输出仅由当前状态决定,与输入无关,输出更稳定
①二进制编码②格雷码③独热码
①第一段:描述总状态的跳转(现态和次态) ②第二段:描述各个状态之间的跳转(现态、次态、条件) ③第三段:描述各个状态下的动作
3、状态机四要素主要包含 ____现态____ 、___条件____ 、_____动作___ 、___次态_____ 。
代码下载
module ZTJ_season(
input sysclk,
input rst_n,
output reg XX
);
//声明状态(独热码)
parameter IDLE=0000_1,//空闲态(不工作)
s1 =0001_0,//次态,春
s2 =0010_0,//夏
s3 =0100_0,//秋
s4 =1000_0;//冬
//声明现态次态
reg [4:0] cur_state,next_state;//现态次态的位宽根据选用的编码方式来
reg [3:0] month;
//三段式状态机第一段---->描述总状态(现态次态)的跳转----时序逻辑
always@(posedge sysclk)//同步复位(异步复位也可以)
if(!rst_n)//如果复位的时候
cur_state<=IDLE;//现态为初始状态IDLE
else
cur_state<=next_state;//
//三段式状态机第二段---->描述各个状态之间的跳转(现态,次态,条件),
//组合逻辑,(*)下出现的所有敏感信号,如果不用(*)代替去写(一个一个),(现态,次态,条件)都要写满,丢失一个会出现锁存器,(电平(高低)触发,阻塞赋值)
always@(*)
if(!rst_n)
//给现态复值,多驱动(现象)
next_state=IDLE;//次态赋值IDLE
else
case(cur_state)//判断现态
IDLE:next_state=s1;//现态为IDLE
s1:begin
if(month==5)//如果月份为5
next_state=s2;//次态跳转到s2状态
else
next_state=s1;//次态保持s1状态
end
s2:begin
if(month==8)//如果月份为8
next_state=s3;//次态跳转到s3状态
else
next_state=s2;//次态保持s2状态
end
s3:begin
if(month==11)//如果月份为5
next_state=s4;//次态跳转到s4状态
else
next_state=s3;//次态保持s3状态
end
s4:begin
if(month==2)//如果月份为5
next_state=s1;//次态跳转到s1状态
else
next_state=s4;//次态保持s4状态
end
default:next_state=IDLE;// 未定义条件时强制跳转至IDLE
endcase
//三段式状态机第三段---->描述各个状态下的动作(时序逻辑)
always@(posedge sysclk)
if(!rst_n)//如果复位
XX<=0;//XX赋值无(0)
else
case(cur_state)
IDLE:XX<=0;//初始值为0
s1:XX<=1;//现象:开花
s2:XX<=2;//现象:禅明
s3:XX<=3;//现象:落叶
s4:XX<=1;//现象:下雪
default:XX<=0;//未定义条件时为0;
endcase
endmodule【我的做法】
【结果/时序图/实验现象(可视频)】
【FPGA·实验证据】
【实验目标】
本节要验证什么?预期现象是什么?
【波形/截图】
用工具栏插入波形图、仿真界面或示波器照片
【仿真 log】
粘贴关键仿真输出或报错原文
【上板现象】
板卡现象、按键/数码管/接口实测结果
【结论与待改】
结论、坑点与下一步修改
评论 0