summaryrefslogtreecommitdiff
path: root/pb_logique_seq.srcs/sources_1/imports/new/synchro_codec_v1.vhd
blob: ba6041edaf2d173c67fd5377c58df03e61b7b544 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
---------------------------------------------------------------------------------------------
--  synchro_codec_v1.vhd 
---------------------------------------------------------------------------------------------
--  Generation d'horloge et de signaux de synchronisation
---------------------------------------------------------------------------------------------
--  Université de Sherbrooke - Département de GEGI
--
--  Version         : 1.0
--  Nomenclature    : ref GRAMS
--  Date            : 30 octobre 2018, 7 novembre 2018, 4 janvier 2019, 24 janvier 2019, 10 décembre 2019
--  Auteur(s)       : Daniel Dalle
--  Technologie     : ZYNQ 7000 Zybo Z7-10 (xc7z010clg400-1)
--  Outils          : vivado 2018.2 64 bits
--
--------------------------------
--  Description
--------------------------------
-- Génération de signaux de synchronisation, incluant des "strobes"
-- (utilise un PLL)
-- Ref:
-- 7 Series Libraries Guide www.xilinx.com 418 UG953 (v2016.3) October 5, 2016
--   (pages 425 PLLE2_BASE)
--
-- revisions
-- mise a jour D Dalle 10 decembre 2019  v1 synchro_zybo_v1 nomenclature synchro_demo_codec_v4 devient synchro_zybo_v1
-- mise a jour D Dalle 24 janvier 2019   v4 strobe commentaires, élimination entrée reset
-- mise a jour D Dalle 7  janvier 2019   v3 strobe 1000Hz   validation / correction S_1Hz
-- mise a jour D Dalle 4  janvier 2019   v3 strobe 1000Hz
-- mise a jour D Dalle 27 decembre 2018  v3 tous les strobes sur 50 MHz
-- mise a jour D Dalle 17 decembre 2018 constantes horloges en Hz (pour coherence avec autres modules)
---------------------------------------------------------------------------------------------
--  À FAIRE:
---------------------------------------------------------------------------------------------

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.std_logic_arith.all;     -- requis pour les constantes  etc.
use IEEE.STD_LOGIC_UNSIGNED.ALL;  -- pour les additions dans les compteurs

Library UNISIM;
use UNISIM.vcomponents.all;

entity synchro_codec_v1 is
generic (cst_CLK_syst_Hz: integer := 100_000_000); -- valeur par defaut fréquence de clkm
    Port (
    sysclk       : in STD_LOGIC;    -- Entrée  horloge système  
                                    -- (typique 125 MHz (1/8 ns) ou 100  ( 1/10 ns))
    o_clk_0      : out  STD_LOGIC;  -- horloge via bufg 50 MHz  (20 ns)  
                                    ---  (sera pour clk_p, horloge)
    o_mclk       : out  STD_LOGIC;  -- horloge via bufg 12.389 MHz 
                                    -- (80,714 ns) (pour codec)
    o_stb_1000Hz : out  STD_LOGIC;  -- strobe durée 1/o_clk_0 sync sur 1000Hz
    o_stb_1Hz    : out  STD_LOGIC;  -- strobe durée 1/o_clk_0 sync sur  1Hz
    o_S_1Hz      : out  STD_LOGIC;  -- Signal temoin 1 Hz
    o_bclk       : out  STD_LOGIC;  -- horloge bit clk 
                                    -- (~ 12.289 MHz/4 soit 3,07225 MHz (325.49 ns) )
    o_reclrc     : out  STD_LOGIC   -- horloge record, play back, 
                                    -- sampling rate clock, left right channel 
                                    -- (~ 48 KHz (20,83 us))
    );
end synchro_codec_v1;




architecture Behavioral of synchro_codec_v1 is

  component synchro_zybo_v1 is
   generic (const_CLK_syst_Hz: integer := 100_000_000);  -- valeur par defaut de fréquence de clkm
       Port (
              sysclk         : in STD_LOGIC;    -- Entrée  horloge maitre  (typique 125 MHz (1/8 ns) ou 100  ( 1/10 ns))
              o_clk_0      : out  STD_LOGIC;  -- horloge via bufg 50.    MHz  (20 ns)
              o_clk_1      : out  STD_LOGIC;  -- horloge via bufg 12.389 MHz  (80,714 ns)
              o_stb_1000Hz : out  STD_LOGIC;  -- strobe durée 1/o_clk_0 sync sur 1000Hz
              o_stb_1Hz    : out  STD_LOGIC;  -- strobe durée 1/o_clk_0 sync sur  1Hz
              o_S_1Hz      : out  STD_LOGIC   -- Signal temoin 1 Hz
              );
   end component;

   component gen_clk_codec
      port  (
              i_rst     : in STD_LOGIC;     -- entree reset
              m_clk     : in STD_LOGIC;     -- Entrée  horloge maitre codec  (defaut 12.289 MHz  (81.374 ns) )
              o_bclk    : out  STD_LOGIC;   -- horloge bit clk (defaut 12.289 MHz / 4 soit 3,07225 MHz  (325.49 ns) )
              o_reclrc  : out  STD_LOGIC    -- horloge record, play back, sampling rate clock, left right channel (defaut 48 KHz (20,83 us))
             );
    end component;

--   component strb_gen is
--         Port (
--                CLK      : in STD_LOGIC;     -- Entrée  horloge maitre
--                i_don    : in  STD_LOGIC;   -- signal pour generer strobe au front montant
--                o_stb    : out  STD_LOGIC   -- strobe synchrone
--                );
--     end component;

   signal sysclk_int : std_logic;
   signal clk_0_int   : std_logic;
   signal clk_1_int   : std_logic;

   signal d_strobe_1000Hz_int : std_logic;
   signal d_strobe_1Hz_int    : std_logic;
   signal d_S1Hz_int    : std_logic;
   signal d_bclk_int : std_logic;
   signal d_lrc_int    : std_logic;
   signal d_T1Hz          : std_logic;
   -- signal reset           : std_logic;

begin

 inst_synchro : synchro_zybo_v1
  generic map (const_CLK_syst_Hz => cst_CLK_syst_Hz)
     port map (
      sysclk            => sysclk_int,
      o_clk_0           => clk_0_int,      -- 50 MHz
      o_clk_1           => clk_1_int,      -- master clk pour SSM2603
      o_stb_1000Hz      => d_strobe_1000Hz_int,
      o_stb_1Hz         => d_strobe_1Hz_int,
      o_S_1Hz           => d_S1Hz_int
      );

  -- generateur horloge echantillonnage (ADC sampling Rate) et transfert binaire
  inst_gen_clk_codec : gen_clk_codec
     Port map (
          i_rst     => '0',
          m_clk     => clk_1_int,
          o_bclk    => d_bclk_int,
          o_reclrc  => d_lrc_int
       );

---- Outils développement du code
----  buffer horloge 
--ClockBuf0: bufg
--port map(
--  I   => CLKOUT0,
--  O   => clk_0_interne
--  );
--o_clk_0  <= clk_0_interne ; --

--ClockBufer1: bufg
--    port map(
--        I    => CLKOUT1,
--        O    => clk_1_interne
--        );

sysclk_int   <= sysclk ; --
o_clk_0      <= clk_0_int ; --
o_mclk       <= clk_1_int ; --
o_S_1Hz      <= d_S1Hz_int;
o_stb_1000Hz <= d_strobe_1000Hz_int;
o_stb_1Hz    <= d_strobe_1Hz_int;

o_bclk    <= d_bclk_int;
o_reclrc    <= d_lrc_int;


end Behavioral;