前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一周掌握 FPGA VHDL Day 4

一周掌握 FPGA VHDL Day 4

作者头像
FPGA技术江湖
发布2020-12-30 14:53:22
3030
发布2020-12-30 14:53:22
举报
文章被收录于专栏:FPGA技术江湖FPGA技术江湖
大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分。大侠可以关注FPGA技术江湖,在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢。

今天给大侠带来的是一周掌握 FPGA VHDL Day 4,今天开启第四天,带来状态机在VHDL中的实现。下面咱们废话就不多说了,一起来看看吧。每日十分钟,坚持下去,量变成质变。

VHDL语言

四、状态机在VHDL中的实现

4.1 Moore 状态机的VHDL描述

输出仅取决于其所处的状态。

代码语言:javascript
复制
LIBRARY IEEE;USE IEEE.Std_ Logic_1164.ALL;ENTITY Moore IS
PORT
( Reset, Clock, DIN :IN Std_Logic;
DOUT:OUT Std_Logic_Vetor(2 DOWNTO 0)); 
END;
ARCHITECTURE Mooremachine OF Moore IS
TYPE State_type IS (S0,S1,S2,S3);--定义State_type为枚举型数据类型 SIGNAL State:State_type;BEGIN
Change_State: PROCESS (Reset, Clock) --时序逻辑进程
BEGIN
IF Reset=‘1’ THEN 
State<=S0;
代码语言:javascript
复制
ELSEIF rising_edge(Clock) THEN
    CASE State IS
        WHEN S0=〉IF DIN=‘1’ THEN State<=S1;END IF;
        WHEN S1=〉IF DIN=‘1’ THEN State<=S2;END IF;
        WHEN S2=〉IF DIN=‘1’ THEN State<=S3;END IF;
        WHEN S3=〉IF DIN=‘1’ THEN State<=S0;
    ELSE State<=S1;
    END IF ;
    END CASE;
    END IF;
END PROCESS;
--定义输出进程,组合逻辑
    Output_Process:
    PROCESS(State) BEGIN
        CASE State IS 
            WHEN S0=>DOUT <=“001”;
            WHEN S1=>DOUT <=“011”;
            WHEN S2=>DOUT <=“101”;
            WHEN S3=>DOUT <=“111”;
        END CASE;
    END PROCESS;
END;

仿真波形图:

时钟同步Moore状态机结构图:

代码语言:javascript
复制
LIBRARY IEEE;USE IEEE.Std_ Logic_1164.ALL;ENTITY Moore IS
PORT
( Reset,Clock, DIN :in Std_Logic;
DOUT:out Std_Logic_Vetor(2 DOWNTO 0) );
END;
ARCHITECTURE Mooremachine OF Moore IS
TYPE State_type IS (S0,S1,S2,S3);
SIGNAL PresentState, NextState :State_type;--定义状态转换信号
  BEGIN
    State_Reg: PROCESS (Reset, Clock) --状态寄存器 
      BEGIN
        IF Reset=‘1’ THEN --异步复位 
          PresentState<=S0;
          ELSEIF rising_edge(Clock) THEN
          PresentState<=NextState;--时钟上升沿,转换至下一状态
        END IF;
END PROCESS;
代码语言:javascript
复制
Change_State:PROCESS (PresentState,DIN) --组合逻辑进程
BEGIN
CASE Present State IS 
WHEN S0=〉if DIN=‘1’ then NextState<=S1;
else NextState<=S0;
end if;
DOUT <=“001”;
WHEN S1=〉if DIN=‘1’ then NextState<=S2;
else NextState<=S1;
end if ;
DOUT <=“011”;
WHEN S2=〉if DIN=‘1’ then NextState<=S3;else NextState<=S2;
end if ;DOUT <=“101”;
WHEN S3=〉if DIN=‘1’ then NextState<=S0;
else NextState<=S1;
end if ;DOUT <=“111”;
END CASE;
END PROCESS;
END;

仿真波形图:

4.2 Mealy 状态机的VHDL描述

输出由当前状态与输入共同决定。

代码语言:javascript
复制
LIBRARY IEEE;
USE IEEE.Std_ Logic_1164.ALL;
ENTITY MealyMachine IS
PORT
( Reset ,Clock,DIN:IN Std_Logic;
DOUT:OUT Std_Logic_Vetor(2 DOWNTO 0)
);
END;
ARCHITECTURE Statemachine OF MealyMachine IS
TYPE State_type IS (S0,S1,S2,S3);
SIGNAL State:State_type;
BEGIN
Change_State: PROCESS (Reset,Clock)
BEGIN
IF Reset=‘1’ THEN 
State<=S0;
ELSIF rising_edge(Clock) THEN
CASE State IS
WHEN S0=〉IF DIN=‘1’ THEN State<=S1;END IF; 
WHEN S1=〉IF DIN=‘1’ THEN State<=S2;END IF; 
WHEN S2=〉IF DIN=‘1’ THEN State<=S3;END IF; 
WHEN S3=〉IF DIN=‘1’ THEN State<=S0;
ELSE State<=S1; END IF ; 
END CASE; 
END IF; 
END 
PROCESS;Output_Process:PROCESS(State,DIN)
BEGIN
CASE State IS 
WHEN S0=>IF DIN=‘0’ THEN DOUT <=“000”;
ELSE DOUT<=“001”;END IF;WHEN S1=>IF DIN=‘0’ THEN DOUT <=“010”;
ELSE DOUT<=“011”;END IF;WHEN S2=> IF DIN=‘0’ THEN DOUT <=“100”;
ELSE DOUT<=“101”;END IF;WHEN S3=> IF DIN=‘0’ THEN DOUT <=“110”;
ELSE DOUT<=“111”;END IF;
END CASE;
END PROCESS;
END;

仿真波形图:

4.3 状态机的容错设计

主要针对未定义状态(剩余状态)

  • 单独设计一个状态(ERROR),用以处理状态机出错的情况, 用 WHEN OTHERS=>State<=Error; 使状态机从未定义的状态跳转到处理出错情况的状态;
  • 直接回复到其他已设定的状态。

4.4 状态机设计与寄存器

  • 对于所有可能的输入条件,当进程中的输出信号如果没有被完 全地与之对应指定,此信号将自动被指定,即在未列出的条件下 保持原值,这意味着引入了寄存器。
  • 在状态机中,如果存在一个或更多的状态没有被明确指定转换方式,或者对于状态机中的状态值没有规定所有的输出值,就可能引入寄存器。

Day 4 就到这里,Day 5 继续开始常用电路的VHDL程序。

END

后续会持续更新,带来Vivado、 ISE、Quartus II 、candence等安装相关设计教程,学习资源、项目资源、好文推荐等,希望大侠持续关注。

大侠们,江湖偌大,继续闯荡,愿一切安好,有缘再见!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FPGA技术江湖 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档