Générateur trames et bit_0,1_dcc code ok
This commit is contained in:
parent
14cffee155
commit
0b57bc4987
|
@ -0,0 +1,81 @@
|
||||||
|
library ieee;
|
||||||
|
use ieee.std_logic_1164.all;
|
||||||
|
|
||||||
|
entity dcc_bit_0 is
|
||||||
|
port(
|
||||||
|
reset : in std_logic;
|
||||||
|
clk_100MHz : in std_logic;
|
||||||
|
clk_1MHz : in std_logic;
|
||||||
|
go : in std_logic;
|
||||||
|
fin : out std_logic;
|
||||||
|
dcc_0 : out std_logic
|
||||||
|
);
|
||||||
|
end dcc_bit_0;
|
||||||
|
|
||||||
|
|
||||||
|
architecture behaviour of dcc_bit_0 is
|
||||||
|
type state is (idle, out_0, out_1);
|
||||||
|
signal cs, fs : state;
|
||||||
|
signal inc_cpt : std_logic;
|
||||||
|
signal cpt : integer range 0 to 200;
|
||||||
|
signal out_value : std_logic := '0';
|
||||||
|
begin
|
||||||
|
dcc_0 <= out_value;
|
||||||
|
|
||||||
|
--MAE
|
||||||
|
process(clk_100MHz, reset)
|
||||||
|
begin
|
||||||
|
if reset = '1' then fs <= idle;
|
||||||
|
elsif rising_edge(clk_100MHz) then
|
||||||
|
|
||||||
|
if cs = idle then
|
||||||
|
|
||||||
|
fin <= '0';
|
||||||
|
out_value <= '0';
|
||||||
|
|
||||||
|
if go = '1' then
|
||||||
|
inc_cpt <= '1';
|
||||||
|
fs <= out_0;
|
||||||
|
end if;
|
||||||
|
|
||||||
|
elsif cs = out_0 then
|
||||||
|
|
||||||
|
out_value <= '0';
|
||||||
|
|
||||||
|
if cpt > 99 then fs <= out_1;
|
||||||
|
end if;
|
||||||
|
|
||||||
|
elsif cs = out_1 then
|
||||||
|
|
||||||
|
out_value <= '1';
|
||||||
|
|
||||||
|
if cpt > 199 then
|
||||||
|
fs <= idle;
|
||||||
|
fin <= '1';
|
||||||
|
inc_cpt <= '0';
|
||||||
|
end if;
|
||||||
|
|
||||||
|
end if;
|
||||||
|
cs <= fs;
|
||||||
|
end if;
|
||||||
|
|
||||||
|
end process;
|
||||||
|
|
||||||
|
--Compteur de Temporisation
|
||||||
|
process(clk_1MHz, reset)
|
||||||
|
begin
|
||||||
|
if reset = '1' then
|
||||||
|
|
||||||
|
cpt <= 0;
|
||||||
|
|
||||||
|
elsif rising_edge(clk_1MHz) then
|
||||||
|
|
||||||
|
if inc_cpt = '1' then
|
||||||
|
cpt <= cpt + 1;
|
||||||
|
end if;
|
||||||
|
|
||||||
|
end if;
|
||||||
|
end process;
|
||||||
|
|
||||||
|
|
||||||
|
end behaviour;
|
|
@ -0,0 +1,81 @@
|
||||||
|
library ieee;
|
||||||
|
use ieee.std_logic_1164.all;
|
||||||
|
|
||||||
|
entity dcc_bit_1 is
|
||||||
|
port(
|
||||||
|
reset : in std_logic;
|
||||||
|
clk_100MHz : in std_logic;
|
||||||
|
clk_1MHz : in std_logic;
|
||||||
|
go : in std_logic;
|
||||||
|
fin : out std_logic;
|
||||||
|
dcc_1 : out std_logic
|
||||||
|
);
|
||||||
|
end dcc_bit_1;
|
||||||
|
|
||||||
|
|
||||||
|
architecture behaviour of dcc_bit_1 is
|
||||||
|
type state is (idle, out_0, out_1);
|
||||||
|
signal cs, fs : state;
|
||||||
|
signal inc_cpt : std_logic;
|
||||||
|
signal cpt : integer range 0 to 126;
|
||||||
|
signal out_value : std_logic := '0';
|
||||||
|
begin
|
||||||
|
dcc_1 <= out_value;
|
||||||
|
|
||||||
|
--MAE
|
||||||
|
process(clk_100MHz, reset)
|
||||||
|
begin
|
||||||
|
if reset = '1' then fs <= idle;
|
||||||
|
elsif rising_edge(clk_100MHz) then
|
||||||
|
|
||||||
|
if cs = idle then
|
||||||
|
|
||||||
|
fin <= '0';
|
||||||
|
out_value <= '0';
|
||||||
|
|
||||||
|
if go = '1' then
|
||||||
|
inc_cpt <= '1';
|
||||||
|
fs <= out_0;
|
||||||
|
end if;
|
||||||
|
|
||||||
|
elsif cs = out_0 then
|
||||||
|
|
||||||
|
out_value <= '0';
|
||||||
|
|
||||||
|
if cpt > 57 then fs <= out_1;
|
||||||
|
end if;
|
||||||
|
|
||||||
|
elsif cs = out_1 then
|
||||||
|
|
||||||
|
out_value <= '1';
|
||||||
|
|
||||||
|
if cpt > 125 then
|
||||||
|
fs <= idle;
|
||||||
|
fin <= '1';
|
||||||
|
inc_cpt <= '0';
|
||||||
|
end if;
|
||||||
|
|
||||||
|
end if;
|
||||||
|
cs <= fs;
|
||||||
|
end if;
|
||||||
|
|
||||||
|
end process;
|
||||||
|
|
||||||
|
--Compteur de Temporisation
|
||||||
|
process(clk_1MHz, reset)
|
||||||
|
begin
|
||||||
|
if reset = '1' then
|
||||||
|
|
||||||
|
cpt <= 0;
|
||||||
|
|
||||||
|
elsif rising_edge(clk_1MHz) then
|
||||||
|
|
||||||
|
if inc_cpt = '1' then
|
||||||
|
cpt <= cpt + 1;
|
||||||
|
end if;
|
||||||
|
|
||||||
|
end if;
|
||||||
|
end process;
|
||||||
|
|
||||||
|
|
||||||
|
end behaviour;
|
|
@ -0,0 +1,43 @@
|
||||||
|
library ieee;
|
||||||
|
use ieee.std_logic_1164.all;
|
||||||
|
|
||||||
|
entity dcc_bit_1_tb is
|
||||||
|
end dcc_bit_1_tb;
|
||||||
|
|
||||||
|
|
||||||
|
architecture tb of dcc_bit_1_tb is
|
||||||
|
|
||||||
|
constant ClockPeriod1 : time := 1 us;
|
||||||
|
constant ClockPeriod100 : time := 10 ns;
|
||||||
|
|
||||||
|
signal reset : std_logic := '1';
|
||||||
|
signal go : std_logic := '0'; --inputs
|
||||||
|
signal clk_100MHz : std_logic := '0';
|
||||||
|
signal clk_1MHz : std_logic := '0'; --clocks
|
||||||
|
signal fin, dcc_1 : std_logic; --outputs
|
||||||
|
|
||||||
|
begin
|
||||||
|
uut : entity work.DCC_Bit_1 port map(
|
||||||
|
reset => reset,
|
||||||
|
clk_100MHz => clk_100Mhz,
|
||||||
|
clk_1MHz => clk_1MHz,
|
||||||
|
go => go,
|
||||||
|
fin => fin,
|
||||||
|
dcc_1 => dcc_1
|
||||||
|
);
|
||||||
|
|
||||||
|
clk_100MHz <= not clk_100MHz after ClockPeriod100 / 2;
|
||||||
|
clk_1MHz <= not clk_1MHz after ClockPeriod1 / 2;
|
||||||
|
|
||||||
|
process
|
||||||
|
begin
|
||||||
|
reset <= '0';
|
||||||
|
|
||||||
|
wait for 20 ns;
|
||||||
|
go <= '1';
|
||||||
|
wait for 30 ns;
|
||||||
|
go <= '0';
|
||||||
|
wait;
|
||||||
|
end process;
|
||||||
|
|
||||||
|
end tb;
|
|
@ -35,7 +35,7 @@ begin
|
||||||
--> Trame Marche Avant du Train d'Adresse i
|
--> Trame Marche Avant du Train d'Adresse i
|
||||||
if Interrupteur(7)='1' then
|
if Interrupteur(7)='1' then
|
||||||
|
|
||||||
Trame_DCC <= "1111111111111111111111" -- Préambule
|
Trame_DCC <= "11111111111111111111111" -- Préambule
|
||||||
& "0" -- Start Bit
|
& "0" -- Start Bit
|
||||||
& "00000010" -- Champ Adresse (adresse 2 sans raison particuliere )
|
& "00000010" -- Champ Adresse (adresse 2 sans raison particuliere )
|
||||||
& "0" -- Start Bit
|
& "0" -- Start Bit
|
||||||
|
@ -48,7 +48,7 @@ begin
|
||||||
--> Trame Marche Arrière du Train d'Adresse i
|
--> Trame Marche Arrière du Train d'Adresse i
|
||||||
elsif Interrupteur(6)='1' then
|
elsif Interrupteur(6)='1' then
|
||||||
|
|
||||||
Trame_DCC <= "1111111111111111111111" -- Préambule
|
Trame_DCC <= "11111111111111111111111" -- Préambule
|
||||||
& "0" -- Start Bit
|
& "0" -- Start Bit
|
||||||
& "00000010" -- Champ Adresse
|
& "00000010" -- Champ Adresse
|
||||||
& "0" -- Start Bit
|
& "0" -- Start Bit
|
||||||
|
@ -62,7 +62,7 @@ begin
|
||||||
--> Allumage des Phares du Train d'Adresse i
|
--> Allumage des Phares du Train d'Adresse i
|
||||||
elsif Interrupteur(5)='1' then
|
elsif Interrupteur(5)='1' then
|
||||||
|
|
||||||
Trame_DCC <= "1111111111111111111111" -- Préambule
|
Trame_DCC <= "11111111111111111111111" -- Préambule
|
||||||
& "0" -- Start Bit
|
& "0" -- Start Bit
|
||||||
& "00000010" -- Champ Adresse
|
& "00000010" -- Champ Adresse
|
||||||
& "0" -- Start Bit
|
& "0" -- Start Bit
|
||||||
|
@ -75,7 +75,7 @@ begin
|
||||||
--> Extinction des Phares du Train d'Adresse i
|
--> Extinction des Phares du Train d'Adresse i
|
||||||
elsif Interrupteur(4)='1' then
|
elsif Interrupteur(4)='1' then
|
||||||
|
|
||||||
Trame_DCC <= "1111111111111111111111" -- Préambule
|
Trame_DCC <= "11111111111111111111111" -- Préambule
|
||||||
& "0" -- Start Bit
|
& "0" -- Start Bit
|
||||||
& "00000010" -- Champ Adresse
|
& "00000010" -- Champ Adresse
|
||||||
& "0" -- Start Bit
|
& "0" -- Start Bit
|
||||||
|
@ -88,7 +88,7 @@ begin
|
||||||
--> Activation du Klaxon (Fonction F11) du Train d'Adresse i
|
--> Activation du Klaxon (Fonction F11) du Train d'Adresse i
|
||||||
elsif Interrupteur(3)='1' then
|
elsif Interrupteur(3)='1' then
|
||||||
|
|
||||||
Trame_DCC <= "1111111111111111111111" -- Préambule
|
Trame_DCC <= "11111111111111111111111" -- Préambule
|
||||||
& "0" -- Start Bit
|
& "0" -- Start Bit
|
||||||
& "00000010" -- Champ Adresse
|
& "00000010" -- Champ Adresse
|
||||||
& "0" -- Start Bit
|
& "0" -- Start Bit
|
||||||
|
@ -101,7 +101,7 @@ begin
|
||||||
--> Réamorçage du Klaxon (Fonction F11) du Train d'Adresse i
|
--> Réamorçage du Klaxon (Fonction F11) du Train d'Adresse i
|
||||||
elsif Interrupteur(2)='1' then
|
elsif Interrupteur(2)='1' then
|
||||||
|
|
||||||
Trame_DCC <= "1111111111111111111111" -- Préambule
|
Trame_DCC <= "11111111111111111111111" -- Préambule
|
||||||
& "0" -- Start Bit
|
& "0" -- Start Bit
|
||||||
& "00000010" -- Champ Adresse
|
& "00000010" -- Champ Adresse
|
||||||
& "0" -- Start Bit
|
& "0" -- Start Bit
|
||||||
|
@ -144,7 +144,7 @@ begin
|
||||||
--> Arrêt du Train d'Adresse i
|
--> Arrêt du Train d'Adresse i
|
||||||
else
|
else
|
||||||
|
|
||||||
Trame_DCC <= "1111111111111111111111" -- Préambule
|
Trame_DCC <= "11111111111111111111111" -- Préambule
|
||||||
& "0" -- Start Bit
|
& "0" -- Start Bit
|
||||||
& "00000010" -- Champ Adresse
|
& "00000010" -- Champ Adresse
|
||||||
& "0" -- Start Bit
|
& "0" -- Start Bit
|
||||||
|
@ -153,6 +153,8 @@ begin
|
||||||
& "01100010" -- Champ Contrôle
|
& "01100010" -- Champ Contrôle
|
||||||
& "1" ; -- Stop Bit
|
& "1" ; -- Stop Bit
|
||||||
|
|
||||||
|
end if;
|
||||||
|
|
||||||
end process;
|
end process;
|
||||||
|
|
||||||
end Behavioral;
|
end Behavioral;
|
||||||
|
|
Loading…
Reference in New Issue