Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
X
x393
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
Elphel
x393
Commits
78d2e067
Commit
78d2e067
authored
Nov 15, 2015
by
Andrey Filippov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
debugging JP4 mode, got correct JP4 image
parent
759ea200
Changes
17
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
70392 additions
and
69968 deletions
+70392
-69968
.project
.project
+8
-8
membridge.v
axi/membridge.v
+2
-1
cmprs_pixel_buf_iface.v
compressor_jp/cmprs_pixel_buf_iface.v
+28
-9
csconvert.v
compressor_jp/csconvert.v
+16
-15
jp_channel.v
compressor_jp/jp_channel.v
+32
-23
fpga_version.vh
fpga_version.vh
+3
-1
x393_simulation_parameters.vh
includes/x393_simulation_parameters.vh
+23
-0
mcntrl393.v
memctrl/mcntrl393.v
+3
-0
mcntrl_buf_rd.v
memctrl/mcntrl_buf_rd.v
+12
-0
mcntrl_ps_pio.v
memctrl/mcntrl_ps_pio.v
+26
-25
x393_mcntrl.pickle
py393/dbg/x393_mcntrl.pickle
+69375
-69772
x393_cmprs.py
py393/x393_cmprs.py
+15
-11
x393_jpeg.py
py393/x393_jpeg.py
+30
-8
x393_sens_cmprs.py
py393/x393_sens_cmprs.py
+236
-12
debug_master.v
util_modules/debug_master.v
+2
-1
x393_testbench03.sav
x393_testbench03.sav
+457
-31
x393_testbench03.tf
x393_testbench03.tf
+124
-51
No files found.
.project
View file @
78d2e067
...
...
@@ -62,42 +62,42 @@
<link>
<name>
vivado_logs/VivadoBitstream.log
</name>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_logs/VivadoBitstream-2015111
1121710210
.log
</location>
<location>
/home/andrey/git/x393/vivado_logs/VivadoBitstream-2015111
5001220264
.log
</location>
</link>
<link>
<name>
vivado_logs/VivadoOpt.log
</name>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_logs/VivadoOpt-2015111
1121710210
.log
</location>
<location>
/home/andrey/git/x393/vivado_logs/VivadoOpt-2015111
5001220264
.log
</location>
</link>
<link>
<name>
vivado_logs/VivadoOptPhys.log
</name>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_logs/VivadoOptPhys-2015111
1121710210
.log
</location>
<location>
/home/andrey/git/x393/vivado_logs/VivadoOptPhys-2015111
5001220264
.log
</location>
</link>
<link>
<name>
vivado_logs/VivadoOptPower.log
</name>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_logs/VivadoOptPower-2015111
1121710210
.log
</location>
<location>
/home/andrey/git/x393/vivado_logs/VivadoOptPower-2015111
5001220264
.log
</location>
</link>
<link>
<name>
vivado_logs/VivadoPlace.log
</name>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_logs/VivadoPlace-2015111
1121710210
.log
</location>
<location>
/home/andrey/git/x393/vivado_logs/VivadoPlace-2015111
5001220264
.log
</location>
</link>
<link>
<name>
vivado_logs/VivadoRoute.log
</name>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_logs/VivadoRoute-2015111
1121710210
.log
</location>
<location>
/home/andrey/git/x393/vivado_logs/VivadoRoute-2015111
5001220264
.log
</location>
</link>
<link>
<name>
vivado_logs/VivadoSynthesis.log
</name>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_logs/VivadoSynthesis-2015111
1121710210
.log
</location>
<location>
/home/andrey/git/x393/vivado_logs/VivadoSynthesis-2015111
5000630414
.log
</location>
</link>
<link>
<name>
vivado_logs/VivadoTimimgSummaryReportImplemented.log
</name>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_logs/VivadoTimimgSummaryReportImplemented-2015111
1121710210
.log
</location>
<location>
/home/andrey/git/x393/vivado_logs/VivadoTimimgSummaryReportImplemented-2015111
5001220264
.log
</location>
</link>
<link>
<name>
vivado_logs/VivadoTimimgSummaryReportSynthesis.log
</name>
...
...
axi/membridge.v
View file @
78d2e067
...
...
@@ -748,7 +748,8 @@ wire [63:0] afi_wdata0;
.
ext_raddr
(
{
read_page
,
buf_in_line64
[
6
:
0
]
}
)
,
// input[8:0]
.
ext_rd
(
bufrd_rd
[
0
])
,
// input
.
ext_regen
(
bufrd_rd
[
1
])
,
// input
.
ext_data_out
(
afi_wdata0
)
,
// output[63:0]
.
ext_data_out
(
afi_wdata0
)
,
// output[63:0]
// .emul64 (1'b0), // input Modify buffer addresses (used for JP4 until a 64-wide mode is implemented)
.
wclk
(
!
mclk
)
,
// input
.
wpage_in
(
2'b0
)
,
// input[1:0]
.
wpage_set
(
xfer_reset_page_rd
)
,
// input TODO: Generate @ negedge mclk on frame start
...
...
compressor_jp/cmprs_pixel_buf_iface.v
View file @
78d2e067
...
...
@@ -67,9 +67,11 @@ module cmprs_pixel_buf_iface #(
// controller this can just be the same as mb_pre_end_in
input
mb_pre_start
,
// 1 clock cycle before stream of addresses to the buffer
input
[
1
:
0
]
start_page
,
// page to read next tile from (or first of several pages)
input
[
6
:
0
]
macroblock_x
,
// macroblock left pixel x relative to a tile (page) Maximal page - 128 bytes wide
input
[
6
:
0
]
macroblock_x
,
// macroblock left pixel x relative to a tile (page) Maximal page - 128 bytes wide.
// valid 3 cycles before mb_pre_start
output
reg
[
7
:
0
]
data_out
,
//
output
pre_first_out
,
// For each macroblock in a frame
output
pre2_first_out
,
// 1 cycle before pre_first_out
output
reg
data_valid
//
)
;
localparam
PERIOD_COLOR18
=
384
;
// >18*18, limited by 6*64 (macroblocks)
...
...
@@ -105,9 +107,14 @@ module cmprs_pixel_buf_iface #(
reg
[
8
:
0
]
period_cntr
;
reg
mb_pre_end_r
;
reg
mb_release_buf_r
;
reg
pre_first_out_r
;
reg
[
CMPRS_BUF_EXTRA_LATENCY
+
2
:
0
]
pre_first_out_r
;
reg
[
2
:
0
]
mb_col_number
;
// number of tile column where macrobloc starts - valid 2 cycles before mb_pre_start
wire
[
9
:
0
]
extra_start_addr_w
=
mb_col_number
*
mb_h_m1
;
//added to mb_start_addr when non-zero column
reg
[
5
:
0
]
extra_start_addr_r
;
// reg [ 5:0] mb_h; // macroblock height (lost MSB - OK)
reg
[
9
:
0
]
mb_start_addr
;
// was macroblock_x, noccrected for multi-column. valid with mb_pre_start
assign
buf_ra
=
bufa_r
;
assign
tile_width_or
=
tile_width
[
1
]
?
(
tile_width
[
0
]
?
0
:
'h40
)
:
(
tile_width
[
0
]
?
'h60
:
'h70
)
;
assign
column_width_or
=
tile_col_width
?
0
:
'h10
;
...
...
@@ -119,22 +126,32 @@ module cmprs_pixel_buf_iface #(
assign
mb_release_buf
=
mb_release_buf_r
;
assign
buf_rd
=
buf_re
[
1
:
0
]
;
// assign data_out = do_r;
assign
pre_first_out
=
pre_first_out_r
;
assign
pre_first_out
=
pre_first_out_r
[
0
]
;
assign
pre2_first_out
=
pre_first_out_r
[
1
]
;
always
@
(
posedge
xclk
)
begin
// mb_h <= mb_h_m1+1; // macroblock height
mb_col_number
<=
{
macroblock_x
[
6
:
5
]
,
tile_col_width
?
1'b0
:
macroblock_x
[
4
]
};
extra_start_addr_r
<=
extra_start_addr_w
[
5
:
0
]
;
mb_start_addr
<=
{
3'b0
,
macroblock_x
}
+
{
extra_start_addr_r
,
4'b0
};
if
(
!
frame_en
)
buf_re
[
0
]
<=
0
;
else
if
(
mb_pre_start
)
buf_re
[
0
]
<=
1'b1
;
else
if
(
addr_run_end
)
buf_re
[
0
]
<=
1'b0
;
if
(
!
frame_en
)
buf_re
[
CMPRS_BUF_EXTRA_LATENCY
+
3
:
1
]
<=
0
;
else
buf_re
[
CMPRS_BUF_EXTRA_LATENCY
+
3
:
1
]
<=
{
buf_re
[
CMPRS_BUF_EXTRA_LATENCY
+
2
:
0
]
};
else
buf_re
[
CMPRS_BUF_EXTRA_LATENCY
+
3
:
1
]
<=
{
buf_re
[
CMPRS_BUF_EXTRA_LATENCY
+
2
:
0
]
};
// Buffer data read:
if
(
buf_re
[
CMPRS_BUF_EXTRA_LATENCY
+
2
])
data_out
<=
buf_di
;
//mb_pre_start
if
(
!
frame_en
)
pre_first_out_r
<=
0
;
else
pre_first_out_r
<=
buf_re
[
CMPRS_BUF_EXTRA_LATENCY
+
1
]
&&
!
buf_re
[
CMPRS_BUF_EXTRA_LATENCY
+
2
]
;
else
pre_first_out_r
<=
{
mb_pre_start
,
pre_first_out_r
[
CMPRS_BUF_EXTRA_LATENCY
+
2
:
1
]
};
// else pre_first_out_r <= buf_re[CMPRS_BUF_EXTRA_LATENCY+1] && ! buf_re[CMPRS_BUF_EXTRA_LATENCY+2];
// if (!frame_en) pre2_first_out <= 0;
// else pre2_first_out <= buf_re[CMPRS_BUF_EXTRA_LATENCY + 0] && ! buf_re[CMPRS_BUF_EXTRA_LATENCY + 1];
if
(
mb_pre_start
)
rows_left
<=
mb_h_m1
;
else
if
(
last_col
)
rows_left
<=
rows_left
-
1
;
...
...
@@ -153,7 +170,8 @@ module cmprs_pixel_buf_iface #(
first_col
<=
(
mb_pre_start
||
(
last_col
&&
!
last_row
))
;
if
(
mb_pre_start
)
row_sa
<=
{
start_page
,
3'b0
,
macroblock_x
};
// if (mb_pre_start) row_sa <= {start_page,3'b0,mb_start_addr}; // macroblock_x};
if
(
mb_pre_start
)
row_sa
<=
{
start_page
,
mb_start_addr
};
// macroblock_x};
else
if
(
first_col
)
row_sa
<=
row_sa
+
(
tile_col_width
?
12'h20
:
12'h10
)
;
if
(
mb_pre_start
)
tile_sa
<=
0
;
...
...
@@ -172,7 +190,8 @@ module cmprs_pixel_buf_iface #(
else
if
(
last_in_tile
)
bufa_r
[
11
:
10
]
<=
bufa_r
[
11
:
10
]
+
1
;
// Most time critical - calculation of the buffer address
if
(
mb_pre_start
)
bufa_r
[
9
:
0
]
<=
{
3'b0
,
macroblock_x
};
// if (mb_pre_start) bufa_r[9:0] <= {3'b0,mb_start_addr}; // macroblock_x};
if
(
mb_pre_start
)
bufa_r
[
9
:
0
]
<=
{
mb_start_addr
};
// macroblock_x};
else
if
(
last_col
)
bufa_r
[
9
:
0
]
<=
row_sa
[
9
:
0
]
;
// 'bx next cycle after AFTER mb_pre_start
else
if
(
last_in_tile
)
bufa_r
[
9
:
0
]
<=
tile_sa
;
else
if
(
buf_re
[
0
])
bufa_r
[
9
:
0
]
<=
bufa_r
[
9
:
0
]
+
{
last_in_col
?
col_inc
[
9
:
4
]
:
6'b0
,
4'b1
};
...
...
compressor_jp/csconvert.v
View file @
78d2e067
...
...
@@ -55,7 +55,7 @@ module csconvert#(
input
[
9
:
0
]
m_cr
,
// [9:0] scale for CB - default 0.713 (10'hb6)
input
[
7
:
0
]
mb_din
,
// input bayer data in scanline sequence, GR/BG sequence
input
[
1
:
0
]
bayer_phase
,
input
pre
_first_in
,
// marks the first input pixel
input
pre
2_first_in
,
// marks the first input pixel (2 cycles ahead)
output
reg
[
8
:
0
]
signed_y
,
// - now signed char, -128(black) to +127 (white)
output
reg
[
8
:
0
]
signed_c
,
// new, q is just signed char
...
...
@@ -69,7 +69,7 @@ module csconvert#(
// output reg ccv_out_start, //TODO: adjust to minimal latency?
output
reg
[
7
:
0
]
n000
,
// not clear how they are used, make them just with latency1 from old
output
reg
[
7
:
0
]
n255
)
;
reg
pre_first_in
;
// outputs to be multiplexed:
wire
[
7
:
0
]
conv18_signed_y
,
conv20_signed_y
,
mono16_signed_y
,
jp4_signed_y
;
wire
[
8
:
0
]
jp4diff_signed_y
,
conv18_signed_c
,
conv20_signed_c
;
...
...
@@ -100,7 +100,8 @@ module csconvert#(
reg [5:0] component_firstsS; // first_r this component in a frame (DC absolute, otherwise - difference to previous)
*/
always
@
(
posedge
xclk
)
begin
if
(
pre_first_in
)
begin
pre_first_in
<=
pre2_first_in
;
if
(
pre2_first_in
)
begin
converter_type_r
[
2
:
0
]
<=
converter_type
[
2
:
0
]
;
ignore_color_r
<=
ignore_color
;
// jp4_dc_improved_r <= jp4_dc_improved;
...
...
@@ -116,23 +117,23 @@ module csconvert#(
end
// generate one-hot converter enable
if
(
!
frame_en
)
en_converters
[
CMPRS_COLOR18
]
<=
0
;
else
if
(
pre_first_in
)
en_converters
[
CMPRS_COLOR18
]
<=
converter_type
==
CMPRS_COLOR18
;
if
(
!
frame_en
)
en_converters
[
CMPRS_COLOR18
]
<=
0
;
else
if
(
pre
2
_first_in
)
en_converters
[
CMPRS_COLOR18
]
<=
converter_type
==
CMPRS_COLOR18
;
if
(
!
frame_en
)
en_converters
[
CMPRS_COLOR20
]
<=
0
;
else
if
(
pre_first_in
)
en_converters
[
CMPRS_COLOR20
]
<=
converter_type
==
CMPRS_COLOR20
;
if
(
!
frame_en
)
en_converters
[
CMPRS_COLOR20
]
<=
0
;
else
if
(
pre
2
_first_in
)
en_converters
[
CMPRS_COLOR20
]
<=
converter_type
==
CMPRS_COLOR20
;
if
(
!
frame_en
)
en_converters
[
CMPRS_MONO16
]
<=
0
;
else
if
(
pre_first_in
)
en_converters
[
CMPRS_MONO16
]
<=
converter_type
==
CMPRS_MONO16
;
if
(
!
frame_en
)
en_converters
[
CMPRS_MONO16
]
<=
0
;
else
if
(
pre
2
_first_in
)
en_converters
[
CMPRS_MONO16
]
<=
converter_type
==
CMPRS_MONO16
;
if
(
!
frame_en
)
en_converters
[
CMPRS_JP4
]
<=
0
;
else
if
(
pre_first_in
)
en_converters
[
CMPRS_JP4
]
<=
converter_type
==
CMPRS_JP4
;
if
(
!
frame_en
)
en_converters
[
CMPRS_JP4
]
<=
0
;
else
if
(
pre
2
_first_in
)
en_converters
[
CMPRS_JP4
]
<=
converter_type
==
CMPRS_JP4
;
if
(
!
frame_en
)
en_converters
[
CMPRS_JP4DIFF
]
<=
0
;
else
if
(
pre_first_in
)
en_converters
[
CMPRS_JP4DIFF
]
<=
converter_type
==
CMPRS_JP4DIFF
;
if
(
!
frame_en
)
en_converters
[
CMPRS_JP4DIFF
]
<=
0
;
else
if
(
pre
2
_first_in
)
en_converters
[
CMPRS_JP4DIFF
]
<=
converter_type
==
CMPRS_JP4DIFF
;
if
(
!
frame_en
)
en_converters
[
CMPRS_MONO8
]
<=
0
;
else
if
(
pre_first_in
)
en_converters
[
CMPRS_MONO8
]
<=
converter_type
==
CMPRS_MONO8
;
if
(
!
frame_en
)
en_converters
[
CMPRS_MONO8
]
<=
0
;
else
if
(
pre
2
_first_in
)
en_converters
[
CMPRS_MONO8
]
<=
converter_type
==
CMPRS_MONO8
;
end
...
...
compressor_jp/jp_channel.v
View file @
78d2e067
...
...
@@ -262,6 +262,7 @@ module jp_channel#(
// signals connecting modules: chn_rd_buf_i and ???:
wire
[
7
:
0
]
mb_data_out
;
// Macroblock data out in scanline order
wire
mb_pre_first_out
;
// Macroblock data out strobe - 1 cycle just before data valid
wire
mb_pre2_first_out
;
// Macroblock data out strobe - 2 cycles just before data valid
// wire mb_data_valid; // Macroblock data out valid
wire
limit_diff
=
1'b1
;
// as in the prototype - just a constant 1
...
...
@@ -421,15 +422,15 @@ module jp_channel#(
wire
[
2
:
0
]
dbg_block_mem_wa_save
;
`ifndef
USE_XCLK2X
// temporarily assigning unused debug signals to 0
assign
dbg_add_invalid
=
0
;
assign
dbg_mb_release_buf
=
0
;
assign
etrax_dma
=
0
;
assign
dbg_ts_rstb
=
0
;
// output
assign
dbg_ts_dout
=
0
;
//output [7:0]
assign
dbg_flushing
=
0
;
assign
dbg_test_lbw
=
0
;
assign
dbg_gotLastBlock
=
0
;
assign
dbg_fifo_or_full
=
0
;
//
assign dbg_add_invalid = 0;
//
assign dbg_mb_release_buf = 0;
//
assign etrax_dma = 0;
//
assign dbg_ts_rstb = 0; // output
//
assign dbg_ts_dout = 0; //output [7:0]
assign
dbg_flushing
=
0
;
// still not used in huffman_stuffer_meta
//
assign dbg_test_lbw = 0;
//
assign dbg_gotLastBlock = 0;
assign
dbg_fifo_or_full
=
0
;
// still not used in huffman_stuffer_meta
`endif
timestamp_to_parallel
dbg_timestamp_to_parallel_i
(
...
...
@@ -612,22 +613,29 @@ module jp_channel#(
.
start
(
status_start
)
// input
)
;
//hifreq
// Port buffer - TODO: Move to memory controller
// Not needed?
// reg emul64;
// always @ (negedge mclk) begin
// emul64 <= tile_width[1]; // will not work for monochrome (128 pixel wide) - chnge to 64?
// end
mcntrl_buf_rd
#(
.
LOG2WIDTH_RD
(
3
)
// 64 bit external interface
)
chn_rd_buf_i
(
.
ext_clk
(
xclk
)
,
// input
.
ext_raddr
(
buf_ra
)
,
// input[11:0]
.
ext_rd
(
buf_rd
[
0
])
,
// input
.
ext_regen
(
buf_rd
[
1
])
,
// input
.
ext_data_out
(
buf_pxd
)
,
// output[7:0]
.
wclk
(
!
mclk
)
,
// input
.
wpage_in
(
2'b0
)
,
// input[1:0]
.
ext_clk
(
xclk
)
,
// input
.
ext_raddr
(
buf_ra
)
,
// input[11:0]
.
ext_rd
(
buf_rd
[
0
])
,
// input
.
ext_regen
(
buf_rd
[
1
])
,
// input
.
ext_data_out
(
buf_pxd
)
,
// output[7:0]
// .emul64 (1'b0), //emul64), // input Modify buffer addresses (used for JP4 until a 64-wide mode is implemented)
.
wclk
(
!
mclk
)
,
// input
.
wpage_in
(
2'b0
)
,
// input[1:0]
.
wpage_set
(
xfer_reset_page_rd
)
,
// input TODO: Generate @ negedge mclk on frame start
.
page_next
(
buf_wpage_nxt
)
,
// input
.
page
()
,
// output[1:0]
.
we
(
buf_we
)
,
// input
.
data_in
(
buf_din
)
// input[63:0]
.
page_next
(
buf_wpage_nxt
)
,
// input
.
page
()
,
// output[1:0]
.
we
(
buf_we
)
,
// input
.
data_in
(
buf_din
)
// input[63:0]
)
;
cmprs_cmd_decode
#(
...
...
@@ -837,7 +845,8 @@ module jp_channel#(
.
data_out
(
mb_data_out
)
,
// output[7:0] // Macroblock data out in scanline order
.
pre_first_out
(
mb_pre_first_out
)
,
// output // Macroblock data out strobe - 1 cycle just before data valid == old pre_first_pixel?
// .data_valid (mb_data_valid) // output // Macroblock data out valid
.
data_valid
()
// output // Macroblock data out valid Unused
.
pre2_first_out
(
mb_pre2_first_out
)
,
// output reg
.
data_valid
()
// output reg // Macroblock data out valid Unused
)
;
csconvert
#(
...
...
@@ -859,7 +868,7 @@ module jp_channel#(
.
m_cr
(
m_cr
)
,
// input[9:0]
.
mb_din
(
mb_data_out
)
,
// input[7:0]
.
bayer_phase
(
bayer_phase
)
,
// input[1:0]
.
pre
_first_in
(
mb_pre_first_out
)
,
// input
.
pre
2_first_in
(
mb_pre2_first_out
)
,
// input
.
signed_y
(
signed_y
)
,
// output[8:0] reg
.
signed_c
(
signed_c
)
,
// output[8:0] reg
.
yaddrw
(
yaddrw
)
,
// output[7:0] reg
...
...
fpga_version.vh
View file @
78d2e067
...
...
@@ -31,7 +31,9 @@
* contains all the components and scripts required to completely simulate it
* with at least one of the Free Software programs.
*******************************************************************************/
parameter FPGA_VERSION = 32'h0393006e; // Trying lane switch again after bug fix, failing 1 in ddr3_mclk -> ddr3_clk_div by -0.023
parameter FPGA_VERSION = 32'h0393006f; // Fixing JP4 mode - xcl -0.002 -0.004 2, utilization 15144 (77.07 %)
// parameter FPGA_VERSION = 32'h0393006f; // Fixing JP4 mode - xclk -0.209/-2.744/23, utilization 15127 (76.98%)
// parameter FPGA_VERSION = 32'h0393006e; // Trying lane switch again after bug fix, failing 1 in ddr3_mclk -> ddr3_clk_div by -0.023
// parameter FPGA_VERSION = 32'h0393006d; // -1 with lane switch - does not work
// parameter FPGA_VERSION = 32'h0393006d; // Reversing pixels/lanes order xclk violated -0.154
// parameter FPGA_VERSION = 32'h0393006c; // will try debug for HiSPi. xclk violated by -0.030, slices 15062 (76.65%)
...
...
includes/x393_simulation_parameters.vh
View file @
78d2e067
...
...
@@ -59,6 +59,29 @@
parameter SENSOR_IMAGE_TYPE1 = "RUN1",
parameter SENSOR_IMAGE_TYPE2 = "NORM", // "RUN1",
parameter SENSOR_IMAGE_TYPE3 = "RUN1",
parameter SIMULATE_CMPRS_CMODE0 = CMPRS_CBIT_CMODE_JPEG18,
parameter SIMULATE_CMPRS_CMODE1 = CMPRS_CBIT_CMODE_JPEG18,
parameter SIMULATE_CMPRS_CMODE2 = CMPRS_CBIT_CMODE_JP4,
parameter SIMULATE_CMPRS_CMODE3 = CMPRS_CBIT_CMODE_JP4,
// CMPRS_CBIT_CMODE_JPEG18, //input [31:0] cmode; // [13:9] color mode:
// parameter CMPRS_CBIT_CMODE_JPEG18 = 4'h0, // color 4:2:0
// parameter CMPRS_CBIT_CMODE_MONO6 = 4'h1, // mono 4:2:0 (6 blocks)
// parameter CMPRS_CBIT_CMODE_JP46 = 4'h2, // jp4, 6 blocks, original
// parameter CMPRS_CBIT_CMODE_JP46DC = 4'h3, // jp4, 6 blocks, dc -improved
// parameter CMPRS_CBIT_CMODE_JPEG20 = 4'h4, // mono, 4 blocks (but still not actual monochrome JPEG as the blocks are scanned in 2x2 macroblocks)
// parameter CMPRS_CBIT_CMODE_JP4 = 4'h5, // jp4, 4 blocks, dc-improved
// parameter CMPRS_CBIT_CMODE_JP4DC = 4'h6, // jp4, 4 blocks, dc-improved
// parameter CMPRS_CBIT_CMODE_JP4DIFF = 4'h7, // jp4, 4 blocks, differential
// parameter CMPRS_CBIT_CMODE_JP4DIFFHDR = 4'h8, // jp4, 4 blocks, differential, hdr
// parameter CMPRS_CBIT_CMODE_JP4DIFFDIV2 = 4'h9, // jp4, 4 blocks, differential, divide by 2
// parameter CMPRS_CBIT_CMODE_JP4DIFFHDRDIV2 = 4'ha, // jp4, 4 blocks, differential, hdr,divide by 2
// parameter CMPRS_CBIT_CMODE_MONO1 = 4'hb, // mono JPEG (not yet implemented)
// parameter CMPRS_CBIT_CMODE_MONO4 = 4'he, // mono 4 blocks
parameter SENSOR12BITS_NGPL = 8, // bpf to hact
parameter SENSOR12BITS_NVLO = 1, // VACT=0 in video mode (clocks)
//parameter tMD = 14; //
...
...
memctrl/mcntrl393.v
View file @
78d2e067
...
...
@@ -947,6 +947,7 @@ module mcntrl393 #(
.
ext_rd
(
buf2rd_rd
)
,
// input
.
ext_regen
(
buf2rd_regen
)
,
// input
.
ext_data_out
(
buf2rd_data
)
,
// output[31:0]
// .emul64 (1'b0), // input Modify buffer addresses (used for JP4 until a 64-wide mode is implemented)
.
wclk
(
!
mclk
)
,
// input
.
wpage_in
(
2'b0
)
,
// input[1:0]
.
wpage_set
(
xfer_reset_page2_rd
)
,
// input TODO: Generate @ negedge mclk on frame start
...
...
@@ -982,6 +983,7 @@ module mcntrl393 #(
.
ext_rd
(
buf3rd_rd
)
,
// input
.
ext_regen
(
buf3rd_regen
)
,
// input
.
ext_data_out
(
buf3rd_data
)
,
// output[31:0]
// .emul64 (1'b0), // input Modify buffer addresses (used for JP4 until a 64-wide mode is implemented)
.
wclk
(
!
mclk
)
,
// input
.
wpage_in
(
2'b0
)
,
// input[1:0]
.
wpage_set
(
xfer_reset_page3_rd
)
,
// input @ negedge mclk
...
...
@@ -1017,6 +1019,7 @@ module mcntrl393 #(
.
ext_rd
(
buf4rd_rd
)
,
// input
.
ext_regen
(
buf4rd_regen
)
,
// input
.
ext_data_out
(
buf4rd_data
)
,
// output[31:0]
// .emul64 (1'b0), // input Modify buffer addresses (used for JP4 until a 64-wide mode is implemented)
.
wclk
(
!
mclk
)
,
// input
.
wpage_in
(
2'b0
)
,
// input[1:0]
.
wpage_set
(
xfer_reset_page4_rd
)
,
// input @ negedge mclk
...
...
memctrl/mcntrl_buf_rd.v
View file @
78d2e067
...
...
@@ -43,6 +43,8 @@ module mcntrl_buf_rd #(
input
ext_regen
,
// output register enable
output
[(
1
<<
LOG2WIDTH_RD
)
-
1
:
0
]
ext_data_out
,
// data out
// input emul64, // emulate 64 pixel wide reads with actual 32-wide columns
// in the future - use rd64/wr64 for JP4 mode
input
wclk
,
// !mclk (inverted)
input
[
1
:
0
]
wpage_in
,
// will register to wclk, input OK with mclk
input
wpage_set
,
// set internal write page to wpage_in
...
...
@@ -54,6 +56,9 @@ module mcntrl_buf_rd #(
reg
[
1
:
0
]
page_r
;
reg
[
6
:
0
]
waddr
;
assign
page
=
page_r
;
// wire [4:0] next62_norm = waddr[6:2] + 1;
// wire [4:0] next62_rot = {waddr[2],waddr[6:3]} + 1;
// wire [4:0] next62_emul64 = {next62_rot[3:0],next62_rot[4]};
always
@
(
posedge
wclk
)
begin
if
(
wpage_set
)
page_r
<=
wpage_in
;
...
...
@@ -61,6 +66,13 @@ module mcntrl_buf_rd #(
if
(
page_next
||
wpage_set
)
waddr
<=
0
;
else
if
(
we
)
waddr
<=
waddr
+
1
;
// if (page_next || wpage_set) waddr[1:0] <= 0;
// else if (we) waddr[1:0] <= waddr[1:0] + 1;
// if (page_next || wpage_set) waddr[6:2] <= 0;
// else if (we && (&waddr[1:0])) waddr[6:2] <= emul64 ? next62_emul64 : next62_norm;
end
// ram_512x64w_1kx32r #(
ram_var_w_var_r
#(
...
...
memctrl/mcntrl_ps_pio.v
View file @
78d2e067
...
...
@@ -247,35 +247,36 @@ fifo_same_clock #(
mcntrl_buf_rd
#(
.
LOG2WIDTH_RD
(
5
)
)
chn0_buf_i
(
.
ext_clk
(
port0_clk
)
,
// input
.
ext_raddr
(
port0_addr
)
,
// input[9:0]
.
ext_rd
(
port0_re
)
,
// input
.
ext_regen
(
port0_regen
)
,
// input
.
ext_data_out
(
port0_data
)
,
// output[31:0]
.
wclk
(
!
mclk
)
,
// input
.
ext_clk
(
port0_clk
)
,
// input
.
ext_raddr
(
port0_addr
)
,
// input[9:0]
.
ext_rd
(
port0_re
)
,
// input
.
ext_regen
(
port0_regen
)
,
// input
.
ext_data_out
(
port0_data
)
,
// output[31:0]
// .emul64 (1'b0), // input Modify buffer addresses (used for JP4 until a 64-wide mode is implemented)
.
wclk
(
!
mclk
)
,
// input
.
wpage_in
(
page_out_r_negedge
)
,
// page_neg), // input[1:0]
.
wpage_set
(
page_w_set_negedge
)
,
//wpage_set_chn0_neg), // input
.
page_next
(
buf_wpage_nxt
)
,
// input
.
page
()
,
// output[1:0]
.
we
(
buf_wr
)
,
// input
.
data_in
(
buf_wdata
)
// input[63:0]
.
wpage_set
(
page_w_set_negedge
)
,
//
wpage_set_chn0_neg), // input
.
page_next
(
buf_wpage_nxt
)
,
// input
.
page
()
,
// output[1:0]
.
we
(
buf_wr
)
,
// input
.
data_in
(
buf_wdata
)
// input[63:0]
)
;
// Port 1 (write DDR from AXI) buffer
mcntrl_buf_wr
#(
.
LOG2WIDTH_WR
(
5
)
)
chn1_buf_i
(
.
ext_clk
(
port1_clk
)
,
// input
.
ext_waddr
(
port1_addr
)
,
// input[9:0]
.
ext_we
(
port1_we
)
,
// input
.
ext_data_in
(
port1_data
)
,
// input[31:0]
.
rclk
(
mclk
)
,
// input
.
rpage_in
(
page_out_r
)
,
//
page), // input[1:0]
.
rpage_set
(
page_r_set
)
,
// rpage_set_chn1), // input
.
page_next
(
buf_rpage_nxt
)
,
// input
.
page
()
,
// output[1:0]
.
rd
(
buf_rd
)
,
// input
.
data_out
(
buf_rdata
)
// output[63:0]
.
ext_clk
(
port1_clk
)
,
// input
.
ext_waddr
(
port1_addr
)
,
// input[9:0]
.
ext_we
(
port1_we
)
,
// input
.
ext_data_in
(
port1_data
)
,
// input[31:0]
.
rclk
(
mclk
)
,
// input
.
rpage_in
(
page_out_r
)
,
//
page), // input[1:0]
.
rpage_set
(
page_r_set
)
,
// rpage_set_chn1), // input
.
page_next
(
buf_rpage_nxt
)
,
// input
.
page
()
,
// output[1:0]
.
rd
(
buf_rd
)
,
// input
.
data_out
(
buf_rdata
)
// output[63:0]
)
;
fifo_same_clock
#(
...
...
@@ -283,13 +284,13 @@ fifo_same_clock #(
.
DATA_DEPTH
(
PAGE_FIFO_DEPTH
)
)
page_fifo1_i
(
.
rst
(
1'b0
)
,
.
clk
(
mclk
)
,
// posedge
.
clk
(
mclk
)
,
// posedge
.
sync_rst
(
mrst
||
!
nreset_page_fifo
)
,
// synchronously reset fifo;
.
we
(
channel_pgm_en
)
,
.
re
(
buf_run
)
,
.
data_in
(
{
cmd_wr
,
cmd_page
}
)
,
//
page),
.
data_in
(
{
cmd_wr
,
cmd_page
}
)
,
//
page),
.
data_out
(
{
cmd_wr_out
,
page_out
}
)
,
.
nempty
()
,
//
page_fifo1_nempty),
.
nempty
()
,
//
page_fifo1_nempty),
.
half_full
()
)
;
...
...
py393/dbg/x393_mcntrl.pickle
View file @
78d2e067
This source diff could not be displayed because it is too large. You can
view the blob
instead.
py393/x393_cmprs.py
View file @
78d2e067
...
...
@@ -279,6 +279,8 @@ class X393Cmprs(object):
window_top
,
byte32
,
tile_width
,
tile_vstep
,
# = 16
tile_height
,
#= 18
extra_pages
,
disable_need
):
"""
...
...
@@ -294,11 +296,13 @@ class X393Cmprs(object):
@param window_top - 16-bit window top margin (in scan lines
@param byte32 - 32-byte columns
@param tile_width tile width,
@param tile_vstep tile vertical step in pixel rows (JPEG18/jp4 = 16)
@param tile_height tile height: 18 for color JPEG, 16 fore JP$ flavors,
@param extra_pages extra pages needed (1)
@param disable_need disable need (preference to sensor channels - they can not wait
"""
tile_vstep
=
16
tile_height
=
18
#
tile_vstep = 16
#
tile_height= 18
base_addr
=
vrlg
.
MCONTR_CMPRS_BASE
+
vrlg
.
MCONTR_CMPRS_INC
*
num_sensor
;
mode
=
x393_mcntrl
.
func_encode_mode_scan_tiled
(
skip_too_late
=
False
,
...
...
@@ -352,7 +356,7 @@ class X393Cmprs(object):
# run_mode = run_mode) #0 - reset, 2 - run single from memory, 3 - run repetitive
def
setup_compressor_channel
(
self
,
num_sensor
,
chn
,
qbank
,
dc_sub
,
cmode
,
...
...
@@ -367,7 +371,7 @@ class X393Cmprs(object):
coring
,
verbose
=
0
):
"""
@param
num_sensor - sensor port number
(0..3)
@param
chn - compressor channel
(0..3)
@param qbank - quantization table page (0..15)
@param dc_sub - True - subtract DC before running DCT, False - no subtraction, convert as is,
@param cmode - color mode:
...
...
@@ -397,7 +401,7 @@ class X393Cmprs(object):
"""
if
verbose
>
0
:
print
(
"COMPRESSOR_SETUP"
)
print
(
"num_sensor = "
,
num_sensor
)
print
(
"num_sensor = "
,
chn
)
print
(
"qbank = "
,
qbank
)
print
(
"dc_sub = "
,
dc_sub
)
print
(
"cmode = "
,
cmode
)
...
...
@@ -405,27 +409,27 @@ class X393Cmprs(object):
print
(
"bayer = "
,
bayer
)
print
(
"focus_mode = "
,
focus_mode
)
self
.
compressor_control
(
chn
=
num_sensor
,
# sen
sor channel number (0..3)
chn
=
chn
,
# compres
sor channel number (0..3)
qbank
=
qbank
,
# [6:3] quantization table page
dc_sub
=
dc_sub
,
# [8:7] subtract DC
cmode
=
cmode
,
# [13:9] color mode:
multi_frame
=
multi_frame
,
# [15:14] 0 - single-frame buffer, 1 - multiframe video memory buffer
bayer
=
bayer
,
# [20:18] # Bayer shift
focus_mode
=
focus_mode
)
# [23:21] Set focus mode
focus_mode
=
focus_mode
)
# [23:21] Set focus mode
self
.
compressor_format
(
chn
=
num_sensor
,
# sen
sor channel number (0..3)
chn
=
chn
,
# compres
sor channel number (0..3)
num_macro_cols_m1
=
num_macro_cols_m1
,
# number of macroblock colums minus 1
num_macro_rows_m1
=
num_macro_rows_m1
,
# number of macroblock rows minus 1
left_margin
=
left_margin
)
# left margin of the first pixel (0..31) for 32-pixel wide colums in memory access
self
.
compressor_color_saturation
(
chn
=
num_sensor
,
# sen
sor channel number (0..3)
chn
=
chn
,
# compres
sor channel number (0..3)
colorsat_blue
=
colorsat_blue
,
# color saturation for blue (10 bits) #'h90 for 100%
colorsat_red
=
colorsat_red
)
# color saturation for red (10 bits) # 'b6 for 100%
colorsat_red
=
colorsat_red
)
# color saturation for red (10 bits) # 'b6 for 100%
self
.
compressor_coring
(
chn
=
num_sensor
,
# sen
sor channel number (0..3)
chn
=
chn
,
# compres
sor channel number (0..3)
coring
=
coring
);
# coring value
py393/x393_jpeg.py
View file @
78d2e067
...
...
@@ -416,7 +416,7 @@ class X393Jpeg(object):
portrait
=
False
,
height
=
1936
,
width
=
2592
,
color_mode
=
0
,
color_mode
=
vrlg
.
CMPRS_CBIT_CMODE_JPEG18
,
byrshift
=
0
,
verbose
=
1
):
"""
...
...
@@ -633,7 +633,7 @@ class X393Jpeg(object):
y_quality
=
100
,
#80,
c_quality
=
None
,
portrait
=
False
,
color_mode
=
0
,
# color_mode = None, # vrlg.CMPRS_CBIT_CMODE_JPEG18, # read it from the saved
byrshift
=
0
,
server_root
=
"/www/pages/"
,
verbose
=
1
):
...
...
@@ -644,7 +644,6 @@ class X393Jpeg(object):
@param y_quality - 1..100 - quantization quality for Y component
@param c_quality - 1..100 - quantization quality for color components (None - use y_quality)
@param portrait - False - use normal order, True - transpose for portrait mode images
@param color_mode - one of the image formats (jpeg, jp4,)
@param byrshift - Bayer shift
@param server_root - files ystem path to the web server root directory
@param verbose - verbose level
...
...
@@ -657,6 +656,11 @@ class X393Jpeg(object):
allFiles
=
True
except
:
pass
window
=
self
.
x393_sens_cmprs
.
specify_window
()
if
window
[
"cmode"
]
==
vrlg
.
CMPRS_CBIT_CMODE_JP4
:
file_path
=
file_path
.
replace
(
".jpeg"
,
".jp4"
)
elif
window
[
"cmode"
]
==
vrlg
.
CMPRS_CBIT_CMODE_JP46
:
file_path
=
file_path
.
replace
(
".jpeg"
,
".jp46"
)
if
allFiles
:
html_text
=
"""
<html>
...
...
@@ -689,7 +693,7 @@ class X393Jpeg(object):
y_quality
=
y_quality
,
#80,
c_quality
=
c_quality
,
portrait
=
portrait
,
color_mode
=
color_mode
,
color_mode
=
window
[
"cmode"
],
#
byrshift
=
byrshift
,
verbose
=
verbose
)
html_text
+=
html_text_finish
...
...
@@ -705,14 +709,18 @@ class X393Jpeg(object):
with
open
(
server_root
+
html_name
,
"w+b"
)
as
bf
:
bf
.
write
(
html_text
)
return
if
verbose
>
0
:
print
(
"window[height]"
,
window
[
"height"
])
print
(
"window[width]"
,
window
[
"width"
])
print
(
"window[cmode]"
,
window
[
"cmode"
])
print
(
"window="
,
window
)
jpeg_data
=
self
.
jpegheader_create
(
y_quality
=
y_quality
,
c_quality
=
c_quality
,
portrait
=
portrait
,
height
=
x393_sens_cmprs
.
GLBL_WINDOW
[
"height"
]
&
0xfff0
,
width
=
x393_sens_cmprs
.
GLBL_WINDOW
[
"width"
]
&
0xfff0
,
color_mode
=
color_mode
,
height
=
window
[
"height"
]
&
0xfff0
,
#
x393_sens_cmprs.GLBL_WINDOW["height"] & 0xfff0,
width
=
window
[
"width"
]
&
0xfff0
,
#
x393_sens_cmprs.GLBL_WINDOW["width"] & 0xfff0,
color_mode
=
window
[
"cmode"
],
#
color_mode,
byrshift
=
byrshift
,
verbose
=
verbose
-
1
)
meta
=
self
.
x393_cmprs_afi
.
afi_mux_get_image_meta
(
...
...
@@ -819,6 +827,12 @@ class X393Jpeg(object):
ff d9
"""
"""
JP46: demuxing...
Corrupt JPEG data: bad Huffman code
Corrupt JPEG data: bad Huffman code
Corrupt JPEG data: bad Huffman code
#should be no MSB first (0x31c68400)
cd /usr/local/verilog/; test_mcntrl.py @hargs
...
...
@@ -865,6 +879,14 @@ compressor_control 0 2
jpeg_write "img.jpeg" 0
#default gain = 0xa, set red and blue (outdoors)
write_sensor_i2c 0 1 0 0x30280014
write_sensor_i2c 0 1 0 0x302c001a
write_sensor_i2c 0 1 0 0x302e0020
write_sensor_i2c 0 1 0 0x3028001e
write_sensor_i2c 0 1 0 0x302c0021
write_sensor_i2c 0 1 0 0x302e0030
Camera compressors testing sequence
...
...
py393/x393_sens_cmprs.py
View file @
78d2e067
...
...
@@ -279,6 +279,18 @@ class X393SensCmprs(object):
sensorType
=
self
.
getSensorInterfaceType
()
if
verbose
>
0
:
print
(
"Sensor port
%
d interface type:
%
s"
%
(
num_sensor
,
sensorType
))
window
=
self
.
specify_window
(
window_width
=
window_width
,
window_height
=
window_height
,
window_left
=
window_left
,
window_top
=
window_top
,
cmode
=
None
,
# will use 0
verbose
=
0
)
window_width
=
window
[
"width"
]
window_height
=
window
[
"height"
]
window_left
=
window
[
"left"
]
window_top
=
window
[
"top"
]
"""
cmode = window["cmode"]
if window_width is None:
window_width = SENSOR_DEFAULTS[sensorType]["width"]
if window_height is None:
...
...
@@ -287,6 +299,7 @@ class X393SensCmprs(object):
window_left = SENSOR_DEFAULTS[sensorType]["left"]
if window_top is None:
window_top = SENSOR_DEFAULTS[sensorType]["top"]
"""
#setting up histogram window, same for parallel, similar for serial
...
...
@@ -386,7 +399,7 @@ class X393SensCmprs(object):
run_mode
=
0
)
# reset compressor
#TODO: Calculate from the image size?
self
.
x393Cmprs
.
setup_compressor_channel
(
num_sensor
=
num_sensor
,
chn
=
num_sensor
,
qbank
=
0
,
dc_sub
=
True
,
cmode
=
vrlg
.
CMPRS_CBIT_CMODE_JPEG18
,
...
...
@@ -417,10 +430,12 @@ class X393SensCmprs(object):
print
(
"frame_full_width = 0x
%
x"
%
(
frame_full_width
))
print
(
"window_width = 0x
%
x"
%
(
width32
*
2
))
# window_width >> 4)) # width in 16 - bursts, made evem
print
(
"window_height = 0x
%
x"
%
(
window_height
&
0xfffffff0
))
print
(
"window_left = 0x
%
x"
%
(
left_tiles32
*
2
))
# window_left >> 4)) # le
x
t in 16-byte bursts, made even
print
(
"window_left = 0x
%
x"
%
(
left_tiles32
*
2
))
# window_left >> 4)) # le
f
t in 16-byte bursts, made even
print
(
"window_top = 0x
%
x"
%
(
window_top
))
print
(
"byte32 = 1"
)
print
(
"tile_width = 2"
)
print
(
"tile_vstep = 16"
)
print
(
"tile_height = 18"
)
print
(
"extra_pages = 1"
)
print
(
"disable_need = 1"
)
...
...
@@ -436,6 +451,8 @@ class X393SensCmprs(object):
window_top
=
window_top
,
# input [31:0] window_top;
byte32
=
1
,
tile_width
=
2
,
tile_vstep
=
16
,
tile_height
=
18
,
extra_pages
=
1
,
disable_need
=
1
)
...
...
@@ -574,29 +591,52 @@ class X393SensCmprs(object):
repet_mode
=
True
,
# Normal mode, single trigger - just for debugging TODO: re-assign?
trig
=
False
)
return
True
def
specify_window
(
self
,
window_width
=
None
,
# 2592
window_height
=
None
,
# 1944
window_left
=
None
,
# 0
window_top
=
None
,
# 0? 1?
cmode
=
None
,
verbose
=
1
):
global
GLBL_WINDOW
if
GLBL_WINDOW
is
None
:
GLBL_WINDOW
=
{}
sensorType
=
self
.
getSensorInterfaceType
()
if
verbose
>
0
:
print
(
"Sensor interface type:
%
s"
%
(
sensorType
))
if
window_width
is
None
:
window_width
=
SENSOR_DEFAULTS
[
sensorType
][
"width"
]
try
:
window_width
=
GLBL_WINDOW
[
"width"
]
except
:
window_width
=
SENSOR_DEFAULTS
[
sensorType
][
"width"
]
if
window_height
is
None
:
window_height
=
SENSOR_DEFAULTS
[
sensorType
][
"height"
]
try
:
window_height
=
GLBL_WINDOW
[
"height"
]
except
:
window_height
=
SENSOR_DEFAULTS
[
sensorType
][
"height"
]
if
window_left
is
None
:
window_left
=
SENSOR_DEFAULTS
[
sensorType
][
"left"
]
try
:
window_left
=
GLBL_WINDOW
[
"left"
]
except
:
window_left
=
SENSOR_DEFAULTS
[
sensorType
][
"left"
]
if
window_top
is
None
:
window_top
=
SENSOR_DEFAULTS
[
sensorType
][
"top"
]
global
GLBL_WINDOW
try
:
window_top
=
GLBL_WINDOW
[
"top"
]
except
:
window_top
=
SENSOR_DEFAULTS
[
sensorType
][
"top"
]
if
cmode
is
None
:
try
:
cmode
=
GLBL_WINDOW
[
"cmode"
]
except
:
cmode
=
0
GLBL_WINDOW
=
{
"width"
:
window_width
,
"height"
:
window_height
,
"left"
:
window_left
,
"top"
:
window_top
}
"top"
:
window_top
,
"cmode"
:
cmode
}
return
GLBL_WINDOW
def
specify_phys_memory
(
self
,
...
...
@@ -628,7 +668,178 @@ class X393SensCmprs(object):
print
(
"membridge size =
%
d bytes"
%
(
GLBL_MEMBRIDGE_END
-
GLBL_MEMBRIDGE_START
))
print
(
"memory buffer end = 0x
%
x"
%
(
GLBL_BUFFER_END
))
def
setup_compressor
(
self
,
chn
,
cmode
=
vrlg
.
CMPRS_CBIT_CMODE_JPEG18
,
bayer
=
0
,
qbank
=
0
,
dc_sub
=
1
,
multi_frame
=
1
,
focus_mode
=
0
,
coring
=
0
,
window_width
=
None
,
# 2592, # 2592
window_height
=
None
,
# 1944, # 1944
window_left
=
None
,
# 0, # 0
window_top
=
None
,
# 0, # 0? 1?
last_buf_frame
=
1
,
# - just 2-frame buffer
colorsat_blue
=
0x180
,
# 0x90 fo 1x
colorsat_red
=
0x16c
,
# 0xb6 for x1
verbose
=
1
):
"""
@param chn - compressor channel (0..3)
@param cmode - color mode:
CMPRS_CBIT_CMODE_JPEG18 = 0 - color 4:2:0
CMPRS_CBIT_CMODE_MONO6 = 1 - mono 4:2:0 (6 blocks)
CMPRS_CBIT_CMODE_JP46 = 2 - jp4, 6 blocks, original
CMPRS_CBIT_CMODE_JP46DC = 3 - jp4, 6 blocks, dc -improved
CMPRS_CBIT_CMODE_JPEG20 = 4 - mono, 4 blocks (but still not actual monochrome JPEG as the blocks are scanned in 2x2 macroblocks)
CMPRS_CBIT_CMODE_JP4 = 5 - jp4, 4 blocks, dc-improved
CMPRS_CBIT_CMODE_JP4DC = 6 - jp4, 4 blocks, dc-improved
CMPRS_CBIT_CMODE_JP4DIFF = 7 - jp4, 4 blocks, differential
CMPRS_CBIT_CMODE_JP4DIFFHDR = 8 - jp4, 4 blocks, differential, hdr
CMPRS_CBIT_CMODE_JP4DIFFDIV2 = 9 - jp4, 4 blocks, differential, divide by 2
CMPRS_CBIT_CMODE_JP4DIFFHDRDIV2 = 10 - jp4, 4 blocks, differential, hdr,divide by 2
CMPRS_CBIT_CMODE_MONO1 = 11 - mono JPEG (not yet implemented)
CMPRS_CBIT_CMODE_MONO4 = 14 - mono 4 blocks
@param qbank - quantization table page (0..15)
@param dc_sub - True - subtract DC before running DCT, False - no subtraction, convert as is,
@param multi_frame - False - single-frame buffer, True - multi-frame video memory buffer,
@param bayer - Bayer shift (0..3)
@param focus_mode - focus mode - how to combine image with "focus quality" in the result image
@param coring - coring value
@param window_width - (here - in pixels)
@param window_height - 16-bit window height in scan lines
@param window_left - left margin of the window (here - in pixels)
@param window_top - top margin of the window (16 bit)
@param last_buf_frame) - 16-bit number of the last frame in a buffer
@param colorsat_blue - color saturation for blue (10 bits), 0x90 for 100
%
@param colorsat_red - color saturation for red (10 bits), 0xb6 for 100
%
@param verbose - verbose level
"""
try
:
if
(
chn
==
all
)
or
(
chn
[
0
]
.
upper
()
==
"A"
):
#all is a built-in function
for
chn
in
range
(
4
):
self
.
setup_compressor
(
self
,
chn
=
chn
,
cmode
=
cmode
,
qbank
=
qbank
,
dc_sub
=
dc_sub
,
multi_frame
=
multi_frame
,
bayer
=
bayer
,
focus_mode
=
focus_mode
,
coring
=
coring
,
window_width
=
None
,
# 2592, # 2592
window_height
=
None
,
# 1944, # 1944
window_left
=
None
,
# 0, # 0
window_top
=
None
,
# 0, # 0? 1?
last_buf_frame
=
last_buf_frame
,
# - just 2-frame buffer
colorsat_blue
=
colorsat_blue
,
#0x180 # 0x90 for 1x
colorsat_red
=
colorsat_red
,
#0x16c, # 0xb6 for x1
verbose
=
verbose
)
return
except
:
pass
window
=
self
.
specify_window
(
window_width
=
window_width
,
window_height
=
window_height
,
window_left
=
window_left
,
window_top
=
window_top
,
cmode
=
cmode
,
# will use 0
verbose
=
0
)
window_width
=
window
[
"width"
]
window_height
=
window
[
"height"
]
window_left
=
window
[
"left"
]
window_top
=
window
[
"top"
]
cmode
=
window
[
"cmode"
]
num_sensor
=
chn
# 1:1 sensor - compressor
align_to_bursts
=
64
# align full width to multiple of align_to_bursts. 64 is the size of memory access
width_in_bursts
=
window_width
>>
4
if
(
window_width
&
0xf
):
width_in_bursts
+=
1
compressor_left_margin
=
window_left
%
32
num_burst_in_line
=
(
window_left
>>
4
)
+
width_in_bursts
num_pages_in_line
=
num_burst_in_line
//
align_to_bursts
;
if
num_burst_in_line
%
align_to_bursts
:
num_pages_in_line
+=
1
frame_full_width
=
num_pages_in_line
*
align_to_bursts
num8rows
=
(
window_top
+
window_height
)
//
8
if
(
window_top
+
window_height
)
%
8
:
num8rows
+=
1
frame_start_address_inc
=
num8rows
*
frame_full_width
num_macro_cols_m1
=
(
window_width
>>
4
)
-
1
num_macro_rows_m1
=
(
window_height
>>
4
)
-
1
frame_start_address
=
(
last_buf_frame
+
1
)
*
frame_start_address_inc
*
num_sensor
self
.
x393Cmprs
.
setup_compressor_channel
(
chn
=
chn
,
qbank
=
qbank
,
dc_sub
=
dc_sub
,
cmode
=
cmode
,
# vrlg.CMPRS_CBIT_CMODE_JPEG18,
multi_frame
=
True
,
bayer
=
bayer
,
focus_mode
=
focus_mode
,
num_macro_cols_m1
=
num_macro_cols_m1
,
num_macro_rows_m1
=
num_macro_rows_m1
,
left_margin
=
compressor_left_margin
,
colorsat_blue
=
colorsat_blue
,
colorsat_red
=
colorsat_red
,
coring
=
0
,
verbose
=
verbose
)
# TODO: calculate widths correctly!
if
cmode
==
vrlg
.
CMPRS_CBIT_CMODE_JPEG18
:
tile_margin
=
2
# 18x18 instead of 16x16
tile_width
=
2
extra_pages
=
1
else
:
# actually other modes should be parsed here, now considering just JP4 flavors
tile_margin
=
0
# 18x18 instead of 16x16
tile_width
=
4
# extra_pages = (0,1)[(compressor_left_margin % 16) != 0] # memory access block border does not cut macroblocks
extra_pages
=
1
# just testing
tile_vstep
=
16
tile_height
=
tile_vstep
+
tile_margin
left_tiles32
=
window_left
//
32
last_tile32
=
(
window_left
+
((
num_macro_cols_m1
+
1
)
*
16
)
+
tile_margin
-
1
)
//
32
width32
=
last_tile32
-
left_tiles32
+
1
# number of 32-wide tiles needed in each row
if
(
verbose
>
0
)
:
print
(
"setup_compressor_memory:"
)
print
(
"num_sensor = "
,
num_sensor
)
print
(
"frame_sa = 0x
%
x"
%
(
frame_start_address
))
print
(
"frame_sa_inc = 0x
%
x"
%
(
frame_start_address_inc
))
print
(
"last_frame_num = 0x
%
x"
%
(
last_buf_frame
))
print
(
"frame_full_width = 0x
%
x"
%
(
frame_full_width
))
print
(
"window_width = 0x
%
x"
%
(
width32
*
2
))
# window_width >> 4)) # width in 16 - bursts, made evem
print
(
"window_height = 0x
%
x"
%
(
window_height
&
0xfffffff0
))
print
(
"window_left = 0x
%
x"
%
(
left_tiles32
*
2
))
# window_left >> 4)) # left in 16-byte bursts, made even
print
(
"window_top = 0x
%
x"
%
(
window_top
))
print
(
"byte32 = 1"
)
print
(
"tile_width = 0x
%
x"
%
(
tile_width
))
print
(
"tile_vstep = 0x
%
x"
%
(
tile_vstep
))
print
(
"tile_height = 0x
%
x"
%
(
tile_height
))
print
(
"extra_pages = 0x
%
x"
%
(
extra_pages
))
print
(
"disable_need = 1"
)
self
.
x393Cmprs
.
setup_compressor_memory
(
num_sensor
=
num_sensor
,
frame_sa
=
frame_start_address
,
# input [31:0] frame_sa; # 22-bit frame start address ((3 CA LSBs==0. BA==0)
frame_sa_inc
=
frame_start_address_inc
,
# input [31:0] frame_sa_inc; # 22-bit frame start address increment ((3 CA LSBs==0. BA==0)
last_frame_num
=
last_buf_frame
,
# input [31:0] last_frame_num; # 16-bit number of the last frame in a buffer
frame_full_width
=
frame_full_width
,
# input [31:0] frame_full_width; # 13-bit Padded line length (8-row increment), in 8-bursts (16 bytes)
window_width
=
(
width32
*
2
),
# input [31:0] window_width; # 13 bit - in 8*16=128 bit bursts
window_height
=
window_height
&
0xfffffff0
,
# input [31:0] window_height; # 16 bit
window_left
=
left_tiles32
*
2
,
# input [31:0] window_left;
window_top
=
window_top
,
# input [31:0] window_top;
byte32
=
1
,
tile_width
=
tile_width
,
tile_vstep
=
tile_vstep
,
tile_height
=
tile_height
,
extra_pages
=
extra_pages
,
disable_need
=
1
)
def
setup_all_sensors
(
self
,
setup_membridge
=
False
,
exit_step
=
None
,
...
...
@@ -678,7 +889,7 @@ class X393SensCmprs(object):
@param last_buf_frame) - 16-bit number of the last frame in a buffer
@param colorsat_blue - color saturation for blue (10 bits), 0x90 for 100
%
@param colorsat_red - color saturation for red (10 bits), 0xb6 for 100
%
@param clk_sel - True - use pixel clock from the sensor, False - use internal clock (provided to the sensor), None - no ch
na
ge
@param clk_sel - True - use pixel clock from the sensor, False - use internal clock (provided to the sensor), None - no ch
an
ge
@param histogram_left - histogram window left margin
@param histogram_top - histogram window top margin
@param histogram_width_m1 - one less than window width. If 0 - use frame right margin (end of HACT)
...
...
@@ -692,6 +903,17 @@ class X393SensCmprs(object):
sensorType
=
self
.
getSensorInterfaceType
()
if
verbose
>
0
:
print
(
"Sensor interface type:
%
s"
%
(
sensorType
))
window
=
self
.
specify_window
(
window_width
=
window_width
,
window_height
=
window_height
,
window_left
=
window_left
,
window_top
=
window_top
,
cmode
=
None
,
# will use 0
verbose
=
0
)
window_width
=
window
[
"width"
]
window_height
=
window
[
"height"
]
window_left
=
window
[
"left"
]
window_top
=
window
[
"top"
]
"""
if window_width is None:
window_width = SENSOR_DEFAULTS[sensorType]["width"]
if window_height is None:
...
...
@@ -700,7 +922,7 @@ class X393SensCmprs(object):
window_left = SENSOR_DEFAULTS[sensorType]["left"]
if window_top is None:
window_top = SENSOR_DEFAULTS[sensorType]["top"]
"""
#setting up histogram window, same for parallel, similar for serial
if
histogram_left
is
None
:
...
...
@@ -713,12 +935,14 @@ class X393SensCmprs(object):
histogram_height_m1
=
window_height
-
1145
self
.
specify_phys_memory
(
circbuf_chn_size
=
circbuf_chn_size
)
"""
self.specify_window (window_width = window_width,
window_height = window_height,
window_left = window_left,
window_top = window_top,
cmode = None, # will use 0
verbose = 0)
"""
#TODO: calculate addresses/lengths
"""
AFI mux is programmed in 32-byte chunks
...
...
util_modules/debug_master.v
View file @
78d2e067
...
...
@@ -67,6 +67,7 @@ module debug_master #(
reg
ld_r
;
reg
cmd
;
//command stae (0 - idle)
reg
[
DEBUG_CMD_LATENCY
:
0
]
cmd_reg
;
wire
[
3
:
0
]
debug_latency_plus1
=
DEBUG_CMD_LATENCY
+
1
;
wire
set_status_w
=
cmd_we
&&
(
cmd_a
==
DEBUG_SET_STATUS
)
;
wire
shift32_w
=
cmd_we
&&
(
cmd_a
==
DEBUG_SHIFT_DATA
)
;
...
...
@@ -104,7 +105,7 @@ module debug_master #(
)
dly_16_i
(
.
clk
(
mclk
)
,
// input
.
rst
(
1'b0
)
,
// input
.
dly
(
DEBUG_CMD_LATENCY
+
1
)
,
// input[3:0]
.
dly
(
debug_latency_plus1
)
,
//
DEBUG_CMD_LATENCY+1), // input[3:0]
.
din
(
&
cntr
)
,
// input[0:0]
.
dout
(
shift_done
)
// output[0:0]
)
;
...
...
x393_testbench03.sav
View file @
78d2e067
[*]
[*] GTKWave Analyzer v3.3.66 (w)1999-2015 BSI
[*]
Tue Nov 10 02:42:47
2015
[*]
Sun Nov 15 06:56:54
2015
[*]
[dumpfile] "/home/andrey/git/x393/simulation/x393_testbench03-201511
08002110369
.fst"
[dumpfile_mtime] "Sun Nov
8 07:54:16
2015"
[dumpfile_size] 2
50548392
[dumpfile] "/home/andrey/git/x393/simulation/x393_testbench03-201511
14232724798
.fst"
[dumpfile_mtime] "Sun Nov
15 06:56:52
2015"
[dumpfile_size] 2
00323649
[savefile] "/home/andrey/git/x393/x393_testbench03.sav"
[timestart]
627212
00
[timestart]
1112465
00
[size] 1823 1180
[pos]
192
0 0
*-15.
279701 62772842 108390000 148070000 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
[pos] 0 0
*-15.
001225 111341667 107947388 109212388 108561548
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
[treeopen] x393_testbench03.
[treeopen] x393_testbench03.par12_hispi_psp4l0_i.
[treeopen] x393_testbench03.par12_hispi_psp4l0_i.cmprs_channel_block[0].
...
...
@@ -20,25 +20,35 @@
[treeopen] x393_testbench03.simul_sensor12bits_2_i.
[treeopen] x393_testbench03.x393_i.
[treeopen] x393_testbench03.x393_i.compressor393_i.
[treeopen] x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].
[treeopen] x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.
[treeopen] x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.cmprs_pixel_buf_iface_i.
[treeopen] x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.csconvert_i.
[treeopen] x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.huffman_stuffer_meta_i.
[treeopen] x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.huffman_stuffer_meta_i.bit_stuffer_27_32_i.
[treeopen] x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.huffman_stuffer_meta_i.bit_stuffer_metadata_i.
[treeopen] x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.huffman_stuffer_meta_i.huffman_snglclk_i.
[treeopen] x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.huffman_stuffer_meta_i.huffman_snglclk_i.huffman_merge_code_literal_i.
[treeopen] x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].
[treeopen] x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.
[treeopen] x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_macroblock_buf_iface_i.
[treeopen] x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_pixel_buf_iface_i.
[treeopen] x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.csconvert_i.
[treeopen] x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.csconvert_i.i_csconvert_jp4.
[treeopen] x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.huffman_stuffer_meta_i.
[treeopen] x393_testbench03.x393_i.compressor393_i.genblk3.
[treeopen] x393_testbench03.x393_i.compressor393_i.genblk3.cmprs_afi0_mux_i.
[treeopen] x393_testbench03.x393_i.mcntrl393_i.
[treeopen] x393_testbench03.x393_i.mcntrl393_i.mcntrl_linear_rw_chn1_i.
[treeopen] x393_testbench03.x393_i.mcntrl393_i.memctrl16_i.
[treeopen] x393_testbench03.x393_i.mcntrl393_i.memctrl16_i.mcontr_sequencer_i.
[treeopen] x393_testbench03.x393_i.mcntrl393_i.memctrl16_i.scheduler16_i.
[treeopen] x393_testbench03.x393_i.mcntrl393_i.sens_comp_block[0].
[treeopen] x393_testbench03.x393_i.mcntrl393_i.sens_comp_block[0].mcntrl_linear_wr_sensor_i.
[treeopen] x393_testbench03.x393_i.mcntrl393_i.sens_comp_block[0].mcntrl_tiled_rd_compressor_i.
[treeopen] x393_testbench03.x393_i.mcntrl393_i.sens_comp_block[2].
[treeopen] x393_testbench03.x393_i.mcntrl393_i.sens_comp_block[2].mcntrl_tiled_rd_compressor_i.
[treeopen] x393_testbench03.x393_i.sensors393_i.
[treeopen] x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].
[treeopen] x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.
[treeopen] x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.genblk1.
[treeopen] x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.genblk1.sens_histogram_0_i.
[treeopen] x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.genblk1.sens_histogram_0_i.genblk1.
[treeopen] x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.genblk1.sens_histogram_0_i.genblk1.sens_hist_ram_snglclk_32_i.
...
...
@@ -65,8 +75,8 @@
[treeopen] x393_testbench03.x393_i.sensors393_i.sensor_channel_block[3].
[treeopen] x393_testbench03.x393_i.sensors393_i.sensor_channel_block[3].sensor_channel_i.
[treeopen] x393_testbench03.x393_i.sensors393_i.sensor_channel_block[3].sensor_channel_i.genblk1.
[sst_width] 2
33
[signals_width] 3
48
[sst_width] 2
98
[signals_width] 3
21
[sst_expanded] 1
[sst_vpaned_height] 514
@820
...
...
@@ -80,7 +90,7 @@ x393_testbench03.x393_i.pclk
-
@1000200
-x393_top
@
8
00200
@
c
00200
-sens_10398
@28
x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.pclk
...
...
@@ -99,7 +109,7 @@ x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.se
-group_end
@200
-
@
c
00200
@
8
00200
-sens_hispi12l4
@28
x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sns_mrst
...
...
@@ -648,15 +658,14 @@ x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.se
x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.hispi_lane[0].sens_hispi_lane_i.zero_after_ones_w
@1000200
-sens_hispi_lane0
@1401200
-sens_hispi12l4
@2
9
@2
8
x393_testbench03.ffclk0p
@200
-
@1
000
200
@1
401
200
-sens_10398
@
8
00200
@
c
00200
-sensor_channel_0
@28
x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.mclk
...
...
@@ -920,7 +929,6 @@ x393_testbench03.x393_i.mcntrl393_i.sens_comp_block[0].mcntrl_linear_wr_sensor_i
-
@1401200
-mcntr_linear_rw_sensor0
@1000200
-sensor_channel_0
@800200
-DDR3
...
...
@@ -931,9 +939,7 @@ x393_testbench03.ddr3_i.SDCAS
x393_testbench03.ddr3_i.SDWE
@22
x393_testbench03.ddr3_i.SDA[14:0]
@28
x393_testbench03.ddr3_i.SDBA[2:0]
@22
x393_testbench03.ddr3_i.SDD_D[15:0]
@200
-
...
...
@@ -1025,7 +1031,7 @@ x393_testbench03.PX1_SHUTTER
x393_testbench03.PX1_VACT
@1000200
-PX1
@
8
00200
@
c
00200
-SENSOR0
@28
x393_testbench03.simul_sensor12bits_i.MCLK
...
...
@@ -1045,9 +1051,9 @@ x393_testbench03.simul_sensor12bits_i.stoppedd
x393_testbench03.simul_sensor12bits_i.cntrd[15:0]
@200
-
@1
000
200
@1
401
200
-SENSOR0
@
8
00200
@
c
00200
-par_hispi_sel
@28
x393_testbench03.par12_hispi_psp4l0_i.pclk
...
...
@@ -1107,9 +1113,83 @@ x393_testbench03.par12_hispi_psp4l0_i.simul_clk_div_mult_i.clk_out
x393_testbench03.par12_hispi_psp4l0_i.simul_clk_div_mult_i.en
@1401200
-clk_mult_div
@1000200
-par_hispi_sel
@c00200
-sens_hispi_12l4
@800200
-lane0
@28
x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.ipclk
x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.ipclk2x
@800022
x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.sns_dp[3:0]
@28
(0)x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.sns_dp[3:0]
(1)x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.sns_dp[3:0]
(2)x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.sns_dp[3:0]
(3)x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.sns_dp[3:0]
@1001200
-group_end
@28
x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.sns_clkp
@c00022
x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.sns_d[15:0]
@28
(0)x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.sns_d[15:0]
(1)x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.sns_d[15:0]
(2)x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.sns_d[15:0]
(3)x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.sns_d[15:0]
(4)x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.sns_d[15:0]
(5)x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.sns_d[15:0]
(6)x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.sns_d[15:0]
(7)x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.sns_d[15:0]
(8)x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.sns_d[15:0]
(9)x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.sns_d[15:0]
(10)x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.sns_d[15:0]
(11)x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.sns_d[15:0]
(12)x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.sns_d[15:0]
(13)x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.sns_d[15:0]
(14)x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.sns_d[15:0]
(15)x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.sns_d[15:0]
@1401200
-group_end
@800022
x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.hispi_lane[0].sens_hispi_lane_i.din[3:0]
@28
(0)x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.hispi_lane[0].sens_hispi_lane_i.din[3:0]
(1)x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.hispi_lane[0].sens_hispi_lane_i.din[3:0]
(2)x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.hispi_lane[0].sens_hispi_lane_i.din[3:0]
(3)x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.hispi_lane[0].sens_hispi_lane_i.din[3:0]
@1001200
-group_end
@22
x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.hispi_lane[0].sens_hispi_lane_i.dout[11:0]
@28
x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.hispi_lane[0].sens_hispi_lane_i.dv
x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.hispi_lane[0].sens_hispi_lane_i.sof
x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.hispi_lane[0].sens_hispi_lane_i.eof
x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.hispi_lane[0].sens_hispi_lane_i.sol
x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.hispi_lane[0].sens_hispi_lane_i.eol
@800022
x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.hispi_lane[0].sens_hispi_lane_i.sync_decode[3:0]
@28
(0)x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.hispi_lane[0].sens_hispi_lane_i.sync_decode[3:0]
(1)x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.hispi_lane[0].sens_hispi_lane_i.sync_decode[3:0]
(2)x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.hispi_lane[0].sens_hispi_lane_i.sync_decode[3:0]
(3)x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.hispi_lane[0].sens_hispi_lane_i.sync_decode[3:0]
x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.hispi_lane[0].sens_hispi_lane_i.got_sync
@22
x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.hispi_lane[0].sens_hispi_lane_i.barrel[3:0]
x393_testbench03.x393_i.sensors393_i.sensor_channel_block[0].sensor_channel_i.sens_10398_i.sens_hispi12l4_i.hispi_lane[0].sens_hispi_lane_i.shift_val[1:0]
@1001200
-group_end
@200
-
@1000200
-lane0
@1401200
-sens_hispi_12l4
@c00200
-par_hspi_0
@28
x393_testbench03.par12_hispi_psp4l0_i.clk_n
...
...
@@ -1217,9 +1297,9 @@ x393_testbench03.par12_hispi_psp4l0_i.sdata_dly[3:0]
x393_testbench03.par12_hispi_psp4l0_i.sof_sol_sent
x393_testbench03.par12_hispi_psp4l0_i.vact
x393_testbench03.par12_hispi_psp4l0_i.vact_d
@1
000
200
@1
401
200
-par_hspi_0
@
8
00200
@
c
00200
-scheduler16
@22
x393_testbench03.x393_i.mcntrl393_i.memctrl16_i.scheduler16_i.pri_reg[255:0]
...
...
@@ -1582,9 +1662,9 @@ x393_testbench03.x393_i.mcntrl393_i.memctrl16_i.seq_set
x393_testbench03.x393_i.mcntrl393_i.memctrl16_i.seq_wr
@200
-
@1
000
200
@1
401
200
-scheduler16
@
8
00200
@
c
00200
-mcntr_linear_rw_chn1
@28
x393_testbench03.x393_i.mcntrl393_i.mcntrl_linear_rw_chn1_i.frame_start
...
...
@@ -1616,6 +1696,7 @@ x393_testbench03.x393_i.mcntrl393_i.mcntrl_linear_rw_chn1_i.xfer_done
x393_testbench03.x393_i.membridge_i.start_mclk
@1000200
-membridge
@1401200
-mcntr_linear_rw_chn1
@c00200
-hisogram_channel00
...
...
@@ -2107,6 +2188,106 @@ x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.huff
-stuffer_metadata
@800200
-new_compressor
@28
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.frame_start_dst
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.frame_done_dst
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.reading_frame
@22
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.line_unfinished_dst[15:0]
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.macroblock_x[6:0]
@28
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.first_mb
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.last_mb
@22
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.component_num[2:0]
@28
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.component_first
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.component_color
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.dbg_last_DCAC
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.flush_hclk
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.huffman_stuffer_meta_i.huffman_flush
@c00022
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.huffman_stuffer_meta_i.huffman_snglclk_i.fifo_out[15:0]
@28
(0)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.huffman_stuffer_meta_i.huffman_snglclk_i.fifo_out[15:0]
(1)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.huffman_stuffer_meta_i.huffman_snglclk_i.fifo_out[15:0]
(2)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.huffman_stuffer_meta_i.huffman_snglclk_i.fifo_out[15:0]
(3)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.huffman_stuffer_meta_i.huffman_snglclk_i.fifo_out[15:0]
(4)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.huffman_stuffer_meta_i.huffman_snglclk_i.fifo_out[15:0]
(5)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.huffman_stuffer_meta_i.huffman_snglclk_i.fifo_out[15:0]
(6)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.huffman_stuffer_meta_i.huffman_snglclk_i.fifo_out[15:0]
(7)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.huffman_stuffer_meta_i.huffman_snglclk_i.fifo_out[15:0]
(8)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.huffman_stuffer_meta_i.huffman_snglclk_i.fifo_out[15:0]
(9)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.huffman_stuffer_meta_i.huffman_snglclk_i.fifo_out[15:0]
(10)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.huffman_stuffer_meta_i.huffman_snglclk_i.fifo_out[15:0]
(11)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.huffman_stuffer_meta_i.huffman_snglclk_i.fifo_out[15:0]
(12)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.huffman_stuffer_meta_i.huffman_snglclk_i.fifo_out[15:0]
(13)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.huffman_stuffer_meta_i.huffman_snglclk_i.fifo_out[15:0]
(14)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.huffman_stuffer_meta_i.huffman_snglclk_i.fifo_out[15:0]
(15)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.huffman_stuffer_meta_i.huffman_snglclk_i.fifo_out[15:0]
@1401200
-group_end
@28
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.huffman_stuffer_meta_i.huffman_snglclk_i.gotLastBlock
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.huffman_stuffer_meta_i.huffman_snglclk_i.fifo_re
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.mb_pre_first_out
@22
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.mb_data_out[7:0]
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.signed_y[8:0]
@28
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.ywe
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.yc_pre_first_out
@800200
-cmprs_pix_buf_iface
@22
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_pixel_buf_iface_i.xclk
@28
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.cmprs_pixel_buf_iface_i.mb_pre_end
@22
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.cmprs_pixel_buf_iface_i.buf_ra[11:0]
@800022
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.cmprs_pixel_buf_iface_i.buf_re[3:0]
@28
(0)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.cmprs_pixel_buf_iface_i.buf_re[3:0]
(1)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.cmprs_pixel_buf_iface_i.buf_re[3:0]
(2)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.cmprs_pixel_buf_iface_i.buf_re[3:0]
(3)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.cmprs_pixel_buf_iface_i.buf_re[3:0]
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.cmprs_pixel_buf_iface_i.pre2_first_out
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.cmprs_pixel_buf_iface_i.pre_first_out
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.cmprs_pixel_buf_iface_i.data_valid
@1001200
-group_end
@800200
-memory
-compressor
@22
x393_testbench03.x393_i.mcntrl393_i.sens_comp_block[0].mcntrl_tiled_rd_compressor_i.window_width[13:0]
x393_testbench03.x393_i.mcntrl393_i.sens_comp_block[0].mcntrl_tiled_rd_compressor_i.window_height[16:0]
x393_testbench03.x393_i.mcntrl393_i.sens_comp_block[0].mcntrl_tiled_rd_compressor_i.window_x0[12:0]
x393_testbench03.x393_i.mcntrl393_i.sens_comp_block[0].mcntrl_tiled_rd_compressor_i.window_y0[15:0]
x393_testbench03.x393_i.mcntrl393_i.sens_comp_block[0].mcntrl_tiled_rd_compressor_i.xfer_start32_rd
x393_testbench03.x393_i.mcntrl393_i.sens_comp_block[0].mcntrl_tiled_rd_compressor_i.xfer_bank[2:0]
x393_testbench03.x393_i.mcntrl393_i.sens_comp_block[0].mcntrl_tiled_rd_compressor_i.xfer_row[14:0]
x393_testbench03.x393_i.mcntrl393_i.sens_comp_block[0].mcntrl_tiled_rd_compressor_i.xfer_col[6:0]
x393_testbench03.x393_i.mcntrl393_i.sens_comp_block[0].mcntrl_tiled_rd_compressor_i.rowcol_inc[13:0]
x393_testbench03.x393_i.mcntrl393_i.sens_comp_block[0].mcntrl_tiled_rd_compressor_i.num_rows_m1[5:0]
x393_testbench03.x393_i.mcntrl393_i.sens_comp_block[0].mcntrl_tiled_rd_compressor_i.num_cols_m1[5:0]
@200
-
@28
x393_testbench03.x393_i.mcntrl393_i.sens_comp_block[0].mcntrl_tiled_rd_compressor_i.xfer_partial
@1000200
-compressor
-memory
-cmprs_pix_buf_iface
@800200
-cs_convert18
@200
-
@1000200
-cs_convert18
@800200
-comressor
@22
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.huffman_stuffer_meta_i.di[15:0]
@28
...
...
@@ -2120,15 +2301,15 @@ x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.huff
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.huffman_stuffer_meta_i.huffman_last_block
@22
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.huffman_stuffer_meta_i.stuffer_do32[31:0]
@28
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.huffman_stuffer_meta_i.stuffer_bytes[1:0]
@28
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.huffman_stuffer_meta_i.stuffer_dv
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.huffman_stuffer_meta_i.stuffer_flush_out
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.huffman_stuffer_meta_i.bit_stuffer_escape_i.num_zeros_w[1:0]
@22
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.huffman_stuffer_meta_i.escape_do32[31:0]
@28
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.huffman_stuffer_meta_i.escape_bytes[1:0]
@28
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.huffman_stuffer_meta_i.escape_dv
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.huffman_stuffer_meta_i.escape_flush_out
@22
...
...
@@ -2142,7 +2323,252 @@ x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.huff
@22
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[0].jp_channel_i.huffman_stuffer_meta_i.bit_stuffer_metadata_i.imgsz4[21:0]
@1000200
-comressor
-new_compressor
@800200
- new_compressor_chn2
@c00200
-tile_rd_chn2
@200
-
@1401200
-tile_rd_chn2
@c00200
-mem_buf_cmprs2
@28
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.chn_rd_buf_i.wclk
@22
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.chn_rd_buf_i.data_in[63:0]
@28
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.chn_rd_buf_i.we
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.chn_rd_buf_i.page[1:0]
@c00022
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.chn_rd_buf_i.waddr[6:0]
@28
(0)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.chn_rd_buf_i.waddr[6:0]
(1)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.chn_rd_buf_i.waddr[6:0]
(2)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.chn_rd_buf_i.waddr[6:0]
(3)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.chn_rd_buf_i.waddr[6:0]
(4)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.chn_rd_buf_i.waddr[6:0]
(5)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.chn_rd_buf_i.waddr[6:0]
(6)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.chn_rd_buf_i.waddr[6:0]
@1401200
-group_end
@28
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.chn_rd_buf_i.ext_clk
@800022
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.chn_rd_buf_i.ext_raddr[11:0]
@28
(0)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.chn_rd_buf_i.ext_raddr[11:0]
(1)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.chn_rd_buf_i.ext_raddr[11:0]
(2)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.chn_rd_buf_i.ext_raddr[11:0]
(3)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.chn_rd_buf_i.ext_raddr[11:0]
(4)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.chn_rd_buf_i.ext_raddr[11:0]
(5)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.chn_rd_buf_i.ext_raddr[11:0]
(6)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.chn_rd_buf_i.ext_raddr[11:0]
(7)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.chn_rd_buf_i.ext_raddr[11:0]
(8)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.chn_rd_buf_i.ext_raddr[11:0]
(9)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.chn_rd_buf_i.ext_raddr[11:0]
(10)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.chn_rd_buf_i.ext_raddr[11:0]
(11)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.chn_rd_buf_i.ext_raddr[11:0]
@1001200
-group_end
@28
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.chn_rd_buf_i.ext_rd
@22
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.chn_rd_buf_i.ext_data_out[7:0]
@1401200
-mem_buf_cmprs2
@22
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.huffman_stuffer_meta_i.di[15:0]
@28
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.huffman_stuffer_meta_i.ds
@22
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.huffman_stuffer_meta_i.huffman_do27[26:0]
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.huffman_stuffer_meta_i.huffman_dl[4:0]
@28
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.huffman_stuffer_meta_i.huffman_dv
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.huffman_stuffer_meta_i.huffman_flush
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.huffman_stuffer_meta_i.huffman_last_block
@22
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.huffman_stuffer_meta_i.stuffer_do32[31:0]
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.huffman_stuffer_meta_i.stuffer_bytes[1:0]
@28
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.huffman_stuffer_meta_i.stuffer_dv
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.huffman_stuffer_meta_i.stuffer_flush_out
@22
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.huffman_stuffer_meta_i.escape_do32[31:0]
@28
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.huffman_stuffer_meta_i.escape_bytes[1:0]
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.huffman_stuffer_meta_i.escape_dv
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.huffman_stuffer_meta_i.escape_flush_out
@22
[color] 3
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.huffman_stuffer_meta_i.data_out[31:0]
@28
[color] 3
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.huffman_stuffer_meta_i.data_out_valid
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.huffman_stuffer_meta_i.done
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.huffman_stuffer_meta_i.running
@22
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.huffman_stuffer_meta_i.bit_stuffer_metadata_i.imgsz4[21:0]
@800200
-top_jp_channel2
@28
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.frame_start_dst
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.frame_done_dst
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.reading_frame
@22
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.line_unfinished_dst[15:0]
@28
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.component_first
@22
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.converter_type[2:0]
@28
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.dct_start
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.mb_pre_first_out
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.mb_pre2_first_out
@22
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.mb_data_out[7:0]
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.signed_y[8:0]
@28
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.ywe
@1000200
-top_jp_channel2
@800200
-cmprs_macroblock_buf_iface
@22
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_macroblock_buf_iface_i.left_marg[4:0]
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_macroblock_buf_iface_i.n_blocks_in_row_m1[12:0]
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_macroblock_buf_iface_i.n_block_rows_m1[12:0]
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_macroblock_buf_iface_i.mb_w_m1[5:0]
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_macroblock_buf_iface_i.mb_hper[4:0]
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_macroblock_buf_iface_i.tile_width[1:0]
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_macroblock_buf_iface_i.start_page[1:0]
@28
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_macroblock_buf_iface_i.first_mb
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_macroblock_buf_iface_i.last_mb
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_macroblock_buf_iface_i.mb_pre_end_in
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_macroblock_buf_iface_i.mb_release_buf
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_macroblock_buf_iface_i.mb_pre_start_out
@800022
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_macroblock_buf_iface_i.mb_pre_start[8:0]
@28
(0)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_macroblock_buf_iface_i.mb_pre_start[8:0]
(1)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_macroblock_buf_iface_i.mb_pre_start[8:0]
(2)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_macroblock_buf_iface_i.mb_pre_start[8:0]
(3)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_macroblock_buf_iface_i.mb_pre_start[8:0]
(4)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_macroblock_buf_iface_i.mb_pre_start[8:0]
(5)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_macroblock_buf_iface_i.mb_pre_start[8:0]
(6)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_macroblock_buf_iface_i.mb_pre_start[8:0]
(7)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_macroblock_buf_iface_i.mb_pre_start[8:0]
(8)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_macroblock_buf_iface_i.mb_pre_start[8:0]
@1001200
-group_end
@1000200
-cmprs_macroblock_buf_iface
@800200
-cmprs_pix_buf_iface
@28
(7)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_macroblock_buf_iface_i.mb_pre_start[8:0]
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_pixel_buf_iface_i.last_in_col
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_pixel_buf_iface_i.tile_col_width
@22
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_pixel_buf_iface_i.col_inc[9:4]
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_pixel_buf_iface_i.macroblock_x[6:0]
@23
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_pixel_buf_iface_i.extra_start_addr_w[9:0]
@22
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_pixel_buf_iface_i.extra_start_addr_r[5:0]
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_pixel_buf_iface_i.mb_start_addr[9:0]
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_pixel_buf_iface_i.mb_col_number[2:0]
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_pixel_buf_iface_i.row_sa[11:0]
@28
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_pixel_buf_iface_i.mb_pre_start
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_pixel_buf_iface_i.last_col
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_pixel_buf_iface_i.last_in_tile
@22
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_pixel_buf_iface_i.tile_sa[9:0]
@800022
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_pixel_buf_iface_i.buf_ra[11:0]
@28
(0)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_pixel_buf_iface_i.buf_ra[11:0]
(1)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_pixel_buf_iface_i.buf_ra[11:0]
(2)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_pixel_buf_iface_i.buf_ra[11:0]
(3)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_pixel_buf_iface_i.buf_ra[11:0]
(4)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_pixel_buf_iface_i.buf_ra[11:0]
(5)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_pixel_buf_iface_i.buf_ra[11:0]
(6)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_pixel_buf_iface_i.buf_ra[11:0]
(7)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_pixel_buf_iface_i.buf_ra[11:0]
(8)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_pixel_buf_iface_i.buf_ra[11:0]
(9)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_pixel_buf_iface_i.buf_ra[11:0]
(10)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_pixel_buf_iface_i.buf_ra[11:0]
(11)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_pixel_buf_iface_i.buf_ra[11:0]
@1001200
-group_end
@c00022
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_pixel_buf_iface_i.buf_re[3:0]
@28
(0)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_pixel_buf_iface_i.buf_re[3:0]
(1)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_pixel_buf_iface_i.buf_re[3:0]
(2)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_pixel_buf_iface_i.buf_re[3:0]
(3)x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_pixel_buf_iface_i.buf_re[3:0]
@1401200
-group_end
@28
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_pixel_buf_iface_i.mb_pre_end
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_pixel_buf_iface_i.pre2_first_out
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_pixel_buf_iface_i.pre_first_out
@22
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_pixel_buf_iface_i.data_out[7:0]
@28
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.cmprs_pixel_buf_iface_i.data_valid
@200
-
@1000200
-cmprs_pix_buf_iface
@c00200
-cs_convert_chn2
@800200
-cs_convert_jp4
@28
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.csconvert_i.i_csconvert_jp4.en
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.csconvert_i.i_csconvert_jp4.pre_first_in
@22
x393_testbench03.x393_i.compressor393_i.cmprs_channel_block[2].jp_channel_i.csconvert_i.i_csconvert_jp4.yaddr_cntr[7:0]
@200
-
@1000200
-cs_convert_jp4
@1401200
-cs_convert_chn2
@800200
-memory
-compressor
@22
x393_testbench03.x393_i.mcntrl393_i.sens_comp_block[2].mcntrl_tiled_rd_compressor_i.window_width[13:0]
x393_testbench03.x393_i.mcntrl393_i.sens_comp_block[2].mcntrl_tiled_rd_compressor_i.window_height[16:0]
x393_testbench03.x393_i.mcntrl393_i.sens_comp_block[2].mcntrl_tiled_rd_compressor_i.window_x0[12:0]
x393_testbench03.x393_i.mcntrl393_i.sens_comp_block[2].mcntrl_tiled_rd_compressor_i.window_y0[15:0]
@28
x393_testbench03.x393_i.mcntrl393_i.sens_comp_block[2].mcntrl_tiled_rd_compressor_i.xfer_start32_rd
x393_testbench03.x393_i.mcntrl393_i.sens_comp_block[2].mcntrl_tiled_rd_compressor_i.xfer_bank[2:0]
@22
x393_testbench03.x393_i.mcntrl393_i.sens_comp_block[2].mcntrl_tiled_rd_compressor_i.xfer_row[14:0]
x393_testbench03.x393_i.mcntrl393_i.sens_comp_block[2].mcntrl_tiled_rd_compressor_i.xfer_col[6:0]
x393_testbench03.x393_i.mcntrl393_i.sens_comp_block[2].mcntrl_tiled_rd_compressor_i.rowcol_inc[13:0]
x393_testbench03.x393_i.mcntrl393_i.sens_comp_block[2].mcntrl_tiled_rd_compressor_i.num_rows_m1[5:0]
x393_testbench03.x393_i.mcntrl393_i.sens_comp_block[2].mcntrl_tiled_rd_compressor_i.num_cols_m1[5:0]
@28
x393_testbench03.x393_i.mcntrl393_i.sens_comp_block[2].mcntrl_tiled_rd_compressor_i.xfer_partial
x393_testbench03.x393_i.mcntrl393_i.sens_comp_block[2].mcntrl_tiled_rd_compressor_i.xfer_page_done
@1000200
-compressor
@200
-
@1000200
-memory
- new_compressor_chn2
@22
x393_testbench03.x393_i.compressor393_i.genblk3.cmprs_afi0_mux_i.fifo_rdata0[63:0]
@28
...
...
x393_testbench03.tf
View file @
78d2e067
...
...
@@ -114,7 +114,7 @@ parameter EXTERNAL_TIMESTAMP = 0; // 1 ; // embed local timestamp, 1 - emb
parameter
TRIG_PERIOD
=
6000
;
`
ifdef
HISPI
parameter
HBLANK
=
52
;
// 90; // 12; /// 52; //*********************
parameter
HBLANK
=
92
;
// 72; // 62; //
52; // 90; // 12; /// 52; //*********************
parameter
BLANK_ROWS_BEFORE
=
3
;
// 9; // 3; //8; ///2+2 - a little faster than compressor
parameter
BLANK_ROWS_AFTER
=
1
;
//8;
...
...
@@ -2136,7 +2136,7 @@ simul_axi_hp_wr #(
.FULL_HEIGHT (HISPI_FULL_HEIGHT),
.CLOCK_MPY (HISPI_CLK_MULT),
.CLOCK_DIV (HISPI_CLK_DIV),
.LANE0_DLY (1.
3),
.LANE0_DLY (1.
2), // 1.3), 1.3 not stable with default delays
.LANE1_DLY (2.7),
.LANE2_DLY (0.2),
.LANE3_DLY (1.8),
...
...
@@ -2160,7 +2160,7 @@ simul_axi_hp_wr #(
.FULL_HEIGHT (HISPI_FULL_HEIGHT),
.CLOCK_MPY (HISPI_CLK_MULT),
.CLOCK_DIV (HISPI_CLK_DIV),
.LANE0_DLY (1.
3),
.LANE0_DLY (1.
2), // 1.3), 1.3 not stable with default delays
.LANE1_DLY (2.7),
.LANE2_DLY (0.2),
.LANE3_DLY (1.8),
...
...
@@ -2184,7 +2184,7 @@ simul_axi_hp_wr #(
.FULL_HEIGHT (HISPI_FULL_HEIGHT),
.CLOCK_MPY (HISPI_CLK_MULT),
.CLOCK_DIV (HISPI_CLK_DIV),
.LANE0_DLY (1.
3),
.LANE0_DLY (1.
2), // 1.3), 1.3 not stable with default delays
.LANE1_DLY (2.7),
.LANE2_DLY (0.2),
.LANE3_DLY (1.8),
...
...
@@ -2208,7 +2208,7 @@ simul_axi_hp_wr #(
.FULL_HEIGHT (HISPI_FULL_HEIGHT),
.CLOCK_MPY (HISPI_CLK_MULT),
.CLOCK_DIV (HISPI_CLK_DIV),
.LANE0_DLY (1.
3),
.LANE0_DLY (1.
2), // 1.3), 1.3 not stable with default delays
.LANE1_DLY (2.7),
.LANE2_DLY (0.2),
.LANE3_DLY (1.8),
...
...
@@ -2623,6 +2623,7 @@ task setup_sensor_channel;
reg [31:0] frame_start_address;
reg [31:0] frame_start_address_inc;
reg [31:0] last_buf_frame;
reg [31:0] cmode; // compressor mode
// reg [31:0] camsync_delay;
// reg [ 3:0] sensor_mask;
...
...
@@ -2632,6 +2633,13 @@ task setup_sensor_channel;
// Setting up a single sensor channel 0, sunchannel 0
//
begin
case (num_sensor)
2'
h0
:
cmode
=
SIMULATE_CMPRS_CMODE0
;
2
'h1: cmode = SIMULATE_CMPRS_CMODE1;
2'
h2
:
cmode
=
SIMULATE_CMPRS_CMODE2
;
2
'h3: cmode = SIMULATE_CMPRS_CMODE3;
endcase
window_height = FULL_HEIGHT;
window_left = 0;
window_top = 0;
...
...
@@ -2688,49 +2696,112 @@ task setup_sensor_channel;
compressor_run
(
num_sensor
,
0
);
// reset compressor
setup_compressor_channel
(
num_sensor
,
// sensor channel number (0..3)
0
,
// qbank; // [6:3] quantization table page - 100% quality
// 1, // qbank; // [6:3] quantization table page - 85%? quality
1
,
// dc_sub; // [8:7] subtract DC
CMPRS_CBIT_CMODE_JPEG18
,
//input [31:0] cmode; // [13:9] color mode:
// parameter CMPRS_CBIT_CMODE_JPEG18 = 4'h0, // color 4:2:0
// parameter CMPRS_CBIT_CMODE_MONO6 = 4'h1, // mono 4:2:0 (6 blocks)
// parameter CMPRS_CBIT_CMODE_JP46 = 4'h2, // jp4, 6 blocks, original
// parameter CMPRS_CBIT_CMODE_JP46DC = 4'h3, // jp4, 6 blocks, dc -improved
// parameter CMPRS_CBIT_CMODE_JPEG20 = 4'h4, // mono, 4 blocks (but still not actual monochrome JPEG as the blocks are scanned in 2x2 macroblocks)
// parameter CMPRS_CBIT_CMODE_JP4 = 4'h5, // jp4, 4 blocks, dc-improved
// parameter CMPRS_CBIT_CMODE_JP4DC = 4'h6, // jp4, 4 blocks, dc-improved
// parameter CMPRS_CBIT_CMODE_JP4DIFF = 4'h7, // jp4, 4 blocks, differential
// parameter CMPRS_CBIT_CMODE_JP4DIFFHDR = 4'h8, // jp4, 4 blocks, differential, hdr
// parameter CMPRS_CBIT_CMODE_JP4DIFFDIV2 = 4'h9, // jp4, 4 blocks, differential, divide by 2
// parameter CMPRS_CBIT_CMODE_JP4DIFFHDRDIV2 = 4'ha, // jp4, 4 blocks, differential, hdr,divide by 2
// parameter CMPRS_CBIT_CMODE_MONO1 = 4'hb, // mono JPEG (not yet implemented)
// parameter CMPRS_CBIT_CMODE_MONO4 = 4'he, // mono 4 blocks
1
,
// input [31:0] multi_frame; // [15:14] 0 - single-frame buffer, 1 - multiframe video memory buffer
3
,
// 0, // input [31:0] bayer; // [20:18] // Bayer shift
0
,
// input [31:0] focus_mode; // [23:21] Set focus mode
3
,
// num_macro_cols_m1; // number of macroblock colums minus 1
1
,
// num_macro_rows_m1; // number of macroblock rows minus 1
1
,
// input [31:0] left_margin; // left margin of the first pixel (0..31) for 32-pixel wide colums in memory access
'h120, // input [31:0] colorsat_blue; //color saturation for blue (10 bits) //'
h90
for
100
%
'h16c, // colorsat_red; //color saturation for red (10 bits) // '
b6
for
100
%
0
);
// input [31:0] coring; // coring value
if
(
cmode
==
CMPRS_CBIT_CMODE_JPEG18
)
begin
setup_compressor_channel
(
num_sensor
,
// sensor channel number (0..3)
0
,
// qbank; // [6:3] quantization table page - 100% quality
// 1, // qbank; // [6:3] quantization table page - 85%? quality
1
,
// dc_sub; // [8:7] subtract DC
cmode
,
// CMPRS_CBIT_CMODE_JPEG18, //input [31:0] cmode; // [13:9] color mode:
// parameter CMPRS_CBIT_CMODE_JPEG18 = 4'h0, // color 4:2:0
// parameter CMPRS_CBIT_CMODE_MONO6 = 4'h1, // mono 4:2:0 (6 blocks)
// parameter CMPRS_CBIT_CMODE_JP46 = 4'h2, // jp4, 6 blocks, original
// parameter CMPRS_CBIT_CMODE_JP46DC = 4'h3, // jp4, 6 blocks, dc -improved
// parameter CMPRS_CBIT_CMODE_JPEG20 = 4'h4, // mono, 4 blocks (but still not actual monochrome JPEG as the blocks are scanned in 2x2 macroblocks)
// parameter CMPRS_CBIT_CMODE_JP4 = 4'h5, // jp4, 4 blocks, dc-improved
// parameter CMPRS_CBIT_CMODE_JP4DC = 4'h6, // jp4, 4 blocks, dc-improved
// parameter CMPRS_CBIT_CMODE_JP4DIFF = 4'h7, // jp4, 4 blocks, differential
// parameter CMPRS_CBIT_CMODE_JP4DIFFHDR = 4'h8, // jp4, 4 blocks, differential, hdr
// parameter CMPRS_CBIT_CMODE_JP4DIFFDIV2 = 4'h9, // jp4, 4 blocks, differential, divide by 2
// parameter CMPRS_CBIT_CMODE_JP4DIFFHDRDIV2 = 4'ha, // jp4, 4 blocks, differential, hdr,divide by 2
// parameter CMPRS_CBIT_CMODE_MONO1 = 4'hb, // mono JPEG (not yet implemented)
// parameter CMPRS_CBIT_CMODE_MONO4 = 4'he, // mono 4 blocks
1
,
// input [31:0] multi_frame; // [15:14] 0 - single-frame buffer, 1 - multiframe video memory buffer
3
,
// 0, // input [31:0] bayer; // [20:18] // Bayer shift
0
,
// input [31:0] focus_mode; // [23:21] Set focus mode
3
,
// num_macro_cols_m1; // number of macroblock colums minus 1
1
,
// num_macro_rows_m1; // number of macroblock rows minus 1
1
,
// input [31:0] left_margin; // left margin of the first pixel (0..31) for 32-pixel wide colums in memory access
'h120, // input [31:0] colorsat_blue; //color saturation for blue (10 bits) //'
h90
for
100
%
'h16c, // colorsat_red; //color saturation for red (10 bits) // '
b6
for
100
%
0
);
// input [31:0] coring; // coring value
// TODO: calculate widths correctly!
setup_compressor_memory
(
num_sensor
,
// input [1:0] num_sensor;
frame_start_address
,
// input [31:0] frame_sa; // 22-bit frame start address ((3 CA LSBs==0. BA==0)
frame_start_address_inc
,
// input [31:0] frame_sa_inc; // 22-bit frame start address increment ((3 CA LSBs==0. BA==0)
last_buf_frame
,
// input [31:0] last_frame_num; // 16-bit number of the last frame in a buffer
frame_full_width
,
// input [31:0] frame_full_width; // 13-bit Padded line length (8-row increment), in 8-bursts (16 bytes)
window_width
,
// & ~3, // input [31:0] window_width; // 13 bit - in 8*16=128 bit bursts
window_height
&
~
15
,
// input [31:0] window_height; // 16 bit
window_left
,
// input [31:0] window_left;
window_top
+
1
,
// input [31:0] window_top; (to match 20x20 tiles in 353)
1
,
// input byte32; // == 1?
2
,
//input [31:0] tile_width; // == 2
1
,
// input [31:0] extra_pages; // 1
1
);
// disable "need" (yield to sensor channels)
setup_compressor_memory
(
num_sensor
,
// input [1:0] num_sensor;
frame_start_address
,
// input [31:0] frame_sa; // 22-bit frame start address ((3 CA LSBs==0. BA==0)
frame_start_address_inc
,
// input [31:0] frame_sa_inc; // 22-bit frame start address increment ((3 CA LSBs==0. BA==0)
last_buf_frame
,
// input [31:0] last_frame_num; // 16-bit number of the last frame in a buffer
frame_full_width
,
// input [31:0] frame_full_width; // 13-bit Padded line length (8-row increment), in 8-bursts (16 bytes)
window_width
,
// & ~3, // input [31:0] window_width; // 13 bit - in 8*16=128 bit bursts
window_height
&
~
15
,
// input [31:0] window_height; // 16 bit
window_left
,
// input [31:0] window_left;
window_top
+
1
,
// input [31:0] window_top; (to match 20x20 tiles in 353)
1
,
// input byte32; // == 1?
2
,
//input [31:0] tile_width; // == 2
1
,
// input [31:0] extra_pages; // 1
1
,
18
,
// reg [7:0] tile_height;
16
// reg [7:0] tile_vstep;
);
// disable "need" (yield to sensor channels)
end
else
if
((
cmode
==
CMPRS_CBIT_CMODE_JP46
)
||
(
cmode
==
CMPRS_CBIT_CMODE_JP46DC
)
||
(
cmode
==
CMPRS_CBIT_CMODE_JP4
)
||
(
cmode
==
CMPRS_CBIT_CMODE_JP4DC
)
||
(
cmode
==
CMPRS_CBIT_CMODE_JP4DIFF
)
||
(
cmode
==
CMPRS_CBIT_CMODE_JP4DIFFHDR
)
||
(
cmode
==
CMPRS_CBIT_CMODE_JP4DIFFDIV2
)
||
(
cmode
==
CMPRS_CBIT_CMODE_JP4DIFFHDRDIV2
))
begin
setup_compressor_channel
(
num_sensor
,
// sensor channel number (0..3)
0
,
// qbank; // [6:3] quantization table page - 100% quality
// 1, // qbank; // [6:3] quantization table page - 85%? quality
1
,
// dc_sub; // [8:7] subtract DC
cmode
,
// CMPRS_CBIT_CMODE_JPEG18, //input [31:0] cmode; // [13:9] color mode:
// parameter CMPRS_CBIT_CMODE_JPEG18 = 4'h0, // color 4:2:0
// parameter CMPRS_CBIT_CMODE_MONO6 = 4'h1, // mono 4:2:0 (6 blocks)
// parameter CMPRS_CBIT_CMODE_JP46 = 4'h2, // jp4, 6 blocks, original
// parameter CMPRS_CBIT_CMODE_JP46DC = 4'h3, // jp4, 6 blocks, dc -improved
// parameter CMPRS_CBIT_CMODE_JPEG20 = 4'h4, // mono, 4 blocks (but still not actual monochrome JPEG as the blocks are scanned in 2x2 macroblocks)
// parameter CMPRS_CBIT_CMODE_JP4 = 4'h5, // jp4, 4 blocks, dc-improved
// parameter CMPRS_CBIT_CMODE_JP4DC = 4'h6, // jp4, 4 blocks, dc-improved
// parameter CMPRS_CBIT_CMODE_JP4DIFF = 4'h7, // jp4, 4 blocks, differential
// parameter CMPRS_CBIT_CMODE_JP4DIFFHDR = 4'h8, // jp4, 4 blocks, differential, hdr
// parameter CMPRS_CBIT_CMODE_JP4DIFFDIV2 = 4'h9, // jp4, 4 blocks, differential, divide by 2
// parameter CMPRS_CBIT_CMODE_JP4DIFFHDRDIV2 = 4'ha, // jp4, 4 blocks, differential, hdr,divide by 2
// parameter CMPRS_CBIT_CMODE_MONO1 = 4'hb, // mono JPEG (not yet implemented)
// parameter CMPRS_CBIT_CMODE_MONO4 = 4'he, // mono 4 blocks
1
,
// input [31:0] multi_frame; // [15:14] 0 - single-frame buffer, 1 - multiframe video memory buffer
3
,
// 0, // input [31:0] bayer; // [20:18] // Bayer shift
0
,
// input [31:0] focus_mode; // [23:21] Set focus mode
window_width
-
1
,
// 3, // num_macro_cols_m1; // number of macroblock colums minus 1
1
,
// num_macro_rows_m1; // number of macroblock rows minus 1
0
,
// 1, // input [31:0] left_margin; // left margin of the first pixel (0..31) for 32-pixel wide colums in memory access
'bx, // n/a '
h120
,
// input [31:0] colorsat_blue; //color saturation for blue (10 bits) //'h90 for 100%
'bx, // n/a '
h16c
,
// colorsat_red; //color saturation for red (10 bits) // 'b6 for 100%
0
);
// input [31:0] coring; // coring value
// TODO: calculate widths correctly!
setup_compressor_memory
(
num_sensor
,
// input [1:0] num_sensor;
frame_start_address
,
// input [31:0] frame_sa; // 22-bit frame start address ((3 CA LSBs==0. BA==0)
frame_start_address_inc
,
// input [31:0] frame_sa_inc; // 22-bit frame start address increment ((3 CA LSBs==0. BA==0)
last_buf_frame
,
// input [31:0] last_frame_num; // 16-bit number of the last frame in a buffer
frame_full_width
,
// input [31:0] frame_full_width; // 13-bit Padded line length (8-row increment), in 8-bursts (16 bytes)
window_width
,
// & ~3, // input [31:0] window_width; // 13 bit - in 8*16=128 bit bursts
window_height
&
~
15
,
// input [31:0] window_height; // 16 bit
window_left
,
// input [31:0] window_left;
window_top
+
0
,
// input [31:0] window_top; (to match 20x20 tiles in 353)
1
,
// input byte32; // == 1?
4
,
//input [31:0] tile_width; // == 2
0
,
// input [31:0] extra_pages; // 1
1
,
16
,
// reg [7:0] tile_height;
16
// reg [7:0] tile_vstep;
);
// disable "need" (yield to sensor channels)
end
else
begin
$display
(
"task setup_compressor_channel(): compressor mode %d is not supported"
,
cmode
);
$finish
;
end
// compressor_run (num_sensor, 3); // run repetitive mode
`
ifndef
COMPRESS_SINGLE
...
...
@@ -3169,14 +3240,16 @@ task setup_compressor_memory;
input [31:0] tile_width; // == 2
input [31:0] extra_pages; // 1
input disable_need; // set to 1
input [7:0] tile_height;
input [7:0] tile_vstep;
reg [29:0] base_addr;
integer mode;
reg [7:0] tile_height;
reg [7:0] tile_vstep;
//
reg [7:0] tile_height;
//
reg [7:0] tile_vstep;
begin
tile_vstep = 16;
tile_height= 18;
//
tile_vstep = 16;
//
tile_height= 18;
base_addr = MCONTR_CMPRS_BASE + MCONTR_CMPRS_INC * num_sensor;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment