Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
172 changes: 120 additions & 52 deletions vivado/package.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -98,84 +98,152 @@ set_property display_name Reg [ipx::get_address_blocks Reg -of_objects [ipx::get
ipx::add_model_parameters_from_hdl -ordered_files [lindex $SOURCES_LIST 0] -top_module_name $TOP_LEVEL_NAME [ipx::current_core]
ipx::infer_user_parameters [ipx::current_core]

# DECOMPANDING_FLUT_FILE (hidden)
#set_property value decompanding_flut_short.mem [ipx::get_user_parameters DECOMPANDING_FLUT_FILE -of_objects [ipx::current_core]]
#set_property value decompanding_flut_short.mem [ipx::get_hdl_parameters DECOMPANDING_FLUT_FILE -of_objects [ipx::current_core]]

# DECOMPANDING_XLUT_FILE (hidden)
#set_property value decompanding_xlut_short.mem [ipx::get_user_parameters DECOMPANDING_XLUT_FILE -of_objects [ipx::current_core]]
#set_property value decompanding_xlut_short.mem [ipx::get_hdl_parameters DECOMPANDING_XLUT_FILE -of_objects [ipx::current_core]]

# GAMMA_GAIN_FILE (hidden)
#set_property value gamma_gain.mem [ipx::get_user_parameters GAMMA_GAIN_FILE -of_objects [ipx::current_core]]
#set_property value gamma_gain.mem [ipx::get_hdl_parameters GAMMA_GAIN_FILE -of_objects [ipx::current_core]]

# GAMMA_OFFSET_FILE (hidden)
#set_property value gamma_offset.mem [ipx::get_user_parameters GAMMA_OFFSET_FILE -of_objects [ipx::current_core]]
#set_property value gamma_offset.mem [ipx::get_hdl_parameters GAMMA_OFFSET_FILE -of_objects [ipx::current_core]]

# M_AXIS_DATA_WIDTH (hidden)
#set_property value 24 [ipx::get_user_parameters M_AXIS_DATA_WIDTH -of_objects [ipx::current_core]]
#set_property value 24 [ipx::get_hdl_parameters M_AXIS_DATA_WIDTH -of_objects [ipx::current_core]]
#set_property enablement_tcl_expr {8*floor(($PIXEL_PER_CYCLE*3*$COMPONENT_BIT_WIDTH + 7)/8)} [ipx::get_user_parameters M_AXIS_DATA_WIDTH -of_objects [ipx::current_core]]
#set_property value_tcl_expr {8*floor(($PIXEL_PER_CYCLE*3*$COMPONENT_BIT_WIDTH + 7)/8)} [ipx::get_user_parameters M_AXIS_DATA_WIDTH -of_objects [ipx::current_core]]

# S_AXIS_DATA_WIDTH (hidden)
#set_property value 16 [ipx::get_user_parameters S_AXIS_DATA_WIDTH -of_objects [ipx::current_core]]
#set_property value 16 [ipx::get_hdl_parameters S_AXIS_DATA_WIDTH -of_objects [ipx::current_core]]
#set_property enablement_tcl_expr {8*floor(($PIXEL_PER_CYCLE*$PIXEL_BIT_WIDTH + 7)/8)} [ipx::get_user_parameters S_AXIS_DATA_WIDTH -of_objects [ipx::current_core]]
#set_property value_tcl_expr {8*floor(($PIXEL_PER_CYCLE*$PIXEL_BIT_WIDTH + 7)/8)} [ipx::get_user_parameters S_AXIS_DATA_WIDTH -of_objects [ipx::current_core]]

# COMPONENT_BIT_WIDTH
ipgui::add_param -name {COMPONENT_BIT_WIDTH} -component [ipx::current_core] -display_name {Output Component Bit Width} -show_label {true} -show_range {true} -widget {comboBox}
set_property tooltip {Bits per output component} [ipgui::get_guiparamspec -name "COMPONENT_BIT_WIDTH" -component [ipx::current_core] ]
set_property value 8 [ipx::get_user_parameters COMPONENT_BIT_WIDTH -of_objects [ipx::current_core]]
set_property value 8 [ipx::get_hdl_parameters COMPONENT_BIT_WIDTH -of_objects [ipx::current_core]]
set_property value_validation_type list [ipx::get_user_parameters COMPONENT_BIT_WIDTH -of_objects [ipx::current_core]]
set_property value_validation_list {8 10 12 14} [ipx::get_user_parameters COMPONENT_BIT_WIDTH -of_objects [ipx::current_core]]

# CFA_ORIENTATION
#set_property value 0 [ipx::get_user_parameters CFA_ORIENTATION -of_objects [ipx::current_core]]
#set_property value 0 [ipx::get_hdl_parameters CFA_ORIENTATION -of_objects [ipx::current_core]]
set_property value_validation_type pairs [ipx::get_user_parameters CFA_ORIENTATION -of_objects [ipx::current_core]]
set_property value_validation_pairs {BG-GR 0 GB-RG 1 GR-BG 2 RG-GB 3} [ipx::get_user_parameters CFA_ORIENTATION -of_objects [ipx::current_core]]
ipgui::add_param -name {CFA_ORIENTATION} -component [ipx::current_core] -display_name {CFA Orientation} -show_label {true} -show_range {true} -widget {comboBox}
set_property tooltip {Color filter array ordering} [ipgui::get_guiparamspec -name "CFA_ORIENTATION" -component [ipx::current_core] ]
set_property value 0 [ipx::get_user_parameters CFA_ORIENTATION -of_objects [ipx::current_core]]
set_property value 0 [ipx::get_hdl_parameters CFA_ORIENTATION -of_objects [ipx::current_core]]
set_property value_validation_type pairs [ipx::get_user_parameters CFA_ORIENTATION -of_objects [ipx::current_core]]
set_property value_validation_pairs {BG-GR 0 GB-RG 1 GR-BG 2 RG-GB 3} [ipx::get_user_parameters CFA_ORIENTATION -of_objects [ipx::current_core]]

# PIXEL_PER_CYCLE
#set_property value 1 [ipx::get_user_parameters PIXEL_PER_CYCLE -of_objects [ipx::current_core]]
#set_property value 1 [ipx::get_hdl_parameters PIXEL_PER_CYCLE -of_objects [ipx::current_core]]
set_property value_validation_type list [ipx::get_user_parameters PIXEL_PER_CYCLE -of_objects [ipx::current_core]]
set_property value_validation_list {1 2 4} [ipx::get_user_parameters PIXEL_PER_CYCLE -of_objects [ipx::current_core]]
ipx::update_dependency [ipx::get_user_parameters PIXEL_PER_CYCLE -of_objects [ipx::current_core]]
ipgui::add_param -name {PIXEL_PER_CYCLE} -component [ipx::current_core] -display_name {Pixel Per Cycle} -show_label {true} -show_range {true} -widget {comboBox}
set_property tooltip {Number of pixels that are processed per cycle} [ipgui::get_guiparamspec -name "PIXEL_PER_CYCLE" -component [ipx::current_core] ]
set_property value 4 [ipx::get_user_parameters PIXEL_PER_CYCLE -of_objects [ipx::current_core]]
set_property value 4 [ipx::get_hdl_parameters PIXEL_PER_CYCLE -of_objects [ipx::current_core]]
set_property value_validation_type list [ipx::get_user_parameters PIXEL_PER_CYCLE -of_objects [ipx::current_core]]
set_property value_validation_list {1 2 4} [ipx::get_user_parameters PIXEL_PER_CYCLE -of_objects [ipx::current_core]]

# PIXEL_BIT_WIDTH
set_property value_validation_type list [ipx::get_user_parameters PIXEL_BIT_WIDTH -of_objects [ipx::current_core]]
set_property value_validation_list {12 14 16 18 20 22 24} [ipx::get_user_parameters PIXEL_BIT_WIDTH -of_objects [ipx::current_core]]
ipgui::add_param -name {PIXEL_BIT_WIDTH} -component [ipx::current_core] -display_name {Pixel Bit Width} -show_label {true} -show_range {true} -widget {comboBox}
set_property tooltip {Input pixel bit width} [ipgui::get_guiparamspec -name "PIXEL_BIT_WIDTH" -component [ipx::current_core] ]
set_property widget {comboBox} [ipgui::get_guiparamspec -name "PIXEL_BIT_WIDTH" -component [ipx::current_core] ]
set_property value 12 [ipx::get_user_parameters PIXEL_BIT_WIDTH -of_objects [ipx::current_core]]
set_property value 12 [ipx::get_hdl_parameters PIXEL_BIT_WIDTH -of_objects [ipx::current_core]]
set_property value_validation_type list [ipx::get_user_parameters PIXEL_BIT_WIDTH -of_objects [ipx::current_core]]
set_property value_validation_list {12 14 16 18 20 22 24} [ipx::get_user_parameters PIXEL_BIT_WIDTH -of_objects [ipx::current_core]]

# MAX_RESOLUTION
set_property value_validation_type list [ipx::get_user_parameters MAX_RESOLUTION -of_objects [ipx::current_core]]
set_property value_validation_list {1024 2048 4096} [ipx::get_user_parameters MAX_RESOLUTION -of_objects [ipx::current_core]]
ipgui::add_param -name {MAX_RESOLUTION} -component [ipx::current_core] -display_name {Max Horizontal Resolution} -show_label {true} -show_range {true} -widget {comboBox}
set_property tooltip {Maximum line length for line buffers} [ipgui::get_guiparamspec -name "MAX_RESOLUTION" -component [ipx::current_core] ]
set_property value 4096 [ipx::get_user_parameters MAX_RESOLUTION -of_objects [ipx::current_core]]
set_property value 4096 [ipx::get_hdl_parameters MAX_RESOLUTION -of_objects [ipx::current_core]]
set_property value_validation_type list [ipx::get_user_parameters MAX_RESOLUTION -of_objects [ipx::current_core]]
set_property value_validation_list {1024 2048 4096} [ipx::get_user_parameters MAX_RESOLUTION -of_objects [ipx::current_core]]

# GUI
ipx::create_xgui_files [ipx::current_core]
ipx::create_default_gui_files [ipx::current_core ]
# DECOMPANDING_XLUT_FILE (hidden)
set_property value decompanding_xlut.mem [ipx::get_user_parameters DECOMPANDING_XLUT_FILE -of_objects [ipx::current_core]]
set_property value decompanding_xlut.mem [ipx::get_hdl_parameters DECOMPANDING_XLUT_FILE -of_objects [ipx::current_core]]
set_property enablement_value false [ipx::get_user_parameters DECOMPANDING_XLUT_FILE -of_objects [ipx::current_core]]

# Move control widgets to Page 0
ipgui::move_param -component [ipx::current_core] -order 0 [ipgui::get_guiparamspec -name "COMPONENT_BIT_WIDTH" -component [ipx::current_core]] -parent [ipgui::get_pagespec -name "Page 0" -component [ipx::current_core]]
ipgui::move_param -component [ipx::current_core] -order 0 [ipgui::get_guiparamspec -name "CFA_ORIENTATION" -component [ipx::current_core]] -parent [ipgui::get_pagespec -name "Page 0" -component [ipx::current_core]]
ipgui::move_param -component [ipx::current_core] -order 0 [ipgui::get_guiparamspec -name "PIXEL_PER_CYCLE" -component [ipx::current_core]] -parent [ipgui::get_pagespec -name "Page 0" -component [ipx::current_core]]
ipgui::move_param -component [ipx::current_core] -order 0 [ipgui::get_guiparamspec -name "PIXEL_BIT_WIDTH" -component [ipx::current_core]] -parent [ipgui::get_pagespec -name "Page 0" -component [ipx::current_core]]
ipgui::move_param -component [ipx::current_core] -order 0 [ipgui::get_guiparamspec -name "MAX_RESOLUTION" -component [ipx::current_core]] -parent [ipgui::get_pagespec -name "Page 0" -component [ipx::current_core]]
# DECOMPANDING_YLUT_FILE (hidden)
set_property value decompanding_ylut_12_bit.mem [ipx::get_user_parameters DECOMPANDING_YLUT_FILE -of_objects [ipx::current_core]]
set_property value decompanding_ylut_12_bit.mem [ipx::get_hdl_parameters DECOMPANDING_YLUT_FILE -of_objects [ipx::current_core]]
set_property enablement_value false [ipx::get_user_parameters DECOMPANDING_YLUT_FILE -of_objects [ipx::current_core]]

# TODO: constraints
# DECOMPANDING_FLUT_FILE (hidden)
set_property value decompanding_flut_12_bit.mem [ipx::get_user_parameters DECOMPANDING_FLUT_FILE -of_objects [ipx::current_core]]
set_property value decompanding_flut_12_bit.mem [ipx::get_hdl_parameters DECOMPANDING_FLUT_FILE -of_objects [ipx::current_core]]
set_property enablement_value false [ipx::get_user_parameters DECOMPANDING_FLUT_FILE -of_objects [ipx::current_core]]

# DECOMPANDING_NUM_KNEE_POINTS (hidden)
set_property value 16 [ipx::get_user_parameters DECOMPANDING_NUM_KNEE_POINTS -of_objects [ipx::current_core]]
set_property value 16 [ipx::get_hdl_parameters DECOMPANDING_NUM_KNEE_POINTS -of_objects [ipx::current_core]]
set_property enablement_value false [ipx::get_user_parameters DECOMPANDING_NUM_KNEE_POINTS -of_objects [ipx::current_core]]

# GAMMA_LUT_FILE (hidden)
set_property value lut.mem [ipx::get_user_parameters GAMMA_LUT_FILE -of_objects [ipx::current_core]]
set_property value lut.mem [ipx::get_hdl_parameters GAMMA_LUT_FILE -of_objects [ipx::current_core]]
set_property enablement_value false [ipx::get_user_parameters GAMMA_LUT_FILE -of_objects [ipx::current_core]]

# S_AXI_RRESP_WIDTH (hidden)
set_property value 2 [ipx::get_user_parameters S_AXI_RRESP_WIDTH -of_objects [ipx::current_core]]
set_property value 2 [ipx::get_hdl_parameters S_AXI_RRESP_WIDTH -of_objects [ipx::current_core]]
set_property enablement_value false [ipx::get_user_parameters S_AXI_RRESP_WIDTH -of_objects [ipx::current_core]]

# S_AXI_BRESP_WIDTH (hidden)
set_property value 2 [ipx::get_user_parameters S_AXI_BRESP_WIDTH -of_objects [ipx::current_core]]
set_property value 2 [ipx::get_hdl_parameters S_AXI_BRESP_WIDTH -of_objects [ipx::current_core]]
set_property enablement_value false [ipx::get_user_parameters S_AXI_BRESP_WIDTH -of_objects [ipx::current_core]]

# S_AXI_DATA_WIDTH (hidden)
set_property value 32 [ipx::get_user_parameters S_AXI_DATA_WIDTH -of_objects [ipx::current_core]]
set_property value 32 [ipx::get_hdl_parameters S_AXI_DATA_WIDTH -of_objects [ipx::current_core]]
set_property enablement_value false [ipx::get_user_parameters S_AXI_DATA_WIDTH -of_objects [ipx::current_core]]

# S_AXI_ADDR_WIDTH (hidden)
set_property value 5 [ipx::get_user_parameters S_AXI_ADDR_WIDTH -of_objects [ipx::current_core]]
set_property value 5 [ipx::get_hdl_parameters S_AXI_ADDR_WIDTH -of_objects [ipx::current_core]]
set_property enablement_value false [ipx::get_user_parameters S_AXI_ADDR_WIDTH -of_objects [ipx::current_core]]

# S_AXI_WSTRB_WIDTH (auto-derived, hidden from GUI)
set_property value 4 [ipx::get_user_parameters S_AXI_WSTRB_WIDTH -of_objects [ipx::current_core]]
set_property value 4 [ipx::get_hdl_parameters S_AXI_WSTRB_WIDTH -of_objects [ipx::current_core]]
set_property enablement_value false [ipx::get_user_parameters S_AXI_WSTRB_WIDTH -of_objects [ipx::current_core]]
set_property value_tcl_expr {$S_AXI_DATA_WIDTH / 8} [ipx::get_user_parameters S_AXI_WSTRB_WIDTH -of_objects [ipx::current_core]]

# TUSER_WIDTH (hidden)
set_property value 1 [ipx::get_user_parameters TUSER_WIDTH -of_objects [ipx::current_core]]
set_property value 1 [ipx::get_hdl_parameters TUSER_WIDTH -of_objects [ipx::current_core]]
set_property enablement_value false [ipx::get_user_parameters TUSER_WIDTH -of_objects [ipx::current_core]]

# M_AXIS_DATA_WIDTH (auto-derived, hidden from GUI)
set_property value 96 [ipx::get_user_parameters M_AXIS_DATA_WIDTH -of_objects [ipx::current_core]]
set_property value 96 [ipx::get_hdl_parameters M_AXIS_DATA_WIDTH -of_objects [ipx::current_core]]
set_property enablement_value false [ipx::get_user_parameters M_AXIS_DATA_WIDTH -of_objects [ipx::current_core]]
set_property value_tcl_expr {8*floor(($PIXEL_PER_CYCLE * 3 * $COMPONENT_BIT_WIDTH + 7) / 8)} [ipx::get_user_parameters M_AXIS_DATA_WIDTH -of_objects [ipx::current_core]]

# S_AXIS_DATA_WIDTH (auto-derived, hidden from GUI)
set_property value 48 [ipx::get_user_parameters S_AXIS_DATA_WIDTH -of_objects [ipx::current_core]]
set_property value 48 [ipx::get_hdl_parameters S_AXIS_DATA_WIDTH -of_objects [ipx::current_core]]
set_property enablement_value false [ipx::get_user_parameters S_AXIS_DATA_WIDTH -of_objects [ipx::current_core]]
set_property value_tcl_expr {8*floor(($PIXEL_PER_CYCLE * $PIXEL_BIT_WIDTH + 7) / 8)} [ipx::get_user_parameters S_AXIS_DATA_WIDTH -of_objects [ipx::current_core]]

# Update dependencies
ipx::update_dependency [ipx::get_user_parameters CFA_ORIENTATION -of_objects [ipx::current_core]]
ipx::update_dependency [ipx::get_user_parameters MAX_RESOLUTION -of_objects [ipx::current_core]]
ipx::update_dependency [ipx::get_user_parameters PIXEL_PER_CYCLE -of_objects [ipx::current_core]]
ipx::update_dependency [ipx::get_user_parameters PIXEL_BIT_WIDTH -of_objects [ipx::current_core]]
ipx::update_dependency [ipx::get_user_parameters COMPONENT_BIT_WIDTH -of_objects [ipx::current_core]]
ipx::update_dependency [ipx::get_user_parameters S_AXI_DATA_WIDTH -of_objects [ipx::current_core]]
ipx::update_dependency [ipx::get_user_parameters S_AXI_ADDR_WIDTH -of_objects [ipx::current_core]]
ipx::update_dependency [ipx::get_user_parameters S_AXI_WSTRB_WIDTH -of_objects [ipx::current_core]]
ipx::update_dependency [ipx::get_user_parameters S_AXI_RRESP_WIDTH -of_objects [ipx::current_core]]
ipx::update_dependency [ipx::get_user_parameters S_AXI_BRESP_WIDTH -of_objects [ipx::current_core]]
ipx::update_dependency [ipx::get_user_parameters S_AXIS_DATA_WIDTH -of_objects [ipx::current_core]]
ipx::update_dependency [ipx::get_user_parameters M_AXIS_DATA_WIDTH -of_objects [ipx::current_core]]
ipx::update_dependency [ipx::get_user_parameters TUSER_WIDTH -of_objects [ipx::current_core]]

# Create GUI structure
ipgui::add_group -name {input} -component [ipx::current_core] -parent [ipgui::get_pagespec -name "Page 0" -component [ipx::current_core] ] -display_name {Input}
ipgui::add_static_text -name {input_text} -component [ipx::current_core] -parent [ipgui::get_groupspec -name "input" -component [ipx::current_core] ] -text {Please select the raw data input configuration.}
ipgui::move_param -component [ipx::current_core] -order 1 [ipgui::get_guiparamspec -name "PIXEL_BIT_WIDTH" -component [ipx::current_core]] -parent [ipgui::get_groupspec -name "input" -component [ipx::current_core]]
ipgui::move_param -component [ipx::current_core] -order 2 [ipgui::get_guiparamspec -name "CFA_ORIENTATION" -component [ipx::current_core]] -parent [ipgui::get_groupspec -name "input" -component [ipx::current_core]]

ipgui::add_group -name {performance} -component [ipx::current_core] -parent [ipgui::get_pagespec -name "Page 0" -component [ipx::current_core] ] -display_name {Performance}
ipgui::add_static_text -name {performance_text} -component [ipx::current_core] -parent [ipgui::get_groupspec -name "performance" -component [ipx::current_core] ] -text {Performance parameters such as pixel per cycle and horizontal resolution.}
ipgui::move_param -component [ipx::current_core] -order 1 [ipgui::get_guiparamspec -name "PIXEL_PER_CYCLE" -component [ipx::current_core]] -parent [ipgui::get_groupspec -name "performance" -component [ipx::current_core]]
ipgui::move_param -component [ipx::current_core] -order 2 [ipgui::get_guiparamspec -name "MAX_RESOLUTION" -component [ipx::current_core]] -parent [ipgui::get_groupspec -name "performance" -component [ipx::current_core]]

ipgui::add_group -name {output} -component [ipx::current_core] -parent [ipgui::get_pagespec -name "Page 0" -component [ipx::current_core] ] -display_name {Output}
ipgui::add_static_text -name {output_text} -component [ipx::current_core] -parent [ipgui::get_groupspec -name "output" -component [ipx::current_core] ] -text {Output configuration. For RGB888, select 8 bit component bit width.}
ipgui::move_param -component [ipx::current_core] -order 1 [ipgui::get_guiparamspec -name "COMPONENT_BIT_WIDTH" -component [ipx::current_core]] -parent [ipgui::get_groupspec -name "output" -component [ipx::current_core]]

# Set names
set_property display_name {Configuration} [ipgui::get_pagespec -name "Page 0" -component [ipx::current_core] ]
set_property tooltip {Mini-ISP User Configuration} [ipgui::get_pagespec -name "Page 0" -component [ipx::current_core] ]

# TODO: simulation sources
# GUI
ipx::create_xgui_files [ipx::current_core]
ipx::create_default_gui_files [ipx::current_core ]

ipx::check_integrity [ipx::current_core]
ipx::update_checksums [ipx::current_core]
Expand Down