eFEX firmware
1.7.3
ATLAS l1-calo - electron and tau feature extraction firmware for eFEX boards
Back to eFEX documentation
Infrastructure
control_fpga
src
clocks
clocks_7s_extphy.vhd
1
-- clocks_7s_extphy
2
--
3
-- Generates a 125MHz ethernet clock and 31MHz ipbus clock from the 200MHz reference
4
-- Also an unbuffered 200MHz clock for IO delay calibration block
5
-- Includes reset logic for ipbus
6
--
7
-- Dave Newbold, April 2011
8
--
9
-- Updated for eFEX to use 125MHz reference and produce buffered 200MHz clock
10
-- and soft reset now mapped to 125 MHz domain
11
--
12
-- $Id$
13
14
library
ipbus_lib
;
15
use
ipbus_lib.all
;
16
17
library
ieee
;
18
use
ieee.std_logic_1164.
all
;
19
use
ieee.numeric_std.
all
;
20
library
unisim
;
21
use
unisim.VComponents.
all
;
22
23
entity
clocks_7s_extphy
is
24
port
(
25
sysclk_p
:
in
std_logic
;
26
sysclk_n
:
in
std_logic
;
27
clko_125
:
out
std_logic
;
28
clko_200
:
out
std_logic
;
29
clko_ipb
:
out
std_logic
;
30
locked
:
out
std_logic
;
31
nuke
:
in
std_logic
:=
'
0
'
;
32
soft_rst
:
in
std_logic
:=
'
0
'
;
33
rsto_125
:
out
std_logic
;
34
rsto_ipb
:
out
std_logic
;
35
rsto_ipb_ctrl
:
out
std_logic
;
36
onehz
:
out
std_logic
37
)
;
38
39
end
clocks_7s_extphy
;
40
41
architecture
rtl
of
clocks_7s_extphy
is
42
43
signal
dcm_locked
,
sysclk
,
clk_200
,
clk_ipb_i
,
clk_125_i
,
clkfb
,
clk_ipb_b
,
clk_125_b
:
std_logic
;
44
signal
d17
,
d17_d
:
std_logic
;
45
signal
nuke_i
,
nuke_d
,
nuke_d2
:
std_logic
:=
'
0
'
;
46
signal
rst
,
srst
,
rst_ipb
,
rst_125
,
rst_ipb_ctrl
:
std_logic
:=
'
1
'
;
47
signal
rctr
:
unsigned
(
3
downto
0
)
:=
"0000"
;
48
49
begin
50
51
ibufgds0: IBUFGDS
port
map
(
52
i => sysclk_p,
53
ib => sysclk_n,
54
o => sysclk
55
)
;
56
57
bufg200: BUFG
port
map
(
58
i => clk_200,
59
o => clko_200
60
)
;
61
62
bufg125: BUFG
port
map
(
63
i => clk_125_i,
64
o => clk_125_b
65
)
;
66
67
clko_125
<=
clk_125_b
;
68
69
bufgipb: BUFG
port
map
(
70
i => clk_ipb_i,
71
o => clk_ipb_b
72
)
;
73
74
clko_ipb
<=
clk_ipb_b
;
75
76
mmcm: MMCME2_BASE
77
generic
map
(
78
clkfbout_mult_f =>
8.0
,
79
clkout1_divide =>
8
,
80
clkout2_divide =>
32
,
81
clkout3_divide =>
5
,
82
clkin1_period =>
8.0
83
)
84
port
map
(
85
clkin1 => sysclk,
86
clkfbin => clkfb,
87
clkfbout => clkfb,
88
clkout1 => clk_125_i,
89
clkout2 => clk_ipb_i,
90
clkout3 => clk_200,
91
locked => dcm_locked,
92
rst => '0',
93
pwrdwn => '0'
94
)
;
95
96
clkdiv:
entity
ipbus_lib.ipbus_clock_div
97
port
map
(
98
clk => sysclk,
99
d17 => d17,
100
d28 => onehz
101
)
;
102
103
process
(sysclk)
104
begin
105
if
rising_edge
(
sysclk
)
then
106
d17_d
<=
d17
;
107
if
d17
=
'
1
'
and
d17_d
=
'
0
'
then
108
rst
<=
nuke_d2
or
not
dcm_locked
;
109
nuke_d
<=
nuke_i
;
-- Time bomb (allows return packet to be sent)
110
nuke_d2
<=
nuke_d
;
111
end
if
;
112
end
if
;
113
end
process
;
114
115
locked
<=
dcm_locked
;
116
117
process
(clk_ipb_b)
118
begin
119
if
rising_edge
(
clk_ipb_b
)
then
120
rst_ipb
<=
rst
;
121
nuke_i
<=
nuke
;
122
end
if
;
123
end
process
;
124
125
rsto_ipb
<=
rst_ipb
;
126
127
process
(clk_ipb_b)
128
begin
129
if
rising_edge
(
clk_ipb_b
)
then
130
rst_ipb_ctrl
<=
rst
;
131
end
if
;
132
end
process
;
133
134
rsto_ipb_ctrl
<=
rst_ipb_ctrl
;
135
136
srst
<=
'
1
'
when
rctr
/=
"0000"
else
'
0
'
;
137
138
process
(clk_125_b)
139
begin
140
if
rising_edge
(
clk_125_b
)
then
141
rst_125
<=
rst
or
srst
;
142
if
srst
=
'
1
'
or
soft_rst
=
'
1
'
then
143
rctr
<=
rctr
+
1
;
144
end
if
;
145
end
if
;
146
end
process
;
147
148
rsto_125
<=
rst_125
;
149
150
end
rtl;
clocks_7s_extphy.rtl
Definition:
clocks_7s_extphy.vhd:41
clocks_7s_extphy
Definition:
clocks_7s_extphy.vhd:23
Generated on Tue Nov 11 2025 09:44:32 for eFEX firmware by
1.9.1