x393
1.0
FPGAcodeforElphelNC393camera
sensor_membuf.v
Go to the documentation of this file.
1
39
`timescale 1ns/1ps
40
41
module
sensor_membuf
#(
42
parameter
WADDR_WIDTH
=
9
// for 36Kb RAM
43
)(
44
input
pclk
,
45
input
prst
,
// reset @ posedge pclk
46
input
mrst
,
// reset @ posedge mclk
47
input
frame_run_mclk
,
// @mclk - memory channel is ready to accept data from the sensor
48
input
[
15
:
0
]
px_data
,
// @posedge pclk pixel (pixel pair) data from the sensor channel
49
input
px_valid
,
// px_data valid
50
input
last_in_line
,
// valid with px_valid - last px_data in line
51
52
input
mclk
,
// memory interface clock
53
input
rpage_set
,
// set internal read page to rpage_in (reset pointers)
54
input
rpage_next
,
// advance to next page (and reset lower bits to 0)
55
input
buf_rd
,
// read buffer to memory, increment read address (register enable will be delayed)
56
output
[
63
:
0
]
buf_dout
,
// data out
57
output
page_written
// buffer page (full or partial) is written to the memory buffer
58
`ifdef
DEBUG_SENS_MEM_PAGES
59
,output
[1:0]
dbg_rpage
60
,output
[1:0]
dbg_wpage
61
`endif
62
63
);
64
65
reg
[
1
:
0
]
wpage
;
66
reg
[
WADDR_WIDTH
-
1
:
0
]
waddr
;
67
68
// reg sim_rst = 1; // just for simulation - reset from system reset to the first rpage_set
69
reg
[
2
:
0
]
rst_pntr
;
70
reg
frame_run_pclk
;
71
wire
rst_wpntr
;
72
wire
inc_wpage_w
;
73
wire
px_use
=
frame_run_pclk
&&
px_valid
;
// px valid and enabled by memory controller
74
75
76
`ifdef
DEBUG_SENS_MEM_PAGES
77
assign
dbg_wpage
=
dbg_wpage;
78
`endif
79
80
assign
inc_wpage_w
=
px_use
&& (
last_in_line
|| (&
waddr
));
81
always
@ (
posedge
mclk
)
begin
82
rst_pntr
<= {
rst_pntr
[
1
] &~
rst_pntr
[
0
],
rst_pntr
[
0
],
rpage_set
};
83
// if (rpage_set) sim_rst <= 0;
84
end
85
86
always
@ (
posedge
pclk
)
begin
87
if
(
prst
||
rst_wpntr
|| (
px_use
&&
last_in_line
))
waddr
<=
0
;
88
else
if
(
px_use
)
waddr
<=
waddr
+
1
;
89
90
if
(
prst
||
rst_wpntr
)
wpage
<=
0
;
91
else
if
(
inc_wpage_w
)
wpage
<=
wpage
+
1
;
92
93
frame_run_pclk
<=
frame_run_mclk
;
94
end
95
96
pulse_cross_clock
rst_wpntr_i
(
97
.
rst
(
mrst
),
// sim_rst),
98
.
src_clk
(
mclk
),
99
.
dst_clk
(
pclk
),
100
.
in_pulse
(
rst_pntr
[
2
]),
101
.
out_pulse
(
rst_wpntr
),
102
.
busy
()
103
);
104
105
pulse_cross_clock
page_written_i
(
106
.
rst
(
prst
),
// sim_rst || rpage_set),
107
.
src_clk
(
pclk
),
108
.
dst_clk
(
mclk
),
109
.
in_pulse
(
inc_wpage_w
),
110
.
out_pulse
(
page_written
),
111
.
busy
()
112
);
113
114
115
mcntrl_buf_wr
#(
116
.
LOG2WIDTH_WR
(
4
)
// 64 bit external interface
117
)
chn1wr_buf_i
(
118
.
ext_clk
(
pclk
),
// input
119
.
ext_waddr
({
wpage
,
waddr
}),
// input[9:0]
120
.
ext_we
(
px_use
),
// input
121
.
ext_data_in
(
px_data
),
// input[15:0] buf_wdata - from AXI
122
.
rclk
(
mclk
),
// input
123
.
rpage_in
(
2'b0
),
// input[1:0]
124
.
rpage_set
(
rpage_set
),
// input @ posedge mclk
125
.
page_next
(
rpage_next
),
// input
126
`ifdef
DEBUG_SENS_MEM_PAGES
127
.page
(dbg_rpage),
// output[1:0]
128
`else
129
.
page
(),
// output[1:0]
130
`endif
131
.
rd
(
buf_rd
),
// input
132
.
data_out
(
buf_dout
)
// output[63:0]
133
);
134
135
136
endmodule
137
138
sensor_membuf.8455px_use
8455px_usewire
Definition:
sensor_membuf.v:72
sensor_membuf.8447buf_dout
[63:0] 8447buf_dout
Definition:
sensor_membuf.v:56
mcntrl_buf_wr.5201ext_we
5201ext_we
Definition:
mcntrl_buf_wr.v:47
pulse_cross_clock.10722rst
10722rst
Definition:
pulse_cross_clock.v:46
mcntrl_buf_wr.5204rpage_in
[1:0] 5204rpage_in
Definition:
mcntrl_buf_wr.v:51
sensor_membuf.8446buf_rd
8446buf_rd
Definition:
sensor_membuf.v:55
sensor_membuf.8435WADDR_WIDTH
8435WADDR_WIDTH9
Definition:
sensor_membuf.v:42
sensor_membuf.8450waddr
8450waddrreg[WADDR_WIDTH-1:0]
Definition:
sensor_membuf.v:65
pulse_cross_clock.10724dst_clk
10724dst_clk
Definition:
pulse_cross_clock.v:48
pulse_cross_clock.10727busy
10727busy
Definition:
pulse_cross_clock.v:51
sensor_membuf.8441px_valid
8441px_valid
Definition:
sensor_membuf.v:49
sensor_membuf.8436pclk
8436pclk
Definition:
sensor_membuf.v:44
sensor_membuf.8439frame_run_mclk
8439frame_run_mclk
Definition:
sensor_membuf.v:47
sensor_membuf.8440px_data
[15:0] 8440px_data
Definition:
sensor_membuf.v:48
sensor_membuf.8444rpage_set
8444rpage_set
Definition:
sensor_membuf.v:53
sensor_membuf.pulse_cross_clock
page_written_i pulse_cross_clock
Definition:
sensor_membuf.v:103
mcntrl_buf_wr.5203rclk
5203rclk
Definition:
mcntrl_buf_wr.v:50
sensor_membuf.8438mrst
8438mrst
Definition:
sensor_membuf.v:46
pulse_cross_clock.10725in_pulse
10725in_pulse
Definition:
pulse_cross_clock.v:49
mcntrl_buf_wr.5209data_out
[63:0] 5209data_out
Definition:
mcntrl_buf_wr.v:56
sensor_membuf.8443mclk
8443mclk
Definition:
sensor_membuf.v:52
sensor_membuf.8453rst_wpntr
8453rst_wpntrwire
Definition:
sensor_membuf.v:70
sensor_membuf.8454inc_wpage_w
8454inc_wpage_wwire
Definition:
sensor_membuf.v:71
sensor_membuf.8451rst_pntr
8451rst_pntrreg[2:0]
Definition:
sensor_membuf.v:68
pulse_cross_clock.10723src_clk
10723src_clk
Definition:
pulse_cross_clock.v:47
sensor_membuf.8445rpage_next
8445rpage_next
Definition:
sensor_membuf.v:54
pulse_cross_clock.10726out_pulse
10726out_pulse
Definition:
pulse_cross_clock.v:50
sensor_membuf.8437prst
8437prst
Definition:
sensor_membuf.v:45
sensor_membuf.8449wpage
8449wpagereg[1:0]
Definition:
sensor_membuf.v:64
sensor_membuf
Definition:
sensor_membuf.v:41
mcntrl_buf_wr.5206page_next
5206page_next
Definition:
mcntrl_buf_wr.v:53
mcntrl_buf_wr.5208rd
5208rd
Definition:
mcntrl_buf_wr.v:55
mcntrl_buf_wr.5199ext_clk
5199ext_clk
Definition:
mcntrl_buf_wr.v:45
mcntrl_buf_wr.5205rpage_set
5205rpage_set
Definition:
mcntrl_buf_wr.v:52
mcntrl_buf_wr.5207page
[1:0] 5207page
Definition:
mcntrl_buf_wr.v:54
mcntrl_buf_wr.5202ext_data_in
[1 << LOG2WIDTH_WR-1:0] 5202ext_data_in
Definition:
mcntrl_buf_wr.v:48
sensor_membuf.8442last_in_line
8442last_in_line
Definition:
sensor_membuf.v:50
sensor_membuf.mcntrl_buf_wr
chn1wr_buf_i mcntrl_buf_wr
Definition:
sensor_membuf.v:113
sensor_membuf.8448page_written
8448page_written
Definition:
sensor_membuf.v:57
sensor_membuf.8452frame_run_pclk
8452frame_run_pclkreg
Definition:
sensor_membuf.v:69
mcntrl_buf_wr.5200ext_waddr
[14-LOG2WIDTH_WR:0] 5200ext_waddr
Definition:
mcntrl_buf_wr.v:46
sensor
sensor_membuf.v
Generated by
1.8.12