基本實驗7       State machine

 

 

這是一個簡單的State machine

 

程式設計者可以了解Mealy Output和Moore Output的特性

 

程式設計者可以練習實用的一個小State machine: oneshot產生器

 

 

 

--   tog

 

toggle

 

 

VHDL : tog.vhd

Verilog : tog.v

 

LIBRARY ieee;

USE ieee.std_logic_1164.all;

 

ENTITY tog IS

PORT

(

      mclk,en,ai : IN STD_LOGIC;

      pp,qq        : OUT STD_LOGIC

);

END tog;

 

ARCHITECTURE a1 OF tog IS

SIGNAL ss : STD_LOGIC;

BEGIN

 

PROCESS(mclk)

BEGIN

IF mclk'EVENT AND mclk='1' THEN

      IF ss='0' THEN

              qq<='0'; pp<='0';

              IF en='1' THEN ss<='1';

              ELSE ss<='0'; END IF;

      ELSE

              qq<='1'; pp<=ai;

              IF en='1' THEN ss<='0';

              ELSE ss<='1'; END IF;

      END IF;

END IF;

END PROCESS;

 

END a1;

 

 

module tog

(

      mclk,en,ai,

      pp,qq

);

input mclk,en,ai;

output pp,qq;

 

reg ss,pp,qq;

 

always @(posedge mclk)

begin

if(~ss)

      begin

      qq=1'b0; pp=1'b0;

      if(en) ss=1'b1;

      else ss=1'b0;

      end

else

      begin

      qq=1'b1; pp=ai;

      if(en) ss=1'b0;

      else ss=1'b1;

      end

end

 

endmodule

 

 

 

 

    

 

 

 

 

 

 

 --    oneshot

 

 

VHDL : oneshot.vhd

Verilog : oneshot.v

 

LIBRARY ieee;

USE ieee.std_logic_1164.all;

 

ENTITY oneshot IS

PORT

(

      mclk,di      : IN STD_LOGIC;

      qq     : OUT STD_LOGIC

);

END oneshot;

 

ARCHITECTURE a1 OF oneshot IS

SIGNAL ss : STD_LOGIC_VECTOR(1 DOWNTO 0);

BEGIN

 

PROCESS(mclk)

BEGIN

IF mclk'EVENT AND mclk='1' THEN

      CASE ss IS

      WHEN "00" => IF di='1' THEN ss<="01"; END IF;

      WHEN "01" => ss<="10";

      WHEN "10" => IF di='0' THEN ss<="00"; END IF;

      WHEN OTHERS => ss<="00";     

      END CASE;

END IF;

END PROCESS;

 

qq<=ss(0);

 

END a1;

 

 

module oneshot

(

     mclk,di,

     qq

);

 

input mclk,di;

output qq;

 

reg[1:0] ss;

 

always @(posedge mclk)

begin

case(ss)

2'b00 : if(di) ss<=2'b01;

2'b01 : ss<=2'b10;

2'b10 : if(~di) ss<=2'b00;

default : ss<=2'b00;

endcase

end

 

assign qq=ss[0];

 

endmodule

 

 

 

 

 

 

 

 

 

 

 

 

文章標籤
全站熱搜
創作者介紹
創作者 zeppe 的頭像
zeppe

ZEPPE

zeppe 發表在 痞客邦 留言(0) 人氣(232)