一周掌握 FPGA VHDL Day 4

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

 

 

 

 

 

VHDL语言

 

 

 

 

四、状态机在VHDL中的实现

4.1 Moore 状态机的VHDL描述

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

一周掌握 FPGA VHDL Day 4_第1张图片

LIBRARY IEEE;USE IEEE.Std_ Logic_1164.ALL;ENTITY Moore ISPORT( Reset, Clock, DIN :IN Std_Logic;DOUT:OUT Std_Logic_Vetor(2 DOWNTO 0)); END;ARCHITECTURE Mooremachine OF Moore ISTYPE State_type IS (S0,S1,S2,S3);--定义State_type为枚举型数据类型 SIGNAL State:State_type;BEGINChange_State: PROCESS (Reset, Clock) --时序逻辑进程BEGINIF Reset=‘1’ THEN State<=S0;

 

一周掌握 FPGA VHDL Day 4_第2张图片

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;

 

仿真波形图:

一周掌握 FPGA VHDL Day 4_第3张图片

 

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

一周掌握 FPGA VHDL Day 4_第4张图片

LIBRARY IEEE;USE IEEE.Std_ Logic_1164.ALL;ENTITY Moore ISPORT( Reset,Clock, DIN :in Std_Logic;DOUT:out Std_Logic_Vetor(2 DOWNTO 0) );END;ARCHITECTURE Mooremachine OF Moore ISTYPE 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;

 

一周掌握 FPGA VHDL Day 4_第5张图片

Change_State:PROCESS (PresentState,DIN) --组合逻辑进程BEGINCASE 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;

 

仿真波形图:

一周掌握 FPGA VHDL Day 4_第6张图片

 

 

 

 

 

4.2 Mealy 状态机的VHDL描述

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

一周掌握 FPGA VHDL Day 4_第7张图片

LIBRARY IEEE;USE IEEE.Std_ Logic_1164.ALL;ENTITY MealyMachine ISPORT( Reset ,Clock,DIN:IN Std_Logic;DOUT:OUT Std_Logic_Vetor(2 DOWNTO 0));END;ARCHITECTURE Statemachine OF MealyMachine ISTYPE State_type IS (S0,S1,S2,S3);SIGNAL State:State_type;BEGINChange_State: PROCESS (Reset,Clock)BEGINIF Reset=‘1’ THEN State<=S0;ELSIF rising_edge(Clock) THENCASE State ISWHEN 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)BEGINCASE 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;

 

仿真波形图:

一周掌握 FPGA VHDL Day 4_第8张图片

 

 

 

 

 

4.3 状态机的容错设计

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

  • 单独设计一个状态(ERROR),用以处理状态机出错的情况,

    用 WHEN OTHERS=>State<=Error;

    使状态机从未定义的状态跳转到处理出错情况的状态; 

  • 直接回复到其他已设定的状态。

 

 

 

 

 

 

4.4 状态机设计与寄存器

  • 对于所有可能的输入条件,当进程中的输出信号如果没有被完 全地与之对应指定,此信号将自动被指定,即在未列出的条件下 保持原值,这意味着引入了寄存器。

  • 在状态机中,如果存在一个或更多的状态没有被明确指定转换方式,或者对于状态机中的状态值没有规定所有的输出值,就可能引入寄存器。

 

 

 

 

 

 

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

你可能感兴趣的:(FPGA学习系列,fpga)