HDL 发表于 2010-6-26 01:38:22

状态机,和非状态机的差别

本帖最后由 fpgaw 于 2010-6-28 01:13 编辑

状态机,和非状态机的差别
状态机的下降沿检测

Library IEEE;
Use      IEEE.Std_Logic_1164.All;

Entity OZT Is
Port (
      CLK : In Std_Logic;
      Rst : In Std_Logic;
      Din    : In Std_Logic;
      Dut : Out Std_Logic
      );
End OZT;

Architecture OZT_Arc Of OZT Is

Type State Is (ZZ,ZO,OZ,OO);
Signal Pres_S : State;

Begin

Process (Rst,Pres_S,Din,CLK)
Begin

If Rst='1' Then
    Pres_S<=ZZ;
    Dut<='0';

Elsif Clk'Event And Clk='0' Then
Case Pres_S Is
    When ZZ=>
      If Din='1' Then
      Pres_S<=Zo;
      Else
      Pres_S<=ZZ;
      End IF;
    When Zo=>
      If Din='1' Then
            Pres_S<=Oo;
      Else
            Pres_S<=OZ;
      End If;
    When OZ=>
      If Din ='1' Then
            Pres_S<=Zo;
      Else
            Pres_S<=ZZ;
      End If;
    When OO=>
      If Din ='1' Then
            Pres_S<=Oo;
      Else
            Pres_S<=OZ;
      End If;
    End CAse;
End If;

If Pres_S=OZ Then
    Dut<='1';
Else Dut<='0';
End If;

End Process;


End OZT_Arc;


没有使用状态机 的下降沿检测,
Library IEEE;
Use      IEEE.Std_Logic_1164.All;
Use      IEEE.Std_Logic_UnSigned.All;
Use   IEEE.Std_Logic_Arith.all;

Entity OZT Is
Port(
    CLK : In Std_Logic;
    Rst : In Std_Logic;
    Lod : Out Std_Logic;
    STSK : In Std_Logic);
End OZT;


Architecture OZT_Arc Of OZT Is

Signal Lot : STd_Logic_vector(0 To 1);

Begin

Process(Rst,CLk,Lot,sTSK)

Begin
If Rst='1' Then Lot<="00";

ElsIf Clk'Event And Clk='0' Then
Case Lot Is
When "00"=>
    If Stsk='1' Then Lot<="01";
    Else Lot<="00";
    End If;
When "01"=>
    If Stsk='1' Then Lot<="01";
    Else Lot<="10";
    End IF;
When "10"=>
    If Stsk='1' Then Lot<="01";
    Else Lot<="00";
    End IF;
When "11"=>
    If Stsk='1' Then Lot<="11";
    Else Lot<="10";
    End IF;
End Case;
End If;
End Process;

Lod<=(Not Lot(1)) And Lot(0);

End OZT_Arc;

大鹏 发表于 2020-7-1 17:24:42

状态机,和非状态机的差别

大鹏 发表于 2020-7-15 18:58:14

状态机,和非状态机的差别
页: [1]
查看完整版本: 状态机,和非状态机的差别