machine d'éttas - arthur...

21
B B

Upload: others

Post on 10-Aug-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Machine d'éttas - Arthur Garnierarthurgarnier.fr/telecom/A2/S4/SCIN/CM/vhdl_main_20150318.pdf · Machines à état ni (Finite State Machines)Mémoires internes au FPGAProcesseur

Machines à état �ni (Finite State Machines) Mémoires internes au FPGA Processeur

Machines à état �ni (Finite State Machines)

Machine d'étatsExemples

� Coder en VHDL un détecteur de front montant enutilisant :

B une machine de MooreB une machine de Mealy

S. Jovanovi¢ et Y. Berviller • Télécom Nancy • Spéci�cation des CI • 18 mars 2016334

Page 2: Machine d'éttas - Arthur Garnierarthurgarnier.fr/telecom/A2/S4/SCIN/CM/vhdl_main_20150318.pdf · Machines à état ni (Finite State Machines)Mémoires internes au FPGAProcesseur

Machines à état �ni (Finite State Machines) Mémoires internes au FPGA Processeur

Machines à état �ni (Finite State Machines)

Edge detectorSolution

library ieee;

use ieee.std_logic_1164.all;

entity edge_detector1 is

port(

clk, reset: in std_logic;

strobe: in std_logic;

p1: out std_logic

);

end edge_detector1;

architecture moore_arch of edge_detector1 is

type state_type is (zero, edge, one);

signal state_reg, state_next: state_type;

begin

-- state register

process(clk,reset)

begin

if (reset='1') then

state_reg <= zero;

S. Jovanovi¢ et Y. Berviller • Télécom Nancy • Spéci�cation des CI • 18 mars 2016335

Page 3: Machine d'éttas - Arthur Garnierarthurgarnier.fr/telecom/A2/S4/SCIN/CM/vhdl_main_20150318.pdf · Machines à état ni (Finite State Machines)Mémoires internes au FPGAProcesseur

Machines à état �ni (Finite State Machines) Mémoires internes au FPGA Processeur

Machines à état �ni (Finite State Machines)

Edge detectorSolution

