状态机,和非状态机的差别
本帖最后由 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; 状态机,和非状态机的差别 状态机,和非状态机的差别
页:
[1]