x393
1.0
FPGAcodeforElphelNC393camera
level_cross_clocks.v
Go to the documentation of this file.
1
39
`timescale 1ns/1ps
40
41
module
level_cross_clocks
#(
42
parameter
WIDTH
=
1
,
43
parameter
REGISTER
=
2
,
// number of registers (>=12)
44
parameter
FAST0
=
1'b0
,
45
parameter
FAST1
=
1'b0
46
)(
47
input
clk
,
48
input
[
WIDTH
-
1
:
0
]
d_in
,
49
output
[
WIDTH
-
1
:
0
]
d_out
50
);
51
generate
52
genvar
i
;
53
for
(
i
=
0
;
i
<
WIDTH
;
i
=
i
+
1
)
begin
:
level_cross_clock_block
54
if
(
REGISTER
<=
1
)
55
level_cross_clocks_ff_bit
#(.
FAST1
(
FAST1
))
level_cross_clocks_single_i
(
// just a single ff (if metastability is not a problem)
56
.
clk
(
clk
),
// input
57
.
d_in
(
d_in
[
i
]),
// input
58
.
d_out
(
d_out
[
i
])
// output
59
);
60
else
if
(
REGISTER
==
2
)
61
level_cross_clocks_sync_bit
#(.
FAST0
(
FAST0
),.
FAST1
(
FAST1
))
level_cross_clocks_sync_i
(
// classic 2-register synchronizer
62
.
clk
(
clk
),
// input
63
.
d_in
(
d_in
[
i
]),
// input
64
.
d_out
(
d_out
[
i
])
// output
65
);
66
else
67
level_cross_clocks_single_bit
#(
// >2 bits (first two only are synchronizer)
68
.
REGISTER
(
REGISTER
), .
FAST0
(
FAST0
), .
FAST1
(
FAST1
)
69
)
level_cross_clocks_single_i
(
70
.
clk
(
clk
),
// input
71
.
d_in
(
d_in
[
i
]),
// input
72
.
d_out
(
d_out
[
i
])
// output
73
);
74
end
75
endgenerate
76
endmodule
77
78
module
level_cross_clocks_single_bit
#(
79
parameter
REGISTER
=
3
,
// number of registers (>=3)
80
parameter
FAST0
=
1'b0
,
81
parameter
FAST1
=
1'b0
82
)(
83
input
clk
,
84
input
d_in
,
85
output
d_out
86
);
87
reg
[
REGISTER
-
3
:
0
]
regs
= {
REGISTER
-
2
{
FAST1
}};
88
wire
d_sync
;
// after a 2-bit synchronizer
89
wire
[
REGISTER
-
2
:
0
]
regs_next
= {
regs
,
d_sync
};
90
assign
d_out
=
regs
[
REGISTER
-
3
];
91
always
@ (
posedge
clk
)
begin
92
if
(
FAST0
)
regs
<= {
REGISTER
-
3
{
d_in
}} &
regs_next
[
REGISTER
-
3
:
0
];
93
else
if
(
FAST1
)
regs
<= {
REGISTER
-
3
{
d_in
}} |
regs_next
[
REGISTER
-
3
:
0
];
94
else
regs
<=
regs_next
[
REGISTER
-
3
:
0
];
// | d_in complains about widths mismatch
95
end
96
level_cross_clocks_sync_bit
#(.
FAST0
(
FAST0
),.
FAST1
(
FAST1
))
level_cross_clocks_sync_bit_i
(
97
.
clk
(
clk
),
// input
98
.
d_in
(
d_in
),
// input
99
.
d_out
(
d_sync
)
// output
100
);
101
endmodule
102
103
// Classic 2-bit (exactly) synchronizer
104
module
level_cross_clocks_sync_bit
#(
105
parameter
FAST0
=
1'b0
,
106
parameter
FAST1
=
1'b0
107
)(
108
input
clk
,
109
input
d_in
,
110
output
d_out
111
);
112
`ifndef
IGNORE_ATTR
113
(*
ASYNC_REG
=
"TRUE"
*)
114
`endif
115
reg
[
1
:
0
]
sync_zer
;
116
assign
d_out
=
sync_zer
[
1
];
117
always
@ (
posedge
clk
)
begin
118
if
(
FAST0
)
sync_zer
<= {
sync_zer
[
0
] &
d_in
,
d_in
};
119
else
if
(
FAST1
)
sync_zer
<= {
sync_zer
[
0
] |
d_in
,
d_in
};
120
else
sync_zer
<= {
sync_zer
[
0
],
d_in
};
121
end
122
endmodule
123
124
module
level_cross_clocks_ff_bit
#(
// just a single FF if REGISTER == 1 (if metastability is not a problem)
125
parameter
FAST1
=
1'b0
126
) (
127
input
clk
,
128
input
d_in
,
129
output
d_out
130
);
131
reg
d_out_r
=
FAST1
;
132
assign
d_out
=
d_out_r
;
133
always
@ (
posedge
clk
)
begin
134
d_out_r
<=
d_in
;
135
end
136
endmodule
137
138
139
level_cross_clocks
Definition:
level_cross_clocks.v:41
level_cross_clocks.10629d_out
[WIDTH-1:0] 10629d_out
Definition:
level_cross_clocks.v:49
level_cross_clocks_single_bit.10633clk
10633clk
Definition:
level_cross_clocks.v:83
level_cross_clocks.10625FAST0
10625FAST01'b0
Definition:
level_cross_clocks.v:44
level_cross_clocks.level_cross_clocks_ff_bit
level_cross_clocks_single_i level_cross_clocks_ff_bit[generate]
Definition:
level_cross_clocks.v:55
level_cross_clocks.10628d_in
[WIDTH-1:0] 10628d_in
Definition:
level_cross_clocks.v:48
level_cross_clocks_single_bit.10630REGISTER
10630REGISTER3
Definition:
level_cross_clocks.v:79
level_cross_clocks_sync_bit.10642d_in
10642d_in
Definition:
level_cross_clocks.v:109
level_cross_clocks.10627clk
10627clk
Definition:
level_cross_clocks.v:47
level_cross_clocks_sync_bit.10640FAST1
10640FAST11'b0
Definition:
level_cross_clocks.v:106
level_cross_clocks_sync_bit.10641clk
10641clk
Definition:
level_cross_clocks.v:108
level_cross_clocks_sync_bit.10639FAST0
10639FAST01'b0
Definition:
level_cross_clocks.v:105
level_cross_clocks_sync_bit.10644sync_zer
10644sync_zerreg[1:0]
Definition:
level_cross_clocks.v:115
level_cross_clocks.level_cross_clocks_single_bit
level_cross_clocks_single_i level_cross_clocks_single_bit[generate]
Definition:
level_cross_clocks.v:67
level_cross_clocks_single_bit.10634d_in
10634d_in
Definition:
level_cross_clocks.v:84
level_cross_clocks.10624REGISTER
10624REGISTER2
Definition:
level_cross_clocks.v:43
level_cross_clocks_ff_bit.10649d_out_r
10649d_out_rreg
Definition:
level_cross_clocks.v:131
level_cross_clocks.10626FAST1
10626FAST11'b0
Definition:
level_cross_clocks.v:45
level_cross_clocks_single_bit.level_cross_clocks_sync_bit
level_cross_clocks_sync_bit_i level_cross_clocks_sync_bit
Definition:
level_cross_clocks.v:96
level_cross_clocks_sync_bit.10643d_out
10643d_out
Definition:
level_cross_clocks.v:110
level_cross_clocks_single_bit.10636regs
10636regsreg[REGISTER-3:0]
Definition:
level_cross_clocks.v:87
level_cross_clocks.level_cross_clocks_sync_bit
level_cross_clocks_sync_i level_cross_clocks_sync_bit[generate]
Definition:
level_cross_clocks.v:61
level_cross_clocks_ff_bit.10645FAST1
10645FAST11'b0
Definition:
level_cross_clocks.v:125
level_cross_clocks_ff_bit.10646clk
10646clk
Definition:
level_cross_clocks.v:127
level_cross_clocks_single_bit.10638regs_next
10638regs_nextwire[REGISTER-2:0]
Definition:
level_cross_clocks.v:89
level_cross_clocks.10623WIDTH
10623WIDTH1
Definition:
level_cross_clocks.v:42
level_cross_clocks_ff_bit.10648d_out
10648d_out
Definition:
level_cross_clocks.v:129
level_cross_clocks_ff_bit
Definition:
level_cross_clocks.v:124
level_cross_clocks_single_bit.10637d_sync
10637d_syncwire
Definition:
level_cross_clocks.v:88
level_cross_clocks_single_bit.10635d_out
10635d_out
Definition:
level_cross_clocks.v:85
level_cross_clocks_ff_bit.10647d_in
10647d_in
Definition:
level_cross_clocks.v:128
level_cross_clocks_single_bit.10632FAST1
10632FAST11'b0
Definition:
level_cross_clocks.v:81
level_cross_clocks_single_bit.10631FAST0
10631FAST01'b0
Definition:
level_cross_clocks.v:80
util_modules
level_cross_clocks.v
Generated by
1.8.12