x393
1.0
FPGAcodeforElphelNC393camera
sens_hispi_fifo.v
Go to the documentation of this file.
1
39
`timescale 1ns/1ps
40
41
module
sens_hispi_fifo
#(
42
// parameter COUNT_START = 7, // wait these many samples input before starting output
43
parameter
DATA_WIDTH
=
12
,
44
parameter
DATA_DEPTH
=
4
// >=3
45
) (
46
input
ipclk
,
47
input
irst
,
48
input
we
,
49
input
sol
,
// start of line - 1 cycle before dv
50
input
eol
,
// end of line - last dv
51
input
[
DATA_WIDTH
-
1
:
0
]
din
,
52
input
[
DATA_DEPTH
-
1
:
0
]
out_dly
,
// wait these many samples input before starting output
53
input
pclk
,
54
input
prst
,
55
input
re
,
56
output
reg
[
DATA_WIDTH
-
1
:
0
]
dout
,
// valid next cycle after re
57
output
run
// has latency 1 after last re
58
);
59
reg
[
DATA_WIDTH
-
1
:
0
]
fifo_ram
[
0
: (
1
<<
DATA_DEPTH
) -
1
];
60
reg
[
DATA_DEPTH
:
0
]
wa
;
61
reg
[
DATA_DEPTH
:
0
]
ra
;
62
wire
line_start_pclk
;
63
reg
line_run_ipclk
;
64
reg
line_run_ipclk_d
;
// to generate start for very short lines (may just use small out_dly value)
65
reg
line_run_pclk
;
66
reg
run_r
;
67
reg
start_sent
;
68
reg
start_out_ipclk
;
69
70
assign
run
=
run_r
;
71
// TODO: generate early done by comparing ra with (wa-1) - separate counter
72
73
always
@ (
posedge
ipclk
)
begin
74
if
(
irst
||
sol
)
wa
<=
0
;
75
else
if
(
we
&&
line_run_ipclk
)
wa
<=
wa
+
1
;
76
77
if
(
we
&&
line_run_ipclk
)
fifo_ram
[
wa
[
DATA_DEPTH
-
1
:
0
]] <=
din
;
78
79
if
(
irst
||
eol
)
line_run_ipclk
<=
0
;
80
else
if
(
sol
)
line_run_ipclk
<=
1
;
81
82
if
(!
line_run_ipclk
)
start_sent
<=
0
;
83
else
if
(
start_out_ipclk
)
start_sent
<=
1
;
84
85
line_run_ipclk_d
<=
line_run_ipclk
;
86
87
if
(
irst
)
start_out_ipclk
<=
0
;
88
else
start_out_ipclk
<=
line_run_ipclk
? (!
start_sent
&&
we
&& (
wa
[
DATA_DEPTH
-
1
:
0
] ==
out_dly
)) : (
line_run_ipclk_d
&& !
start_sent
);
89
90
end
91
92
always
@(
posedge
pclk
)
begin
93
line_run_pclk
<=
line_run_ipclk
&& (
line_run_pclk
||
line_start_pclk
);
94
95
if
(
prst
)
run_r
<=
0
;
96
else
if
(
line_start_pclk
)
run_r
<=
1
;
97
else
if
(!
line_run_pclk
&& (
ra
==
wa
))
run_r
<=
0
;
98
99
if
(
prst
||
line_start_pclk
)
ra
<=
0
;
100
else
if
(
re
)
ra
<=
ra
+
1
;
101
102
if
(
re
)
dout
<=
fifo_ram
[
ra
[
DATA_DEPTH
-
1
:
0
]];
103
104
end
105
106
pulse_cross_clock
#(
107
.
EXTRA_DLY
(
0
)
108
)
pulse_cross_clock_line_start_i
(
109
.
rst
(
irst
),
// input
110
.
src_clk
(
ipclk
),
// input
111
.
dst_clk
(
pclk
),
// input
112
// .in_pulse (we && (wa == COUNT_START)), // input
113
.
in_pulse
(
start_out_ipclk
),
// input
114
.
out_pulse
(
line_start_pclk
),
// output
115
.
busy
()
// output
116
);
117
118
119
endmodule
120
sens_hispi_fifo.7248line_run_ipclk_d
7248line_run_ipclk_dreg
Definition:
sens_hispi_fifo.v:64
sens_hispi_fifo.7252start_out_ipclk
7252start_out_ipclkreg
Definition:
sens_hispi_fifo.v:68
pulse_cross_clock.10722rst
10722rst
Definition:
pulse_cross_clock.v:46
pulse_cross_clock.10724dst_clk
10724dst_clk
Definition:
pulse_cross_clock.v:48
pulse_cross_clock.10727busy
10727busy
Definition:
pulse_cross_clock.v:51
sens_hispi_fifo.7236din
[DATA_WIDTH-1:0] 7236din
Definition:
sens_hispi_fifo.v:51
sens_hispi_fifo.7249line_run_pclk
7249line_run_pclkreg
Definition:
sens_hispi_fifo.v:65
sens_hispi_fifo.7247line_run_ipclk
7247line_run_ipclkreg
Definition:
sens_hispi_fifo.v:63
sens_hispi_fifo.7239prst
7239prst
Definition:
sens_hispi_fifo.v:54
sens_hispi_fifo.7241dout
reg [DATA_WIDTH-1:0] 7241dout
Definition:
sens_hispi_fifo.v:56
sens_hispi_fifo.7243fifo_ram
[0:1<<DATA_DEPTH-1] 7243fifo_ramreg[DATA_WIDTH-1:0]
Definition:
sens_hispi_fifo.v:59
pulse_cross_clock.10725in_pulse
10725in_pulse
Definition:
pulse_cross_clock.v:49
sens_hispi_fifo.7232irst
7232irst
Definition:
sens_hispi_fifo.v:47
sens_hispi_fifo.7246line_start_pclk
7246line_start_pclkwire
Definition:
sens_hispi_fifo.v:62
sens_hispi_fifo.7231ipclk
7231ipclk
Definition:
sens_hispi_fifo.v:46
sens_hispi_fifo.7242run
7242run
Definition:
sens_hispi_fifo.v:57
pulse_cross_clock.10723src_clk
10723src_clk
Definition:
pulse_cross_clock.v:47
sens_hispi_fifo.7251start_sent
7251start_sentreg
Definition:
sens_hispi_fifo.v:67
sens_hispi_fifo.7234sol
7234sol
Definition:
sens_hispi_fifo.v:49
sens_hispi_fifo.7230DATA_DEPTH
7230DATA_DEPTH4
Definition:
sens_hispi_fifo.v:44
sens_hispi_fifo.7235eol
7235eol
Definition:
sens_hispi_fifo.v:50
pulse_cross_clock.10726out_pulse
10726out_pulse
Definition:
pulse_cross_clock.v:50
sens_hispi_fifo.7244wa
7244wareg[DATA_DEPTH:0]
Definition:
sens_hispi_fifo.v:60
sens_hispi_fifo.7229DATA_WIDTH
7229DATA_WIDTH12
Definition:
sens_hispi_fifo.v:43
sens_hispi_fifo.7250run_r
7250run_rreg
Definition:
sens_hispi_fifo.v:66
sens_hispi_fifo
Definition:
sens_hispi_fifo.v:41
sens_hispi_fifo.7240re
7240re
Definition:
sens_hispi_fifo.v:55
sens_hispi_fifo.7233we
7233we
Definition:
sens_hispi_fifo.v:48
sens_hispi_fifo.7245ra
7245rareg[DATA_DEPTH:0]
Definition:
sens_hispi_fifo.v:61
sens_hispi_fifo.7237out_dly
[DATA_DEPTH-1:0] 7237out_dly
Definition:
sens_hispi_fifo.v:52
sens_hispi_fifo.pulse_cross_clock
pulse_cross_clock_line_start_i pulse_cross_clock
Definition:
sens_hispi_fifo.v:106
sens_hispi_fifo.7238pclk
7238pclk
Definition:
sens_hispi_fifo.v:53
sensor
sens_hispi_fifo.v
Generated by
1.8.12