• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

计数状态机设计VHDL代码Quartus仿真

08/18 08:52
797
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-240S01GI3U0.doc

共1个文件

名称:计数状态机设计VHDL代码Quartus仿真

软件:Quartus

语言:VHDL

代码功能:

计数状态机

1.功能描述

内容:状态机有三个状态,IDLE,S1和S2。在IDLE状态如果en=1,则跳到S1状态,否则保持不变;在S1状态时,统计en=1的次数,如果达到5次,则跳到S2状态,否则保持不变;在S2状态,统计en=1的次数,如果达到7次,则跳回到DLE状态,否则保持不变。(注:全部信号都是同步信号,即与时钟同步)(en可以是单周期脉冲,也可是多周期脉冲。

2.信号列表

ck:50MHz的工作时钟,输入。

rstn:系统复位信号,输入,低电平有效。

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

  • 2-240S01GI3U0.doc
    下载

相关推荐