elsif (clk'event and clk='1') then

state_reg <= state_next;

end if;

end process;

-- next-state logic

process(state_reg,strobe)

begin

case state_reg is

when zero=>

if strobe= '1' then

state_next <= edge;

else

state_next <= zero;

end if;

when edge =>

if strobe= '1' then

state_next <= one;

else

state_next <= zero;

end if;

S. Jovanovi¢ et Y. Berviller • Télécom Nancy • Spéci�cation des CI • 18 mars 2016336

Page 4: Machine d'éttas - Arthur Garnierarthurgarnier.fr/telecom/A2/S4/SCIN/CM/vhdl_main_20150318.pdf · Machines à état ni (Finite State Machines)Mémoires internes au FPGAProcesseur

Machines à état �ni (Finite State Machines) Mémoires internes au FPGA Processeur

Machines à état �ni (Finite State Machines)

Edge detectorSolution

when one =>

if strobe= '1' then

state_next <= one;

else

state_next <= zero;

end if;

end case;

end process;

-- Moore output logic

p1 <= '1' when state_reg=edge else

'0';

end moore_arch;

S. Jovanovi¢ et Y. Berviller • Télécom Nancy • Spéci�cation des CI • 18 mars 2016337

Page 5: Machine d'éttas - Arthur Garnierarthurgarnier.fr/telecom/A2/S4/SCIN/CM/vhdl_main_20150318.pdf · Machines à état ni (Finite State Machines)Mémoires internes au FPGAProcesseur

Machines à état �ni (Finite State Machines) Mémoires internes au FPGA Processeur

Machines à état �ni (Finite State Machines)

Edge detectorSolution

� Machine d'états Moore sans la logique de sortie

architecture clever_assign_buf_arch of edge_detector1 is

constant zero: std_logic_vector(1 downto 0):= "00";

constant edge: std_logic_vector(1 downto 0):= "10";

constant one: std_logic_vector(1 downto 0) := "01";

signal state_reg,state_next: std_logic_vector(1 downto 0);

begin

-- state register

process(clk,reset)

begin

if (reset='1') then

state_reg <= zero;

elsif (clk'event and clk='1') then

state_reg <= state_next;

end if;

end process;

-- next-state logic

process(state_reg,strobe)

S. Jovanovi¢ et Y. Berviller • Télécom Nancy • Spéci�cation des CI • 18 mars 2016338

Page 6: Machine d'éttas - Arthur Garnierarthurgarnier.fr/telecom/A2/S4/SCIN/CM/vhdl_main_20150318.pdf · Machines à état ni (Finite State Machines)Mémoires internes au FPGAProcesseur

Machines à état �ni (Finite State Machines) Mémoires internes au FPGA Processeur

Machines à état �ni (Finite State Machines)

Edge detectorSolution

begin

case state_reg is

when zero=>

if strobe= '1' then

state_next <= edge;

else

state_next <= zero;

end if;

when edge =>

if strobe= '1' then

state_next <= one;

else

state_next <= zero;

end if;

when others =>

if strobe= '1' then

state_next <= one;

else

state_next <= zero;

end if;

S. Jovanovi¢ et Y. Berviller • Télécom Nancy • Spéci�cation des CI • 18 mars 2016339

Page 7: Machine d'éttas - Arthur Garnierarthurgarnier.fr/telecom/A2/S4/SCIN/CM/vhdl_main_20150318.pdf · Machines à état ni (Finite State Machines)Mémoires internes au FPGAProcesseur

Machines à état �ni (Finite State Machines) Mémoires internes au FPGA Processeur

Machines à état �ni (Finite State Machines)

Edge detectorSolution

end case;

end process;

-- Moore output logic

p1 <= state_reg(1);

end clever_assign_buf_arch;

S. Jovanovi¢ et Y. Berviller • Télécom Nancy • Spéci�cation des CI • 18 mars 2016340

Page 8: Machine d'éttas - Arthur Garnierarthurgarnier.fr/telecom/A2/S4/SCIN/CM/vhdl_main_20150318.pdf · Machines à état ni (Finite State Machines)Mémoires internes au FPGAProcesseur

Machines à état �ni (Finite State Machines) Mémoires internes au FPGA Processeur

Machines à état �ni (Finite State Machines)

Edge detectorSolution

� Machine d'états Moore avec la logique look-ahead

architecture look_ahead_arch of edge_detector1 is

type state_type is (zero, edge, one);

signal state_reg, state_next: state_type;

signal p1_reg, p1_next: std_logic;

begin

-- state register

process(clk,reset)

begin

if (reset='1') then

state_reg <= zero;

elsif (clk'event and clk='1') then

state_reg <= state_next;

end if;

end process;

-- output buffer

process(clk,reset)

begin

S. Jovanovi¢ et Y. Berviller • Télécom Nancy • Spéci�cation des CI • 18 mars 2016341

Page 9: Machine d'éttas - Arthur Garnierarthurgarnier.fr/telecom/A2/S4/SCIN/CM/vhdl_main_20150318.pdf · Machines à état ni (Finite State Machines)Mémoires internes au FPGAProcesseur

Machines à état �ni (Finite State Machines) Mémoires internes au FPGA Processeur

Machines à état �ni (Finite State Machines)

Edge detectorSolution

if (reset='1') then

p1_reg <= '0';

elsif (clk'event and clk='1') then

p1_reg <= p1_next;

end if;

end process;

-- next-state logic

process(state_reg,strobe)

begin

case state_reg is

when zero=>

if strobe= '1' then

state_next <= edge;

else

state_next <= zero;

end if;

when edge =>

if strobe= '1' then

state_next <= one;

else

S. Jovanovi¢ et Y. Berviller • Télécom Nancy • Spéci�cation des CI • 18 mars 2016342

Page 10: Machine d'éttas - Arthur Garnierarthurgarnier.fr/telecom/A2/S4/SCIN/CM/vhdl_main_20150318.pdf · Machines à état ni (Finite State Machines)Mémoires internes au FPGAProcesseur

Machines à état �ni (Finite State Machines) Mémoires internes au FPGA Processeur

Machines à état �ni (Finite State Machines)

Edge detectorSolution

state_next <= zero;

end if;

when one =>

if strobe= '1' then

state_next <= one;

else

state_next <= zero;

end if;

end case;

end process;

-- look-ahead output logic

p1_next <= '1' when state_next=edge else

'0';

-- output

p1 <= p1_reg;

end look_ahead_arch;

S. Jovanovi¢ et Y. Berviller • Télécom Nancy • Spéci�cation des CI • 18 mars 2016343

Page 11: Machine d'éttas - Arthur Garnierarthurgarnier.fr/telecom/A2/S4/SCIN/CM/vhdl_main_20150318.pdf · Machines à état ni (Finite State Machines)Mémoires internes au FPGAProcesseur

Machines à état �ni (Finite State Machines) Mémoires internes au FPGA Processeur

Machines à état �ni (Finite State Machines)

ArbitreIntroduction

S. Jovanovi¢ et Y. Berviller • Télécom Nancy • Spéci�cation des CI • 18 mars 2016344

Page 12: Machine d'éttas - Arthur Garnierarthurgarnier.fr/telecom/A2/S4/SCIN/CM/vhdl_main_20150318.pdf · Machines à état ni (Finite State Machines)Mémoires internes au FPGAProcesseur

Machines à état �ni (Finite State Machines) Mémoires internes au FPGA Processeur

Machines à état �ni (Finite State Machines)

ArbitreIntroduction

S. Jovanovi¢ et Y. Berviller • Télécom Nancy • Spéci�cation des CI • 18 mars 2016345

Page 13: Machine d'éttas - Arthur Garnierarthurgarnier.fr/telecom/A2/S4/SCIN/CM/vhdl_main_20150318.pdf · Machines à état ni (Finite State Machines)Mémoires internes au FPGAProcesseur

Machines à état �ni (Finite State Machines) Mémoires internes au FPGA Processeur

Machines à état �ni (Finite State Machines)

ArbitreSolution

library ieee;

use ieee.std_logic_1164.all;

use ieee.numeric_std.all;

entity arbiter2 is

port(

clk: in std_logic;

reset: in std_logic;

r: in std_logic_vector(1 downto 0);

g: out std_logic_vector(1 downto 0)

);

end arbiter2;

architecture fixed_prio_arch of arbiter2 is

type mc_state_type is (waitr, grant1, grant0);

signal state_reg, state_next: mc_state_type;

begin

-- state register

process(clk,reset)

begin

S. Jovanovi¢ et Y. Berviller • Télécom Nancy • Spéci�cation des CI • 18 mars 2016346

Page 14: Machine d'éttas - Arthur Garnierarthurgarnier.fr/telecom/A2/S4/SCIN/CM/vhdl_main_20150318.pdf · Machines à état ni (Finite State Machines)Mémoires internes au FPGAProcesseur

Machines à état �ni (Finite State Machines) Mémoires internes au FPGA Processeur

Machines à état �ni (Finite State Machines)

ArbitreSolution

if (reset='1') then

state_reg <= waitr;

elsif (clk'event and clk='1') then

state_reg <= state_next;

end if;

end process;

-- next-state and output logic

process(state_reg,r)

begin

g <= "00"; -- default values

case state_reg is

when waitr =>

if r(1)='1' then

state_next <= grant1;

elsif r(0)='1' then

state_next <= grant0;

else

state_next <= waitr;

end if;

when grant1 =>

S. Jovanovi¢ et Y. Berviller • Télécom Nancy • Spéci�cation des CI • 18 mars 2016347

Page 15: Machine d'éttas - Arthur Garnierarthurgarnier.fr/telecom/A2/S4/SCIN/CM/vhdl_main_20150318.pdf · Machines à état ni (Finite State Machines)Mémoires internes au FPGAProcesseur

Machines à état �ni (Finite State Machines) Mémoires internes au FPGA Processeur

Machines à état �ni (Finite State Machines)

ArbitreSolution

if (r(1)='1') then

state_next <= grant1;

else

state_next <= waitr;

end if;

g(1) <= '1';

when grant0 =>

if (r(0)='1') then

state_next <= grant0;

else

state_next <= waitr;

end if;

g(0) <= '1';

end case;

end process;

end fixed_prio_arch;

S. Jovanovi¢ et Y. Berviller • Télécom Nancy • Spéci�cation des CI • 18 mars 2016348

Page 16: Machine d'éttas - Arthur Garnierarthurgarnier.fr/telecom/A2/S4/SCIN/CM/vhdl_main_20150318.pdf · Machines à état ni (Finite State Machines)Mémoires internes au FPGAProcesseur

Machines à état �ni (Finite State Machines) Mémoires internes au FPGA Processeur

Machines à état �ni (Finite State Machines)

Arbitre 1

S. Jovanovi¢ et Y. Berviller • Télécom Nancy • Spéci�cation des CI • 18 mars 2016349

Page 17: Machine d'éttas - Arthur Garnierarthurgarnier.fr/telecom/A2/S4/SCIN/CM/vhdl_main_20150318.pdf · Machines à état ni (Finite State Machines)Mémoires internes au FPGAProcesseur

Machines à état �ni (Finite State Machines) Mémoires internes au FPGA Processeur

Machines à état �ni (Finite State Machines)

Arbitre 1Solution

architecture rotated_prio_arch of arbiter2 is

type mc_state_type is (waitr1, waitr0, grant1, grant0);

signal state_reg, state_next: mc_state_type;

begin

-- state register

process(clk,reset)

begin

if (reset='1') then

state_reg <= waitr1;

elsif (clk'event and clk='1') then

state_reg <= state_next;

end if;

end process;

-- next-state and output logic

process(state_reg,r)

begin

g <= "00"; -- default values

case state_reg is

when waitr1 =>

S. Jovanovi¢ et Y. Berviller • Télécom Nancy • Spéci�cation des CI • 18 mars 2016350

Page 18: Machine d'éttas - Arthur Garnierarthurgarnier.fr/telecom/A2/S4/SCIN/CM/vhdl_main_20150318.pdf · Machines à état ni (Finite State Machines)Mémoires internes au FPGAProcesseur

Machines à état �ni (Finite State Machines) Mémoires internes au FPGA Processeur

Machines à état �ni (Finite State Machines)

Arbitre 1Solution

if r(1)='1' then

state_next <= grant1;

elsif r(0)='1' then

state_next <= grant0;

else

state_next <= waitr1;

end if;

when waitr0 =>

if r(0)='1' then

state_next <= grant0;

elsif r(1)='1' then

state_next <= grant1;

else

state_next <= waitr0;

end if;

when grant1 =>

if (r(1)='1') then

state_next <= grant1;

else

state_next <= waitr0;

S. Jovanovi¢ et Y. Berviller • Télécom Nancy • Spéci�cation des CI • 18 mars 2016351

Page 19: Machine d'éttas - Arthur Garnierarthurgarnier.fr/telecom/A2/S4/SCIN/CM/vhdl_main_20150318.pdf · Machines à état ni (Finite State Machines)Mémoires internes au FPGAProcesseur

Machines à état �ni (Finite State Machines) Mémoires internes au FPGA Processeur

Machines à état �ni (Finite State Machines)

Arbitre 1Solution

end if;

g(1) <= '1';

when grant0 =>

if (r(0)='1') then

state_next <= grant0;

else

state_next <= waitr1;

end if;

g(0) <= '1';

end case;

end process;

end rotated_prio_arch;

S. Jovanovi¢ et Y. Berviller • Télécom Nancy • Spéci�cation des CI • 18 mars 2016352

Page 20: Machine d'éttas - Arthur Garnierarthurgarnier.fr/telecom/A2/S4/SCIN/CM/vhdl_main_20150318.pdf · Machines à état ni (Finite State Machines)Mémoires internes au FPGAProcesseur

Machines à état �ni (Finite State Machines) Mémoires internes au FPGA Processeur

Machines à état �ni (Finite State Machines)

Exemple d'utilisation sur la carteBouton poussoir automatique

On souhaite réaliser un système de comptage par boutonpoussoir qui devient automatique (à 24Hz : division par 221 del'horloge à 50MHz) si le bouton est maintenu plus de 1,34s(division par 226 de l'horloge à 50MHz)

S. Jovanovi¢ et Y. Berviller • Télécom Nancy • Spéci�cation des CI • 18 mars 2016353

Page 21: Machine d'éttas - Arthur Garnierarthurgarnier.fr/telecom/A2/S4/SCIN/CM/vhdl_main_20150318.pdf · Machines à état ni (Finite State Machines)Mémoires internes au FPGAProcesseur

Machines à état �ni (Finite State Machines) Mémoires internes au FPGA Processeur

Machines à état �ni (Finite State Machines)

Exemple d'utilisation sur la carteBouton poussoir automatique

S. Jovanovi¢ et Y. Berviller • Télécom Nancy • Spéci�cation des CI • 18 mars 2016354