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
baf9eed0
Commit
baf9eed0
authored
Sep 16, 2015
by
Andrey Filippov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
More tests with 4 sesnor and 4 compressor channels, turned off debug ring define
parent
514c0372
Changes
11
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
70039 additions
and
70827 deletions
+70039
-70827
.gitignore
.gitignore
+4
-1
.project
.project
+8
-8
fpga_version.vh
fpga_version.vh
+1
-1
x393_cur_params_target.vh
includes/x393_cur_params_target.vh
+9
-28
x393_mcntrl.pickle
py393/dbg/x393_mcntrl.pickle
+69842
-70775
x393_cmprs_afi.py
py393/x393_cmprs_afi.py
+5
-1
x393_jpeg.py
py393/x393_jpeg.py
+106
-2
x393_mcntrl_adjust.py
py393/x393_mcntrl_adjust.py
+7
-3
x393_sens_cmprs.py
py393/x393_sens_cmprs.py
+4
-2
x393_sensor.py
py393/x393_sensor.py
+52
-5
system_defines.vh
system_defines.vh
+1
-1
No files found.
.gitignore
View file @
baf9eed0
...
@@ -4,6 +4,7 @@ syntax_*
...
@@ -4,6 +4,7 @@ syntax_*
simulation/*
simulation/*
ise_*
ise_*
attic/*
attic/*
hardware_tests/*
IVERILOG_INCLUDE.v
IVERILOG_INCLUDE.v
x393.prj
x393.prj
*DEBUG_VDT*
*DEBUG_VDT*
...
@@ -13,14 +14,16 @@ x393.prj
...
@@ -13,14 +14,16 @@ x393.prj
*.pickle
*.pickle
py393/dbg/*
py393/dbg/*
includes/x393_cur_params_sim.vh
includes/x393_cur_params_sim.vh
includes/x393_cur_params_target_
gen
.vh
includes/x393_cur_params_target_
*
.vh
py393/exp_gpio.py
py393/exp_gpio.py
py393/mon_gpio.py
py393/mon_gpio.py
savefile01.sav
savefile01.sav
x353
x353
compressor_jp/huff_fifo353.v
x393_testbench0-a1.sav
x393_testbench0-a1.sav
x393_testbench01-*.sav
x393_testbench01-*.sav
x393_testbench01.gtkw
x393_testbench01.gtkw
x393_testbench01_backup.sav
x393_testbench01_backup.sav
x393_testbench01_debug_membridge.sav
x393_testbench01_debug_membridge.sav
x393_testbench02.sav
x393_testbench02.sav
x393_testbench02-0.sav
.project
View file @
baf9eed0
...
@@ -62,42 +62,42 @@
...
@@ -62,42 +62,42 @@
<link>
<link>
<name>
vivado_logs/VivadoBitstream.log
</name>
<name>
vivado_logs/VivadoBitstream.log
</name>
<type>
1
</type>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_logs/VivadoBitstream-2015091
5011906545
.log
</location>
<location>
/home/andrey/git/x393/vivado_logs/VivadoBitstream-2015091
6155306201
.log
</location>
</link>
</link>
<link>
<link>
<name>
vivado_logs/VivadoOpt.log
</name>
<name>
vivado_logs/VivadoOpt.log
</name>
<type>
1
</type>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_logs/VivadoOpt-2015091
5011906545
.log
</location>
<location>
/home/andrey/git/x393/vivado_logs/VivadoOpt-2015091
6155306201
.log
</location>
</link>
</link>
<link>
<link>
<name>
vivado_logs/VivadoOptPhys.log
</name>
<name>
vivado_logs/VivadoOptPhys.log
</name>
<type>
1
</type>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_logs/VivadoOptPhys-2015091
5011906545
.log
</location>
<location>
/home/andrey/git/x393/vivado_logs/VivadoOptPhys-2015091
6155306201
.log
</location>
</link>
</link>
<link>
<link>
<name>
vivado_logs/VivadoOptPower.log
</name>
<name>
vivado_logs/VivadoOptPower.log
</name>
<type>
1
</type>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_logs/VivadoOptPower-2015091
5011906545
.log
</location>
<location>
/home/andrey/git/x393/vivado_logs/VivadoOptPower-2015091
6155306201
.log
</location>
</link>
</link>
<link>
<link>
<name>
vivado_logs/VivadoPlace.log
</name>
<name>
vivado_logs/VivadoPlace.log
</name>
<type>
1
</type>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_logs/VivadoPlace-2015091
5011906545
.log
</location>
<location>
/home/andrey/git/x393/vivado_logs/VivadoPlace-2015091
6155306201
.log
</location>
</link>
</link>
<link>
<link>
<name>
vivado_logs/VivadoRoute.log
</name>
<name>
vivado_logs/VivadoRoute.log
</name>
<type>
1
</type>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_logs/VivadoRoute-2015091
5011906545
.log
</location>
<location>
/home/andrey/git/x393/vivado_logs/VivadoRoute-2015091
6155306201
.log
</location>
</link>
</link>
<link>
<link>
<name>
vivado_logs/VivadoSynthesis.log
</name>
<name>
vivado_logs/VivadoSynthesis.log
</name>
<type>
1
</type>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_logs/VivadoSynthesis-2015091
5011906545
.log
</location>
<location>
/home/andrey/git/x393/vivado_logs/VivadoSynthesis-2015091
6153820807
.log
</location>
</link>
</link>
<link>
<link>
<name>
vivado_logs/VivadoTimimgSummaryReportImplemented.log
</name>
<name>
vivado_logs/VivadoTimimgSummaryReportImplemented.log
</name>
<type>
1
</type>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_logs/VivadoTimimgSummaryReportImplemented-2015091
5011906545
.log
</location>
<location>
/home/andrey/git/x393/vivado_logs/VivadoTimimgSummaryReportImplemented-2015091
6155306201
.log
</location>
</link>
</link>
<link>
<link>
<name>
vivado_logs/VivadoTimimgSummaryReportSynthesis.log
</name>
<name>
vivado_logs/VivadoTimimgSummaryReportSynthesis.log
</name>
...
...
fpga_version.vh
View file @
baf9eed0
parameter FPGA_VERSION = 32'h03930033;
parameter FPGA_VERSION = 32'h03930034;
\ No newline at end of file
\ No newline at end of file
includes/x393_cur_params_target.vh
100644 → 100755
View file @
baf9eed0
/*******************************************************************************
/* This is a generated file with the current DDR3 memory timing parameters */
* File: x393_cur_params_target.vh
* Date:2015-02-07
* Author: Andrey Filippov
* Description: Memory controller parameters that need adjustment during training
* Target ,pde
* Copyright (c) 2015 Elphel, Inc.
* x393_cur_params_target.vh is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* x393_cur_params_target.vh is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/> .
*******************************************************************************/
localparam DLY_LANE0_ODELAY = 80'hd85c1014141814181218;
localparam DLY_LANE0_IDELAY = 72'h2c7a8380897c807b88;
localparam DLY_LANE1_ODELAY = 80'hd8581812181418181814;
localparam DLY_LANE1_IDELAY = 72'h108078807a887c8280;
localparam DLY_CMDA = 256'hd3d3d3d4dcd1d8cc494949494949494949d4d3ccd3d3dbd4ccd4d2d3d1d2d8cc;
localparam DLY_PHASE = 8'h33;
// localparam DFLT_WBUF_DELAY = 4'h9;
localparam DLY_LANE0_ODELAY = 80'hd8e8181c1c221c201b20;
localparam DLY_LANE0_IDELAY = 72'h2078807c88797c7884;
localparam DLY_LANE1_ODELAY = 80'hd8e31a181b1a1c1c1c1a;
localparam DLY_LANE1_IDELAY = 72'h247b747b7882787c7c;
localparam DLY_CMDA = 256'hd4d4d4dadcd3dbd0484848484848484848d4d4ccd4d4dcd9ccd8d4d4d3d3dbd0;
localparam DLY_PHASE = 8'h32;
// localparam DFLT_WBUF_DELAY = 4'h8;
py393/dbg/x393_mcntrl.pickle
View file @
baf9eed0
This diff is collapsed.
Click to expand it.
py393/x393_cmprs_afi.py
View file @
baf9eed0
...
@@ -137,7 +137,11 @@ class X393CmprsAfi(object):
...
@@ -137,7 +137,11 @@ class X393CmprsAfi(object):
sec
=
self
.
x393_mem
.
read_mem
(
cirbuf_start
+
last_image_chunk
+
(
0x20
-
CCAM_MMAP_META_SEC
))
sec
=
self
.
x393_mem
.
read_mem
(
cirbuf_start
+
last_image_chunk
+
(
0x20
-
CCAM_MMAP_META_SEC
))
usec
=
self
.
x393_mem
.
read_mem
(
cirbuf_start
+
last_image_chunk
+
(
0x20
-
CCAM_MMAP_META_USEC
))
usec
=
self
.
x393_mem
.
read_mem
(
cirbuf_start
+
last_image_chunk
+
(
0x20
-
CCAM_MMAP_META_USEC
))
fsec
=
sec
+
usec
/
1000000.0
fsec
=
sec
+
usec
/
1000000.0
try
:
tstr
=
time
.
strftime
(
"
%
b
%
d
%
Y
%
H:
%
M:
%
S"
,
time
.
gmtime
(
fsec
))
tstr
=
time
.
strftime
(
"
%
b
%
d
%
Y
%
H:
%
M:
%
S"
,
time
.
gmtime
(
fsec
))
except
:
tstr
=
"
%
f (0x
%
x, 0x
%
x)"
%
(
fsec
,
sec
,
usec
)
print
(
"**** Bad timestamp = "
,
tstr
)
segments
=
((
cirbuf_start
+
img_start
,
len32
),)
segments
=
((
cirbuf_start
+
img_start
,
len32
),)
if
(
img_start
+
len32
)
>
circbuf_len
:
# split in two segments
if
(
img_start
+
len32
)
>
circbuf_len
:
# split in two segments
segments
=
((
cirbuf_start
+
img_start
,
circbuf_len
-
img_start
),
segments
=
((
cirbuf_start
+
img_start
,
circbuf_len
-
img_start
),
...
...
py393/x393_jpeg.py
View file @
baf9eed0
...
@@ -595,8 +595,8 @@ class X393Jpeg(object):
...
@@ -595,8 +595,8 @@ class X393Jpeg(object):
y_quality
=
y_quality
,
y_quality
=
y_quality
,
c_quality
=
c_quality
,
c_quality
=
c_quality
,
portrait
=
portrait
,
portrait
=
portrait
,
height
=
x393_sens_cmprs
.
GLBL_WINDOW
[
"height"
],
height
=
x393_sens_cmprs
.
GLBL_WINDOW
[
"height"
]
&
0xfff0
,
width
=
x393_sens_cmprs
.
GLBL_WINDOW
[
"width"
],
width
=
x393_sens_cmprs
.
GLBL_WINDOW
[
"width"
]
&
0xfff0
,
color_mode
=
color_mode
,
color_mode
=
color_mode
,
byrshift
=
byrshift
,
byrshift
=
byrshift
,
verbose
=
verbose
-
1
)
verbose
=
verbose
-
1
)
...
@@ -703,4 +703,108 @@ class X393Jpeg(object):
...
@@ -703,4 +703,108 @@ class X393Jpeg(object):
"""
"""
ff d9
ff d9
"""
"""
"""
Camera compressors testing sequence
cd /usr/local/verilog/; test_mcntrl.py @hargs -x -v
Next 2 lines needed to use jpeg functionality if the program was started w/o setup_all_sensors True None 0xf
specify_phys_memory
specify_window
# Initialize memory with current calibration.
measure_all "*DI"
# Run 'measure_all' again (but w/o arguments) to perform full calibration (~10 minutes) and save results.
# Needed after new bitstream
# setup_all_sensors , 3-rd argument - bitmask of sesnors to initialize
setup_all_sensors True None 0xf
#reset all compressors
compressor_control 0 0
compressor_control 1 0
compressor_control 2 0
compressor_control 3 0
#next line to make compressor aways use the same input video frame buffer (default - 2 ping-pong frame buffers)
#axi_write_single_w 0x6c4 0
# Set Bayer = 3 (probably #1 and #3 need different hact/pxd delays to use the same compressor bayer for all channels)
compressor_control 0 None None None None None 3
compressor_control 1 None None None None None 2
compressor_control 2 None None None None None 3
compressor_control 3 None None None None None 2
#Gamma 0.57
program_gamma 0 0 0.57 0.04
program_gamma 1 0 0.57 0.04
program_gamma 2 0 0.57 0.04
program_gamma 3 0 0.57 0.04
#colors - outdoor
write_sensor_i2c 0 1 0 0x9035000a
write_sensor_i2c 0 1 0 0x902c000e
write_sensor_i2c 0 1 0 0x902d000d
write_sensor_i2c 1 1 0 0x9035000a
write_sensor_i2c 1 1 0 0x902c000e
write_sensor_i2c 1 1 0 0x902d000d
write_sensor_i2c 2 1 0 0x9035000a
write_sensor_i2c 2 1 0 0x902c000e
write_sensor_i2c 2 1 0 0x902d000d
write_sensor_i2c 3 1 0 0x9035000a
write_sensor_i2c 3 1 0 0x902c000e
write_sensor_i2c 3 1 0 0x902d000d
#colors indoor
write_sensor_i2c 0 1 0 0x90350009
write_sensor_i2c 0 1 0 0x902c000f
write_sensor_i2c 0 1 0 0x902d000a
write_sensor_i2c 1 1 0 0x90350009
write_sensor_i2c 1 1 0 0x902c000f
write_sensor_i2c 1 1 0 0x902d000a
write_sensor_i2c 2 1 0 0x90350009
write_sensor_i2c 2 1 0 0x902c000f
write_sensor_i2c 2 1 0 0x902d000a
write_sensor_i2c 3 1 0 0x90350009
write_sensor_i2c 3 1 0 0x902c000f
write_sensor_i2c 3 1 0 0x902d000a
#exposure 0x400 lines (default was 0x797)
write_sensor_i2c 0 1 0 0x90090400
write_sensor_i2c 1 1 0 0x90090400
write_sensor_i2c 2 1 0 0x90090400
write_sensor_i2c 3 1 0 0x90090400
#exposure 0x500 lines (default was 0x797)
write_sensor_i2c 0 1 0 0x90090500
write_sensor_i2c 1 1 0 0x90090500
write_sensor_i2c 2 1 0 0x90090500
write_sensor_i2c 3 1 0 0x90090500
#Get rid of the corrupted last pixel column
#longer line (default 0xa1f)
write_sensor_i2c 0 1 0 0x90040a23
write_sensor_i2c 1 1 0 0x90040a23
write_sensor_i2c 2 1 0 0x90040a23
write_sensor_i2c 3 1 0 0x90040a23
#increase scanline write (memory controller) width in 16-bursts (was 0xa2)
axi_write_single_w 0x696 0x079800a3
axi_write_single_w 0x686 0x079800a3
axi_write_single_w 0x6a6 0x079800a3
axi_write_single_w 0x6b6 0x079800a3
#run copmpressors once (#1 - stop gracefully, 0 - reset, 2 - single, 3 - repetitive with sync to sensors)
compressor_control 0 2
compressor_control 1 2
compressor_control 2 2
compressor_control 3 2
jpeg_write "/www/pages/img0.jpeg" 0
jpeg_write "/www/pages/img1.jpeg" 1
jpeg_write "/www/pages/img2.jpeg" 2
jpeg_write "/www/pages/img3.jpeg" 3
"""
py393/x393_mcntrl_adjust.py
View file @
baf9eed0
...
@@ -1112,6 +1112,8 @@ class X393McntrlAdjust(object):
...
@@ -1112,6 +1112,8 @@ class X393McntrlAdjust(object):
print
(
self
.
adjustment_state
[
'cmda_bspe'
])
print
(
self
.
adjustment_state
[
'cmda_bspe'
])
return
None
return
None
cmda_odly_lin
=
cmda_odly_data
[
'ldly'
]
cmda_odly_lin
=
cmda_odly_data
[
'ldly'
]
self
.
x393_axi_tasks
.
enable_refresh
(
0
)
self
.
x393_axi_tasks
.
enable_refresh
(
0
)
self
.
x393_mcntrl_timing
.
axi_set_phase
(
phase
,
quiet
=
quiet
)
self
.
x393_mcntrl_timing
.
axi_set_phase
(
phase
,
quiet
=
quiet
)
self
.
x393_mcntrl_timing
.
axi_set_cmda_odelay
(
combine_delay
(
cmda_odly_lin
),
quiet
=
quiet
)
self
.
x393_mcntrl_timing
.
axi_set_cmda_odelay
(
combine_delay
(
cmda_odly_lin
),
quiet
=
quiet
)
...
@@ -2864,8 +2866,10 @@ class X393McntrlAdjust(object):
...
@@ -2864,8 +2866,10 @@ class X393McntrlAdjust(object):
quiet
)
quiet
)
if
not
phase_ok
:
if
not
phase_ok
:
print
(
"Failed to set phase=
%
d for dly=
%
d- that should not happen (phase_dqso)- "
%
(
phase
,
dqs_lin
))
print
(
"Failed to set phase=
%
d for dly=
%
d- that should not happen (phase_dqso)- "
%
(
phase
,
dqs_lin
))
# See if it was meant "not phase_ok", not "phase_ok is None":
print
(
"phase_ok = "
,
phase_ok
)
if
phase_ok
is
None
:
print
(
self
.
adjustment_state
[
'cmda_bspe'
])
print
(
self
.
adjustment_state
[
'cmda_bspe'
])
return
None
# no valid CMDA ODELAY exists for this phase
return
None
# no valid CMDA ODELAY exists for this phase
#set DQS IDELAY and DQ IDELAY matching phase
#set DQS IDELAY and DQ IDELAY matching phase
dqs_idelay
=
dqsi_dqi_for_phase
[
phase
][
DQSI_KEY
]
# 2-element list
dqs_idelay
=
dqsi_dqi_for_phase
[
phase
][
DQSI_KEY
]
# 2-element list
...
...
py393/x393_sens_cmprs.py
View file @
baf9eed0
...
@@ -489,6 +489,8 @@ class X393SensCmprs(object):
...
@@ -489,6 +489,8 @@ class X393SensCmprs(object):
"height"
:
window_height
,
"height"
:
window_height
,
"left"
:
window_left
,
"left"
:
window_left
,
"top"
:
window_top
}
"top"
:
window_top
}
def
specify_phys_memory
(
self
,
def
specify_phys_memory
(
self
,
circbuf_chn_size
=
0x1000000
,
circbuf_chn_size
=
0x1000000
,
verbose
=
1
):
verbose
=
1
):
...
@@ -737,7 +739,7 @@ class X393SensCmprs(object):
...
@@ -737,7 +739,7 @@ class X393SensCmprs(object):
self
.
x393Sensor
.
set_sensor_i2c_command
(
self
.
x393Sensor
.
set_sensor_i2c_command
(
num_sensor
=
num_sensor
,
num_sensor
=
num_sensor
,
num_bytes
=
3
,
num_bytes
=
3
,
dly
=
100
,
# ??None,
dly
=
100
,
# ??None,
# 20 ns per 1 of cycle duration. Standard i2c - dly = 125
scl_ctl
=
None
,
scl_ctl
=
None
,
sda_ctl
=
None
)
sda_ctl
=
None
)
self
.
x393Sensor
.
set_sensor_i2c_command
(
self
.
x393Sensor
.
set_sensor_i2c_command
(
...
...
py393/x393_sensor.py
View file @
baf9eed0
...
@@ -205,6 +205,7 @@ class X393Sensor(object):
...
@@ -205,6 +205,7 @@ class X393Sensor(object):
1/True/'H' - high level
1/True/'H' - high level
@return: i2c control word
@return: i2c control word
"""
"""
print
(
"func_sensor_i2c_command(): rst_cmd= "
,
rst_cmd
,
", run_cmd="
,
run_cmd
,
", num_bytes = "
,
num_bytes
,
", dly = "
,
dly
)
rslt
=
0
rslt
=
0
rslt
|=
(
0
,
1
)[
rst_cmd
]
<<
vrlg
.
SENSI2C_CMD_RESET
rslt
|=
(
0
,
1
)[
rst_cmd
]
<<
vrlg
.
SENSI2C_CMD_RESET
if
not
run_cmd
is
None
:
if
not
run_cmd
is
None
:
...
@@ -215,9 +216,10 @@ class X393Sensor(object):
...
@@ -215,9 +216,10 @@ class X393Sensor(object):
rslt
|=
1
<<
vrlg
.
SENSI2C_CMD_BYTES
rslt
|=
1
<<
vrlg
.
SENSI2C_CMD_BYTES
rslt
|=
num_bytes
<<
(
vrlg
.
SENSI2C_CMD_BYTES
-
vrlg
.
SENSI2C_CMD_BYTES_PBITS
)
rslt
|=
num_bytes
<<
(
vrlg
.
SENSI2C_CMD_BYTES
-
vrlg
.
SENSI2C_CMD_BYTES_PBITS
)
if
not
dly
is
None
:
if
not
dly
is
None
:
dly
&=
(
1
<<
vrlg
.
SENSI2C_CMD_BYTES_PBITS
)
-
1
dly
&=
(
1
<<
vrlg
.
SENSI2C_CMD_DLY_PBITS
)
-
1
rslt
|=
1
<<
vrlg
.
SENSI2C_CMD_BYTES
rslt
|=
1
<<
vrlg
.
SENSI2C_CMD_DLY
rslt
|=
dly
<<
(
vrlg
.
SENSI2C_CMD_BYTES
-
vrlg
.
SENSI2C_CMD_BYTES_PBITS
)
rslt
|=
dly
<<
(
vrlg
.
SENSI2C_CMD_DLY
-
vrlg
.
SENSI2C_CMD_DLY_PBITS
)
print
(
"func_sensor_i2c_command(): dly = "
,
dly
,
" rslt="
,
rslt
)
scl
=
0
scl
=
0
if
not
scl_ctl
is
None
:
if
not
scl_ctl
is
None
:
if
(
scl_ctl
is
False
)
or
(
scl_ctl
==
0
)
or
(
scl_ctl
==
"0"
)
or
(
scl_ctl
.
upper
()
==
"L"
):
if
(
scl_ctl
is
False
)
or
(
scl_ctl
==
0
)
or
(
scl_ctl
==
"0"
)
or
(
scl_ctl
.
upper
()
==
"L"
):
...
@@ -597,6 +599,27 @@ class X393Sensor(object):
...
@@ -597,6 +599,27 @@ class X393Sensor(object):
if
not
post_scale
is
None
:
if
not
post_scale
is
None
:
self
.
x393_axi_tasks
.
write_control_register
(
reg_addr
,
func_lens_data
(
num_sub_sensor
,
vrlg
.
SENS_LENS_POST_SCALE
,
post_scale
,
4
))
self
.
x393_axi_tasks
.
write_control_register
(
reg_addr
,
func_lens_data
(
num_sub_sensor
,
vrlg
.
SENS_LENS_POST_SCALE
,
post_scale
,
4
))
def
program_gamma
(
self
,
num_sensor
,
sub_channel
,
gamma
=
0.57
,
black
=
0.04
,
page
=
0
):
"""
Program gamma tables for specified sensor port and subchannel
@param num_sensor - sensor port number (0..3)
@param num_sub_sensor - sub-sensor attached to the same port through multiplexer (0..3)
@param gamma - gamma value (1.0 - linear)
@param black - black level, 1.0 corresponds to 256 for 8bit values
@param page - gamma table page number (only used if SENS_GAMMA_BUFFER > 0
"""
self
.
program_curves
(
num_sensor
=
num_sensor
,
sub_channel
=
sub_channel
,
curves_data
=
self
.
calc_gamma257
(
gamma
=
gamma
,
black
=
black
,
rshift
=
6
)
*
4
,
page
=
page
)
def
program_curves
(
self
,
def
program_curves
(
self
,
num_sensor
,
num_sensor
,
sub_channel
,
sub_channel
,
...
@@ -608,7 +631,7 @@ class X393Sensor(object):
...
@@ -608,7 +631,7 @@ class X393Sensor(object):
@param num_sub_sensor - sub-sensor attached to the same port through multiplexer (0..3)
@param num_sub_sensor - sub-sensor attached to the same port through multiplexer (0..3)
@param curves_data - either 1028-element list (257 per color component) or a file path
@param curves_data - either 1028-element list (257 per color component) or a file path
with the same data, same as for Verilog $readmemh
with the same data, same as for Verilog $readmemh
@param page - gamm
m
a table page number (only used if SENS_GAMMA_BUFFER > 0
@param page - gamma table page number (only used if SENS_GAMMA_BUFFER > 0
"""
"""
def
set_sensor_gamma_table_addr
(
def
set_sensor_gamma_table_addr
(
num_sensor
,
num_sensor
,
...
@@ -657,6 +680,30 @@ class X393Sensor(object):
...
@@ -657,6 +680,30 @@ class X393Sensor(object):
num_sensor
=
num_sensor
,
num_sensor
=
num_sensor
,
data18
=
data18
)
data18
=
data18
)
def
calc_gamma257
(
self
,
gamma
,
black
,
rshift
=
6
):
"""
@brief Calculate gamma table (as array of 257 unsigned short values)
@param gamma - gamma value (1.0 - linear)
@param black - black level, 1.0 corresponds to 256 for 8bit values
@return array of 257 int elements (for a single color), right-shifted to match original 0..0x3ff range
"""
black256
=
max
(
0.0
,
min
(
255
,
black
*
256.0
))
k
=
1.0
/
(
256.0
-
black256
)
gamma
=
max
(
0.13
,
min
(
gamma
,
10.0
))
gtable
=
[]
for
i
in
range
(
257
):
x
=
k
*
(
i
-
black256
)
x
=
max
(
x
,
0.0
)
ig
=
int
(
0.5
+
65535.0
*
pow
(
x
,
gamma
))
ig
=
min
(
ig
,
0xffff
)
gtable
.
append
(
ig
>>
rshift
)
return
gtable
def
set_sensor_gamma_heights
(
self
,
def
set_sensor_gamma_heights
(
self
,
num_sensor
,
num_sensor
,
height0_m1
,
height0_m1
,
...
...
system_defines.vh
View file @
baf9eed0
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
`ifndef SYSTEM_DEFINES
`ifndef SYSTEM_DEFINES
`define SYSTEM_DEFINES
`define SYSTEM_DEFINES
`define PRELOAD_BRAMS
`define PRELOAD_BRAMS
`define DEBUG_RING 1
//
`define DEBUG_RING 1
`define MEMBRIDGE_DEBUG_WRITE 1
`define MEMBRIDGE_DEBUG_WRITE 1
// Enviroment-dependent options
// Enviroment-dependent options
`ifdef IVERILOG
`ifdef IVERILOG
...
...
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