x393
1.0
FPGAcodeforElphelNC393camera
bit_stuffer_metadata.v
Go to the documentation of this file.
1
41
`timescale 1ns/1ps
42
43
module
bit_stuffer_metadata
(
44
input
mclk
,
45
input
mrst
,
// @posedge mclk, sync reset
46
input
xclk
,
47
input
xrst
,
// @posedge xclk, sync reset
48
input
last_block
,
// use it to copy timestamp from fifo
49
50
51
// time stamping - will copy time at the end of color_first (later than the first hact after vact in the current frame, but before the next one
52
// and before the data is needed for output
53
input
ts_pre_stb
,
// @mclk - 1 cycle before receiving 8 bytes of timestamp data
54
input
[
7
:
0
]
ts_data
,
// timestamp data (s0,s1,s2,s3,us0,us1,us2,us3==0)
55
input
color_first
,
// @fradv_clk only used for timestamp
56
57
input
[
31
:
0
]
din
,
// input data, MSB aligned
58
input
[
1
:
0
]
bytes_in
,
// number of bytes, valid @ ds (0 means 4)
59
input
in_stb
,
// input data/bytes_in strobe
60
input
flush
,
// end of input data
61
input
abort
,
// @ any, extracts 0->1 and flushes
62
63
// outputs @ negedge clk
64
output
reg
[
31
:
0
]
data_out
,
// [31:0] output data
65
output
reg
data_out_valid
,
// output data valid
66
output
reg
done
,
// reset by !en, goes high after some delay after flushing
67
output
reg
running
// from registering timestamp until done
68
`ifdef
DEBUG_RING
69
,
output
reg
[
3
:
0
]
dbg_etrax_dma
70
,
output
dbg_ts_rstb
71
,
output
[
7
:
0
]
dbg_ts_dout
72
73
`endif
74
);
75
76
reg
[
7
:
0
]
time_ram0
[
0
:
3
];
// 0 - seconds, 1 - microseconds MSB in the output 32-bit word, byt LSB of the sec/usec
77
reg
[
7
:
0
]
time_ram1
[
0
:
3
];
78
reg
[
7
:
0
]
time_ram2
[
0
:
3
];
79
reg
[
7
:
0
]
time_ram3
[
0
:
3
];
80
reg
[
3
:
0
]
ts_in
=
8
;
81
reg
last_block_d
;
// last_block delayed by one clock
82
reg
color_first_r
;
83
reg
[
2
:
0
]
abort_r
;
84
reg
force_flush
;
85
86
// reg color_first_r; // registered with the same clock as color_first to extract leading edge
87
88
// stb_time[2] - single-cycle pulse after color_first goes low
89
// reg [19:0] imgsz32; // current image size in multiples of 32-bytes
90
reg
[
21
:
0
]
imgsz4
;
// current image size in multiples of 4-bytes
91
reg
last_stb_4
;
// last stb_in was 4 bytes
92
reg
trailer
;
93
reg
meta_out
;
94
reg
[
1
:
0
]
meta_word
;
95
reg
zeros_out
;
// output of 32 bytes (8 words) of zeros
96
wire
trailer_done
= (
imgsz4
[
2
:
0
] ==
7
) &&
zeros_out
;
97
wire
meta_last
= (
imgsz4
[
2
:
0
] ==
7
) &&
meta_out
;
98
// re-clock enable to this clock
99
100
wire
ts_rstb
=
last_block
&& !
last_block_d
;
// enough time to have timestamp data; // one cycle before getting timestamp data from FIFO
101
wire
[
7
:
0
]
ts_dout
;
// timestamp data, byte at a time
102
wire
write_size
= (
in_stb
&& (
bytes_in
!=
0
)) || (
flush
&&
last_stb_4
);
103
wire
stb_start
= !
color_first
&&
color_first_r
;
104
wire
stb
=
in_stb
& !
trailer
&& !
force_flush
;
105
always
@ (
posedge
xclk
)
begin
106
if
(
xrst
||
trailer_done
)
imgsz4
<=
0
;
107
else
if
(
stb
||
trailer
)
imgsz4
<=
imgsz4
+
1
;
108
109
if
(
stb
)
last_stb_4
<= (
bytes_in
==
0
);
110
111
last_block_d
<=
last_block
;
112
color_first_r
<=
color_first
;
113
114
if
(
xrst
)
ts_in
<=
8
;
115
else
if
(
ts_rstb
)
ts_in
<=
0
;
116
else
if
(!
ts_in
[
3
])
ts_in
<=
ts_in
+
1
;
117
118
if
((!
ts_in
[
3
] && (
ts_in
[
1
:
0
] ==
0
)) ||
write_size
)
time_ram0
[
ts_in
[
3
:
2
]] <=
ts_in
[
3
]? ({
imgsz4
[
5
:
0
],
flush
?
2'b0
:
bytes_in
}):
ts_dout
;
//ts_in[3:2] == 2'b10 when write_size
119
if
((!
ts_in
[
3
] && (
ts_in
[
1
:
0
] ==
1
)) ||
write_size
)
time_ram1
[
ts_in
[
3
:
2
]] <=
ts_in
[
3
]? (
imgsz4
[
13
:
6
]):
ts_dout
;
120
if
((!
ts_in
[
3
] && (
ts_in
[
1
:
0
] ==
2
)) ||
write_size
)
time_ram2
[
ts_in
[
3
:
2
]] <=
ts_in
[
3
]? (
imgsz4
[
21
:
14
]):
ts_dout
;
121
if
((!
ts_in
[
3
] && (
ts_in
[
1
:
0
] ==
3
)) ||
write_size
)
time_ram3
[
ts_in
[
3
:
2
]] <=
ts_in
[
3
]? (
8'hff
):
ts_dout
;
122
123
if
(
xrst
)
trailer
<=
0
;
124
else
if
(
flush
||
force_flush
)
trailer
<=
1
;
125
else
if
(
trailer_done
)
trailer
<=
0
;
126
127
if
(
xrst
)
meta_out
<=
0
;
128
else
if
(
trailer
&& (
imgsz4
[
2
:
0
] ==
4
) &&!
zeros_out
)
meta_out
<=
1
;
129
else
if
(
meta_last
)
meta_out
<=
0
;
130
131
if
(!
meta_out
)
meta_word
<=
0
;
132
else
meta_word
<=
meta_word
+
1
;
133
134
if
(
xrst
)
zeros_out
<=
0
;
135
else
if
(
meta_last
)
zeros_out
<=
1
;
136
else
if
(
trailer_done
)
zeros_out
<=
0
;
137
138
data_out
<= ({
32
{
stb
}} &
din
) | ({
32
{
meta_out
}} & {
time_ram0
[
meta_word
],
time_ram1
[
meta_word
],
time_ram2
[
meta_word
],
time_ram3
[
meta_word
]});
139
data_out_valid
<=
stb
||
trailer
;
140
141
142
if
(
xrst
||
trailer
)
running
<=
0
;
143
else
if
(
stb_start
)
running
<=
1
;
144
145
done
<=
trailer_done
;
146
// re-clock abort, extract leading edge
147
abort_r
<= {
abort_r
[
0
] & ~
abort_r
[
1
],
abort_r
[
0
],
abort
& ~
trailer
};
148
149
if
(
xrst
||
trailer
)
force_flush
<=
0
;
150
else
if
(
abort_r
)
force_flush
<=
1
;
151
152
end
153
154
// just for testing
155
`ifdef
DEBUG_RING
156
assign
dbg_ts_rstb
=
ts_rstb
;
157
assign
dbg_ts_dout
=
ts_dout
;
158
159
always
@ (
posedge
xclk
)
begin
160
dbg_etrax_dma
<=
imgsz4
[
3
:
0
];
161
end
162
`endif
163
164
//color_first && color_first_r
165
timestamp_fifo
timestamp_fifo_i
(
166
.
sclk
(
mclk
),
// input
167
.
srst
(
mrst
),
// input
168
.
pre_stb
(
ts_pre_stb
),
// input
169
.
din
(
ts_data
),
// input[7:0]
170
.
aclk
(
xclk
),
//fradv_clk), // input
171
.
arst
(
xrst
),
//fradv_clk), // input
172
.
advance
(
stb_start
),
// triggers at the 0->1
173
.
rclk
(
xclk
),
// input
174
.
rrst
(
xrst
),
//fradv_clk), // input
175
.
rstb
(
ts_rstb
),
// input
176
.
dout
(
ts_dout
)
// output[7:0] reg
177
);
178
179
endmodule
180
bit_stuffer_metadata.1350abort_r
1350abort_rreg[2:0]
Definition:
bit_stuffer_metadata.v:83
bit_stuffer_metadata.1323mclk
1323mclk
Definition:
bit_stuffer_metadata.v:44
bit_stuffer_metadata.1353last_stb_4
1353last_stb_4reg
Definition:
bit_stuffer_metadata.v:91
timestamp_fifo.9605srst
9605srst
Definition:
timestamp_fifo.v:49
bit_stuffer_metadata.1355meta_out
1355meta_outreg
Definition:
bit_stuffer_metadata.v:93
bit_stuffer_metadata.1354trailer
1354trailerreg
Definition:
bit_stuffer_metadata.v:92
timestamp_fifo.9607din
[7:0] 9607din
Definition:
timestamp_fifo.v:52
bit_stuffer_metadata.1338done
reg 1338done
Definition:
bit_stuffer_metadata.v:66
bit_stuffer_metadata.timestamp_fifo
timestamp_fifo_i timestamp_fifo
Definition:
bit_stuffer_metadata.v:165
bit_stuffer_metadata.1334flush
1334flush
Definition:
bit_stuffer_metadata.v:60
bit_stuffer_metadata.1343time_ram0
[0:3] 1343time_ram0reg[7:0]
Definition:
bit_stuffer_metadata.v:76
bit_stuffer_metadata.1364stb
1364stbwire
Definition:
bit_stuffer_metadata.v:104
bit_stuffer_metadata.1347ts_in
1347ts_inreg[3:0]
Definition:
bit_stuffer_metadata.v:80
bit_stuffer_metadata.1352imgsz4
1352imgsz4reg[21:0]
Definition:
bit_stuffer_metadata.v:90
bit_stuffer_metadata.1363stb_start
1363stb_startwire
Definition:
bit_stuffer_metadata.v:103
bit_stuffer_metadata.1339running
reg 1339running
Definition:
bit_stuffer_metadata.v:67
bit_stuffer_metadata.1332bytes_in
[1:0] 1332bytes_in
Definition:
bit_stuffer_metadata.v:58
bit_stuffer_metadata.1325xclk
1325xclk
Definition:
bit_stuffer_metadata.v:46
bit_stuffer_metadata.1358trailer_done
1358trailer_donewire
Definition:
bit_stuffer_metadata.v:96
timestamp_fifo.9612rrst
9612rrst
Definition:
timestamp_fifo.v:60
timestamp_fifo.9604sclk
9604sclk
Definition:
timestamp_fifo.v:48
bit_stuffer_metadata.1348last_block_d
1348last_block_dreg
Definition:
bit_stuffer_metadata.v:81
bit_stuffer_metadata.1329ts_data
[7:0] 1329ts_data
Definition:
bit_stuffer_metadata.v:54
bit_stuffer_metadata.1340dbg_etrax_dma
reg [3:0] 1340dbg_etrax_dma
Definition:
bit_stuffer_metadata.v:69
bit_stuffer_metadata.1341dbg_ts_rstb
1341dbg_ts_rstb
Definition:
bit_stuffer_metadata.v:70
bit_stuffer_metadata.1344time_ram1
[0:3] 1344time_ram1reg[7:0]
Definition:
bit_stuffer_metadata.v:77
timestamp_fifo.9606pre_stb
9606pre_stb
Definition:
timestamp_fifo.v:51
bit_stuffer_metadata
Definition:
bit_stuffer_metadata.v:43
bit_stuffer_metadata.1342dbg_ts_dout
[7:0] 1342dbg_ts_dout
Definition:
bit_stuffer_metadata.v:71
bit_stuffer_metadata.1360ts_rstb
1360ts_rstbwire
Definition:
bit_stuffer_metadata.v:100
bit_stuffer_metadata.1335abort
1335abort
Definition:
bit_stuffer_metadata.v:61
bit_stuffer_metadata.1326xrst
1326xrst
Definition:
bit_stuffer_metadata.v:47
bit_stuffer_metadata.1336data_out
reg [31:0] 1336data_out
Definition:
bit_stuffer_metadata.v:64
bit_stuffer_metadata.1346time_ram3
[0:3] 1346time_ram3reg[7:0]
Definition:
bit_stuffer_metadata.v:79
bit_stuffer_metadata.1345time_ram2
[0:3] 1345time_ram2reg[7:0]
Definition:
bit_stuffer_metadata.v:78
bit_stuffer_metadata.1356meta_word
1356meta_wordreg[1:0]
Definition:
bit_stuffer_metadata.v:94
bit_stuffer_metadata.1330color_first
1330color_first
Definition:
bit_stuffer_metadata.v:55
bit_stuffer_metadata.1331din
[31:0] 1331din
Definition:
bit_stuffer_metadata.v:57
bit_stuffer_metadata.1349color_first_r
1349color_first_rreg
Definition:
bit_stuffer_metadata.v:82
bit_stuffer_metadata.1361ts_dout
1361ts_doutwire[7:0]
Definition:
bit_stuffer_metadata.v:101
timestamp_fifo.9609arst
9609arst
Definition:
timestamp_fifo.v:55
bit_stuffer_metadata.1328ts_pre_stb
1328ts_pre_stb
Definition:
bit_stuffer_metadata.v:53
timestamp_fifo.9614dout
reg [ 7:0] 9614dout
Definition:
timestamp_fifo.v:62
bit_stuffer_metadata.1324mrst
1324mrst
Definition:
bit_stuffer_metadata.v:45
timestamp_fifo.9613rstb
9613rstb
Definition:
timestamp_fifo.v:61
bit_stuffer_metadata.1362write_size
1362write_sizewire
Definition:
bit_stuffer_metadata.v:102
bit_stuffer_metadata.1333in_stb
1333in_stb
Definition:
bit_stuffer_metadata.v:59
bit_stuffer_metadata.1357zeros_out
1357zeros_outreg
Definition:
bit_stuffer_metadata.v:95
timestamp_fifo.9610advance
9610advance
Definition:
timestamp_fifo.v:57
bit_stuffer_metadata.1351force_flush
1351force_flushreg
Definition:
bit_stuffer_metadata.v:84
timestamp_fifo.9608aclk
9608aclk
Definition:
timestamp_fifo.v:54
bit_stuffer_metadata.1327last_block
1327last_block
Definition:
bit_stuffer_metadata.v:48
timestamp_fifo.9611rclk
9611rclk
Definition:
timestamp_fifo.v:59
bit_stuffer_metadata.1359meta_last
1359meta_lastwire
Definition:
bit_stuffer_metadata.v:97
bit_stuffer_metadata.1337data_out_valid
reg 1337data_out_valid
Definition:
bit_stuffer_metadata.v:65
compressor_jp
bit_stuffer_metadata.v
Generated by
1.8.12