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;
|