软件:Quartus
语言:VHDL
代码功能:
计数状态机
1.功能描述
内容:状态机有三个状态,IDLE,S1和S2。在IDLE状态如果en=1,则跳到S1状态,否则保持不变;在S1状态时,统计en=1的次数,如果达到5次,则跳到S2状态,否则保持不变;在S2状态,统计en=1的次数,如果达到7次,则跳回到DLE状态,否则保持不变。(注:全部信号都是同步信号,即与时钟同步)(en可以是单周期脉冲,也可是多周期脉冲。
2.信号列表
ck:50MHz的工作时钟,输入。
en:1位,输入,状态转换信号,高电平有效。
state current:2位,输出,当前状态机的值。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1. 工程文件
2. 程序文件
3. 程序编译
4. 仿真图
部分代码展示:
LIBRARY?ieee; ???USE?ieee.std_logic_1164.all; ???USE?ieee.std_logic_unsigned.all; ENTITY?statemachine?IS ???PORT?( ??????clk????????????:?IN?STD_LOGIC;--时钟 ??????rst_n??????????:?IN?STD_LOGIC;--复位 ??????en?????????????:?IN?STD_LOGIC;--输入 ??????state_current??:?OUT?STD_LOGIC_VECTOR(1?DOWNTO?0)--状态值 ???); END?statemachine; ARCHITECTURE?behave?OF?statemachine?IS ???constant?IDLE?:?STD_LOGIC_VECTOR(1?DOWNTO?0):="00";?--?IDLE ???constant?S1?:?STD_LOGIC_VECTOR(1?DOWNTO?0):="01";??--S1 ???constant?S2?:?STD_LOGIC_VECTOR(1?DOWNTO?0):="10";??--S2 ???SIGNAL?state??:?STD_LOGIC_VECTOR(1?DOWNTO?0); ???SIGNAL?en_cnt?:?STD_LOGIC_VECTOR(3?DOWNTO?0)?:=?"0000"; BEGIN ???--en计数 ???PROCESS?(clk,?rst_n) ???BEGIN ??????IF?(rst_n?=?'0')?THEN en_cnt?<=?"0000";--复位 ??????ELSIF?(clk'EVENT?AND?clk?=?'1')?THEN ?????????IF?(state?=?S1)?THEN--S1状态计数 IF?(en_cnt?>=?"0101")?THEN--计数到5 en_cnt?<=?"0000"; ELSIF(en='1')THEN en_cnt?<=?en_cnt?+?"0001";--计数 END?IF; ?????????ELSIF?(state?=?S2)?THEN--S2状态计数 IF?(en_cnt?>=?"0111")?THEN--计数到7 en_cnt?<=?"0000"; ELSIF(en='1')THEN en_cnt?<=?en_cnt?+?"0001";--计数 END?IF; ?????????ELSE ????????????en_cnt?<=?"0000";--清零 ?????????END?IF; ??????END?IF; ???END?PROCESS;
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1002
阅读全文
563