projet-fpga/MAE.vhd

95 lines
1.8 KiB
VHDL

library ieee;
use ieee.std_logic_1164.all;
entity MAE is
port(
clk : in std_logic;
reset : in std_logic;
fin_tempo : in std_logic;
fin_1 : in std_logic;
fin_0 : in std_logic;
tr_bit : in std_logic;
load : out std_logic;
shift : out std_logic;
start_tempo : out std_logic;
go_1 : out std_logic;
go_0 : out std_logic
);
end MAE;
architecture behaviour of MAE is
type state is (Start, LecReg, Send0, Send1, Tempo);
signal cs, fs : state;
--signal cpt : integer range 0 to 51 := 0;
begin
process(clk, reset)
variable cpt : INTEGER RANGE 0 TO 101;
begin
if reset = '1' then
fs <= Start;
load <= '0';
shift <= '0';
start_tempo <= '0';
go_0 <= '0';
go_1 <= '0';
cpt := 0;
elsif rising_edge(clk) then
if cs = Start then
load <= '1';
fs <= LecReg;
elsif cs = LecReg then
load <= '0';
if tr_bit = '1' then
fs <= Send1;
else
fs <= Send0;
end if;
shift <= '1';
cpt := cpt + 1;
elsif cs = Send0 then
shift <= '0';
go_0 <= '1';
if fin_0 = '1' then
go_0 <= '0';
if cpt >= 101 then -- on doit normalement en compter 51, mais ça marche pas par contre 101 c'est nickel
fs <= Tempo;
else
fs <= LecReg;
end if;
end if;
elsif cs = Send1 then
shift <= '0';
go_1 <= '1';
if fin_1 = '1' then
go_1 <= '0';
if cpt >= 101 then
fs <= Tempo;
else
fs <= LecReg;
end if;
end if;
elsif cs = Tempo then
start_tempo <= '1';
if fin_tempo = '1' then
start_tempo <= '0';
cpt := 0;
fs <= Start;
end if;
end if;
cs <= fs;
end if;
end process;
end behaviour;