diff options
Diffstat (limited to 'python/openvino/demo/ip/intel_ai_ip')
326 files changed, 92812 insertions, 0 deletions
diff --git a/python/openvino/demo/ip/intel_ai_ip/core_hw.tcl b/python/openvino/demo/ip/intel_ai_ip/core_hw.tcl new file mode 100755 index 0000000..9598ffd --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/core_hw.tcl @@ -0,0 +1,189 @@ +package require -exact qsys 19.2 +package require altera_terp + +set_module_property NAME intel_ai_ip +set_module_property VERSION 0.6 +set_module_property ICON_PATH logo.jpg +set_module_property EDITABLE false +set_module_property AUTHOR "Intel Corporation" +set_module_property INSTANTIATE_IN_SYSTEM_MODULE true +set_module_property INTERNAL false + +add_fileset synthesis_files QUARTUS_SYNTH my_generate + +set_fileset_property synthesis_files TOP_LEVEL intel_ai_ip +proc render_top_level {} { + # get template + set template_path "./verilog/intel_ai_ip.sv.terp" + set template_fd [open $template_path] + set template [read $template_fd] + close $template_fd + set existing_arch [glob -directory "./verilog/" -tails -type d *] + set params(archs) $existing_arch + set contents [altera_terp $template params] + return $contents +} +add_fileset_file intel_ai_ip/intel_ai_ip.sv SYSTEM_VERILOG TEXT [render_top_level] + +source ./static_files.tcl + +proc my_generate { entity } { + set architecture [get_parameter_value ARCH_OPTION] + source ./verilog/$architecture/generated_files.tcl +} + +#DLA ARCHITECTURE +set existing_arch [glob -directory "./verilog/" -tails -type d *] +add_display_item "" "AI IP Core Architecture" GROUP tab +set arch_option_param ARCH_OPTION +add_parameter $arch_option_param STRING [lindex $existing_arch 0] +set_parameter_property $arch_option_param ALLOWED_RANGES $existing_arch +set_parameter_property $arch_option_param DISPLAY_NAME "Architecture" +set_parameter_property $arch_option_param DESCRIPTION "Architecture" +set_parameter_property $arch_option_param AFFECTS_GENERATION true +set_parameter_property $arch_option_param HDL_PARAMETER true +add_display_item "AI IP Core Architecture" $arch_option_param parameter + + +set_module_property DESCRIPTION "The Intel FPGA AI Suite is an AI Engine." +set_module_property DISPLAY_NAME "Intel FPGA AI Suite" + +source ./dla_helper.tcl + +add_clk dla_clk +add_clk ddr_clk +add_clk irq_clk +# the reset must be associated to a clock +add_rstn dla_resetn dla_clk + +# CSR Parameters +add_display_item "" "CSR Parameters" GROUP tab + +set param C_CSR_AXI_ADDR_WIDTH +add_parameter $param INTEGER 0 +set_parameter_property $param DISPLAY_NAME "Address Width" +set_parameter_property $param DISPLAY_UNITS "bits" +set_parameter_property $param HDL_PARAMETER true +set_parameter_property $param DESCRIPTION "AXI4-Lite Address Width." +set_parameter_property $param VISIBLE true +set_parameter_property $param DERIVED true +add_display_item "CSR Parameters" $param parameter + +set param C_CSR_AXI_DATA_WIDTH +add_parameter $param INTEGER 0 +set_parameter_property $param DISPLAY_NAME "Data Width" +set_parameter_property $param DISPLAY_UNITS "bits" +set_parameter_property $param HDL_PARAMETER true +set_parameter_property $param DESCRIPTION "AXI4-Lite Data Width." +set_parameter_property $param VISIBLE true +set_parameter_property $param DERIVED true +add_display_item "CSR Parameters" $param parameter + + +# DDR Parameters +add_display_item "" "DDR Parameters" GROUP tab + +set param C_DDR_AXI_ADDR_WIDTH +add_parameter $param INTEGER 0 +set_parameter_property $param DISPLAY_NAME "Address Width" +set_parameter_property $param DISPLAY_UNITS "bits" +set_parameter_property $param HDL_PARAMETER true +set_parameter_property $param DESCRIPTION "AXI4 Address Width." +set_parameter_property $param VISIBLE true +set_parameter_property $param DERIVED true +add_display_item "DDR Parameters" $param parameter + +set param C_DDR_AXI_DATA_WIDTH +add_parameter $param INTEGER 0 +set_parameter_property $param DISPLAY_NAME "Data Width" +set_parameter_property $param DISPLAY_UNITS "bits" +set_parameter_property $param HDL_PARAMETER true +set_parameter_property $param DESCRIPTION "AXI4 Data Width." +set_parameter_property $param VISIBLE true +set_parameter_property $param DERIVED true +add_display_item "DDR Parameters" $param parameter + +set param C_DDR_AXI_BURST_WIDTH +# Warning: omni_add_axi4_interface uses a constant of 2, but the rtl's default value is 4. +add_parameter $param INTEGER 0 +set_parameter_property $param DISPLAY_NAME "Burst Width" +set_parameter_property $param DISPLAY_UNITS "bits" +set_parameter_property $param HDL_PARAMETER false +set_parameter_property $param DESCRIPTION "AXI4 Burst Width. Length = 2**Width." +set_parameter_property $param VISIBLE true +set_parameter_property $param DERIVED true +add_display_item "DDR Parameters" $param parameter + +set param C_DDR_AXI_THREAD_ID_WIDTH +add_parameter $param INTEGER 0 +set_parameter_property $param DISPLAY_NAME "ID" +set_parameter_property $param DISPLAY_UNITS "bits" +set_parameter_property $param HDL_PARAMETER true +set_parameter_property $param DESCRIPTION "AXI4 ID Width." +set_parameter_property $param VISIBLE true +set_parameter_property $param DERIVED true +add_display_item "DDR Parameters" $param parameter + +# DLA Parameters +# todo: either enable this or remove it before release +add_display_item "" "DLA Parameters" GROUP tab +set_display_item_property "DLA Parameters" VISIBLE false +# the parameters need to be defined first, and modified in elaboration +set param C_CONFIG_READER_DATA_BYTES +add_parameter $param INTEGER 8 +set_parameter_property $param DISPLAY_NAME "Config Input Width" +set_parameter_property $param DISPLAY_UNITS "bytes" +set_parameter_property $param DESCRIPTION "Config network input port width" +set_parameter_property $param VISIBLE false +set_parameter_property $param DERIVED true +add_display_item "DLA Parameters" $param parameter + +omni_add_capability 949 1 2048 0 0 + +add_elab_callback my_elab +add_validation_callback check_family +# check if an INI is set to display capability tab +add_validation_callback check_ocs_ini + +proc my_elab {} { + + set architecture [get_parameter_value ARCH_OPTION] + source ./verilog/$architecture/interface_param.tcl + + dla_add_axi4lite_slave_interface csr_axi ddr_clk dla_resetn + dla_add_axi4_master_interface ddr_axi ddr_clk dla_resetn + + omni_add_interrupt_port irq_level irq_clk csr_axi output + +} + +# return the family string used by quartus +proc get_arch_family { arch_name } { + set splitted_name [split $arch_name "_"] + set family [lindex $splitted_name end] + if { $family eq "A10" } { + return "Arria 10" + } elseif { $family eq "C10"} { + return "Cyclone 10 GX" + } elseif { $family eq "S10"} { + return "Stratix 10" + } elseif { $family eq "AGX7"} { + return "Agilex 7" + } elseif { $family eq "AGX5"} { + return "Agilex 5" + } else { + send_message ERROR "Invalid Family: $family" + return "Unknown Family" + } +} + +proc check_family {} { + set family [get_parameter_value device_family] + set architecture [get_parameter_value ARCH_OPTION] + + set arch_family [get_arch_family $architecture] + + if { $family ne $arch_family } { + send_message ERROR "Design uses $family but architecture is built for $arch_family" + } +} diff --git a/python/openvino/demo/ip/intel_ai_ip/dla_helper.tcl b/python/openvino/demo/ip/intel_ai_ip/dla_helper.tcl new file mode 100755 index 0000000..bf5f576 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/dla_helper.tcl @@ -0,0 +1,321 @@ +# not sure why we need this +add_parameter device_family STRING +set_parameter_property device_family VISIBLE false +set_parameter_property device_family SYSTEM_INFO {DEVICE_FAMILY} +set_parameter_property device_family AFFECTS_GENERATION true + +# those are useful hooks so keep them here +set_module_property ELABORATION_CALLBACK elaboration_callback +set elaboration_callback_hooks [list] + +set_module_property VALIDATION_CALLBACK validation_callback +set validation_callback_hooks [list] + +################################################################################### +# Master Elaboration Callback Hook. +# +# +################################################################################### +proc elaboration_callback {} { + upvar elaboration_callback_hooks hooks + + foreach hook $hooks { + $hook + } +} + +################################################################################### +# Master Validation Callback Hook. +# +# +################################################################################### +proc validation_callback {} { + upvar validation_callback_hooks hooks + + foreach hook $hooks { + $hook + } +} + +################################################################################### +# Register core level validate call back +# +# +################################################################################### +proc add_validation_callback { func } { + upvar validation_callback_hooks hooks + lappend hooks $func +} + +################################################################################### +# Register core level elab call back +# +# +################################################################################### +proc add_elab_callback { func } { + upvar elaboration_callback_hooks hooks + lappend hooks $func +} + + +# capability related +################################################################################### +# +# Create the Fake Generics (These dont exist in RTL) But can be probed by Qsys +# +################################################################################### +proc omni_add_fake_generic {gui_grp desc generic default lower higher } { + + add_display_item $gui_grp $generic parameter + add_parameter $generic INTEGER $lower + set_parameter_property $generic DEFAULT_VALUE $default + set_parameter_property $generic DISPLAY_NAME $desc + set_parameter_property $generic ALLOWED_RANGES $lower:$higher + set_parameter_property $generic ENABLED true + set_parameter_property $generic UNITS None + set_parameter_property $generic VISIBLE true + set_parameter_property $generic HDL_PARAMETER false + +} + +# Need to understand how customer will use this +################################################################################### +# +# Add the Offset Capability Info to a core. +# +################################################################################### +proc omni_add_capability { value version size {en 0 } { st 0} } { + + add_display_item "" "Capability Info" GROUP tab + # hide the capability tab by default. + set_display_item_property "Capability Info" VISIBLE false + + add_display_item "Capability Info" "CapInfo" GROUP + omni_add_fake_generic "CapInfo" "Type" C_OMNI_CAP_TYPE $value 0 1024 + omni_add_fake_generic "CapInfo" "Version " C_OMNI_CAP_VERSION $version 1 255 + omni_add_fake_generic "CapInfo" "Size (32bit Words)" C_OMNI_CAP_SIZE $size 0 1073741824 + omni_add_fake_generic "CapInfo" "Associated ID" C_OMNI_CAP_ID_ASSOCIATED 0 0 255 + omni_add_fake_generic "CapInfo" "Component ID" C_OMNI_CAP_ID_COMPONENT 0 0 255 + omni_add_fake_generic "CapInfo" "IRQ Vector (255:disabled)" C_OMNI_CAP_IRQ 255 0 255 + omni_add_fake_generic "CapInfo" "Tag" C_OMNI_CAP_TAG 0 0 255 + if {$en} { + omni_add_fake_generic "CapInfo" "IRQ Enable Exists" C_OMNI_CAP_IRQ_ENABLE_EN 1 0 1 + } else { + omni_add_fake_generic "CapInfo" "IRQ Enable Exists" C_OMNI_CAP_IRQ_ENABLE_EN 0 0 1 + } + omni_add_fake_generic "CapInfo" "IRQ Enable Register" C_OMNI_CAP_IRQ_ENABLE $en 0 32767 + if {$en} { + set_parameter_property C_OMNI_CAP_IRQ_ENABLE_EN ENABLED false + set_parameter_property C_OMNI_CAP_IRQ_ENABLE ENABLED false + } + + + if {$st} { + omni_add_fake_generic "CapInfo" "IRQ Status Exists" C_OMNI_CAP_IRQ_STATUS_EN 1 0 1 + } else { + omni_add_fake_generic "CapInfo" "IRQ Status Exists" C_OMNI_CAP_IRQ_STATUS_EN 0 0 1 + } + omni_add_fake_generic "CapInfo" "IRQ Status Register" C_OMNI_CAP_IRQ_STATUS $st 0 32767 + if {$st} { + set_parameter_property C_OMNI_CAP_IRQ_STATUS_EN ENABLED false + set_parameter_property C_OMNI_CAP_IRQ_STATUS ENABLED false + } + set_parameter_property C_OMNI_CAP_IRQ_ENABLE_EN DISPLAY_HINT boolean-- + set_parameter_property C_OMNI_CAP_IRQ_STATUS_EN DISPLAY_HINT boolean-- + + set_parameter_property C_OMNI_CAP_TYPE ENABLED false + set_parameter_property C_OMNI_CAP_VERSION ENABLED false + set_parameter_property C_OMNI_CAP_SIZE ENABLED false + +} + +# The QUARTUS_INI SYSTEM_INFO parameter used to display/hide the capability tab on GUI +add_parameter CAP_ENABLED_INI BOOLEAN false +set_parameter_property CAP_ENABLED_INI DESCRIPTION "Whether the dla_ocs_enabled ini is enabled" +set_parameter_property CAP_ENABLED_INI SYSTEM_INFO QUARTUS_INI +set_parameter_property CAP_ENABLED_INI SYSTEM_INFO_ARG "dla_ocs_enabled" +set_parameter_property CAP_ENABLED_INI VISIBLE false + +proc check_ocs_ini {} { + set ocs_enabled_ini [get_parameter_value CAP_ENABLED_INI] + set_display_item_property "Capability Info" VISIBLE $ocs_enabled_ini +} + +# Interface + +################################################################################### +# +# +# +################################################################################### +proc add_clk { name } { + add_interface ${name} clock end + set_interface_property ${name} clockRate 0 + set_interface_property ${name} ENABLED true + add_interface_port ${name} ${name} clk Input 1 +} + +################################################################################### +# +# +# +################################################################################### +proc add_rstn { name clk } { + + add_interface ${name} reset end + set_interface_property ${name} associatedClock $clk + set_interface_property ${name} synchronousEdges DEASSERT + set_interface_property ${name} ENABLED true + add_interface_port ${name} ${name} reset_n Input 1 +} + +################################################################################### +# +# +# +################################################################################### +proc dla_add_axi4lite_slave_interface { prefix clk rst } { + + set master_out "Input" + set master_in "Output" + set direction "end" + + # align with Omnitek naming standard + set parameter_prefix "C_[string toupper $prefix]" + + # refer to parameters set in core_hw.tcl + set data_width ${parameter_prefix}_DATA_WIDTH + set addr_width ${parameter_prefix}_ADDR_WIDTH + + ###################################################################################### + add_interface $prefix axi4lite $direction + set_interface_property $prefix associatedClock $clk + set_interface_property $prefix associatedReset $rst + + # copied this from qsys standard axi4lite slave interface template + set_interface_property $prefix readAcceptanceCapability 1 + set_interface_property $prefix writeAcceptanceCapability 1 + set_interface_property $prefix combinedAcceptanceCapability 1 + set_interface_property $prefix bridgesToMaster "" + set_interface_property $prefix ENABLED true + set_interface_property $prefix EXPORT_OF "" + set_interface_property $prefix PORT_NAME_MAP "" + set_interface_property $prefix CMSIS_SVD_VARIABLES "" + set_interface_property $prefix SVD_ADDRESS_GROUP "" + set_interface_property $prefix IPXACT_REGISTER_MAP_VARIABLES "" + + add_interface_port $prefix ${prefix}_awaddr awaddr $master_out $addr_width + add_interface_port $prefix ${prefix}_awvalid awvalid $master_out 1 + add_interface_port $prefix ${prefix}_awready awready $master_in 1 + add_interface_port $prefix ${prefix}_wdata wdata $master_out $data_width + add_interface_port $prefix ${prefix}_wready wready $master_in 1 + add_interface_port $prefix ${prefix}_wvalid wvalid $master_out 1 + add_interface_port $prefix ${prefix}_wstrb wstrb $master_out ($data_width/8) + add_interface_port $prefix ${prefix}_bresp bresp $master_in 2 + add_interface_port $prefix ${prefix}_bvalid bvalid $master_in 1 + add_interface_port $prefix ${prefix}_bready bready $master_out 1 + add_interface_port $prefix ${prefix}_rdata rdata $master_in $data_width + add_interface_port $prefix ${prefix}_rresp rresp $master_in 2 + add_interface_port $prefix ${prefix}_rvalid rvalid $master_in 1 + add_interface_port $prefix ${prefix}_rready rready $master_out 1 + add_interface_port $prefix ${prefix}_araddr araddr $master_out $addr_width + add_interface_port $prefix ${prefix}_arvalid arvalid $master_out 1 + add_interface_port $prefix ${prefix}_arready arready $master_in 1 + add_interface_port $prefix ${prefix}_awprot awprot $master_out 3 + add_interface_port $prefix ${prefix}_arprot arprot $master_out 3 + +} + +################################################################################### +# +# +# +################################################################################### +proc dla_add_axi4_master_interface { prefix clk rst } { + + set master_out "Output" + set master_in "Input" + set direction "start" + + # align with Omnitek naming standard + # also aligns with how parameters are declared in core_hw.tcl + set parameter_prefix "C_[string toupper $prefix]" + + # refer to parameters set in core_hw.tcl + set addr_width ${parameter_prefix}_ADDR_WIDTH + set read_id_width ${parameter_prefix}_THREAD_ID_WIDTH + set data_width ${parameter_prefix}_DATA_WIDTH + ###################################################################################### + add_interface $prefix axi4 $direction + set_interface_property $prefix associatedClock $clk + set_interface_property $prefix associatedReset $rst + + # copied this from qsys standard axi4 master interface template + set_interface_property $prefix readIssuingCapability 16 + set_interface_property $prefix writeIssuingCapability 16 + set_interface_property $prefix combinedIssuingCapability 16 + set_interface_property $prefix issuesINCRBursts true + set_interface_property $prefix issuesWRAPBursts false + set_interface_property $prefix issuesFIXEDBursts false + set_interface_property $prefix ENABLED true + set_interface_property $prefix EXPORT_OF "" + set_interface_property $prefix PORT_NAME_MAP "" + set_interface_property $prefix CMSIS_SVD_VARIABLES "" + set_interface_property $prefix SVD_ADDRESS_GROUP "" + set_interface_property $prefix IPXACT_REGISTER_MAP_VARIABLES "" + + add_interface_port $prefix ${prefix}_awvalid awvalid $master_out 1 + add_interface_port $prefix ${prefix}_awprot awprot $master_out 3 + add_interface_port $prefix ${prefix}_awlen awlen $master_out 8 + add_interface_port $prefix ${prefix}_awready awready $master_in 1 + add_interface_port $prefix ${prefix}_awsize awsize $master_out 3 + add_interface_port $prefix ${prefix}_awburst awburst $master_out 2 + add_interface_port $prefix ${prefix}_arvalid arvalid $master_out 1 + add_interface_port $prefix ${prefix}_arprot arprot $master_out 3 + add_interface_port $prefix ${prefix}_arlen arlen $master_out 8 + add_interface_port $prefix ${prefix}_arready arready $master_in 1 + add_interface_port $prefix ${prefix}_arsize arsize $master_out 3 + add_interface_port $prefix ${prefix}_arburst arburst $master_out 2 + add_interface_port $prefix ${prefix}_rvalid rvalid $master_in 1 + add_interface_port $prefix ${prefix}_rready rready $master_out 1 + add_interface_port $prefix ${prefix}_wvalid wvalid $master_out 1 + add_interface_port $prefix ${prefix}_wlast wlast $master_out 1 + add_interface_port $prefix ${prefix}_wready wready $master_in 1 + add_interface_port $prefix ${prefix}_bvalid bvalid $master_in 1 + add_interface_port $prefix ${prefix}_bready bready $master_out 1 + add_interface_port $prefix ${prefix}_awaddr awaddr $master_out $addr_width + add_interface_port $prefix ${prefix}_awid awid $master_out $read_id_width + add_interface_port $prefix ${prefix}_araddr araddr $master_out $addr_width + add_interface_port $prefix ${prefix}_arid arid $master_out $read_id_width + add_interface_port $prefix ${prefix}_rdata rdata $master_in $data_width + add_interface_port $prefix ${prefix}_rid rid $master_in $read_id_width + add_interface_port $prefix ${prefix}_wdata wdata $master_out $data_width + add_interface_port $prefix ${prefix}_wstrb wstrb $master_out ($data_width/8) + add_interface_port $prefix ${prefix}_bid bid $master_in $read_id_width +} + +################################################################################### +# +# +# +################################################################################### +# Todo: this function doesn't attach a reset to the interrupt +proc omni_add_interrupt_port { name clk ctrl dir { size 1 } } { + + if {$dir == "input"} { + set direction "start" + } else { + set direction "end" + } + + add_interface $name interrupt $direction + set_interface_property $name associatedClock $clk + set_interface_property $name irqScheme INDIVIDUAL_REQUESTS + add_interface_port $name $name irq $dir $size + + if {$dir == "input"} { + } else { + set_interface_property $name associatedAddressablePoint $ctrl + } + +}
\ No newline at end of file diff --git a/python/openvino/demo/ip/intel_ai_ip/logo.jpg b/python/openvino/demo/ip/intel_ai_ip/logo.jpg Binary files differnew file mode 100755 index 0000000..92b21f2 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/logo.jpg diff --git a/python/openvino/demo/ip/intel_ai_ip/static_files.tcl b/python/openvino/demo/ip/intel_ai_ip/static_files.tcl new file mode 100644 index 0000000..0fcfd46 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/static_files.tcl @@ -0,0 +1,313 @@ +add_fileset_file intel_ai_ip/dla_acl_altera_syncram_wrapped.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_acl_altera_syncram_wrapped.sv +add_fileset_file intel_ai_ip/dla_acl_ecc_encoder.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_acl_ecc_encoder.sv +add_fileset_file intel_ai_ip/dla_acl_ecc_decoder.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_acl_ecc_decoder.sv +add_fileset_file intel_ai_ip/dla_acl_dcfifo.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_acl_dcfifo.sv +add_fileset_file intel_ai_ip/dla_acl_reset_handler.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_acl_reset_handler.sv +add_fileset_file intel_ai_ip/dla_reset_handler_simple.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_reset_handler_simple.sv +add_fileset_file intel_ai_ip/dla_aux_activation_round_clamp.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_activation_round_clamp.sv +add_fileset_file intel_ai_ip/dla_aux_activation_input_buffer_pipeline_stage.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_activation_input_buffer_pipeline_stage.sv +add_fileset_file intel_ai_ip/dla_aux_activation_input_buffer.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_activation_input_buffer.sv +add_fileset_file intel_ai_ip/dla_aux_activation_core.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_activation_core.sv +add_fileset_file intel_ai_ip/dla_aux_activation_debug.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_activation_debug.sv +add_fileset_file intel_ai_ip/dla_aux_activation_param_cache.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_activation_param_cache.sv +add_fileset_file intel_ai_ip/dla_aux_activation_lane.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_activation_lane.sv +add_fileset_file intel_ai_ip/dla_aux_activation_prelu.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_activation_prelu.sv +add_fileset_file intel_ai_ip/dla_aux_activation_config_decoder.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_activation_config_decoder.sv +add_fileset_file intel_ai_ip/dla_aux_activation_mult_dsp.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_activation_mult_dsp.sv +add_fileset_file intel_ai_ip/dla_aux_activation_continuous_activations.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_activation_continuous_activations.sv +add_fileset_file intel_ai_ip/dla_aux_activation_top.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_activation_top.sv +add_fileset_file intel_ai_ip/dla_aux_activation_pkg.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_activation_pkg.sv +add_fileset_file intel_ai_ip/dla_aux_activation_clamp.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_activation_clamp.sv +add_fileset_file intel_ai_ip/dla_aux_activation_group.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_activation_group.sv +add_fileset_file intel_ai_ip/dla_aux_activation_control.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_activation_control.sv +add_fileset_file intel_ai_ip/dla_aux_sigmoid_tanh_recip_half_S10.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_sigmoid_tanh_recip_half_S10.sv +add_fileset_file intel_ai_ip/dla_aux_sigmoid_tanh_recip_half_A10.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_sigmoid_tanh_recip_half_A10.sv +add_fileset_file intel_ai_ip/dla_aux_sigmoid_tanh_recip_half_AGX.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_sigmoid_tanh_recip_half_AGX.sv +add_fileset_file intel_ai_ip/dla_aux_sigmoid_tanh_recip_half_C10.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_sigmoid_tanh_recip_half_C10.sv +add_fileset_file intel_ai_ip/dla_aux_pool_control.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_pool_control.sv +add_fileset_file intel_ai_ip/dla_aux_pool_pipeline_stage.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_pool_pipeline_stage.sv +add_fileset_file intel_ai_ip/dla_aux_pool_input_buffer.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_pool_input_buffer.sv +add_fileset_file intel_ai_ip/dla_aux_pool_pkg.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_pool_pkg.sv +add_fileset_file intel_ai_ip/dla_aux_pool_core.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_pool_core.sv +add_fileset_file intel_ai_ip/dla_aux_pool_config_decoder.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_pool_config_decoder.sv +add_fileset_file intel_ai_ip/dla_aux_pool_debug.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_pool_debug.sv +add_fileset_file intel_ai_ip/dla_aux_pool_tree.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_pool_tree.sv +add_fileset_file intel_ai_ip/dla_aux_pool_group.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_pool_group.sv +add_fileset_file intel_ai_ip/dla_aux_pool_top.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_pool_top.sv +add_fileset_file intel_ai_ip/dla_aux_pool_lane.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_pool_lane.sv +add_fileset_file intel_ai_ip/dla_dot_dsp_pack1x1_mult_fp16_chain_add.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_dot_dsp_pack1x1_mult_fp16_chain_add.sv +add_fileset_file intel_ai_ip/dla_aux_depthwise_pkg.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_depthwise_pkg.sv +add_fileset_file intel_ai_ip/dla_aux_depthwise_core.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_depthwise_core.sv +add_fileset_file intel_ai_ip/dla_aux_depthwise_lane.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_depthwise_lane.sv +add_fileset_file intel_ai_ip/dla_aux_depthwise_config_decoder.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_depthwise_config_decoder.sv +add_fileset_file intel_ai_ip/dla_dot_dsp_pack1x1_mult_fp16_adder_tree.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_dot_dsp_pack1x1_mult_fp16_adder_tree.sv +add_fileset_file intel_ai_ip/dla_aux_depthwise_group.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_depthwise_group.sv +add_fileset_file intel_ai_ip/dla_aux_depthwise_control.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_depthwise_control.sv +add_fileset_file intel_ai_ip/dla_aux_depthwise_fp32_convert.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_depthwise_fp32_convert.sv +add_fileset_file intel_ai_ip/dla_aux_depthwise_filter_bias_cache.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_depthwise_filter_bias_cache.sv +add_fileset_file intel_ai_ip/dla_s10_adder_tree.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_s10_adder_tree.sv +add_fileset_file intel_ai_ip/dla_aux_depthwise_input_buffer.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_depthwise_input_buffer.sv +add_fileset_file intel_ai_ip/dla_aux_depthwise_pipeline_stage.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_depthwise_pipeline_stage.sv +add_fileset_file intel_ai_ip/dla_aux_depthwise_top.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_depthwise_top.sv +add_fileset_file intel_ai_ip/dla_dot_dsp_pack1x1_mult_fp16.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_dot_dsp_pack1x1_mult_fp16.sv +add_fileset_file intel_ai_ip/dla_aux_depthwise_shift_register.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_depthwise_shift_register.sv +add_fileset_file intel_ai_ip/dla_dsp_fp16_mult_sum.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_dsp_fp16_mult_sum.sv +add_fileset_file intel_ai_ip/dla_aux_depthwise_debug.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_depthwise_debug.sv +add_fileset_file intel_ai_ip/dla_aux_softmax_lane.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_softmax_lane.sv +add_fileset_file intel_ai_ip/dla_aux_softmax_exponent_wrapper.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_softmax_exponent_wrapper.sv +add_fileset_file intel_ai_ip/dla_aux_softmax_division_wrapper.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_softmax_division_wrapper.sv +add_fileset_file intel_ai_ip/dla_aux_softmax_control.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_softmax_control.sv +add_fileset_file intel_ai_ip/dla_aux_softmax_debug.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_softmax_debug.sv +add_fileset_file intel_ai_ip/dla_aux_softmax_config_decoder.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_softmax_config_decoder.sv +add_fileset_file intel_ai_ip/dla_aux_softmax_group.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_softmax_group.sv +add_fileset_file intel_ai_ip/dla_aux_softmax_pkg.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_softmax_pkg.sv +add_fileset_file intel_ai_ip/dla_aux_softmax_pipeline_stage.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_softmax_pipeline_stage.sv +add_fileset_file intel_ai_ip/dla_aux_softmax_top.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_softmax_top.sv +add_fileset_file intel_ai_ip/dla_aux_softmax_core.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_softmax_core.sv +add_fileset_file intel_ai_ip/dla_aux_softmax_input_buffer.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_softmax_input_buffer.sv +add_fileset_file intel_ai_ip/dla_aux_softmax_division_A10.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_softmax_division_A10.sv +add_fileset_file intel_ai_ip/dla_aux_softmax_division_AGX.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_softmax_division_AGX.sv +add_fileset_file intel_ai_ip/dla_aux_softmax_exponent_S10.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_softmax_exponent_S10.sv +add_fileset_file intel_ai_ip/dla_aux_softmax_division_C10.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_softmax_division_C10.sv +add_fileset_file intel_ai_ip/dla_aux_softmax_exponent_C10.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_softmax_exponent_C10.sv +add_fileset_file intel_ai_ip/dla_aux_softmax_exponent_A10.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_softmax_exponent_A10.sv +add_fileset_file intel_ai_ip/dla_aux_softmax_division_S10.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_softmax_division_S10.sv +add_fileset_file intel_ai_ip/dla_aux_softmax_exponent_AGX.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_softmax_exponent_AGX.sv +add_fileset_file intel_ai_ip/dla_cdc_reset_sync.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_cdc_reset_sync.sv +add_fileset_file intel_ai_ip/dla_cdc_reset_async.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_cdc_reset_async.sv +add_fileset_file intel_ai_ip/dla_clock_cross_full_sync_internal.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_clock_cross_full_sync_internal.sv +add_fileset_file intel_ai_ip/dla_clock_cross_half_sync_internal.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_clock_cross_half_sync_internal.sv +add_fileset_file intel_ai_ip/dla_clock_cross_half_sync.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_clock_cross_half_sync.sv +add_fileset_file intel_ai_ip/dla_cdc_reset_aligned.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_cdc_reset_aligned.sv +add_fileset_file intel_ai_ip/dla_clock_cross_full_sync.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_clock_cross_full_sync.sv +add_fileset_file intel_ai_ip/dla_aux_dspba_delay_ver.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_dspba_delay_ver.sv +add_fileset_file intel_ai_ip/dla_aux_float_32_to_float_16.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_float_32_to_float_16.sv +add_fileset_file intel_ai_ip/dla_aux_float_16_to_float_32.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_float_16_to_float_32.sv +add_fileset_file intel_ai_ip/dla_config_deserialize.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_config_deserialize.sv +add_fileset_file intel_ai_ip/dla_dsp_fp32_mult_add.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_dsp_fp32_mult_add.sv +add_fileset_file intel_ai_ip/dla_fp32_from_fpx_convert.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_fp32_from_fpx_convert.sv +add_fileset_file intel_ai_ip/dla_dsp_prime_tensor_dot_sidefeed.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_dsp_prime_tensor_dot_sidefeed.sv +add_fileset_file intel_ai_ip/dla_hld_lsu_pkg.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_hld_lsu_pkg.sv +add_fileset_file intel_ai_ip/dla_dsp_prime_tensor_accumulation.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_dsp_prime_tensor_accumulation.sv +add_fileset_file intel_ai_ip/dla_value_counter.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_value_counter.sv +add_fileset_file intel_ai_ip/dla_dsp_m18x18_full.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_dsp_m18x18_full.sv +add_fileset_file intel_ai_ip/dla_dsp_fp32_mult_acc.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_dsp_fp32_mult_acc.sv +add_fileset_file intel_ai_ip/dla_dsp_fp32_add_sub.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_dsp_fp32_add_sub.sv +add_fileset_file intel_ai_ip/dla_delay.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_delay.sv +add_fileset_file intel_ai_ip/dla_timer.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_timer.sv +add_fileset_file intel_ai_ip/dla_ram.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_ram.sv +add_fileset_file intel_ai_ip/dla_common_pkg.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_common_pkg.sv +add_fileset_file intel_ai_ip/dla_counter.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_counter.sv +add_fileset_file intel_ai_ip/dla_latency_alignment.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_latency_alignment.sv +add_fileset_file intel_ai_ip/dla_dsp_m9x9_sumof4.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_dsp_m9x9_sumof4.sv +add_fileset_file intel_ai_ip/dla_bitscan_optimized.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_bitscan_optimized.sv +add_fileset_file intel_ai_ip/dla_fp32_to_fpx_convert.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_fp32_to_fpx_convert.sv +add_fileset_file intel_ai_ip/dla_acl_ecc_pkg.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_acl_ecc_pkg.sv +add_fileset_file intel_ai_ip/dla_ddrfree_config_data_read.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_ddrfree_config_data_read.sv +add_fileset_file intel_ai_ip/dla_config_network.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_config_network.sv +add_fileset_file intel_ai_ip/dla_config_data_split.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_config_data_split.sv +add_fileset_file intel_ai_ip/dla_config_data_concat.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_config_data_concat.sv +add_fileset_file intel_ai_ip/dla_debug_network_node.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_debug_network_node.sv +add_fileset_file intel_ai_ip/dla_debug_network.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_debug_network.sv +add_fileset_file intel_ai_ip/dla_lt_output_logic.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_lt_output_logic.sv +add_fileset_file intel_ai_ip/dla_lt_mux.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_lt_mux.sv +add_fileset_file intel_ai_ip/dla_lt_data_conversion.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_lt_data_conversion.sv +add_fileset_file intel_ai_ip/dla_lt_step_counter.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_lt_step_counter.sv +add_fileset_file intel_ai_ip/dla_lt_ram_arb.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_lt_ram_arb.sv +add_fileset_file intel_ai_ip/dla_lt_dimension_counter.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_lt_dimension_counter.sv +add_fileset_file intel_ai_ip/dla_lt_gen_index_info.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_lt_gen_index_info.sv +add_fileset_file intel_ai_ip/dla_lt_pkg.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_lt_pkg.sv +add_fileset_file intel_ai_ip/dla_lt_funnel.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_lt_funnel.sv +add_fileset_file intel_ai_ip/dla_layout_transform.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_layout_transform.sv +add_fileset_file intel_ai_ip/dla_lt_memory_manager.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_lt_memory_manager.sv +add_fileset_file intel_ai_ip/dla_streamer_fsm.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_streamer_fsm.sv +add_fileset_file intel_ai_ip/dla_input_streamer.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_input_streamer.sv +add_fileset_file intel_ai_ip/dla_output_streamer.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_output_streamer.sv +add_fileset_file intel_ai_ip/dla_output_streamer_pkg.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_output_streamer_pkg.sv +add_fileset_file intel_ai_ip/dla_output_streamer_flush_handler.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_output_streamer_flush_handler.sv +add_fileset_file intel_ai_ip/dla_dma_addr_gen.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_dma_addr_gen.sv +add_fileset_file intel_ai_ip/dla_dma_pkg.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_dma_pkg.sv +add_fileset_file intel_ai_ip/dla_dma_writer.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_dma_writer.sv +add_fileset_file intel_ai_ip/dla_dma.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_dma.sv +add_fileset_file intel_ai_ip/dla_dma_csr.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_dma_csr.sv +add_fileset_file intel_ai_ip/dla_dma_reader.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_dma_reader.sv +add_fileset_file intel_ai_ip/dla_dma_read_arb.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_dma_read_arb.sv +add_fileset_file intel_ai_ip/dla_dma_config_intercept.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_dma_config_intercept.sv +add_fileset_file intel_ai_ip/dla_dma_counter_64.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_dma_counter_64.sv +add_fileset_file intel_ai_ip/dla_demux_pkg.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_demux_pkg.sv +add_fileset_file intel_ai_ip/dla_demux.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_demux.sv +add_fileset_file intel_ai_ip/dla_filter_bias_scale_scratchpad_pkg.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_filter_bias_scale_scratchpad_pkg.sv +add_fileset_file intel_ai_ip/dla_filter_bias_scale_scratchpad.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_filter_bias_scale_scratchpad.sv +add_fileset_file intel_ai_ip/dla_acl_mid_speed_fifo.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_acl_mid_speed_fifo.sv +add_fileset_file intel_ai_ip/dla_acl_fanout_pipeline.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_acl_fanout_pipeline.sv +add_fileset_file intel_ai_ip/dla_acl_lfsr.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_acl_lfsr.sv +add_fileset_file intel_ai_ip/dla_hld_fifo_zero_width.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_hld_fifo_zero_width.sv +add_fileset_file intel_ai_ip/dla_acl_low_latency_fifo.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_acl_low_latency_fifo.sv +add_fileset_file intel_ai_ip/dla_acl_tessellated_incr_decr_threshold.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_acl_tessellated_incr_decr_threshold.sv +add_fileset_file intel_ai_ip/dla_acl_latency_one_ram_fifo.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_acl_latency_one_ram_fifo.sv +add_fileset_file intel_ai_ip/dla_acl_std_synchronizer_nocut.v SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_acl_std_synchronizer_nocut.v +add_fileset_file intel_ai_ip/dla_acl_zero_latency_fifo.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_acl_zero_latency_fifo.sv +add_fileset_file intel_ai_ip/dla_hld_fifo.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_hld_fifo.sv +add_fileset_file intel_ai_ip/dla_acl_latency_zero_ram_fifo.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_acl_latency_zero_ram_fifo.sv +add_fileset_file intel_ai_ip/dla_acl_high_speed_fifo.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_acl_high_speed_fifo.sv +add_fileset_file intel_ai_ip/dla_acl_tessellated_incr_lookahead.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_acl_tessellated_incr_lookahead.sv +add_fileset_file intel_ai_ip/dla_hld_lsu_word_coalescer.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_hld_lsu_word_coalescer.sv +add_fileset_file intel_ai_ip/dla_hld_lsu_read_data_alignment.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_hld_lsu_read_data_alignment.sv +add_fileset_file intel_ai_ip/dla_hld_global_load_store.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_hld_global_load_store.sv +add_fileset_file intel_ai_ip/dla_hld_lsu_burst_coalescer.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_hld_lsu_burst_coalescer.sv +add_fileset_file intel_ai_ip/dla_hld_lsu_read_cache.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_hld_lsu_read_cache.sv +add_fileset_file intel_ai_ip/dla_hld_lsu.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_hld_lsu.sv +add_fileset_file intel_ai_ip/dla_acl_shift_register_no_reset.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_acl_shift_register_no_reset.sv +add_fileset_file intel_ai_ip/dla_hld_lsu_write_data_alignment.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_hld_lsu_write_data_alignment.sv +add_fileset_file intel_ai_ip/dla_acl_burst_splitter.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_acl_burst_splitter.sv +add_fileset_file intel_ai_ip/dla_hld_lsu_unaligned_controller.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_hld_lsu_unaligned_controller.sv +add_fileset_file intel_ai_ip/dla_hld_lsu_coalescer_dynamic_timeout.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_hld_lsu_coalescer_dynamic_timeout.sv +add_fileset_file intel_ai_ip/dla_hld_lsu_data_aligner.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_hld_lsu_data_aligner.sv +add_fileset_file intel_ai_ip/dla_hld_lsu_write_kernel_downstream.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_hld_lsu_write_kernel_downstream.sv +add_fileset_file intel_ai_ip/dla_hld_ram_generic_three_way_depth_stitch.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_hld_ram_generic_three_way_depth_stitch.sv +add_fileset_file intel_ai_ip/dla_hld_ram_tall_depth_stitch.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_hld_ram_tall_depth_stitch.sv +add_fileset_file intel_ai_ip/dla_hld_ram_short_depth_stitch.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_hld_ram_short_depth_stitch.sv +add_fileset_file intel_ai_ip/dla_hld_ram.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_hld_ram.sv +add_fileset_file intel_ai_ip/dla_hld_ram_generic_two_way_depth_stitch.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_hld_ram_generic_two_way_depth_stitch.sv +add_fileset_file intel_ai_ip/dla_hld_ram_lower_mlab_simple_dual_port.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_hld_ram_lower_mlab_simple_dual_port.sv +add_fileset_file intel_ai_ip/dla_hld_ram_bits_per_enable.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_hld_ram_bits_per_enable.sv +add_fileset_file intel_ai_ip/dla_hld_ram_lower_m20k_simple_dual_port.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_hld_ram_lower_m20k_simple_dual_port.sv +add_fileset_file intel_ai_ip/dla_hld_ram_bottom_depth_stitch.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_hld_ram_bottom_depth_stitch.sv +add_fileset_file intel_ai_ip/dla_hld_ram_remaining_width.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_hld_ram_remaining_width.sv +add_fileset_file intel_ai_ip/dla_hld_ram_bottom_width_stitch.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_hld_ram_bottom_width_stitch.sv +add_fileset_file intel_ai_ip/dla_hld_ram_lower_m20k_true_dual_port.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_hld_ram_lower_m20k_true_dual_port.sv +add_fileset_file intel_ai_ip/dla_hld_ram_ecc.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_hld_ram_ecc.sv +add_fileset_file intel_ai_ip/dla_hld_ram_lower.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_hld_ram_lower.sv +add_fileset_file intel_ai_ip/dla_input_feeder_writer_config.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_input_feeder_writer_config.sv +add_fileset_file intel_ai_ip/dla_input_feeder_reader_config.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_input_feeder_reader_config.sv +add_fileset_file intel_ai_ip/dla_stream_buffer_writer_coord_validate_dim.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_stream_buffer_writer_coord_validate_dim.sv +add_fileset_file intel_ai_ip/dla_stream_buffer_manager.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_stream_buffer_manager.sv +add_fileset_file intel_ai_ip/dla_stream_buffer_ram.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_stream_buffer_ram.sv +add_fileset_file intel_ai_ip/dla_stream_buffer_writer_fp_conversion.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_stream_buffer_writer_fp_conversion.sv +add_fileset_file intel_ai_ip/dla_stream_buffer_writer_input_mux.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_stream_buffer_writer_input_mux.sv +add_fileset_file intel_ai_ip/dla_stream_buffer_reader_top.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_stream_buffer_reader_top.sv +add_fileset_file intel_ai_ip/dla_stream_buffer_writer_coord_gen.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_stream_buffer_writer_coord_gen.sv +add_fileset_file intel_ai_ip/dla_stream_buffer_writer_data_split.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_stream_buffer_writer_data_split.sv +add_fileset_file intel_ai_ip/dla_input_feeder_pkg.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_input_feeder_pkg.sv +add_fileset_file intel_ai_ip/dla_input_feeder.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_input_feeder.sv +add_fileset_file intel_ai_ip/dla_stream_buffer_writer_fp_top.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_stream_buffer_writer_fp_top.sv +add_fileset_file intel_ai_ip/dla_stream_buffer_writer_coord_validate.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_stream_buffer_writer_coord_validate.sv +add_fileset_file intel_ai_ip/dla_stream_buffer_writer_addr_offset_gen.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_stream_buffer_writer_addr_offset_gen.sv +add_fileset_file intel_ai_ip/dla_input_feeder_if.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_input_feeder_if.sv +add_fileset_file intel_ai_ip/dla_stream_buffer_writer_addr_gen_pipeline.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_stream_buffer_writer_addr_gen_pipeline.sv +add_fileset_file intel_ai_ip/dla_stream_buffer_writer_max_value.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_stream_buffer_writer_max_value.sv +add_fileset_file intel_ai_ip/dla_stream_buffer_writer_top.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_stream_buffer_writer_top.sv +add_fileset_file intel_ai_ip/dla_stream_buffer_writer_block_align_mantissa.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_stream_buffer_writer_block_align_mantissa.sv +add_fileset_file intel_ai_ip/dla_stream_buffer_reader_addr_gen.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_stream_buffer_reader_addr_gen.sv +add_fileset_file intel_ai_ip/dla_stream_buffer_writer_addr_gen.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_stream_buffer_writer_addr_gen.sv +add_fileset_file intel_ai_ip/dla_interface_pkg.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_interface_pkg.sv +add_fileset_file intel_ai_ip/dla_interface_profiling_counters.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_interface_profiling_counters.sv +add_fileset_file intel_ai_ip/dla_dot_dsp_pack2x2_mult6x4.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_dot_dsp_pack2x2_mult6x4.sv +add_fileset_file intel_ai_ip/dla_pe.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_pe.sv +add_fileset_file intel_ai_ip/dla_accum_convert_alm.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_accum_convert_alm.sv +add_fileset_file intel_ai_ip/dla_dot_dsp_pack2x1_mult7.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_dot_dsp_pack2x1_mult7.sv +add_fileset_file intel_ai_ip/dla_dot_dsp_pack1x1_mult9_chain_add.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_dot_dsp_pack1x1_mult9_chain_add.sv +add_fileset_file intel_ai_ip/dla_signmag_to_2scomplement.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_signmag_to_2scomplement.sv +add_fileset_file intel_ai_ip/dla_accum_blockfp_dsp.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_accum_blockfp_dsp.sv +add_fileset_file intel_ai_ip/dla_a10_c10_adder_tree.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_a10_c10_adder_tree.sv +add_fileset_file intel_ai_ip/dla_pe_array.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_pe_array.sv +add_fileset_file intel_ai_ip/dla_dot_adder_tree.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_dot_adder_tree.sv +add_fileset_file intel_ai_ip/dla_tensor_block_dot_and_convert.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_tensor_block_dot_and_convert.sv +add_fileset_file intel_ai_ip/dla_accum_fp32_dsp.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_accum_fp32_dsp.sv +add_fileset_file intel_ai_ip/dla_accum.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_accum.sv +add_fileset_file intel_ai_ip/dla_dot_dsp_pack1x1_mult9_adder_tree.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_dot_dsp_pack1x1_mult9_adder_tree.sv +add_fileset_file intel_ai_ip/dla_accum_fp32_convert.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_accum_fp32_convert.sv +add_fileset_file intel_ai_ip/dla_accum_convert_dsp.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_accum_convert_dsp.sv +add_fileset_file intel_ai_ip/dla_dot_alm_s10.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_dot_alm_s10.sv +add_fileset_file intel_ai_ip/dla_dot_dsp_pack2x2_mult5.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_dot_dsp_pack2x2_mult5.sv +add_fileset_file intel_ai_ip/dla_dot_sm_alm_s10.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_dot_sm_alm_s10.sv +add_fileset_file intel_ai_ip/dla_dot_dsp_pack1x1_mult9.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_dot_dsp_pack1x1_mult9.sv +add_fileset_file intel_ai_ip/dla_accum_blockfp_alm.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_accum_blockfp_alm.sv +add_fileset_file intel_ai_ip/dla_s10_adder2.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_s10_adder2.sv +add_fileset_file intel_ai_ip/dla_dot_and_convert.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_dot_and_convert.sv +add_fileset_file intel_ai_ip/dla_accum_fixed.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_accum_fixed.sv +add_fileset_file intel_ai_ip/dla_pe_drain.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_pe_drain.sv +add_fileset_file intel_ai_ip/dla_pe_blockfp_to_accum_input.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_pe_blockfp_to_accum_input.sv +add_fileset_file intel_ai_ip/dla_dot_dsp_pack1x1_mult18.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_dot_dsp_pack1x1_mult18.sv +add_fileset_file intel_ai_ip/dla_s10_adder_tree.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_s10_adder_tree.sv +add_fileset_file intel_ai_ip/dla_dot_alm.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_dot_alm.sv +add_fileset_file intel_ai_ip/dla_dot_dsp_pack2x2_mult4.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_dot_dsp_pack2x2_mult4.sv +add_fileset_file intel_ai_ip/dla_a10_adder1.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_a10_adder1.sv +add_fileset_file intel_ai_ip/dla_dot_2s_alm_s10.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_dot_2s_alm_s10.sv +add_fileset_file intel_ai_ip/dla_c10_adder1.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_c10_adder1.sv +add_fileset_file intel_ai_ip/dla_s10_adder1.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_s10_adder1.sv +add_fileset_file intel_ai_ip/dla_dot.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_dot.sv +add_fileset_file intel_ai_ip/dla_2scomplement_to_signmag.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_2scomplement_to_signmag.sv +add_fileset_file intel_ai_ip/dla_pe_array_pkg.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_pe_array_pkg.sv +add_fileset_file intel_ai_ip/dla_dot_dsp_pack2x2_mult5x4.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_dot_dsp_pack2x2_mult5x4.sv +add_fileset_file intel_ai_ip/dla_dot_dsp_tensor1x2_mult10_hidden_sideload.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_dot_dsp_tensor1x2_mult10_hidden_sideload.sv +add_fileset_file intel_ai_ip/dla_dot_dsp_pack2x2_mult7.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_dot_dsp_pack2x2_mult7.sv +add_fileset_file intel_ai_ip/dla_dot_alm_a10_c10.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_dot_alm_a10_c10.sv +add_fileset_file intel_ai_ip/dla_dot_checker.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_dot_checker.sv +add_fileset_file intel_ai_ip/dla_alm_pipelined_accum.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_alm_pipelined_accum.sv +add_fileset_file intel_ai_ip/dla_exit_fifo_pkg.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_exit_fifo_pkg.sv +add_fileset_file intel_ai_ip/dla_sfc_backpressure_generator.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_sfc_backpressure_generator.sv +add_fileset_file intel_ai_ip/dla_exit_fifo.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_exit_fifo.sv +add_fileset_file intel_ai_ip/dla_filter_ddr_unpack.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_filter_ddr_unpack.sv +add_fileset_file intel_ai_ip/dla_sequencer_pe_control.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_sequencer_pe_control.sv +add_fileset_file intel_ai_ip/dla_sequencer_result_id_counters.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_sequencer_result_id_counters.sv +add_fileset_file intel_ai_ip/dla_sequencer_pkg.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_sequencer_pkg.sv +add_fileset_file intel_ai_ip/dla_sequencer_scratchpad_control.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_sequencer_scratchpad_control.sv +add_fileset_file intel_ai_ip/dla_sequencer.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_sequencer.sv +add_fileset_file intel_ai_ip/dla_platform_reset.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_platform_reset.sv +add_fileset_file intel_ai_ip/dla_platform_reset_internal.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_platform_reset_internal.sv +add_fileset_file intel_ai_ip/dla_top_pkg.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_top_pkg.sv +add_fileset_file intel_ai_ip/dla_width_adapter.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_width_adapter.sv +add_fileset_file intel_ai_ip/dla_width_adapter_pkg.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_width_adapter_pkg.sv +add_fileset_file intel_ai_ip/dla_xbar_config_handler.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_xbar_config_handler.sv +add_fileset_file intel_ai_ip/dla_xbar_pkg.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_xbar_pkg.sv +add_fileset_file intel_ai_ip/dla_xbar_wrapper.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_xbar_wrapper.sv +add_fileset_file intel_ai_ip/dla_xbar.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_xbar.sv +add_fileset_file intel_ai_ip/dla_st_pipeline_stage.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_st_pipeline_stage.sv +add_fileset_file intel_ai_ip/dla_aux_activation_if.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_activation_if.sv +add_fileset_file intel_ai_ip/dla_aux_pool_if.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_pool_if.sv +add_fileset_file intel_ai_ip/dla_aux_depthwise_if.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_depthwise_if.sv +add_fileset_file intel_ai_ip/dla_aux_softmax_if.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_aux_softmax_if.sv +add_fileset_file intel_ai_ip/dla_layout_transform_config.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_layout_transform_config.sv +add_fileset_file intel_ai_ip/dla_filter_bias_scale_scratchpad_if.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_filter_bias_scale_scratchpad_if.sv +add_fileset_file intel_ai_ip/dla_interface_if.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_interface_if.sv +add_fileset_file intel_ai_ip/dla_pe_array_if.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_pe_array_if.sv +add_fileset_file intel_ai_ip/dla_xbar_if.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/dla_xbar_if.sv +add_fileset_file intel_ai_ip/my_division_flt_i_sfc_logic_s_c1_in_wt_e0000116_invTables_lutmem.mif MIF PATH ../intel_ai_ip/verilog/my_division_flt_i_sfc_logic_s_c1_in_wt_e0000116_invTables_lutmem.mif +add_fileset_file intel_ai_ip/my_division_flt_i_sfc_logic_s_c1_in_wt_e0000119_invTables_lutmem.mif MIF PATH ../intel_ai_ip/verilog/my_division_flt_i_sfc_logic_s_c1_in_wt_e0000119_invTables_lutmem.mif +add_fileset_file intel_ai_ip/my_exponent_flt_i_sfc_logic_s_c1_in_wt_e0001ock_rsrvd_fix_lutmem.mif MIF PATH ../intel_ai_ip/verilog/my_exponent_flt_i_sfc_logic_s_c1_in_wt_e0001ock_rsrvd_fix_lutmem.mif +add_fileset_file intel_ai_ip/my_exponent_flt_i_sfc_logic_s_c1_in_wt_e0002ock_rsrvd_fix_lutmem.mif MIF PATH ../intel_ai_ip/verilog/my_exponent_flt_i_sfc_logic_s_c1_in_wt_e0002ock_rsrvd_fix_lutmem.mif +add_fileset_file intel_ai_ip/my_exponent_flt_i_sfc_logic_s_c1_in_wt_e0000ock_rsrvd_fix_lutmem.mif MIF PATH ../intel_ai_ip/verilog/my_exponent_flt_i_sfc_logic_s_c1_in_wt_e0000ock_rsrvd_fix_lutmem.mif +add_fileset_file intel_ai_ip/my_division_flt_i_sfc_logic_s_c1_in_wt_e0000113_invTables_lutmem.mif MIF PATH ../intel_ai_ip/verilog/my_division_flt_i_sfc_logic_s_c1_in_wt_e0000113_invTables_lutmem.mif +add_fileset_file intel_ai_ip/dla_acl_width_clip.svh SYSTEM_VERILOG_INCLUDE PATH ../intel_ai_ip/verilog/dla_acl_width_clip.svh +add_fileset_file intel_ai_ip/dla_aux_activation_functions.svh SYSTEM_VERILOG_INCLUDE PATH ../intel_ai_ip/verilog/dla_aux_activation_functions.svh +add_fileset_file intel_ai_ip/dla_aux_activation_constants.svh SYSTEM_VERILOG_INCLUDE PATH ../intel_ai_ip/verilog/dla_aux_activation_constants.svh +add_fileset_file intel_ai_ip/dla_vector_dot_arch_info.svh SYSTEM_VERILOG_INCLUDE PATH ../intel_ai_ip/verilog/dla_vector_dot_arch_info.svh +add_fileset_file intel_ai_ip/dla_common_types.svh SYSTEM_VERILOG_INCLUDE PATH ../intel_ai_ip/verilog/dla_common_types.svh +add_fileset_file intel_ai_ip/dla_constants.svh SYSTEM_VERILOG_INCLUDE PATH ../intel_ai_ip/verilog/dla_constants.svh +add_fileset_file intel_ai_ip/dla_common_macros.svh SYSTEM_VERILOG_INCLUDE PATH ../intel_ai_ip/verilog/dla_common_macros.svh +add_fileset_file intel_ai_ip/dla_aux_generic_pkg.svh SYSTEM_VERILOG_INCLUDE PATH ../intel_ai_ip/verilog/dla_aux_generic_pkg.svh +add_fileset_file intel_ai_ip/dla_aux_generic_debug_pkg.svh SYSTEM_VERILOG_INCLUDE PATH ../intel_ai_ip/verilog/dla_aux_generic_debug_pkg.svh +add_fileset_file intel_ai_ip/dla_acl_parameter_assert.svh SYSTEM_VERILOG_INCLUDE PATH ../intel_ai_ip/verilog/dla_acl_parameter_assert.svh +add_fileset_file intel_ai_ip/dla_common_enums.svh SYSTEM_VERILOG_INCLUDE PATH ../intel_ai_ip/verilog/dla_common_enums.svh +add_fileset_file intel_ai_ip/dla_layout_transform_config.svh SYSTEM_VERILOG_INCLUDE PATH ../intel_ai_ip/verilog/dla_layout_transform_config.svh +add_fileset_file intel_ai_ip/dla_output_streamer_config.svh SYSTEM_VERILOG_INCLUDE PATH ../intel_ai_ip/verilog/dla_output_streamer_config.svh +add_fileset_file intel_ai_ip/dla_dma_config_filter_reader.svh SYSTEM_VERILOG_INCLUDE PATH ../intel_ai_ip/verilog/dla_dma_config_filter_reader.svh +add_fileset_file intel_ai_ip/dla_dma_config_feature_reader.svh SYSTEM_VERILOG_INCLUDE PATH ../intel_ai_ip/verilog/dla_dma_config_feature_reader.svh +add_fileset_file intel_ai_ip/dla_dma_config_feature_writer.svh SYSTEM_VERILOG_INCLUDE PATH ../intel_ai_ip/verilog/dla_dma_config_feature_writer.svh +add_fileset_file intel_ai_ip/dla_dma_config_reader.svh SYSTEM_VERILOG_INCLUDE PATH ../intel_ai_ip/verilog/dla_dma_config_reader.svh +add_fileset_file intel_ai_ip/dla_dma_constants.svh SYSTEM_VERILOG_INCLUDE PATH ../intel_ai_ip/verilog/dla_dma_constants.svh +add_fileset_file intel_ai_ip/dla_demux_config.svh SYSTEM_VERILOG_INCLUDE PATH ../intel_ai_ip/verilog/dla_demux_config.svh +add_fileset_file intel_ai_ip/dla_filter_bias_scale_scratchpad_arch_info.svh SYSTEM_VERILOG_INCLUDE PATH ../intel_ai_ip/verilog/dla_filter_bias_scale_scratchpad_arch_info.svh +add_fileset_file intel_ai_ip/dla_input_feeder_constants.svh SYSTEM_VERILOG_INCLUDE PATH ../intel_ai_ip/verilog/dla_input_feeder_constants.svh +add_fileset_file intel_ai_ip/dla_input_feeder_out_config.svh SYSTEM_VERILOG_INCLUDE PATH ../intel_ai_ip/verilog/dla_input_feeder_out_config.svh +add_fileset_file intel_ai_ip/dla_input_feeder_writer_mux_config.svh SYSTEM_VERILOG_INCLUDE PATH ../intel_ai_ip/verilog/dla_input_feeder_writer_mux_config.svh +add_fileset_file intel_ai_ip/dla_input_feeder_sb_xbar_config.svh SYSTEM_VERILOG_INCLUDE PATH ../intel_ai_ip/verilog/dla_input_feeder_sb_xbar_config.svh +add_fileset_file intel_ai_ip/dla_input_feeder_reader_config_vc.svh SYSTEM_VERILOG_INCLUDE PATH ../intel_ai_ip/verilog/dla_input_feeder_reader_config_vc.svh +add_fileset_file intel_ai_ip/dla_input_feeder_in_config.svh SYSTEM_VERILOG_INCLUDE PATH ../intel_ai_ip/verilog/dla_input_feeder_in_config.svh +add_fileset_file intel_ai_ip/dla_input_feeder_writer_config_vc.svh SYSTEM_VERILOG_INCLUDE PATH ../intel_ai_ip/verilog/dla_input_feeder_writer_config_vc.svh +add_fileset_file intel_ai_ip/dla_pe_array_constants.svh SYSTEM_VERILOG_INCLUDE PATH ../intel_ai_ip/verilog/dla_pe_array_constants.svh +add_fileset_file intel_ai_ip/dla_pe_array_enums.svh SYSTEM_VERILOG_INCLUDE PATH ../intel_ai_ip/verilog/dla_pe_array_enums.svh +add_fileset_file intel_ai_ip/dla_pe_array_arch_t.svh SYSTEM_VERILOG_INCLUDE PATH ../intel_ai_ip/verilog/dla_pe_array_arch_t.svh +add_fileset_file intel_ai_ip/dla_top_derived_params.svh SYSTEM_VERILOG_INCLUDE PATH ../intel_ai_ip/verilog/dla_top_derived_params.svh +add_fileset_file intel_ai_ip/dla_clock_cross_sync.sdc SDC PATH ../intel_ai_ip/verilog/dla_clock_cross_sync.sdc diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/de5a_area_A10/dla_dma_csr_discovery_rom.mif b/python/openvino/demo/ip/intel_ai_ip/verilog/de5a_area_A10/dla_dma_csr_discovery_rom.mif new file mode 100644 index 0000000..ba0bbd3 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/de5a_area_A10/dla_dma_csr_discovery_rom.mif @@ -0,0 +1,519 @@ +DEPTH = 512; +WIDTH = 32; +ADDRESS_RADIX = HEX; +DATA_RADIX = HEX; +CONTENT +BEGIN +0: 416a23d2; +1: 2e37a760; +2: 0; +3: 0; +4: 34323032; +5: 352f332e; +6: 32; +7: 0; +8: 0; +9: 0; +a: 0; +b: 0; +c: 61356564; +d: 6572615f; +e: 61; +f: 0; +10: 0; +11: 0; +12: 0; +13: 0; +14: 0; +15: 0; +16: 0; +17: 0; +18: 0; +19: 0; +1a: 0; +1b: 0; +1c: 0; +1d: 0; +1e: 0; +1f: 0; +20: 0; +21: 0; +22: 0; +23: 0; +24: 0; +25: 0; +26: 0; +27: 0; +28: 0; +29: 0; +2a: 0; +2b: 0; +2c: 0; +2d: 0; +2e: 0; +2f: 0; +30: 0; +31: 0; +32: 0; +33: 0; +34: 0; +35: 0; +36: 0; +37: 0; +38: 0; +39: 0; +3a: 0; +3b: 0; +3c: 0; +3d: 0; +3e: 0; +3f: 0; +40: 0; +41: 0; +42: 0; +43: 0; +44: 0; +45: 0; +46: 0; +47: 0; +48: 0; +49: 0; +4a: 0; +4b: 0; +4c: 0; +4d: 0; +4e: 0; +4f: 0; +50: 0; +51: 0; +52: 0; +53: 0; +54: 0; +55: 0; +56: 0; +57: 0; +58: 0; +59: 0; +5a: 0; +5b: 0; +5c: 0; +5d: 0; +5e: 0; +5f: 0; +60: 0; +61: 0; +62: 0; +63: 0; +64: 0; +65: 0; +66: 0; +67: 0; +68: 0; +69: 0; +6a: 0; +6b: 0; +6c: 0; +6d: 0; +6e: 0; +6f: 0; +70: 0; +71: 0; +72: 0; +73: 0; +74: 0; +75: 0; +76: 0; +77: 0; +78: 0; +79: 0; +7a: 0; +7b: 0; +7c: 0; +7d: 0; +7e: 0; +7f: 0; +80: 0; +81: 0; +82: 0; +83: 0; +84: 0; +85: 0; +86: 0; +87: 0; +88: 0; +89: 0; +8a: 0; +8b: 0; +8c: 0; +8d: 0; +8e: 0; +8f: 0; +90: 0; +91: 0; +92: 0; +93: 0; +94: 0; +95: 0; +96: 0; +97: 0; +98: 0; +99: 0; +9a: 0; +9b: 0; +9c: 0; +9d: 0; +9e: 0; +9f: 0; +a0: 0; +a1: 0; +a2: 0; +a3: 0; +a4: 0; +a5: 0; +a6: 0; +a7: 0; +a8: 0; +a9: 0; +aa: 0; +ab: 0; +ac: 0; +ad: 0; +ae: 0; +af: 0; +b0: 0; +b1: 0; +b2: 0; +b3: 0; +b4: 0; +b5: 0; +b6: 0; +b7: 0; +b8: 0; +b9: 0; +ba: 0; +bb: 0; +bc: 0; +bd: 0; +be: 0; +bf: 0; +c0: 0; +c1: 0; +c2: 0; +c3: 0; +c4: 0; +c5: 0; +c6: 0; +c7: 0; +c8: 0; +c9: 0; +ca: 0; +cb: 0; +cc: 0; +cd: 0; +ce: 0; +cf: 0; +d0: 0; +d1: 0; +d2: 0; +d3: 0; +d4: 0; +d5: 0; +d6: 0; +d7: 0; +d8: 0; +d9: 0; +da: 0; +db: 0; +dc: 0; +dd: 0; +de: 0; +df: 0; +e0: 0; +e1: 0; +e2: 0; +e3: 0; +e4: 0; +e5: 0; +e6: 0; +e7: 0; +e8: 0; +e9: 0; +ea: 0; +eb: 0; +ec: 0; +ed: 0; +ee: 0; +ef: 0; +f0: 0; +f1: 0; +f2: 0; +f3: 0; +f4: 0; +f5: 0; +f6: 0; +f7: 0; +f8: 0; +f9: 0; +fa: 0; +fb: 0; +fc: 0; +fd: 0; +fe: 0; +ff: 0; +100: 0; +101: 0; +102: 0; +103: 0; +104: 0; +105: 0; +106: 0; +107: 0; +108: 0; +109: 0; +10a: 0; +10b: 0; +10c: 0; +10d: 0; +10e: 0; +10f: 0; +110: 0; +111: 0; +112: 0; +113: 0; +114: 0; +115: 0; +116: 0; +117: 0; +118: 0; +119: 0; +11a: 0; +11b: 0; +11c: 0; +11d: 0; +11e: 0; +11f: 0; +120: 0; +121: 0; +122: 0; +123: 0; +124: 0; +125: 0; +126: 0; +127: 0; +128: 0; +129: 0; +12a: 0; +12b: 0; +12c: 0; +12d: 0; +12e: 0; +12f: 0; +130: 0; +131: 0; +132: 0; +133: 0; +134: 0; +135: 0; +136: 0; +137: 0; +138: 0; +139: 0; +13a: 0; +13b: 0; +13c: 0; +13d: 0; +13e: 0; +13f: 0; +140: 0; +141: 0; +142: 0; +143: 0; +144: 0; +145: 0; +146: 0; +147: 0; +148: 0; +149: 0; +14a: 0; +14b: 0; +14c: 0; +14d: 0; +14e: 0; +14f: 0; +150: 0; +151: 0; +152: 0; +153: 0; +154: 0; +155: 0; +156: 0; +157: 0; +158: 0; +159: 0; +15a: 0; +15b: 0; +15c: 0; +15d: 0; +15e: 0; +15f: 0; +160: 0; +161: 0; +162: 0; +163: 0; +164: 0; +165: 0; +166: 0; +167: 0; +168: 0; +169: 0; +16a: 0; +16b: 0; +16c: 0; +16d: 0; +16e: 0; +16f: 0; +170: 0; +171: 0; +172: 0; +173: 0; +174: 0; +175: 0; +176: 0; +177: 0; +178: 0; +179: 0; +17a: 0; +17b: 0; +17c: 0; +17d: 0; +17e: 0; +17f: 0; +180: 0; +181: 0; +182: 0; +183: 0; +184: 0; +185: 0; +186: 0; +187: 0; +188: 0; +189: 0; +18a: 0; +18b: 0; +18c: 0; +18d: 0; +18e: 0; +18f: 0; +190: 0; +191: 0; +192: 0; +193: 0; +194: 0; +195: 0; +196: 0; +197: 0; +198: 0; +199: 0; +19a: 0; +19b: 0; +19c: 0; +19d: 0; +19e: 0; +19f: 0; +1a0: 0; +1a1: 0; +1a2: 0; +1a3: 0; +1a4: 0; +1a5: 0; +1a6: 0; +1a7: 0; +1a8: 0; +1a9: 0; +1aa: 0; +1ab: 0; +1ac: 0; +1ad: 0; +1ae: 0; +1af: 0; +1b0: 0; +1b1: 0; +1b2: 0; +1b3: 0; +1b4: 0; +1b5: 0; +1b6: 0; +1b7: 0; +1b8: 0; +1b9: 0; +1ba: 0; +1bb: 0; +1bc: 0; +1bd: 0; +1be: 0; +1bf: 0; +1c0: 0; +1c1: 0; +1c2: 0; +1c3: 0; +1c4: 0; +1c5: 0; +1c6: 0; +1c7: 0; +1c8: 0; +1c9: 0; +1ca: 0; +1cb: 0; +1cc: 0; +1cd: 0; +1ce: 0; +1cf: 0; +1d0: 0; +1d1: 0; +1d2: 0; +1d3: 0; +1d4: 0; +1d5: 0; +1d6: 0; +1d7: 0; +1d8: 0; +1d9: 0; +1da: 0; +1db: 0; +1dc: 0; +1dd: 0; +1de: 0; +1df: 0; +1e0: 0; +1e1: 0; +1e2: 0; +1e3: 0; +1e4: 0; +1e5: 0; +1e6: 0; +1e7: 0; +1e8: 0; +1e9: 0; +1ea: 0; +1eb: 0; +1ec: 0; +1ed: 0; +1ee: 0; +1ef: 0; +1f0: 0; +1f1: 0; +1f2: 0; +1f3: 0; +1f4: 0; +1f5: 0; +1f6: 0; +1f7: 0; +1f8: 0; +1f9: 0; +1fa: 0; +1fb: 0; +1fc: 0; +1fd: 0; +1fe: 0; +1ff: 0; +END; diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/de5a_area_A10/dla_dma_param.svh b/python/openvino/demo/ip/intel_ai_ip/verilog/de5a_area_A10/dla_dma_param.svh new file mode 100644 index 0000000..166ae44 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/de5a_area_A10/dla_dma_param.svh @@ -0,0 +1,153 @@ +`ifndef DLA_DMA_PARAM_SVH +`define DLA_DMA_PARAM_SVH + localparam string DEVICE = "A10"; + localparam int C_CSR_AXI_ADDR_WIDTH = 11; + localparam int C_CSR_AXI_DATA_WIDTH = 32; + localparam int C_DDR_AXI_ADDR_WIDTH = 32; + localparam int C_DDR_AXI_BURST_WIDTH = 4; + localparam int C_DDR_AXI_DATA_WIDTH = 512; + localparam int C_DDR_AXI_THREAD_ID_WIDTH = 2; + localparam int CONFIG_DATA_BYTES = 4; + localparam int CONFIG_READER_DATA_BYTES = 8; + localparam int FILTER_READER_DATA_BYTES = 64; + localparam int FEATURE_READER_DATA_BYTES = 8; + localparam int FEATURE_WRITER_DATA_BYTES = 8; + localparam int CONFIG_NUM_MODULES = 11; + localparam int MODULE_ID_WIDTH = 8; + localparam int CONFIG_CHANNEL_WIDTH = 32; + localparam int CONFIG_CACHE_DEPTH = 256; + localparam int CONFIG_NETWORK_QUANTIZE_DEPTHS [255:0] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,512,64,32}; + localparam bit CONFIG_NETWORK_CROSS_CLOCK [255:1] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1}; + localparam bit CONFIG_NETWORK_CROSS_CLOCK_AXI [255:1] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + localparam int CONFIG_NETWORK_FIFO_MIN_DEPTH [255:1] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,256,256,256,256,256,256,256,256,256,256,256}; + localparam int CONFIG_NETWORK_NUM_PIPELINE_STAGES [255:1] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1}; + localparam int CONFIG_ID_PADDING = 0; + localparam int CONFIG_ID_FILTER_READER = 1; + localparam int CONFIG_ID_INPUT_FEEDER_MUX = 2; + localparam int CONFIG_ID_INPUT_FEEDER_WRITER = 3; + localparam int CONFIG_ID_INPUT_FEEDER_IN = 4; + localparam int CONFIG_ID_INPUT_FEEDER_READER = 5; + localparam int CONFIG_ID_INPUT_FEEDER_OUT = 6; + localparam int CONFIG_ID_FEATURE_WRITER = 7; + localparam int CONFIG_ID_FEATURE_READER = 8; + localparam int CONFIG_ID_XBAR = 9; + localparam int CONFIG_ID_ACTIVATION = 10; + localparam int CONFIG_ID_POOL = 11; + localparam bit ENABLE_DEBUG = 0; + localparam bit ENABLE_INPUT_STREAMING = 0; + localparam int AXI_ISTREAM_DATA_WIDTH = 128; + localparam int AXI_ISTREAM_FIFO_DEPTH = 32; + localparam bit ENABLE_ON_CHIP_PARAMETERS = 0; + localparam bit ENABLE_MIXED_PRECISION = 0; + localparam int KVEC_OVER_CVEC = 4; + localparam int SB_ADDR_WIDTH = 13; + localparam int STREAM_BUFFER_DEPTH = 5120; + localparam bit[927:0] PE_ARRAY_PARAM_BITS = 928'h000000010000000800000001000000020000000700000007000000050000000f000000050000000f00000004000000040000000200000001000000010000000000000001000000000000000400000001000000040000001000000005000000040000000000000000000000000000000000000000; + localparam int PE_ARRAY_EXIT_FIFO_DEPTH = 1024; + localparam int SCRATCHPAD_FILTER_DEPTH = 512; + localparam int SCRATCHPAD_BIAS_SCALE_DEPTH = 512; + localparam int SCRATCHPAD_NUM_FILTER_PORTS = 8; + localparam int SCRATCHPAD_NUM_BIAS_SCALE_PORTS = 16; + localparam int SCRATCHPAD_MEGABLOCK_WIDTH = 34; + localparam int SCRATCHPAD_NUM_FILTER_BLOCKS_PER_MEGABLOCK = 1; + localparam int SCRATCHPAD_NUM_BIAS_SCALE_BLOCKS_PER_MEGABLOCK = 2; + localparam int MAX_XBAR_INPUT_INTERFACES = 4; + localparam int MAX_XBAR_OUTPUT_INTERFACES = 4; + localparam int AUX_XBAR_INPUT_COUNTER_WIDTH = 24; + localparam int AUX_XBAR_OUTPUT_COUNTER_WIDTH = 24; + localparam bit ENABLE_ACTIVATION = 1; + localparam bit ENABLE_DEPTHWISE = 0; + localparam int XBAR_ID_DEPTHWISE = -1; + localparam int CONFIG_ID_DEPTHWISE = -1; + localparam bit ENABLE_DEPTHWISE_FILTER_BIAS = 0; + localparam int XBAR_ID_DEPTHWISE_FILTER_BIAS = -1; + localparam int CONFIG_ID_DEPTHWISE_FILTER_BIAS = -1; + localparam bit ENABLE_POOL = 1; + localparam bit ENABLE_SOFTMAX = 0; + localparam int XBAR_ID_SOFTMAX = -1; + localparam int CONFIG_ID_SOFTMAX = -1; + localparam int CONFIG_ID_OUTPUT_STREAMER = -1; + localparam int CONFIG_ID_OUTPUT_STREAMER_FLUSH = -1; + localparam int CONFIG_ID_WRITER_STREAMER_SEL = -1; + localparam int CONFIG_ID_LAYOUT_TRANSFORM = -1; + localparam int XBAR_ID_POOL = 2; + localparam int XBAR_ID_ACTIVATION = 1; + localparam int XBAR_ID_XBAR_OUT_PORT = 0; + localparam int XBAR_ID_PE_ARRAY = 0; + localparam int NUMBER_OF_KERNELS = 2; + localparam int AUX_MODULE_SELECT_ID_WIDTH = 4; + localparam bit XBAR_KERNEL_BYPASS_FEATURE_ENABLE = 0; + localparam bit AUX_KERNEL_BYPASSABLE [16:0] = '{0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,default : 0}; + localparam int AUX_XBAR_MUX_OUTPUT_PIPELINE_STAGES [16:0] = '{0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,default : 0}; + localparam int AUX_XBAR_NONSTALLABLE_OUTPUT_PIPELINE_STAGES [16:0] = '{0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,default : 0}; + localparam int AUX_XBAR_OUTPUT_BP_FIFO_ENABLE [16:0] = '{0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,default : 0}; + localparam int AUX_XBAR_OUTPUT_BP_FIFO_DEPTH [16:0] = '{0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,default : 0}; + localparam int AUX_XBAR_OUTPUT_WIDTH = 64; + localparam int AUX_OUTPUT_DATA_WIDTHS [16:0] = '{0:64,1:64,2:64,3:64,4:64,5:64,6:64,7:64,8:64,9:64,10:64,11:64,12:64,13:64,14:64,15:64,16:64,default : 0}; + localparam int AUX_INPUT_DATA_WIDTHS [16:0] = '{0:64,1:64,2:64,3:64,4:64,5:64,6:64,7:64,8:64,9:64,10:64,11:64,12:64,13:64,14:64,15:64,16:64,default : 0}; + localparam int AUX_MAX_DATABUS_WIDTH = 64; + localparam int XBAR_KERNEL_CV_FEATURE_ENABLE = 1; + localparam int AUX_KERNEL_CONNECTIVITY_VECTOR [16:0] [16:0] = '{0: '{0:1,1:1,2:1,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0},1: '{0:1,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0},2: '{0:1,1:1,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0},3: '{0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0},4: '{0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0},5: '{0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0},6: '{0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0},7: '{0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0},8: '{0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0},9: '{0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0},10: '{0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0},11: '{0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0},12: '{0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0},13: '{0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0},14: '{0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0},15: '{0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0},16: '{0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0}}; + localparam int ACTIVATION_K_VECTOR = 4; + localparam bit ACTIVATION_ENABLE_DSP_MULT = 0; + localparam bit ACTIVATION_ENABLE_DSP_CONV = 0; + localparam int ACTIVATION_GROUP_DELAY = 0; + localparam int ACTIVATION_TYPE = 1; + localparam int ACTIVATION_PARAM_CACHE_DEPTH = 3580; + localparam int POOL_K_VECTOR = 1; + localparam int POOL_GROUP_DELAY = 0; + localparam int POOL_TYPE = 0; + localparam int POOL_CONFIG_ID_WIDTH = 1; + localparam int POOL_MAX_WINDOW_HEIGHT = 3; + localparam int POOL_MAX_WINDOW_WIDTH = 3; + localparam int POOL_MAX_STRIDE_VERTICAL = 4; + localparam int POOL_MAX_STRIDE_HORIZONTAL = 4; + localparam int POOL_PIPELINE_REG_NUM = 1; + localparam int DEPTHWISE_K_VECTOR = 0; + localparam int DEPTHWISE_GROUP_DELAY = 0; + localparam int DEPTHWISE_TYPE = 0; + localparam int DEPTHWISE_CONFIG_ID_WIDTH = 1; + localparam int DEPTHWISE_MAX_WINDOW_HEIGHT = 3; + localparam int DEPTHWISE_MAX_WINDOW_WIDTH = 3; + localparam int DEPTHWISE_MAX_STRIDE_VERTICAL = 4; + localparam int DEPTHWISE_MAX_STRIDE_HORIZONTAL = 4; + localparam int DEPTHWISE_PIPELINE_REG_NUM = 1; + localparam int DEPTHWISE_MAX_DILATION_VERTICAL = 1; + localparam int DEPTHWISE_MAX_DILATION_HORIZONTAL = 1; + localparam int DETHWISE_VECTOR_FEATURE_WIDTH = 16; + localparam int DETHWISE_VECTOR_FILTER_WIDTH = 16; + localparam int DETHWISE_VECTOR_BIAS_WIDTH = 32; + localparam int DETHWISE_VECTOR_DOT_SIZE = 10; + localparam int SOFTMAX_K_VECTOR = 1; + localparam int SOFTMAX_GROUP_DELAY = 1; + localparam int SOFTMAX_CONFIG_ID_WIDTH = 8; + localparam int SOFTMAX_MAX_NUM_CHANNELS = 2048; + localparam int AUX_MAX_TILE_HEIGHT = 128; + localparam int AUX_MAX_TILE_WIDTH = 128; + localparam int AUX_MAX_TILE_CHANNELS = 14320; + localparam int LAYOUT_TRANSFORM_ENABLE = 0; + localparam int LAYOUT_TRANSFORM_MAX_FEATURE_CHANNELS = 3; + localparam int LAYOUT_TRANSFORM_MAX_FEATURE_HEIGHT = 28; + localparam int LAYOUT_TRANSFORM_MAX_FEATURE_WIDTH = 28; + localparam int LAYOUT_TRANSFORM_MAX_FEATURE_DEPTH = 1; + localparam int LAYOUT_TRANSFORM_MAX_STRIDE_WIDTH = 2; + localparam int LAYOUT_TRANSFORM_MAX_STRIDE_HEIGHT = 2; + localparam int LAYOUT_TRANSFORM_MAX_STRIDE_DEPTH = 1; + localparam int LAYOUT_TRANSFORM_MAX_PAD_FRONT = 1; + localparam int LAYOUT_TRANSFORM_MAX_PAD_LEFT = 2; + localparam int LAYOUT_TRANSFORM_MAX_PAD_TOP = 2; + localparam int LAYOUT_TRANSFORM_MAX_FILTER_HEIGHT = 2; + localparam int LAYOUT_TRANSFORM_MAX_FILTER_WIDTH = 2; + localparam int LAYOUT_TRANSFORM_MAX_FILTER_DEPTH = 1; + localparam int LAYOUT_TRANSFORM_MAX_DILATION_WIDTH = 2; + localparam int LAYOUT_TRANSFORM_MAX_DILATION_HEIGHT = 2; + localparam int LAYOUT_TRANSFORM_MAX_DILATION_DEPTH = 1; + localparam int LAYOUT_TRANSFORM_READER_BYTES = 16; + localparam int LAYOUT_TRANSFORM_DO_U8_CONV = 0; + localparam int ENABLE_OUTPUT_STREAMER = 0; + localparam int AXI_OSTREAM_DATA_WIDTH = 128; + localparam int AXI_OSTREAM_ID_WIDTH = 8; + localparam int AXI_OSTREAM_DEST_WIDTH = 8; + localparam int AXI_OSTREAM_FIFO_DEPTH = 512; + localparam int DISABLE_DDR = 0; +`endif // DLA_DMA_PARAM_SVH diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/de5a_area_A10/dla_interface_profiling_counters.mif b/python/openvino/demo/ip/intel_ai_ip/verilog/de5a_area_A10/dla_interface_profiling_counters.mif new file mode 100644 index 0000000..44af0e0 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/de5a_area_A10/dla_interface_profiling_counters.mif @@ -0,0 +1,2055 @@ +DEPTH = 2048; +WIDTH = 32; +ADDRESS_RADIX = UNS; +DATA_RADIX = UNS; +CONTENT +BEGIN +0 : 12582916; +1 : 1701987935; +2 : 6650469; +3 : 8388608; +4 : 541150532; +5 : 1126199156; +6 : 1768320623; +7 : 1635131495; +8 : 6580588; +9 : 8388612; +10 : 541150532; +11 : 1126199156; +12 : 1768320623; +13 : 1701978215; +14 : 7955553; +15 : 8388616; +16 : 541150532; +17 : 1126199156; +18 : 1768320623; +19 : 1920213095; +20 : 1634954849; +21 : 1869182051; +22 : 29550; +23 : 8388620; +24 : 541150532; +25 : 1126199156; +26 : 1768320623; +27 : 1920213095; +28 : 1634954849; +29 : 1869182051; +30 : 29550; +31 : 8388624; +32 : 541150532; +33 : 1126199156; +34 : 1768320623; +35 : 1633820775; +36 : 1919970147; +37 : 1970500453; +38 : 25970; +39 : 8388628; +40 : 541150532; +41 : 1126199156; +42 : 1768320623; +43 : 1633820775; +44 : 1919970147; +45 : 1970500453; +46 : 25970; +47 : 8388632; +48 : 541150532; +49 : 1126199156; +50 : 1768320623; +51 : 1953701991; +52 : 1635152481; +53 : 1852795252; +54 : 0; +55 : 8388636; +56 : 541150532; +57 : 1126199156; +58 : 1768320623; +59 : 1953701991; +60 : 1635152481; +61 : 1852795252; +62 : 0; +63 : 8388640; +64 : 541150532; +65 : 1176530804; +66 : 1702128745; +67 : 1635131506; +68 : 6580588; +69 : 8388644; +70 : 541150532; +71 : 1176530804; +72 : 1702128745; +73 : 1701978226; +74 : 7955553; +75 : 8388648; +76 : 541150532; +77 : 1176530804; +78 : 1702128745; +79 : 1920213106; +80 : 1634954849; +81 : 1869182051; +82 : 29550; +83 : 8388652; +84 : 541150532; +85 : 1176530804; +86 : 1702128745; +87 : 1920213106; +88 : 1634954849; +89 : 1869182051; +90 : 29550; +91 : 8388656; +92 : 541150532; +93 : 1176530804; +94 : 1702128745; +95 : 1633820786; +96 : 1919970147; +97 : 1970500453; +98 : 25970; +99 : 8388660; +100 : 541150532; +101 : 1176530804; +102 : 1702128745; +103 : 1633820786; +104 : 1919970147; +105 : 1970500453; +106 : 25970; +107 : 8388664; +108 : 541150532; +109 : 1176530804; +110 : 1702128745; +111 : 1953702002; +112 : 1635152481; +113 : 1852795252; +114 : 0; +115 : 8388668; +116 : 541150532; +117 : 1176530804; +118 : 1702128745; +119 : 1953702002; +120 : 1635152481; +121 : 1852795252; +122 : 0; +123 : 8388672; +124 : 541150532; +125 : 1226862452; +126 : 1953853550; +127 : 1701144096; +128 : 544367972; +129 : 1768710518; +130 : 100; +131 : 8388676; +132 : 541150532; +133 : 1226862452; +134 : 1953853550; +135 : 1701144096; +136 : 544367972; +137 : 1684104562; +138 : 121; +139 : 8388680; +140 : 541150532; +141 : 1226862452; +142 : 1953853550; +143 : 1701144096; +144 : 544367972; +145 : 1851880052; +146 : 1952670067; +147 : 1936617321; +148 : 0; +149 : 8388684; +150 : 541150532; +151 : 1226862452; +152 : 1953853550; +153 : 1701144096; +154 : 544367972; +155 : 1851880052; +156 : 1952670067; +157 : 1936617321; +158 : 0; +159 : 8388688; +160 : 541150532; +161 : 1226862452; +162 : 1953853550; +163 : 1701144096; +164 : 544367972; +165 : 1801675106; +166 : 1936028272; +167 : 1701999987; +168 : 0; +169 : 8388692; +170 : 541150532; +171 : 1226862452; +172 : 1953853550; +173 : 1701144096; +174 : 544367972; +175 : 1801675106; +176 : 1936028272; +177 : 1701999987; +178 : 0; +179 : 8388696; +180 : 541150532; +181 : 1226862452; +182 : 1953853550; +183 : 1701144096; +184 : 544367972; +185 : 1918989427; +186 : 1769234806; +187 : 28271; +188 : 8388700; +189 : 541150532; +190 : 1226862452; +191 : 1953853550; +192 : 1701144096; +193 : 544367972; +194 : 1918989427; +195 : 1769234806; +196 : 28271; +197 : 8388704; +198 : 1718513475; +199 : 1948280681; +200 : 1850286191; +201 : 544503152; +202 : 1684366694; +203 : 1763734117; +204 : 1635131502; +205 : 6580588; +206 : 8388708; +207 : 1718513475; +208 : 1948280681; +209 : 1850286191; +210 : 544503152; +211 : 1684366694; +212 : 1763734117; +213 : 1701978222; +214 : 7955553; +215 : 8388712; +216 : 1718513475; +217 : 1948280681; +218 : 1850286191; +219 : 544503152; +220 : 1684366694; +221 : 1763734117; +222 : 1920213102; +223 : 1634954849; +224 : 1869182051; +225 : 29550; +226 : 8388716; +227 : 1718513475; +228 : 1948280681; +229 : 1850286191; +230 : 544503152; +231 : 1684366694; +232 : 1763734117; +233 : 1920213102; +234 : 1634954849; +235 : 1869182051; +236 : 29550; +237 : 8388720; +238 : 1718513475; +239 : 1948280681; +240 : 1850286191; +241 : 544503152; +242 : 1684366694; +243 : 1763734117; +244 : 1633820782; +245 : 1919970147; +246 : 1970500453; +247 : 25970; +248 : 8388724; +249 : 1718513475; +250 : 1948280681; +251 : 1850286191; +252 : 544503152; +253 : 1684366694; +254 : 1763734117; +255 : 1633820782; +256 : 1919970147; +257 : 1970500453; +258 : 25970; +259 : 8388728; +260 : 1718513475; +261 : 1948280681; +262 : 1850286191; +263 : 544503152; +264 : 1684366694; +265 : 1763734117; +266 : 1953701998; +267 : 1635152481; +268 : 1852795252; +269 : 0; +270 : 8388732; +271 : 1718513475; +272 : 1948280681; +273 : 1850286191; +274 : 544503152; +275 : 1684366694; +276 : 1763734117; +277 : 1953701998; +278 : 1635152481; +279 : 1852795252; +280 : 0; +281 : 8388736; +282 : 1718513475; +283 : 1948280681; +284 : 1850286191; +285 : 544503152; +286 : 1684366694; +287 : 1864397413; +288 : 1981838453; +289 : 1684630625; +290 : 0; +291 : 8388740; +292 : 1718513475; +293 : 1948280681; +294 : 1850286191; +295 : 544503152; +296 : 1684366694; +297 : 1864397413; +298 : 1914729589; +299 : 2036621669; +300 : 0; +301 : 8388744; +302 : 1718513475; +303 : 1948280681; +304 : 1850286191; +305 : 544503152; +306 : 1684366694; +307 : 1864397413; +308 : 1948284021; +309 : 1936613746; +310 : 1769235297; +311 : 7564911; +312 : 8388748; +313 : 1718513475; +314 : 1948280681; +315 : 1850286191; +316 : 544503152; +317 : 1684366694; +318 : 1864397413; +319 : 1948284021; +320 : 1936613746; +321 : 1769235297; +322 : 7564911; +323 : 8388752; +324 : 1718513475; +325 : 1948280681; +326 : 1850286191; +327 : 544503152; +328 : 1684366694; +329 : 1864397413; +330 : 1646294133; +331 : 1886085985; +332 : 1936942450; +333 : 6648437; +334 : 8388756; +335 : 1718513475; +336 : 1948280681; +337 : 1850286191; +338 : 544503152; +339 : 1684366694; +340 : 1864397413; +341 : 1646294133; +342 : 1886085985; +343 : 1936942450; +344 : 6648437; +345 : 8388760; +346 : 1718513475; +347 : 1948280681; +348 : 1850286191; +349 : 544503152; +350 : 1684366694; +351 : 1864397413; +352 : 1931506805; +353 : 1987207540; +354 : 1869182049; +355 : 110; +356 : 8388764; +357 : 1718513475; +358 : 1948280681; +359 : 1850286191; +360 : 544503152; +361 : 1684366694; +362 : 1864397413; +363 : 1931506805; +364 : 1987207540; +365 : 1869182049; +366 : 110; +367 : 8388768; +368 : 1718513475; +369 : 1948280681; +370 : 1649942639; +371 : 1981837921; +372 : 1684630625; +373 : 0; +374 : 8388772; +375 : 1718513475; +376 : 1948280681; +377 : 1649942639; +378 : 1914729057; +379 : 2036621669; +380 : 0; +381 : 8388776; +382 : 1718513475; +383 : 1948280681; +384 : 1649942639; +385 : 1948283489; +386 : 1936613746; +387 : 1769235297; +388 : 7564911; +389 : 8388780; +390 : 1718513475; +391 : 1948280681; +392 : 1649942639; +393 : 1948283489; +394 : 1936613746; +395 : 1769235297; +396 : 7564911; +397 : 8388784; +398 : 1718513475; +399 : 1948280681; +400 : 1649942639; +401 : 1646293601; +402 : 1886085985; +403 : 1936942450; +404 : 6648437; +405 : 8388788; +406 : 1718513475; +407 : 1948280681; +408 : 1649942639; +409 : 1646293601; +410 : 1886085985; +411 : 1936942450; +412 : 6648437; +413 : 8388792; +414 : 1718513475; +415 : 1948280681; +416 : 1649942639; +417 : 1931506273; +418 : 1987207540; +419 : 1869182049; +420 : 110; +421 : 8388796; +422 : 1718513475; +423 : 1948280681; +424 : 1649942639; +425 : 1931506273; +426 : 1987207540; +427 : 1869182049; +428 : 110; +429 : 8388800; +430 : 1718513475; +431 : 1948280681; +432 : 1665212527; +433 : 1635150196; +434 : 1852795252; +435 : 1818326560; +436 : 25705; +437 : 8388804; +438 : 1718513475; +439 : 1948280681; +440 : 1665212527; +441 : 1635150196; +442 : 1852795252; +443 : 1634038304; +444 : 31076; +445 : 8388808; +446 : 1718513475; +447 : 1948280681; +448 : 1665212527; +449 : 1635150196; +450 : 1852795252; +451 : 1634890784; +452 : 1667330926; +453 : 1852795252; +454 : 115; +455 : 8388812; +456 : 1718513475; +457 : 1948280681; +458 : 1665212527; +459 : 1635150196; +460 : 1852795252; +461 : 1634890784; +462 : 1667330926; +463 : 1852795252; +464 : 115; +465 : 8388816; +466 : 1718513475; +467 : 1948280681; +468 : 1665212527; +469 : 1635150196; +470 : 1852795252; +471 : 1667326496; +472 : 1701998699; +473 : 1920299891; +474 : 101; +475 : 8388820; +476 : 1718513475; +477 : 1948280681; +478 : 1665212527; +479 : 1635150196; +480 : 1852795252; +481 : 1667326496; +482 : 1701998699; +483 : 1920299891; +484 : 101; +485 : 8388824; +486 : 1718513475; +487 : 1948280681; +488 : 1665212527; +489 : 1635150196; +490 : 1852795252; +491 : 1635021600; +492 : 1952544370; +493 : 7237481; +494 : 8388828; +495 : 1718513475; +496 : 1948280681; +497 : 1665212527; +498 : 1635150196; +499 : 1852795252; +500 : 1635021600; +501 : 1952544370; +502 : 7237481; +503 : 8388832; +504 : 1718513475; +505 : 1948280681; +506 : 1867522159; +507 : 1981836399; +508 : 1684630625; +509 : 0; +510 : 8388836; +511 : 1718513475; +512 : 1948280681; +513 : 1867522159; +514 : 1914727535; +515 : 2036621669; +516 : 0; +517 : 8388840; +518 : 1718513475; +519 : 1948280681; +520 : 1867522159; +521 : 1948281967; +522 : 1936613746; +523 : 1769235297; +524 : 7564911; +525 : 8388844; +526 : 1718513475; +527 : 1948280681; +528 : 1867522159; +529 : 1948281967; +530 : 1936613746; +531 : 1769235297; +532 : 7564911; +533 : 8388848; +534 : 1718513475; +535 : 1948280681; +536 : 1867522159; +537 : 1646292079; +538 : 1886085985; +539 : 1936942450; +540 : 6648437; +541 : 8388852; +542 : 1718513475; +543 : 1948280681; +544 : 1867522159; +545 : 1646292079; +546 : 1886085985; +547 : 1936942450; +548 : 6648437; +549 : 8388856; +550 : 1718513475; +551 : 1948280681; +552 : 1867522159; +553 : 1931504751; +554 : 1987207540; +555 : 1869182049; +556 : 110; +557 : 8388860; +558 : 1718513475; +559 : 1948280681; +560 : 1867522159; +561 : 1931504751; +562 : 1987207540; +563 : 1869182049; +564 : 110; +565 : 8388864; +566 : 1718513475; +567 : 1948280681; +568 : 1867718767; +569 : 1634563174; +570 : 1635131512; +571 : 6580588; +572 : 8388868; +573 : 1718513475; +574 : 1948280681; +575 : 1867718767; +576 : 1634563174; +577 : 1701978232; +578 : 7955553; +579 : 8388872; +580 : 1718513475; +581 : 1948280681; +582 : 1867718767; +583 : 1634563174; +584 : 1920213112; +585 : 1634954849; +586 : 1869182051; +587 : 29550; +588 : 8388876; +589 : 1718513475; +590 : 1948280681; +591 : 1867718767; +592 : 1634563174; +593 : 1920213112; +594 : 1634954849; +595 : 1869182051; +596 : 29550; +597 : 8388880; +598 : 1718513475; +599 : 1948280681; +600 : 1867718767; +601 : 1634563174; +602 : 1633820792; +603 : 1919970147; +604 : 1970500453; +605 : 25970; +606 : 8388884; +607 : 1718513475; +608 : 1948280681; +609 : 1867718767; +610 : 1634563174; +611 : 1633820792; +612 : 1919970147; +613 : 1970500453; +614 : 25970; +615 : 8388888; +616 : 1718513475; +617 : 1948280681; +618 : 1867718767; +619 : 1634563174; +620 : 1953702008; +621 : 1635152481; +622 : 1852795252; +623 : 0; +624 : 8388892; +625 : 1718513475; +626 : 1948280681; +627 : 1867718767; +628 : 1634563174; +629 : 1953702008; +630 : 1635152481; +631 : 1852795252; +632 : 0; +633 : 8388896; +634 : 1970302537; +635 : 1701191796; +636 : 1919247461; +637 : 544175136; +638 : 1970365779; +639 : 1701015141; +640 : 1635131506; +641 : 6580588; +642 : 8388900; +643 : 1970302537; +644 : 1701191796; +645 : 1919247461; +646 : 544175136; +647 : 1970365779; +648 : 1701015141; +649 : 1701978226; +650 : 7955553; +651 : 8388904; +652 : 1970302537; +653 : 1701191796; +654 : 1919247461; +655 : 544175136; +656 : 1970365779; +657 : 1701015141; +658 : 1920213106; +659 : 1634954849; +660 : 1869182051; +661 : 29550; +662 : 8388908; +663 : 1970302537; +664 : 1701191796; +665 : 1919247461; +666 : 544175136; +667 : 1970365779; +668 : 1701015141; +669 : 1920213106; +670 : 1634954849; +671 : 1869182051; +672 : 29550; +673 : 8388912; +674 : 1970302537; +675 : 1701191796; +676 : 1919247461; +677 : 544175136; +678 : 1970365779; +679 : 1701015141; +680 : 1633820786; +681 : 1919970147; +682 : 1970500453; +683 : 25970; +684 : 8388916; +685 : 1970302537; +686 : 1701191796; +687 : 1919247461; +688 : 544175136; +689 : 1970365779; +690 : 1701015141; +691 : 1633820786; +692 : 1919970147; +693 : 1970500453; +694 : 25970; +695 : 8388920; +696 : 1970302537; +697 : 1701191796; +698 : 1919247461; +699 : 544175136; +700 : 1970365779; +701 : 1701015141; +702 : 1953702002; +703 : 1635152481; +704 : 1852795252; +705 : 0; +706 : 8388924; +707 : 1970302537; +708 : 1701191796; +709 : 1919247461; +710 : 544175136; +711 : 1970365779; +712 : 1701015141; +713 : 1953702002; +714 : 1635152481; +715 : 1852795252; +716 : 0; +717 : 8388928; +718 : 1629504848; +719 : 2036429426; +720 : 544175136; +721 : 1918984792; +722 : 1818326560; +723 : 25705; +724 : 8388932; +725 : 1629504848; +726 : 2036429426; +727 : 544175136; +728 : 1918984792; +729 : 1634038304; +730 : 31076; +731 : 8388936; +732 : 1629504848; +733 : 2036429426; +734 : 544175136; +735 : 1918984792; +736 : 1634890784; +737 : 1667330926; +738 : 1852795252; +739 : 115; +740 : 8388940; +741 : 1629504848; +742 : 2036429426; +743 : 544175136; +744 : 1918984792; +745 : 1634890784; +746 : 1667330926; +747 : 1852795252; +748 : 115; +749 : 8388944; +750 : 1629504848; +751 : 2036429426; +752 : 544175136; +753 : 1918984792; +754 : 1667326496; +755 : 1701998699; +756 : 1920299891; +757 : 101; +758 : 8388948; +759 : 1629504848; +760 : 2036429426; +761 : 544175136; +762 : 1918984792; +763 : 1667326496; +764 : 1701998699; +765 : 1920299891; +766 : 101; +767 : 8388952; +768 : 1629504848; +769 : 2036429426; +770 : 544175136; +771 : 1918984792; +772 : 1635021600; +773 : 1952544370; +774 : 7237481; +775 : 8388956; +776 : 1629504848; +777 : 2036429426; +778 : 544175136; +779 : 1918984792; +780 : 1635021600; +781 : 1952544370; +782 : 7237481; +783 : 8388960; +784 : 1918984792; +785 : 544175136; +786 : 1769235265; +787 : 1769234806; +788 : 1981836911; +789 : 1684630625; +790 : 0; +791 : 8388964; +792 : 1918984792; +793 : 544175136; +794 : 1769235265; +795 : 1769234806; +796 : 1914728047; +797 : 2036621669; +798 : 0; +799 : 8388968; +800 : 1918984792; +801 : 544175136; +802 : 1769235265; +803 : 1769234806; +804 : 1948282479; +805 : 1936613746; +806 : 1769235297; +807 : 7564911; +808 : 8388972; +809 : 1918984792; +810 : 544175136; +811 : 1769235265; +812 : 1769234806; +813 : 1948282479; +814 : 1936613746; +815 : 1769235297; +816 : 7564911; +817 : 8388976; +818 : 1918984792; +819 : 544175136; +820 : 1769235265; +821 : 1769234806; +822 : 1646292591; +823 : 1886085985; +824 : 1936942450; +825 : 6648437; +826 : 8388980; +827 : 1918984792; +828 : 544175136; +829 : 1769235265; +830 : 1769234806; +831 : 1646292591; +832 : 1886085985; +833 : 1936942450; +834 : 6648437; +835 : 8388984; +836 : 1918984792; +837 : 544175136; +838 : 1769235265; +839 : 1769234806; +840 : 1931505263; +841 : 1987207540; +842 : 1869182049; +843 : 110; +844 : 8388988; +845 : 1918984792; +846 : 544175136; +847 : 1769235265; +848 : 1769234806; +849 : 1931505263; +850 : 1987207540; +851 : 1869182049; +852 : 110; +853 : 8388992; +854 : 1769235265; +855 : 1769234806; +856 : 1948282479; +857 : 1649942639; +858 : 1981837921; +859 : 1684630625; +860 : 0; +861 : 8388996; +862 : 1769235265; +863 : 1769234806; +864 : 1948282479; +865 : 1649942639; +866 : 1914729057; +867 : 2036621669; +868 : 0; +869 : 8389000; +870 : 1769235265; +871 : 1769234806; +872 : 1948282479; +873 : 1649942639; +874 : 1948283489; +875 : 1936613746; +876 : 1769235297; +877 : 7564911; +878 : 8389004; +879 : 1769235265; +880 : 1769234806; +881 : 1948282479; +882 : 1649942639; +883 : 1948283489; +884 : 1936613746; +885 : 1769235297; +886 : 7564911; +887 : 8389008; +888 : 1769235265; +889 : 1769234806; +890 : 1948282479; +891 : 1649942639; +892 : 1646293601; +893 : 1886085985; +894 : 1936942450; +895 : 6648437; +896 : 8389012; +897 : 1769235265; +898 : 1769234806; +899 : 1948282479; +900 : 1649942639; +901 : 1646293601; +902 : 1886085985; +903 : 1936942450; +904 : 6648437; +905 : 8389016; +906 : 1769235265; +907 : 1769234806; +908 : 1948282479; +909 : 1649942639; +910 : 1931506273; +911 : 1987207540; +912 : 1869182049; +913 : 110; +914 : 8389020; +915 : 1769235265; +916 : 1769234806; +917 : 1948282479; +918 : 1649942639; +919 : 1931506273; +920 : 1987207540; +921 : 1869182049; +922 : 110; +923 : 8389024; +924 : 1918984792; +925 : 544175136; +926 : 1819242320; +927 : 1818326560; +928 : 25705; +929 : 8389028; +930 : 1918984792; +931 : 544175136; +932 : 1819242320; +933 : 1634038304; +934 : 31076; +935 : 8389032; +936 : 1918984792; +937 : 544175136; +938 : 1819242320; +939 : 1634890784; +940 : 1667330926; +941 : 1852795252; +942 : 115; +943 : 8389036; +944 : 1918984792; +945 : 544175136; +946 : 1819242320; +947 : 1634890784; +948 : 1667330926; +949 : 1852795252; +950 : 115; +951 : 8389040; +952 : 1918984792; +953 : 544175136; +954 : 1819242320; +955 : 1667326496; +956 : 1701998699; +957 : 1920299891; +958 : 101; +959 : 8389044; +960 : 1918984792; +961 : 544175136; +962 : 1819242320; +963 : 1667326496; +964 : 1701998699; +965 : 1920299891; +966 : 101; +967 : 8389048; +968 : 1918984792; +969 : 544175136; +970 : 1819242320; +971 : 1635021600; +972 : 1952544370; +973 : 7237481; +974 : 8389052; +975 : 1918984792; +976 : 544175136; +977 : 1819242320; +978 : 1635021600; +979 : 1952544370; +980 : 7237481; +981 : 8389056; +982 : 1819242320; +983 : 544175136; +984 : 1918984792; +985 : 1818326560; +986 : 25705; +987 : 8389060; +988 : 1819242320; +989 : 544175136; +990 : 1918984792; +991 : 1634038304; +992 : 31076; +993 : 8389064; +994 : 1819242320; +995 : 544175136; +996 : 1918984792; +997 : 1634890784; +998 : 1667330926; +999 : 1852795252; +1000 : 115; +1001 : 8389068; +1002 : 1819242320; +1003 : 544175136; +1004 : 1918984792; +1005 : 1634890784; +1006 : 1667330926; +1007 : 1852795252; +1008 : 115; +1009 : 8389072; +1010 : 1819242320; +1011 : 544175136; +1012 : 1918984792; +1013 : 1667326496; +1014 : 1701998699; +1015 : 1920299891; +1016 : 101; +1017 : 8389076; +1018 : 1819242320; +1019 : 544175136; +1020 : 1918984792; +1021 : 1667326496; +1022 : 1701998699; +1023 : 1920299891; +1024 : 101; +1025 : 8389080; +1026 : 1819242320; +1027 : 544175136; +1028 : 1918984792; +1029 : 1635021600; +1030 : 1952544370; +1031 : 7237481; +1032 : 8389084; +1033 : 1819242320; +1034 : 544175136; +1035 : 1918984792; +1036 : 1635021600; +1037 : 1952544370; +1038 : 7237481; +1039 : 8389088; +1040 : 1918984792; +1041 : 544175136; +1042 : 1952870227; +1043 : 544760173; +1044 : 1768710518; +1045 : 100; +1046 : 8389092; +1047 : 1918984792; +1048 : 544175136; +1049 : 1952870227; +1050 : 544760173; +1051 : 1684104562; +1052 : 121; +1053 : 8389096; +1054 : 1918984792; +1055 : 544175136; +1056 : 1952870227; +1057 : 544760173; +1058 : 1851880052; +1059 : 1952670067; +1060 : 1936617321; +1061 : 0; +1062 : 8389100; +1063 : 1918984792; +1064 : 544175136; +1065 : 1952870227; +1066 : 544760173; +1067 : 1851880052; +1068 : 1952670067; +1069 : 1936617321; +1070 : 0; +1071 : 8389104; +1072 : 1918984792; +1073 : 544175136; +1074 : 1952870227; +1075 : 544760173; +1076 : 1801675106; +1077 : 1936028272; +1078 : 1701999987; +1079 : 0; +1080 : 8389108; +1081 : 1918984792; +1082 : 544175136; +1083 : 1952870227; +1084 : 544760173; +1085 : 1801675106; +1086 : 1936028272; +1087 : 1701999987; +1088 : 0; +1089 : 8389112; +1090 : 1918984792; +1091 : 544175136; +1092 : 1952870227; +1093 : 544760173; +1094 : 1918989427; +1095 : 1769234806; +1096 : 28271; +1097 : 8389116; +1098 : 1918984792; +1099 : 544175136; +1100 : 1952870227; +1101 : 544760173; +1102 : 1918989427; +1103 : 1769234806; +1104 : 28271; +1105 : 8389120; +1106 : 1952870227; +1107 : 544760173; +1108 : 1478520692; +1109 : 544366946; +1110 : 1768710518; +1111 : 100; +1112 : 8389124; +1113 : 1952870227; +1114 : 544760173; +1115 : 1478520692; +1116 : 544366946; +1117 : 1684104562; +1118 : 121; +1119 : 8389128; +1120 : 1952870227; +1121 : 544760173; +1122 : 1478520692; +1123 : 544366946; +1124 : 1851880052; +1125 : 1952670067; +1126 : 1936617321; +1127 : 0; +1128 : 8389132; +1129 : 1952870227; +1130 : 544760173; +1131 : 1478520692; +1132 : 544366946; +1133 : 1851880052; +1134 : 1952670067; +1135 : 1936617321; +1136 : 0; +1137 : 8389136; +1138 : 1952870227; +1139 : 544760173; +1140 : 1478520692; +1141 : 544366946; +1142 : 1801675106; +1143 : 1936028272; +1144 : 1701999987; +1145 : 0; +1146 : 8389140; +1147 : 1952870227; +1148 : 544760173; +1149 : 1478520692; +1150 : 544366946; +1151 : 1801675106; +1152 : 1936028272; +1153 : 1701999987; +1154 : 0; +1155 : 8389144; +1156 : 1952870227; +1157 : 544760173; +1158 : 1478520692; +1159 : 544366946; +1160 : 1918989427; +1161 : 1769234806; +1162 : 28271; +1163 : 8389148; +1164 : 1952870227; +1165 : 544760173; +1166 : 1478520692; +1167 : 544366946; +1168 : 1918989427; +1169 : 1769234806; +1170 : 28271; +1171 : 8389152; +1172 : 1918984792; +1173 : 544175136; +1174 : 1970302537; +1175 : 1701191796; +1176 : 1919247461; +1177 : 1818326560; +1178 : 25705; +1179 : 8389156; +1180 : 1918984792; +1181 : 544175136; +1182 : 1970302537; +1183 : 1701191796; +1184 : 1919247461; +1185 : 1634038304; +1186 : 31076; +1187 : 8389160; +1188 : 1918984792; +1189 : 544175136; +1190 : 1970302537; +1191 : 1701191796; +1192 : 1919247461; +1193 : 1634890784; +1194 : 1667330926; +1195 : 1852795252; +1196 : 115; +1197 : 8389164; +1198 : 1918984792; +1199 : 544175136; +1200 : 1970302537; +1201 : 1701191796; +1202 : 1919247461; +1203 : 1634890784; +1204 : 1667330926; +1205 : 1852795252; +1206 : 115; +1207 : 8389168; +1208 : 1918984792; +1209 : 544175136; +1210 : 1970302537; +1211 : 1701191796; +1212 : 1919247461; +1213 : 1667326496; +1214 : 1701998699; +1215 : 1920299891; +1216 : 101; +1217 : 8389172; +1218 : 1918984792; +1219 : 544175136; +1220 : 1970302537; +1221 : 1701191796; +1222 : 1919247461; +1223 : 1667326496; +1224 : 1701998699; +1225 : 1920299891; +1226 : 101; +1227 : 8389176; +1228 : 1918984792; +1229 : 544175136; +1230 : 1970302537; +1231 : 1701191796; +1232 : 1919247461; +1233 : 1635021600; +1234 : 1952544370; +1235 : 7237481; +1236 : 8389180; +1237 : 1918984792; +1238 : 544175136; +1239 : 1970302537; +1240 : 1701191796; +1241 : 1919247461; +1242 : 1635021600; +1243 : 1952544370; +1244 : 7237481; +1245 : 8389184; +1246 : 1918984792; +1247 : 544175136; +1248 : 541150532; +1249 : 1768710518; +1250 : 100; +1251 : 8389188; +1252 : 1918984792; +1253 : 544175136; +1254 : 541150532; +1255 : 1684104562; +1256 : 121; +1257 : 8389192; +1258 : 1918984792; +1259 : 544175136; +1260 : 541150532; +1261 : 1851880052; +1262 : 1952670067; +1263 : 1936617321; +1264 : 0; +1265 : 8389196; +1266 : 1918984792; +1267 : 544175136; +1268 : 541150532; +1269 : 1851880052; +1270 : 1952670067; +1271 : 1936617321; +1272 : 0; +1273 : 8389200; +1274 : 1918984792; +1275 : 544175136; +1276 : 541150532; +1277 : 1801675106; +1278 : 1936028272; +1279 : 1701999987; +1280 : 0; +1281 : 8389204; +1282 : 1918984792; +1283 : 544175136; +1284 : 541150532; +1285 : 1801675106; +1286 : 1936028272; +1287 : 1701999987; +1288 : 0; +1289 : 8389208; +1290 : 1918984792; +1291 : 544175136; +1292 : 541150532; +1293 : 1918989427; +1294 : 1769234806; +1295 : 28271; +1296 : 8389212; +1297 : 1918984792; +1298 : 544175136; +1299 : 541150532; +1300 : 1918989427; +1301 : 1769234806; +1302 : 28271; +1303 : 12582912; +1304 : 1718506847; +1305 : 2053465458; +1306 : 101; +1307 : 0; +1308 : 0; +1309 : 0; +1310 : 0; +1311 : 0; +1312 : 0; +1313 : 0; +1314 : 0; +1315 : 0; +1316 : 0; +1317 : 0; +1318 : 0; +1319 : 0; +1320 : 0; +1321 : 0; +1322 : 0; +1323 : 0; +1324 : 0; +1325 : 0; +1326 : 0; +1327 : 0; +1328 : 0; +1329 : 0; +1330 : 0; +1331 : 0; +1332 : 0; +1333 : 0; +1334 : 0; +1335 : 0; +1336 : 0; +1337 : 0; +1338 : 0; +1339 : 0; +1340 : 0; +1341 : 0; +1342 : 0; +1343 : 0; +1344 : 0; +1345 : 0; +1346 : 0; +1347 : 0; +1348 : 0; +1349 : 0; +1350 : 0; +1351 : 0; +1352 : 0; +1353 : 0; +1354 : 0; +1355 : 0; +1356 : 0; +1357 : 0; +1358 : 0; +1359 : 0; +1360 : 0; +1361 : 0; +1362 : 0; +1363 : 0; +1364 : 0; +1365 : 0; +1366 : 0; +1367 : 0; +1368 : 0; +1369 : 0; +1370 : 0; +1371 : 0; +1372 : 0; +1373 : 0; +1374 : 0; +1375 : 0; +1376 : 0; +1377 : 0; +1378 : 0; +1379 : 0; +1380 : 0; +1381 : 0; +1382 : 0; +1383 : 0; +1384 : 0; +1385 : 0; +1386 : 0; +1387 : 0; +1388 : 0; +1389 : 0; +1390 : 0; +1391 : 0; +1392 : 0; +1393 : 0; +1394 : 0; +1395 : 0; +1396 : 0; +1397 : 0; +1398 : 0; +1399 : 0; +1400 : 0; +1401 : 0; +1402 : 0; +1403 : 0; +1404 : 0; +1405 : 0; +1406 : 0; +1407 : 0; +1408 : 0; +1409 : 0; +1410 : 0; +1411 : 0; +1412 : 0; +1413 : 0; +1414 : 0; +1415 : 0; +1416 : 0; +1417 : 0; +1418 : 0; +1419 : 0; +1420 : 0; +1421 : 0; +1422 : 0; +1423 : 0; +1424 : 0; +1425 : 0; +1426 : 0; +1427 : 0; +1428 : 0; +1429 : 0; +1430 : 0; +1431 : 0; +1432 : 0; +1433 : 0; +1434 : 0; +1435 : 0; +1436 : 0; +1437 : 0; +1438 : 0; +1439 : 0; +1440 : 0; +1441 : 0; +1442 : 0; +1443 : 0; +1444 : 0; +1445 : 0; +1446 : 0; +1447 : 0; +1448 : 0; +1449 : 0; +1450 : 0; +1451 : 0; +1452 : 0; +1453 : 0; +1454 : 0; +1455 : 0; +1456 : 0; +1457 : 0; +1458 : 0; +1459 : 0; +1460 : 0; +1461 : 0; +1462 : 0; +1463 : 0; +1464 : 0; +1465 : 0; +1466 : 0; +1467 : 0; +1468 : 0; +1469 : 0; +1470 : 0; +1471 : 0; +1472 : 0; +1473 : 0; +1474 : 0; +1475 : 0; +1476 : 0; +1477 : 0; +1478 : 0; +1479 : 0; +1480 : 0; +1481 : 0; +1482 : 0; +1483 : 0; +1484 : 0; +1485 : 0; +1486 : 0; +1487 : 0; +1488 : 0; +1489 : 0; +1490 : 0; +1491 : 0; +1492 : 0; +1493 : 0; +1494 : 0; +1495 : 0; +1496 : 0; +1497 : 0; +1498 : 0; +1499 : 0; +1500 : 0; +1501 : 0; +1502 : 0; +1503 : 0; +1504 : 0; +1505 : 0; +1506 : 0; +1507 : 0; +1508 : 0; +1509 : 0; +1510 : 0; +1511 : 0; +1512 : 0; +1513 : 0; +1514 : 0; +1515 : 0; +1516 : 0; +1517 : 0; +1518 : 0; +1519 : 0; +1520 : 0; +1521 : 0; +1522 : 0; +1523 : 0; +1524 : 0; +1525 : 0; +1526 : 0; +1527 : 0; +1528 : 0; +1529 : 0; +1530 : 0; +1531 : 0; +1532 : 0; +1533 : 0; +1534 : 0; +1535 : 0; +1536 : 0; +1537 : 0; +1538 : 0; +1539 : 0; +1540 : 0; +1541 : 0; +1542 : 0; +1543 : 0; +1544 : 0; +1545 : 0; +1546 : 0; +1547 : 0; +1548 : 0; +1549 : 0; +1550 : 0; +1551 : 0; +1552 : 0; +1553 : 0; +1554 : 0; +1555 : 0; +1556 : 0; +1557 : 0; +1558 : 0; +1559 : 0; +1560 : 0; +1561 : 0; +1562 : 0; +1563 : 0; +1564 : 0; +1565 : 0; +1566 : 0; +1567 : 0; +1568 : 0; +1569 : 0; +1570 : 0; +1571 : 0; +1572 : 0; +1573 : 0; +1574 : 0; +1575 : 0; +1576 : 0; +1577 : 0; +1578 : 0; +1579 : 0; +1580 : 0; +1581 : 0; +1582 : 0; +1583 : 0; +1584 : 0; +1585 : 0; +1586 : 0; +1587 : 0; +1588 : 0; +1589 : 0; +1590 : 0; +1591 : 0; +1592 : 0; +1593 : 0; +1594 : 0; +1595 : 0; +1596 : 0; +1597 : 0; +1598 : 0; +1599 : 0; +1600 : 0; +1601 : 0; +1602 : 0; +1603 : 0; +1604 : 0; +1605 : 0; +1606 : 0; +1607 : 0; +1608 : 0; +1609 : 0; +1610 : 0; +1611 : 0; +1612 : 0; +1613 : 0; +1614 : 0; +1615 : 0; +1616 : 0; +1617 : 0; +1618 : 0; +1619 : 0; +1620 : 0; +1621 : 0; +1622 : 0; +1623 : 0; +1624 : 0; +1625 : 0; +1626 : 0; +1627 : 0; +1628 : 0; +1629 : 0; +1630 : 0; +1631 : 0; +1632 : 0; +1633 : 0; +1634 : 0; +1635 : 0; +1636 : 0; +1637 : 0; +1638 : 0; +1639 : 0; +1640 : 0; +1641 : 0; +1642 : 0; +1643 : 0; +1644 : 0; +1645 : 0; +1646 : 0; +1647 : 0; +1648 : 0; +1649 : 0; +1650 : 0; +1651 : 0; +1652 : 0; +1653 : 0; +1654 : 0; +1655 : 0; +1656 : 0; +1657 : 0; +1658 : 0; +1659 : 0; +1660 : 0; +1661 : 0; +1662 : 0; +1663 : 0; +1664 : 0; +1665 : 0; +1666 : 0; +1667 : 0; +1668 : 0; +1669 : 0; +1670 : 0; +1671 : 0; +1672 : 0; +1673 : 0; +1674 : 0; +1675 : 0; +1676 : 0; +1677 : 0; +1678 : 0; +1679 : 0; +1680 : 0; +1681 : 0; +1682 : 0; +1683 : 0; +1684 : 0; +1685 : 0; +1686 : 0; +1687 : 0; +1688 : 0; +1689 : 0; +1690 : 0; +1691 : 0; +1692 : 0; +1693 : 0; +1694 : 0; +1695 : 0; +1696 : 0; +1697 : 0; +1698 : 0; +1699 : 0; +1700 : 0; +1701 : 0; +1702 : 0; +1703 : 0; +1704 : 0; +1705 : 0; +1706 : 0; +1707 : 0; +1708 : 0; +1709 : 0; +1710 : 0; +1711 : 0; +1712 : 0; +1713 : 0; +1714 : 0; +1715 : 0; +1716 : 0; +1717 : 0; +1718 : 0; +1719 : 0; +1720 : 0; +1721 : 0; +1722 : 0; +1723 : 0; +1724 : 0; +1725 : 0; +1726 : 0; +1727 : 0; +1728 : 0; +1729 : 0; +1730 : 0; +1731 : 0; +1732 : 0; +1733 : 0; +1734 : 0; +1735 : 0; +1736 : 0; +1737 : 0; +1738 : 0; +1739 : 0; +1740 : 0; +1741 : 0; +1742 : 0; +1743 : 0; +1744 : 0; +1745 : 0; +1746 : 0; +1747 : 0; +1748 : 0; +1749 : 0; +1750 : 0; +1751 : 0; +1752 : 0; +1753 : 0; +1754 : 0; +1755 : 0; +1756 : 0; +1757 : 0; +1758 : 0; +1759 : 0; +1760 : 0; +1761 : 0; +1762 : 0; +1763 : 0; +1764 : 0; +1765 : 0; +1766 : 0; +1767 : 0; +1768 : 0; +1769 : 0; +1770 : 0; +1771 : 0; +1772 : 0; +1773 : 0; +1774 : 0; +1775 : 0; +1776 : 0; +1777 : 0; +1778 : 0; +1779 : 0; +1780 : 0; +1781 : 0; +1782 : 0; +1783 : 0; +1784 : 0; +1785 : 0; +1786 : 0; +1787 : 0; +1788 : 0; +1789 : 0; +1790 : 0; +1791 : 0; +1792 : 0; +1793 : 0; +1794 : 0; +1795 : 0; +1796 : 0; +1797 : 0; +1798 : 0; +1799 : 0; +1800 : 0; +1801 : 0; +1802 : 0; +1803 : 0; +1804 : 0; +1805 : 0; +1806 : 0; +1807 : 0; +1808 : 0; +1809 : 0; +1810 : 0; +1811 : 0; +1812 : 0; +1813 : 0; +1814 : 0; +1815 : 0; +1816 : 0; +1817 : 0; +1818 : 0; +1819 : 0; +1820 : 0; +1821 : 0; +1822 : 0; +1823 : 0; +1824 : 0; +1825 : 0; +1826 : 0; +1827 : 0; +1828 : 0; +1829 : 0; +1830 : 0; +1831 : 0; +1832 : 0; +1833 : 0; +1834 : 0; +1835 : 0; +1836 : 0; +1837 : 0; +1838 : 0; +1839 : 0; +1840 : 0; +1841 : 0; +1842 : 0; +1843 : 0; +1844 : 0; +1845 : 0; +1846 : 0; +1847 : 0; +1848 : 0; +1849 : 0; +1850 : 0; +1851 : 0; +1852 : 0; +1853 : 0; +1854 : 0; +1855 : 0; +1856 : 0; +1857 : 0; +1858 : 0; +1859 : 0; +1860 : 0; +1861 : 0; +1862 : 0; +1863 : 0; +1864 : 0; +1865 : 0; +1866 : 0; +1867 : 0; +1868 : 0; +1869 : 0; +1870 : 0; +1871 : 0; +1872 : 0; +1873 : 0; +1874 : 0; +1875 : 0; +1876 : 0; +1877 : 0; +1878 : 0; +1879 : 0; +1880 : 0; +1881 : 0; +1882 : 0; +1883 : 0; +1884 : 0; +1885 : 0; +1886 : 0; +1887 : 0; +1888 : 0; +1889 : 0; +1890 : 0; +1891 : 0; +1892 : 0; +1893 : 0; +1894 : 0; +1895 : 0; +1896 : 0; +1897 : 0; +1898 : 0; +1899 : 0; +1900 : 0; +1901 : 0; +1902 : 0; +1903 : 0; +1904 : 0; +1905 : 0; +1906 : 0; +1907 : 0; +1908 : 0; +1909 : 0; +1910 : 0; +1911 : 0; +1912 : 0; +1913 : 0; +1914 : 0; +1915 : 0; +1916 : 0; +1917 : 0; +1918 : 0; +1919 : 0; +1920 : 0; +1921 : 0; +1922 : 0; +1923 : 0; +1924 : 0; +1925 : 0; +1926 : 0; +1927 : 0; +1928 : 0; +1929 : 0; +1930 : 0; +1931 : 0; +1932 : 0; +1933 : 0; +1934 : 0; +1935 : 0; +1936 : 0; +1937 : 0; +1938 : 0; +1939 : 0; +1940 : 0; +1941 : 0; +1942 : 0; +1943 : 0; +1944 : 0; +1945 : 0; +1946 : 0; +1947 : 0; +1948 : 0; +1949 : 0; +1950 : 0; +1951 : 0; +1952 : 0; +1953 : 0; +1954 : 0; +1955 : 0; +1956 : 0; +1957 : 0; +1958 : 0; +1959 : 0; +1960 : 0; +1961 : 0; +1962 : 0; +1963 : 0; +1964 : 0; +1965 : 0; +1966 : 0; +1967 : 0; +1968 : 0; +1969 : 0; +1970 : 0; +1971 : 0; +1972 : 0; +1973 : 0; +1974 : 0; +1975 : 0; +1976 : 0; +1977 : 0; +1978 : 0; +1979 : 0; +1980 : 0; +1981 : 0; +1982 : 0; +1983 : 0; +1984 : 0; +1985 : 0; +1986 : 0; +1987 : 0; +1988 : 0; +1989 : 0; +1990 : 0; +1991 : 0; +1992 : 0; +1993 : 0; +1994 : 0; +1995 : 0; +1996 : 0; +1997 : 0; +1998 : 0; +1999 : 0; +2000 : 0; +2001 : 0; +2002 : 0; +2003 : 0; +2004 : 0; +2005 : 0; +2006 : 0; +2007 : 0; +2008 : 0; +2009 : 0; +2010 : 0; +2011 : 0; +2012 : 0; +2013 : 0; +2014 : 0; +2015 : 0; +2016 : 0; +2017 : 0; +2018 : 0; +2019 : 0; +2020 : 0; +2021 : 0; +2022 : 0; +2023 : 0; +2024 : 0; +2025 : 0; +2026 : 0; +2027 : 0; +2028 : 0; +2029 : 0; +2030 : 0; +2031 : 0; +2032 : 0; +2033 : 0; +2034 : 0; +2035 : 0; +2036 : 0; +2037 : 0; +2038 : 0; +2039 : 0; +2040 : 0; +2041 : 0; +2042 : 0; +2043 : 0; +2044 : 0; +2045 : 0; +2046 : 0; +2047 : 0; +END; diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/de5a_area_A10/dla_ip.qsf b/python/openvino/demo/ip/intel_ai_ip/verilog/de5a_area_A10/dla_ip.qsf new file mode 100644 index 0000000..4106d96 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/de5a_area_A10/dla_ip.qsf @@ -0,0 +1,289 @@ +# This qsf file is auto-generated by the dla_create_ip script + +# Get the path of this script +set DLA_IP_PATH [file dirname [file normalize [info script]]] + +# Get the path of the parent directory of this script +set SHARED_RTL_PATH [file join {*}[lrange [file split $DLA_IP_PATH] 0 end-1]] +# Shared rtl assignments +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_activation_if.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_pool_if.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_depthwise_if.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_softmax_if.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_layout_transform_config.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_filter_bias_scale_scratchpad_if.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_interface_if.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_pe_array_if.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_xbar_if.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_pool_control.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_config_deserialize.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_output_streamer.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_lt_output_logic.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_dot_dsp_pack1x1_mult_fp16_chain_add.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_dot_dsp_pack2x2_mult6x4.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_activation_round_clamp.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_pe.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_accum_convert_alm.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_dma_addr_gen.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_dot_dsp_pack2x1_mult7.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_width_adapter.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_dot_dsp_pack1x1_mult9_chain_add.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_softmax_lane.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_input_feeder_writer_config.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_signmag_to_2scomplement.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_hld_ram_generic_three_way_depth_stitch.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_dspba_delay_ver.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_exit_fifo_pkg.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_stream_buffer_writer_coord_validate_dim.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_accum_blockfp_dsp.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_debug_network_node.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_a10_c10_adder_tree.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_dsp_fp32_mult_add.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_sequencer_pe_control.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_sfc_backpressure_generator.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_pe_array.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_stream_buffer_manager.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_acl_mid_speed_fifo.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_lt_mux.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_depthwise_pkg.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_hld_ram_tall_depth_stitch.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_activation_input_buffer_pipeline_stage.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_platform_reset.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_depthwise_core.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_stream_buffer_ram.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_depthwise_lane.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_float_32_to_float_16.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_dma_pkg.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_acl_fanout_pipeline.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_pool_pipeline_stage.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_filter_ddr_unpack.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_fp32_from_fpx_convert.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_hld_lsu_word_coalescer.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_dsp_prime_tensor_dot_sidefeed.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_acl_lfsr.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_hld_lsu_read_data_alignment.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_lt_data_conversion.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_acl_altera_syncram_wrapped.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_depthwise_config_decoder.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_stream_buffer_writer_fp_conversion.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_streamer_fsm.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_debug_network.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_dma.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_dma_writer.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_activation_input_buffer.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_hld_lsu_pkg.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_stream_buffer_writer_input_mux.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_activation_core.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_hld_fifo_zero_width.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_dot_adder_tree.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_softmax_division_A10.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_softmax_division_AGX.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_softmax_exponent_wrapper.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_sigmoid_tanh_recip_half_S10.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_tensor_block_dot_and_convert.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_accum_fp32_dsp.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_dsp_prime_tensor_accumulation.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_accum.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_softmax_exponent_S10.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_interface_pkg.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_hld_ram_short_depth_stitch.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_hld_ram.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_hld_ram_generic_two_way_depth_stitch.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_acl_reset_handler.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_softmax_division_wrapper.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_hld_global_load_store.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_value_counter.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_dma_csr.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_acl_ecc_encoder.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_stream_buffer_reader_top.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_hld_lsu_burst_coalescer.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_dot_dsp_pack1x1_mult9_adder_tree.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_dma_reader.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_activation_debug.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_accum_fp32_convert.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_activation_param_cache.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_cdc_reset_sync.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_dsp_m18x18_full.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_accum_convert_dsp.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_dot_alm_s10.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_filter_bias_scale_scratchpad_pkg.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_lt_step_counter.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_sequencer_result_id_counters.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_hld_ram_lower_mlab_simple_dual_port.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_acl_low_latency_fifo.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_stream_buffer_writer_coord_gen.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_hld_ram_bits_per_enable.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_activation_lane.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_lt_ram_arb.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_output_streamer_pkg.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_hld_lsu_read_cache.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_softmax_division_C10.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_acl_tessellated_incr_decr_threshold.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_stream_buffer_writer_data_split.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_hld_ram_lower_m20k_simple_dual_port.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_hld_lsu.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_dot_dsp_pack2x2_mult5.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_pool_input_buffer.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_dot_sm_alm_s10.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_input_feeder_pkg.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_hld_ram_bottom_depth_stitch.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_softmax_control.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_dot_dsp_pack1x1_mult9.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_input_feeder.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_softmax_exponent_C10.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_demux_pkg.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_ddrfree_config_data_read.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_softmax_debug.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_dsp_fp32_mult_acc.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_activation_prelu.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_acl_latency_one_ram_fifo.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_dma_read_arb.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_acl_shift_register_no_reset.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_dot_dsp_pack1x1_mult_fp16_adder_tree.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_stream_buffer_writer_fp_top.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_softmax_exponent_A10.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_sigmoid_tanh_recip_half_A10.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_depthwise_group.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_config_network.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_acl_dcfifo.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_output_streamer_flush_handler.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_acl_ecc_decoder.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_hld_lsu_write_data_alignment.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_dsp_fp32_add_sub.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_cdc_reset_async.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_accum_blockfp_alm.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_softmax_config_decoder.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_pool_pkg.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_sequencer_pkg.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_acl_zero_latency_fifo.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_activation_config_decoder.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_interface_profiling_counters.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_hld_ram_remaining_width.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_softmax_group.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_delay.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_sequencer_scratchpad_control.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_clock_cross_full_sync_internal.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_sigmoid_tanh_recip_half_AGX.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_stream_buffer_writer_coord_validate.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_pool_core.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_softmax_pkg.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_timer.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_s10_adder2.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_dot_and_convert.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_softmax_division_S10.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_accum_fixed.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_pool_config_decoder.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_lt_dimension_counter.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_depthwise_control.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_stream_buffer_writer_addr_offset_gen.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_hld_fifo.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_float_16_to_float_32.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_pe_drain.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_config_data_split.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_sigmoid_tanh_recip_half_C10.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_pool_debug.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_acl_latency_zero_ram_fifo.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_pe_blockfp_to_accum_input.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_depthwise_fp32_convert.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_xbar_config_handler.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_softmax_pipeline_stage.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_input_streamer.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_reset_handler_simple.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_platform_reset_internal.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_depthwise_filter_bias_cache.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_activation_mult_dsp.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_ram.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_softmax_top.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_dot_dsp_pack1x1_mult18.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_lt_gen_index_info.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_s10_adder_tree.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_xbar_pkg.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_input_feeder_if.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_common_pkg.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_pool_tree.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_dot_alm.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_dot_dsp_pack2x2_mult4.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_hld_ram_bottom_width_stitch.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_hld_ram_lower_m20k_true_dual_port.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_softmax_exponent_AGX.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_a10_adder1.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_counter.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_stream_buffer_writer_addr_gen_pipeline.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_dot_2s_alm_s10.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_latency_alignment.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_sequencer.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_hld_ram_ecc.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_acl_burst_splitter.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_depthwise_input_buffer.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_c10_adder1.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_pool_group.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_acl_high_speed_fifo.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_acl_tessellated_incr_lookahead.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_s10_adder1.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_activation_continuous_activations.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_dot.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_filter_bias_scale_scratchpad.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_stream_buffer_writer_max_value.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_activation_top.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_xbar_wrapper.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_hld_lsu_unaligned_controller.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_2scomplement_to_signmag.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_pe_array_pkg.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_activation_pkg.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_stream_buffer_writer_top.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_hld_lsu_coalescer_dynamic_timeout.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_dsp_m9x9_sumof4.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_xbar.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_lt_pkg.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_hld_ram_lower.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_hld_lsu_data_aligner.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_dot_dsp_pack2x2_mult5x4.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_dma_config_intercept.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_lt_funnel.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_exit_fifo.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_depthwise_pipeline_stage.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_stream_buffer_writer_block_align_mantissa.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_depthwise_top.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_hld_lsu_write_kernel_downstream.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_clock_cross_half_sync_internal.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_activation_clamp.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_softmax_core.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_stream_buffer_reader_addr_gen.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_bitscan_optimized.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_dot_dsp_pack1x1_mult_fp16.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_layout_transform.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_pool_top.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_softmax_input_buffer.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_depthwise_shift_register.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_st_pipeline_stage.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_fp32_to_fpx_convert.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_activation_group.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_activation_control.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_acl_ecc_pkg.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_config_data_concat.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_dot_dsp_tensor1x2_mult10_hidden_sideload.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_lt_memory_manager.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_clock_cross_half_sync.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_dot_dsp_pack2x2_mult7.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_width_adapter_pkg.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_pool_lane.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_cdc_reset_aligned.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_dma_counter_64.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_stream_buffer_writer_addr_gen.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_input_feeder_reader_config.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_dsp_fp16_mult_sum.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_dot_alm_a10_c10.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_clock_cross_full_sync.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_aux_depthwise_debug.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_dot_checker.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_demux.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_alm_pipelined_accum.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name VERILOG_FILE $SHARED_RTL_PATH/dla_top_pkg.sv -hdl_version SystemVerilog_2009 +set_global_assignment -name SEARCH_PATH $SHARED_RTL_PATH +set_global_assignment -name SDC_FILE $SHARED_RTL_PATH/dla_clock_cross_sync.sdc + +# Generated rtl assignments +set_global_assignment -name SEARCH_PATH $DLA_IP_PATH +set_global_assignment -name MIF_FILE $DLA_IP_PATH/dla_dma_csr_discovery_rom.mif +set_global_assignment -name MIF_FILE $DLA_IP_PATH/dla_interface_profiling_counters.mif +set_global_assignment -name VERILOG_CONSTANT_LOOP_LIMIT 500000
\ No newline at end of file diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/de5a_area_A10/dla_pe_array_system_de5a_area_A10.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/de5a_area_A10/dla_pe_array_system_de5a_area_A10.sv new file mode 100644 index 0000000..1accb4e --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/de5a_area_A10/dla_pe_array_system_de5a_area_A10.sv @@ -0,0 +1,274 @@ +// Copyright 2020-2021 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +`resetall +`undefineall +`default_nettype none + +module dla_pe_array_system_de5a_area_A10 import dla_common_pkg::*; #( + dla_sequencer_pkg::sequencer_arch_t SEQUENCER_ARCH, + dla_filter_bias_scale_scratchpad_pkg::filter_bias_scale_scratchpad_arch_t SCRATCHPAD_ARCH, + dla_pe_array_pkg::pe_array_arch_t PE_ARRAY_ARCH, + dla_exit_fifo_pkg::exit_fifo_arch_t EXIT_FIFO_ARCH, + dla_input_feeder_pkg::input_feeder_arch_t INPUT_FEEDER_ARCH, + + int CONFIG_WIDTH, + int PE_ARRAY_OUTPUT_DATA_WIDTH, + int INPUT_FEEDER_INPUT_DATA_WIDTH, + int FEATURE_READER_WIDTH, + int FILTER_READER_WIDTH, + int SCRATCHPAD_LATENCY +) ( + input wire clk, + input wire i_aresetn, + + // Config bus + input wire [CONFIG_WIDTH-1:0] i_feeder_mux_config_data, + output wire o_feeder_mux_config_ready, + input wire i_feeder_mux_config_valid, + input wire [CONFIG_WIDTH-1:0] i_feeder_writer_config_data, + output wire o_feeder_writer_config_ready, + input wire i_feeder_writer_config_valid, + input wire [CONFIG_WIDTH-1:0] i_feeder_in_config_data, + output wire o_feeder_in_config_ready, + input wire i_feeder_in_config_valid, + input wire [CONFIG_WIDTH-1:0] i_feeder_reader_config_data, + output wire o_feeder_reader_config_ready, + input wire i_feeder_reader_config_valid, + input wire [CONFIG_WIDTH-1:0] i_feeder_out_config_data, + output wire o_feeder_out_config_ready, + input wire i_feeder_out_config_valid, + + // Feature data from DDR + input wire [FEATURE_READER_WIDTH-1:0] i_feature_input_data, + output wire o_feature_input_ready, + input wire i_feature_input_valid, + + // Feature data from streaming interface + input wire [FEATURE_READER_WIDTH-1:0] i_istream_data, + output wire o_istream_ready, + input wire i_istream_valid, + + // Filter data from DDR or on-chip memory + input wire [FILTER_READER_WIDTH-1:0] i_filter_data, + output logic o_filter_ready, + input wire i_filter_valid, + + // Feature data from output of aux kernels + input wire [INPUT_FEEDER_INPUT_DATA_WIDTH-1:0] i_xbar_writeback_input_data, + output wire o_xbar_writeback_input_ready, + input wire i_xbar_writeback_input_valid, + + // Output data from the PE array exit FIFO going to aux kernels + output wire [PE_ARRAY_OUTPUT_DATA_WIDTH-1:0] o_pe_array_output_data, + input wire i_pe_array_output_ready, + output logic o_pe_array_output_valid, + + // Snoop signals for the profiling counters + output logic o_pc_input_feeder_to_sequencer_valid, + output logic o_pc_input_feeder_to_sequencer_ready, + + output wire o_first_word_received +); + + // input feeder output signals + logic input_feeder_valid; + dla_interface_pkg::input_feeder_control_t input_feeder_control; + input_feeder_feature_if#(dla_input_feeder_pkg::input_feeder_feature_if_from_arch(INPUT_FEEDER_ARCH)) input_feeder_data(); + logic input_feeder_ready; + + localparam result_param = dla_pe_array_pkg::pe_array_result_param_from_pe_array_arch(PE_ARRAY_ARCH); + localparam control_param = dla_pe_array_pkg::pe_array_control_param_from_pe_array_arch(PE_ARRAY_ARCH); + localparam scratchpad_param = dla_filter_bias_scale_scratchpad_pkg::scratchpad_param_from_scratchpad_arch(SCRATCHPAD_ARCH); + localparam GROUP_DELAY = PE_ARRAY_ARCH.GROUP_DELAY; + + // pe_array interfaces + pe_array_feature_if#(PE_ARRAY_ARCH) pe_array_feature(); + pe_array_filter_if#(PE_ARRAY_ARCH) pe_array_filter(); + pe_array_bias_if#(PE_ARRAY_ARCH) pe_array_bias(); + pe_array_scale_if#(PE_ARRAY_ARCH) pe_array_scale(); + pe_array_control_if#(control_param) pe_array_control(); + pe_array_result_if#(result_param) pe_array_result(); + + // filter scratchpad interfaces + logic scratchpad_write_enable; + logic scratchpad_read; + scratchpad_write_addr_if#(scratchpad_param) scratchpad_write_addr(); + scratchpad_write_data_if#(SCRATCHPAD_ARCH) scratchpad_filter_data(); + scratchpad_read_addr_if#(scratchpad_param) scratchpad_read_addr(); + scratchpad_read_data_if#(SCRATCHPAD_ARCH) scratchpad_read_data(); + + // exit fifo output interfaces + logic exit_fifo_almost_full; + pe_array_result_if#(result_param) exit_fifo_output_data(); + dla_exit_fifo_pkg::exit_fifo_debug_t exit_fifo_debug; + + // Convert scratchpad_read_data_t to pe_array_*_t + for (genvar pe_port = 0; pe_port < SCRATCHPAD_ARCH.NUM_PE_PORTS; pe_port++) begin + localparam int pe_idx = pe_port / PE_ARRAY_ARCH.NUM_FILTERS; + localparam int filter_idx = pe_port % PE_ARRAY_ARCH.NUM_FILTERS; + assign pe_array_filter.data[pe_idx][filter_idx].valid = scratchpad_read_data.data.ports[pe_port].valid; + assign pe_array_filter.data[pe_idx][filter_idx].mantissa = scratchpad_read_data.data.ports[pe_port].filter.mantissa; + assign pe_array_filter.data[pe_idx][filter_idx].exponent = scratchpad_read_data.data.ports[pe_port].filter.exponent; + + // TODO: [shaneoco] save the area from dla_delay on the bias by delaying + // the bias read address on the scratchpad instead + + assign pe_array_scale.data[pe_idx][filter_idx] = scratchpad_read_data.data.ports[pe_port].scale; + assign pe_array_bias.data[pe_idx][filter_idx] = scratchpad_read_data.data.ports[pe_port].bias; + end + + dla_sequencer #(SEQUENCER_ARCH) sequencer ( + .clk (clk), + .i_aresetn (i_aresetn), + + // input_feeder control signals + .i_input_feeder_valid (input_feeder_valid), + .i_input_feeder_control (input_feeder_control), + .o_input_feeder_ready (input_feeder_ready), + + // filter_reader control signals + .i_filter_reader_valid (i_filter_valid), + .i_filter_reader_is_bias (!scratchpad_filter_data.data.is_filter), + .o_filter_reader_ready (o_filter_ready), + + // scratchpad control signals + .o_scratchpad_write_enable(scratchpad_write_enable), + .o_scratchpad_write_addr (scratchpad_write_addr), + .o_scratchpad_read_addr (scratchpad_read_addr), + .o_scratchpad_read (scratchpad_read), + + // pe_array control signals + .o_pe_array_control (pe_array_control), + + // exit_fifo control signals + .i_exit_fifo_almost_full (exit_fifo_almost_full) + ); + + // TODO(kimjinhe): for now I'm using unpacked xbar input data for lane but everywhere else it's + // packed so I need to make it consistent. + logic [FEATURE_READER_WIDTH-1:0] xbar_input_data [PE_ARRAY_ARCH.NUM_LANES-1:0]; + for (genvar lane_idx = 0; lane_idx < PE_ARRAY_ARCH.NUM_LANES; lane_idx++) begin : GEN_XBAR_ASSIGN + assign xbar_input_data[lane_idx] = i_xbar_writeback_input_data[(lane_idx+1)*FEATURE_READER_WIDTH-1:lane_idx*FEATURE_READER_WIDTH]; + end + + dla_input_feeder #(INPUT_FEEDER_ARCH) input_feeder ( + .clk (clk), + .i_resetn_async (i_aresetn), + + .i_config_feeder_in_data (i_feeder_in_config_data), + .i_config_feeder_in_valid (i_feeder_in_config_valid), + .o_config_feeder_in_ready (o_feeder_in_config_ready), + + .i_config_writer_mux_data (i_feeder_mux_config_data), + .i_config_writer_mux_valid (i_feeder_mux_config_valid), + .o_config_writer_mux_ready (o_feeder_mux_config_ready), + + .i_config_writer_addr_data (i_feeder_writer_config_data), + .i_config_writer_addr_valid (i_feeder_writer_config_valid), + .o_config_writer_addr_ready (o_feeder_writer_config_ready), + + .i_config_feeder_out_data (i_feeder_out_config_data), + .i_config_feeder_out_valid (i_feeder_out_config_valid), + .o_config_feeder_out_ready (o_feeder_out_config_ready), + + .i_config_reader_data (i_feeder_reader_config_data), + .i_config_reader_valid (i_feeder_reader_config_valid), + .o_config_reader_ready (o_feeder_reader_config_ready), + + .i_ddr_data (i_feature_input_data), + .i_ddr_valid (i_feature_input_valid), + .o_ddr_ready (o_feature_input_ready), + + .i_istream_data (i_istream_data), + .o_istream_ready (o_istream_ready), + .i_istream_valid (i_istream_valid), + + .i_xbar_data (xbar_input_data), + .i_xbar_valid (i_xbar_writeback_input_valid), + .o_xbar_ready (o_xbar_writeback_input_ready), + + .i_input_feeder_ready (input_feeder_ready), + .o_input_feeder_valid (input_feeder_valid), + .o_input_feeder_control (input_feeder_control), + .o_input_feeder_data (input_feeder_data), + + .o_first_word_received (o_first_word_received) + ); + + + dla_filter_ddr_unpack #( + .SCRATCHPAD_ARCH(SCRATCHPAD_ARCH), + .DDR_WIDTH(FILTER_READER_WIDTH) + ) filter_ddr_unpack ( + .i_ddr_data (i_filter_data), + .o_scratchpad_filter_data(scratchpad_filter_data) + ); + + dla_filter_bias_scale_scratchpad #(SCRATCHPAD_ARCH) scratchpad ( + .clk (clk), + + .i_write_enable(scratchpad_write_enable), + .i_write_addr (scratchpad_write_addr), + .i_write_data (scratchpad_filter_data), + + .i_read (scratchpad_read), + .i_read_addr (scratchpad_read_addr), + .o_read_data (scratchpad_read_data) + ); + + for (genvar lane_idx = 0; lane_idx < PE_ARRAY_ARCH.NUM_LANES; lane_idx++) begin : GEN_LANE_ASSIGN + // TODO: [shaneoco] move this calculation to a central place + localparam int PE_FEATURE_WIDTH = + ((PE_ARRAY_ARCH.DOT_SIZE * PE_ARRAY_ARCH.FEATURE_WIDTH) + + PE_ARRAY_ARCH.FEATURE_EXPONENT_WIDTH) * PE_ARRAY_ARCH.NUM_FEATURES; + dla_delay #( + .WIDTH(PE_FEATURE_WIDTH), + .DELAY(SCRATCHPAD_LATENCY + lane_idx * GROUP_DELAY), + .DEVICE(PE_ARRAY_ARCH.DEVICE) + ) feature_data_reg ( + .clk(clk), + .i_data(input_feeder_data.data[lane_idx]), + .o_data(pe_array_feature.data[lane_idx]) + ); + end + + dla_pe_array #(.arch(PE_ARRAY_ARCH)) pe_array ( + .clk (clk), + .i_aresetn(i_aresetn), + .i_feature(pe_array_feature), + .i_filter (pe_array_filter), + .i_bias (pe_array_bias), + .i_scale (pe_array_scale), + .i_control(pe_array_control), + .o_result (pe_array_result) + ); + + dla_exit_fifo #(EXIT_FIFO_ARCH) exit_fifo ( + .clk (clk), + .i_aresetn (i_aresetn), + .i_data (pe_array_result), + .i_ready (i_pe_array_output_ready), + .o_data (exit_fifo_output_data), + .o_almost_full(exit_fifo_almost_full), + .o_debug (exit_fifo_debug) + ); + + assign o_pe_array_output_data = exit_fifo_output_data.data.result; + assign o_pe_array_output_valid = exit_fifo_output_data.data.valid; + + // Snoop signals for the profiling counters + assign o_pc_input_feeder_to_sequencer_valid = input_feeder_valid & input_feeder_control.feature_valid; + assign o_pc_input_feeder_to_sequencer_ready = input_feeder_ready; + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/de5a_area_A10/dla_top_de5a_area_A10.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/de5a_area_A10/dla_top_de5a_area_A10.sv new file mode 100644 index 0000000..d60bcf4 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/de5a_area_A10/dla_top_de5a_area_A10.sv @@ -0,0 +1,1717 @@ +// Copyright 2015-2021 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +////////////////////////////////////////////////////////////////////////////// +// Top-level coreDLA module (shared between testbench and real hardware) +////////////////////////////////////////////////////////////////////////////// + +// Not all AXI ports have been implemented. For assumptions and restrictions, refer to dla/fpga/dma/rtl/dla_dma.sv. +// This module simply exposes the same AXI ports provided by the top module of DMA. + +`resetall +`undefineall +`default_nettype none +`include "dla_acl_parameter_assert.svh" + +module dla_top_de5a_area_A10 + +import dla_common_pkg::*, dla_input_feeder_pkg::input_feeder_arch_t, dla_pe_array_pkg::*, dla_top_pkg::*, dla_xbar_pkg::*, dla_aux_activation_pkg::*, dla_aux_pool_pkg::*, + dla_aux_softmax_pkg::*, dla_aux_depthwise_pkg::*, dla_lt_pkg::*; + +#( + string DEVICE, // the device to target, legal values are "A10", "C10", "S10", or "AGX7" + + int CSR_ADDR_WIDTH, // width of the byte address signal, determines CSR address space size, e.g. 11 bit address = 2048 bytes, the largest size that uses only 1 M20K + int CSR_DATA_BYTES, // width of the CSR data path, typically 4 bytes + int CONFIG_DATA_BYTES, // data width of the config network output port, typically 4 bytes + int CONFIG_READER_DATA_BYTES, // data width of the config network input port, typically 8 bytes + int FILTER_READER_DATA_BYTES, // data width of the filter reader, typically a whole DDR word (assuming block floating point, C_VECTOR=16 so 4 filter words packed into 1 DDR word) + int FEATURE_READER_DATA_BYTES, // data width of the feature reader, typically half of a DDR word for C_VECTOR=16 (assuming FP16 or smaller) + int FEATURE_WRITER_DATA_BYTES, // data width of the feature writer, typically half of a DDR word for C_VECTOR=16 (assuming FP16 or smaller) + int DDR_ADDR_WIDTH, // width of all byte address signals to global memory, 32 would allow 4 GB of addressable memory + int DDR_BURST_WIDTH, // internal width of the axi burst length signal, typically 4, max number of words in a burst = 2**DDR_BURST_WIDTH + int DDR_DATA_BYTES, // width of the global memory data path, typically 64 bytes + int DDR_READ_ID_WIDTH, // width of the AXI ID signal for DDR reads, must be 2 since there are 3 read masters + bit ENABLE_ON_CHIP_PARAMETERS, // whether the configs, filters are saved on-chip + + // stream buffer + int KVEC_OVER_CVEC, + int SB_ADDR_WIDTH, + int STREAM_BUFFER_DEPTH, + + // pe array + dla_pe_array_pkg::pe_array_arch_bits_t PE_ARRAY_PARAM_BITS, + int PE_ARRAY_EXIT_FIFO_DEPTH, + + // filter scratchpad + int SCRATCHPAD_FILTER_DEPTH, + int SCRATCHPAD_BIAS_SCALE_DEPTH, + int SCRATCHPAD_NUM_FILTER_PORTS, + int SCRATCHPAD_NUM_BIAS_SCALE_PORTS, + int SCRATCHPAD_MEGABLOCK_WIDTH, + int SCRATCHPAD_NUM_FILTER_BLOCKS_PER_MEGABLOCK, + int SCRATCHPAD_NUM_BIAS_SCALE_BLOCKS_PER_MEGABLOCK, + + // config network + int CONFIG_ID_FILTER_READER, + int CONFIG_CHANNEL_WIDTH, + int CONFIG_CACHE_DEPTH, + int CONFIG_ID_INPUT_FEEDER_MUX, + int CONFIG_ID_INPUT_FEEDER_WRITER, + int CONFIG_ID_INPUT_FEEDER_IN, + int CONFIG_ID_INPUT_FEEDER_READER, + int CONFIG_ID_INPUT_FEEDER_OUT, + int CONFIG_ID_FEATURE_WRITER, + int CONFIG_ID_FEATURE_READER, + int CONFIG_ID_XBAR, + int CONFIG_ID_OUTPUT_STREAMER, + int CONFIG_ID_OUTPUT_STREAMER_FLUSH, + int CONFIG_ID_WRITER_STREAMER_SEL, + int CONFIG_ID_LAYOUT_TRANSFORM, + + // aux module config ID + int CONFIG_ID_ACTIVATION, + int CONFIG_ID_POOL, + int CONFIG_ID_DEPTHWISE, + int CONFIG_ID_DEPTHWISE_FILTER_BIAS, + int CONFIG_ID_SOFTMAX, + + int CONFIG_NUM_MODULES, + int MODULE_ID_WIDTH, + + int CONFIG_NETWORK_FIFO_MIN_DEPTH [CONFIG_NETWORK_MAX_NUM_MODULES:1], + int CONFIG_NETWORK_NUM_PIPELINE_STAGES [CONFIG_NETWORK_MAX_NUM_MODULES:1], + bit CONFIG_NETWORK_CROSS_CLOCK [CONFIG_NETWORK_MAX_NUM_MODULES:1], + bit CONFIG_NETWORK_CROSS_CLOCK_AXI [CONFIG_NETWORK_MAX_NUM_MODULES:1], + int CONFIG_NETWORK_QUANTIZE_DEPTHS [255:0], //real hardware should set this to {32,512} to fully utilize an MLAB or an M20K, testbench may set this to something smaller to test backpressure + + //xbar + int MAX_XBAR_INPUT_INTERFACES, + int MAX_XBAR_OUTPUT_INTERFACES, + int NUMBER_OF_KERNELS, + int AUX_MODULE_SELECT_ID_WIDTH, + int AUX_XBAR_INPUT_COUNTER_WIDTH, + int AUX_XBAR_OUTPUT_COUNTER_WIDTH, + int AUX_MAX_DATABUS_WIDTH, + int AUX_XBAR_OUTPUT_WIDTH, + int AUX_OUTPUT_DATA_WIDTHS [DLA_TOP_XBAR_PARAMETER_ARRAY_SIZE-1:0], + int AUX_INPUT_DATA_WIDTHS [DLA_TOP_XBAR_PARAMETER_ARRAY_SIZE-1:0], + bit XBAR_KERNEL_BYPASS_FEATURE_ENABLE, + int AUX_XBAR_MUX_OUTPUT_PIPELINE_STAGES [DLA_TOP_XBAR_PARAMETER_ARRAY_SIZE-1:0], + int AUX_XBAR_NONSTALLABLE_OUTPUT_PIPELINE_STAGES [DLA_TOP_XBAR_PARAMETER_ARRAY_SIZE-1:0], + int AUX_XBAR_OUTPUT_BP_FIFO_ENABLE [DLA_TOP_XBAR_PARAMETER_ARRAY_SIZE-1:0], + bit AUX_KERNEL_BYPASSABLE [DLA_TOP_XBAR_PARAMETER_ARRAY_SIZE-1:0], + int AUX_XBAR_OUTPUT_BP_FIFO_DEPTH [DLA_TOP_XBAR_PARAMETER_ARRAY_SIZE-1:0], + bit XBAR_KERNEL_CV_FEATURE_ENABLE, + int AUX_KERNEL_CONNECTIVITY_VECTOR [DLA_TOP_XBAR_PARAMETER_ARRAY_SIZE-1:0][DLA_TOP_XBAR_PARAMETER_ARRAY_SIZE-1:0], + + //xbar id + int XBAR_ID_ACTIVATION, + int XBAR_ID_POOL, + int XBAR_ID_DEPTHWISE, + int XBAR_ID_SOFTMAX, + int XBAR_ID_PE_ARRAY, + int XBAR_ID_XBAR_OUT_PORT, + //aux module enable + bit ENABLE_ACTIVATION, + bit ENABLE_POOL, + bit ENABLE_DEPTHWISE, + bit ENABLE_SOFTMAX, + + bit ENABLE_INPUT_STREAMING, + int AXI_ISTREAM_DATA_WIDTH, + int AXI_ISTREAM_FIFO_DEPTH, + + //config network enable + bit ENABLE_DEBUG, + + // activation parameters + int ACTIVATION_K_VECTOR, + bit ACTIVATION_ENABLE_DSP_MULT, + bit ACTIVATION_ENABLE_DSP_CONV, + int ACTIVATION_TYPE, + int ACTIVATION_GROUP_DELAY, + int ACTIVATION_PARAM_CACHE_DEPTH, + + //pool parameters + int POOL_K_VECTOR, + int POOL_TYPE, + int POOL_GROUP_DELAY, + int POOL_CONFIG_ID_WIDTH, + int POOL_MAX_WINDOW_HEIGHT, + int POOL_MAX_WINDOW_WIDTH, + int POOL_MAX_STRIDE_VERTICAL, + int POOL_MAX_STRIDE_HORIZONTAL, + int POOL_PIPELINE_REG_NUM, + + // depthwise parameters + int DEPTHWISE_K_VECTOR, + int DEPTHWISE_TYPE, + int DEPTHWISE_GROUP_DELAY, + int DEPTHWISE_CONFIG_ID_WIDTH, + int DEPTHWISE_MAX_WINDOW_HEIGHT, + int DEPTHWISE_MAX_WINDOW_WIDTH, + int DEPTHWISE_MAX_STRIDE_VERTICAL, + int DEPTHWISE_MAX_STRIDE_HORIZONTAL, + int DEPTHWISE_PIPELINE_REG_NUM, + int DEPTHWISE_MAX_DILATION_VERTICAL, + int DEPTHWISE_MAX_DILATION_HORIZONTAL, + + // depthwise vector parameters + int DETHWISE_VECTOR_FEATURE_WIDTH, + int DETHWISE_VECTOR_FILTER_WIDTH, + int DETHWISE_VECTOR_BIAS_WIDTH, + int DETHWISE_VECTOR_DOT_SIZE, + + //softmax parameters + int SOFTMAX_K_VECTOR, + int SOFTMAX_GROUP_DELAY, + int SOFTMAX_CONFIG_ID_WIDTH, + int SOFTMAX_MAX_NUM_CHANNELS, + + // aux parameters + int AUX_MAX_TILE_HEIGHT, + int AUX_MAX_TILE_WIDTH, + int AUX_MAX_TILE_CHANNELS, + + // mixed precision switch + int ENABLE_MIXED_PRECISION, + + // Layout Transform + int LAYOUT_TRANSFORM_ENABLE, + int LAYOUT_TRANSFORM_MAX_FEATURE_CHANNELS, + int LAYOUT_TRANSFORM_MAX_FEATURE_HEIGHT, + int LAYOUT_TRANSFORM_MAX_FEATURE_WIDTH, + int LAYOUT_TRANSFORM_MAX_FEATURE_DEPTH, + int LAYOUT_TRANSFORM_MAX_STRIDE_WIDTH, + int LAYOUT_TRANSFORM_MAX_STRIDE_HEIGHT, + int LAYOUT_TRANSFORM_MAX_STRIDE_DEPTH, + int LAYOUT_TRANSFORM_MAX_PAD_FRONT, + int LAYOUT_TRANSFORM_MAX_PAD_LEFT, + int LAYOUT_TRANSFORM_MAX_PAD_TOP, + int LAYOUT_TRANSFORM_MAX_FILTER_HEIGHT, + int LAYOUT_TRANSFORM_MAX_FILTER_WIDTH, + int LAYOUT_TRANSFORM_MAX_FILTER_DEPTH, + int LAYOUT_TRANSFORM_MAX_DILATION_WIDTH, + int LAYOUT_TRANSFORM_MAX_DILATION_HEIGHT, + int LAYOUT_TRANSFORM_MAX_DILATION_DEPTH, + int LAYOUT_TRANSFORM_READER_BYTES, + bit LAYOUT_TRANSFORM_DO_U8_CONV, + + // output streaming enable and signals + bit ENABLE_OUTPUT_STREAMER, + int AXI_OSTREAM_DATA_WIDTH, + int AXI_OSTREAM_ID_WIDTH, + int AXI_OSTREAM_DEST_WIDTH, + int AXI_OSTREAM_FIFO_DEPTH +) ( + //clocks and resets, all resets are not synchronized + input wire clk_ddr, + input wire clk_axi, + input wire clk_dla, + input wire clk_pcie, + input wire i_resetn_async, //active low reset that has NOT been synchronized to any clock + + //interrupt request, AXI4 stream master without data, runs on pcie clock + output logic o_interrupt_level, + + //CSR, AXI4 lite slave, runs on ddr clock + input wire i_csr_arvalid, + input wire [CSR_ADDR_WIDTH-1:0] i_csr_araddr, + output logic o_csr_arready, + output logic o_csr_rvalid, + output logic [8*CSR_DATA_BYTES-1:0] o_csr_rdata, + input wire i_csr_rready, + input wire i_csr_awvalid, + input wire [CSR_ADDR_WIDTH-1:0] i_csr_awaddr, + output logic o_csr_awready, + input wire i_csr_wvalid, + input wire [8*CSR_DATA_BYTES-1:0] i_csr_wdata, + output logic o_csr_wready, + output logic o_csr_bvalid, + input wire i_csr_bready, + + //global memory, AXI4 master, runs on ddr clock + output logic o_ddr_arvalid, + output logic [DDR_ADDR_WIDTH-1:0] o_ddr_araddr, + output logic [AXI_BURST_LENGTH_WIDTH-1:0] o_ddr_arlen, + output logic [AXI_BURST_SIZE_WIDTH-1:0] o_ddr_arsize, + output logic [AXI_BURST_TYPE_WIDTH-1:0] o_ddr_arburst, + output logic [DDR_READ_ID_WIDTH-1:0] o_ddr_arid, + input wire i_ddr_arready, + input wire i_ddr_rvalid, + input wire [8*DDR_DATA_BYTES-1:0] i_ddr_rdata, + input wire [DDR_READ_ID_WIDTH-1:0] i_ddr_rid, + output logic o_ddr_rready, + output logic o_ddr_awvalid, + output logic [DDR_ADDR_WIDTH-1:0] o_ddr_awaddr, + output logic [AXI_BURST_LENGTH_WIDTH-1:0] o_ddr_awlen, + output logic [AXI_BURST_SIZE_WIDTH-1:0] o_ddr_awsize, + output logic [AXI_BURST_TYPE_WIDTH-1:0] o_ddr_awburst, + input wire i_ddr_awready, + output logic o_ddr_wvalid, + output logic [8*DDR_DATA_BYTES-1:0] o_ddr_wdata, + output logic [DDR_DATA_BYTES-1:0] o_ddr_wstrb, + output logic o_ddr_wlast, + input wire i_ddr_wready, + input wire i_ddr_bvalid, + output logic o_ddr_bready, + + // Input Streamer AXI-S interface signals + input wire i_istream_axi_t_valid, + output logic o_istream_axi_t_ready, + input wire [AXI_ISTREAM_DATA_WIDTH-1:0] i_istream_axi_t_data, + + // Output Streamer AXI-S interface signals + output wire o_ostream_axi_t_valid, + input wire i_ostream_axi_t_ready, + output wire o_ostream_axi_t_last, + output logic [AXI_OSTREAM_DATA_WIDTH-1:0] o_ostream_axi_t_data, + output logic [(AXI_OSTREAM_DATA_WIDTH/8)-1:0] o_ostream_axi_t_strb +); + `include "dla_top_derived_params.svh" + + ////////////////////////////////////// + // Debug network parameterization // + ////////////////////////////////////// + + localparam int DEBUG_NETWORK_DATA_WIDTH = 32; //width of the read response data + localparam int DEBUG_NETWORK_ADDR_WIDTH = 32; //width of the read request address + localparam int DEBUG_NETWORK_ADDR_LOWER = 24; //how many lower bits of the address are forwarded to external debug-capable module + //the upper DEBUG_NETWORK_ADDR_WIDTH-DEBUG_NETWORK_ADDR_LOWER bits of address are used to identify the module id + localparam int DEBUG_NETWORK_NUM_MODULES = 1; //how many external debug-capable modules are attached, module id goes from 0 to NUM_MODULES-1 + + //list of debug-capable modules that attached to debug network + localparam int DEBUG_NETWORK_ID_PROFILING_COUNTERS = 0; + + // Profiling counters attached to debug network. + // The ordering of the interfaces must stay consistent with dla/fpga/interface_profiling_counters/util/create_mif.cpp. + // BEWARE: can only snoop interfaces on clk_dla, e.g. config to DMA readers and writers are excluded, however we can still watch DMA + // by snooping the ready/valid of the data interface (to input feeder, to filter scratchpad, from xbar before the clock crossing FIFO). + // Some details to be aware of: + // - Exit FIFOs are considered part of the preceding module, e.g. PC_ID_INPUT_FEEDER_TO_SEQUENCER is after the input feeder exit FIFO + // - Width adapters are considered part of the xbar, e.g. if pool kvec < xbar kvec, then we are tapping at the narrower pool interface + localparam int PC_ID_DMA_TO_CONFIG = 0; + localparam int PC_ID_DMA_TO_FILTER = 1; + localparam int PC_ID_DMA_TO_INPUT_FEEDER = 2; + localparam int PC_ID_CONFIG_TO_INPUT_FEEDER_IN = 3; + localparam int PC_ID_CONFIG_TO_INPUT_FEEDER_OUT = 4; + localparam int PC_ID_CONFIG_TO_XBAR = 5; + localparam int PC_ID_CONFIG_TO_ACTIVATION = 6; + localparam int PC_ID_CONFIG_TO_POOL = 7; + localparam int PC_ID_CONFIG_TO_SOFTMAX = 8; + localparam int PC_ID_INPUT_FEEDER_TO_SEQUENCER = 9; + localparam int PC_ID_PE_ARRAY_TO_XBAR = 10; + localparam int PC_ID_XBAR_TO_ACTIVATION = 11; + localparam int PC_ID_ACTIVATION_TO_XBAR = 12; + localparam int PC_ID_XBAR_TO_POOL = 13; + localparam int PC_ID_POOL_TO_XBAR = 14; + localparam int PC_ID_XBAR_TO_SOFTMAX = 15; + localparam int PC_ID_SOFTMAX_TO_XBAR = 16; + localparam int PC_ID_XBAR_TO_INPUT_FEEDER = 17; + localparam int PC_ID_XBAR_TO_DMA = 18; + localparam int PC_NUM_INTERFACES = 19; + + localparam int RESET_HOLD_CLOCK_CYCLES = 1024; //number of clock cycles to hold the reset signal connected to the dla top and dla platform adapter modules + + + /////////////// + // Signals // + /////////////// + + logic config_network_input_valid; + logic [CONFIG_READER_WIDTH-1:0] config_network_input_data; + logic config_network_input_ready; + logic config_network_output_valid [CONFIG_NUM_MODULES:1]; + logic [CONFIG_WIDTH-1:0] config_network_output_data [CONFIG_NUM_MODULES:1]; + logic config_network_output_ready [CONFIG_NUM_MODULES:1]; + logic filter_reader_valid; + logic [FILTER_READER_WIDTH-1:0] filter_reader_data; + logic filter_reader_ready; + logic feature_reader_valid; + logic [FEATURE_READER_WIDTH-1:0] feature_reader_data; + logic feature_reader_ready; + logic pe_array_output_valid; + logic [PE_ARRAY_OUTPUT_DATA_WIDTH-1:0] pe_array_output_data; + logic pe_array_output_ready; + logic aux_valid; + logic [INPUT_FEEDER_INPUT_DATA_WIDTH-1:0] aux_data; + logic aux_ready; + logic feature_writer_valid; + logic [FEATURE_WRITER_WIDTH-1:0] feature_writer_data; + logic feature_writer_ready; + logic debug_network_csr_arvalid; + logic [DEBUG_NETWORK_ADDR_WIDTH-1:0] debug_network_csr_araddr; + logic debug_network_csr_arready; + logic debug_network_csr_rvalid; + logic [DEBUG_NETWORK_DATA_WIDTH-1:0] debug_network_csr_rdata; + logic debug_network_csr_rready; + logic debug_network_dbg_arvalid [DEBUG_NETWORK_NUM_MODULES-1:0]; + logic [DEBUG_NETWORK_ADDR_LOWER-1:0] debug_network_dbg_araddr [DEBUG_NETWORK_NUM_MODULES-1:0]; + logic debug_network_dbg_arready [DEBUG_NETWORK_NUM_MODULES-1:0]; + logic debug_network_dbg_rvalid [DEBUG_NETWORK_NUM_MODULES-1:0]; + logic [DEBUG_NETWORK_DATA_WIDTH-1:0] debug_network_dbg_rdata [DEBUG_NETWORK_NUM_MODULES-1:0]; + logic debug_network_dbg_rready [DEBUG_NETWORK_NUM_MODULES-1:0]; + logic pc_snoop_valid [PC_NUM_INTERFACES-1:0]; + logic pc_snoop_ready [PC_NUM_INTERFACES-1:0]; + logic pc_input_feeder_to_sequencer_valid; + logic pc_input_feeder_to_sequencer_ready; + logic pc_config_to_activation_valid; + logic pc_config_to_activation_ready; + logic pc_xbar_to_activation_valid; + logic pc_xbar_to_activation_ready; + logic pc_activation_to_xbar_valid; + logic pc_activation_to_xbar_ready; + logic pc_config_to_pool_valid; + logic pc_config_to_pool_ready; + logic pc_xbar_to_pool_valid; + logic pc_xbar_to_pool_ready; + logic pc_pool_to_xbar_valid; + logic pc_pool_to_xbar_ready; + logic pc_config_to_softmax_valid; + logic pc_config_to_softmax_ready; + logic pc_xbar_to_softmax_valid; + logic pc_xbar_to_softmax_ready; + logic pc_softmax_to_xbar_valid; + logic pc_softmax_to_xbar_ready; + logic reset_request_from_csr; + logic w_resetn_async; + logic streaming_active; + logic lt_param_error; + + logic config_lt_ready_ddr, config_lt_valid_ddr; + logic [CONFIG_WIDTH-1:0] config_lt_data_ddr; + + logic config_lt_ready_stream, config_lt_valid_stream; + logic [CONFIG_WIDTH-1:0] config_lt_data_stream; + logic ostream_tlast_axi_clk, ostream_tlast_ddr_clk; + + assign o_ostream_axi_t_last = ostream_tlast_axi_clk; + + logic unpacked_clk_ddr [1], unpacked_clk_axi [1]; + logic unpacked_resetn_ddr [1], unpacked_resetn_axi [1]; + + assign unpacked_clk_ddr = '{clk_ddr}; + assign unpacked_clk_axi = '{clk_axi}; + + //the user can request IP reset by writing to a CSR register (runs on clk_ddr) + //since the dla_platform_reset safely handles async reset, we just need OR this with external reset + //the signal reset_request_from_csr is active high, so invert it + assign unpacked_resetn_ddr[0] = i_resetn_async & !reset_request_from_csr; + assign unpacked_resetn_axi[0] = i_resetn_async & !reset_request_from_csr; + //NOTE! + //driving an async reset signal with combinational logic is potentially dangerous, as glitching + //at the comb output can pose a metastability risk. However, it is safe in this case: + // - there are only two ANDed inputs, so no intermediate result glitching + // - reset_request_from_csr comes straight from a FF, so will not itself glitch + // - if the two inputs change too near each other, a glitch COULD occur -- however, the only possible + // AND glitch is 00010000. The resulting reset sequence would resolve any metastability + // - reset_request_from_csr is by construction well-behaved with respect to i_resetn_async + + + dla_platform_reset #( + .RESET_HOLD_CLOCK_CYCLES (RESET_HOLD_CLOCK_CYCLES), + .MAX_DLA_INSTANCES (1), + .ENABLE_AXI (ENABLE_INPUT_STREAMING || ENABLE_OUTPUT_STREAMER), + .ENABLE_DDR (1) + ) dla_platform_reset_inst ( + .clk_dla (clk_dla), + .clk_ddr (unpacked_clk_ddr), + .clk_pcie (clk_pcie), + .clk_axis (unpacked_clk_axi), + .i_resetn_dla (i_resetn_async), + .i_resetn_ddr (unpacked_resetn_ddr), + .i_resetn_pcie (i_resetn_async), + .i_resetn_axis (unpacked_resetn_axi), + .o_resetn_async (w_resetn_async) + ); + + logic [INPUT_FEEDER_INPUT_DATA_WIDTH-1:0] istream_data; + logic istream_ready; + logic istream_valid; + logic reading_first_word; + logic axi_streaming_active; + logic axi_reading_first_word; + logic streaming_first_word_received; + logic streaming_last_word_sent; + + if (ENABLE_INPUT_STREAMING) begin + // Cross streaming-enable signal from CSR domain (DDR) to AXI + if (ENABLE_OUTPUT_STREAMER & ENABLE_ON_CHIP_PARAMETERS) begin + // In this case, CSR doesn't have input/output address to start inference and + // inference does not wait for a descriptor to be read. + // So wait for dedicated CSR state; otherwise, inference will be started by + // writing the IO buffer address. + dla_clock_cross_full_sync cc_streaming_active ( + .clk_src(clk_ddr), + .i_src_async_resetn(1'b1), + .i_src_data(streaming_active), + .o_src_data(), + + .clk_dst(clk_axi), + .i_dst_async_resetn(1'b1), + .o_dst_data(axi_streaming_active) + ); + end else begin + assign axi_streaming_active = 1; + end + + dla_input_streamer #( + .TDATA_WIDTH(AXI_ISTREAM_DATA_WIDTH), + .FIFO_DEPTH(AXI_ISTREAM_FIFO_DEPTH), + .TID_WIDTH(0), + .TDEST_WIDTH(0), + .TUSER_WIDTH(0), + .LT_ARCH(LT_ARCH), + .OUTPUT_WIDTH(INPUT_FEEDER_INPUT_DATA_WIDTH) + ) dla_input_streamer_inst ( + .clk_dla(clk_dla), + .clk_ddr(clk_ddr), + .clk_axi(clk_axi), + .i_resetn_async(w_resetn_async), + .i_config_data(config_lt_data_stream), + .i_config_valid(config_lt_valid_stream), + .o_config_ready(config_lt_ready_stream), + .i_streaming_enable(axi_streaming_active), + .i_tvalid(i_istream_axi_t_valid), + .o_tready(o_istream_axi_t_ready), + .i_tdata(i_istream_axi_t_data), + // unimplemented AXI-S signals: + .i_tstrb(), + .i_tkeep(), + .i_tlast(), + .i_tid(), + .i_tdest(), + .i_tuser(), + .i_twakeup(), + // DLA clock signals: + .o_istream_data(istream_data), + .i_istream_ready(istream_ready), + .o_istream_valid(istream_valid), + .o_reading_first_word(axi_reading_first_word), + .o_param_error(lt_param_error) + ); + + dla_clock_cross_full_sync cc_reading_first_word ( + .clk_src(clk_axi), + .i_src_async_resetn(1'b1), + .i_src_data(axi_reading_first_word), + .o_src_data(), + + .clk_dst(clk_ddr), + .i_dst_async_resetn(1'b1), + .o_dst_data(reading_first_word) + ); + + end else begin + assign istream_valid = 0; + assign reading_first_word = 0; + assign lt_param_error = 0; + end + + if (LAYOUT_TRANSFORM_ENABLE & ~ENABLE_INPUT_STREAMING) begin + if (~CONFIG_NETWORK_CROSS_CLOCK[CONFIG_ID_LAYOUT_TRANSFORM]) begin + $fatal(1, "Compiling layout transform design without DDR clock-crossing enabled."); + end + // Then the layout transform is in the DMA module... + assign config_lt_valid_ddr = config_network_output_valid[CONFIG_ID_LAYOUT_TRANSFORM]; + assign config_lt_data_ddr = config_network_output_data [CONFIG_ID_LAYOUT_TRANSFORM]; + assign config_network_output_ready[CONFIG_ID_LAYOUT_TRANSFORM] = config_lt_ready_ddr; + + assign config_lt_valid_stream = 1'b0; + assign config_lt_data_stream = 'x; + end else if (LAYOUT_TRANSFORM_ENABLE & ENABLE_INPUT_STREAMING) begin + if (~CONFIG_NETWORK_CROSS_CLOCK_AXI[CONFIG_ID_LAYOUT_TRANSFORM]) begin + $fatal(1, "Compiling layout transform streaming design without AXI clock-crossing enabled."); + end + assign config_lt_valid_stream = config_network_output_valid[CONFIG_ID_LAYOUT_TRANSFORM]; + assign config_lt_data_stream = config_network_output_data [CONFIG_ID_LAYOUT_TRANSFORM]; + assign config_network_output_ready[CONFIG_ID_LAYOUT_TRANSFORM] = config_lt_ready_stream; + + assign config_lt_valid_ddr = 1'b0; + assign config_lt_data_ddr = 'x; + end else begin + assign config_lt_valid_ddr = 1'b0; + assign config_lt_data_ddr = 'x; + assign config_lt_valid_stream = 1'b0; + assign config_lt_data_stream = 'x; + end + + dla_dma #( + .CSR_ADDR_WIDTH (CSR_ADDR_WIDTH), + .CSR_DATA_BYTES (CSR_DATA_BYTES), + .CONFIG_DATA_BYTES (CONFIG_DATA_BYTES), + .CONFIG_READER_DATA_BYTES (CONFIG_READER_DATA_BYTES), + .FILTER_READER_DATA_BYTES (FILTER_READER_DATA_BYTES), + .FEATURE_READER_DATA_BYTES (FEATURE_READER_DATA_BYTES), + .FEATURE_WRITER_DATA_BYTES (FEATURE_WRITER_DATA_BYTES), + .DDR_ADDR_WIDTH (DDR_ADDR_WIDTH), + .DDR_DATA_BYTES (DDR_DATA_BYTES), + .DDR_BURST_WIDTH (DDR_BURST_WIDTH), + .DDR_READ_ID_WIDTH (DDR_READ_ID_WIDTH), + .DEVICE (DEVICE_ENUM), + .LT_ARCH (LT_ARCH), + .ENABLE_INPUT_STREAMING (ENABLE_INPUT_STREAMING), + .ENABLE_OUTPUT_STREAMING (ENABLE_OUTPUT_STREAMER), + .ENABLE_ON_CHIP_PARAMETERS (ENABLE_ON_CHIP_PARAMETERS) + ) + dma + ( + .clk_ddr (clk_ddr), + .clk_dla (clk_dla), + .clk_pcie (clk_pcie), + .i_resetn_async (w_resetn_async), + .o_interrupt_level (o_interrupt_level), + .i_token_error (lt_param_error), //TODO intended for other parts of DLA to communicate to the host that some error has occurred + .i_stream_started (reading_first_word), //indicates that the first word of the input stream is being read, synchronized to DDR clock + .i_stream_done (ostream_tlast_ddr_clk), // ostream TLAST signal synchronized to the DDR clock + .i_stream_received_first_word (streaming_first_word_received), + .i_stream_sent_last_word (streaming_last_word_sent), + .o_request_ip_reset (reset_request_from_csr), //enables CSR to request reset of coreDLA IP + .i_csr_arvalid (i_csr_arvalid), + .i_csr_araddr (i_csr_araddr), + .o_csr_arready (o_csr_arready), + .o_csr_rvalid (o_csr_rvalid), + .o_csr_rdata (o_csr_rdata), + .i_csr_rready (i_csr_rready), + .i_csr_awvalid (i_csr_awvalid), + .i_csr_awaddr (i_csr_awaddr), + .o_csr_awready (o_csr_awready), + .i_csr_wvalid (i_csr_wvalid), + .i_csr_wdata (i_csr_wdata), + .o_csr_wready (o_csr_wready), + .o_csr_bvalid (o_csr_bvalid), + .i_csr_bready (i_csr_bready), + .o_config_reader_valid (config_network_input_valid), + .o_config_reader_data (config_network_input_data), + .i_config_reader_ready (config_network_input_ready), + .i_config_filter_reader_valid (config_network_output_valid[CONFIG_ID_FILTER_READER]), + .i_config_filter_reader_data (config_network_output_data [CONFIG_ID_FILTER_READER]), + .o_config_filter_reader_ready (config_network_output_ready[CONFIG_ID_FILTER_READER]), + .o_filter_reader_valid (filter_reader_valid), + .o_filter_reader_data (filter_reader_data), + .i_filter_reader_ready (filter_reader_ready), + .i_config_feature_reader_valid (config_network_output_valid[CONFIG_ID_FEATURE_READER]), + .i_config_feature_reader_data (config_network_output_data [CONFIG_ID_FEATURE_READER]), + .o_config_feature_reader_ready (config_network_output_ready[CONFIG_ID_FEATURE_READER]), + .i_config_lt_reader_valid (config_lt_valid_ddr), + .i_config_lt_reader_data (config_lt_data_ddr), + .o_config_lt_reader_ready (config_lt_ready_ddr), + .o_feature_reader_valid (feature_reader_valid), + .o_feature_reader_data (feature_reader_data), + .i_feature_reader_ready (feature_reader_ready), + .i_config_feature_writer_valid (config_network_output_valid[CONFIG_ID_FEATURE_WRITER]), + .i_config_feature_writer_data (config_network_output_data [CONFIG_ID_FEATURE_WRITER]), + .o_config_feature_writer_ready (config_network_output_ready[CONFIG_ID_FEATURE_WRITER]), + .i_feature_writer_valid (feature_writer_valid), + .i_feature_writer_data (feature_writer_data), + .o_feature_writer_ready (feature_writer_ready), + .o_debug_network_arvalid (debug_network_csr_arvalid), + .o_debug_network_araddr (debug_network_csr_araddr), + .i_debug_network_arready (debug_network_csr_arready), + .i_debug_network_rvalid (debug_network_csr_rvalid), + .i_debug_network_rdata (debug_network_csr_rdata), + .o_debug_network_rready (debug_network_csr_rready), + .o_ddr_arvalid (o_ddr_arvalid), + .o_ddr_araddr (o_ddr_araddr), + .o_ddr_arlen (o_ddr_arlen), + .o_ddr_arsize (o_ddr_arsize), + .o_ddr_arburst (o_ddr_arburst), + .o_ddr_arid (o_ddr_arid), + .i_ddr_arready (i_ddr_arready), + .i_ddr_rvalid (i_ddr_rvalid), + .i_ddr_rdata (i_ddr_rdata), + .i_ddr_rid (i_ddr_rid), + .o_ddr_rready (o_ddr_rready), + .o_ddr_awvalid (o_ddr_awvalid), + .o_ddr_awaddr (o_ddr_awaddr), + .o_ddr_awlen (o_ddr_awlen), + .o_ddr_awsize (o_ddr_awsize), + .o_ddr_awburst (o_ddr_awburst), + .i_ddr_awready (i_ddr_awready), + .o_ddr_wvalid (o_ddr_wvalid), + .o_ddr_wdata (o_ddr_wdata), + .o_ddr_wstrb (o_ddr_wstrb), + .o_ddr_wlast (o_ddr_wlast), + .i_ddr_wready (i_ddr_wready), + .i_ddr_bvalid (i_ddr_bvalid), + .o_ddr_bready (o_ddr_bready), + .o_streaming_active (streaming_active) + ); + + logic raw_feature_writer_valid; + logic [8*FEATURE_WRITER_DATA_BYTES-1:0] raw_feature_writer_data; + logic raw_feature_writer_ready; + logic raw_feature_writer_full; + logic feature_writer_empty; + + logic xbar_dout0_valid; + logic [AUX_OUTPUT_DATA_WIDTHS[0]-1:0] xbar_dout0_data; + logic [AUX_OUTPUT_DATA_WIDTHS[0]-1:0] xbar_demuxed_data; + logic xbar_dout0_ready; + logic xbar_dout0_done; + + logic xbar_dout1_valid; + logic [AUX_OUTPUT_DATA_WIDTHS[0]-1:0] xbar_dout1_data; + logic xbar_dout1_ready; + + dla_pe_array_system_de5a_area_A10 #( + .SEQUENCER_ARCH(SEQUENCER_ARCH), + .SCRATCHPAD_ARCH(SCRATCHPAD_ARCH), + .PE_ARRAY_ARCH(PE_ARRAY_ARCH), + .EXIT_FIFO_ARCH(EXIT_FIFO_ARCH), + .INPUT_FEEDER_ARCH(INPUT_FEEDER_ARCH), + + .CONFIG_WIDTH(CONFIG_WIDTH), + .PE_ARRAY_OUTPUT_DATA_WIDTH(PE_ARRAY_OUTPUT_DATA_WIDTH), + .INPUT_FEEDER_INPUT_DATA_WIDTH(INPUT_FEEDER_INPUT_DATA_WIDTH), + .FEATURE_READER_WIDTH(FEATURE_READER_WIDTH), + .FILTER_READER_WIDTH(FILTER_READER_WIDTH), + .SCRATCHPAD_LATENCY(SCRATCHPAD_LATENCY) + ) pe_array_system ( + .clk (clk_dla), + .i_aresetn (w_resetn_async), + + .i_feeder_mux_config_data (config_network_output_data [CONFIG_ID_INPUT_FEEDER_MUX]), + .o_feeder_mux_config_ready (config_network_output_ready[CONFIG_ID_INPUT_FEEDER_MUX]), + .i_feeder_mux_config_valid (config_network_output_valid[CONFIG_ID_INPUT_FEEDER_MUX]), + .i_feeder_writer_config_data (config_network_output_data [CONFIG_ID_INPUT_FEEDER_WRITER]), + .o_feeder_writer_config_ready(config_network_output_ready[CONFIG_ID_INPUT_FEEDER_WRITER]), + .i_feeder_writer_config_valid(config_network_output_valid[CONFIG_ID_INPUT_FEEDER_WRITER]), + .i_feeder_in_config_data (config_network_output_data [CONFIG_ID_INPUT_FEEDER_IN]), + .o_feeder_in_config_ready (config_network_output_ready[CONFIG_ID_INPUT_FEEDER_IN]), + .i_feeder_in_config_valid (config_network_output_valid[CONFIG_ID_INPUT_FEEDER_IN]), + .i_feeder_reader_config_data (config_network_output_data [CONFIG_ID_INPUT_FEEDER_READER]), + .o_feeder_reader_config_ready(config_network_output_ready[CONFIG_ID_INPUT_FEEDER_READER]), + .i_feeder_reader_config_valid(config_network_output_valid[CONFIG_ID_INPUT_FEEDER_READER]), + .i_feeder_out_config_data (config_network_output_data [CONFIG_ID_INPUT_FEEDER_OUT]), + .o_feeder_out_config_ready (config_network_output_ready[CONFIG_ID_INPUT_FEEDER_OUT]), + .i_feeder_out_config_valid (config_network_output_valid[CONFIG_ID_INPUT_FEEDER_OUT]), + + .i_feature_input_data (feature_reader_data), + .o_feature_input_ready (feature_reader_ready), + .i_feature_input_valid (feature_reader_valid), + + .i_istream_data (istream_data), + .o_istream_ready (istream_ready), + .i_istream_valid (istream_valid), + + .i_filter_data (filter_reader_data), + .o_filter_ready (filter_reader_ready), + .i_filter_valid (filter_reader_valid), + + .i_xbar_writeback_input_data (aux_data), + .o_xbar_writeback_input_ready(aux_ready), + .i_xbar_writeback_input_valid(aux_valid), + + .o_pe_array_output_data (pe_array_output_data), + .i_pe_array_output_ready (pe_array_output_ready), + .o_pe_array_output_valid (pe_array_output_valid), + + .o_pc_input_feeder_to_sequencer_valid (pc_input_feeder_to_sequencer_valid), + .o_pc_input_feeder_to_sequencer_ready (pc_input_feeder_to_sequencer_ready), + + .o_first_word_received (streaming_first_word_received) + ); + + localparam int MAX_XBAR_INTERFACE_PAIRS = NUMBER_OF_KERNELS+1; + localparam int XBAR_WA_GROUP_NUM = 1;//PE_ARRAY_ARCH.NUM_LANES; + localparam int XBAR_WA_GROUP_DELAY = PE_ARRAY_ARCH.GROUP_DELAY; + localparam int WA_ELEMENT_WIDTH = 1; + + logic [MAX_XBAR_INTERFACE_PAIRS-1:0] din_to_xbar_valid; + logic [AUX_MAX_DATABUS_WIDTH -1:0] din_to_xbar_data_w[MAX_XBAR_INTERFACE_PAIRS-1:0]; + logic [MAX_XBAR_INTERFACE_PAIRS-1:0] din_to_xbar_ready; + + logic [MAX_XBAR_INTERFACE_PAIRS-1:1] dout_from_xbar_valid_w; + logic [AUX_MAX_DATABUS_WIDTH -1:0] dout_from_xbar_data_w [MAX_XBAR_INTERFACE_PAIRS-1:1]; + logic [MAX_XBAR_INTERFACE_PAIRS-1:1] dout_from_xbar_ready; + + // Width Adapter for the output signal from PE Array + dla_width_adapter #( + .GROUP_NUM (XBAR_WA_GROUP_NUM ), + .GROUP_DELAY (XBAR_WA_GROUP_DELAY ), + .INPUT_DATA_WIDTH_IN_ELEMENTS (PE_ARRAY_OUTPUT_DATA_WIDTH), + .OUTPUT_DATA_WIDTH_IN_ELEMENTS (AUX_MAX_DATABUS_WIDTH ), + .ELEMENT_WIDTH (WA_ELEMENT_WIDTH ) + ) wa_pe_output_inst ( + .clock (clk_dla ), + .i_aresetn (w_resetn_async ), + .i_flush (1'b0 ), + .o_din_ready (pe_array_output_ready), + .i_din_valid (pe_array_output_valid), + .i_din_data (pe_array_output_data ), + .i_dout_ready (din_to_xbar_ready[XBAR_ID_PE_ARRAY] ), + .o_dout_valid (din_to_xbar_valid[XBAR_ID_PE_ARRAY] ), + .o_dout_data (din_to_xbar_data_w[XBAR_ID_PE_ARRAY]) + ); + + dla_xbar #( + .NUMBER_OF_KERNELS (NUMBER_OF_KERNELS ), + .GROUP_NUM (XBAR_WA_GROUP_NUM ), + .GROUP_DELAY (XBAR_WA_GROUP_DELAY ), + .CONFIG_BUS_WIDTH (CONFIG_WIDTH ), + .DEBUG_BUS_WIDTH (DEBUG_NETWORK_DATA_WIDTH ), + .DEBUG_ADDR_WIDTH (DEBUG_NETWORK_ADDR_LOWER ), + .AUX_XBAR_MUX_OUTPUT_PIPELINE_STAGES (AUX_XBAR_MUX_OUTPUT_PIPELINE_STAGES ), + .AUX_XBAR_NONSTALLABLE_OUTPUT_PIPELINE_STAGES (AUX_XBAR_NONSTALLABLE_OUTPUT_PIPELINE_STAGES), + .AUX_XBAR_OUTPUT_BP_FIFO_DEPTH (AUX_XBAR_OUTPUT_BP_FIFO_DEPTH ), + .AUX_GROUP_MAX_DATABUS_WIDTH (AUX_MAX_DATABUS_WIDTH ), + .AUX_XBAR_INPUT_COUNTER_WIDTH (AUX_XBAR_INPUT_COUNTER_WIDTH ), + .AUX_XBAR_OUTPUT_COUNTER_WIDTH (AUX_XBAR_OUTPUT_COUNTER_WIDTH ), + .AUX_INPUT_DATA_WIDTHS (AUX_INPUT_DATA_WIDTHS ), + .AUX_OUTPUT_DATA_WIDTHS (AUX_OUTPUT_DATA_WIDTHS ), + .XBAR_KERNEL_BYPASS_FEATURE_ENABLE (XBAR_KERNEL_BYPASS_FEATURE_ENABLE ), + .AUX_KERNEL_BYPASSABLE (AUX_KERNEL_BYPASSABLE ), + .AUX_KERNEL_CONNECTIVITY_VECTOR (AUX_KERNEL_CONNECTIVITY_VECTOR ) + ) xbar_inst ( + .clock (clk_dla ), // All aux-kernels (including Xbar) operate on single clock domain + .i_aresetn (w_resetn_async ), // Async ACTIVE-LOW reset - Will be internally synched using generic-synchronizer + .i_config_valid (config_network_output_valid[CONFIG_ID_XBAR]), // Valid signal + .i_config_data (config_network_output_data[CONFIG_ID_XBAR] ), // Data bus + .o_config_ready (config_network_output_ready[CONFIG_ID_XBAR]), // Ready signal - Prefetches one full set of config to avoid input stalling + + .i_debug_raddr(), // Debug AXI read-address port + .i_debug_raddr_valid(), + .o_debug_raddr(), // Debug AXI read-address port response + .i_debug_rdata(), // Debug AXI read-data port response + .o_debug_rdata(), // Debug AXI read-data port + .o_debug_rdata_valid(), + + //Xbar inputs (includes data coming from the pe array + .i_din_to_xbar_valid (din_to_xbar_valid ), + .i_din_to_xbar_data (din_to_xbar_data_w ), + .o_din_to_xbar_ready (din_to_xbar_ready ), + + //Outputs from the xbar to aux kernels + .o_dout_from_xbar_valid(dout_from_xbar_valid_w ), + .o_dout_from_xbar_data (dout_from_xbar_data_w ), + .i_dout_from_xbar_ready(dout_from_xbar_ready ), + + //Primary outputs from the xbar to the feature writer/pe array system + .o_xbar_dout0_valid (xbar_dout0_valid ), + .o_xbar_dout0_data (xbar_dout0_data ), + .i_xbar_dout0_ready (xbar_dout0_ready ), + .o_xbar_dout0_done (xbar_dout0_done ), + .o_xbar_dout1_valid (xbar_dout1_valid ), + .o_xbar_dout1_data (xbar_dout1_data ), + .i_xbar_dout1_ready (xbar_dout1_ready ) + ); + + // parameter structs shared by all aux modules. + + if (ENABLE_ACTIVATION == 1) begin + localparam int AUX_ACTIVATION_OUTPUT_BUFFER_FIFO_CUTOFF = + dla_aux_activation_pkg::dla_aa_activation_core_latency(DEVICE_ENUM, ACTIVATION_TYPE); + localparam int AUX_ACTIVATION_OUTPUT_BUFFER_FIFO_DEPTH = + calc_hld_fifo_depth(AUX_ACTIVATION_OUTPUT_BUFFER_FIFO_CUTOFF); + + localparam dla_aux_activation_pkg::stream_params_t AUX_ACTIVATION_CONFIG_STREAM_PARAMS = '{ // Config stream parameterization + DATA_WIDTH : CONFIG_WIDTH}; + + localparam dla_aux_activation_pkg::debug_axi_params_t AUX_ACTIVATION_DEBUG_AXI_PARAMS = '{ // Debug AXI bus parameterization + DATA_WIDTH : DEBUG_NETWORK_DATA_WIDTH, + ADDR_WIDTH : DEBUG_NETWORK_ADDR_LOWER}; + + // In future, when activation is relu only, the module may not need + // to be connected to config network and can have a confid = -1 + // But for now still assert that config_id != -1. + if (XBAR_ID_ACTIVATION < 1 || CONFIG_ID_ACTIVATION == -1) begin + $fatal(1, "Activation is enabled with invalid ID"); + end + + localparam NATIVE_VECTOR_SIZE = PE_ARRAY_ARCH.NUM_FILTERS * PE_ARRAY_ARCH.NUM_PES * PE_ARRAY_ARCH.NUM_INTERLEAVED_FILTERS; + + localparam dla_interface_pkg::aux_data_pack_params_t AUX_ACTIVATION_DATA_PACK_PARAMS = '{ // Data packing parameterization + ELEMENT_BITS : 16, // PE output is always FP16. hardcode this value to 16 + VECTOR_SIZE : ACTIVATION_K_VECTOR, + NATIVE_VECTOR_SIZE : NATIVE_VECTOR_SIZE, // The original pe_k_vector + GROUP_SIZE : PE_ARRAY_ARCH.NUM_FEATURES, + GROUP_NUM : PE_ARRAY_ARCH.NUM_LANES, + GROUP_DELAY : ACTIVATION_GROUP_DELAY}; // temporarily set to 1 by arch_param.cpp + + // Todo: properly parameterize it + localparam dla_aux_activation_pkg::aux_generic_params_t AUX_ACTIVATION_GENERIC_PARAMS = '{ // Parameterization common among all aux blocks + INPUT_BUFFER_REG_STAGES : 1, + OUTPUT_BUFFER_FIFO_CUTOFF : AUX_ACTIVATION_OUTPUT_BUFFER_FIFO_CUTOFF, + OUTPUT_BUFFER_FIFO_DEPTH : AUX_ACTIVATION_OUTPUT_BUFFER_FIFO_DEPTH, + COMMAND_BUFFER_DEPTH : 1, + PER_GROUP_CONTROL : 0, + DEBUG_LEVEL : 0, + DEBUG_ID : 0, + DEBUG_EVENT_DEPTH : 0}; + + localparam dla_aux_activation_pkg::aux_special_params_t AUX_ACTIVATION_SPECIAL_PARAMS = '{ // Parameterization special to this aux blocks + ENABLE_ACTIVATIONS : ACTIVATION_TYPE, + MAX_TILE_WIDTH : AUX_MAX_TILE_WIDTH, + MAX_TILE_HEIGHT : AUX_MAX_TILE_HEIGHT, + MAX_TILE_CHANNELS : AUX_MAX_TILE_CHANNELS / NATIVE_VECTOR_SIZE, // TODO: commonize this across aux modules + PARAM_CACHE_DEPTH : ACTIVATION_PARAM_CACHE_DEPTH, + ENABLE_DSP_MULT : ACTIVATION_ENABLE_DSP_MULT, // temporarily set to 0 by arch_param.cpp + ENABLE_DSP_CONV : ACTIVATION_ENABLE_DSP_CONV, // temporarily set to 0 by arch_param.cpp + DEVICE : DEVICE_ENUM}; + + // config data + logic [AUX_ACTIVATION_CONFIG_STREAM_PARAMS.DATA_WIDTH-1:0] config_stream; + logic config_stream_valid; + assign config_stream = config_network_output_data[CONFIG_ID_ACTIVATION]; + assign config_stream_valid = config_network_output_valid[CONFIG_ID_ACTIVATION]; + // config response + dla_aux_activation_pkg::generic_response_t config_response; + assign config_network_output_ready[CONFIG_ID_ACTIVATION] = config_response.ready; + + // This function aux_params_to_bus_width() resturns the total bus width of AUX data bus based on the different elements of the bus + localparam dla_aux_activation_pkg::stream_params_t DATA_STREAM_PARAMS = '{DATA_WIDTH : dla_aux_activation_pkg::aux_params_to_bus_width(AUX_ACTIVATION_DATA_PACK_PARAMS) }; + + // input data + logic [DATA_STREAM_PARAMS.DATA_WIDTH-1:0] activation_input_stream; + logic activation_input_stream_valid; + // input response + dla_aux_activation_pkg::generic_response_t activation_input_response; + + // output data + logic [DATA_STREAM_PARAMS.DATA_WIDTH-1:0] activation_output_stream; + logic activation_output_stream_valid; + // output response + dla_aux_activation_pkg::generic_response_t activation_output_response; + + // NOTE:: For aux-kernels, data-bus width of the side of WA facing the Xbar is derived based on the + // parameter array containing all input/output bus widths of kernels. + // - [0] location of AUX_INPUT_DATA_WIDTHS correspondes to PII/PE-Array-Output + // - [0] location of AUX_OUTPUT_DATA_WIDTHS correspondes to POI + dla_width_adapter #( + .GROUP_NUM (XBAR_WA_GROUP_NUM ), + .GROUP_DELAY (XBAR_WA_GROUP_DELAY ), + .INPUT_DATA_WIDTH_IN_ELEMENTS (AUX_OUTPUT_DATA_WIDTHS[XBAR_ID_ACTIVATION]), + .OUTPUT_DATA_WIDTH_IN_ELEMENTS(dla_aux_activation_pkg::aux_params_to_bus_width(AUX_ACTIVATION_DATA_PACK_PARAMS)), + .ELEMENT_WIDTH (WA_ELEMENT_WIDTH ) + ) wa_relu_input_inst ( + .clock (clk_dla ), + .i_aresetn (w_resetn_async ), + .i_flush (1'b0 ), + .o_din_ready (dout_from_xbar_ready[XBAR_ID_ACTIVATION] ), + .i_din_valid (dout_from_xbar_valid_w[XBAR_ID_ACTIVATION]), + .i_din_data (dout_from_xbar_data_w[XBAR_ID_ACTIVATION] ), + .i_dout_ready(activation_input_response.ready ), + .o_dout_valid(activation_input_stream_valid ), + .o_dout_data (activation_input_stream ) + ); + + dla_aux_activation_top #( + .AUX_DATA_PACK_PARAMS(AUX_ACTIVATION_DATA_PACK_PARAMS), + .CONFIG_STREAM_PARAMS(AUX_ACTIVATION_CONFIG_STREAM_PARAMS), + .DEBUG_AXI_PARAMS(AUX_ACTIVATION_DEBUG_AXI_PARAMS), + .AUX_GENERIC_PARAMS(AUX_ACTIVATION_GENERIC_PARAMS), + .AUX_SPECIAL_PARAMS(AUX_ACTIVATION_SPECIAL_PARAMS) + ) aux_activation_inst ( + .clk (clk_dla), // Clock + .i_aresetn (w_resetn_async), // Asynchronous reset, active low + .i_data (activation_input_stream), // Data input stream port + .i_data_valid (activation_input_stream_valid), + .o_data (activation_input_response), // Data input stream port response + .i_result (activation_output_response), // Result output stream port response + .o_result (activation_output_stream), // Result output stream port + .o_result_valid (activation_output_stream_valid), + .i_config (config_stream), // Config stream port + .i_config_valid (config_stream_valid), + .o_config (config_response), // Config stream port response + .i_debug_raddr (), + .i_debug_raddr_valid(), + .o_debug_raddr (), + .i_debug_rdata (), + .o_debug_rdata (), + .o_debug_rdata_valid() + ); + + dla_width_adapter #( + .GROUP_NUM (XBAR_WA_GROUP_NUM ), + .GROUP_DELAY (XBAR_WA_GROUP_DELAY ), + .INPUT_DATA_WIDTH_IN_ELEMENTS (dla_aux_activation_pkg::aux_params_to_bus_width(AUX_ACTIVATION_DATA_PACK_PARAMS)), + .OUTPUT_DATA_WIDTH_IN_ELEMENTS(AUX_INPUT_DATA_WIDTHS[XBAR_ID_ACTIVATION]), + .ELEMENT_WIDTH (WA_ELEMENT_WIDTH ) + ) wa_relu_output_inst ( + .clock (clk_dla ), + .i_aresetn (w_resetn_async ), + .i_flush (1'b0 ), + .o_din_ready (activation_output_response.ready ), + .i_din_valid (activation_output_stream_valid ), + .i_din_data (activation_output_stream ), + .i_dout_ready(din_to_xbar_ready[XBAR_ID_ACTIVATION] ), + .o_dout_valid(din_to_xbar_valid[XBAR_ID_ACTIVATION] ), + .o_dout_data (din_to_xbar_data_w[XBAR_ID_ACTIVATION]) + ); + + // Snoop signals for the profiling counters + assign pc_config_to_activation_valid = config_stream_valid; + assign pc_config_to_activation_ready = config_response.ready; + assign pc_xbar_to_activation_valid = activation_input_stream_valid; + assign pc_xbar_to_activation_ready = activation_input_response.ready; + assign pc_activation_to_xbar_valid = activation_output_stream_valid; + assign pc_activation_to_xbar_ready = activation_output_response.ready; + end + else begin + if (XBAR_ID_ACTIVATION != -1 || CONFIG_ID_ACTIVATION != -1) begin + $fatal(1, "Activation has an valid ID but it is disabled"); + end + + // Snoop signals for the profiling counters + assign pc_config_to_activation_valid = 1'b0; + assign pc_config_to_activation_ready = 1'b0; + assign pc_xbar_to_activation_valid = 1'b0; + assign pc_xbar_to_activation_ready = 1'b0; + assign pc_activation_to_xbar_valid = 1'b0; + assign pc_activation_to_xbar_ready = 1'b0; + end + + if (ENABLE_POOL == 1) begin + + localparam int AUX_POOL_INPUT_BUFFER_REG_STAGES = 1; + + localparam int AUX_POOL_NATIVE_VECTOR_SIZE = + PE_ARRAY_ARCH.NUM_FILTERS * PE_ARRAY_ARCH.NUM_PES * PE_ARRAY_ARCH.NUM_INTERLEAVED_FILTERS; + + localparam dla_aux_pool_pkg::stream_params_t AUX_POOL_CONFIG_STREAM_PARAMS = '{ // Config stream parameterization + DATA_WIDTH : CONFIG_WIDTH}; + + localparam dla_aux_pool_pkg::debug_axi_params_t AUX_POOL_DEBUG_AXI_PARAMS = '{ // Debug AXI bus parameterization + DATA_WIDTH : DEBUG_NETWORK_DATA_WIDTH, + ADDR_WIDTH : DEBUG_NETWORK_ADDR_LOWER}; + + localparam dla_interface_pkg::aux_data_pack_params_t AUX_POOL_DATA_PACK_PARAMS = '{ // Data packing parameterization + ELEMENT_BITS : 16, // PE output is always FP16. hardcode this value to 16 + VECTOR_SIZE : POOL_K_VECTOR, + NATIVE_VECTOR_SIZE : AUX_POOL_NATIVE_VECTOR_SIZE, // The original pe_k_vector + GROUP_SIZE : PE_ARRAY_ARCH.NUM_FEATURES, + GROUP_NUM : PE_ARRAY_ARCH.NUM_LANES, + GROUP_DELAY : POOL_GROUP_DELAY}; // temporarily set to 1 by arch_param.cpp + + localparam dla_aux_pool_pkg::aux_special_params_t AUX_POOL_SPECIAL_PARAMS = '{ // Parameterization special to this aux blocks + POOL_TYPE : POOL_TYPE, + MAX_WINDOW_HEIGHT : POOL_MAX_WINDOW_HEIGHT, + MAX_WINDOW_WIDTH : POOL_MAX_WINDOW_WIDTH, + MAX_STRIDE_VERTICAL : POOL_MAX_STRIDE_VERTICAL, + MAX_STRIDE_HORIZONTAL: POOL_MAX_STRIDE_HORIZONTAL, + MAX_TILE_HEIGHT : AUX_MAX_TILE_HEIGHT, + MAX_TILE_WIDTH : AUX_MAX_TILE_WIDTH, + MAX_TILE_CHANNELS : AUX_MAX_TILE_CHANNELS, + CONFIG_ID_WIDTH : POOL_CONFIG_ID_WIDTH, + PIPELINE_REG_NUM : POOL_PIPELINE_REG_NUM}; + + localparam int AUX_POOL_OUTPUT_BUFFER_FIFO_CUTOFF = aux_pool_calc_core_latency(AUX_POOL_SPECIAL_PARAMS, AUX_POOL_DATA_PACK_PARAMS); + localparam int AUX_POOL_OUTPUT_BUFFER_FIFO_DEPTH = calc_hld_fifo_depth(AUX_POOL_OUTPUT_BUFFER_FIFO_CUTOFF); + + localparam dla_aux_pool_pkg::aux_generic_params_t AUX_POOL_GENERIC_PARAMS = '{ // Parameterization common among all aux blocks + INPUT_BUFFER_REG_STAGES : AUX_POOL_INPUT_BUFFER_REG_STAGES, + OUTPUT_BUFFER_FIFO_CUTOFF : AUX_POOL_OUTPUT_BUFFER_FIFO_CUTOFF, + OUTPUT_BUFFER_FIFO_DEPTH : AUX_POOL_OUTPUT_BUFFER_FIFO_DEPTH, + COMMAND_BUFFER_DEPTH : 1, + PER_GROUP_CONTROL : 0, + DEBUG_LEVEL : 0, + DEBUG_ID : 0, + DEBUG_EVENT_DEPTH : 0}; + + // config data + logic [AUX_POOL_CONFIG_STREAM_PARAMS.DATA_WIDTH-1:0] config_stream; + logic config_stream_valid; + assign config_stream = config_network_output_data[CONFIG_ID_POOL]; + assign config_stream_valid = config_network_output_valid[CONFIG_ID_POOL]; + // config response + dla_aux_pool_pkg::generic_response_t config_response; + assign config_network_output_ready[CONFIG_ID_POOL] = config_response.ready; + + // This function aux_params_to_bus_width() returns the total bus width of AUX data bus based on the different elements of the bus + localparam dla_aux_pool_pkg::stream_params_t DATA_STREAM_PARAMS = '{DATA_WIDTH : dla_aux_pool_pkg::aux_params_to_bus_width(AUX_POOL_DATA_PACK_PARAMS) }; + + // input data + logic [DATA_STREAM_PARAMS.DATA_WIDTH-1:0] pool_input_stream; + logic pool_input_stream_valid; + // input response + dla_aux_pool_pkg::generic_response_t pool_input_response; + + // output data + logic [DATA_STREAM_PARAMS.DATA_WIDTH-1:0] pool_output_stream; + logic pool_output_stream_valid; + // output response + dla_aux_pool_pkg::generic_response_t pool_output_response; + + // NOTE:: For aux-kernels, data-bus width of the side of WA facing the Xbar is derived based on the + // parameter array containing all input/output bus widths of kernels. + // - [0] location of AUX_INPUT_DATA_WIDTHS correspondes to PII/PE-Array-Output + // - [0] location of AUX_OUTPUT_DATA_WIDTHS correspondes to POI + dla_width_adapter #( + .GROUP_NUM (XBAR_WA_GROUP_NUM ), + .GROUP_DELAY (XBAR_WA_GROUP_DELAY ), + .INPUT_DATA_WIDTH_IN_ELEMENTS (AUX_OUTPUT_DATA_WIDTHS[XBAR_ID_POOL]), + .OUTPUT_DATA_WIDTH_IN_ELEMENTS(dla_aux_pool_pkg::aux_params_to_bus_width(AUX_POOL_DATA_PACK_PARAMS)), + .ELEMENT_WIDTH (WA_ELEMENT_WIDTH ) + ) wa_pool_input_inst ( + .clock (clk_dla ), + .i_aresetn (w_resetn_async ), + .i_flush (1'b0 ), + .o_din_ready (dout_from_xbar_ready[XBAR_ID_POOL] ), + .i_din_valid (dout_from_xbar_valid_w[XBAR_ID_POOL]), + .i_din_data (dout_from_xbar_data_w[XBAR_ID_POOL] ), + .i_dout_ready(pool_input_response.ready ), + .o_dout_valid(pool_input_stream_valid ), + .o_dout_data (pool_input_stream ) + ); + + dla_aux_pool_top #( + .AUX_DATA_PACK_PARAMS(AUX_POOL_DATA_PACK_PARAMS), + .CONFIG_STREAM_PARAMS(AUX_POOL_CONFIG_STREAM_PARAMS), + .DEBUG_AXI_PARAMS(AUX_POOL_DEBUG_AXI_PARAMS), + .AUX_GENERIC_PARAMS(AUX_POOL_GENERIC_PARAMS), + .AUX_SPECIAL_PARAMS(AUX_POOL_SPECIAL_PARAMS) + ) pool_inst ( + .clk(clk_dla) , // Clock + .i_aresetn(w_resetn_async) , // Active-low sync reset + // + .i_data(pool_input_stream) , // Data input stream port + .i_data_valid(pool_input_stream_valid), + .o_data(pool_input_response) , // Data input stream port response + // + .i_result(pool_output_response) , // Result output stream port response + .o_result(pool_output_stream) , // Result output stream port + .o_result_valid(pool_output_stream_valid), + // + + .i_config(config_stream) , // Config stream port + .i_config_valid(config_stream_valid), + .o_config(config_response) , // Config stream port response + // + .i_debug_raddr(), + .i_debug_raddr_valid(), + .o_debug_raddr(), + .i_debug_rdata(), + .o_debug_rdata(), + .o_debug_rdata_valid() + ); + + + dla_width_adapter #( + .GROUP_NUM (XBAR_WA_GROUP_NUM ), + .GROUP_DELAY (XBAR_WA_GROUP_DELAY ), + .INPUT_DATA_WIDTH_IN_ELEMENTS (dla_aux_pool_pkg::aux_params_to_bus_width(AUX_POOL_DATA_PACK_PARAMS)), + .OUTPUT_DATA_WIDTH_IN_ELEMENTS(AUX_INPUT_DATA_WIDTHS[XBAR_ID_POOL]), + .ELEMENT_WIDTH (WA_ELEMENT_WIDTH ) + ) wa_pool_output_inst ( + .clock (clk_dla ), + .i_aresetn (w_resetn_async ), + .i_flush (1'b0 ), + .o_din_ready (pool_output_response.ready ), + .i_din_valid (pool_output_stream_valid ), + .i_din_data (pool_output_stream ), + .i_dout_ready(din_to_xbar_ready[XBAR_ID_POOL] ), + .o_dout_valid(din_to_xbar_valid[XBAR_ID_POOL] ), + .o_dout_data (din_to_xbar_data_w[XBAR_ID_POOL]) + ); + + // Snoop signals for the profiling counters + assign pc_config_to_pool_valid = config_stream_valid; + assign pc_config_to_pool_ready = config_response.ready; + assign pc_xbar_to_pool_valid = pool_input_stream_valid; + assign pc_xbar_to_pool_ready = pool_input_response.ready; + assign pc_pool_to_xbar_valid = pool_output_stream_valid; + assign pc_pool_to_xbar_ready = pool_output_response.ready; + end + else begin + // Snoop signals for the profiling counters + assign pc_config_to_pool_valid = 1'b0; + assign pc_config_to_pool_ready = 1'b0; + assign pc_xbar_to_pool_valid = 1'b0; + assign pc_xbar_to_pool_ready = 1'b0; + assign pc_pool_to_xbar_valid = 1'b0; + assign pc_pool_to_xbar_ready = 1'b0; + end + + if (ENABLE_DEPTHWISE == 1) begin + + localparam int AUX_DEPTHWISE_INPUT_BUFFER_REG_STAGES = 1; + + localparam int AUX_DEPTHWISE_NATIVE_VECTOR_SIZE = + PE_ARRAY_ARCH.NUM_FILTERS * PE_ARRAY_ARCH.NUM_PES * PE_ARRAY_ARCH.NUM_INTERLEAVED_FILTERS; + + localparam dla_aux_depthwise_pkg::stream_params_t AUX_DEPTHWISE_CONFIG_STREAM_PARAMS = '{ // Config stream parameterization + DATA_WIDTH : CONFIG_WIDTH}; + + localparam dla_aux_depthwise_pkg::debug_axi_params_t AUX_DEPTHWISE_DEBUG_AXI_PARAMS = '{ // Debug AXI bus parameterization + DATA_WIDTH : DEBUG_NETWORK_DATA_WIDTH, + ADDR_WIDTH : DEBUG_NETWORK_ADDR_LOWER}; + + localparam dla_interface_pkg::aux_data_pack_params_t AUX_DEPTHWISE_DATA_PACK_PARAMS = '{ // Data packing parameterization + ELEMENT_BITS : 16, // PE output is always FP16. hardcode this value to 16 + VECTOR_SIZE : DEPTHWISE_K_VECTOR, + NATIVE_VECTOR_SIZE : AUX_DEPTHWISE_NATIVE_VECTOR_SIZE, // The original pe_k_vector + GROUP_SIZE : PE_ARRAY_ARCH.NUM_FEATURES, + GROUP_NUM : PE_ARRAY_ARCH.NUM_LANES, + GROUP_DELAY : DEPTHWISE_GROUP_DELAY}; // temporarily set to 1 by arch_param.cpp + + localparam dla_aux_depthwise_pkg::aux_special_params_t AUX_DEPTHWISE_SPECIAL_PARAMS = '{ // Parameterization special to this aux blocks + DEPTHWISE_TYPE : DEPTHWISE_TYPE, + MAX_WINDOW_HEIGHT : DEPTHWISE_MAX_WINDOW_HEIGHT, + MAX_WINDOW_WIDTH : DEPTHWISE_MAX_WINDOW_WIDTH, + MAX_STRIDE_VERTICAL : DEPTHWISE_MAX_STRIDE_VERTICAL, + MAX_STRIDE_HORIZONTAL : DEPTHWISE_MAX_STRIDE_HORIZONTAL, + MAX_TILE_HEIGHT : AUX_MAX_TILE_HEIGHT, + MAX_TILE_WIDTH : AUX_MAX_TILE_WIDTH, + MAX_TILE_CHANNELS : AUX_MAX_TILE_CHANNELS, + CONFIG_ID_WIDTH : DEPTHWISE_CONFIG_ID_WIDTH, + PIPELINE_REG_NUM : DEPTHWISE_PIPELINE_REG_NUM, + MAX_DILATION_VERTICAL : DEPTHWISE_MAX_DILATION_VERTICAL, + MAX_DILATION_HORIZONTAL : DEPTHWISE_MAX_DILATION_HORIZONTAL}; + + localparam int AUX_DEPTHWISE_OUTPUT_BUFFER_FIFO_CUTOFF = aux_depthwise_calc_core_latency(AUX_DEPTHWISE_SPECIAL_PARAMS, + AUX_DEPTHWISE_DATA_PACK_PARAMS, + DEPTHWISE_VECTOR_ARCH_INFO); + localparam int AUX_DEPTHWISE_OUTPUT_BUFFER_FIFO_DEPTH = calc_hld_fifo_depth(AUX_DEPTHWISE_OUTPUT_BUFFER_FIFO_CUTOFF); + + localparam dla_aux_depthwise_pkg::aux_generic_params_t AUX_DEPTHWISE_GENERIC_PARAMS = '{ // Parameterization common among all aux blocks + INPUT_BUFFER_REG_STAGES : AUX_DEPTHWISE_INPUT_BUFFER_REG_STAGES, + OUTPUT_BUFFER_FIFO_CUTOFF : AUX_DEPTHWISE_OUTPUT_BUFFER_FIFO_CUTOFF, + OUTPUT_BUFFER_FIFO_DEPTH : AUX_DEPTHWISE_OUTPUT_BUFFER_FIFO_DEPTH, + COMMAND_BUFFER_DEPTH : 1, + PER_GROUP_CONTROL : 0, + DEBUG_LEVEL : 0, + DEBUG_ID : 0, + DEBUG_EVENT_DEPTH : 0}; + + // config data + logic [AUX_DEPTHWISE_CONFIG_STREAM_PARAMS.DATA_WIDTH-1:0] config_stream; + logic config_stream_valid; + assign config_stream = config_network_output_data[CONFIG_ID_DEPTHWISE]; + assign config_stream_valid = config_network_output_valid[CONFIG_ID_DEPTHWISE]; + // config response + dla_aux_depthwise_pkg::generic_response_t config_response; + assign config_network_output_ready[CONFIG_ID_DEPTHWISE] = config_response.ready; + + // This function aux_params_to_bus_width() returns the total bus width of AUX data bus based on the different elements of the bus + localparam dla_aux_depthwise_pkg::stream_params_t DATA_STREAM_PARAMS = '{DATA_WIDTH : dla_aux_depthwise_pkg::aux_params_to_bus_width(AUX_DEPTHWISE_DATA_PACK_PARAMS) }; + + // input data + logic [DATA_STREAM_PARAMS.DATA_WIDTH-1:0] depthwise_input_stream; + logic depthwise_input_stream_valid; + // input response + dla_aux_depthwise_pkg::generic_response_t depthwise_input_response; + + // output data + logic [DATA_STREAM_PARAMS.DATA_WIDTH-1:0] depthwise_output_stream; + logic depthwise_output_stream_valid; + // output response + dla_aux_depthwise_pkg::generic_response_t depthwise_output_response; + + // NOTE:: For aux-kernels, data-bus width of the side of WA facing the Xbar is derived based on the + // parameter array containing all input/output bus widths of kernels. + // - [0] location of AUX_INPUT_DATA_WIDTHS correspondes to PII/PE-Array-Output + // - [0] location of AUX_OUTPUT_DATA_WIDTHS correspondes to POI + dla_width_adapter #( + .GROUP_NUM (XBAR_WA_GROUP_NUM ), + .GROUP_DELAY (XBAR_WA_GROUP_DELAY ), + .INPUT_DATA_WIDTH_IN_ELEMENTS (AUX_OUTPUT_DATA_WIDTHS[XBAR_ID_DEPTHWISE]), + .OUTPUT_DATA_WIDTH_IN_ELEMENTS(dla_aux_depthwise_pkg::aux_params_to_bus_width(AUX_DEPTHWISE_DATA_PACK_PARAMS)), + .ELEMENT_WIDTH (WA_ELEMENT_WIDTH ) + ) wa_depthwise_input_inst ( + .clock (clk_dla ), + .i_aresetn (w_resetn_async ), + .i_flush (1'b0 ), + .o_din_ready (dout_from_xbar_ready[XBAR_ID_DEPTHWISE] ), + .i_din_valid (dout_from_xbar_valid_w[XBAR_ID_DEPTHWISE]), + .i_din_data (dout_from_xbar_data_w[XBAR_ID_DEPTHWISE] ), + .i_dout_ready(depthwise_input_response.ready ), + .o_dout_valid(depthwise_input_stream_valid ), + .o_dout_data (depthwise_input_stream ) + ); + + dla_aux_depthwise_top #( + .AUX_DATA_PACK_PARAMS(AUX_DEPTHWISE_DATA_PACK_PARAMS), + .CONFIG_STREAM_PARAMS(AUX_DEPTHWISE_CONFIG_STREAM_PARAMS), + .DEBUG_AXI_PARAMS(AUX_DEPTHWISE_DEBUG_AXI_PARAMS), + .AUX_GENERIC_PARAMS(AUX_DEPTHWISE_GENERIC_PARAMS), + .AUX_SPECIAL_PARAMS(AUX_DEPTHWISE_SPECIAL_PARAMS), + .AUX_DEPTHWISE_VECTOR_ARCH(AUX_DEPTHWISE_VECTOR_ARCH), + .DEPTHWISE_VECTOR_ARCH_INFO(DEPTHWISE_VECTOR_ARCH_INFO) + ) depthwise_inst ( + .clk(clk_dla) , // Clock + .i_aresetn(w_resetn_async) , // Active-low sync reset + // + .i_data(depthwise_input_stream) , // Data input stream port + .i_data_valid(depthwise_input_stream_valid), + .o_data(depthwise_input_response) , // Data input stream port response + // + .i_result(depthwise_output_response) , // Result output stream port response + .o_result(depthwise_output_stream) , // Result output stream port + .o_result_valid(depthwise_output_stream_valid), + // + + .i_config(config_stream) , // Config stream port + .i_config_valid(config_stream_valid), + .o_config(config_response) , // Config stream port response + + .i_config_filter_bias_valid (config_network_output_valid[CONFIG_ID_DEPTHWISE_FILTER_BIAS]), // Valid signal + .i_config_filter_bias_data (config_network_output_data[CONFIG_ID_DEPTHWISE_FILTER_BIAS] ), // Data bus + .o_config_filter_bias_ready (config_network_output_ready[CONFIG_ID_DEPTHWISE_FILTER_BIAS]), // Ready signal - Prefetches one full set of config to avoid input stalling + + // + .i_debug_raddr(), + .i_debug_raddr_valid(), + .o_debug_raddr(), + .i_debug_rdata(), + .o_debug_rdata(), + .o_debug_rdata_valid() + ); + + + dla_width_adapter #( + .GROUP_NUM (XBAR_WA_GROUP_NUM ), + .GROUP_DELAY (XBAR_WA_GROUP_DELAY ), + .INPUT_DATA_WIDTH_IN_ELEMENTS (dla_aux_depthwise_pkg::aux_params_to_bus_width(AUX_DEPTHWISE_DATA_PACK_PARAMS)), + .OUTPUT_DATA_WIDTH_IN_ELEMENTS(AUX_INPUT_DATA_WIDTHS[XBAR_ID_DEPTHWISE]), + .ELEMENT_WIDTH (WA_ELEMENT_WIDTH ) + ) wa_depthwise_output_inst ( + .clock (clk_dla ), + .i_aresetn (w_resetn_async ), + .i_flush (1'b0 ), + .o_din_ready (depthwise_output_response.ready ), + .i_din_valid (depthwise_output_stream_valid ), + .i_din_data (depthwise_output_stream ), + .i_dout_ready(din_to_xbar_ready[XBAR_ID_DEPTHWISE] ), + .o_dout_valid(din_to_xbar_valid[XBAR_ID_DEPTHWISE] ), + .o_dout_data (din_to_xbar_data_w[XBAR_ID_DEPTHWISE]) + ); + end //ENABLE_DEPTHWISE + if (ENABLE_SOFTMAX == 1) begin + + localparam int AUX_SOFTMAX_INPUT_BUFFER_REG_STAGES = 1; + localparam int AUX_SOFTMAX_NATIVE_VECTOR_SIZE = 1; + + localparam dla_aux_softmax_pkg::stream_params_t AUX_SOFTMAX_CONFIG_STREAM_PARAMS = '{ // Config stream parameterization + DATA_WIDTH : CONFIG_WIDTH}; + + localparam dla_aux_softmax_pkg::debug_axi_params_t AUX_SOFTMAX_DEBUG_AXI_PARAMS = '{ // Debug AXI bus parameterization + DATA_WIDTH : DEBUG_NETWORK_DATA_WIDTH, + ADDR_WIDTH : DEBUG_NETWORK_ADDR_LOWER}; + + localparam dla_interface_pkg::aux_data_pack_params_t AUX_SOFTMAX_DATA_PACK_PARAMS = '{ // Data packing parameterization + ELEMENT_BITS : 16, // PE output is always FP16. hardcode this value to 16 + VECTOR_SIZE : 1, // always 1 input at a time + NATIVE_VECTOR_SIZE : AUX_SOFTMAX_NATIVE_VECTOR_SIZE, // still should be always 1 + GROUP_SIZE : PE_ARRAY_ARCH.NUM_FEATURES, + GROUP_NUM : PE_ARRAY_ARCH.NUM_LANES, + GROUP_DELAY : SOFTMAX_GROUP_DELAY}; // temporarily set to 1 by arch_param.cpp + + localparam dla_aux_softmax_pkg::aux_special_params_t AUX_SOFTMAX_SPECIAL_PARAMS = '{ // Parameterization special to this aux blocks + MAX_NUM_CHANNELS : SOFTMAX_MAX_NUM_CHANNELS, + DEVICE : DEVICE_ENUM, + CONFIG_ID_WIDTH : SOFTMAX_CONFIG_ID_WIDTH}; + + localparam int AUX_SOFTMAX_OUTPUT_BUFFER_FIFO_CUTOFF = aux_softmax_calc_core_latency(AUX_SOFTMAX_SPECIAL_PARAMS, AUX_SOFTMAX_DATA_PACK_PARAMS); + localparam int AUX_SOFTMAX_OUTPUT_BUFFER_FIFO_DEPTH = calc_hld_fifo_depth(AUX_SOFTMAX_OUTPUT_BUFFER_FIFO_CUTOFF); + + localparam dla_aux_softmax_pkg::aux_generic_params_t AUX_SOFTMAX_GENERIC_PARAMS = '{ // Parameterization common among all aux blocks + INPUT_BUFFER_REG_STAGES : AUX_SOFTMAX_INPUT_BUFFER_REG_STAGES, + OUTPUT_BUFFER_FIFO_CUTOFF : AUX_SOFTMAX_OUTPUT_BUFFER_FIFO_CUTOFF, + OUTPUT_BUFFER_FIFO_DEPTH : AUX_SOFTMAX_OUTPUT_BUFFER_FIFO_DEPTH, + COMMAND_BUFFER_DEPTH : 1, + PER_GROUP_CONTROL : 0, + DEBUG_LEVEL : 0, + DEBUG_ID : 0, + DEBUG_EVENT_DEPTH : 0}; + + // config data + logic [AUX_SOFTMAX_CONFIG_STREAM_PARAMS.DATA_WIDTH-1:0] config_stream; + logic config_stream_valid; + assign config_stream = config_network_output_data[CONFIG_ID_SOFTMAX]; + assign config_stream_valid = config_network_output_valid[CONFIG_ID_SOFTMAX]; + // config response + dla_aux_softmax_pkg::generic_response_t config_response; + assign config_network_output_ready[CONFIG_ID_SOFTMAX] = config_response.ready; + + // This function aux_params_to_bus_width() returns the total bus width of AUX data bus based on the different elements of the bus + localparam dla_aux_softmax_pkg::stream_params_t DATA_STREAM_PARAMS = '{DATA_WIDTH : dla_aux_softmax_pkg::aux_params_to_bus_width(AUX_SOFTMAX_DATA_PACK_PARAMS) }; + + // input data + logic [DATA_STREAM_PARAMS.DATA_WIDTH-1:0] softmax_input_stream; + logic softmax_input_stream_valid; + // input response + dla_aux_softmax_pkg::generic_response_t softmax_input_response; + + // output data + logic [DATA_STREAM_PARAMS.DATA_WIDTH-1:0] softmax_output_stream; + logic softmax_output_stream_valid; + // output response + dla_aux_softmax_pkg::generic_response_t softmax_output_response; + + // NOTE:: For aux-kernels, data-bus width of the side of WA facing the Xbar is derived based on the + // parameter array containing all input/output bus widths of kernels. + // - [0] location of AUX_INPUT_DATA_WIDTHS correspondes to PII/PE-Array-Output + // - [0] location of AUX_OUTPUT_DATA_WIDTHS correspondes to POI + dla_width_adapter #( + .GROUP_NUM (XBAR_WA_GROUP_NUM ), + .GROUP_DELAY (XBAR_WA_GROUP_DELAY ), + .INPUT_DATA_WIDTH_IN_ELEMENTS (AUX_OUTPUT_DATA_WIDTHS[XBAR_ID_SOFTMAX]), + .OUTPUT_DATA_WIDTH_IN_ELEMENTS(dla_aux_softmax_pkg::aux_params_to_bus_width(AUX_SOFTMAX_DATA_PACK_PARAMS)), + .ELEMENT_WIDTH (WA_ELEMENT_WIDTH ) + ) wa_softmax_input_inst ( + .clock (clk_dla ), + .i_aresetn (w_resetn_async ), + .i_flush (1'b0 ), + .o_din_ready (dout_from_xbar_ready[XBAR_ID_SOFTMAX] ), + .i_din_valid (dout_from_xbar_valid_w[XBAR_ID_SOFTMAX]), + .i_din_data (dout_from_xbar_data_w[XBAR_ID_SOFTMAX] ), + .i_dout_ready(softmax_input_response.ready ), + .o_dout_valid(softmax_input_stream_valid ), + .o_dout_data (softmax_input_stream ) + ); + + dla_aux_softmax_top #( + .AUX_DATA_PACK_PARAMS(AUX_SOFTMAX_DATA_PACK_PARAMS), + .CONFIG_STREAM_PARAMS(AUX_SOFTMAX_CONFIG_STREAM_PARAMS), + .DEBUG_AXI_PARAMS(AUX_SOFTMAX_DEBUG_AXI_PARAMS), + .AUX_GENERIC_PARAMS(AUX_SOFTMAX_GENERIC_PARAMS), + .AUX_SPECIAL_PARAMS(AUX_SOFTMAX_SPECIAL_PARAMS) + ) softmax_inst ( + .clk(clk_dla) , // Clock + .i_aresetn(w_resetn_async) , // Active-low sync reset + // + .i_data(softmax_input_stream) , // Data input stream port + .i_data_valid(softmax_input_stream_valid), + .o_data(softmax_input_response) , // Data input stream port response + // + .i_result(softmax_output_response) , // Result output stream port response + .o_result(softmax_output_stream) , // Result output stream port + .o_result_valid(softmax_output_stream_valid), + // + + .i_config(config_stream) , // Config stream port + .i_config_valid(config_stream_valid), + .o_config(config_response) , // Config stream port response + // + .i_debug_raddr(), + .i_debug_raddr_valid(), + .o_debug_raddr(), + .i_debug_rdata(), + .o_debug_rdata(), + .o_debug_rdata_valid() + ); + + + dla_width_adapter #( + .GROUP_NUM (XBAR_WA_GROUP_NUM ), + .GROUP_DELAY (XBAR_WA_GROUP_DELAY ), + .INPUT_DATA_WIDTH_IN_ELEMENTS (dla_aux_softmax_pkg::aux_params_to_bus_width(AUX_SOFTMAX_DATA_PACK_PARAMS)), + .OUTPUT_DATA_WIDTH_IN_ELEMENTS(AUX_INPUT_DATA_WIDTHS[XBAR_ID_SOFTMAX]), + .ELEMENT_WIDTH (WA_ELEMENT_WIDTH ) + ) wa_softmax_output_inst ( + .clock (clk_dla ), + .i_aresetn (w_resetn_async ), + .i_flush (1'b0 ), + .o_din_ready (softmax_output_response.ready ), + .i_din_valid (softmax_output_stream_valid ), + .i_din_data (softmax_output_stream ), + .i_dout_ready(din_to_xbar_ready[XBAR_ID_SOFTMAX] ), + .o_dout_valid(din_to_xbar_valid[XBAR_ID_SOFTMAX] ), + .o_dout_data (din_to_xbar_data_w[XBAR_ID_SOFTMAX]) + ); + + // Snoop signals for the profiling counters + assign pc_config_to_softmax_valid = config_stream_valid; + assign pc_config_to_softmax_ready = config_response.ready; + assign pc_xbar_to_softmax_valid = softmax_input_stream_valid; + assign pc_xbar_to_softmax_ready = softmax_input_response.ready; + assign pc_softmax_to_xbar_valid = softmax_output_stream_valid; + assign pc_softmax_to_xbar_ready = softmax_output_response.ready; + end + else begin + // Snoop signals for the profiling counters + assign pc_config_to_softmax_valid = 1'b0; + assign pc_config_to_softmax_ready = 1'b0; + assign pc_xbar_to_softmax_valid = 1'b0; + assign pc_xbar_to_softmax_ready = 1'b0; + assign pc_softmax_to_xbar_valid = 1'b0; + assign pc_softmax_to_xbar_ready = 1'b0; + end + + // output streaming or feature writer selection signals + // when output streaming is enabled, xbar output could feed + // either the feature writer or the output streamer + // in case we have ddr enabled for intermediate layers + logic feature_writer_wa_ready; + logic xbar_writer_wa_valid; + + dla_width_adapter #( + .GROUP_NUM (XBAR_WA_GROUP_NUM ), + .GROUP_DELAY (XBAR_WA_GROUP_DELAY ), + .INPUT_DATA_WIDTH_IN_ELEMENTS (AUX_OUTPUT_DATA_WIDTHS[0] ), + .OUTPUT_DATA_WIDTH_IN_ELEMENTS(FEATURE_WRITER_WIDTH ), + .ELEMENT_WIDTH (WA_ELEMENT_WIDTH ) + ) wa_raw_feature_writer_input_inst ( + .clock (clk_dla ), + .i_aresetn (w_resetn_async ), + .i_flush (1'b0 ), + .o_din_ready (feature_writer_wa_ready ), + .i_din_valid (xbar_writer_wa_valid ), + .i_din_data (xbar_demuxed_data ), + .i_dout_ready(raw_feature_writer_ready), + .o_dout_valid(raw_feature_writer_valid), + .o_dout_data (raw_feature_writer_data ) + ); + + dla_width_adapter #( + .GROUP_NUM (XBAR_WA_GROUP_NUM ), + .GROUP_DELAY (XBAR_WA_GROUP_DELAY ), + .INPUT_DATA_WIDTH_IN_ELEMENTS (AUX_OUTPUT_DATA_WIDTHS[0] ), + .OUTPUT_DATA_WIDTH_IN_ELEMENTS(INPUT_FEEDER_INPUT_DATA_WIDTH ), + .ELEMENT_WIDTH (WA_ELEMENT_WIDTH ) + ) wa_aux_input_inst ( + .clock (clk_dla ), + .i_aresetn (w_resetn_async ), + .i_flush (1'b0 ), + .o_din_ready (xbar_dout1_ready), + .i_din_valid (xbar_dout1_valid), + .i_din_data (xbar_dout1_data ), + .i_dout_ready(aux_ready ), + .o_dout_valid(aux_valid ), + .o_dout_data (aux_data ) + ); + + if (ENABLE_OUTPUT_STREAMER == 1) begin + logic xbar_streamer_wa_valid; + logic out_streamer_wa_ready; + + logic xbar_input_done; + + dla_output_streamer # ( + .CONFIG_WIDTH (CONFIG_WIDTH ), + .TDATA_WIDTH (AXI_OSTREAM_DATA_WIDTH ), + .TID_WIDTH (AXI_OSTREAM_ID_WIDTH ), + .TDEST_WIDTH (AXI_OSTREAM_DEST_WIDTH ), + .FIFO_DEPTH (AXI_OSTREAM_FIFO_DEPTH ), + .INPUT_WIDTH_ELEMENTS (AUX_OUTPUT_DATA_WIDTHS[0] / PE_ARRAY_ARCH.NUM_LANES ), + .INPUT_ELEMENT_WIDTH (WA_ELEMENT_WIDTH ) + ) output_streamer ( + .clk_dla(clk_dla), + .i_aresetn(w_resetn_async), + .i_config_data(config_network_output_data[CONFIG_ID_OUTPUT_STREAMER]), + .i_config_valid(config_network_output_valid[CONFIG_ID_OUTPUT_STREAMER]), + .o_config_ready(config_network_output_ready[CONFIG_ID_OUTPUT_STREAMER]), + .o_ready(out_streamer_wa_ready), + .i_valid(xbar_streamer_wa_valid), + .i_data(xbar_demuxed_data), + .i_data_done(xbar_dout0_done), + .o_last_data_received(streaming_last_word_sent), + .i_config_flush_data(config_network_output_data[CONFIG_ID_OUTPUT_STREAMER_FLUSH]), + .i_config_flush_valid(config_network_output_valid[CONFIG_ID_OUTPUT_STREAMER_FLUSH]), + .o_config_flush_ready(config_network_output_ready[CONFIG_ID_OUTPUT_STREAMER_FLUSH]), + .o_input_done(xbar_input_done), + .clk_axi(clk_axi), + .i_axi_aresetn(w_resetn_async), + .o_axi_t_valid(o_ostream_axi_t_valid), + .i_axi_t_ready(i_ostream_axi_t_ready), + .o_axi_t_last(ostream_tlast_axi_clk), + .o_axi_t_data(o_ostream_axi_t_data), + .o_axi_t_strb(o_ostream_axi_t_strb), + .o_axi_t_keep(), + .o_axi_t_id(), + .o_axi_t_dest(), + .o_axi_t_user(), + .o_axi_t_wakeup() + ); + + // Instantiate Demux to steer data either to feature writer or output streamer + dla_demux # ( + .CONFIG_WIDTH(CONFIG_WIDTH), + .DATA_WIDTH(AUX_OUTPUT_DATA_WIDTHS[0]) + ) writer_streamer_demux ( + .clk_dla(clk_dla), + .i_aresetn(w_resetn_async), + .i_config_data(config_network_output_data[CONFIG_ID_WRITER_STREAMER_SEL]), + .i_config_valid(config_network_output_valid[CONFIG_ID_WRITER_STREAMER_SEL]), + .o_config_ready(config_network_output_ready[CONFIG_ID_WRITER_STREAMER_SEL]), + .o_ready(xbar_dout0_ready), + .i_valid(xbar_dout0_valid), + .i_data(xbar_dout0_data), + .i_transmitter_done(xbar_input_done), + .i_1_ready(feature_writer_wa_ready), + .o_1_valid(xbar_writer_wa_valid), + .i_2_ready(out_streamer_wa_ready), + .o_2_valid(xbar_streamer_wa_valid), + .o_data(xbar_demuxed_data) + ); + + dla_clock_cross_full_sync cc_streaming_active ( + .clk_src(clk_axi), + .i_src_async_resetn(1'b1), + .i_src_data(ostream_tlast_axi_clk), + .o_src_data(), + + .clk_dst(clk_ddr), + .i_dst_async_resetn(1'b1), + .o_dst_data(ostream_tlast_ddr_clk) + ); + + end else begin + // If output streaming is not enabled, we default the signals + // back to the feature writer + assign ostream_tlast_axi_clk = 0; + assign ostream_tlast_ddr_clk = 0; + assign xbar_dout0_ready = feature_writer_wa_ready; + assign xbar_writer_wa_valid = xbar_dout0_valid; + assign xbar_demuxed_data = xbar_dout0_data; + end + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //dma expects writer data to already be on the ddr clock + dla_acl_dcfifo #( + .WIDTH (FEATURE_WRITER_WIDTH), + .DEPTH (32) + ) feature_writer_clock_crosser ( + .async_resetn (w_resetn_async), + + //write side + .wr_clock (clk_dla), + .wr_req (raw_feature_writer_valid), + .wr_data (raw_feature_writer_data), + .wr_full (raw_feature_writer_full), + + //read side + .rd_clock (clk_ddr), + .rd_empty (feature_writer_empty), + .rd_data (feature_writer_data), + .rd_ack (feature_writer_ready) + ); + assign raw_feature_writer_ready = ~raw_feature_writer_full; + assign feature_writer_valid = ~feature_writer_empty; + + dla_config_network #( + .NUM_MODULES (CONFIG_NUM_MODULES), + .INPUT_DATA_WIDTH (CONFIG_READER_WIDTH), + .MODULE_ID_WIDTH (MODULE_ID_WIDTH), + .PAYLOAD_WIDTH (CONFIG_WIDTH), + .CONFIG_CHANNEL_WIDTH (CONFIG_CHANNEL_WIDTH), + .FIFO_MIN_DEPTH (CONFIG_NETWORK_FIFO_MIN_DEPTH), + .NUM_PIPELINE_STAGES (CONFIG_NETWORK_NUM_PIPELINE_STAGES), + .CROSS_CLOCK (CONFIG_NETWORK_CROSS_CLOCK), + .CROSS_CLOCK_AXI (CONFIG_NETWORK_CROSS_CLOCK_AXI), + .QUANTIZE_DEPTHS (CONFIG_NETWORK_QUANTIZE_DEPTHS), + .CONFIG_CACHE_DEPTH (CONFIG_CACHE_DEPTH), + .ENABLE_DDRFREE_CONFIG (ENABLE_ON_CHIP_PARAMETERS), + .ENABLE_INPUT_STREAMING (ENABLE_INPUT_STREAMING), + .ENABLE_OUTPUT_STREAMING (ENABLE_OUTPUT_STREAMER), + .DEVICE (DEVICE_ENUM) + ) config_network ( + .clk_dla1x (clk_dla), + .clk_ddr (clk_ddr), + .clk_axi (clk_axi), + .i_aresetn (w_resetn_async), + .i_valid_ddr (config_network_input_valid), + .o_ready (config_network_input_ready), // config network is ready to receive config data + .i_data_ddr (config_network_input_data), + .o_valid (config_network_output_valid), + .i_ready (config_network_output_ready), // module is ready to receive config data from config network + .o_data (config_network_output_data) + ); + + if (ENABLE_DEBUG == 1) begin + dla_debug_network #( + .DATA_WIDTH (DEBUG_NETWORK_DATA_WIDTH), + .ADDR_WIDTH (DEBUG_NETWORK_ADDR_WIDTH), + .ADDR_LOWER (DEBUG_NETWORK_ADDR_LOWER), + .NUM_MODULES (DEBUG_NETWORK_NUM_MODULES) + ) debug_network ( + .clk (clk_dla), + .i_resetn_async (w_resetn_async), + .i_csr_arvalid (debug_network_csr_arvalid), + .i_csr_araddr (debug_network_csr_araddr), + .o_csr_arready (debug_network_csr_arready), + .o_csr_rvalid (debug_network_csr_rvalid), + .o_csr_rdata (debug_network_csr_rdata), + .i_csr_rready (debug_network_csr_rready), + .o_dbg_arvalid (debug_network_dbg_arvalid), + .o_dbg_araddr (debug_network_dbg_araddr), + .i_dbg_arready (debug_network_dbg_arready), + .i_dbg_rvalid (debug_network_dbg_rvalid), + .i_dbg_rdata (debug_network_dbg_rdata), + .o_dbg_rready (debug_network_dbg_rready) + ); + + dla_interface_profiling_counters #( + .NUM_INTERFACES (PC_NUM_INTERFACES), + .ADDR_WIDTH (DEBUG_NETWORK_ADDR_LOWER), + .DATA_WIDTH (DEBUG_NETWORK_DATA_WIDTH) + ) interface_profiling_counters ( + .clk (clk_dla), + .i_resetn_async (w_resetn_async), + .i_snoop_valid (pc_snoop_valid), + .i_snoop_ready (pc_snoop_ready), + .i_dbg_arvalid (debug_network_dbg_arvalid[DEBUG_NETWORK_ID_PROFILING_COUNTERS]), + .i_dbg_araddr (debug_network_dbg_araddr [DEBUG_NETWORK_ID_PROFILING_COUNTERS]), + .o_dbg_arready (debug_network_dbg_arready[DEBUG_NETWORK_ID_PROFILING_COUNTERS]), + .o_dbg_rvalid (debug_network_dbg_rvalid [DEBUG_NETWORK_ID_PROFILING_COUNTERS]), + .o_dbg_rdata (debug_network_dbg_rdata [DEBUG_NETWORK_ID_PROFILING_COUNTERS]), + .i_dbg_rready (debug_network_dbg_rready [DEBUG_NETWORK_ID_PROFILING_COUNTERS]) + ); + end + else begin + assign debug_network_csr_arready = 1'b0; + assign debug_network_csr_rvalid = 1'b0; + end + // From DMA to others + assign pc_snoop_valid[PC_ID_DMA_TO_CONFIG] = config_network_input_valid; + assign pc_snoop_ready[PC_ID_DMA_TO_CONFIG] = config_network_input_ready; + assign pc_snoop_valid[PC_ID_DMA_TO_FILTER] = filter_reader_valid; + assign pc_snoop_ready[PC_ID_DMA_TO_FILTER] = filter_reader_ready; + assign pc_snoop_valid[PC_ID_DMA_TO_INPUT_FEEDER] = feature_reader_valid; + assign pc_snoop_ready[PC_ID_DMA_TO_INPUT_FEEDER] = feature_reader_ready; + + // From config network to others + assign pc_snoop_valid[PC_ID_CONFIG_TO_INPUT_FEEDER_IN] = config_network_output_valid[CONFIG_ID_INPUT_FEEDER_IN]; + assign pc_snoop_ready[PC_ID_CONFIG_TO_INPUT_FEEDER_IN] = config_network_output_ready[CONFIG_ID_INPUT_FEEDER_IN]; + assign pc_snoop_valid[PC_ID_CONFIG_TO_INPUT_FEEDER_OUT] = config_network_output_valid[CONFIG_ID_INPUT_FEEDER_OUT]; + assign pc_snoop_ready[PC_ID_CONFIG_TO_INPUT_FEEDER_OUT] = config_network_output_ready[CONFIG_ID_INPUT_FEEDER_OUT]; + assign pc_snoop_valid[PC_ID_CONFIG_TO_XBAR] = config_network_output_valid[CONFIG_ID_XBAR]; + assign pc_snoop_ready[PC_ID_CONFIG_TO_XBAR] = config_network_output_ready[CONFIG_ID_XBAR]; + assign pc_snoop_valid[PC_ID_CONFIG_TO_ACTIVATION] = pc_config_to_activation_valid; + assign pc_snoop_ready[PC_ID_CONFIG_TO_ACTIVATION] = pc_config_to_activation_ready; + assign pc_snoop_valid[PC_ID_CONFIG_TO_POOL] = pc_config_to_pool_valid; + assign pc_snoop_ready[PC_ID_CONFIG_TO_POOL] = pc_config_to_pool_ready; + assign pc_snoop_valid[PC_ID_CONFIG_TO_SOFTMAX] = pc_config_to_softmax_valid; + assign pc_snoop_ready[PC_ID_CONFIG_TO_SOFTMAX] = pc_config_to_softmax_ready; + + // From input feeder exit FIFO to sequencer + assign pc_snoop_valid[PC_ID_INPUT_FEEDER_TO_SEQUENCER] = pc_input_feeder_to_sequencer_valid; + assign pc_snoop_ready[PC_ID_INPUT_FEEDER_TO_SEQUENCER] = pc_input_feeder_to_sequencer_ready; + + // From PE array exit FIFO to xbar (before width adapter) + assign pc_snoop_valid[PC_ID_PE_ARRAY_TO_XBAR] = pe_array_output_valid; + assign pc_snoop_ready[PC_ID_PE_ARRAY_TO_XBAR] = pe_array_output_ready; + + // At the aux kernel interfaces, which connect to and from the xbar + assign pc_snoop_valid[PC_ID_XBAR_TO_ACTIVATION] = pc_xbar_to_activation_valid; + assign pc_snoop_ready[PC_ID_XBAR_TO_ACTIVATION] = pc_xbar_to_activation_ready; + assign pc_snoop_valid[PC_ID_ACTIVATION_TO_XBAR] = pc_activation_to_xbar_valid; + assign pc_snoop_ready[PC_ID_ACTIVATION_TO_XBAR] = pc_activation_to_xbar_ready; + assign pc_snoop_valid[PC_ID_XBAR_TO_POOL] = pc_xbar_to_pool_valid; + assign pc_snoop_ready[PC_ID_XBAR_TO_POOL] = pc_xbar_to_pool_ready; + assign pc_snoop_valid[PC_ID_POOL_TO_XBAR] = pc_pool_to_xbar_valid; + assign pc_snoop_ready[PC_ID_POOL_TO_XBAR] = pc_pool_to_xbar_ready; + assign pc_snoop_valid[PC_ID_XBAR_TO_SOFTMAX] = pc_xbar_to_softmax_valid; + assign pc_snoop_ready[PC_ID_XBAR_TO_SOFTMAX] = pc_xbar_to_softmax_ready; + assign pc_snoop_valid[PC_ID_SOFTMAX_TO_XBAR] = pc_softmax_to_xbar_valid; + assign pc_snoop_ready[PC_ID_SOFTMAX_TO_XBAR] = pc_softmax_to_xbar_ready; + + // From xbar to others (after width adapters, before clock crossing FIFO for DMA) + assign pc_snoop_valid[PC_ID_XBAR_TO_INPUT_FEEDER] = aux_valid; + assign pc_snoop_ready[PC_ID_XBAR_TO_INPUT_FEEDER] = aux_ready; + assign pc_snoop_valid[PC_ID_XBAR_TO_DMA] = raw_feature_writer_valid; + assign pc_snoop_ready[PC_ID_XBAR_TO_DMA] = raw_feature_writer_ready; + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/de5a_area_A10/dla_top_wrapper_de5a_area_A10.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/de5a_area_A10/dla_top_wrapper_de5a_area_A10.sv new file mode 100644 index 0000000..1b385d5 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/de5a_area_A10/dla_top_wrapper_de5a_area_A10.sv @@ -0,0 +1,483 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +`resetall +`undefineall +`default_nettype none +`timescale 1ns/1ps + +module dla_top_wrapper_de5a_area_A10 #( + // no input parameters needed + //begining of autogenerated params + localparam string DEVICE = "A10", + localparam int C_CSR_AXI_ADDR_WIDTH = 11, + localparam int C_CSR_AXI_DATA_WIDTH = 32, + localparam int C_DDR_AXI_ADDR_WIDTH = 32, + localparam int C_DDR_AXI_BURST_WIDTH = 4, + localparam int C_DDR_AXI_DATA_WIDTH = 512, + localparam int C_DDR_AXI_THREAD_ID_WIDTH = 2, + localparam int CONFIG_DATA_BYTES = 4, + localparam int CONFIG_READER_DATA_BYTES = 8, + localparam int FILTER_READER_DATA_BYTES = 64, + localparam int FEATURE_READER_DATA_BYTES = 8, + localparam int FEATURE_WRITER_DATA_BYTES = 8, + localparam int CONFIG_NUM_MODULES = 11, + localparam int MODULE_ID_WIDTH = 8, + localparam int CONFIG_CHANNEL_WIDTH = 32, + localparam int CONFIG_CACHE_DEPTH = 256, + localparam int CONFIG_NETWORK_QUANTIZE_DEPTHS [255:0] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,512,64,32}, + localparam bit CONFIG_NETWORK_CROSS_CLOCK [255:1] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1}, + localparam bit CONFIG_NETWORK_CROSS_CLOCK_AXI [255:1] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + localparam int CONFIG_NETWORK_FIFO_MIN_DEPTH [255:1] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,256,256,256,256,256,256,256,256,256,256,256}, + localparam int CONFIG_NETWORK_NUM_PIPELINE_STAGES [255:1] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1}, + localparam int CONFIG_ID_PADDING = 0, + localparam int CONFIG_ID_FILTER_READER = 1, + localparam int CONFIG_ID_INPUT_FEEDER_MUX = 2, + localparam int CONFIG_ID_INPUT_FEEDER_WRITER = 3, + localparam int CONFIG_ID_INPUT_FEEDER_IN = 4, + localparam int CONFIG_ID_INPUT_FEEDER_READER = 5, + localparam int CONFIG_ID_INPUT_FEEDER_OUT = 6, + localparam int CONFIG_ID_FEATURE_WRITER = 7, + localparam int CONFIG_ID_FEATURE_READER = 8, + localparam int CONFIG_ID_XBAR = 9, + localparam int CONFIG_ID_ACTIVATION = 10, + localparam int CONFIG_ID_POOL = 11, + localparam bit ENABLE_DEBUG = 0, + localparam bit ENABLE_INPUT_STREAMING = 0, + localparam int AXI_ISTREAM_DATA_WIDTH = 128, + localparam int AXI_ISTREAM_FIFO_DEPTH = 32, + localparam bit ENABLE_ON_CHIP_PARAMETERS = 0, + localparam bit ENABLE_MIXED_PRECISION = 0, + localparam int KVEC_OVER_CVEC = 4, + localparam int SB_ADDR_WIDTH = 13, + localparam int STREAM_BUFFER_DEPTH = 5120, + localparam bit[927:0] PE_ARRAY_PARAM_BITS = 928'h000000010000000800000001000000020000000700000007000000050000000f000000050000000f00000004000000040000000200000001000000010000000000000001000000000000000400000001000000040000001000000005000000040000000000000000000000000000000000000000, + localparam int PE_ARRAY_EXIT_FIFO_DEPTH = 1024, + localparam int SCRATCHPAD_FILTER_DEPTH = 512, + localparam int SCRATCHPAD_BIAS_SCALE_DEPTH = 512, + localparam int SCRATCHPAD_NUM_FILTER_PORTS = 8, + localparam int SCRATCHPAD_NUM_BIAS_SCALE_PORTS = 16, + localparam int SCRATCHPAD_MEGABLOCK_WIDTH = 34, + localparam int SCRATCHPAD_NUM_FILTER_BLOCKS_PER_MEGABLOCK = 1, + localparam int SCRATCHPAD_NUM_BIAS_SCALE_BLOCKS_PER_MEGABLOCK = 2, + localparam int MAX_XBAR_INPUT_INTERFACES = 4, + localparam int MAX_XBAR_OUTPUT_INTERFACES = 4, + localparam int AUX_XBAR_INPUT_COUNTER_WIDTH = 24, + localparam int AUX_XBAR_OUTPUT_COUNTER_WIDTH = 24, + localparam bit ENABLE_ACTIVATION = 1, + localparam bit ENABLE_DEPTHWISE = 0, + localparam int XBAR_ID_DEPTHWISE = -1, + localparam int CONFIG_ID_DEPTHWISE = -1, + localparam bit ENABLE_DEPTHWISE_FILTER_BIAS = 0, + localparam int XBAR_ID_DEPTHWISE_FILTER_BIAS = -1, + localparam int CONFIG_ID_DEPTHWISE_FILTER_BIAS = -1, + localparam bit ENABLE_POOL = 1, + localparam bit ENABLE_SOFTMAX = 0, + localparam int XBAR_ID_SOFTMAX = -1, + localparam int CONFIG_ID_SOFTMAX = -1, + localparam int CONFIG_ID_OUTPUT_STREAMER = -1, + localparam int CONFIG_ID_OUTPUT_STREAMER_FLUSH = -1, + localparam int CONFIG_ID_WRITER_STREAMER_SEL = -1, + localparam int CONFIG_ID_LAYOUT_TRANSFORM = -1, + localparam int XBAR_ID_POOL = 2, + localparam int XBAR_ID_ACTIVATION = 1, + localparam int XBAR_ID_XBAR_OUT_PORT = 0, + localparam int XBAR_ID_PE_ARRAY = 0, + localparam int NUMBER_OF_KERNELS = 2, + localparam int AUX_MODULE_SELECT_ID_WIDTH = 4, + localparam bit XBAR_KERNEL_BYPASS_FEATURE_ENABLE = 0, + localparam bit AUX_KERNEL_BYPASSABLE [16:0] = '{0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,default : 0}, + localparam int AUX_XBAR_MUX_OUTPUT_PIPELINE_STAGES [16:0] = '{0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,default : 0}, + localparam int AUX_XBAR_NONSTALLABLE_OUTPUT_PIPELINE_STAGES [16:0] = '{0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,default : 0}, + localparam int AUX_XBAR_OUTPUT_BP_FIFO_ENABLE [16:0] = '{0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,default : 0}, + localparam int AUX_XBAR_OUTPUT_BP_FIFO_DEPTH [16:0] = '{0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,default : 0}, + localparam int AUX_XBAR_OUTPUT_WIDTH = 64, + localparam int AUX_OUTPUT_DATA_WIDTHS [16:0] = '{0:64,1:64,2:64,3:64,4:64,5:64,6:64,7:64,8:64,9:64,10:64,11:64,12:64,13:64,14:64,15:64,16:64,default : 0}, + localparam int AUX_INPUT_DATA_WIDTHS [16:0] = '{0:64,1:64,2:64,3:64,4:64,5:64,6:64,7:64,8:64,9:64,10:64,11:64,12:64,13:64,14:64,15:64,16:64,default : 0}, + localparam int AUX_MAX_DATABUS_WIDTH = 64, + localparam int XBAR_KERNEL_CV_FEATURE_ENABLE = 1, + localparam int AUX_KERNEL_CONNECTIVITY_VECTOR [16:0] [16:0] = '{0: '{0:1,1:1,2:1,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0},1: '{0:1,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0},2: '{0:1,1:1,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0},3: '{0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0},4: '{0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0},5: '{0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0},6: '{0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0},7: '{0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0},8: '{0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0},9: '{0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0},10: '{0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0},11: '{0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0},12: '{0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0},13: '{0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0},14: '{0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0},15: '{0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0},16: '{0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0}}, + localparam int ACTIVATION_K_VECTOR = 4, + localparam bit ACTIVATION_ENABLE_DSP_MULT = 0, + localparam bit ACTIVATION_ENABLE_DSP_CONV = 0, + localparam int ACTIVATION_GROUP_DELAY = 0, + localparam int ACTIVATION_TYPE = 1, + localparam int ACTIVATION_PARAM_CACHE_DEPTH = 3580, + localparam int POOL_K_VECTOR = 1, + localparam int POOL_GROUP_DELAY = 0, + localparam int POOL_TYPE = 0, + localparam int POOL_CONFIG_ID_WIDTH = 1, + localparam int POOL_MAX_WINDOW_HEIGHT = 3, + localparam int POOL_MAX_WINDOW_WIDTH = 3, + localparam int POOL_MAX_STRIDE_VERTICAL = 4, + localparam int POOL_MAX_STRIDE_HORIZONTAL = 4, + localparam int POOL_PIPELINE_REG_NUM = 1, + localparam int DEPTHWISE_K_VECTOR = 0, + localparam int DEPTHWISE_GROUP_DELAY = 0, + localparam int DEPTHWISE_TYPE = 0, + localparam int DEPTHWISE_CONFIG_ID_WIDTH = 1, + localparam int DEPTHWISE_MAX_WINDOW_HEIGHT = 3, + localparam int DEPTHWISE_MAX_WINDOW_WIDTH = 3, + localparam int DEPTHWISE_MAX_STRIDE_VERTICAL = 4, + localparam int DEPTHWISE_MAX_STRIDE_HORIZONTAL = 4, + localparam int DEPTHWISE_PIPELINE_REG_NUM = 1, + localparam int DEPTHWISE_MAX_DILATION_VERTICAL = 1, + localparam int DEPTHWISE_MAX_DILATION_HORIZONTAL = 1, + localparam int DETHWISE_VECTOR_FEATURE_WIDTH = 16, + localparam int DETHWISE_VECTOR_FILTER_WIDTH = 16, + localparam int DETHWISE_VECTOR_BIAS_WIDTH = 32, + localparam int DETHWISE_VECTOR_DOT_SIZE = 10, + localparam int SOFTMAX_K_VECTOR = 1, + localparam int SOFTMAX_GROUP_DELAY = 1, + localparam int SOFTMAX_CONFIG_ID_WIDTH = 8, + localparam int SOFTMAX_MAX_NUM_CHANNELS = 2048, + localparam int AUX_MAX_TILE_HEIGHT = 128, + localparam int AUX_MAX_TILE_WIDTH = 128, + localparam int AUX_MAX_TILE_CHANNELS = 14320, + localparam int LAYOUT_TRANSFORM_ENABLE = 0, + localparam int LAYOUT_TRANSFORM_MAX_FEATURE_CHANNELS = 3, + localparam int LAYOUT_TRANSFORM_MAX_FEATURE_HEIGHT = 28, + localparam int LAYOUT_TRANSFORM_MAX_FEATURE_WIDTH = 28, + localparam int LAYOUT_TRANSFORM_MAX_FEATURE_DEPTH = 1, + localparam int LAYOUT_TRANSFORM_MAX_STRIDE_WIDTH = 2, + localparam int LAYOUT_TRANSFORM_MAX_STRIDE_HEIGHT = 2, + localparam int LAYOUT_TRANSFORM_MAX_STRIDE_DEPTH = 1, + localparam int LAYOUT_TRANSFORM_MAX_PAD_FRONT = 1, + localparam int LAYOUT_TRANSFORM_MAX_PAD_LEFT = 2, + localparam int LAYOUT_TRANSFORM_MAX_PAD_TOP = 2, + localparam int LAYOUT_TRANSFORM_MAX_FILTER_HEIGHT = 2, + localparam int LAYOUT_TRANSFORM_MAX_FILTER_WIDTH = 2, + localparam int LAYOUT_TRANSFORM_MAX_FILTER_DEPTH = 1, + localparam int LAYOUT_TRANSFORM_MAX_DILATION_WIDTH = 2, + localparam int LAYOUT_TRANSFORM_MAX_DILATION_HEIGHT = 2, + localparam int LAYOUT_TRANSFORM_MAX_DILATION_DEPTH = 1, + localparam int LAYOUT_TRANSFORM_READER_BYTES = 16, + localparam int LAYOUT_TRANSFORM_DO_U8_CONV = 0, + localparam int ENABLE_OUTPUT_STREAMER = 0, + localparam int AXI_OSTREAM_DATA_WIDTH = 128, + localparam int AXI_OSTREAM_ID_WIDTH = 8, + localparam int AXI_OSTREAM_DEST_WIDTH = 8, + localparam int AXI_OSTREAM_FIFO_DEPTH = 512, + localparam int DISABLE_DDR = 0, + //end of autogenerated params + localparam int AXI_BURST_LENGTH_WIDTH = 8, //width of the axi burst length signal as per the axi4 spec + localparam int AXI_BURST_SIZE_WIDTH = 3, //width of the axi burst size signal as per the axi4 spec + localparam int AXI_BURST_TYPE_WIDTH = 2 //width of the axi burst type signal as per the axi4 spec +) ( + //clocks and resets, all resets are not synchronized + input wire ddr_clk, + input wire dla_clk, + input wire axi_clk, + input wire irq_clk, + input wire dla_resetn, //active low reset that has NOT been synchronized to any clock + + //interrupt request, AXI4 stream master without data, runs on pcie clock + output logic o_interrupt_level, + + //CSR, AXI4 lite slave, runs on ddr clock + input wire i_csr_arvalid, + input wire [C_CSR_AXI_ADDR_WIDTH-1:0] i_csr_araddr, + output logic o_csr_arready, + output logic o_csr_rvalid, + output logic [C_CSR_AXI_DATA_WIDTH-1:0] o_csr_rdata, + input wire i_csr_rready, + input wire i_csr_awvalid, + input wire [C_CSR_AXI_ADDR_WIDTH-1:0] i_csr_awaddr, + output logic o_csr_awready, + input wire i_csr_wvalid, + input wire [C_CSR_AXI_DATA_WIDTH-1:0] i_csr_wdata, + output logic o_csr_wready, + output logic o_csr_bvalid, + input wire i_csr_bready, + + //global memory, AXI4 master, runs on ddr clock + output logic o_ddr_arvalid, + output logic [C_DDR_AXI_ADDR_WIDTH-1:0] o_ddr_araddr, + output logic [AXI_BURST_LENGTH_WIDTH-1:0] o_ddr_arlen, + output logic [AXI_BURST_SIZE_WIDTH-1:0] o_ddr_arsize, + output logic [AXI_BURST_TYPE_WIDTH-1:0] o_ddr_arburst, + output logic [C_DDR_AXI_THREAD_ID_WIDTH-1:0] o_ddr_arid, + input wire i_ddr_arready, + input wire i_ddr_rvalid, + input wire [C_DDR_AXI_DATA_WIDTH-1:0] i_ddr_rdata, + input wire [C_DDR_AXI_THREAD_ID_WIDTH-1:0] i_ddr_rid, + output logic o_ddr_rready, + output logic o_ddr_awvalid, + output logic [C_DDR_AXI_ADDR_WIDTH-1:0] o_ddr_awaddr, + output logic [AXI_BURST_LENGTH_WIDTH-1:0] o_ddr_awlen, + output logic [AXI_BURST_SIZE_WIDTH-1:0] o_ddr_awsize, + output logic [AXI_BURST_TYPE_WIDTH-1:0] o_ddr_awburst, + input wire i_ddr_awready, + output logic o_ddr_wvalid, + output logic [C_DDR_AXI_DATA_WIDTH-1:0] o_ddr_wdata, + output logic [(C_DDR_AXI_DATA_WIDTH/8)-1:0] o_ddr_wstrb, + output logic o_ddr_wlast, + input wire i_ddr_wready, + input wire i_ddr_bvalid, + output logic o_ddr_bready, + + // Input Streamer AXI-S interface signals + input wire i_istream_axi_t_valid, + output logic o_istream_axi_t_ready, + input wire [AXI_ISTREAM_DATA_WIDTH-1:0] i_istream_axi_t_data, + + // Output Streamer AXI-S interface signals + output wire o_ostream_axi_t_valid, + input wire i_ostream_axi_t_ready, + output wire o_ostream_axi_t_last, + output logic [AXI_OSTREAM_DATA_WIDTH-1:0] o_ostream_axi_t_data, + output logic [(AXI_OSTREAM_DATA_WIDTH/8)-1:0] o_ostream_axi_t_strb +); + + dla_top_de5a_area_A10 #( + .DEVICE (DEVICE), + + .CSR_ADDR_WIDTH (C_CSR_AXI_ADDR_WIDTH), + .CSR_DATA_BYTES (C_CSR_AXI_DATA_WIDTH/8), + .CONFIG_DATA_BYTES (CONFIG_DATA_BYTES), + .CONFIG_READER_DATA_BYTES (CONFIG_READER_DATA_BYTES), + .FILTER_READER_DATA_BYTES (FILTER_READER_DATA_BYTES), + .FEATURE_READER_DATA_BYTES (FEATURE_READER_DATA_BYTES), + .FEATURE_WRITER_DATA_BYTES (FEATURE_WRITER_DATA_BYTES), + .DDR_ADDR_WIDTH (C_DDR_AXI_ADDR_WIDTH), + .DDR_DATA_BYTES (C_DDR_AXI_DATA_WIDTH/8), + .DDR_BURST_WIDTH (C_DDR_AXI_BURST_WIDTH), + .DDR_READ_ID_WIDTH (C_DDR_AXI_THREAD_ID_WIDTH), + .ENABLE_ON_CHIP_PARAMETERS (ENABLE_ON_CHIP_PARAMETERS), + + .KVEC_OVER_CVEC (KVEC_OVER_CVEC), + .SB_ADDR_WIDTH (SB_ADDR_WIDTH), + .STREAM_BUFFER_DEPTH (STREAM_BUFFER_DEPTH), + + .PE_ARRAY_PARAM_BITS (dla_pe_array_pkg::pe_array_arch_bits_t'(PE_ARRAY_PARAM_BITS)), + .PE_ARRAY_EXIT_FIFO_DEPTH (PE_ARRAY_EXIT_FIFO_DEPTH), + + .SCRATCHPAD_FILTER_DEPTH (SCRATCHPAD_FILTER_DEPTH), + .SCRATCHPAD_BIAS_SCALE_DEPTH (SCRATCHPAD_BIAS_SCALE_DEPTH), + .SCRATCHPAD_NUM_FILTER_PORTS (SCRATCHPAD_NUM_FILTER_PORTS), + .SCRATCHPAD_NUM_BIAS_SCALE_PORTS (SCRATCHPAD_NUM_BIAS_SCALE_PORTS), + .SCRATCHPAD_MEGABLOCK_WIDTH (SCRATCHPAD_MEGABLOCK_WIDTH), + .SCRATCHPAD_NUM_FILTER_BLOCKS_PER_MEGABLOCK (SCRATCHPAD_NUM_FILTER_BLOCKS_PER_MEGABLOCK), + .SCRATCHPAD_NUM_BIAS_SCALE_BLOCKS_PER_MEGABLOCK(SCRATCHPAD_NUM_BIAS_SCALE_BLOCKS_PER_MEGABLOCK), + + .CONFIG_NUM_MODULES (CONFIG_NUM_MODULES), + .MODULE_ID_WIDTH (MODULE_ID_WIDTH), + .CONFIG_CHANNEL_WIDTH (CONFIG_CHANNEL_WIDTH), + .CONFIG_CACHE_DEPTH (CONFIG_CACHE_DEPTH), + .CONFIG_ID_FILTER_READER (CONFIG_ID_FILTER_READER), + .CONFIG_ID_INPUT_FEEDER_MUX (CONFIG_ID_INPUT_FEEDER_MUX), + .CONFIG_ID_INPUT_FEEDER_WRITER (CONFIG_ID_INPUT_FEEDER_WRITER), + .CONFIG_ID_INPUT_FEEDER_IN (CONFIG_ID_INPUT_FEEDER_IN), + .CONFIG_ID_INPUT_FEEDER_READER (CONFIG_ID_INPUT_FEEDER_READER), + .CONFIG_ID_INPUT_FEEDER_OUT (CONFIG_ID_INPUT_FEEDER_OUT), + .CONFIG_ID_FEATURE_WRITER (CONFIG_ID_FEATURE_WRITER), + .CONFIG_ID_FEATURE_READER (CONFIG_ID_FEATURE_READER), + .CONFIG_ID_XBAR (CONFIG_ID_XBAR), + .CONFIG_ID_OUTPUT_STREAMER (CONFIG_ID_OUTPUT_STREAMER), + .CONFIG_ID_OUTPUT_STREAMER_FLUSH(CONFIG_ID_OUTPUT_STREAMER_FLUSH), + .CONFIG_ID_WRITER_STREAMER_SEL (CONFIG_ID_WRITER_STREAMER_SEL), + .CONFIG_ID_LAYOUT_TRANSFORM (CONFIG_ID_LAYOUT_TRANSFORM), + // AUX module config ID + .CONFIG_ID_ACTIVATION (CONFIG_ID_ACTIVATION), + .CONFIG_ID_POOL (CONFIG_ID_POOL), + .CONFIG_ID_DEPTHWISE (CONFIG_ID_DEPTHWISE), + .CONFIG_ID_DEPTHWISE_FILTER_BIAS(CONFIG_ID_DEPTHWISE_FILTER_BIAS), + .CONFIG_ID_SOFTMAX (CONFIG_ID_SOFTMAX), + + .CONFIG_NETWORK_QUANTIZE_DEPTHS (CONFIG_NETWORK_QUANTIZE_DEPTHS), + .CONFIG_NETWORK_FIFO_MIN_DEPTH (CONFIG_NETWORK_FIFO_MIN_DEPTH), + .CONFIG_NETWORK_NUM_PIPELINE_STAGES (CONFIG_NETWORK_NUM_PIPELINE_STAGES), + .CONFIG_NETWORK_CROSS_CLOCK (CONFIG_NETWORK_CROSS_CLOCK), + .CONFIG_NETWORK_CROSS_CLOCK_AXI (CONFIG_NETWORK_CROSS_CLOCK_AXI), + + //xbar + .MAX_XBAR_INPUT_INTERFACES (MAX_XBAR_INPUT_INTERFACES), + .MAX_XBAR_OUTPUT_INTERFACES (MAX_XBAR_OUTPUT_INTERFACES), + .NUMBER_OF_KERNELS (NUMBER_OF_KERNELS), + .AUX_MODULE_SELECT_ID_WIDTH (AUX_MODULE_SELECT_ID_WIDTH), + .AUX_XBAR_INPUT_COUNTER_WIDTH (AUX_XBAR_INPUT_COUNTER_WIDTH), + .AUX_XBAR_OUTPUT_COUNTER_WIDTH (AUX_XBAR_OUTPUT_COUNTER_WIDTH), + .AUX_MAX_DATABUS_WIDTH (AUX_MAX_DATABUS_WIDTH), + .AUX_XBAR_OUTPUT_WIDTH (AUX_XBAR_OUTPUT_WIDTH), + .AUX_INPUT_DATA_WIDTHS (AUX_INPUT_DATA_WIDTHS), + .AUX_OUTPUT_DATA_WIDTHS (AUX_OUTPUT_DATA_WIDTHS), + .AUX_XBAR_MUX_OUTPUT_PIPELINE_STAGES(AUX_XBAR_MUX_OUTPUT_PIPELINE_STAGES), + .AUX_XBAR_NONSTALLABLE_OUTPUT_PIPELINE_STAGES(AUX_XBAR_NONSTALLABLE_OUTPUT_PIPELINE_STAGES), + .AUX_XBAR_OUTPUT_BP_FIFO_ENABLE (AUX_XBAR_OUTPUT_BP_FIFO_ENABLE), + .AUX_XBAR_OUTPUT_BP_FIFO_DEPTH (AUX_XBAR_OUTPUT_BP_FIFO_DEPTH), + .XBAR_KERNEL_BYPASS_FEATURE_ENABLE (XBAR_KERNEL_BYPASS_FEATURE_ENABLE), + .AUX_KERNEL_BYPASSABLE (AUX_KERNEL_BYPASSABLE), + .XBAR_KERNEL_CV_FEATURE_ENABLE (XBAR_KERNEL_CV_FEATURE_ENABLE), + .AUX_KERNEL_CONNECTIVITY_VECTOR (AUX_KERNEL_CONNECTIVITY_VECTOR), + + //xbar id + .XBAR_ID_ACTIVATION (XBAR_ID_ACTIVATION), + .XBAR_ID_POOL (XBAR_ID_POOL), + .XBAR_ID_DEPTHWISE (XBAR_ID_DEPTHWISE), + .XBAR_ID_SOFTMAX (XBAR_ID_SOFTMAX), + .XBAR_ID_PE_ARRAY (XBAR_ID_PE_ARRAY), + .XBAR_ID_XBAR_OUT_PORT (XBAR_ID_XBAR_OUT_PORT), + //aux module enable + .ENABLE_ACTIVATION (ENABLE_ACTIVATION), + .ENABLE_POOL (ENABLE_POOL), + .ENABLE_DEPTHWISE (ENABLE_DEPTHWISE), + .ENABLE_SOFTMAX (ENABLE_SOFTMAX), + + .ENABLE_INPUT_STREAMING (ENABLE_INPUT_STREAMING), + .AXI_ISTREAM_DATA_WIDTH (AXI_ISTREAM_DATA_WIDTH), + .AXI_ISTREAM_FIFO_DEPTH (AXI_ISTREAM_FIFO_DEPTH), + + //debug module enable + .ENABLE_DEBUG (ENABLE_DEBUG), + + // Output Streaming parameters + .ENABLE_OUTPUT_STREAMER (ENABLE_OUTPUT_STREAMER), + .AXI_OSTREAM_DATA_WIDTH (AXI_OSTREAM_DATA_WIDTH), + .AXI_OSTREAM_ID_WIDTH (AXI_OSTREAM_ID_WIDTH), + .AXI_OSTREAM_DEST_WIDTH (AXI_OSTREAM_DEST_WIDTH), + .AXI_OSTREAM_FIFO_DEPTH (AXI_OSTREAM_FIFO_DEPTH), + + // Mixed Precsion switch + .ENABLE_MIXED_PRECISION (ENABLE_MIXED_PRECISION), + + //Activation parameters + .ACTIVATION_K_VECTOR (ACTIVATION_K_VECTOR), + .ACTIVATION_ENABLE_DSP_MULT (ACTIVATION_ENABLE_DSP_MULT), + .ACTIVATION_ENABLE_DSP_CONV (ACTIVATION_ENABLE_DSP_CONV), + .ACTIVATION_TYPE (ACTIVATION_TYPE), + .ACTIVATION_GROUP_DELAY (ACTIVATION_GROUP_DELAY), + .ACTIVATION_PARAM_CACHE_DEPTH (ACTIVATION_PARAM_CACHE_DEPTH), + + //Pool parameters + .POOL_K_VECTOR (POOL_K_VECTOR), + .POOL_TYPE (POOL_TYPE), + .POOL_GROUP_DELAY (POOL_GROUP_DELAY), + .POOL_CONFIG_ID_WIDTH (POOL_CONFIG_ID_WIDTH), + .POOL_MAX_WINDOW_HEIGHT (POOL_MAX_WINDOW_HEIGHT), + .POOL_MAX_WINDOW_WIDTH (POOL_MAX_WINDOW_WIDTH), + .POOL_MAX_STRIDE_VERTICAL (POOL_MAX_STRIDE_VERTICAL), + .POOL_MAX_STRIDE_HORIZONTAL (POOL_MAX_STRIDE_HORIZONTAL), + .POOL_PIPELINE_REG_NUM (POOL_PIPELINE_REG_NUM), + + //Depthwise parameters + .DEPTHWISE_K_VECTOR (DEPTHWISE_K_VECTOR), + .DEPTHWISE_TYPE (DEPTHWISE_TYPE), + .DEPTHWISE_GROUP_DELAY (DEPTHWISE_GROUP_DELAY), + .DEPTHWISE_CONFIG_ID_WIDTH (DEPTHWISE_CONFIG_ID_WIDTH), + .DEPTHWISE_MAX_WINDOW_HEIGHT (DEPTHWISE_MAX_WINDOW_HEIGHT), + .DEPTHWISE_MAX_WINDOW_WIDTH (DEPTHWISE_MAX_WINDOW_WIDTH), + .DEPTHWISE_MAX_STRIDE_VERTICAL (DEPTHWISE_MAX_STRIDE_VERTICAL), + .DEPTHWISE_MAX_STRIDE_HORIZONTAL (DEPTHWISE_MAX_STRIDE_HORIZONTAL), + .DEPTHWISE_PIPELINE_REG_NUM (DEPTHWISE_PIPELINE_REG_NUM), + .DEPTHWISE_MAX_DILATION_VERTICAL (DEPTHWISE_MAX_DILATION_VERTICAL), + .DEPTHWISE_MAX_DILATION_HORIZONTAL (DEPTHWISE_MAX_DILATION_HORIZONTAL), + + // Depthwise vector parameters + .DETHWISE_VECTOR_FEATURE_WIDTH (DETHWISE_VECTOR_FEATURE_WIDTH), + .DETHWISE_VECTOR_FILTER_WIDTH (DETHWISE_VECTOR_FILTER_WIDTH), + .DETHWISE_VECTOR_BIAS_WIDTH (DETHWISE_VECTOR_BIAS_WIDTH), + .DETHWISE_VECTOR_DOT_SIZE (DETHWISE_VECTOR_DOT_SIZE), + + //Softmax parameters + .SOFTMAX_K_VECTOR (SOFTMAX_K_VECTOR), + .SOFTMAX_GROUP_DELAY (SOFTMAX_GROUP_DELAY), + .SOFTMAX_CONFIG_ID_WIDTH (SOFTMAX_CONFIG_ID_WIDTH), + .SOFTMAX_MAX_NUM_CHANNELS (SOFTMAX_MAX_NUM_CHANNELS), + + // Aux Parameters + .AUX_MAX_TILE_HEIGHT (AUX_MAX_TILE_HEIGHT), + .AUX_MAX_TILE_WIDTH (AUX_MAX_TILE_WIDTH), + .AUX_MAX_TILE_CHANNELS (AUX_MAX_TILE_CHANNELS), + + // Layout Transform + .LAYOUT_TRANSFORM_ENABLE (LAYOUT_TRANSFORM_ENABLE), + .LAYOUT_TRANSFORM_MAX_FEATURE_CHANNELS (LAYOUT_TRANSFORM_MAX_FEATURE_CHANNELS), + .LAYOUT_TRANSFORM_MAX_FEATURE_HEIGHT (LAYOUT_TRANSFORM_MAX_FEATURE_HEIGHT), + .LAYOUT_TRANSFORM_MAX_FEATURE_WIDTH (LAYOUT_TRANSFORM_MAX_FEATURE_WIDTH), + .LAYOUT_TRANSFORM_MAX_FEATURE_DEPTH (LAYOUT_TRANSFORM_MAX_FEATURE_DEPTH), + .LAYOUT_TRANSFORM_MAX_STRIDE_WIDTH (LAYOUT_TRANSFORM_MAX_STRIDE_WIDTH), + .LAYOUT_TRANSFORM_MAX_STRIDE_HEIGHT (LAYOUT_TRANSFORM_MAX_STRIDE_HEIGHT), + .LAYOUT_TRANSFORM_MAX_STRIDE_DEPTH (LAYOUT_TRANSFORM_MAX_STRIDE_DEPTH), + .LAYOUT_TRANSFORM_MAX_PAD_FRONT (LAYOUT_TRANSFORM_MAX_PAD_FRONT), + .LAYOUT_TRANSFORM_MAX_PAD_LEFT (LAYOUT_TRANSFORM_MAX_PAD_LEFT), + .LAYOUT_TRANSFORM_MAX_PAD_TOP (LAYOUT_TRANSFORM_MAX_PAD_TOP), + .LAYOUT_TRANSFORM_MAX_FILTER_WIDTH (LAYOUT_TRANSFORM_MAX_FILTER_WIDTH), + .LAYOUT_TRANSFORM_MAX_FILTER_HEIGHT (LAYOUT_TRANSFORM_MAX_FILTER_HEIGHT), + .LAYOUT_TRANSFORM_MAX_FILTER_DEPTH (LAYOUT_TRANSFORM_MAX_FILTER_DEPTH), + .LAYOUT_TRANSFORM_MAX_DILATION_WIDTH (LAYOUT_TRANSFORM_MAX_DILATION_WIDTH), + .LAYOUT_TRANSFORM_MAX_DILATION_HEIGHT (LAYOUT_TRANSFORM_MAX_DILATION_HEIGHT), + .LAYOUT_TRANSFORM_MAX_DILATION_DEPTH (LAYOUT_TRANSFORM_MAX_DILATION_DEPTH), + .LAYOUT_TRANSFORM_READER_BYTES (LAYOUT_TRANSFORM_READER_BYTES), + .LAYOUT_TRANSFORM_DO_U8_CONV (LAYOUT_TRANSFORM_DO_U8_CONV) +) +dla_top_inst +( + .clk_ddr (ddr_clk), + .clk_axi (axi_clk), + .clk_dla (dla_clk), + .clk_pcie (irq_clk), + .i_resetn_async (dla_resetn), + .o_interrupt_level (o_interrupt_level), + + .i_csr_arvalid (i_csr_arvalid), + .i_csr_araddr (i_csr_araddr), + .o_csr_arready (o_csr_arready), + .o_csr_rvalid (o_csr_rvalid), + .o_csr_rdata (o_csr_rdata), + .i_csr_rready (i_csr_rready), + .i_csr_awvalid (i_csr_awvalid), + .i_csr_awaddr (i_csr_awaddr), + .o_csr_awready (o_csr_awready), + .i_csr_wvalid (i_csr_wvalid), + .i_csr_wdata (i_csr_wdata), + .o_csr_wready (o_csr_wready), + .o_csr_bvalid (o_csr_bvalid), + .i_csr_bready (i_csr_bready), + + .o_ddr_arvalid (o_ddr_arvalid), + .o_ddr_araddr (o_ddr_araddr), + .o_ddr_arlen (o_ddr_arlen), + .o_ddr_arsize (o_ddr_arsize), + .o_ddr_arburst (o_ddr_arburst), + .o_ddr_arid (o_ddr_arid), + .i_ddr_arready (i_ddr_arready), + .i_ddr_rvalid (i_ddr_rvalid), + .i_ddr_rdata (i_ddr_rdata), + .i_ddr_rid (i_ddr_rid), + .o_ddr_rready (o_ddr_rready), + .o_ddr_awvalid (o_ddr_awvalid), + .o_ddr_awaddr (o_ddr_awaddr), + .o_ddr_awlen (o_ddr_awlen), + .o_ddr_awsize (o_ddr_awsize), + .o_ddr_awburst (o_ddr_awburst), + .i_ddr_awready (i_ddr_awready), + .o_ddr_wvalid (o_ddr_wvalid), + .o_ddr_wdata (o_ddr_wdata), + .o_ddr_wstrb (o_ddr_wstrb), + .o_ddr_wlast (o_ddr_wlast), + .i_ddr_wready (i_ddr_wready), + .i_ddr_bvalid (i_ddr_bvalid), + .o_ddr_bready (o_ddr_bready), + + .i_istream_axi_t_valid (i_istream_axi_t_valid), + .o_istream_axi_t_ready (o_istream_axi_t_ready), + .i_istream_axi_t_data (i_istream_axi_t_data), + + .o_ostream_axi_t_valid (o_ostream_axi_t_valid), + .i_ostream_axi_t_ready (i_ostream_axi_t_ready), + .o_ostream_axi_t_last (o_ostream_axi_t_last), + .o_ostream_axi_t_data (o_ostream_axi_t_data), + .o_ostream_axi_t_strb (o_ostream_axi_t_strb) +); + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/de5a_area_A10/generated_files.tcl b/python/openvino/demo/ip/intel_ai_ip/verilog/de5a_area_A10/generated_files.tcl new file mode 100644 index 0000000..f01da5e --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/de5a_area_A10/generated_files.tcl @@ -0,0 +1,6 @@ +add_fileset_file intel_ai_ip/dla_dma_param.svh SYSTEM_VERILOG_INCLUDE PATH ../intel_ai_ip/verilog/de5a_area_A10/dla_dma_param.svh +add_fileset_file intel_ai_ip/dla_dma_csr_discovery_rom.mif MIF PATH ../intel_ai_ip/verilog/de5a_area_A10/dla_dma_csr_discovery_rom.mif +add_fileset_file intel_ai_ip/dla_interface_profiling_counters.mif MIF PATH ../intel_ai_ip/verilog/de5a_area_A10/dla_interface_profiling_counters.mif +add_fileset_file intel_ai_ip/dla_pe_array_system_de5a_area_A10.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/de5a_area_A10/dla_pe_array_system_de5a_area_A10.sv +add_fileset_file intel_ai_ip/dla_top_de5a_area_A10.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/de5a_area_A10/dla_top_de5a_area_A10.sv +add_fileset_file intel_ai_ip/dla_top_wrapper_de5a_area_A10.sv SYSTEM_VERILOG PATH ../intel_ai_ip/verilog/de5a_area_A10/dla_top_wrapper_de5a_area_A10.sv diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/de5a_area_A10/interface_param.tcl b/python/openvino/demo/ip/intel_ai_ip/verilog/de5a_area_A10/interface_param.tcl new file mode 100644 index 0000000..dfcca35 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/de5a_area_A10/interface_param.tcl @@ -0,0 +1,6 @@ +set_parameter_value C_CSR_AXI_ADDR_WIDTH 11 +set_parameter_value C_CSR_AXI_DATA_WIDTH 32 +set_parameter_value C_DDR_AXI_ADDR_WIDTH 32 +set_parameter_value C_DDR_AXI_DATA_WIDTH 512 +set_parameter_value C_DDR_AXI_BURST_WIDTH 4 +set_parameter_value C_DDR_AXI_THREAD_ID_WIDTH 2 diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_2scomplement_to_signmag.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_2scomplement_to_signmag.sv new file mode 100644 index 0000000..772ff37 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_2scomplement_to_signmag.sv @@ -0,0 +1,45 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +3KplMK9Ppi9Z2hwsSkYRhuhFjeJnGq45x3UpDrtF8HUywKnqhREp+4mb/He8cE3GYcn4fOQd2E8i +kF8RXV3I1PN1iWb89+yK+eZOOUcpvsUZ7l7seJAc+wzZdwBGihitSS8LZ3lSNuTUasb8cLZbildS +CA5yDY0GUKallA7QmRSSVEKqmcYu004WLApV7/FR5FBoThCowccM+ZwqhtN2/8Y5mcBODU20cT2a +n0ThJp/NmkaTcipl9RQ6s1itcClPHrFO4vr296uztEMvJFfI1ogG/c3iic1rAwSU+b1bwpsvisyg +U2xDXFbeHvPx4TkAQ20s3URktHr+2r1laKJsmQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 1344) +`pragma protect data_block +NbtQhPcOevCQWdMdytNHjXFItJNGN/TUc6D1jGM8JaG4slUqlRNiuIfB3QE0Iabow3DYHHZuBVMb +O9SIn8SPrmPIVU30COBw5PqwvWQ8Y2RGNJ1AXMRj8/QhY1yUr2/kt6k+6xbplmlVSd+J/U0XOzKa +mriEIGeqiv5Grn7Ul5u9uVQgorifsJ01eRnk1CekdEc2UNrgIS3kB6Hq2iOgp0Q9ukIYbv+5+uQE +Z5F1Fb9QRMSx0viiJeqm2wDkYcmzlmg74jJPOFZBE0gbcbw1LvrcziOHNMNqFah/O4FrFX67aqip +pViqGPZUCDXKs7bNX+EHXSzjcEyT05ULGxpuUzstIBDiyTrYFHOAO6Vmoxqw1xfWL+oTm8ShAxAh +aJ4H8ocQD4OEp/BR53XXhpXHDIObNGVxMH9LAL2x95aFVXFXKU920CqkDtk7tuoDokrRrzFIejk5 +GZwIKA6CnpOaje7vWNp2H5yO9WM4fu/+if6O6ppZbo1CZFTjPEyJaBQy87TXtyFpZUCbk3NCEKNa +v60VmKBcQPrKQ6Y1fh3xVjkMG+eLgYJQuA2XAv4vJWKxc0hAiNpmiAX62vJIASSISFjXHp/dGwPj +XeHz63A6mWc3qA9MAarGDMWuTp2Dmczh+ZG8ip8iM0JIqRxKyMaxbmc+DeYFjY705vtDtl8sXEUu +bIEQ5e2yMSsALBFejf5HjVyPStm5aKfP9snqLqyBYaiWiHZO1R6QQqT/SzbkFplPjRcI2euxiJdx +cM0z7i1309OPhLDiPlmEVk2/WMHYpwaas9cus0zlc9BHmZCCwP8g7ngkOdgJ4vn6kj6Kp+KtWMaq +z4Pk71KVvZNKRiALjcbc/kePeqdi2kkAo5xjPxLFR6XWMPTDqW1y/k6BzpB9zXXB08VPUByUVpzc +kjviovtOT1VIWyjJRE4Vo19KDGdcXZ2d0gSTwXaOikfEsmcj8XBiJukOYyMcwrotzxffs6aMrDDi +4sc4EpEUshNrHWbOZmwuylvu4DKvCXQmBWHZb9yJWoxE+VZ0ri25MQwMGXS2wTqAOpCLYG6luVMn +FXH2zVzomy/DYLZCdM1T1CeV3M7sLZxpkFZ4ZOLiMb3gPcoXiChjQf6dmzyIKO3b1+0ioHoMP9oH +TV3QwjF44ZZOyHGBUlmhwppTgTKIh79qZsHX2eqsxZ+soBEU3xZslXrkh3Y8BXS1JtfQPHWDoJtX +EIrDCN8BQ2F6OEs2YOvxCrhozDt57uZgp/k+zkothC26R6OLH8fSnf/vvNBhyhANV5tL7adZSwFR +S5izO7obFx2Z3+AZ5duWFNgYqX+zVq1/9iI4mH+V89386W6Jv4SDFxdmGJGwcvIjHnRgWQvHuDXC +e2lROZUtvfuWhizVePOVlaCuQopb9TNUo31J9XgMVNU1CkaEHfnYxR6DKGMDBChvlEQZASyCBzTK +beRLD1zMuNU/gkM8xInjItbzvu2/zSzoRBgZNVFHyuDFHX/GmHrFsdGiX8ke2JQLBmIP/9GUEGjz +83uIIRg654z0wIyb7i6pIKSF6K24fFiE6OWg3k76NlGPvJmH45botnFLpl8xOlG3yaaV8wXruarr +6u676t91w6Q0dmOQurprF0HZ9Wy8Y7rdFFEEsHnAnovH1PyrnsePhNShKgDLrkgz1ME81XzIuJKZ +w6wb5sWI/V438SWH0H04vGl6Ph1Eq457IyDjHtIDxJuketkKaQXtsghmshASajcxB6FvlWV7dyLq +IwNTi7PlfptLhUIKZ5VddQUQqPVrl/pLQrjR5pWrTcgU +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_a10_adder1.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_a10_adder1.sv new file mode 100644 index 0000000..07c9c86 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_a10_adder1.sv @@ -0,0 +1,94 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +BsTo7Xd8Ecaz+etGcme2kF7LA9FayvuKRiaiUgqrjK+u37Y0/7FkWZRGu9f2Jyv9XcYGg8Pgn1dF +BPhKTC2KwpQMJAJLYqKYeT4x9saR2xZdJJK7R+bo0/AEJvlIHj1ue4bZVw3cUFh5fKSGt8SVWrKU +SjXfa/v+iGdq8UtVfpFACbW7qAyOuQWkAOtFM3vPWXQcGbmV14WBx1IKsoM+p2lFOadHfw2qCzsa +5iUfTT7J+pmnXbZQxVPE76mbJi1v4/Tk2Jiq2Ad6CArylgEF+C1hh3I+mKfeaWDHsXmcQDN/238c +93B2qFIKNsy3fNZJkR4RQf6OX588UUAI8/lu1Q== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 4128) +`pragma protect data_block +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 +zRQ+ROWM+n879k6e9+rleX81tbBCDc+e +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_a10_c10_adder_tree.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_a10_c10_adder_tree.sv new file mode 100644 index 0000000..87f517e --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_a10_c10_adder_tree.sv @@ -0,0 +1,65 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +2SChIhSCb3NQjSLHIm7y+G8zPRLzNKqv6jJd+R1Mi9KmHGyn2/SSI7EiwdMuwpvKez1TGB9HDDX/ +YCaI8FvcxwZ/rlR7xG2ka+238rZreAquAALFfz/WaBG9eiPARSzGZDNOldm70gKbpidZ65KUY0Yb +SnQIeowP9GfqR4V+h0COmPxqP1vqCmOoAxwn6eiLAsPHZQkqU9pk7DDfQVrRExosyHyVFoYavV7k +1+YA0zV6EXNku/SlKXjlVwrhfsUrWpt5Lmk7VMy8cqNa3ShjayZt4aIrG4gBG9GIXhJaFQdIKYec +FNSVBK1yuV1WoyN5J+Us+nZufi5wDtUt95MR1w== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 2480) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_accum.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_accum.sv new file mode 100644 index 0000000..33e3bb5 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_accum.sv @@ -0,0 +1,124 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +r30ZsY6OqAVFTtnaWhKZ+R7dJuwHpvItRdSD465IF1ZB2yvHrfcLMJjx3L2bPtLFVa/KB+DLRuvF +mM8TxafL4Oa0tYtL10/pe4oYrUrcvp4OCOXHhUy1Bv9ebjcZBdQrl2Gb6vcvXCZ17gOIc1EYC/1w +VvVY7PBX3qyYJAVf3gVrDyAATQer+uZ58QCBOTqOoWaoiwSCtY+JTmpbd0E2GruEIFdNb+7keZWb +vFA+9F1VTWbTWDLPc4W9Q241zbfi5AS1rSTNoUAvTN20DUWKDvjQCYTZ8NVm06e6HDriTRJNQFnx ++G/c2Oml5lrUi+izYh+HtwqtXmpXhWwxTO8mpQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 5856) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_accum_blockfp_alm.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_accum_blockfp_alm.sv new file mode 100644 index 0000000..329062e --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_accum_blockfp_alm.sv @@ -0,0 +1,131 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +DHwSW0ZpmEoLr3Fgb9q+Hx2jKmu3RSdFevXtSSdDt2XCET7YF3+CEs9AD2VO0qN+43v803t+bxdv +JJNN2UDXEdPcE5S7K6y5tDIbfkvzrrfPJ1eRkTI8aq9/7ZCLNAs0JoR5pk1RkW97B5a2T9T0dM4e +q8d38DvopToU0Cdyp+exy2seM5xItQE+pPnTbP/4hhBwoK1UeOzMwkfS5ZfHSU/lmeeHfAUT5RMM +oal2y+YnwXcZ+ZvNgpAo3F4MxInqGC3ilApq5K99E+2m6zRgMMzT1TfLvEYLQE/4OvUOQYqSV79L +vqOvfXdLSA2Sb8BHohfn72gpLsFVmZEgcsnazQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 6256) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_accum_blockfp_dsp.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_accum_blockfp_dsp.sv new file mode 100644 index 0000000..e2ecf9b --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_accum_blockfp_dsp.sv @@ -0,0 +1,121 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +EXO6L7vi6sHtsLIDZg2fYWsDZfLmSoKCNqEYbE86uB+QfbY2M1LnJfMAz6hmxu05tMXJHV/TaHm+ +iLEk5KxlrZceb2OEX+XL0F/svD6uAzMohw5n5nWCUIIo/toTt0ajDbCinIKMaEyAbzb7SBJ2STK8 +7sRg2k+sR+t+2bu4HCMltVoXAO3Z1louA/O9JMUSrtSQ+kXqc4V6Utc+3l9TfgkZI/ogKhiufoVq +7VXiqYHKdFnTkajkx5lF3D47GTQsz7PJPAbAg5QXvonkAvwmU2kRPgA+wap2RKqpmnv53jOtrH/Y +tOlB5L8F21LgtmGl0HvmQe90t8r4fuuphTzMPg== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 5696) +`pragma protect data_block +e7zB5n4nZ+o8RCvSXLUMvjFAh3NREx2o2Pu1hBc467KllsKKzqrXNjtNEgY4KaapksA9luv75Za/ +Fp3Ok/VPi5q2XhBkPYww9qZfCiH8K9JsCY5JfXxbLdEmLdrcKjezmBCUwOu8he8GSJFLfEck9Cx6 +BfhTnBoe6ZIcAHqpvnjVAgRPj1jwpEniCvvP4z35djaZAduHDZU3RwvRWaY13zBxiRHkb1PDiKCl +j86VAHgeHFoK/Y23bVgjew+/bEEPCAXXsmx3CW2pzjk5jja44xk0/GN6bS505qfQi5baeVsVWnwN +KZz1WsCWLLA0G4WMTG1ED0qSjqOrIYBlUSFL5OxVorJToO4vQq7hvnoyIZaWhX4OC6lilbFrAp76 +mhXp7lrQ0iIfjYi/TN1rWfsKhtDOBYczfOwNSPK3do75RkCuzpQXa18wA7sdH3q9P5lJ2A4SpBqJ +t8U/PeZ0hTxoByws/woHWizDhWenUeov7K4jWi8lTTn226ADeIKuNmpyWk07tIbH5j60xz5O6zQ7 +j7185oWmuEnMeEJ+rJt/bVlDhzVuMKrvKSytoflgamXiRyHvcRrMsTBJIhtaLVGXACaggPi2bD8M +3M/M8xBuzSPBCecneRmAvalMxYCeGx/6IMTWULpDQ1yiWyYJflIlSrFhH/bC8vgRHMqxELpR+CMg +yfT20EArad4EXmJIU2eig3s38B5bPkNl3iOc/+hTSJ1WRAo4EkARe0Tm5p/l4TyR0FsGWpVzoQxl +DG5X6TtRub/hd35q7pIlHaoSihgS0J38dcp6r5+T0nxm6B/qHzgPZQCIrhsFxI9KDl0cN6mTgZRg +nPlD1CXakvQxdJ/EVG526KbAfbJUh/u7B9p565xnq8WT+bEpIJ7+BzgVcZ9yYhISJdh+ZhggvEAe +6nAG+W2JX5hX/aO1LRF5EEh52Hnr/FxopRjSW2bcNXWTGPFMP6nQ/Hn/xeBJoe9YT8OQbnHdHNlf +25WO12Ukw7yklPl94GvAK1ZukHgV2+MCyX6qIVxTd2NlA01/NAlLKcLpdg90IYYu2DgO8qjcLygO +GD2/0Gj/aZeRDzTsWOsPaCIZl0+9hrg5CWTLKaatzMKAXh++SbRE/CwPfZ0hjkc75iEMfQo0B/I6 ++c0KBs/2wWd3J3x57La3uerFMDDnv3ofuAoo4NE9i3P3jk/s310f+Nrn2gNKXbY1UlPsQ3IaqXtw +1jF5N973JkDMVPIxJBUOvHj/eeJBMqGobw4oaZ794FM5M5NUha3Ad2F9OsCZ3rslmXBsd+M3gTcw +zCWiMhtAmjOINb9l9iLYuWm55xhZ9TMEpg32PsqArmHEKN9CAp+8w6mkNT0iXLxsyU3ZEmm6Qzdq +SVXUmvFhvUiFZpNgqbcSCzWTmEonw9R0Gqald5DpOA7iUYUDGwihSldtRNa4nM/64Cwao3f7UEAd +7GmB2f+qwuIR0/TCpoYfIZYiXuCDni+UajzEmfVBZ2xQLSjUwf18exV0IPxgJLPGUwqYsPqPcCyY +ZZ494XuXWyPMbzgFsA56cmacSDK93kcMiIp3yiTNztK71LV7edSfwIWJ4CzFtLKuhFHP/HAn9rHv +gFZrPN4EICriVgrMFeVSk+F2lSbOI5d74rLvb/6iMM2dhL7f8U7bGp+I0kwRp64VrZhxU8foYUJT +Pd3xmUCMpSrn3yKzQU3RF1XmgEDtUuWv3YGcGLkGVbj9dTElCTSfhRLR9b4a47rmCp3fkvRuQeMz +FID3EVp7c+U7Q748Bx6mW2SPkZ/nKlXmqZStCJ2D84VaQEG3sP4gNaUQ5DTTAS80lkh31ntX+Bq4 +TQN5RtdDWVq645fE2UD/iY4U6eVOSsCaUw3NLcr8wPNlgDf3/Qt2/KsGC5KU0KNnsxfk3jq3q4a/ +ZPxlwdWWOJuPQFE8FW3N/4Buhij9PND6cnpiNrHsZyPnQX7MvYTaP45LAqmnqxsv7A+EQmutTH3Z +ghZejoaE/tqmPpfXZAeh/cwt9pwt8Msptq1ToYTdAgpZziFj/d1pXt6WNGXhJ3qVlzo2wlQPyLyR +U8ju7tunpqN5V/W5Kqt9ZAoewXgGp9vnNgcn6dFPnGqkQZCy7oSCCNs5S/UGzKiSsUhkC2x+6clQ +/nNI5VZMU4ywWeCXlic/NnfNbPGhU+t6suYMu063F2E/RP2V9gxkgOA3rTiok9+ejLErCYX6sNz5 +UuhXcEw7OSn9iDBsAKT5O8QEhOjbA/0Y8n65Mrz8Mp3Hp/0wbuvZyrFg5J8mNopAHLUGWN+KJd3s +YpV71qZoFShhv8HIUuOltyHWmATrvlrZRGhIr6+0ByX6dEQz7wm+uEtqONEocGVPRTecnpt4zdUs +bNoepnn7ZFzHcK4qDCV+bIQIMSevXqlP6c4zDxco2bhyL0JlTLlyk3iR8Eh9cxwsXsA8xbf23YBH +siGyoinpAdrDE5LT+393HSNrED8z3ha8sKlNQEc10WI3WoGh2yFNbtE24uf4pwudvn696UBcus0W +7kqI8Ngj12nSIIPayPmmBsKboaPUDl9q+HGrNnbsFXrRj4n5VN1S5Fd92Wi67dxBA5sv6r1fVn8H +UBryRw3k78Y+LRhMZ6ja/9Nn/yz0K4ug7xdEGISeGPpWX4kiFOYpZ5sYQ9HlPrgw0EfQgrm+CpXi +xR8mLqMuVeaz6TGsZg6M8rbvilLhgZZOSTFHv31t3vWbXe3hSuCT/0P0G4G3x87ollAeJ9IxqCOK +sPOgoEdx28sDdKp8Xf6cxtp7Quv4A2YhMj1gvD7XTm8rOsGwAKz00SefdkGq79hYgBOCUnFksWFZ +o3U1Mb/FEEiZd+lFBzbGlOwhYc5JBTxN2O3azBQYXhICCVruM0smINgxpM3zqZTS7XL2AbWkdFFQ +HH0XFE0wl2GQjqLZKu6VeHuzzu5w+f8h8Bp7MOOHzEAD2bbIHtLtVL7F45c0bYiEYKtFLzHukH7S +s6KG08ix98YhnLF+vBAo0bOLq3DBkBjy1cXb/oPcEwxq59tV/dzh35E75dTV/wNGb93NDJ9ckn6K +X7thHkBi/G/Xi17j3MkhfQ6gomkGAlDyHUg+iWWhfu5tV28f81zkPgTyJeoEDOtPGMq39kCeGLNX +5w/kmt7J/1HIh9+b+cvXdst8JF5Jw+D/DaEAQK6sRMgof0M8hoNGoVY/HWLVkvI2Z/2a+8N5eBYK +14bs9f1dphcgNGHMx88GE4N/0rYmzjlL5dPWSPx77gmvN70xc2k+1uTPStU7MJQflZcZjQVLG1Rq +QVMI94EemSRp6nXTVXdhTS8fW6jTfQurya/vNreoTER5dJgbdfir6uO4Y3998FQm6BRyiTaKXU7+ +TMY7pcLzNPIVONodDB7xzJqXLcgDxb6wDsMHqo3ngxxPz863+DnvYuyRvPNUXyAcHlOXMJxp7gGV +B7abYRJJXshxCkCSSTCvgOhVVP2deuS5nhhA1AolW9ZfanlkfcT2tC4Rx6BtybwAUwDetggjbqDb +lliTbME2s6RqGubQ6owgQJJ7TSmf9lzSzNGmldnvAs1fxGnUj8U+wkTspy2/4gpegLVy0diQuaCJ +9rbeCLO2aZ3+GIuCZ2WHVuihxNZfv3aTL18ptVKQTfi2jqAn3KEjmrMAOlhjMm+7OnqoPrbeiXu9 +Q6vq8ouCXwMXHdPu8QOXoFpN8eqjxtTGJUX5AaIXuCFF36D1CAV1lhjQCmyWhKyaTWLZPIqTP/7A +BtvKBlrymy7GfPRBOdf1uLMloaGjbTdmYwuQYI3UIjywkrZbuWCLxzo3rv5i5bswrm8Y0l7EAOK/ +VJ+BjZXNwlmTjIReaLHlvR7CI5BnGU1L+eDZ3+aGH3U6/8w/kEgkdcEhruqsj9A6M9M10tnTOEXF +FGEZnJHu30avHamNLct3ooKPt30OzlSrGOzm+kQXHfukupBRbkmNksP0EDlkBgW2wzcsIP70v7Z3 +glWx86YJSjDZMygQnt9yvUXXziZtfGQBhmwjQX7aDdW4bfWHtsE/sS0V8jMM4D2RSKuQvZJSPAzB +POdo2j3xwvbtfiiS6v2RGCZYeUEeBpZK1Hd/L5vhKuuVuBcTxmlFlaWpOs47AAeNw1yGFeC+1LJN +dkhVC8CCqnUgxTRYD+QoW4AdZJo7nlnWFubHoVSojKUWyHIwBl53rft6D/KuXovHLXuQ5C6WpwOQ +0A1W4ZAN2lg9n1O98501bpZeCalIMli/QuL70xPrsqMfmg5bTU6PeIfn1pUvok7uRYGb3hzVtAiU +2oDV2vQJOlK3+9Tonc1NqRUPyPfoG2A1E1TgCCRF2ixwceo018HDK7ugoLkRrqHINpIFJ83YqYSX +L3oOIumjyMLeOEqRjJN+T7oM2yOJEcNF3x5XM//xXdOgykVESC7awIw1nZJoMg69RsqjTkvHwqsA +oF1OD4KjDO+dry5pckWFseonPoHNWAoPNwnFz8OVEZWxThQaWX3qCuhmh5fz3Qo+N/JgLAhuVzM7 +D70h1lrqlujQsHn0J2M6aUre/Ow2XcW83TgMMEdVzdZBDBd/lD6ihj+rO1M+OE4OGIKxi7j2+6OB +oITigPqzMcqZZLuduMISLMuSK+1iy3L4q1bgVSIWcgjFfEJPFZioMUtL17OKLQdVSuOu/LSAqXpY +5rsmwFMKuCcjjGcU/tqD44XycfKMahVOD4z0dKxQk2ABEBVvFHhiKcY8eRvvlbi2dD3sgSJEDj8Q +fdCMVDu37alwXvAkjZdaMA0lV4A12bxKGiO5S0EqQHFUKcu0WvrnPhhpPSffqAj+8pAMmviGhwM0 +5fwkrq8uzcB+Em7Zn12TgIaJDUAFVuO8kCb2cJ7qHUAYcIx5NImJGUNJkRgYufiLoElKhwodcDR0 +0PNCSEJB9ivrXpB1L4qMzbLsLI/oZOTTkNEoNwTeDt6UZd+ktYlH6ei98Fw30g2aPa8rmrKv2LuX +JBLkEYGvvDEDzXKrMy6PRvuu9rh2uE/90VVlNvaiviAYEG3oPn2SI5iorcWRq1tyXIv5maSnPS6R +DsaRI4aywoenQQeMJRGKaY19WVu6S5zgL4RFecqSucR3IcqiLP/mCWB+8qtNaMHIdiqeysCBxR0b +ZMy4uICIHynC3d9CRJQlZ0Ork8AX2JvJeCsBDRdHli9zkEGKpV541l4n6DZZ+Fcp511hkrs8asRS +xSjtWUN+WuNj/vkD6tikf+YL/vJ2FUgvuOl83KCq/SYyrZ3YTwkkx+TkuXUvVVKrNgEQ1EQ9KoIF +MXlTGL/q6UMIupKgsBgx09RolLXcBrHavxok524M4+VZR+ERa161oR8zipFjg2I3Bgji/AKvdmKz +9OcaM7zvNb49gSCktIcZTl2odEOuDcOTcy5E36wZb3586+5WShbODmhwRMzrTd3xDJYCmZH1BL95 +4k2YjuN2JM/F7rNGuaD/oTBR4BIfiIPrPj2VKcAm8K8sucpW5h8ZMgfAP6KXZ7yot8t9mXm6KcJ9 +ggdEsWIguHy/jBa/vZyIWacvdCnlVzpZSm/8QgomUo81lTDalVLjFRMbIapz06pG2gmG777Ki2Wj +aE1PFNp/BhXOgafiPeKF3SQdXOkmCWkuQw54DC77lQQhu1ceIiudnVbSshPUDOCRJ8v8ETalBtup +qMbrARn1fzbiolCUAq4epXhGWmFP5NW2JnGSZhE3eviUoH6gOTXirTd5UPchh9jjEFtxb0cQqr2I +Cty7eYjVfZwz4mUKghnhB/pZs3eBClJScSBaQ1eNzGiyxBdfzXtzRCpXqbakSqPNHLfY5/bRv6L/ +fvNZEMWc3H5KukHl9MraRpjmLC7bJ2o3Q0jbnRu4dJwA/6RyfAo6BXMWGrNUlSW2K8yHdkmsXOr3 +EFwxiARWm7LAjXYdCw+XEACP1Q1JMNLNaSPcLOTXdecj0P4OZTxed9P/oMeiIyT4t3ByshOCvbay +Sy+XDP34M45UspgdjGuCrDFnAmgYBNAt244pX2gXnrmhwBjEA7Q4Jo3OLBnspv9EXbYkl5ApmRm8 +p803HHP1J1HD4h77nS+TYN+3covJY8Zl5susHFvNk91fkXQu9H6sEDmuLwOKaSezoj1DQW3M9V3U +rqvqynnSbKzYv9j+zC65ILUc98xCBMtTHNgJSK3UAAKmrV9pIy88OsFeNc3Eo/1L580luvdXtRSs +m9qe5J/p2CKMW3d2n6nVdxaetL2O3O/vmqsZrC4qsKcXuXiECr4CW/FfDoeVU/nZaO5w4Is+py4X +f8jBKlDRPJt9qzlu2YE5M6+Ic5yJk+UityyZVWzB5PUofGfwYVqjr7Sl+NECHyCoDWlslDsY3ArQ +kDi99g6JUw5YYosPF/ct5d1iNX/XAAgm8KpLpncOhcLJFgC8bH3lKvy+dSFkiQl+Wn9yGFqsVRT+ +c1JgTVxWAEYsq/TpylLLM90M+rbqD5cPBNZJaQkOzHZ7twSi43q8nIkUjznbp0a/gwv5z32e1ZsT +jkT1rY8fxfB+qQw2WO1ZP1txpwiYLrzWnb2xrSwZeVBqmmWY14M+5CG0+xmvosnPAMiTtXFiKcMy +nGm66U0uDDlSm9GMoGwKF+jWzPbTJCT+SdA/sjBrIzGIe/20MsgLpvFHrJE2Zv1CTGe5hZjZGZcK +avYpYXjvL/EjtuuOiMaFc7AR2Zf0nE33kPyEMafc67z3lbsWDBWdBv3jVlvpIspuMY71C3F/azrj ++cozRLLAIE05/zCHdg1oVA0auU/S4PPQVpH7Qxgrd4lKkSoHC648Rk2OoxWYXu9xuKS6yNFsYzKj +nifDJMeszO7c2tRrO+skqSP2AxNzojhA11Sp6vJ8YbdJ6lgLaInCUYfk9e745RxWyfo467eOur9I +votsfCdobYMIkDLOQHuZe+JBBaDSs8f8QLjdUXbsN6tcx1d2Hg9B6f2asSe0/OoKs1+dREHco0ie +4FC3kqzf28pwmrKPs15//9y2K+rLZ+jO53rhwQqmrHPHg3WwH1o3bUFjOn8+DpN661gpnG0gVs7Y +Sc4KCgCoLPdXJOnFCwTBFD5D8SPgR4YTZSXHzcYTn71clLg/QO4ifiUhqP2ZCivwv16QJuAAPC9K +vWt/HOO92zUty9IiIgVO1nC86qg/MwStoWpldglgDDeEwC0oxXjOCOykXgpGXtpmvp0+dt6qWDZw +zh3QV9BCdjx/dPW6XeSgb8x2Is0Tvc6Srx3wMEquJpP2fFDNJp9KsmNVk5iADehO5BlideVCW7ku +50BgJ3r/djqMwIW9poRC0JP0R8s/dI3AlwPaXunYVfy/dnc3mLxKH0ca7m+I2fqhyI2b39l93h9l +TZIjc8ysvo620GvCmfnSROjS5sF9Baq947CPeR/P6CRzfFwTvfwGFcx1GhU5doyTPXD5JvS72w3j +dpasTMNe98hCMK2sdnnydTuip689IvgKbF3qQJy2sRHkvF/ObidLWtMX6+7MIDMrRNYqwAyY/hNl +RSsIIm9c6PYU9BINrscg96MnalvicdE+ax2Scd/KI37dU8Syc4EQ7gQoSVwp7i6HPyoD7jNucbDt +mw1nAowPEVQVQyCKRwn8j64ocItBInSh7kmzR5V6Qpbzp1njEGdljcsMZmGG5pt4PTIxMyI= +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_accum_convert_alm.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_accum_convert_alm.sv new file mode 100644 index 0000000..284cfa8 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_accum_convert_alm.sv @@ -0,0 +1,106 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +4fEmjyXwhPSFxk6MztYyNSV5Bos/NjbrJ5CVPX1CFf2UlbNjfKguSriihj4XgKUONMpZbJMFQaik +IAqpSRldoZHWMqB467xkRO2xZSBwXe7ut1jPZ2tysK4TuM6bDXX0u03V2eC7nsZ7QOtdcNTRS0Lh +YlMbpKyYkt4EsJn1vOgzXFYIAq3pOBKGk2Vq+LYwuXn76VuY9lxUZslN8neF0YVTWeigNOc5pTZv +gYzJEr8qM/947ut9I1A5yA+n2NOeLUXZyAiKTv7HycbonoX8UxDQ7MHbDlroopCPAdGRV5QUCyZl +HQK+uXy/XWon2LQ9aS1Rpr64Q1quQv2yiGwqMQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 4800) +`pragma protect data_block +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 +qruFteyNp99qgoaU +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_accum_convert_dsp.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_accum_convert_dsp.sv new file mode 100644 index 0000000..df6d442 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_accum_convert_dsp.sv @@ -0,0 +1,194 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +71gzzjlzTCS/Pwf/v5DTzfSb7zQPxUuTh7TUGhppW1RnAlHiLxUZHPs8Rd7EWoD08u40+qY5ztWU +zSg7Dl1aFWOoPS1z3wMr1XxsQ4v0KaFXTAr9WFgV1uAIgjstvpqwoP2T2gShDtqAT9yt3d99OHIa +29blq9PtkzK7oqxnLmz1j/hkYVS9DoDFCtmcXeT831p3x9mO8YkZyk2aHbMJw6KWlFAfEg3d2aJ9 +Gc3K+sG83404nF6ZcL2rDXDdbKcBwYa4l8Xyo1Et351fMkFR60SlwyO2kvusvQMQukJhr54b1sNJ +ySNfUfrrkS9qPUCt/WdhnJgmlxbBVUYP20ZwoA== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 9824) +`pragma protect data_block +mCJQVgdh7fFjqNpifzV9NX4FR6cjziDVfJC7DOIihamP3lbFFDS0ekU/R1dW9API/l8yk+5QtkZ6 +m8AMg2p1cRJ+h0ZCiyl4UYbySQGrU2h5Qtz+6HTmlzAKmWMDc8ohHbz4dJKtqW1j/5sK1Oz8uOUo +WPtvNJVFEz3nWd65oJtMkzc9b5sMIqXEOlyLYEvFf2zPDmdHLTWQkLEV1cKRsVv/JdrlP06YLjWD +bexLukTm9o2IGdXcz3ddy1IP9DebJTSbwDIOkmi0dYmzXo4dLCVn/8SpNfuwZNeqr+bejQqIQyNo +gqR+kgAJ7L5v3pIYks01qM7VB7N/kuzrBqBsOvwFuYDPaZszCNVDkl6aDEnmExqpBbXFGj3e08Pi +XbzhSaBZAW6TP4RqIyq5dd0MaJFfhNAJyvUIARQv3lm12BnMHWbwc2TRzeE0ubr3WtjZJ537ddHS +fRwwtS7r0QRHvBRho/OJ5sd6EWbjOmYwV932cPxKc1msLqcpW1KMs2DlZ+1IYZSBlRH6NXKytrmN +DZQC7u7HZr9ASJa2mBHRtfhOEsIZO1+wc1BJhocMGvneS0OBNO/0023Z7EDYXPcRGqlgpw4Fwxqj +zc0iSX1Sj3mzbTZosWWUMn5SyAw0T9E35C3Ttoo7RXh9vW+FRCxsnJYd9+LsxL3hD3mIfKtMvMbP +Lar6Iyk1Z7wHtQW5RGs+XpDJjlxduQeCr+8QpgWsSwvVHzx9nrzKf2eARu4TjwpN+00jhT391DqQ +M+tZhiXtDTh8n4TCfk0ZNMwaNXnInxlzbkFjeep33m6QRvx4yU9KoPS+yLpWH2uHJGrFOYUcBVpG +La7J2f1ddE/5M/W/4SzF4J+qB3FnrNK7oKNQ5GHldjHzVWlgUer9ma7PLgnvynJ/cX7602QZL4Rf +aGfrXfS0XiLW5H4GcGFEevWW4pk9X0/bILVARLfpnZUgnw8fvse8RM7oJsuOPUkhNwtqLzsqA/hS +XLuAajevp5h/hCkRogzBGndSIGeaJJ8TSpybSy79R0DkMXlvJHGoMZtu4fSI1PETE1TvLQMqpjix +4gxKZUONYTp629VmGYmOXok/vhlrhS21zG4WCtxoZcuPjcxw3jSFpC/viZH2iOWvJ2QmGNbbGyRp +OBD46hdN70EVrzH7XkqNVq9SG8cfbdteP++K7u/ci6OejlJzDM/DrDcw0JnaPZ3rmgABoFxrQYKm +b2yC87lL/sUDct/IfsTDZn4GvB/28hxT1SbVMNRW4ibYqDjT6lLOXlK0x9f6XkZHfb089giefdjQ +ZOifwahoM1alslDg8bVL40QVMLAXHBnAmKr/elZeAEgMMwYmI7BxPUiUkUKGO5h5GiOT8H6rpCvZ +QgLjhr7a8pUD+2fdMWOa8KR8thuyH/KA7Y5m0UAHgYW7gdVqgjz7O329Moq1q0yR899hCgZitxcA +MUy7+iBza56wqHmlsmCTOXNKVCsO/HtyjoDv6VDG5PonKFtovSYlAM1ylukvB36orbxnO2yMjxkL +egu5Dy2O9XM1er3MI7nyvHIe9liTkoXC5+SBrIFuhpi5t9aBdbXUsbvARQBXWO8un+VBAjxVtoqH +LK8zJKeRY25yae472ZPC4n8CjuxOz2MpfyJM/EvOLdcMNNittsAbB6/ad77ZhMX0W8GjH/rlH+8x +5Zl47O/aghHmWDcqERgmXmSgDyaSU5wFdk/fpVBujT9PzuK38BWUl0x/Mb7qhRN2D4r2YPlFfMgl +zbHSOo2ccliDLLv3DTO3ozov8v5DwI9MB53ZKN61BUUeWSMbHSuxD1yjn09Y3xtz0aH0QcYJgSug +oXUyiCCEYWnAaPwv+fhU3go6FFI1cewdLT5ePElPzcS+XaqWQ5hHCNejJjTgG/+yoi2hCtlI334m +ipmbi5nvAavVJGAMFZCa73nbPruhYxFOpGgcU4szb25oB+853d8/DWlCYCmc1evEoTX/Bra0+1lJ +ZmrjsMkSzQo/AbozHvQUQ3YOMqNWYAGF0O5v1kFCM1/qf8SNrEF/8gQ+NWgV1GQ1ra6LkP0W/tFg +pE9QDYQy4pgr0W0qGnuO0K7nMFDwogxrIuUHCO/ALBjXcWIQraiHAqE2d3Z7p/ch8drtQp/zQV9W +ju0sSnkN4SW6QMUAJQjMcH6pk1r4/z2yvTrcXIUOgIOGMu6u2VnXEo1UO//iOXqKmgCde+gSEtua +yTMA84EUB1xFJjPSAFBS5kmRBbhj3jVi+1t7eorGfc13FwkRmwFPOrH4xJMamrLXzRQForTsz+A6 +Qn4vGFe4pyQD8GMf6oLfzJCgIh3umbRESc+a6tpTPxXDTc6Qo4KYGtPC4gY3KDMXdz0/4884K6Va +Zt1qBZzliZwh6M2uP8olBq0hMGDNzM44dv3b8rsODF4B+Jr2enreNuz3DngUXA1xOspLAAMt0LLs +QtAUGHIKjM7HeWlYu+oCD+eqjqxJsFWZfUi/rDD0C5anjC4QriqhWhZ5bers2bdic+3aSw7syott +IqaPRkHW4KwgPlLZvWqTH5zZyA8hA/kuKA769TvQj6MW4GioRpaOMJUt/oGvn1p+x9ykLxXyy2GW +655bJxzQKgZbF6fTfO6WI5wsdRekO9tnVskdNT5F+kemKOiZXv07uefoS+xsfUqOM8VXuc4q5CUt +GZTOTlW/RR9R6+aLX1tX/5w++IMCcZtUuoDqgmV+nd8lre3AodTW56LDhiOL4zmxHk0n6yQK28Hm +hOgw2n1nVm6QuPFT9C05BMOan//+EU8gbleN0vvtbwJUHvmCbVFT96WO+m9irHZRNAu2IU9ftt9E +UKqIlCQidCB1yx5BY1XX/GcyClvFL77MKfUGYK9WmkRBjSzIKYR5rMHauf0ezhyMS7K8RxeZzv30 +qC0nduHuiMPHQ4wihfrQfKa9Qdjknq//JPfwZMymdfSCbABRFeei22sVibRtRx6AZnGhqPU4poa3 +UZyCPOZx2sp3+HuNErwvthKgywSAOmrDDF7XY5CSu3gqTY/FpENVAuuXv19mUrVsGsGCRUKtT4yK +fhVmc0F3PRRKyGYgs1eufuhizaxb59HkjRsDazNcc3Xim6BbrW3gzqtlicv4fntCEOPakaAcqt76 +PZ4FX51uwSyoR0ZFj8hrLVoB28c2K7BLaNkODXa+P4EiebRL4pItQB8ieIHYUgQ2MxwGIpl1CP4K +u+8T4/uQsdivmyKO+QWstE13HHINMPt5VunRmFzHjwcZFR7oivV3K/RnSZXXzSBXMtine8Z2OtvZ +dxDdJ2tTI1RGP7kK4DO6Er7GZvicpOeBDd04JxuVdb7529CVivsosaq6m7sCsrU7RIVBg3QtGIU7 +6xvZqDBOtetZ+/+qzwrB3Bz73Kbfsyq1dHlUPEeTLodTKBf86hjkcnw/JejQwhJ10wge3+L+jo4I +dA2B095DZFTSL5oponTcf9lpEsioq3ND5UOVwMdldAKc/LRPD8pXY2UBXaENctcAJlMLCNuMUWMq +he87ycM2AHCnhmnw0DtE0KoUoEaJ2Qf10BPhRVZ70gkR2bewFgtTF/ZES+FEiVrg89vvEMaAuzoJ +p1S5TaUE62hrM+/tjxlpOGqneh/Rf5MuXUtpd3h0nFAl2B8dGIIUhF9+FIr8BULo6H3A+iEEkb/O +4RsMYUfnPeRXnESC0La709SOvRriiso57RmH6z2gJiMEwyDg2ucqMPo1P9mlMWu7ijN6/NUorxrQ +/n6PeIrbDQXKjH7gfySvxmzVlzbx8HSAl2ttByAVL0qIbZB29xfIa8FJegDB/L+11xUMa7USyeNB +inWvXxzC1f+fn8nBbcPYvEIp5qLMyjicagdG0mOULGUIJQvnNwEoobkwSAtyhejbmXgGODaUEs6h +/F3RKmXC0e1cLGBRK7AyIt+h68iL9oZXmmwLz12iq6KQwVPF7bxHgiEeTTXItKnU9Vu0v4y6cIis +wPqwiSLvAQD5wUTNHxaEfXitkw4bLGxuva7GUCYENvlCT7z9FwK9ctgYQCnNTgH3M92NLP0k8gQ0 +R+s4zmUZ93Dvg+HODMx1uRQQulca2DrNPdOCy7XSeMCpy1ghH14N6eRybVZmJgCsifN11Sr5he4m +IYvPSpFEPZjnlCYPbBJC5GBi5JT3/5Y4Kod74pXtxMrkYtFX9BZ4Ub2DkwC7pnIzL/t6tATK0ZCk +pv3wDjZXcaUu2SY9kIKXvbsLYNGECXrzOzBzxUx2qgz1aKx2nECEKCxTDVjwAuGs3Gq9iPLTW1TN +TbJu4diacyDpM++LHA2Pi98EytWYln1DpJTr67GGxZHE0/jMf8xR2gmHGZFZsP2Y4ExxL2vwz73H +iFdlN1nYGQrnnOAdSTwKxXj9ENxfoviW+F6rZjW2A/nuxsONR3SoU5FakLJ11q+E8yFnFVA6iFxK +utKMKmr/Nr0WGRSvCsb723BekUtxVVcfGq/8aYctsYCYaaGZ72gKnHx36i+E0hLnBVqZPfsnRnHk +z2+HwkkMy0KfAU4tnl18vIUyhD0HyDhaiWuIEqAgREHlP3rTUwme3J4+8LZtuR3uzNs6EaijhSQw +ZTShs3uGgymCPFyz22V2h8sIDNI4FARQFMgtfvhrPF00jxnnBLKej6wQM+d7lnwOdZZLbjwSQ6wS +CO3V6w3hdacVmBAWMLohezKfabsolvVAa79mSWFApBEiCetz0XQ50m0flV8p35SSIIE9a6oF6NCQ +jFvOuwI0lOtq62VLoSYAC6qNHZDqTaq1ICdTk3VzANbt2i/4uRKXueggQ/vDA70PaH9ME8iShOz2 +Fpy65jaPW5irTFllbDx99H93skUDDqsY67kugpLHU3mwGmccwYfpaSrZRSylxjHo8igrGJWaD5Ie +tz9hEz02Q9xn/nld/yJXYYlrMy7rz1iotLS2i+UObNwE7RBvO8lRC7IAnNhyUJBg+lVpBZDML6g+ +8qhWHNIpsgASF+H09IuWKF4yc5RIl8EwTfCgrHszIbAAkBn299uWPoW5NJqIP9fyGY4bzHn+LhQD +zIW+sGGWiaDrlpJ86NFkT37NJWer5JfZkZOlr6THNXe57V7fu8ODr21J4LNrEkCMJO9txy5V6Bed +SRrrqL+GQLGeM0UiYvlezzdWpilNyKOIIuCOfceUtEwTsaInuXbt+8NaI9s6kNv0s8wGUSgQvAp2 +OzhfBKRsOQuDQoYgABapiHYz9oXFmt2KwEWF07Le9Bd1NluiXWD/iezeezgaQxXc+/DrGom4blZn +OUmWOMcBnLKj30B6OqMMHCwFfkh0DQrIHNGJyuRjW8FNcw+NLbAKJ6eutrJoseI+qXrvAjP5xiZ6 +Dgvcu2BKVamZh9f7RjZjq3suIM+8vlVWTAl8t70Ct/xeARMJzdquu3mvVenu+HpWJzrBvNeJ90ms +5KFlJBCH3g0Hq4F+QQeHOPvdRlKjfpcGmv5fS9T9VFzZ5xkHQziEq0EfWF+MDOyb6lAF7fqx190L +5KIu+zGvGb73rCJPoRpZ5xvPjA/GSw1Syj+VOlGQifbLIsbheagZHX2xN3Oo9fJeh1stnUD0IwvE +lpC2xfM9Y4vS2SW66CIuyJAlTCuURTE4QequTVn2ZMyQCGbWd9LzoJWu5/HfVnB6ce65GySt+Nw9 +uijAOu6i9U6kIvPV8y8nKBC5myZtRvm6o+K/kQtpMxxDEIpchGC5t0WAJPn1ZSVzAu8/ecR+279w +WB4ICazFFX6cUSzs6cM9Vkil+wAU2rEAdff7ri7cbp22LalKP0UbV+CgHY+sm+FtnDG39ilNfX2L +itQgDZbAxsHRn3/Dg2c+99gRacn0IHZ/+O22TmJRlLqR5KCTaEJOR8x6NahvqbdjBvGosxWsN+7K +I7WMk8KqybS0fQ/fNEtgCme4BALFoBxBfKeTMJvfgjQUS4ADYUG1utTWX4/nqB1M8t/uWQXwZOut +mu9LeWg0VLSipYzjI8/sUPf/QAD/HQAxowOgezEmwapVYnnSRsVDRQF7KE/zMNvsPxzDm3PzjUxF +ZF8YTYq3VkHHHA3Jx1oIjSPW93JAbF74apfh14012S4B6V7YIcHB4iNKGbUztPNQmbVmCyFJbbiy +llEMZFXm1vFp/GDQ2oNAk2S0IUV7TtUHm2015s1BMur3ovTkGhv9N+dWhw61bp/6qR4hM9/neEWR +3KXQsEvyqerT5G7g7sCOUM3BI1Hg2dtdtK+8DwSwnoQ8oBLS3cOO31KC5PtRi29Zs8/EH6gdoo43 +mhu0ofqX6adEnyeWwkD3Qyp89hpcx/b52FaxfXT+CPE1zzkTGJmLg10HT/u2LJ/g3/1VYh6+yAbh +CDHLlWRSHSz8eczxsFZZiGScyUiOemJFlP7rFxs5JXse4so4P4ttOYSXf3ksWFgj96NarEkUuWkG +Ci7AJ3DIpVP2E8WFsVGHEthz+Vhtn0b27/Dz2zALayV/Rc8ojx9/d1dslJvgqhhmzQn5Rv5GYyUr +BWy/laTdTJRmg+Bw4xFRjzIjSJLJUZFeUeMHjO+k1PyaitI8NDklaZ9hy4Y8t6o2tUmBFYUqJN5n +tMplsVmhB04c3DTKopCThoLym2tHZcQskEWTD0x/uqunw8ZoonVkNPDm2mtavqAQk7QtgpjXE1/7 +YhbblLyULRG+r9ltk1z7WDjotdJgyabp6VaZx/HibFAY6dub9zJSiNzLQHlbhTyW0He6Gbk2mnFt +jTUL5mxMuxQyC4aGnuNtfa1lYl6agUlfg3JppJ2j9gmzqx/1IIQ8LvOd+YfxlWTCeM+SHDOEKflQ +rMAWqcO3CHYu8yAMzLYgcTBuSwBtF92T+mmkfrqVdKX427cjP9rShElAG8po62SN0gmveDR3lbRW +/lpcmYfEcEJH69e0D8eM1sVa10aXmSAVMdN6yUjCB8gWI45soqL2cyUspjJJSPP9JaH3WMOFhsrD +rnyvu+PAMkarI4Xy5om5yD/apqQ5gEqXUuu2Q2QxZnlXSCsqgoMLUnIqzoLN99MNC071hk+RZQVJ +fcSKuvfqoBbAVyMJOjfq5AH8fYJzsz3zgEmGhyxcDUBBqdGG0kHGwrvM0tSFXynw9YdP0AEsDNmm +jcDn+Ppm0PgZM9gw7Dngf+1tWQYZdvHhIQPm09BlCpuh/tc6w0AwMnr/7Pn88xZ5W1mxBDM9C19t +pbamYlSf40mtgAuuG25aS4T6Zo2BQy0TU+xBuNAxat+mAiY4AzzD1UwAAA0Fzya2i5zbOuII3EQZ +U+pgemCjCWmyKwSGE6wKP4y6K4qCRtYIgy8OVnOFjIR7yi8KrdDgT9JvWZKOR5gF2My0064fiEk9 +ewI70C2CjYmlLSvfAhZwLeWXdxuaIhrdlzdkxPn08KxvsX8OZdfleX1Qy/S+USMcWwMZW8hjk2lR +GZ3Jyi514s4560YO/jXz2YBllJFGzqBHtrhmMeLC3oechxuN+iBnFjtYAS1N38U0bMILZIQFfTc1 +NghiU54YHp8KD8xEN1KQL3wAXVe0mexwqENyZ0R3SD/s8esc5MOAE+WOXX2IJBj+8UBPTlzAlP9t +H0L6644o/GH99lgfcAdKE/0ULC7lI8EibLfG0VbabUC0b2UD8CqAbrP7AyapNE/ZeZXAfploOadA +xPDYP9E7ZZLDkr+Y/9tFEXd405WXReQbGEiA2274E/HoQNGHRPYtKqeepUeEyJhIlXge1HTgGUug +RJjqdGNU7NQy31O0X6lcpHx8oBXN0QR2ELQjsMUZayN90eQoaCLBWcJFbBGzSgHFZ8waWPwaNS7x +Y5J132WLpwBOKqXp+4enNwVLjRt7aCH3WRjThfAyLe6jYFMoIkJ9dGeNfFoohuNFuglvcs+aqb6N +Jouo1sFKaDIjyW/gAkWw3tWyN0XjAdVnT4RaZTb9Ga5frJwoAhAqyJzMHF/yGGuG2cYcWAxL7q80 +UeHu2YR1gJD8wBQ0E8D+PVd/+4vyGE/HNBsj5rbwbH/Yq925rEV1n5Om2llPydVt4m8UW9Ah3kZM +1deYwdp+MFdOKC6BTmotyMYxmEGlpauGzc7O8z3g8On4HlDTFbqJ6OYCQfglNOGEAb6Y7djsgpmi +i2kGFjpXZMOpOzOp3oWUvzfnBDIgZE0jAQIyGIAkkdcNJul4PtF4QF6w++RDiI2E9MxXzGVY/7/V +g2gitdNiI7E8y4dEV27EK9F31B760ryTqjRcXYniEJihqhGoGrdWFduzG4xqBZkiCY0tolPLcVMB +wkkJLbOuBIdRRNMSxbt7qMK+hce6+4a3bUinwRPv/EjgrHOQV0ZQDYhBqvGSgcN/vbDA5gt2/QzO +V8MhN8NC5pyHtOHgV8a93WSy3LE7pAHgy3AzvJFiOWEKU0zb4XLgLAxTzYj8XjRNwMfrVBk+i01R +9M3UmMVi/IYwoIrvw3SM7fuasVqzpMeUxiKdv3bu/hyTxd7vAbd/zwlZgzCFu2N8AzCgoyGjbX7a +D/FktE6UG6xWqh6KrRq3PuhgWf5JGOhr594rkhBaR0a3ZZkAUwpIgGsjN1E6eyCYIn7GDwC/rsOm +dE3j96GqS9BNbVhysdIpFIa9ODdltDKoyjHQtA0f4KSdmPxTBo1vRfR9+IMEO1UiL5Y0lh+TDu93 +bmVhT/QRM0izcAwxdQ4zm7N86Adh+Crgw1wYBX/SF6zJIPZGVz5GL4gL3xMwgCaDaM3+3qE+/0e8 +6xqSNWfHu92osW34rT9gluPbpiVg7lZUm/FKZkvZpRb9VcBTQTq0EtPh1SKSx2ueYGARRjSGByLW +1Y8htD++zFJNJmnVEMDpxABBcUngbdye0YxcsPkluJOU4rdAsnqkl298sQm26mIM88IfOc7k1/Og +WSDDH88e0tZzM9uzYWjo/sv9FyWaRg2o7CpKOIzFGL5ZjoyKt1AaKI+lXPfvBWgQw9edEfgesCrZ +aLP5HWzxJkUz4BXTuIuoHv2VmkYl6wkTIim8RLHUzsdVnUe+R6uDO6w3IZrxet+BIFD9nJ2PNGfE +yHutu53mPvhsPwxWGUgYJklzhNrsFcLgVwdSLfeW7VFsRpnA9YBSLZMj6Y62FdVRwp0yyf2Ddi2g +ZhoYTuw6kzSkCyNcg9i7FL0FRxOaBc5yHDkkW+i8Vd5hGtWTQnaaBvnYJG7jIDS879yrbMgJKE2Y +tzUzB9oOBcb+2fAsy8DFSk3vx3wKjd/a1AKDxRZa1Naga+YSppInf1PvKqlHcxDx6oUFkd18gdYQ +e4TvXfYKsYAlVvJ8jtVahPA8XYShr9VGJ7rScRXXRKiSm0QkUrKbfaNgn/xV58h017hZ4Gk7bDuH +E2Yi0C5iQPQ0RrDas+1DZ5iND6Lc0B9t4LdyKookcEJ2VvUyOYo6aEH8pMOZ1fSernYnujBlZjOi +LGqLi0BpjKzflQmgqrSR5N903jVFhqse+/7oXa8Yl+k2uQLcxRwB+1ebVp289O9lFYzhIA1z1lSt +27xwYvaVoURwuMeMkVTvp9cVMbDaTYs1HP4rmCapF9EsHgWdxCoFeiINtItkD59r5ik/QHKKjSMK +Gr9qTeTis/8CC+WtwxHKDd2l7eDbdmvj0bWxHueXnC/ifjdHh/12etK7A6aRpH9R1UDDV4vzBp+o +9brn+cbXgp64qIlc7esnQdQrY29+P12Sazs0rj5v7qzzIEbmvJjVsOB6DyKyVDLB2bpfxwcFsfNm +VxPRot+eTffNyYYyFe/cvnZySKFEiUkrYYYhACsVHsgMX4MLLALBLe0tnH1TSuGC8uXhtmhZWtWD +3upTs80bRmcJ/LnYxWuRj7KGXdZME1Zuc7srpJ/cdTZhZ+gsFEA5IKS9JSA8e28B52p/x6CXsifg +ZZmz7rv342Ym9ycuOrDkRQua4LM2Rrj4PX9cDjqSabf//MFotNhdwbeCfhe3tQif9wlTT5HNbCzw +g9+zvQ+aRFWAfmDDZtlRsrzpjmXpApAwsdyPPUQ39py68d4tAf8juPoYNXRr1OvjtKudHm7z4mv8 +2ihnyqn+tJrW1tyCLwfN9RCUOjhCD0KHqB9/3NiuDk204ct5jy5T3uv/Fc0lu62rb53CRUWQZhV6 +xQgBNjdO0pzQD7fW4zDnIj4WM4TKYJmZ8n3F9iJTTQ3Z/j2wGkrb4ASKARHN+e+oyqQJ6dhTn/Dn +y/dqrfdCogmBhWaQKYs5anvmWjls6vP/W3k+r8PL1Gnn8ewCgL6Ug691rlCFYryywFx6o9Hzk4BO +4kLFWMPtDbkxM403KyVfDIAG75R2P+EzoknoEw1qKSlfEQkp9CXQri03ihhLlWt3ZTycwb+0y38N +ozx26t0q/JwxxRN23st6kCmGfooWR/3CWE+6C05hU/wpwlyOjga69oIXb8gnAq6uWBKOgginhb/Q +mJbEFCh63/e5vxGEnUisX/pcXgIBWaCUjib5YV2WHjn76V0tYYl2E7upII7YLL8OjBPnBl3u6jwD +m1hEcnVJuusi4R/PQkOD+I1Q1odgZ+/5r6NMvbIvbs1OL0kdCkH6OcUeYyXFAGH149JlpV9zywRq +I+tMBa0HJX7i//9Bpq/AOYspaZplo/V0ONzBJJzbLd4a1PM9SDZVi9Zrtny53H8JIDc32duBriOU +rSvPc4NRgHPVdNOkvaTFtWOuqABWwf4xTEuexNauHMwrRnep8xfbllii7FzRF5qIzOHVOmLzS2uP +xQi2LCzmsil6S+4nQxkm4OgqRXoUhJhIoCzKXBOutdypQNRfeTL2aRqA9b4puVU9z90t+yYqHVrZ +yuc4kRgRm+ealvzrKey8/BdBPNpZWyMf/GBiTKOI8shHNmL8ZrvhxOg3qrp4lpK0ZUKPr+vnUo1H +r3dq4nuJTI+8BhM0BHV4lLEAkT8zjOS+lGKKqTf8yMEuJALwmNPP5Y+/A5Dc3A+J3WneaD/vy1Mw +SIi6M17CUUPT2kbij1nOWoP7gvRAh0ihelfAZKg7kT5/mreX+CL6seh5yCumeAV5brARvJatmMcx +Wd704mn0Lzjn0Prk9tv4k/5QTPN1kaJpe9CzY0I6paKfHMlXILZT+OPjpcg/3oObduirsq2ONCvA +N8wGC3XLy6x2D/AfYZUEYQM5zi1jm1t4fVSYh9t+IUZdILetxxVBC20IecLJ7pw5xdoDZYzir8Ad +VU35dJHiUPDLrdad3ueUrwYmx048X1XGxFaBIxHTl7ZkcX3p4PueoeXzGYML0E2nfE/Xw/BgDTUj +35kRkWNWJgGElitz9R+Xqy0TB47ct4LxToown+0IxHOYcoAXNnhjILXcQf9yYZ5xQ6vGmZmZyAjF +J3x866BWtzaR0EuEdR2g7PZfCCqeEX/wcPbWfUO9jUX1NbGmHv8mZ4nosOgd6oDb6w3Y0nC+mOyC +kL1HDbJxR/D5OGSVCTQ4yjFyM1bMx+ewzQBt9FphpZ1SZi5olK508+Qpl8hjaIL/exDVk69S3SCG +7Lngxe/tPbHtzhbNmcgdI1boeciEG2d1as4yu4el5F52/pMeb6An3SYfL08AyfsPosB7/95AtJ+w +Qk6aRzYfFm5tvWiXEnLswy4IJk7b0cvR7sv7+zOhUVXZQxvvPBwRVaYPNo8rgS18kZdsFIVp3rHd +cIeftgR+dMMTibhBR2r8yKyAjIpgmfA1eB7v/sk9PhecZBHribR/aloTSeJhnb4mnOF8o6QVdCR9 +5EVgQM4ckTzXAwF+uFHaDhAjoUQo33PEmfo1VmuHdcpoEPE4uqYHNXhDFGvPJTTmo3K1QJf2LduC +774wZxo80kQ9toWTsJHa6HQGb7wwxM/D4PBUzGBGN0ZTIbf96MgnJcGCho2D33X6K5Zuka3n06KR +SdAPf8qWoICfJNZfuQ/xWpDtWYZawwmq0OYBAVYGSZ+XicvYlHU+IXfxqLsdz3xvosQEwmj6pJmM +XBhvVZxAwRU7KZ8k5uV/8+6EB3+AFE893dHj1NafH0ZaSXrTWexlvBG5ZSj/bFdTab6v0FtC/x5x +6YVQK7eCzCdk1E41oOMmDTXtfAMjWCVOnvbMFGNa3HQzarzBsqssODo76Y7jbIiOJ2oDwH8Larx8 +eMeHl1/ZQPbCVnl8cIJpa2raaV5y+v5cQJxXsBxo9uLB5sStf8D0aWyG15KXVFW0z+6EdJjn8M0w +EjEBS152QU3JjVaQHXPQaEAcLF01YmrykvIX74uLbKkYabd4S73xs3rsK2ijYeZai/Y1Xcu9hMq9 +cCoEAjjvr0TnqYKObHk5oFNvQ4vnD0tLH+XgtCfzd5vF6VrbhbrFM9j4B+4DhOqUrORAogMqy/7P +uStaKBoIoAOFY3VtnX4jk0My8fhaYlQiFYhVfDzx27zwdX8htWqrC5LjfqXVDMXqy1P4IVJVCLvR +05hMD0CjOKDZBUtxS5j9z7dV7YN7Frsx2ojpxMzBDYEX1FWv8QTybrFHINylnkpr64C/7zoNJ5GK +/vAp3QvGuiXxXNgpanRtt75I9+Wf/xyudOzdCIsyt5TBT7e8y35WbdrRSi60Gx3Xz0PbOkMOE3cs +Xb1V/G8dS2/lgDlzUcD7rkAONeTADSJYhzK38UKhiwAcPFnGMLlNFeSXbHmMhWa66y4ZWqROLiK0 +i2nA7ipLCriwLwIq4i53kHFx7W7vOXBJAe+DUYuAdCvPc7ePTu1cy1ZivEnfKFt792jxqhYnshLn +QKbwvaY2ziB9MUXv783qjekyxOcrEt38T6jzFpBY0xULGnn56CaSwIrArX6aI8JMPgIe2+DOUIKp +VnmCKZJf2uzLI+DSintdjdh6X2CzbLGXgSjsLHXNgerTY1beuULRNrIuckAfcfNBLpCB6GNV90+W +BEsDRH80Lg9KshSrfYQBJJBMryz62BgdIN1RAonQ07meBJiNCXLyOk0/BtXZW1zOcLk4PsR2WFiR +R2KbJkKUckCcp3pJhY8u2UtoD7YfD8aj7G42cYhaS+7A2+UxmjQ/gh5/p2dcvGNdjIFuP/p3v448 +p6TMyx7s6UUa0SiU4mukovRNBCbnxEiv9ffSlAtmwqozIIH1BVFfREWB80egxcJQeDNE0QPrYR5D +TPOUVsKHyPxUZ5UUIckJXbwDJQpAalAoImHEoiUa3uDRmfjfLBX/mYFIDI4pmkQcaQJmApEafRRx +abFLh90/a4QcKjQ25vjUtOGTR58= +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_accum_fixed.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_accum_fixed.sv new file mode 100644 index 0000000..fe0f020 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_accum_fixed.sv @@ -0,0 +1,92 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +WG1wgBT+ufQQq7KbHwLeeujqsLkqn6MQ5cCFEjOZFc01/9aTBIMjtV8IZLInvPc3Oh4pin9N7D3T +qe6V8bt4RyGkDqH+z/cWRjrVQddj8BmnQ/NWVIWpjDMaS/nKAZte7N2yhbQBi5m61f1XrWG2buc6 +vvjbRVdFzA8GA/bxqGj1iwYVlOTjHHALEY5w8GTiFKapOlYdIKe6GPdNnwJLsP8TAzgm4BSVXAhV +WVAS/fSWEbngzjk0dyn0erZuKsMhXY0Mdu001+Ih6XkVbd5rvJ2IrS2CeMzr/XG/MKU0pVYWR6lO +I3QRvtAifq8A2kIujjw25Wa9agM3HlhTd4hyLQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 4016) +`pragma protect data_block +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 +wX7D7tX71QfA7tCwyM8ASO7knNIYjwD1Nf4= +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_accum_fp32_convert.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_accum_fp32_convert.sv new file mode 100644 index 0000000..bd48807 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_accum_fp32_convert.sv @@ -0,0 +1,95 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +kTvilwk++eOBIS3hZzCJ5Hg979pxxbiNB5pMriJ+GZ3u3ctpIgBcnFkg8hKvpG0Q0zkLMSw/TuUS +gc98wJ3cIM2pU8qzMwY4hU26grONKNO9mxtabIPXOSOjUrEOTEH+dXI8t8emHPTbaZ0oNInjvrB/ +7jW5AHu3fUWAwY5sgUCbEt+ePSeIVCQhAnPA6V8oHTJTXbShNdKczUdQpyZQlQsRabVnGtRaaRTL +ZKNjtEejF0BUcnRYNm/qUs9kGKnIt9SZpBWkAEQlxxIvC5jvDgaDouxr/SxNIdReoaPyGy+eRz+M +CuGlOR4dQW0IpLkWK6uvPd1h2sicA++yJYR//Q== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 4192) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_accum_fp32_dsp.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_accum_fp32_dsp.sv new file mode 100644 index 0000000..ccc2f4c --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_accum_fp32_dsp.sv @@ -0,0 +1,100 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +1dupKyEJnsEkMFWgoT4Obws3gRblXcL3amfkWFMMuF65FtXlGMQTvrQ9ucRW5ly4ZzSVd8Q2jDGl +1wah1xj0j5eCjyOm5yhH2+vk9e/ptPE9Q1wCJ/Z3he7bXnb2nzEF+onjjQKNGsRfkU/AK+FT1yNX +lcpTKd7rmLw4AjZsVQrUYIX3AM3spHDC3sIUB0lNsgo32yEC63X36NqMdY022UuZq7RNiClbmtgY +insC8CTzm6NzIAk+grUSa1l1aPgT9IMEBclOoDSJRJe0RcEwtRF/w2NROPqxfN+Ull0OzCS/1Fwk +zIhSWohQQ1xV3fK1bsDnmSMW/FV+/ngfWFyFng== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 4496) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_altera_syncram_wrapped.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_altera_syncram_wrapped.sv new file mode 100644 index 0000000..9d67c96 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_altera_syncram_wrapped.sv @@ -0,0 +1,1034 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +/////////////////////////////////////////////////////////////////////////////////////// +// // +// ACL ALTERA SYNCRAM WRAPPED // +// // +// DESCRIPTION // +// =========== // +// This is a wrapper around the altera_syncram component and behaves in almost // +// the exact same way when the parameter enable_ecc is set to "FALSE". The // +// module has the added (soft) ECC feature. // +// // +// The module has the exact same interface except for // +// * Two addtional parameters: // +// - "enable_ecc": accepts "TRUE" or "FALSE". The default is "FALSE" // +// - "connect_clr_to_ram": accepts 1'b0 or 1'b1 and controls whether the aclr // +// and the sclr signals need to be connected to the altera_syncram component // +// or only to the encoder/decoder. // +// * One additional output port: // +// - "ecc_err_status": this is a 2-bit status signal that behaves as follows: // +// ---------------------------------------------------------------- // +// Status Meaning // +// ---------------------------------------------------------------- // +// 00 No error detected // +// 10 Error detected and corrected (single bit error) // +// x1 Error detected but uncorrectable (double bit error) // +// ---------------------------------------------------------------- // +// // +// Required files // +// ============== // +// dla_acl_ecc_encoder.sv // +// dla_acl_ecc_decoder.sv // +// dla_acl_ecc_pkg.sv // +// // +// Usage // +// ===== // +// Only if using A10, this module can be used with the "enable_ecc" parameter // +// set to "TRUE" to enable ECC. When ECC is disabled, the wrapper can be used // +// with any family in almost the exact same way as the altera_syncram IP. // +// // +// Notes // +// ===== // +// Notable differences between this and altera_syncram: // +// - The S10 additional ports: address2_a, address2_b, eccencparity, // +// eccencbypass, are not available here. // +// - The S10 additional paremter width_eccencparity is not available here. // +// - The two ports clocken2 and clocken3 are not avilable here because they are // +// not supported on S10 and they cause clear box issues. Plus, we don't use // +// them anywhere. // +// - This was taken from the simulation model for altera_syncram which was // +// using tri0 or tri1 for the input/output ports. As it is not recommended to // +// use tri0/tri1, we changed all inputs ports to be of type "wire" and all // +// output ports to be of type "logic". In simulation, everything seems to be // +// okay with this change. All the testbenches pass as expected. Will keep an // +// eye on this in the hardware runs to see if it's okay. // +// - On Stratix 10 and in BIDIR_DUAL_PORT, it is not allowed to use // +// addressstall_a and addressstall_b, so we do not connect those for the // +// BIDIR_DUAL_PORT case for all families. // +// // +// - Byteenables: // +// * If ECC is off, then we decide whether to connect the byte enable ports // +// depending on the byte enable width specified. If the width is 1, then we // +// don't connect since the defaul is 1, which means the parameter is not // +// manually specified. // +// * If ECC is on, then we decide wether to connect the byte enable ports // +// depending on the new parameter use_byteena which is set to 1 in the // +// backend if byte enables are truly used. This parameter is set to 1 if the // +// store instruction is byteenabled OR if the width of the data to store is // +// different than the width of the memory. This is only observed for // +// dla_acl_mem1x and dla_acl_mem2x. So, when ECC is ON, ECC slice size is set // +// to 8, and after adding the parity bits and padding with zeros, the resulting // +// memory width will double, so will the width of the byte enalbe signals // +// // +/////////////////////////////////////////////////////////////////////////////////////// + +`default_nettype none +`include "dla_acl_parameter_assert.svh" + +module dla_acl_altera_syncram_wrapped +import dla_acl_ecc_pkg::*; +#( + + /*------------------------------------\ + | Original altera_syncram paramters | + \------------------------------------*/ + + // PORT A PARAMETERS + parameter width_a = 1, + parameter widthad_a = 1, + parameter widthad2_a = 1, + parameter numwords_a = 0, + parameter outdata_reg_a = "UNREGISTERED", + parameter address_aclr_a = "NONE", + parameter outdata_aclr_a = "NONE", + parameter width_byteena_a = 1, + + // PORT B PARAMETERS + parameter width_b = 1, + parameter widthad_b = 1, + parameter widthad2_b = 1, + parameter numwords_b = 0, + parameter rdcontrol_reg_b = "CLOCK1", + parameter address_reg_b = "CLOCK1", + parameter outdata_reg_b = "UNREGISTERED", + parameter outdata_aclr_b = "NONE", + parameter indata_reg_b = "CLOCK1", + parameter byteena_reg_b = "CLOCK1", + parameter address_aclr_b = "NONE", + parameter width_byteena_b = 1, + + // Clock Enable Parameters + parameter clock_enable_input_a = "NORMAL", // Valid possible values: NORMAL, BYPASS, ALTERNATE + parameter clock_enable_output_a = "NORMAL", // Valid possible values: NORMAL, BYPASS + parameter clock_enable_input_b = "NORMAL", // Valid possible values: NORMAL, BYPASS, ALTERNATE + parameter clock_enable_output_b = "NORMAL", // Valid possible values: NORMAL, BYPASS + parameter clock_enable_core_a = "USE_INPUT_CLKEN", // Valid possible values: USE_INPUT_CLKEN, NORMAL, BYPASS, ALTERNATE + parameter clock_enable_core_b = "USE_INPUT_CLKEN", // Valid possible values: USE_INPUT_CLKEN, NORMAL, BYPASS, ALTERNATE + + // Read During Write Paramters + parameter read_during_write_mode_port_a = "NEW_DATA_NO_NBE_READ", + parameter read_during_write_mode_port_b = "NEW_DATA_NO_NBE_READ", + parameter read_during_write_mode_mixed_ports = "DONT_CARE", + + // NADDER NEW FEATURES + parameter outdata_sclr_a = "NONE", + parameter outdata_sclr_b = "NONE", + parameter enable_coherent_read = "FALSE", + parameter enable_force_to_zero = "FALSE", + + // GLOBAL PARAMETERS + parameter operation_mode = "BIDIR_DUAL_PORT", + parameter byte_size = 0, + parameter ram_block_type = "AUTO", + parameter init_file = "UNUSED", + parameter init_file_layout = "UNUSED", + parameter maximum_depth = 0, + parameter intended_device_family = "Arria 10", + parameter lpm_hint = "UNUSED", + parameter lpm_type = "altsyncram", + parameter implement_in_les = "OFF", + parameter power_up_uninitialized = "FALSE", + + /*----------------\ + | New parameters | + \----------------*/ + + // ECC RELATED PARAMETERS + parameter enable_ecc = "FALSE", // in the future, this may turn on hard ecc or soft ecc, depending on the RAM type, for now only soft ecc is supported + parameter connect_clr_to_ram = 0, // If 1, the pass in the aclr and sclr signal to RAM ,aclr and scrl will now also be used for register from ecc decoder signals + + parameter do_not_connect_addressstall = 0, // Prevent connecting addressstall when unused because this prevents Quartus from putting AUTO into an MLAB + parameter do_not_connect_read_enable = 0, // If 1, then do not connect read enable ports + + + // BYTE ENABLE SUPPORT + parameter use_byteena = 0 // If 1, then byte enables are truly used and we must handle that case separately when ECC is ON. +) +( + + /*------------------------------------\ + | Original altera_syncram I/O ports | + \------------------------------------*/ + + // INPUT PORT DECLARATION + input wire wren_a, // Port A write/read enable input + input wire wren_b, // Port B write enable input + input wire rden_a, // Port A read enable input + input wire rden_b, // Port B read enable input + input wire [width_a-1:0] data_a, // Port A data input + input wire [width_b-1:0] data_b, // Port B data input + input wire [widthad_a-1:0] address_a, // Port A address input + input wire [widthad_b-1:0] address_b, // Port B address input + + // clock inputs on both ports and here are their usage + // Port A -- 1. all input registers must be clocked by clock0. + // 2. output register can be clocked by either clock0, clock1 or none. + // Port B -- 1. all input registered must be clocked by either clock0 or clock1. + // 2. output register can be clocked by either clock0, clock1 or none. + + input wire clock0, + input wire clock1, + + // clock enable inputs and here are their usage + // clocken0 -- can only be used for enabling clock0. + // clocken1 -- can only be used for enabling clock1. + + input wire clocken0, + input wire clocken1, + + // clear inputs on both ports and here are their usage + // Port A -- 1. all input registers can only be cleared by clear0 or none. + // 2. output register can be cleared by either clear0, clear1 or none. + // Port B -- 1. all input registers can be cleared by clear0, clear1 or none. + // 2. output register can be cleared by either clear0, clear1 or none. + + input wire aclr0, + input wire aclr1, + + input wire [width_byteena_a-1:0] byteena_a, // Port A byte enable input + input wire [width_byteena_b-1:0] byteena_b, // Port B byte enable input + + // Stratix II related ports + input wire addressstall_a, + input wire addressstall_b, + + // Nadder new features - Stratix 10 onwards + input wire sclr, + + // OUTPUT PORT DECLARATION + output logic [width_a-1:0] q_a, // Port A output + output logic [width_b-1:0] q_b, // Port B output + + + /*----------------\ + | New I/O ports | + \----------------*/ + + output logic [1:0] ecc_err_status //10 = error detected and corrected (memory in not updated), 01 = error detected but uncorrectable +); + + // Check if the two port widths match in the case where width_b is set by the user (that is != 1). We do not support different port widths. + // Also check if the enable_ecc parameter is legal. + // The checks are done in Quartus pro and Modelsim, they are disabled in Quartus standard because they results in a syntax error (parser is based on an older systemverilog standard) + // the workaround is to use synthesis translate to hide this from Quartus standard, ALTERA_RESERVED_QHD is only defined in Quartus pro, and Modelsim ignores the synthesis comment + `ifdef ALTERA_RESERVED_QHD + `else + //synthesis translate_off + `endif + + generate + `DLA_ACL_PARAMETER_ASSERT_MESSAGE((width_b == 1) || (width_a == width_b), $sformatf("dla_acl_altera_syncram_wrapped: Values of width do not match. width_a:%d width_b:%d \n", width_a, width_b)) + `DLA_ACL_PARAMETER_ASSERT_MESSAGE((enable_ecc == "TRUE") || (enable_ecc == "FALSE"), $sformatf("dla_acl_altera_syncram_wrapped: illegal value of enable_ecc = %s, legal values are \"TRUE\" or \"FALSE\"\n", enable_ecc)) + endgenerate + + `ifdef ALTERA_RESERVED_QHD + `else + //synthesis translate_on + `endif + + // Calculate the internal memory width (width of the codewords) + // Even though we compute both memory_width_a and memory_width_b, we do not currently support different port widths. + // We make the distinction here to avoid errors in the single port case. + localparam int MAX_ECC_WIDTH = (use_byteena) ? 8 : 32; //this value should be ECC_GROUP_SIZE and can be swept to tradeoff fmax vs memory overhead. Do not set this value larger than 64 due to altecc implementation + localparam int NUM_GROUPS = getNumGroups(width_a, MAX_ECC_WIDTH); + localparam int MEMORY_WIDTH_A = (enable_ecc == "TRUE") ? getEncodedBitsEccGroup(width_a, MAX_ECC_WIDTH) : width_a; // width of codewords coming out of the encoder at port a + localparam int MEMORY_WIDTH_B = (enable_ecc == "TRUE") ? getEncodedBitsEccGroup(width_b, MAX_ECC_WIDTH) : width_b; // width of codewords coming out of the encoder at port b + + // BYTE ENABLE SUPPORT + localparam int I_MEMORY_WIDTH_A = (enable_ecc == "TRUE") ? ((use_byteena == 1) ? MAX_ECC_WIDTH*2*NUM_GROUPS : MEMORY_WIDTH_A) : width_a; // width of the codewords in the RAM at port a. + localparam int I_MEMORY_WIDTH_B = (enable_ecc == "TRUE") ? ((use_byteena == 1) ? MAX_ECC_WIDTH*2*NUM_GROUPS : MEMORY_WIDTH_B) : width_b; // width of the codewords in the RAM at port b. + localparam int I_WIDTH_BYTEENA_A = (enable_ecc == "TRUE" && use_byteena == 1) ? 2*width_byteena_a : width_byteena_a; // width of the byteenable signal for port a. That doubles if ECC is used and use_byteena = 1. + localparam int I_WIDTH_BYTEENA_B = (enable_ecc == "TRUE" && use_byteena == 1) ? 2*width_byteena_b : width_byteena_b; // width of the byteenable signal for port b. That doubles if ECC is used and use_byteena = 1. + + localparam int ERR_CORRECTED_PULSE_EXTENSION_WIDTH = 3; // amount of pulse stretching for the "error corrected" signal. + + // signals for making internal connections + // + // Data flow diagram: + // --------- ------------ ---------------- ------------- --------- + // data--->|encoder|---codeword_wr--->|pad groups|---i_codeword_wr--->|altera_syncram|---i_codeword_rd--->|trim groups|---codeword_rd--->|decoder|--->q + // --------- ------------ ---------------- ------------- --------- + // If ECC is OFF: the encoder, the decoder, the padding, and the trimming blocks are pass-through + // If ECC is ON and use_byteena = 1, all the blocks are there. + // If ECC is ON and use_byteena = 0, the padding and the trimming blocks are pass-through. + + + logic [MEMORY_WIDTH_A-1:0] codeword_wr_a; + logic [MEMORY_WIDTH_A-1:0] codeword_rd_a; + + logic [MEMORY_WIDTH_B-1:0] codeword_wr_b; + logic [MEMORY_WIDTH_B-1:0] codeword_rd_b; + + logic [I_MEMORY_WIDTH_A-1:0] i_codeword_wr_a; + logic [I_MEMORY_WIDTH_A-1:0] i_codeword_rd_a; + + logic [I_MEMORY_WIDTH_B-1:0] i_codeword_wr_b; + logic [I_MEMORY_WIDTH_B-1:0] i_codeword_rd_b; + + logic [I_WIDTH_BYTEENA_A-1: 0] i_byteena_a; // Internal byteenable signal for port a, which has double the width if ECC is on + logic [I_WIDTH_BYTEENA_B-1: 0] i_byteena_b; // Internal byteenable signal for port b, which has double the width if ECC is on + + + + logic aclr0_int; // aclr0 signal to be sent to altera_syncram + logic aclr1_int; // aclr1 signal to be sent to altera_syncram + logic sclr_int; // sclr signal to be sent to altera_syncram + + logic err_fatal; // ecc status signal for detected uncorrected error + logic err_corrected; // ecc status signal for detected corrected error + + //////////////////////////////////////////////////////// + //INTERNAL WIRE DECLARATIONS + + wire i_outdata_clken_a; + wire i_outdata_clken_b; + wire i_clock1; + wire i_clocken1; + wire i_clocken0; + wire i_clocken1_b; + wire i_clocken0_b; + wire i_in_data_clken_b; + + wire i_ecc_enc_clk_a; + wire i_ecc_dec_clk_a; + wire i_ecc_enc_clk_b; + wire i_ecc_dec_clk_b; + + wire i_ecc_aclr; + + // SIGNAL ASSIGNMENT + // Clock signal assignment for ecc encoder and decoder + assign i_ecc_enc_clk_a = clock0; // Port A input register is always clocked with clock0 + assign i_ecc_dec_clk_a = (outdata_reg_a == "CLOCK0") ? + clock0 : (outdata_reg_a == "CLOCK1") ? + clock1 : i_ecc_enc_clk_a; // If output is unregistered, use the input clock. + + // Clear box doesn't understand it if clock1 is set to 1'b1 when the wrapper is instantiated. + // Therefore, we need to use heuristics here to manually disconnect to drive some of the ports, based on the + // combination of parameters. + // This needs to be done for clock1 and clocken1 + // ***************************************** + // legal operations for all operation modes: + // | PORT A | PORT B | + // | RD WR | RD WR | + // BDP | x x | x x | + // DP | x | x | + // SP | x x | | + // ROM | x | | + // ***************************************** + + // Note that the clock for indata_reg_b should be equal to the clock address_reg_b + assign i_clock1 = (operation_mode == "ROM") + || ((operation_mode == "SINGLE_PORT") && (outdata_reg_a !="CLOCK1")) + || ((operation_mode == "DUAL_PORT") && (outdata_reg_b != "CLOCK1") && (address_reg_b != "CLOCK1")) + || ((operation_mode == "BIDIR_DUAL_PORT") && (outdata_reg_a != "CLOCK1") && (outdata_reg_b != "CLOCK1" ) && (address_reg_b != "CLOCK1")) ? + 1'b1 : clock1; + assign i_clocken1 = (operation_mode == "ROM") + || ((operation_mode == "SINGLE_PORT") && (outdata_reg_a !="CLOCK1")) + || ((operation_mode == "DUAL_PORT") && (outdata_reg_b != "CLOCK1") && (address_reg_b != "CLOCK1")) + || ((operation_mode == "BIDIR_DUAL_PORT") && (outdata_reg_a != "CLOCK1") && (outdata_reg_b != "CLOCK1" ) && (address_reg_b != "CLOCK1")) ? + 1'b1 : clocken1; + + // Note that clock for indata_reg_b should be equal to the clock for address_reg_b + assign i_ecc_enc_clk_b = (address_reg_b == "CLOCK0") ? + clock0 : clock1; // Port A input register is always clocked with clock0 + assign i_ecc_dec_clk_b = (outdata_reg_b == "CLOCK0") ? + clock0 : (outdata_reg_b == "CLOCK1") ? + clock1 : i_ecc_enc_clk_b; // If output is unregistered, use the input clock. + + // Clock enable signal assignment + // port a clock enable assignments: + assign i_outdata_clken_a = (clock_enable_output_a == "BYPASS") ? + 1'b1 : (outdata_reg_a == "CLOCK1") ? + clocken1 : (outdata_reg_a == "CLOCK0") ? + clocken0 : 1'b1; + // port b clock enable assignments: + assign i_outdata_clken_b = (clock_enable_output_b == "BYPASS") ? + 1'b1 : (outdata_reg_b == "CLOCK1") ? + clocken1 : (outdata_reg_b == "CLOCK0") ? + clocken0 : 1'b1; + + assign i_ecc_aclr = aclr0 | aclr1; // The pulse extender and the latch for both ports should reset on any clear. + + assign i_clocken0 = (clock_enable_input_a == "BYPASS") ? + 1'b1 : clocken0; + + assign i_clocken0_b = (clock_enable_input_b == "BYPASS") ? + 1'b1 : clocken0; + + assign i_clocken1_b = (clock_enable_input_b == "BYPASS") ? + 1'b1 : clocken1; + + assign i_in_data_clken_b = (address_reg_b == "CLOCK0") ? i_clocken0_b : i_clocken1_b; + + // aclr and sclr assignments. + generate + if( connect_clr_to_ram != 1) begin + assign aclr0_int = 1'b0; + assign aclr1_int = 1'b0; + assign sclr_int = 1'b0; + end else begin + assign aclr0_int = aclr0; + assign aclr1_int = aclr1; + assign sclr_int = sclr; + end + endgenerate + + genvar i; + generate + if (enable_ecc == "TRUE") begin : GEN_ECC_ENABLED + + logic err_corrected_int_a; + logic err_corrected_pulse_extended_a; + + logic err_corrected_int_b; + logic err_corrected_pulse_extended_b; + + logic err_fatal_int_a; + logic err_fatal_latched_a; + + logic err_fatal_int_b; + logic err_fatal_latched_b; + + logic [ERR_CORRECTED_PULSE_EXTENSION_WIDTH-1:0] d_a; + logic [ERR_CORRECTED_PULSE_EXTENSION_WIDTH-1:0] d_b; + + // instantiate the ECC encoder for port a + dla_acl_ecc_encoder #( + .DATA_WIDTH (width_a), + .ECC_GROUP_SIZE (MAX_ECC_WIDTH), + .INPUT_PIPELINE_STAGES (0), + .OUTPUT_PIPELINE_STAGES (0) + ) dla_acl_ecc_encoder_inst_a ( + .clock (i_ecc_enc_clk_a), + .clock_enable (i_clocken0), // This will be added after ecc_enc/dec update + .i_data (data_a), + .o_encoded (codeword_wr_a) + ); + + // instantiate the ECC encoder for port b + dla_acl_ecc_encoder #( + .DATA_WIDTH (width_b), + .ECC_GROUP_SIZE (MAX_ECC_WIDTH), + .INPUT_PIPELINE_STAGES (0), + .OUTPUT_PIPELINE_STAGES (0) + ) dla_acl_ecc_encoder_inst_b ( + .clock (i_ecc_enc_clk_b), + .clock_enable (i_in_data_clken_b), // This will be added after ecc_enc/dec update + .i_data (data_b), + .o_encoded (codeword_wr_b) + ); + + if (use_byteena) begin + genvar g; + for (g = 0; g < NUM_GROUPS; g++) begin : pad_codewords + localparam int new_enc_base = g*MAX_ECC_WIDTH*2; + localparam int old_enc_base = g*getEncodedBits(MAX_ECC_WIDTH); + localparam int enc_width = getEncodedBits(MAX_ECC_WIDTH); + + assign i_codeword_wr_a[new_enc_base +: enc_width] = codeword_wr_a[old_enc_base +: enc_width]; + assign i_codeword_wr_a[new_enc_base+enc_width +: 2*MAX_ECC_WIDTH-enc_width] = '0; + + assign i_codeword_wr_b[new_enc_base +: enc_width] = codeword_wr_b[old_enc_base +: enc_width]; + assign i_codeword_wr_b[new_enc_base+enc_width +: 2*MAX_ECC_WIDTH-enc_width] = '0; + + assign codeword_rd_a[old_enc_base +: enc_width] = i_codeword_rd_a[new_enc_base +: enc_width]; + + assign codeword_rd_b[old_enc_base +: enc_width] = i_codeword_rd_b[new_enc_base +: enc_width]; + end + + for (g = 0; g < width_byteena_a; g++) begin : adjust_byteena_a + assign i_byteena_a[2*g] = byteena_a[g]; + assign i_byteena_a[2*g+1] = byteena_a[g]; + end + + for (g = 0; g < width_byteena_b; g++) begin : adjust_byteena_b + assign i_byteena_b[2*g] = byteena_b[g]; + assign i_byteena_b[2*g+1] = byteena_b[g]; + end + end + else begin + assign i_codeword_wr_a = codeword_wr_a; + assign i_codeword_wr_b = codeword_wr_b; + assign codeword_rd_a = i_codeword_rd_a; + assign codeword_rd_b = i_codeword_rd_b; + assign i_byteena_a = byteena_a; + assign i_byteena_b = byteena_b; + end + + // instantiate the ECC decoder for port a + dla_acl_ecc_decoder #( + .DATA_WIDTH (width_a), + .ECC_GROUP_SIZE (MAX_ECC_WIDTH), + .INPUT_PIPELINE_STAGES (0), + .OUTPUT_PIPELINE_STAGES (0), + .STATUS_PIPELINE_STAGES (0) + ) dla_acl_ecc_decoder_inst_a ( + .clock (i_ecc_dec_clk_a), + .clock_enable (i_outdata_clken_a), // This will be added after ecc_enc/dec update + .i_encoded (codeword_rd_a), + .o_single_error_corrected (err_corrected_int_a), //Flag signal to reflect the status of data received. Denotes single-bit error found and corrected. You can use the data because it has already been corrected. + .o_double_error_detected (err_fatal_int_a), // Flag signal to reflect the status of data received. Denotes double-bit error found, but not corrected. You must not use the data if this signal is asserted. + .o_data (q_a) + ); + + // instantiate the ECC decoder for port b + dla_acl_ecc_decoder #( + .DATA_WIDTH (width_b), + .ECC_GROUP_SIZE (MAX_ECC_WIDTH), + .INPUT_PIPELINE_STAGES (0), + .OUTPUT_PIPELINE_STAGES (0), + .STATUS_PIPELINE_STAGES (0) + ) dla_acl_ecc_decoder_inst_b ( + .clock (i_ecc_dec_clk_b), + .clock_enable (i_outdata_clken_b), // This will be added after ecc_enc/dec update + .i_encoded (codeword_rd_b), + .o_single_error_corrected (err_corrected_int_b), //Flag signal to reflect the status of data received. Denotes single-bit error found and corrected. You can use the data because it has already been corrected. + .o_double_error_detected (err_fatal_int_b), // Flag signal to reflect the status of data received. Denotes double-bit error found, but not corrected. You must not use the data if this signal is asserted. + .o_data (q_b) + ); + + always_ff @(posedge i_ecc_dec_clk_a or posedge i_ecc_aclr) begin + if (i_ecc_aclr) begin + err_fatal_latched_a <= 1'b0; + err_corrected_pulse_extended_a <= 1'b0; + d_a <= 'b0; + end + else begin + if (rden_a) begin + err_fatal_latched_a <= err_fatal_latched_a | err_fatal_int_a; + + d_a[0] <= err_corrected_int_a; + for (int i = 1; i < ERR_CORRECTED_PULSE_EXTENSION_WIDTH; i++) begin : pulse_extend_a + d_a[i] <= d_a[i-1]; + end + + err_corrected_pulse_extended_a <= ( | d_a) | err_corrected_int_a; + end + + if (sclr) begin + err_fatal_latched_a <= 1'b0; + err_corrected_pulse_extended_a <= 1'b0; + d_a <= 'b0; + end + end + end + + always_ff @(posedge i_ecc_dec_clk_b or posedge i_ecc_aclr) begin + if (i_ecc_aclr) begin + err_fatal_latched_b <= 1'b0; + err_corrected_pulse_extended_b <= 1'b0; + d_b <= 'b0; + + end + else begin + if (rden_b) begin + err_fatal_latched_b <= err_fatal_latched_b | err_fatal_int_b; + d_b[0] <= err_corrected_int_b; + for (int i = 1; i < ERR_CORRECTED_PULSE_EXTENSION_WIDTH; i++) begin : pulse_extend_b + d_b[i] <= d_b[i-1]; + end + + err_corrected_pulse_extended_b <= ( | d_b) | err_corrected_int_b; + end + + if (sclr) begin + err_fatal_latched_b <= 1'b0; + err_corrected_pulse_extended_b <= 1'b0; + d_b <= 'b0; + end + end + end + + + // Note that the latched and pulse extended registers from port A and port B may generally be clocked differently. + // We are oring them here asyncronously, since from here, resulting or is async. This will not cause a problem as long as + // both of the ports use the same clock (currently always the case in OpenCL), or the status goes into a syncronizer. + + assign err_fatal = err_fatal_latched_a | err_fatal_latched_b; + assign err_corrected = err_corrected_pulse_extended_a | err_corrected_pulse_extended_b; + assign ecc_err_status = {err_corrected,err_fatal}; + + end else begin : GEN_ECC_DISABLED // soft_ecc is false + + assign err_corrected = 1'b0; + assign err_fatal = 1'b0; + assign ecc_err_status = {err_corrected,err_fatal}; + assign i_codeword_wr_a = data_a; + assign i_codeword_wr_b = data_b; + assign q_a = i_codeword_rd_a; + assign q_b = i_codeword_rd_b; + assign i_byteena_a = byteena_a; + assign i_byteena_b = byteena_b; + + end + + endgenerate + + /*----------------------------------------\ + | Internal altera_syncram instantiation | + \----------------------------------------*/ + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // // + // If ECC is ON // + // There 4 possible altera_syncram instantiations. The different settings are // + // summarized below. Every other port is the same among all instantiations. // + // In BIDIR_DUAL_PORT mode or MLAB block type, addressstall_a and // + // addressstall_b should not be connected because they are not allowed on // + // Stratix 10 for BIDIR_DUAL_PORT and on Arria 10 MLABs. // + // // + // -------------------------------------------------------------------------------------------------------------------------------------- // + // ECC Mode use_byteena | byteena_a byteena_b addressstall_a addressstall_b // + // -------------------------------------------------------------------------------------------------------------------------------------- // + // ON (BIDIR_DUAL_PORT or MLAB) 1 Connected Connected Not Connected Not Connected // + // ON !(BIDIR_DUAL_PORT or MLAB) 1 connected Connected Connected Connected // + // ON (BIDIR_DUAL_PORT or MLAB) 0 Not Connected Not Connected Not Connected Not Connected // + // ON !(BIDIR_DUAL_PORT or MLAB) 0 Not Connected Not Connected Connected Connected // + // -------------------------------------------------------------------------------------------------------------------------------------- // + // // + // If ECC is OFF // + // There are 8 possible altera_syncram instantiations. The different // + // settings are summarized below. Every other port is the same among all // + // instantiations. the default value for width_byteena_a and width_byteena_b // + // is 1. In BIDIR_DUAL_PORT mode or MLAB block type, addressstall_a and // + // addressstall_b should not be connected because they are not allowed on // + // Stratix 10 for BIDIR_DUAL_PORT and on Arria 10 MLABs. // + // // + // -------------------------------------------------------------------------------------------------------------------------------------- // + // ECC Mode width_byteena_a width_byteena_b | byteena_a byteena_b addressstall_a addressstall_b // + // -------------------------------------------------------------------------------------------------------------------------------------- // + // OFF (BIDIR_DUAL_PORT or MLAB) ==1 ==1 Not Connected Not Connected Not Connected Not Connected // + // OFF (BIDIR_DUAL_PORT or MLAB) !=1 !=1 Connected Connected Not Connected Not Connected // + // OFF (BIDIR_DUAL_PORT or MLAB) !=1 ==1 Connected Not Connected Not Connected Not Connected // + // OFF (BIDIR_DUAL_PORT or MLAB) ==1 !=1 Not Connected Connected Not Connected Not Connected // + // OFF !(BIDIR_DUAL_PORT or MLAB) ==1 ==1 Not connected Not Connected Connected Connected // + // OFF !(BIDIR_DUAL_PORT or MLAB) !=1 !=1 Connected Connected Connected Connected // + // OFF !(BIDIR_DUAL_PORT or MLAB) !=1 ==1 Connected Not Connected Connected Connected // + // OFF !(BIDIR_DUAL_PORT or MLAB) ==1 !=1 Not Connected Connected Connected Connected // + // -------------------------------------------------------------------------------------------------------------------------------------- // + // // + // Add additional parameter do_not_connect_read_enable which will connect the rden ports to // + // 1'b1 if enabled to ensure AUTO local memory can go into MLABs for A10 and // + // older. The above cases are repeated for do_not_connect_read_enable = 0 and do_not_connect_read_enable = 1 // + // // + // -------------------------------------------------------------------------------------------------------------------------------------- // + // do_not_connect_read_enable rden_a rden_b // + // -------------------------------------------------------------------------------------------------------------------------------------- // + // 0 rden_a rden_b // + // 1 1'b1 1'b1 // + // -------------------------------------------------------------------------------------------------------------------------------------- // + // // + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + // All the common parameters for all the cases + `define COMMON_ALTERA_SYNCRAM_PARAMS \ + .width_a (I_MEMORY_WIDTH_A),\ + .widthad_a (widthad_a),\ + .widthad2_a (widthad2_a),\ + .numwords_a (numwords_a),\ + .outdata_reg_a (outdata_reg_a),\ + .address_aclr_a (address_aclr_a),\ + .outdata_aclr_a (outdata_aclr_a),\ + .width_byteena_a (I_WIDTH_BYTEENA_A),\ + .width_b (I_MEMORY_WIDTH_B),\ + .widthad_b (widthad_b),\ + .widthad2_b (widthad2_b),\ + .numwords_b (numwords_b),\ + .rdcontrol_reg_b (rdcontrol_reg_b),\ + .address_reg_b (address_reg_b),\ + .outdata_reg_b (outdata_reg_b),\ + .outdata_aclr_b (outdata_aclr_b),\ + .indata_reg_b (indata_reg_b),\ + .byteena_reg_b (byteena_reg_b),\ + .address_aclr_b (address_aclr_b),\ + .width_byteena_b (I_WIDTH_BYTEENA_B),\ + .clock_enable_input_a (clock_enable_input_a),\ + .clock_enable_output_a (clock_enable_output_a),\ + .clock_enable_input_b (clock_enable_input_b),\ + .clock_enable_output_b (clock_enable_output_b),\ + .clock_enable_core_a (clock_enable_core_a),\ + .clock_enable_core_b (clock_enable_core_b),\ + .read_during_write_mode_port_a (read_during_write_mode_port_a),\ + .read_during_write_mode_port_b (read_during_write_mode_port_b),\ + .read_during_write_mode_mixed_ports (read_during_write_mode_mixed_ports),\ + .enable_ecc ("FALSE"),\ + .width_eccstatus (2),\ + .ecc_pipeline_stage_enabled ("FALSE"),\ + .outdata_sclr_a (outdata_sclr_a),\ + .outdata_sclr_b (outdata_sclr_b),\ + .enable_ecc_encoder_bypass ("FALSE"),\ + .enable_coherent_read (enable_coherent_read),\ + .enable_force_to_zero (enable_force_to_zero),\ + .operation_mode (operation_mode),\ + .byte_size (byte_size),\ + .ram_block_type (ram_block_type),\ + .init_file (init_file),\ + .init_file_layout (init_file_layout),\ + .maximum_depth (maximum_depth),\ + .intended_device_family (intended_device_family),\ + .lpm_hint (lpm_hint),\ + .lpm_type (lpm_type),\ + .implement_in_les (implement_in_les),\ + .power_up_uninitialized (power_up_uninitialized) + + // All the common ports for all 8 cases + `define COMMON_ALTERA_SYNCRAM_PORTS \ + .wren_a (wren_a),\ + .wren_b (wren_b),\ + .data_a (i_codeword_wr_a),\ + .data_b (i_codeword_wr_b),\ + .address_a (address_a),\ + .address_b (address_b),\ + .clock0 (clock0),\ + .clock1 (i_clock1),\ + .clocken0 (clocken0),\ + .clocken1 (i_clocken1),\ + .aclr0 (aclr0_int),\ + .aclr1 (aclr1_int),\ + .q_a (i_codeword_rd_a),\ + .q_b (i_codeword_rd_b),\ + .sclr (sclr_int),\ + .eccstatus (),\ + .eccencbypass (),\ + .eccencparity (),\ + .address2_a (),\ + .address2_b (),\ + .clocken2 (),\ + .clocken3 () + + generate + // define read enable ports separately as rden_b does not work with MLABs + // if this wrapper is being called from dla_acl_mem1x then do not instaniate + // read enables as they are never used (tied to 1) + if (do_not_connect_read_enable == 1) begin + // ECC ON, do_not_connect_read_enable = 1 + if (enable_ecc == "TRUE") begin + if (use_byteena == 1) begin + if (operation_mode == "BIDIR_DUAL_PORT" || ram_block_type == "MLAB" || do_not_connect_addressstall == 1) begin + altera_syncram #( `COMMON_ALTERA_SYNCRAM_PARAMS ) altera_syncram_inst ( + `COMMON_ALTERA_SYNCRAM_PORTS, + .rden_a (1'b1), + .rden_b (1'b1), + .byteena_a (i_byteena_a), + .byteena_b (i_byteena_b), + .addressstall_a (), + .addressstall_b () + ); + end + else begin + altera_syncram #( `COMMON_ALTERA_SYNCRAM_PARAMS ) altera_syncram_inst ( + `COMMON_ALTERA_SYNCRAM_PORTS, + .rden_a (1'b1), + .rden_b (1'b1), + .byteena_a (i_byteena_a), + .byteena_b (i_byteena_b), + .addressstall_a (addressstall_a), + .addressstall_b (addressstall_b) + ); + end + end + else begin + if (operation_mode == "BIDIR_DUAL_PORT" || ram_block_type == "MLAB" || do_not_connect_addressstall == 1) begin + altera_syncram #( `COMMON_ALTERA_SYNCRAM_PARAMS ) altera_syncram_inst ( + `COMMON_ALTERA_SYNCRAM_PORTS, + .rden_a (1'b1), + .rden_b (1'b1), + .byteena_a (), + .byteena_b (), + .addressstall_a (), + .addressstall_b () + ); + end + else begin + altera_syncram #( `COMMON_ALTERA_SYNCRAM_PARAMS ) altera_syncram_inst ( + `COMMON_ALTERA_SYNCRAM_PORTS, + .rden_a (1'b1), + .rden_b (1'b1), + .byteena_a (), + .byteena_b (), + .addressstall_a (addressstall_a), + .addressstall_b (addressstall_b) + ); + end + end + end + + // ECC OFF, do_not_connect_read_enable = 1 + else begin + // First four cases: BIDIR_DUAL_PORT + if (operation_mode == "BIDIR_DUAL_PORT" || ram_block_type == "MLAB" || do_not_connect_addressstall == 1) begin + if ((width_byteena_a == 1) && (width_byteena_b == 1)) begin + altera_syncram #( `COMMON_ALTERA_SYNCRAM_PARAMS ) altera_syncram_inst ( + `COMMON_ALTERA_SYNCRAM_PORTS, + .rden_a (1'b1), + .rden_b (1'b1), + .byteena_a (), + .byteena_b (), + .addressstall_a (), + .addressstall_b () + ); + end + else if ((width_byteena_a != 1) && (width_byteena_b != 1)) begin + altera_syncram #( `COMMON_ALTERA_SYNCRAM_PARAMS ) altera_syncram_inst ( + `COMMON_ALTERA_SYNCRAM_PORTS, + .rden_a (1'b1), + .rden_b (1'b1), + .byteena_a (i_byteena_a), + .byteena_b (i_byteena_b), + .addressstall_a (), + .addressstall_b () + ); + end + else if ((width_byteena_a != 1) && (width_byteena_b == 1)) begin + altera_syncram #( `COMMON_ALTERA_SYNCRAM_PARAMS ) altera_syncram_inst ( + `COMMON_ALTERA_SYNCRAM_PORTS, + .rden_a (1'b1), + .rden_b (1'b1), + .byteena_a (i_byteena_a), + .byteena_b (), + .addressstall_a (), + .addressstall_b () + ); + end + else begin + altera_syncram #( `COMMON_ALTERA_SYNCRAM_PARAMS ) altera_syncram_inst ( + `COMMON_ALTERA_SYNCRAM_PORTS, + .rden_a (1'b1), + .rden_b (1'b1), + .byteena_a (), + .byteena_b (i_byteena_b), + .addressstall_a (), + .addressstall_b () + ); + end + end + + // Second four cases: NOT BIDIR_DUAL_PORT + else begin + if ((width_byteena_a == 1) && (width_byteena_b == 1)) begin + altera_syncram #( `COMMON_ALTERA_SYNCRAM_PARAMS ) altera_syncram_inst ( + `COMMON_ALTERA_SYNCRAM_PORTS, + .rden_a (1'b1), + .rden_b (1'b1), + .byteena_a (), + .byteena_b (), + .addressstall_a (addressstall_a), + .addressstall_b (addressstall_b) + ); + end + else if ((width_byteena_a != 1) && (width_byteena_b != 1)) begin + altera_syncram #( `COMMON_ALTERA_SYNCRAM_PARAMS ) altera_syncram_inst ( + `COMMON_ALTERA_SYNCRAM_PORTS, + .rden_a (1'b1), + .rden_b (1'b1), + .byteena_a (i_byteena_a), + .byteena_b (i_byteena_b), + .addressstall_a (addressstall_a), + .addressstall_b (addressstall_b) + ); + end + else if ((width_byteena_a != 1) && (width_byteena_b == 1)) begin + altera_syncram #( `COMMON_ALTERA_SYNCRAM_PARAMS ) altera_syncram_inst ( + `COMMON_ALTERA_SYNCRAM_PORTS, + .rden_a (1'b1), + .rden_b (1'b1), + .byteena_a (i_byteena_a), + .byteena_b (), + .addressstall_a (addressstall_a), + .addressstall_b (addressstall_b) + ); + end + else begin + altera_syncram #( `COMMON_ALTERA_SYNCRAM_PARAMS ) altera_syncram_inst ( + `COMMON_ALTERA_SYNCRAM_PORTS, + .rden_a (1'b1), + .rden_b (1'b1), + .byteena_a (), + .byteena_b (i_byteena_b), + .addressstall_a (addressstall_a), + .addressstall_b (addressstall_b) + ); + end + end + end + end + // do_not_connect_read_enable = 0 + else begin + if (enable_ecc == "TRUE") begin + if (use_byteena == 1) begin + if (operation_mode == "BIDIR_DUAL_PORT" || ram_block_type == "MLAB" || do_not_connect_addressstall == 1) begin + altera_syncram #( `COMMON_ALTERA_SYNCRAM_PARAMS ) altera_syncram_inst ( + `COMMON_ALTERA_SYNCRAM_PORTS, + .rden_a (rden_a), + .rden_b (rden_b), + .byteena_a (i_byteena_a), + .byteena_b (i_byteena_b), + .addressstall_a (), + .addressstall_b () + ); + end + else begin + altera_syncram #( `COMMON_ALTERA_SYNCRAM_PARAMS ) altera_syncram_inst ( + `COMMON_ALTERA_SYNCRAM_PORTS, + .rden_a (rden_a), + .rden_b (rden_b), + .byteena_a (i_byteena_a), + .byteena_b (i_byteena_b), + .addressstall_a (addressstall_a), + .addressstall_b (addressstall_b) + ); + end + end + else begin + if (operation_mode == "BIDIR_DUAL_PORT" || ram_block_type == "MLAB" || do_not_connect_addressstall == 1) begin + altera_syncram #( `COMMON_ALTERA_SYNCRAM_PARAMS ) altera_syncram_inst ( + `COMMON_ALTERA_SYNCRAM_PORTS, + .rden_a (rden_a), + .rden_b (rden_b), + .byteena_a (), + .byteena_b (), + .addressstall_a (), + .addressstall_b () + ); + end + else begin + altera_syncram #( `COMMON_ALTERA_SYNCRAM_PARAMS ) altera_syncram_inst ( + `COMMON_ALTERA_SYNCRAM_PORTS, + .rden_a (rden_a), + .rden_b (rden_b), + .byteena_a (), + .byteena_b (), + .addressstall_a (addressstall_a), + .addressstall_b (addressstall_b) + ); + end + end + end + + // ECC OFF, do_not_connect_read_enable = 0 + else begin + // First four cases: BIDIR_DUAL_PORT + if (operation_mode == "BIDIR_DUAL_PORT" || ram_block_type == "MLAB" || do_not_connect_addressstall == 1) begin + if ((width_byteena_a == 1) && (width_byteena_b == 1)) begin + altera_syncram #( `COMMON_ALTERA_SYNCRAM_PARAMS ) altera_syncram_inst ( + `COMMON_ALTERA_SYNCRAM_PORTS, + .rden_a (rden_a), + .rden_b (rden_b), + .byteena_a (), + .byteena_b (), + .addressstall_a (), + .addressstall_b () + ); + end + else if ((width_byteena_a != 1) && (width_byteena_b != 1)) begin + altera_syncram #( `COMMON_ALTERA_SYNCRAM_PARAMS ) altera_syncram_inst ( + `COMMON_ALTERA_SYNCRAM_PORTS, + .rden_a (rden_a), + .rden_b (rden_b), + .byteena_a (i_byteena_a), + .byteena_b (i_byteena_b), + .addressstall_a (), + .addressstall_b () + ); + end + else if ((width_byteena_a != 1) && (width_byteena_b == 1)) begin + altera_syncram #( `COMMON_ALTERA_SYNCRAM_PARAMS ) altera_syncram_inst ( + `COMMON_ALTERA_SYNCRAM_PORTS, + .rden_a (rden_a), + .rden_b (rden_b), + .byteena_a (i_byteena_a), + .byteena_b (), + .addressstall_a (), + .addressstall_b () + ); + end + else begin + altera_syncram #( `COMMON_ALTERA_SYNCRAM_PARAMS ) altera_syncram_inst ( + `COMMON_ALTERA_SYNCRAM_PORTS, + .rden_a (rden_a), + .rden_b (rden_b), + .byteena_a (), + .byteena_b (i_byteena_b), + .addressstall_a (), + .addressstall_b () + ); + end + end + + // Second four cases: NOT BIDIR_DUAL_PORT + else begin + if ((width_byteena_a == 1) && (width_byteena_b == 1)) begin + altera_syncram #( `COMMON_ALTERA_SYNCRAM_PARAMS ) altera_syncram_inst ( + `COMMON_ALTERA_SYNCRAM_PORTS, + .rden_a (rden_a), + .rden_b (rden_b), + .byteena_a (), + .byteena_b (), + .addressstall_a (addressstall_a), + .addressstall_b (addressstall_b) + ); + end + else if ((width_byteena_a != 1) && (width_byteena_b != 1)) begin + altera_syncram #( `COMMON_ALTERA_SYNCRAM_PARAMS ) altera_syncram_inst ( + `COMMON_ALTERA_SYNCRAM_PORTS, + .rden_a (rden_a), + .rden_b (rden_b), + .byteena_a (i_byteena_a), + .byteena_b (i_byteena_b), + .addressstall_a (addressstall_a), + .addressstall_b (addressstall_b) + ); + end + else if ((width_byteena_a != 1) && (width_byteena_b == 1)) begin + altera_syncram #( `COMMON_ALTERA_SYNCRAM_PARAMS ) altera_syncram_inst ( + `COMMON_ALTERA_SYNCRAM_PORTS, + .rden_a (rden_a), + .rden_b (rden_b), + .byteena_a (i_byteena_a), + .byteena_b (), + .addressstall_a (addressstall_a), + .addressstall_b (addressstall_b) + ); + end + else begin + altera_syncram #( `COMMON_ALTERA_SYNCRAM_PARAMS ) altera_syncram_inst ( + `COMMON_ALTERA_SYNCRAM_PORTS, + .rden_a (rden_a), + .rden_b (rden_b), + .byteena_a (), + .byteena_b (i_byteena_b), + .addressstall_a (addressstall_a), + .addressstall_b (addressstall_b) + ); + end + end + end + end + endgenerate + +endmodule // dla_acl_altera_syncram_wrapped + +`default_nettype wire diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_burst_splitter.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_burst_splitter.sv new file mode 100644 index 0000000..903424d --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_burst_splitter.sv @@ -0,0 +1,242 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +// AvalonMM Burst Splitter +// +// This module splits AvalonMM bursts. One can configure it to split only write bursts, split only read bursts, or split both. It is legal to configure this module to not +// split any bursts, Quaurtus should sweep away all the unused logic and this module should become passthrough wires. +// +// The interfaces are only the command portion of the AvalonMM interface, it is assumed that the timing of the response path is independent of the command. This is certainly +// the case when the response path includes readdatavalid, as the read response can happen an arbitraty number of clock cycles later than when the read request was accepted. +// +// This module has no capacity, it splits bursts on-the-fly. There is no change in control flow when splitting write bursts since a write burst of length N already takes N +// clock cycles to transfer (it contains N words of data). Splitting a write burst basically involves calculating the address for the words inside the burst. Conversely, if +// splitting a read burst, one read request of length N (which can be transferred in 1 clock cycle) will result in N read requests of length 1, and those N read requests +// need N clock cycles to be transferred. Therefore the burst splitter must stall the upstream interface while these read requests are provided to the downstream interface. +// +// If this module is configured to split read bursts, there must be a zero-cycle handshake with the upstream interface. If only splitting write bursts, then one may +// optionally use stall latency handshaking with upstream. Any style of handshaking (stall/valid or stall latency) can be used with the downstream interface, if using stall +// latency then downstream should provide an almost full signal as backpressure. +// +// By default, the adder used to calculate the address for words inside a burst is the full width of the address. To improve fmax, we can reduce the adder width, however it +// has to be known that bursts will not cross some boundary. For example, if it is known that bursts cannot cross a 4096 byte boundary, then adder only needs to span the lower +// 12 bits of the address. Shortening a long carry chain helps to improve fmax, and saves area. +// +// Required files: +// - dla_acl_burst_splitter.sv +// - dla_acl_reset_handler.sv +// - dla_acl_parameter_assert.svh + +`default_nettype none +`include "dla_acl_parameter_assert.svh" + +module dla_acl_burst_splitter #( + //signal width -- all must be at least 1 + parameter int unsigned ADDRESS_WIDTH, // byte address must be word aligned, e.g. if BYTEENABLE_WIDTH = 4, then address must be 4-byte aligned, bottom 2 bits must be 0 + parameter int unsigned BURSTCOUNT_WIDTH, + parameter int unsigned BYTEENABLE_WIDTH, // must be a power of 2, specifies word size + + //burst splitting configuration + parameter bit SPLIT_WRITE_BURSTS = 1, // 0 means leave writes bursts untouched, 1 means split write bursts + parameter bit SPLIT_READ_BURSTS = 1, // likewise for read bursts + + //special configuration + parameter int unsigned BURST_BOUNDARY = 0, // set to nonzero to specify what address size a burst will not cross, e.g. 12 means bursts cannot cross a 4K boundary + parameter bit USE_STALL_LATENCY = 0, // for write burst splitting only where there is no change in control flow (address inside the burst is computed on-the-fly), + // 0 means stall/valid (up_write means we MAY accept it), 1 means stall/latency (up_write means we MUST accept it) + //reset configuration + parameter bit ASYNC_RESET = 0, // how do we use reset: 1 means registers are reset asynchronously, 0 means registers are reset synchronously + parameter bit SYNCHRONIZE_RESET = 1, // based on how reset gets to us, what do we need to do: 1 means synchronize reset before consumption (if reset arrives asynchronously), 0 means passthrough (managed externally) + parameter bit BACKPRESSURE_DURING_RESET = 1,// determine whether up_waitrequest will backpressure during reset, safer to do so but adds combinational logic + + //derived parameters + localparam int unsigned DATA_WIDTH = 8*BYTEENABLE_WIDTH, + localparam int unsigned ADDRESS_BITS_PER_WORD = $clog2(BYTEENABLE_WIDTH) // how many lower bits of the byte address are stuck at 0 to ensure it is word aligned +) ( + input wire clock, + input wire resetn, + + //upstream interface - avalon slave + output logic up_waitrequest, + input wire up_read, + input wire up_write, + input wire [ADDRESS_WIDTH-1:0] up_address, + input wire [DATA_WIDTH-1:0] up_writedata, + input wire [BYTEENABLE_WIDTH-1:0] up_byteenable, + input wire [BURSTCOUNT_WIDTH-1:0] up_burstcount, + + //downstream interface - avalon master + input wire down_waitrequest, + output logic down_read, + output logic down_write, + output logic [ADDRESS_WIDTH-1:0] down_address, + output logic [DATA_WIDTH-1:0] down_writedata, + output logic [BYTEENABLE_WIDTH-1:0] down_byteenable, + output logic [BURSTCOUNT_WIDTH-1:0] down_burstcount +); + + + + ////////////////////////////////////// + // // + // Sanity check on the parameters // + // // + ////////////////////////////////////// + + generate + `DLA_ACL_PARAMETER_ASSERT(ADDRESS_WIDTH >= 1) + `DLA_ACL_PARAMETER_ASSERT(BURSTCOUNT_WIDTH >= 1) + `DLA_ACL_PARAMETER_ASSERT(BYTEENABLE_WIDTH >= 1) + `DLA_ACL_PARAMETER_ASSERT(BYTEENABLE_WIDTH == 2**ADDRESS_BITS_PER_WORD) + `DLA_ACL_PARAMETER_ASSERT(BURST_BOUNDARY < ADDRESS_WIDTH) + `DLA_ACL_PARAMETER_ASSERT(BURST_BOUNDARY == 0 || BURST_BOUNDARY >= ADDRESS_BITS_PER_WORD) + `DLA_ACL_PARAMETER_ASSERT(USE_STALL_LATENCY == 0 || SPLIT_READ_BURSTS == 0) + endgenerate + + + + ///////////// + // // + // Reset // + // // + ///////////// + + logic aclrn, sclrn; + dla_acl_reset_handler + #( + .ASYNC_RESET (ASYNC_RESET), + .USE_SYNCHRONIZER (SYNCHRONIZE_RESET), + .SYNCHRONIZE_ACLRN (SYNCHRONIZE_RESET), + .PIPE_DEPTH (2), + .NUM_COPIES (1) + ) + dla_acl_reset_handler_inst + ( + .clk (clock), + .i_resetn (resetn), + .o_aclrn (aclrn), + .o_resetn_synchronized (), + .o_sclrn (sclrn) + ); + + + + ////////////////////// + // // + // Burst splitter // + // // + ////////////////////// + + logic inside_read_burst; //inside a read burst + logic inside_burst; //inside some burst -- we are inside a write burst if inside_burst & ~inside_read_burst + logic [ADDRESS_WIDTH-1:0] internal_address; //address for words inside a burst + logic [BURSTCOUNT_WIDTH-1:0] internal_burstcount; //keep track of how many remaining words are in a burst + logic internal_burstcount_eq_two; //register the check for internal_burstcount == 2 by looking at how we get into that condition + logic backpressure_during_reset; //helper signal which sets up_waitrequest = 1 during reset under various reset configurations + logic backpressure_during_read_burst; //stall upstream while we split read bursts + logic [ADDRESS_WIDTH-1:0] up_address_plus_byteenable_width; //manually split the bits of the adder in the case where the bursts are known to not cross some boundary + logic [ADDRESS_WIDTH-1:0] internal_address_plus_byteenable_width; //same idea as above + logic down_burstcount_mask; //under which conditions should we override down_burstcount to 1 + logic [ADDRESS_WIDTH-1:0] down_address_raw; //before outputting down_address, set the bottom ADDRESS_BITS_PER_WORD bits to 0, Quartus will prune any logic that drove these bits + + generate + if (BURST_BOUNDARY) begin : GEN_SHORT_ADDRESS_ADDER //burst will not cross a boundary of 2**BURST_BOUNDARY + assign up_address_plus_byteenable_width[BURST_BOUNDARY-1:0] = up_address[BURST_BOUNDARY-1:0] + BYTEENABLE_WIDTH; //only the lower address bits within a burst need the adder + assign up_address_plus_byteenable_width[ADDRESS_WIDTH-1:BURST_BOUNDARY] = up_address[ADDRESS_WIDTH-1:BURST_BOUNDARY]; //upper bits come directly from the input address + assign internal_address_plus_byteenable_width[BURST_BOUNDARY-1:0] = internal_address[BURST_BOUNDARY-1:0] + BYTEENABLE_WIDTH; + assign internal_address_plus_byteenable_width[ADDRESS_WIDTH-1:BURST_BOUNDARY] = internal_address[ADDRESS_WIDTH-1:BURST_BOUNDARY]; //reg holds its value + end + else begin : GEN_FULL_ADDRESS_ADDER + assign up_address_plus_byteenable_width = up_address + BYTEENABLE_WIDTH; + assign internal_address_plus_byteenable_width = internal_address + BYTEENABLE_WIDTH; + end + endgenerate + + + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) begin + inside_read_burst <= 1'b0; + inside_burst <= 1'b0; + internal_address <= '0; + internal_burstcount <= '0; + internal_burstcount_eq_two <= 1'b0; + end + else begin + if (~inside_burst) begin + internal_address <= up_address_plus_byteenable_width; + internal_burstcount <= up_burstcount; + internal_burstcount_eq_two <= (up_burstcount == 2); + + //whether or not we enter inside a burst for splitting depends on the burst splitting configuration + if (SPLIT_WRITE_BURSTS && SPLIT_READ_BURSTS) begin //split both read and write bursts + if ((up_read | up_write) & ~down_waitrequest & (up_burstcount != 1)) inside_burst <= 1'b1; + if ( up_read & ~down_waitrequest & (up_burstcount != 1)) inside_read_burst <= 1'b1; + end + else if (SPLIT_WRITE_BURSTS) begin //split write bursts only + if (up_write & (~down_waitrequest | USE_STALL_LATENCY) & (up_burstcount != 1)) inside_burst <= 1'b1; + //inside_read_burst will be stuck at 0 + end + else if (SPLIT_READ_BURSTS) begin //split read bursts only + if (up_read & ~down_waitrequest & (up_burstcount != 1)) begin + inside_burst <= 1'b1; + inside_read_burst <= 1'b1; + end + end + //else no burst splitting, inside_burst and inside_read_burst will both be stuck at 0 + end + else begin + //note that USE_STALL_LATENCY applies to the upstream interface, but one can only set USE_STALL_LATENCY = 1 when splitting only write bursts + //in which case the control flow does not change, i.e. up_waitrequest = down_waitrequest + if ((~down_waitrequest | USE_STALL_LATENCY) & (backpressure_during_read_burst | up_write)) begin + internal_address <= internal_address_plus_byteenable_width; + internal_burstcount <= internal_burstcount - 1; + internal_burstcount_eq_two <= (internal_burstcount == 3); + if (internal_burstcount_eq_two) begin + inside_read_burst <= 1'b0; + inside_burst <= 1'b0; + end + end + end + if (~sclrn) begin + inside_read_burst <= 1'b0; + inside_burst <= 1'b0; + end + end + end + + //backpressure + assign backpressure_during_reset = (!BACKPRESSURE_DURING_RESET) ? 1'b0 : (~aclrn) ? 1'b1 : (~sclrn) ? 1'b1 : 1'b0; + assign backpressure_during_read_burst = (SPLIT_READ_BURSTS) ? inside_read_burst : 1'b0; + assign up_waitrequest = down_waitrequest | backpressure_during_read_burst | backpressure_during_reset; + + //write only data path can simply pass through + assign down_writedata = up_writedata; + assign down_byteenable = up_byteenable; + + //if we are inside a burst, the read ack has already gone to upstream so the next transaction is being presented + assign down_read = (backpressure_during_read_burst) ? 1'b1 : up_read; + assign down_write = (backpressure_during_read_burst) ? 1'b0 : up_write; + + //original address is used at the beginning of a burst (or if burst was not split), we computed the address inside a burst + assign down_address_raw = (inside_burst) ? internal_address : up_address; + + //set lower ADDRESS_BITS_PER_WORD bits to 0, the lower bits will be pruned away from all logic related to address + assign down_address = down_address_raw[ADDRESS_WIDTH-1:ADDRESS_BITS_PER_WORD] << ADDRESS_BITS_PER_WORD; + + //under what conditions are we splitting a burst, and therefore down_burstcount should be set to 1 + assign down_burstcount_mask = (SPLIT_WRITE_BURSTS && SPLIT_READ_BURSTS) ? 1'b1 : (SPLIT_WRITE_BURSTS) ? down_write : (SPLIT_READ_BURSTS) ? down_read : 1'b0; + assign down_burstcount = (down_burstcount_mask) ? 1'h1 : up_burstcount; + +endmodule + +`default_nettype wire diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_dcfifo.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_dcfifo.sv new file mode 100644 index 0000000..4b51adc --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_dcfifo.sv @@ -0,0 +1,819 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// // +// ACL DCFIFO // +// Designed and optimized by: Jason Thong // +// // +// DESCRIPTION // +// =========== // +// This dual clock fifo is intended to be a high fmax replacement for Altera's dcfifo, which is primarily used to transfer data from one clock domain to another. The read side of // +// this fifo is show-ahead and the read data is registered. This fifo is loosely based on dla_acl_mid_speed_fifo, for example the read prefetch has the same structure, including all // +// the caveats for dealing with MLAB vs M20K. Obviously there are adaptions for dealing with the clock crossing. // +// // +// REQUIRED FILES // +// ============== // +// - dla_acl_dcfifo.sv // +// - dla_acl_parameter_assert.svh // +// - dla_acl_width_clip.svh // +// // +// KEY DIFFERENCES FROM HLD_FIFO // +// ============================= // +// - reset configuration cannot be chosen // +// - addresses are tessellated counters instead of LFSR // +// - no support for earliness, just add registers outside of the fifo and let Quartus retime them // +// - no special features like initial occupancy, write and read during full, etc. // +// // +// READ-SIDE HANDSHAKING // +// ===================== // +// This fifo operates in showahead mode. When data written into the fifo eventually becomes readable, the fifo presents this to downstream by outputting rd_empty = 0. During this // +// time downstream may consume rd_data. When downstream wants the next read data, it sets rd_ack = 1 which will cause rd_empty and rd_data to update as of the next clock cycle. If // +// the fifo has still has readable data then rd_empty will stay 0 and rd_data will update, otherwise rd_empty will become 1 and rd_data will have arbitrary data. Note that rd_ack // +// is ignored when rd_empty = 0, so read acknowledge can be thought of as an active low backpressure from downstream. // +// // +// RESET // +// ===== // +// Reset is incredibly difficult to get correct when dealing with multiple clocks. For instance, the reset associated with one clock may deassert before the other clock starts // +// running. To insulate the user from the subtleties of reset, the fifo has only 1 reset input which is assumed to be asynchronous. If one has a reset associated with each of the // +// clocks, merge them together when driving the fifo's input port (fifo expects reset active low, so AND your two resetn signals). // +// // +// Internally, we produce several resets. On each clock domain, we produce an asynchronous reset that enters reset asynchronously but exits from reset synchronously (both clocks // +// must be running to exit reset). These are used to ensure the fifo never produces any spurious outputs, and will not be affected by receiving any spurious inputs. On each clock // +// domain, we produce synchronous resets for the internal logic, which should still enable hyper-retiming. During reset, the fifo appears as both full and empty (refuses to // +// transact with upstream or downstream). // +// // +// MEMORY ADDRESSING // +// ================= // +// Unlike mid speed fifo which uses LFSRs to address the MLAB/M20K, this fifo uses tessellated counters. With 5 address bits for example, an LFSR can utilize 31 addresses, and the // +// prefetch adds one to the capacity, bringing the fifo capacity to 32. However, with independent read and write clocks, one can no longer guarantee that the prefetch will be // +// populated before the write address wraps around. To avoid this dependency, the addresses are implemented with counters so that all 32 memory locations can be accessed. One stage // +// of tessellation is used to limit the carry chain length, so the address sequence is not sequential. All that matters is the read address follows the same sequence that the write // +// address took. For example, a 4 bit address tessellated as 2+2 bits will have a sequence like this: 0 5 6 7 4 9 10 11 8 13 14 15 12 1 2 3. // +// // +// TIMING CONSTRAINTS AND CLOCK CROSSING INTERNALS // +// =============================================== // +// Unlike dcfifo, we do not need to supply an SDC file. Many clock crossing fifos gray code the read and write addresses before sending them to the other clock domain, the idea // +// being that only 1 bit should change at a time. To enforce that, a max skew timing contraint is needed. For details, refer to the SDC file that comes along with dcfifo. // +// // +// This fifo has totally different internals. Only the *updates* to the read and write addresses are sent across. In each direction, an update of +1, +2, and +4 can be sent. Each // +// of these updates are independent, and an update is sent by toggling a 1-bit register. All toggle signals are sent across to the other clock domain, and then they are synchronized // +// back to the original clock domain. The sender knows when the receiver has seen it, and thus when it is safe to send another update. Because each toggle signal crosses clock // +// domains independent from all the other toggle signals, there are no timing constraints needed. All paths between the write and read clocks can be treated as asynchronous. // +// // +// ALMOST FULL, ALMOST EMPTY, AND NEVER_OVERFLOWS // +// ============================================== // +// This fifo implements almost full and almost empty with exact timing. There is one clock of latency from wr_req to wr_almost_full, and from rd_ack to rd_almost_empty. Thresholds // +// are specified in terms of distance away from full and empty. For example, ALMOST_FULL_CUTOFF = 3 means wr_almost_full asserts when the write side occupancy is at least DEPTH-3. // +// If one ignores wr_full since wr_almost_full is being consumed as early backpressure to upstream, set NEVER_OVERFLOWS = 1 to remove the logic for wr_full. This will also make // +// wr_req no longer a request but it will now be a forced write. // +// // +// RAM_BLOCK_TYPE // +// ============== // +// There are different implementations based on whether an M20K or MLAB is used. MLABs have a favorable feature of the read address not needing to be registered inside the memory // +// itself. Although we still drive the read address with a register, we now have access to the output of that register. For M20K this register is inside the M20K itself and thus // +// we have no access to its output. For M20K we have our own address register in ALM registers which always stays 1 ahead of the read address inside the M20K. Every time we update // +// our own read adddress, the clock enable for the M20K read address is asserted so that it captures the old value just before the update of own read address. The consequence of // +// this is we cannot let Quartus decide the RAM implementation, the FIFO needs to choose if the ram block type has not been explicitly set to M20K or MLAB by the user. // +// // +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +`default_nettype none +`include "dla_acl_parameter_assert.svh" +`include "dla_acl_width_clip.svh" + +//this only exists to create a unique instance name for sdc wildcard matching +module dla_acl_dcfifo #( + parameter int unsigned WIDTH, // width of the data path, 0 is allowed in which case no RAM is used + parameter int unsigned DEPTH, // capacity of the fifo, at least 1 + parameter int unsigned ALMOST_FULL_CUTOFF = 0, // rd_almost_empty asserts if read_used_words <= ALMOST_EMPTY_CUTOFF, fifo requires ALMOST_EMPTY_CUTOFF < DEPTH + parameter int unsigned ALMOST_EMPTY_CUTOFF = 0, // wr_almost_full asserts if write_used_words >= (DEPTH-ALMOST_FULL_CUTOFF), fifo requires ALMOST_FULL_CUTOFF < DEPTH + parameter bit NEVER_OVERFLOWS = 0, // set to 1 to disable fifo's internal overflow protection, saves area by not generating logic for wr_full, and wr_req not predicated by wr_full + parameter string RAM_BLOCK_TYPE = "FIFO_TO_CHOOSE", // "MLAB" | "M20K" | "FIFO_TO_CHOOSE" -> if MLAB or M20K you will get what you ask for, otherwise the fifo will decide + parameter bit PIPELINE_AFTER_CLOCK_CROSS = 0, // fmax optimization, add an extra pipeline stage after the clock crossers but before the counters, adds 1 wr and 1 rd clock cycle of latency + parameter bit HOLD_READ_DATA_WHEN_EMPTY = 0 // 0 means rd_data can be x when fifo is empty, 1 means rd_data will hold last value when fifo is empty (dcfifo behavior, may have fmax penalty) +) ( + input wire async_resetn, // asynchronous reset, internally we synchronize it to both clocks, if you have a resetn from each clock domain then AND them together + + //write interface + input wire wr_clock, // clock used by upstream logic + input wire wr_req, // upstream advertises it has data, a write only occurs when wr_req & (~wr_full | NEVER_OVERFLOWS) + input wire [`DLA_ACL_WIDTH_CLIP(WIDTH)] wr_data, // data from upstream, must be synchronized with wr_req + output logic wr_full, // inform upstream that we cannot accept data + output logic wr_almost_full, // early indication to upstream that soon fifo may no longer be able to accept data, threshold controlled by ALMOST_FULL_CUTOFF + + //read interface + input wire rd_clock, // clock used by downstream logic + output logic rd_empty, // advertise to downstream that fifo is empty, a read only occurs when ~rd_empty & rd_ack + output logic [`DLA_ACL_WIDTH_CLIP(WIDTH)] rd_data, // data to downstream, valid when rd_empty == 0 + input wire rd_ack, // read acknowledge from downstream, ignored when fifo is empty -- this is like an active low backpressure from downstream + output logic rd_almost_empty, // early indication to downstream that soon fifo may no longer be able to supply data, threshold controlled by ALMOST_EMPTY_CUTOFF + + //specifically for use with dla_acl_clock_crossing_bridge, not to be used by anyone else + output logic [2:0] wr_read_update_for_ccb // dla_acl_clock_crossing_bridge only: reads decrease the number of outstanding transactions but throttle logic is on write clock +); + ////////////////////////// + // // + // Parameter settings // + // // + ////////////////////////// + + localparam int ADDR = (DEPTH <= 8) ? 3 : $clog2(DEPTH); //internals of fifo assume ADDR >= 3 and DEPTH being a power of 2 ... + localparam int FULL_SLACK = 2**ADDR - DEPTH; //... for smaller or non-power-of-2 size fifos, simply reduce the threshold for full/almost_full + localparam bit USE_MLAB = (RAM_BLOCK_TYPE == "MLAB") ? 1 : (RAM_BLOCK_TYPE == "M20K") ? 0 : (ADDR <= 5) ? 1 : 0; //0 = mlab, 1 = m20k + + + + ////////////////////////////////////// + // // + // Sanity check on the parameters // + // // + ////////////////////////////////////// + + generate + `DLA_ACL_PARAMETER_ASSERT(DEPTH >= 1) + `DLA_ACL_PARAMETER_ASSERT(ALMOST_FULL_CUTOFF < DEPTH) + `DLA_ACL_PARAMETER_ASSERT(ALMOST_EMPTY_CUTOFF < DEPTH) + localparam bit RAM_BLOCK_TYPE_IS_MLAB = RAM_BLOCK_TYPE == "MLAB"; //can't parse strings inside DLA_ACL_PARAMETER_ASSERT + localparam bit RAM_BLOCK_TYPE_IS_M20K = RAM_BLOCK_TYPE == "M20K"; + localparam bit RAM_BLOCK_TYPE_IS_FIFO_TO_CHOOSE = RAM_BLOCK_TYPE == "FIFO_TO_CHOOSE"; + `DLA_ACL_PARAMETER_ASSERT(RAM_BLOCK_TYPE_IS_MLAB || RAM_BLOCK_TYPE_IS_M20K || RAM_BLOCK_TYPE_IS_FIFO_TO_CHOOSE) + endgenerate + + + + /////////////////////////// + // // + // Signal declarations // + // // + /////////////////////////// + + // naming convention: all signal names begin with rd_ or wr_ and that indicates which clock domain it is on + + // reset + logic wr_aclrn, rd_aclrn; //async resets are for masking output signals to ensure we don't generate anything spurious before both clocks are stable + logic wr_sclrn, rd_sclrn; //sync resets are for internal registers, there is pipelining on the reset to enable retiming + + // write used words + logic [ADDR:0] wr_used_words; //write side occupancy of fifo + logic wr_write_into_fifo, wr_full_raw; //helpers + + // outstanding writes that have not yet been communicated to read side + logic [ADDR-1:0] wr_leftover; //track the outstanding writes + logic wr_leftover_hi_incr, wr_leftover_hi_decr; //for tessellation of wr_leftover + logic [2:0] wr_to_send, wr_toggle; //the update to send, which is actually sent by toggling + logic [2:0] rd_toggle_from_wr, wr_toggle_readback; //send update to other clock and then read it back so that we know the other side has seen it + + // process write update on rd_clock + logic [2:0] rd_toggle_from_wr_prev; //keep the old value around... + logic [2:0] rd_update_from_wr_raw, rd_update_from_wr; //...to convert toggle into update, optionally register that update + + // reads available + logic [ADDR:0] rd_available_negative; //how far the write address has advanced past the read address + logic rd_wr_addr_ahead_of_rd_addr; //is the above nonzero + + // read prefetch + logic rd_try_feed_prefetch, rd_feed_prefetch; //prefetch helpers + logic rd_prefetch_enable; //load enable for the prefetch + logic rd_read_from_fifo, rd_valid_raw; //other helpers + + // outstanding reads that have not yet been communicated to write side + logic [ADDR-1:0] rd_leftover; //same idea as on the other clock domain + logic rd_leftover_hi_incr, rd_leftover_hi_decr; + logic [2:0] rd_to_send, rd_toggle; + logic [2:0] wr_toggle_from_rd, rd_toggle_readback; + + // process read update on wr_clock + logic [2:0] wr_toggle_from_rd_prev; //same idea as on the other clock domain + logic [2:0] wr_update_from_rd_raw, wr_update_from_rd; + + // memory block + logic [ADDR-1:0] wr_addr, rd_addr; //write and read addresses for the MLAB or M20K + logic rd_sclrn_prev; //delayed reset - for incrementing the M20K read address at reset exit + logic rd_addr_incr; //increment for read address + logic rd_m20k_addr_b_clock_en; //clock enable for the hardened read address register inside the M20K + + + + ///////////// + // // + // Reset // + // // + ///////////// + + dla_acl_dcfifo_reset_synchronizer dla_acl_dcfifo_reset_synchronizer_inst ( + .wr_clock (wr_clock), + .rd_clock (rd_clock), + .i_async_resetn (async_resetn), + .o_wr_aclrn (wr_aclrn), + .o_rd_aclrn (rd_aclrn), + .o_wr_sclrn (wr_sclrn), + .o_rd_sclrn (rd_sclrn) + ); + + + + //////////////////////// + // // + // Write used words // + // // + //////////////////////// + + // Track the number of words that have been written into the fifo. Increase by 1 when a write happens, decrease update is synchronized from rd_clock domain. + assign wr_write_into_fifo = (NEVER_OVERFLOWS) ? wr_req : (wr_req & ~wr_full_raw); + always_ff @(posedge wr_clock) begin + wr_used_words <= wr_used_words + wr_write_into_fifo - wr_update_from_rd; + if (~wr_sclrn) wr_used_words <= FULL_SLACK; + end + assign wr_full_raw = wr_used_words[ADDR]; //msb of counter + assign wr_full = (~wr_aclrn) ? 1'b1 : wr_full_raw; //backpressure during reset before the clocks are running + + + + /////////////////////////////////////////////////////////////////////////// + // // + // Outstanding writes that have not yet been communicated to read side // + // // + /////////////////////////////////////////////////////////////////////////// + + // The signal "wr_leftover" tracks the number of writes that have not yet been communicated to the read side. The update is communicated to the read side by toggling, and that toggle is + // read back to know when the other side has seen it and therefore we can use it again. There are three completely independent toggle signals, which communicate an update of +1, +2, and + // +4. We basically use bit slicing of wr_leftover to determine which updates can be sent: + // -- if bit 0 of wr_leftover is 1, the +1 update can be sent (assuming the read back indicates the other side has seen a previous update), + // -- if bit 1 of wr_leftover is 1, the +2 update can be sent, + // -- if bits 2+ of wr_leftover are nonzero, the +4 update can be sent. + // We don't try to be too smart about it, e.g. if wr_leftover is 2 and the +2 update is not ready for reuse, we will not sent a +1 update. + + // To increase fmax, wr_leftover has been tessellated, bits 2+ update one clock late. This means we can send a +4 update, and instead of bits 2+ of wr_leftover updating as of the next + // clock, it updates one clock later. Since bits 2+ of wr_leftover are stale, we would want to send another +4 update, but the toggle read back logic will prevent this. + + // If wr_clock and rd_clock have similar frequency, then a toggle can be reused after roughly 6 clocks due to two 3-stage synchronizers. We can communicate an update of 7 every 6 clocks, + // so there is little value in having a +8 update for example. If rd_clock is much faster than wr_clock, the toggle will be reusable in less than 6 wr_clock clocks, e.g. the update happens + // faster. If wr_clock is much faster than rd_clock, the update happens slower, e.g. we cannot communicate the updates as fast as writes may come into the fifo. But this is not really a + // problem since the read side wouldn't be able to drain the fifo that fast anyways. From the rd_clock perspective, updates are happening in fewer than 6 rd_clock clocks, e.g. the write + // updates arrive on rd_clock faster than data can be read from the fifo. + + always_ff @(posedge wr_clock) begin + wr_leftover[1:0] <= (wr_leftover[1:0] & ~wr_to_send[1:0]) + wr_write_into_fifo; + //functionally equivalent to this: + // wr_leftover[1:0] <= (wr_leftover[1:0] - wr_to_send[1:0]) + wr_write_into_fifo; + //wr_to_send[0] can only be 1 when wr_leftover[0] is also 1, therefore the subtraction acts as a mask, likewise for bit 1 + wr_leftover_hi_incr <= (wr_leftover[1:0]==2'h3) & (wr_to_send[1:0]==2'h0) & wr_write_into_fifo; //upper bits increment if wr_write_into_fifo causes wraparound from 3 to 0 + wr_leftover_hi_decr <= wr_to_send[2]; //upper bits decrement only when +4 update is sent + if (wr_leftover_hi_incr & ~wr_leftover_hi_decr) wr_leftover[ADDR-1:2] <= wr_leftover[ADDR-1:2] + 1'b1; + if (~wr_leftover_hi_incr & wr_leftover_hi_decr) wr_leftover[ADDR-1:2] <= wr_leftover[ADDR-1:2] - 1'b1; + if (~wr_sclrn) wr_leftover <= '0; + end + + // Based on wr_leftover and availability of toggle updates, determine what updates to send to the other clock domain. + assign wr_to_send[0] = wr_leftover[0] & (wr_toggle[0] == wr_toggle_readback[0]); + assign wr_to_send[1] = wr_leftover[1] & (wr_toggle[1] == wr_toggle_readback[1]); + assign wr_to_send[2] = (|wr_leftover[ADDR-1:2]) & (wr_toggle[2] == wr_toggle_readback[2]); + + // Updates are communicated by toggling. Because of the feedback, we are guaranteed the signal will be stable for at least 3 clocks on the other clock domain. + // Async resets are used since the registers have a dedicated port for async reset and no retiming is allowed at clock crossing boundaries. + // Also note: The CDC here is not multi-bit. Each bit is considered separately and skew is handled/expected. + + logic[2:0] rd_toggle_from_wr_not_stable; + + // The nominally 3 meta stability flop chain is actually split across two separate modules. + // The first is a 2-stage full sync module, the 3rd stage is provided by the input flop of the loopback 3-stage full synchronizer + // + // * The input flop of the full synchronizer has properties that restrict it from being retimed (which will impact MTBF). + // * By placing the input flop inside the synchronizer module, we have control over its instance name and can match it against + // constraints in order to provide a flop to flop constraint. (As opposed to half synchronizer which has only a -to constraint) + // * We use a common CDC module, which will allow for a single constraint to match synchronizers throughout the design + dla_clock_cross_full_sync #( + .METASTABILITY_STAGES ( 2 ) + ) wr_toggle_inst [2:0] ( //send update to rd_clock + .clk_src ({3{wr_clock}}), + .i_src_async_resetn ({3{wr_aclrn}}), + .i_src_data (wr_toggle ^ wr_to_send), + .o_src_data (wr_toggle), + + .clk_dst ({3{rd_clock}}), + .i_dst_async_resetn ({3{rd_aclrn}}), + .o_dst_data (rd_toggle_from_wr_not_stable) + ); + + dla_clock_cross_full_sync #( + .METASTABILITY_STAGES ( 3 ) + ) wr_toggle_readback_inst [2:0] ( //sync that update back to wr_clock + .clk_src ({3{rd_clock}}), + .i_src_async_resetn ({3{rd_aclrn}}), + .i_src_data (rd_toggle_from_wr_not_stable), + .o_src_data (rd_toggle_from_wr), + + .clk_dst ({3{wr_clock}}), + .i_dst_async_resetn ({3{wr_aclrn}}), + .o_dst_data (wr_toggle_readback) + ); + + //////////////////////////////////////// + // // + // Process write update on rd_clock // + // // + //////////////////////////////////////// + + // Convert toggle into update and add an optional pipeline stage before the update is consumed. + + always_ff @(posedge rd_clock or negedge rd_aclrn) begin + if (~rd_aclrn) rd_toggle_from_wr_prev <= '0; + else rd_toggle_from_wr_prev <= rd_toggle_from_wr; + end + assign rd_update_from_wr_raw = rd_toggle_from_wr ^ rd_toggle_from_wr_prev; + + generate + if (PIPELINE_AFTER_CLOCK_CROSS) begin : GEN_RD_PIPELINE_AFTER_CLOCK_CROSS + always_ff @(posedge rd_clock) begin + rd_update_from_wr <= rd_update_from_wr_raw; + end + end + else begin : NO_RD_PIPELINE_AFTER_CLOCK_CROSS + assign rd_update_from_wr = rd_update_from_wr_raw; + end + endgenerate + + + + /////////////////////// + // // + // Reads available // + // // + /////////////////////// + + // The number of reads available is basically how far the write address has advanced past the read address. It is not the same as read used words, which indicates the number of words + // readable from the fifo. To illustrate this, when reads available transitions from 0 to 1, the write has committed, but we have yet to read the data, so read used words is still 0, + // and it will become 1 on the next clock cycle. + + // Natually, reads available would start at 0, and write into the fifo will increase it, and a read from the fifo will decrease it. To allow a read into the read prefetch, we are + // interested in when reads available is at least 1, which is equivalent to it being nonzero. The implementation is actually the negative of reads available, e.g. writes into the fifo + // decrease it. It still starts at 0, but then any nonzero value will be negative which has an MSB of 1. + + always_ff @(posedge rd_clock) begin + rd_available_negative <= rd_available_negative + rd_feed_prefetch - rd_update_from_wr; + if (~rd_sclrn) rd_available_negative <= '0; + end + assign rd_wr_addr_ahead_of_rd_addr = rd_available_negative[ADDR]; //this indicates we have data in memory for supplying to the read prefetch + + + + ///////////////////// + // // + // Read prefetch // + // // + ///////////////////// + + // The fifo is empty if and only if the prefetch is empty. + + assign rd_try_feed_prefetch = ~rd_valid_raw | rd_ack; //is the prefetch empty or will be empty due to a read ... + assign rd_feed_prefetch = rd_wr_addr_ahead_of_rd_addr & rd_try_feed_prefetch; //... and does the memory have data available for the prefetch + assign rd_prefetch_enable = (!HOLD_READ_DATA_WHEN_EMPTY) ? rd_try_feed_prefetch : rd_feed_prefetch; //load enable for prefetch, simpler logic if rd_data = x when fifo is empty + + always_ff @(posedge rd_clock) begin + if (rd_wr_addr_ahead_of_rd_addr) rd_valid_raw <= 1'b1; //there is data to load into prefetch, getting populated or new data overriding old data, either way fifo is not empty + else if (rd_ack) rd_valid_raw <= 1'b0; //there is no data to load into prefetch, and reading, fifo will become empty + if (~rd_sclrn) rd_valid_raw <= 1'b0; + end + assign rd_empty = (~rd_aclrn) ? 1'b1 : ~rd_valid_raw; //suppress during reset before the clocks are running + assign rd_read_from_fifo = rd_valid_raw & rd_ack; + + + + /////////////////////////////////////////////////////////////////////////// + // // + // Outstanding reads that have not yet been communicated to write side // + // // + /////////////////////////////////////////////////////////////////////////// + + // Same idea as the other one. Outstanding reads increases when fifo is read, and decreases when that is communicated to the write side. Communication to + // write side happens with toggles for +1, +2, and +4 updates. + + always_ff @(posedge rd_clock) begin + rd_leftover[1:0] <= (rd_leftover[1:0] & ~rd_to_send[1:0]) + rd_read_from_fifo; + rd_leftover_hi_incr <= (rd_leftover[1:0]==2'h3) & (rd_to_send[1:0]==2'h0) & rd_read_from_fifo; + rd_leftover_hi_decr <= rd_to_send[2]; + if (rd_leftover_hi_incr & ~rd_leftover_hi_decr) rd_leftover[ADDR-1:2] <= rd_leftover[ADDR-1:2] + 1'b1; + if (~rd_leftover_hi_incr & rd_leftover_hi_decr) rd_leftover[ADDR-1:2] <= rd_leftover[ADDR-1:2] - 1'b1; + if (~rd_sclrn) rd_leftover <= '0; + end + + //updates to send + assign rd_to_send[0] = rd_leftover[0] & (rd_toggle[0] == rd_toggle_readback[0]); + assign rd_to_send[1] = rd_leftover[1] & (rd_toggle[1] == rd_toggle_readback[1]); + assign rd_to_send[2] = (|rd_leftover[ADDR-1:2]) & (rd_toggle[2] == rd_toggle_readback[2]); + + // See comments on CDC in the wr to rd section + + logic [2:0] wr_toggle_from_rd_not_stable; + + //which are actually sent by toggling + dla_clock_cross_full_sync #( + .METASTABILITY_STAGES ( 2 ) + ) rd_toggle_inst [2:0] ( //send to wr_clock + .clk_src ({3{rd_clock}}), + .i_src_async_resetn ({3{rd_aclrn}}), + .i_src_data (rd_toggle ^ rd_to_send), + .o_src_data (rd_toggle), + + .clk_dst ({3{wr_clock}}), + .i_dst_async_resetn ({3{wr_aclrn}}), + .o_dst_data (wr_toggle_from_rd_not_stable) + ); + + dla_clock_cross_full_sync #( + .METASTABILITY_STAGES ( 3 ) + ) rd_toggle_readback_inst [2:0] ( //sync that update back to rd_clock + .clk_src ({3{wr_clock}}), + .i_src_async_resetn ({3{wr_aclrn}}), + .i_src_data (wr_toggle_from_rd_not_stable), + .o_src_data (wr_toggle_from_rd), + + .clk_dst ({3{rd_clock}}), + .i_dst_async_resetn ({3{rd_aclrn}}), + .o_dst_data (rd_toggle_readback) + ); + + /////////////////////////////////////// + // // + // Process read update on wr_clock // + // // + /////////////////////////////////////// + + // Convert toggle into update and add an optional pipeline stage before the update is consumed. + + always_ff @(posedge wr_clock) begin + wr_toggle_from_rd_prev <= wr_toggle_from_rd; + end + assign wr_update_from_rd_raw = wr_toggle_from_rd ^ wr_toggle_from_rd_prev; + + generate + if (PIPELINE_AFTER_CLOCK_CROSS) begin : GEN_WR_PIPELINE_AFTER_CLOCK_CROSS + always_ff @(posedge wr_clock) begin + wr_update_from_rd <= wr_update_from_rd_raw; + end + end + else begin : NO_WR_PIPELINE_AFTER_CLOCK_CROSS + assign wr_update_from_rd = wr_update_from_rd_raw; + end + endgenerate + + always_ff @(posedge wr_clock) begin + wr_read_update_for_ccb <= wr_update_from_rd; //export to ccb + end + + + + //////////////////// + // // + // Memory block // + // // + //////////////////// + + // Usage of altdpram - unlike the M20K in which it is impossible to bypass the input registers (addresses, write data, write enable), for the MLAB it is possible to bypass the input + // register for the read address. There is no parameterization of altera_syncram that supports this, hence the use of altdpram. + + // It is desirable to have access to the output of read address address. In the case of MLAB, the read address is driven by ALM registers. For M20K, we have no visibility on the output + // of the read address register because this is a hardened register inside the M20K itself. For M20K we have our own read address in ALM registers which is always 1 ahead of the hardened + // read address inside the M20K. Only when we update our read address, we assert the clock enable for the hardened read address inside the M20K, this way it always captures 1 value behind + // what our ALM register read address is. The M20K read address clock enable is active during reset so that we can clock in the value of our ALM register read address, upon reset exit + // the M20K clock enable is shut off and our read address advances 1 step forward. + + generate + if (WIDTH > 0) begin : GEN_RAM + if (USE_MLAB) begin : GEN_MLAB + altdpram #( //modelsim library: altera_mf + .indata_aclr ("OFF"), + .indata_reg ("INCLOCK"), + .lpm_type ("altdpram"), + .ram_block_type ("MLAB"), + .outdata_aclr ("OFF"), + .outdata_sclr ("OFF"), + .outdata_reg ("OUTCLOCK"), //output data is registered, clock enable for this is controlled by outclocken + .rdaddress_aclr ("OFF"), + .rdaddress_reg ("UNREGISTERED"), //we own the read address, bypass the equivalent of the internal address_b from m20k + .rdcontrol_aclr ("OFF"), + .rdcontrol_reg ("UNREGISTERED"), + .width (WIDTH), + .widthad (ADDR), + .width_byteena (1), + .wraddress_aclr ("OFF"), + .wraddress_reg ("INCLOCK"), + .wrcontrol_aclr ("OFF"), + .wrcontrol_reg ("INCLOCK") + ) + altdpram_component ( + //write + .inclock (wr_clock), + .wren (wr_write_into_fifo), + .data (wr_data), + .wraddress (wr_addr), + + //read + .outclock (rd_clock), + .rdaddress (rd_addr), + .outclocken (rd_prefetch_enable), + .q (rd_data), + + //other + .aclr (1'b0), + .sclr (1'b0), + .byteena (1'b1), + .inclocken (1'b1), + .rdaddressstall (1'b0), + .rden (1'b1), + .wraddressstall (1'b0) + ); + end + else begin : GEN_M20K + altera_syncram #( //modelsim library: altera_lnsim + .numwords_a (2**ADDR), + .numwords_b (2**ADDR), + .address_aclr_b ("NONE"), + .address_reg_b ("CLOCK1"), + .clock_enable_input_a ("BYPASS"), + .clock_enable_input_b ("BYPASS"), + .clock_enable_output_b ("NORMAL"), //clock enable for output data register is controlled by clocken1 + .enable_ecc ("FALSE"), + .lpm_type ("altera_syncram"), + .operation_mode ("DUAL_PORT"), + .outdata_aclr_b ("NONE"), + .outdata_sclr_b ("NONE"), + .outdata_reg_b ("CLOCK1"), //output data is registered + .power_up_uninitialized ("TRUE"), + .ram_block_type ("M20K"), + .widthad_a (ADDR), + .widthad_b (ADDR), + .width_a (WIDTH), + .width_b (WIDTH), + .width_byteena_a (1) + ) + altera_syncram + ( + //write + .clock0 (wr_clock), + .wren_a (wr_write_into_fifo), + .address_a (wr_addr), + .data_a (wr_data), + + //read + .clock1 (rd_clock), + .address_b (rd_addr), + .addressstall_b (~rd_m20k_addr_b_clock_en), + .clocken1 (rd_prefetch_enable), + .q_b (rd_data), + + //unused + .aclr0 (1'b0), + .aclr1 (1'b0), + .address2_a (1'b1), + .address2_b (1'b1), + .addressstall_a (1'b0), + .byteena_a (1'b1), + .byteena_b (1'b1), + .clocken0 (1'b1), + .clocken2 (1'b1), + .clocken3 (1'b1), + .data_b ({WIDTH{1'b1}}), + .eccencbypass (1'b0), + .eccencparity (8'b0), + .eccstatus (), + .q_a (), + .rden_a (1'b1), + .rden_b (1'b1), + .sclr (1'b0), + .wren_b (1'b0) + ); + end + end + endgenerate + + + + //////////////////////////////// + // // + // Write and read addresses // + // // + //////////////////////////////// + + dla_acl_dcfifo_addr_incr #( + .ADDR (ADDR) + ) + wr_addr_inst + ( + .clock (wr_clock), + .sclrn (wr_sclrn), + .incr (wr_write_into_fifo), + .addr (wr_addr) + ); + + dla_acl_dcfifo_addr_incr #( + .ADDR (ADDR) + ) + rd_addr_inst + ( + .clock (rd_clock), + .sclrn (rd_sclrn), + .incr (rd_addr_incr), + .addr (rd_addr) + ); + + // For M20K, during reset the clock enables are on so that the hardened read address inside the M20K captures our rd_addr. At the exit of reset, the clock enable is shut off and rd_addr + // moves forward by 1. This ensure that rd_addr will always be 1 ahead of the hardened read address inside the M20K, as the clock enable logic is the same after the exit from reset. + always_ff @(posedge rd_clock) begin + rd_sclrn_prev <= rd_sclrn; + end + assign rd_addr_incr = (USE_MLAB) ? rd_feed_prefetch : (rd_feed_prefetch | ~rd_sclrn_prev); //whether to advance rd_addr, which is implemented in ALM registers + assign rd_m20k_addr_b_clock_en = rd_feed_prefetch | ~rd_sclrn; //clock enable for the hardened read address register inside the M20K + + + + /////////////////// + // // + // Almost full // + // // + /////////////////// + + + generate + if (ALMOST_FULL_CUTOFF == 0) begin : NO_ALMOST_FULL + assign wr_almost_full = wr_full; + end + else begin : GEN_ALMOST_FULL + // This basically is wr_used_words offset by ALMOST_FULL_CUTOFF. For example, when DEPTH = 32, we use a 6-bit counter. To generate the full signal, the counter would reset to 0 and + // when it counts up to 32 (the MSB is 1) then full would assert. To generate almost_full with ALMOST_FULL_CUTOFF = 3 (e.g. almost full asserts when write used words is 29 or larger), + // then simply start the counter at 3, and when it counts up to 32, 33, 34, or 35 (all cases where the MSB is 1) then almost_full asserts. + logic [ADDR:0] wr_almost_full_counter; + always_ff @(posedge wr_clock) begin + wr_almost_full_counter <= wr_almost_full_counter + wr_write_into_fifo - wr_update_from_rd; + if (~wr_sclrn) wr_almost_full_counter <= ALMOST_FULL_CUTOFF + FULL_SLACK; + end + assign wr_almost_full = (~wr_aclrn) ? 1'b1 : wr_almost_full_counter[ADDR]; //backpressure during reset before the clocks are running + end + endgenerate + + + + //////////////////// + // // + // Almost empty // + // // + //////////////////// + + generate + if (ALMOST_EMPTY_CUTOFF == 0) begin : NO_ALMOST_EMPTY + assign rd_almost_empty = rd_empty; + end + else begin : GEN_ALMOST_EMPTY + // Think of rd_almost_empty_counter as an offset and negated version of read_used_words. Normally read_used_words would increase when a write becomes readable, and decrease when the + // fifo is read. We invert this, e.g. writes cause a decrease, reads cause an increase. The idea is that enough writes will cause the value of rd_almost_empty_counter to go negative + // (MSB = 1) which will shut off rd_almost_empty. How many writes are needed? When ALMOST_EMPTY_CUTOFF = 0, rd_almost_empty behaves the same way as empty. Only 1 write is needed for + // empty to shut off, so rd_almost_empty_counter should start at 0, as 1 write would make it -1 (which has a MSB of 1). When ALMOST_EMPTY_CUTOFF = 1, 2 writes are needed, therefore + // rd_almost_empty_counter starts at 1, as 2 writes make it negative. + logic [2:0] rd_update_from_wr_prev; + logic [ADDR:0] rd_almost_empty_counter; + always_ff @(posedge rd_clock) begin + rd_update_from_wr_prev <= rd_update_from_wr; + rd_almost_empty_counter <= rd_almost_empty_counter + rd_read_from_fifo - rd_update_from_wr_prev; + if (~rd_sclrn) begin + rd_update_from_wr_prev <= '0; + rd_almost_empty_counter <= ALMOST_EMPTY_CUTOFF; + end + end + assign rd_almost_empty = (~rd_aclrn) ? 1'b1 : ~rd_almost_empty_counter[ADDR]; //backpressure during reset before the clocks are running + end + endgenerate + + + + ////////////////////////////// + // // + // Simulation only checks // + // // + ////////////////////////////// + + //synthesis translate_off + int SIM_ONLY_wr_usedw; + logic SIM_ONLY_wr_almost_full; + always_ff @(posedge wr_clock) begin + SIM_ONLY_wr_usedw <= SIM_ONLY_wr_usedw + wr_write_into_fifo - wr_update_from_rd; + if (~wr_sclrn) SIM_ONLY_wr_usedw <= 0; + end + assign SIM_ONLY_wr_almost_full = (~wr_aclrn) ? 1'b1 : (SIM_ONLY_wr_usedw >= (DEPTH - ALMOST_FULL_CUTOFF)); + always_ff @(negedge wr_clock) begin + if (wr_almost_full != SIM_ONLY_wr_almost_full) begin + $display("wr almost full mismatch, time %t, instance %m\n", $realtime); + $finish; + end + if (NEVER_OVERFLOWS && SIM_ONLY_wr_usedw > DEPTH) begin + $display("dla_acl_dcfifo overflow, time %t, instance %m\n", $realtime); + $finish; + end + end + + int SIM_ONLY_rd_usedw; + logic [2:0] SIM_ONLY_rd_update_from_wr_prev; + logic SIM_ONLY_rd_almost_empty; + always_ff @(posedge rd_clock) begin + SIM_ONLY_rd_update_from_wr_prev <= rd_update_from_wr; + SIM_ONLY_rd_usedw <= SIM_ONLY_rd_usedw + SIM_ONLY_rd_update_from_wr_prev - rd_read_from_fifo; + if (~rd_sclrn) begin + SIM_ONLY_rd_update_from_wr_prev <= '0; + SIM_ONLY_rd_usedw <= '0; + end + end + assign SIM_ONLY_rd_almost_empty = (~rd_aclrn) ? 1'b1 : (SIM_ONLY_rd_usedw <= ALMOST_EMPTY_CUTOFF); + always_ff @(negedge rd_clock) begin + if (rd_almost_empty != SIM_ONLY_rd_almost_empty) begin + $display("rd almost empty mismatch, time %t, instance %m\n", $realtime); + $finish; + end + end + //synthesis translate_on + +endmodule +//end dla_acl_dcfifo + + + +module dla_acl_dcfifo_addr_incr #( + parameter int ADDR //will be at least 3, enforced by dla_acl_dcfifo +) ( + input wire clock, + input wire sclrn, + input wire incr, + output logic [ADDR-1:0] addr +); + localparam ADDR_LO = ADDR / 2; + localparam ADDR_HI = ADDR - ADDR_LO; + logic [ADDR_LO-1:0] addr_lo; + logic [ADDR_HI-1:0] addr_hi; + logic addr_lo_wrap_n; + always_ff @(posedge clock) begin + if (incr) begin + addr_lo <= addr_lo + 1'b1; + addr_lo_wrap_n <= ~(&addr_lo); + if (~addr_lo_wrap_n) addr_hi <= addr_hi + 1'b1; + end + if (~sclrn) begin + addr_lo <= '0; + addr_lo_wrap_n <= 1'b0; + addr_hi <= '0; + end + end + assign addr = {addr_hi, addr_lo}; + +endmodule + +module dla_acl_dcfifo_reset_synchronizer ( + input wire wr_clock, + input wire rd_clock, + input wire i_async_resetn, //assumed to be asynchronous, if you have a resetn for each clock you should AND them together to drive this input port + output wire o_wr_aclrn, //for masking outputs on wr_clock + output wire o_rd_aclrn, //for masking outputs on rd_clock + output wire o_wr_sclrn, //for internal registers on wr_clock + output wire o_rd_sclrn //for internal registers on rd_clock +); + //we must exit from reset on the read clock before exiting from reset on the write clock + //the first ever cross-clock handshaking starts from the write side sending a toggle due to an incoming write into the fifo + //it is simpler to reason about correctness if the read logic is already running e.g. not in reset + + //synchronize i_async_resetn to wr_clock -- enter reset asynchonously, but exit reset synchronously + wire wr_resetn; + + dla_cdc_reset_async u_sync_wr_resetn ( + .clk (wr_clock), + .i_async_resetn (i_async_resetn), + .o_async_resetn (wr_resetn) + ); + + //synchronize wr_resetn to rd_clock -- enter reset asynchonously, but exit reset synchronously + //when i_async_resetn enters reset, o_rd_aclrn enters reset without any clocks running, but both clocks must be running for o_rd_aclrn AND o_rd_sclrn to exit reset + dla_cdc_reset_aligned u_sync_rd_resetn ( + .clk (rd_clock), + .i_async_resetn (wr_resetn), + .o_async_resetn (o_rd_aclrn), + .o_sync_resetn (o_rd_sclrn) + ); + + //synchronize o_rd_aclrn to wr_clock -- enter reset asynchonously, but exit reset synchronously + dla_cdc_reset_aligned u_resync_wr_resetn ( + .clk (wr_clock), + .i_async_resetn (o_rd_aclrn), + .o_async_resetn (o_wr_aclrn), + .o_sync_resetn (o_wr_sclrn) + ); + +endmodule + +`default_nettype wire diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_ecc_decoder.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_ecc_decoder.sv new file mode 100644 index 0000000..960686d --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_ecc_decoder.sv @@ -0,0 +1,257 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//
+// ACL ECC DECODER
+//
+// This module decodes data using a single error correct, double error detect Hamming code. As the data width get large,
+// so will the xor network and that would limit fmax. To resolve this, we slice the data into smaller groups and decode
+// each independently. Essentially we trade off more memory overhead for parity bits in order to limit the fmax
+// degradation due to ECC.
+//
+// The user must specify the data width and the slicing size. From this, one can compute the number of parity bits and
+// total encoded bits (see the calculations in localparams below).
+//
+// Error reporting: for each decoder (after slicing), there are 2 status signals: single error corrected, and double
+// error detected. Each of these signal types are OR-ed together from all of the decoders (from slicing) before being
+// reported to the outside world. Beware that if there are two bit errors but they are in separate slicing groups, two
+// independent decoders can correct one bit each, so this will be reported as single error corrected.
+//
+// Reset: there is no reset. Pipeline stages are purely feed-forward, the intent is that reset will propagate through.
+//
+// This module is actually a wrapper around the actual ECC implementation in secded_decoder. Here is the architecture.
+// For example, suppose DATA_WIDTH is 70 and ECC_GROUP_SIZE is 32, then we will slice input data into 32 + 32 + 6, and
+// 3 encoders are used to produce 39 + 39 + 11 encoded bits.
+//
+// i_encoded[88:0]
+// |
+// +------------------------------------------------------------------------+
+// | optional input pipeline stages |
+// +------------------------------------------------------------------------+
+// | | |
+// encoded[88:78] encoded[77:39] encoded[38:0]
+// | | |
+// +----------------+ +----------------+ +----------------+
+// | secded_decoder | | secded_decoder | | secded_decoder |
+// +----------------+ +----------------+ +----------------+
+// | | |
+// data[69:64] data[63:32] data[31:0]
+// | | |
+// +------------------------------------------------------------------------+
+// | optional output pipeline stages |
+// +------------------------------------------------------------------------+
+// |
+// o_data[69:0]
+//
+// Everything decoder related is contained within this file. The related file that does the corresponding encoding is
+// dla_acl_ecc_encoder.sv. Note both encoder and decoder require dla_acl_ecc_pkg.sv.
+//
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+`default_nettype none
+
+//BEWARE: do not leave the "clock_enable" input port disconnected if any pipeline stages are used, it will default to 0 and nothing will go through
+
+module dla_acl_ecc_decoder +import dla_acl_ecc_pkg::*; +#(
+ parameter int DATA_WIDTH, //number of bits in the decoded output data
+ parameter int ECC_GROUP_SIZE, //how many bits of unencoded data to group into one ecc block, see description in header comments
+ parameter int INPUT_PIPELINE_STAGES = 0, //number of pipeline stages between i_encoded and the ecc decoder
+ parameter int OUTPUT_PIPELINE_STAGES = 0, //number of pipeline stages between the ecc decoder and o_data
+ parameter int STATUS_PIPELINE_STAGES = 0 //number of pipeline stages between the ecc decoder and o_single_error_corrected/o_double_error_detected
+)
+(
+ input wire clock, //clock is only needed if pipeline stages are nonzero
+ input wire clock_enable, //set to 1 to sample i_encoded, intended for integration with altera_syncram, only needed if pipeline stages are nonzero
+ input wire [getEncodedBitsEccGroup(DATA_WIDTH,ECC_GROUP_SIZE)-1:0] i_encoded, //encoded input data
+ output logic [DATA_WIDTH-1:0] o_data, //decoded output data
+ output logic o_single_error_corrected, //at least one ecc decoder corrected a single bit error within their ecc group
+ output logic o_double_error_detected //at least one ecc decoder detected a double bit error within their ecc group
+);
+
+ //helper functions for determining number of bits are defined in dla_acl_ecc.svh
+ localparam int ECC_NUM_GROUPS = getNumGroups(DATA_WIDTH,ECC_GROUP_SIZE); //how many groups to slice the data into
+ localparam int LAST_GROUP_SIZE = getLastGroupSize(DATA_WIDTH,ECC_GROUP_SIZE); //all groups have size ECC_GROUP_SIZE except possibly the last group which may be smaller since it gets the remaining bits
+ localparam int ENCODED_BITS = getEncodedBitsEccGroup(DATA_WIDTH,ECC_GROUP_SIZE);
+
+ //internal signals
+ genvar g;
+ logic [ENCODED_BITS-1:0] encoded;
+ logic [DATA_WIDTH-1:0] data;
+ logic [2*ECC_NUM_GROUPS-1:0] error_status;
+ logic [ECC_NUM_GROUPS-1:0] single_error_corrected;
+ logic [ECC_NUM_GROUPS-1:0] double_error_detected;
+
+ //input pipeline stages
+ generate
+ if (INPUT_PIPELINE_STAGES == 0) begin
+ assign encoded = i_encoded;
+ end
+ else begin
+ logic [ENCODED_BITS-1:0] encoded_pipe [INPUT_PIPELINE_STAGES-1:0];
+ always_ff @(posedge clock) begin //only the first pipeline stage needs a clock enable, the remaining pipeline stages will load the same data when the clock enable propagates there
+ if (clock_enable) encoded_pipe[0] <= i_encoded;
+ end
+ for (g=1; g<INPUT_PIPELINE_STAGES; g++) begin : gen_input_pipe
+ always_ff @(posedge clock) begin
+ encoded_pipe[g] <= encoded_pipe[g-1];
+ end
+ end
+ assign encoded = encoded_pipe[INPUT_PIPELINE_STAGES-1];
+ end
+ endgenerate
+
+ //slice the data for each decoder
+ generate
+ for (g=0; g<ECC_NUM_GROUPS; g++) begin : gen_decoder
+ localparam int RAW_BASE = ECC_GROUP_SIZE*g;
+ localparam int ENC_BASE = getEncodedBits(ECC_GROUP_SIZE)*g;
+ localparam int RAW_WIDTH = (g==ECC_NUM_GROUPS-1) ? LAST_GROUP_SIZE : ECC_GROUP_SIZE;
+ localparam int ENC_WIDTH = getEncodedBits(RAW_WIDTH);
+
+ secded_decoder #(
+ .DATA_WIDTH (RAW_WIDTH)
+ )
+ secded_encoder_inst
+ (
+ .i_encoded (encoded[ENC_BASE +: ENC_WIDTH]),
+ .o_data (data[RAW_BASE +: RAW_WIDTH]),
+ .o_single_error_corrected (error_status[g]),
+ .o_double_error_detected (error_status[g+ECC_NUM_GROUPS])
+ );
+ end
+ endgenerate
+
+ //output pipeline stages
+ generate
+ if (OUTPUT_PIPELINE_STAGES == 0) begin
+ assign o_data = data;
+ end
+ else begin
+ logic [DATA_WIDTH-1:0] data_pipe [OUTPUT_PIPELINE_STAGES-1:0];
+ if (INPUT_PIPELINE_STAGES == 0) begin //this is the first pipeline stage
+ always_ff @(posedge clock) begin
+ if (clock_enable) data_pipe[0] <= data;
+ end
+ end
+ else begin //there was a previous pipeline in the input stage which would have captured the clock enable
+ always_ff @(posedge clock) begin
+ data_pipe[0] <= data;
+ end
+ end
+ for (g=1; g<OUTPUT_PIPELINE_STAGES; g++) begin : gen_output_pipe
+ always_ff @(posedge clock) begin
+ data_pipe[g] <= data_pipe[g-1];
+ end
+ end
+ assign o_data = data_pipe[OUTPUT_PIPELINE_STAGES-1];
+ end
+ endgenerate
+
+ //error status pipeline stages
+ generate
+ if (STATUS_PIPELINE_STAGES == 0) begin
+ assign {double_error_detected, single_error_corrected} = error_status;
+ end
+ else begin
+ logic [2*ECC_NUM_GROUPS-1:0] error_status_pipe [STATUS_PIPELINE_STAGES-1:0];
+ if (INPUT_PIPELINE_STAGES == 0) begin //this is the first pipeline stage
+ always_ff @(posedge clock) begin
+ if (clock_enable) error_status_pipe[0] <= error_status;
+ end
+ end
+ else begin //there was a previous pipeline in the input stage which would have captured the clock enable
+ always_ff @(posedge clock) begin
+ error_status_pipe[0] <= error_status;
+ end
+ end
+ for (g=1; g<STATUS_PIPELINE_STAGES; g++) begin : gen_status_pipe
+ always_ff @(posedge clock) begin
+ error_status_pipe[g] <= error_status_pipe[g-1];
+ end
+ end
+ assign {double_error_detected, single_error_corrected} = error_status_pipe[STATUS_PIPELINE_STAGES-1];
+ end
+ endgenerate
+ assign o_single_error_corrected = |single_error_corrected;
+ assign o_double_error_detected = |double_error_detected;
+
+endmodule
+//end dla_acl_ecc_decoder
+
+
+
+
+
+// Hamming code decoder, single error correct, double error detect
+//
+// This implementation follows the bit mapping as shown on Wikipedia, parity bits are added at power of 2 locations, data bits go in between
+// For example, with DATA_WIDTH = 11, we have 4 Hamming parity bits and one overall parity bit, so the bit locations will looks like this, d means data, p means parity
+// [0] = p0, [1] = p1, [2] = p2, [3] = d0, [4] = p3, [5] = d1, [6] = d2, [7] = d3, [8] = p4, [9] = d4, [10] = d5, [11] = d6, [12] = d7, [13] = d8, [14] = d9, [15] = d10
+
+module secded_decoder +import dla_acl_ecc_pkg::*; +#(
+ parameter int DATA_WIDTH
+) (
+ input wire [getEncodedBits(DATA_WIDTH)-1:0] i_encoded, //encoded input data
+ output logic [DATA_WIDTH-1:0] o_data, //decoded output data
+ output logic o_single_error_corrected, //asserts when one bit of encoded data is wrong, this will be reported and corrected
+ output logic o_double_error_detected //asserts when two bits of encoded data are wrong, this will only be reported and not corrected
+);
+
+ //helper functions for determining number of bits are defined in dla_acl_ecc.svh
+ localparam int PARITY_BITS = getParityBits(DATA_WIDTH);
+ localparam int ENCODED_BITS = getEncodedBits(DATA_WIDTH);
+
+ //compute the parity bits
+ logic [PARITY_BITS-1:0] parity;
+ always_comb begin
+ for (int parity_index=1; parity_index<PARITY_BITS; parity_index++) begin
+ parity[parity_index] = 0;
+ for (int enc_index=0; enc_index<ENCODED_BITS; enc_index++) begin
+ if (enc_index & (1<<(parity_index-1))) begin //bit parity_index-1 of enc_index is 1
+ parity[parity_index] = parity[parity_index] ^ i_encoded[enc_index]; //running xor
+ end
+ end
+ end
+ parity[0] = ^i_encoded; //overall parity
+ end
+
+ //syndrome indicates which bits was wrong, if any
+ logic [PARITY_BITS-2:0] syndrome;
+ assign syndrome = parity[PARITY_BITS-1:1];
+
+ //report if there was 1 bit or 2 bit errors respectively
+ assign o_single_error_corrected = parity[0]; //odd number of errors, 1 error gets corrected, 3 errors is not correctable and mapping to the word of minimum hamming distance will give incorrect data
+ assign o_double_error_detected = ~parity[0] && (syndrome != 0); //even number of errors, 0 errors results in syndrome == 0, 2 error will have a nonzero syndrome
+
+ //extract out the data bits, and correct if there is a single bit error
+ //parity bits are at power of 2 bit locations, data bits are in between
+ //for example, with DATA_WIDTH = 11, we have 5 parity bits and the bit locations will looks like this, d means data, p means parity
+ //[0] = p0, [1] = p1, [2] = p2, [3] = d0, [4] = p3, [5] = d1, [6] = d2, [7] = d3, [8] = p4, [9] = d4, [10] = d5, [11] = d6, [12] = d7, [13] = d8, [14] = d9, [15] = d10
+ always_comb begin
+ for (int enc_index=0, data_index=0; enc_index<ENCODED_BITS; enc_index++) begin
+ if (!(enc_index == 0 || (2**$clog2(enc_index)) == enc_index)) begin //enc_index is not a power of 2
+ o_data[data_index] = (enc_index==syndrome) ? ~i_encoded[enc_index] : i_encoded[enc_index];
+ data_index++;
+ end
+ end
+ end
+
+endmodule
+//end secded_decoder
+
+`default_nettype wire
diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_ecc_encoder.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_ecc_encoder.sv new file mode 100644 index 0000000..4df033c --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_ecc_encoder.sv @@ -0,0 +1,225 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//
+// ACL ECC ENCODER
+//
+// This module encodes data using a single error correct, double error detect Hamming code. As the data width get large,
+// so will the xor network and that would limit fmax. To resolve this, we slice the data into smaller groups and encode
+// each independently. Essentially we trade off more memory overhead for parity bits in order to limit the fmax
+// degradation due to ECC.
+//
+// The user must specify the data width and the slicing size. From this, one can compute the number of parity bits and
+// total encoded bits (see the calculations in localparams below).
+//
+// Reset: there is no reset. Pipeline stages are purely feed-forward, the intent is that reset will propagate through.
+//
+// This module is actually a wrapper around the actual ECC implementation in secded_encoder. Here is the architecture.
+// For example, suppose DATA_WIDTH is 70 and ECC_GROUP_SIZE is 32, then we will slice input data into 32 + 32 + 6, and
+// 3 encoders are used to produce 39 + 39 + 11 encoded bits.
+//
+// i_data[69:0]
+// |
+// +------------------------------------------------------------------------+
+// | optional input pipeline stages |
+// +------------------------------------------------------------------------+
+// | | |
+// data[69:64] data[63:32] data[31:0]
+// | | |
+// +----------------+ +----------------+ +----------------+
+// | secded_encoder | | secded_encoder | | secded_encoder |
+// +----------------+ +----------------+ +----------------+
+// | | |
+// encoded[88:78] encoded[77:39] encoded[38:0]
+// | | |
+// +------------------------------------------------------------------------+
+// | optional output pipeline stages |
+// +------------------------------------------------------------------------+
+// |
+// o_encoded[88:0]
+//
+// Required files:
+// - dla_acl_ecc_encoder.sv +// - dla_acl_ecc_pkg.sv
+//
+// Related files (to do the corresponding decoding that this file encodes):
+// - dla_acl_ecc_decoder.sv
+//
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+`default_nettype none
+
+//BEWARE: do not leave the "clock_enable" input port disconnected if any pipeline stages are used, it will default to 0 and nothing will go through
+
+module dla_acl_ecc_encoder +import dla_acl_ecc_pkg::*; +#(
+ parameter int DATA_WIDTH, //number of bits in the unencoded input data
+ parameter int ECC_GROUP_SIZE, //how many bits of unencoded data to group into one ecc block, see description in header comments
+ parameter int INPUT_PIPELINE_STAGES = 0, //number of pipeline stages between i_data and the ecc encoder
+ parameter int OUTPUT_PIPELINE_STAGES = 0 //number of pipeline stages between the ecc encoder and o_encoded
+)
+(
+ input wire clock, //clock is only needed if pipeline stages are nonzero
+ input wire clock_enable, //set to 1 to sample i_data, intended for integration with altera_syncram, only needed if pipeline stages are nonzero
+ input wire [DATA_WIDTH-1:0] i_data, //unencoded input data
+ output logic [getEncodedBitsEccGroup(DATA_WIDTH,ECC_GROUP_SIZE)-1:0] o_encoded //encoded output data
+);
+
+ //helper functions for determining number of bits are defined in dla_acl_ecc.svh
+ localparam int ECC_NUM_GROUPS = getNumGroups(DATA_WIDTH,ECC_GROUP_SIZE); //how many groups to slice the data into
+ localparam int LAST_GROUP_SIZE = getLastGroupSize(DATA_WIDTH,ECC_GROUP_SIZE); //all groups have size ECC_GROUP_SIZE except possibly the last group which may be smaller since it gets the remaining bits
+ localparam int ENCODED_BITS = getEncodedBitsEccGroup(DATA_WIDTH,ECC_GROUP_SIZE);
+
+ //internal signals
+ genvar g;
+ logic [DATA_WIDTH-1:0] data;
+ logic [ENCODED_BITS-1:0] encoded;
+
+ //input pipeline stages
+ generate
+ if (INPUT_PIPELINE_STAGES == 0) begin
+ assign data = i_data;
+ end
+ else begin
+ logic [DATA_WIDTH-1:0] data_pipe [INPUT_PIPELINE_STAGES-1:0];
+ always_ff @(posedge clock) begin
+ if (clock_enable) data_pipe[0] <= i_data;
+ end
+ for (g=1; g<INPUT_PIPELINE_STAGES; g++) begin : gen_input_pipe
+ always_ff @(posedge clock) begin
+ data_pipe[g] <= data_pipe[g-1];
+ end
+ end
+ assign data = data_pipe[INPUT_PIPELINE_STAGES-1];
+ end
+ endgenerate
+
+ //slice the data for each encoder
+ generate
+ for (g=0; g<ECC_NUM_GROUPS; g++) begin : gen_encoder
+ localparam int RAW_BASE = ECC_GROUP_SIZE*g;
+ localparam int ENC_BASE = getEncodedBits(ECC_GROUP_SIZE)*g;
+ localparam int RAW_WIDTH = (g==ECC_NUM_GROUPS-1) ? LAST_GROUP_SIZE : ECC_GROUP_SIZE;
+ localparam int ENC_WIDTH = getEncodedBits(RAW_WIDTH);
+
+ secded_encoder #(
+ .DATA_WIDTH (RAW_WIDTH)
+ )
+ secded_encoder_inst
+ (
+ .i_data (data[RAW_BASE +: RAW_WIDTH]),
+ .o_encoded (encoded[ENC_BASE +: ENC_WIDTH])
+ );
+ end
+ endgenerate
+
+ //output pipeline stages
+ generate
+ if (OUTPUT_PIPELINE_STAGES == 0) begin
+ assign o_encoded = encoded;
+ end
+ else begin
+ logic [ENCODED_BITS-1:0] encoded_pipe [OUTPUT_PIPELINE_STAGES-1:0];
+ if (INPUT_PIPELINE_STAGES == 0) begin //this is the first pipeline stage
+ always_ff @(posedge clock) begin
+ if (clock_enable) encoded_pipe[0] <= encoded;
+ end
+ end
+ else begin //there was a previous pipeline in the input stage which would have captured the clock enable
+ always_ff @(posedge clock) begin
+ encoded_pipe[0] <= encoded;
+ end
+ end
+ for (g=1; g<OUTPUT_PIPELINE_STAGES; g++) begin : gen_output_pipe
+ always_ff @(posedge clock) begin
+ encoded_pipe[g] <= encoded_pipe[g-1];
+ end
+ end
+ assign o_encoded = encoded_pipe[OUTPUT_PIPELINE_STAGES-1];
+ end
+ endgenerate
+
+endmodule
+//end dla_acl_ecc_encoder
+
+
+
+
+// Hamming code encoder, single error correct, double error detect
+//
+// This implementation follows the bit mapping as shown on Wikipedia, parity bits are added at power of 2 locations, data bits go in between
+// For example, with DATA_WIDTH = 11, we have 4 Hamming parity bits and one overall parity bit, so the bit locations will looks like this, d means data, p means parity
+// [0] = p0, [1] = p1, [2] = p2, [3] = d0, [4] = p3, [5] = d1, [6] = d2, [7] = d3, [8] = p4, [9] = d4, [10] = d5, [11] = d6, [12] = d7, [13] = d8, [14] = d9, [15] = d10
+
+module secded_encoder +import dla_acl_ecc_pkg::*; +#(
+ parameter int DATA_WIDTH //number of bits in the unencoded input data
+) (
+ input wire [DATA_WIDTH-1:0] i_data, //unencoded input data
+ output logic [getEncodedBits(DATA_WIDTH)-1:0] o_encoded //encoded output data
+);
+
+ //helper functions for determining number of bits are defined in dla_acl_ecc.svh
+ localparam int PARITY_BITS = getParityBits(DATA_WIDTH);
+ localparam int ENCODED_BITS = getEncodedBits(DATA_WIDTH);
+
+ //parity bits go at power of 2 bit locations, data bits go in between
+ //for example, with DATA_WIDTH = 11, we have 5 parity bits and the bit locations will looks like this, d means data, p means parity
+ //[0] = p0, [1] = p1, [2] = p2, [3] = d0, [4] = p3, [5] = d1, [6] = d2, [7] = d3, [8] = p4, [9] = d4, [10] = d5, [11] = d6, [12] = d7, [13] = d8, [14] = d9, [15] = d10
+ logic [ENCODED_BITS-1:0] data_expanded;
+ always_comb begin
+ for (int enc_index=0, data_index=0; enc_index<ENCODED_BITS; enc_index++) begin
+ if (enc_index == 0 || (2**$clog2(enc_index)) == enc_index) begin //enc_index is a power of 2
+ data_expanded[enc_index] = 1'b0;
+ end
+ else begin
+ data_expanded[enc_index] = i_data[data_index];
+ data_index++;
+ end
+ end
+ end
+
+ //compute the parity bits
+ logic [PARITY_BITS-1:0] parity;
+ always_comb begin
+ for (int parity_index=1; parity_index<PARITY_BITS; parity_index++) begin
+ parity[parity_index] = 0;
+ for (int enc_index=0; enc_index<ENCODED_BITS; enc_index++) begin
+ if (enc_index & (1<<(parity_index-1))) begin //bit parity_index-1 of enc_index is 1
+ parity[parity_index] = parity[parity_index] ^ data_expanded[enc_index]; //running xor
+ end
+ end
+ end
+ parity[0] = (^parity[PARITY_BITS-1:1]) ^ (^i_data); //overall parity
+ end
+
+ //assemble the output data
+ always_comb begin
+ for (int enc_index=0, parity_index=0; enc_index<ENCODED_BITS; enc_index++) begin
+ if (enc_index == 0 || (2**$clog2(enc_index)) == enc_index) begin //enc_index is a power of 2
+ o_encoded[enc_index] = parity[parity_index];
+ parity_index++;
+ end
+ else begin
+ o_encoded[enc_index] = data_expanded[enc_index];
+ end
+ end
+ end
+
+endmodule
+//end secded_encoder
+
+`default_nettype wire
diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_ecc_pkg.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_ecc_pkg.sv new file mode 100644 index 0000000..d4ab75b --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_ecc_pkg.sv @@ -0,0 +1,94 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +QzMtGF3DuPsoyZpCNUP5yw9pMPpRHd7XFSe0fKbBNlb63/uPehPkEFhQ3RkIQHqC/tbJJxYYaqkp +VWoiTIPZe2hvGkz58sKdWo2F1+C9FwE76IxIW26tnCTb62NxR0kzGQLkkIIq09EUI/rXY9cEawJv +BiPWIxnB2C/ML1GFoi17jsSAlZqm2c0o87k/8k5uul2ygsDfDocAGyo41EpwgFpwj28+ykuGmYrp +Dia/DRAGiDP4N22ilwXB18WKBgEWbsdKLcW9Hd6snphLoBAh8Ejly7NyRELwqAr+GiU9PqXJE7AW +ncn3hE1+ieM8mU1KNnABK639121bnJN0IrkK/w== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 4128) +`pragma protect data_block +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 +ymBwryCWLdkn5U0POGSX0912X0eG3wJg +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_fanout_pipeline.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_fanout_pipeline.sv new file mode 100644 index 0000000..7372aec --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_fanout_pipeline.sv @@ -0,0 +1,54 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +/* + This module pipelines each input signal and replicates the pipeline by the specified amounts. + The copies of the pipelines are typically used to break up the fanout of the input signals. + One common use-case for this block is to pipeline and fanout a synchronous reset, for performance. +*/ + +module dla_acl_fanout_pipeline #( + parameter PIPE_DEPTH = 1, // The number of pipeline stages. A value of 0 is valid and means the input will be passed straight to the output. + parameter NUM_COPIES = 1 , // The number of copies of the pipeline. Minimum value 1. + parameter WIDTH = 1 // The width of the input and output bus (ie. the number of unique inputs to fanout and pipeline). Minimum value 1. +)( + input wire clk, + input wire [WIDTH-1:0] in, + output logic [NUM_COPIES-1:0][WIDTH-1:0] out +); + + logic [WIDTH-1:0] pipe [NUM_COPIES][PIPE_DEPTH:1] /* synthesis dont_merge */; + + genvar j; + generate + if (PIPE_DEPTH == 0) begin + for (j=0;j<NUM_COPIES;j++) begin : GEN_OUTPUT_ASSIGNMENT_PIPE_DEPTH_0 + assign out[j] = in; // Pass the input straight through + end + end else begin + always @(posedge clk) begin + for (int k=0;k<NUM_COPIES;k++) begin // For each copy + pipe[k][1] <= in; // Assign the input to Stage-1 of the pipe + for (int i=2;i<=PIPE_DEPTH;i++) begin // Implement the rest of the pipe + pipe[k][i] <= pipe[k][i-1]; + end + end + end + + for (j=0;j<NUM_COPIES;j++) begin : GEN_OUTPUT_ASSIGNMENT_PIPE_DEPTH_GREATER_THAN_0 // For each copy, assign the pipe output to the output of this module + assign out[j] = pipe[j][PIPE_DEPTH]; + end + end + endgenerate + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_high_speed_fifo.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_high_speed_fifo.sv new file mode 100644 index 0000000..ae8a69b --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_high_speed_fifo.sv @@ -0,0 +1,1439 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// // +// ACL HIGH SPEED FIFO // +// Designed and optimized by: Jason Thong // +// // +// DESCRIPTION // +// =========== // +// This fifo is fmax optimized for Stratix 10 at the expense of area and write-to-read latency. This fifo is natively showahead, e.g. fifo output data is exposed // +// without a read request, downstream of the fifo uses a read ack to consume it. Pipelining is added around the memory block (M20K for a deep fifo) to improve // +// fmax. A prefetch is used to mask this large read latency, since the fifo interface must support a single clock cycle read handshaking, e.g. read ack now means // +// new data as of the next clock cycle. // +// // +// REQUIRED FILES // +// ============== // +// - dla_acl_high_speed_fifo.sv // +// - dla_acl_lfsr.sv // +// - dla_acl_tessellated_incr_decr_threshold.sv // +// - dla_acl_tessellated_incr_lookahead.sv // +// - dla_acl_reset_handler.sv // +// - dla_acl_fanout_pipeline.sv // +// - dla_acl_std_synchronizer_nocut.v // +// // +// USAGE // +// ===== // +// This fifo is coded using stall/valid semantics. Upstream indicates it has data available for consumption by asserting valid. Downstream indicates it cannot // +// accept data by asserting stall. A transaction occurs when valid==1 && stall==0. A push into the fifo occurs when valid_in==1 && stall_out=0. A pop out of the // +// fifo occurs when valid_out==1 && stall_in==0. The data is synchronized to valid. // +// // +// LATENCY SPECIFICATION // +// ===================== // +// Category | Latency | Example signals // +// ----------------+-----------+--------------------------------------- // +// write -> write | 1 | valid_in to stall_out/almost_full // +// write -> read | 5 | valid_in to valid_out/almost_empty // +// read -> write | 1 | stall_in to stall_out/almost_full // +// read -> read | 1 | stall_in to valid_out/almost_empty // +// // +// COMPATIBILITY WITH SCFIFO // +// ========================= // +// See the scfifo_to_acl_high_speed_fifo module at the end of this file, which maps the ports and parameters of scfifo into this fifo. There are some notable // +// differences however: // +// 1. The write to read latency of this fifo is always 5, unlike scfifo which has a different write to read latency depending on if showahead is enabled and if // +// the output is registered. // +// 2. Reset behavior is different. No support for using both asynchronous and synchronous resets at the same time. When using synchronous resets, it takes a few // +// clock cycles from the time the reset input is asserted until the fifo actually enters reset. Likewise when reset deasserts. When the fifo is in reset, it // +// asserts both full and empty (stall_out and ~valid_out respectively). // +// 3. Almost_full and almost_empty have exact timing, unlike scfifo which uses slightly stale occupancy. This means there is no strangeness like draining a fifo // +// and having empty assert before almost_empty asserts, which can happen in scfifo but is impossible with this fifo. // +// // +// ALMOST FULL AND ALMOST EMPTY // +// ============================ // +// The ALMOST_***_CUTOFF parameters refer to how much dead space would be in the fifo if one were to use almost_full as same clock cycle backpressure (dead space // +// in not being able to completely fill the fifo), or if one were to almost_empty as same clock cycle underflow prevention (dead space in not being able to empty // +// the fifo). See chart below for interpretation of values: // +// // +// Scfifo parameter | Our parameter | Interpretation // +// ------------------------------------+---------------------------+--------------------------------------------------------------- // +// almost_empty_value = 1 | ALMOST_EMPTY_CUTOFF = 0 | almost_empty behaves the same way as empty // +// almost_empty_value = 2 | ALMOST_EMPTY_CUTOFF = 1 | almost_empty asserts when read_used_words is 1 or less // +// ------------------------------------+---------------------------+--------------------------------------------------------------- // +// almost_full_value = lpm_numwords | ALMOST_FULL_CUTOFF = 0 | almost_full behaves the same way as full // +// almost_full_value = lpm_numwords-1 | ALMOST_FULL_CUTOFF = 1 | almost_full asserts when write_used_words is DEPTH-1 or higher // +// // +// INITIAL OCCUPANCY // +// ================= // +// The parameter INITIAL_OCCUPANCY describes the number of words of garbage data in the fifo as it exits from reset. Typically this is 0, e.g. we have to write // +// into the fifo before anything is readable. If INITIAL_OCCUPANCY > 0, then valid_out is 0 during reset, and when it eventually asserts it is then safe for // +// downstream to transact reads from the fifo. Exit from reset should be handled separately for upstream and downstream. In particular, the assertion of // +// valid_out (to downstream) and the deassertion of stall_out (to upstream) may not happen on the same clock cycle. If INITIAL_OCCUPANCY == DEPTH, one cannot // +// use stall_out to observe reset exit, only when at least one item has been read from the fifo will stall_out then deasert. // +// // +// NEVER_OVERFLOWS // +// =============== // +// The fifo's internal overflow protection can be disabled if one guarantees one will not write when the FIFO cannot accept data. One common way to achieve this // +// is to use almost_full to gate valid_in several clocks ahead of time, useful if upstream of the FIFO is physically far away and needs pipeling for routability. // +// If one was already using almost_full the resource usage would have been 2 instantiations of incr/decr/thresh (the other instantiation is for stall_out). By // +// setting NEVER_OVERLOWS = 1 this reduces to only 1 instance. // +// // +// WRITE_AND_READ_DURING_FULL // +// ========================== // +// This optimization was originally performed on low latency fifo where increasing the depth by 1 was expensive. The feature has been ported here. When enabled, // +// the fifo will still accept a write even when the fifo is full provided that there is also a read on this clock cycle. To not incur an fmax penalty, use this // +// feature with NEVER_OVERFLOWS = 1 or STALL_IN_EARLINESS >= 1. Note that this feature is independent of NEVER_OVERFLOWS. NEVER_OVERFLOWS means one should not // +// assert valid_in when the fifo cannot accept a write whereas WRITE_AND_READ_DURING_FULL affects the conditions upon which the fifo cannot accept a write. // +// // +// AREA OPTIMIZATION WITH STALL_IN_EARLINESS // +// ========================================= // +// If downstream of the fifo knows ahead of time whether it will be able to accept data, e.g. it has an almost_full that can be wired up to this fifo's stall_in, // +// we manually retime lots of stuff inside the fifo to remove 1 prefetch stage for each clock cycle that stall_in can be provided early. Indirectly this helps // +// fmax since less logic means stuff stays closer together, so less slow routing. When stall_in is 3 clock cycles early, the prefetch outright disappears. // +// // +// RESET CONFIGURATION // +// =================== // +// One may choose whether to consume the reset asynchronously (ASYNC_RESET=1, intended for A10 or older) or synchronously (ASYNC_RESET=0, intended for S10), but // +// not both at the same time. Reset consumption is separate from reset distribution. For example, we could consume reset synchronously but distribute it // +// asynchronously e.g. using a global clock line, and SYNCHRONIZE_RESET=1 uses local synchronizers before the reset is consumed. If SYNCHRONIZE_RESET=0, it is // +// assumed one has externally managed the synchronous release of reset. For partial reconfiguration debug, one can set RESET_EVERYTHING=1 so that reset reaches // +// every register. Finally, not every control register is reset when ASYNC_RESET=0, if there is a pipeline of valids, typically only the first and last are reset // +// and the reset must be held many clock cycles for the reset to propagate through. A reset pulse stretcher is used, unless RESET_EXTERNALLY_HELD=1 in which case // +// it is assumed that reset will be held for sufficiently long (5 clocks for this module). // +// // +// RECOMMENDED RESET SETTINGS // +// ========================== // +// General usage is intended for when one is unsure about the reset. The HLD platform has specific reset properties e.g. we can remove the reset pulse stretcher. // +// // +// Parameter | General usage A10 | General usage S10 | HLD A10 | HLD S10 // +// ----------------------+-------------------+-------------------+-------------+------------- // +// ASYNC_RESET | 1 | 0 | 1 | 0 // +// SYNCHRONIZE_RESET | 1 | 1 | 0 | 1 // +// RESET_EVERYTHING | 0 | 0 | 0 | 0 // +// RESET_EXTERNALLY_HELD | 0 | 0 | 1 | 1 // +// // +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +// Known issues/optimizations for future work: +// 1. manual signal replication, e.g. how many physical M20Ks can share 1 copy of our address +// 2. potentially relax the stall_in to stall_out/almost_full latency for improved fmax + +// TEMPORARY FIX: +// Reset values are set to match the behavior of before reset cleanup. See FB case:457213. This is a workaround for now. +// Eventually the compiler needs to set the reset parameters correctly, at which point the default values will be set +// back to the original intent, which is for someone who knows nothing about the reset in their system. + +// TESTBENCH: the testbench for this has now been merged into testbench of dla_hld_fifo + + + +`default_nettype none +`include "dla_acl_parameter_assert.svh" + +module dla_acl_high_speed_fifo #( + //basic fifo configuration + parameter int WIDTH = 0, // width of the data path through the fifo + parameter int DEPTH = 0, // capacity of the fifo, at least 1 + + //occupancy + parameter int ALMOST_EMPTY_CUTOFF = 0, // almost_empty asserts if read_used_words <= ALMOST_EMPTY_CUTOFF, read_used_words increments when writes are visible on the read side, decrements when fifo is read + parameter int ALMOST_FULL_CUTOFF = 0, // almost_full asserts if write_used_words >= (DEPTH-ALMOST_FULL_CUTOFF), write_used_words increments when fifo is written to, decrements when fifo is read + parameter int INITIAL_OCCUPANCY = 0, // number of words in the fifo (write side occupancy) when it comes out of reset, note it still takes 5 clocks for this to become visible on the read side + + //reset configuration + parameter bit ASYNC_RESET = 1, // how do we use reset: 1 means registers are reset asynchronously, 0 means registers are reset synchronously + parameter bit SYNCHRONIZE_RESET = 0, // based on how reset gets to us, what do we need to do: 1 means synchronize reset before consumption (if reset arrives asynchronously), 0 means passthrough (managed externally) + parameter bit RESET_EVERYTHING = 0, // intended for partial reconfig debug, set to 1 to reset every register (normally async reset excludes data path and sync reset additionally excludes some control signals) + parameter bit RESET_EXTERNALLY_HELD = 0, // set to 1 if resetn will be held for at least FIVE clock cycles, otherwise we will internally pulse stretch reset before consumption + + //special configurations for higher fmax / lower area + parameter int STALL_IN_EARLINESS = 0, // how many clock cycles early is stall_in provided, fifo supports up to 3, setting this any higher results in registers to absorb the excess earliness + parameter int VALID_IN_EARLINESS = 0, // how many clock cycles early is valid_in provided, fifo does not take advantage of this, anything set here results in registers to absorb the excess earliness + parameter int STALL_IN_OUTSIDE_REGS = 0, // number of registers on the stall-in path external to this module that will delay the propagation of x values on reset (e.g. in dla_hld_fifo) + parameter int VALID_IN_OUTSIDE_REGS = 0, // number of registers on the valid-in path external to this module that will delay the propagation of x values on reset (e.g. in dla_hld_fifo) + parameter int REGISTERED_DATA_OUT_COUNT = 0,// 0 to WIDTH inclusive, data_out[REGISTERED_DATA_OUT_COUNT-1:0] are registered, the remaining upper bits are unregistered + // generally REGISTERED_DATA_OUT_COUNT should be 0 unless fifo output data drives control logic, in which case just those bits should be registered + parameter bit NEVER_OVERFLOWS = 0, // set to 1 to disable fifo's internal overflow protection, area savings by removing one incr/decr/thresh, stall_out still asserts during reset but won't mask valid_in + + //special features that typically have an fmax penalty + parameter bit HOLD_DATA_OUT_WHEN_EMPTY = 0, // 0 means data_out can be x when fifo is empty, 1 means data_out will hold last value when fifo is empty (scfifo behavior, has fmax penalty) + // beware that if one sets this to 1, then the maximum usable STALL_IN_EARLINESS is only 2 since read data must go in an ALM register not M20K register + parameter bit WRITE_AND_READ_DURING_FULL = 0,//set to 1 to allow writing and reading while the fifo is full, this may have an fmax penalty, to compensate it is recommended to use this with NEVER_OVERFLOWS = 1 + + //ram implementation + parameter string RAM_BLOCK_TYPE = "FIFO_TO_CHOOSE", // "MLAB" | "M20K" | "AUTO" | "FIFO_TO_CHOOSE" -> ram_block_type parameter of altera_syncram, if MLAB or M20K you will get what you ask for, AUTO means Quartus chooses, + // FIFO_TO_CHOOSE means we choose a value and then tell Quartus (typically based on depth of fifo) + parameter enable_ecc = "FALSE" // Enable error correction coding +) +( + input wire clock, + input wire resetn, // see description above for different reset modes + + //write interface + input wire valid_in, // upstream advertises it has data, a write happens when valid_in & ~stall_out -- this needs to be early if VALID_IN_EARLINESS >= 1 + input wire [WIDTH-1:0] data_in, // data from upstream + output logic stall_out, // inform upstream that we cannot accept data + output logic almost_full, // asserts if write_used_words >= (DEPTH-ALMOST_FULL_CUTOFF) + + //read interface + output logic valid_out, // advertise to downstream that we have data + output logic [WIDTH-1:0] data_out, // data to downstream + input wire stall_in, // downstream indicates it cannot accept data -- this needs to be early if STALL_IN_EARLINESS >= 1 + output logic almost_empty, // asserts if read_used_words <= ALMOST_EMPTY_CUTOFF + output logic forced_read_out, // indicates fifo is being read on current clock cycle, read data must be consumed or it will be lost, is a registered signal if STALL_IN_EARLINESS >= 1 + output logic [1:0] ecc_err_status // ecc status signals +); + + + ////////////////////////////////////// + // // + // Sanity check on the parameters // + // // + ////////////////////////////////////// + + // do not allow arbitrarily large amounts of earliness, as this delays the exit from reset "safe state" + // the checks are done in Quartus pro and Modelsim, it is disabled in Quartus standard because it results in a syntax error (parser is based on an older systemverilog standard) + // the workaround is to use synthesis translate to hide this from Quartus standard, ALTERA_RESERVED_QHD is only defined in Quartus pro, and Modelsim ignores the synthesis comment + `ifdef ALTERA_RESERVED_QHD + `else + //synthesis translate_off + `endif + + generate + `DLA_ACL_PARAMETER_ASSERT_MESSAGE(DEPTH >= 1, $sformatf("dla_acl_high_speed_fifo: illegal value of DEPTH = %d, minimum allowed is 1\n", DEPTH)) + `DLA_ACL_PARAMETER_ASSERT_MESSAGE(ALMOST_EMPTY_CUTOFF >= 0 && ALMOST_EMPTY_CUTOFF <= DEPTH, $sformatf("dla_acl_high_speed_fifo: illegal value of ALMOST_EMPTY_CUTOFF = %d, minimum allowed is 0, maximum allowed is DEPTH = %d\n", ALMOST_EMPTY_CUTOFF, DEPTH)) + `DLA_ACL_PARAMETER_ASSERT_MESSAGE(ALMOST_FULL_CUTOFF >= 0 && ALMOST_FULL_CUTOFF <= DEPTH, $sformatf("dla_acl_high_speed_fifo: illegal value of ALMOST_FULL_CUTOFF = %d, minimum allowed is 0, maximum allowed is DEPTH = %d\n", ALMOST_FULL_CUTOFF, DEPTH)) + `DLA_ACL_PARAMETER_ASSERT_MESSAGE(INITIAL_OCCUPANCY >= 0 && INITIAL_OCCUPANCY <= DEPTH, $sformatf("dla_acl_high_speed_fifo: illegal value of INITIAL_OCCUPANCY = %d, minimum allowed is 0, maximum allowed is DEPTH = %d\n", INITIAL_OCCUPANCY, DEPTH)) + `DLA_ACL_PARAMETER_ASSERT_MESSAGE(REGISTERED_DATA_OUT_COUNT >= 0 && REGISTERED_DATA_OUT_COUNT <= WIDTH, $sformatf("dla_acl_high_speed_fifo: illegal value of REGISTERED_DATA_OUT_COUNT = %d, minimum allowed is 0, maximum allowed is WIDTH = %d\n", REGISTERED_DATA_OUT_COUNT, WIDTH)) + `DLA_ACL_PARAMETER_ASSERT_MESSAGE(STALL_IN_EARLINESS >= 0 && STALL_IN_EARLINESS <= 10, $sformatf("dla_acl_high_speed_fifo: illegal value of STALL_IN_EARLINESS = %d, minimum allowed is 0, maximum allowed is 10\n", STALL_IN_EARLINESS)) + `DLA_ACL_PARAMETER_ASSERT_MESSAGE(VALID_IN_EARLINESS >= 0 && VALID_IN_EARLINESS <= 10, $sformatf("dla_acl_high_speed_fifo: illegal value of VALID_IN_EARLINESS = %d, minimum allowed is 0, maximum allowed is 10\n", VALID_IN_EARLINESS)) + `DLA_ACL_PARAMETER_ASSERT_MESSAGE(VALID_IN_OUTSIDE_REGS >= 0 && VALID_IN_OUTSIDE_REGS <= 1, $sformatf("dla_acl_high_speed_fifo: illegal value of VALID_IN_OUTSIDE_REGS = %d, minimum allowed is 0, maximum allowed is 1\n", VALID_IN_OUTSIDE_REGS)) + `DLA_ACL_PARAMETER_ASSERT_MESSAGE(STALL_IN_OUTSIDE_REGS >= 0 && STALL_IN_OUTSIDE_REGS <= 1, $sformatf("dla_acl_high_speed_fifo: illegal value of STALL_IN_OUTSIDE_REGS = %d, minimum allowed is 0, maximum allowed is 1\n", STALL_IN_OUTSIDE_REGS)) + endgenerate + `ifdef ALTERA_RESERVED_QHD + `else + //synthesis translate_on + `endif + + + + ////////////////////////// + // // + // Parameter settings // + // // + ////////////////////////// + + //excess earliness + localparam int MAX_EARLY_STALL = (HOLD_DATA_OUT_WHEN_EMPTY) ? 2 : 3; // maximum amount of stall in earliness that the fifo can use + localparam int EXCESS_EARLY_STALL = (STALL_IN_EARLINESS>MAX_EARLY_STALL) ? (STALL_IN_EARLINESS-MAX_EARLY_STALL) : 0; + localparam int EXCESS_EARLY_VALID = VALID_IN_EARLINESS; // cannot take advantage of valid in earliness (this was intended for low latency fifo) + + // reset timing + localparam int EXCESS_EARLY_STALL_WITH_EXT = EXCESS_EARLY_STALL + STALL_IN_OUTSIDE_REGS; //early stall is affected by regs outside this module; account for effect on reset timing + localparam int EXCESS_EARLY_VALID_WITH_EXT = EXCESS_EARLY_VALID + VALID_IN_OUTSIDE_REGS; //early valid is affected by regs outisde this module; account for effect on reset timing + localparam int FLUSH_EARLY_PIPES = (EXCESS_EARLY_STALL_WITH_EXT > EXCESS_EARLY_VALID_WITH_EXT) ? EXCESS_EARLY_STALL_WITH_EXT : EXCESS_EARLY_VALID_WITH_EXT; // clocks needs to flush excess earliness pipelines + localparam int RESET_SYNC_DEPTH = (SYNCHRONIZE_RESET) ? 3 : 0; // how many registers are added inside dla_acl_reset_handler for synchronizing the reset + localparam int RESET_PIPE_DEPTH = 4; // how many pipeline stages we add to sclrn + localparam int RESET_LATENCY = (ASYNC_RESET || RESET_EVERYTHING) ? 0 : (RESET_SYNC_DEPTH + RESET_PIPE_DEPTH); // how many clocks from the resetn input signal until the reset is consumed + localparam int MIN_RESET_DELAY = 0; // no minimum, we don't use early occupancy like in low latency fifo + localparam int RAW_RESET_DELAY = FLUSH_EARLY_PIPES - RESET_LATENCY; // delay fifo exit from safe state if need more clocks to flush earliness than reset latency + localparam int RESET_RELEASE_DELAY = (RAW_RESET_DELAY < MIN_RESET_DELAY) ? MIN_RESET_DELAY : RAW_RESET_DELAY; // how many clocks late the fifo exits from safe state + + // reset release delay for the various occupancy trackers + localparam int RESET_DELAY_ADDR_MATCH = RESET_RELEASE_DELAY + 1; // increment to wr_addr_ahead_of_rd_addr is 1 clock behind valid_in, release initial occupancy to downstream control logic 1 clock after reset exit + localparam int RESET_DELAY_STALL_OUT = RESET_RELEASE_DELAY; + localparam int RESET_DELAY_ALMOST_FULL = RESET_RELEASE_DELAY; + localparam int RESET_DELAY_ALMOST_EMPTY = RESET_RELEASE_DELAY + 4; // INITIAL_OCCUPANCY affects write-side occupancy, it takes 4 clocks (write to read latency minus 1) for this to propagate to read-side occupancy + localparam int RESET_DELAY_MAX = RESET_DELAY_ALMOST_EMPTY; // this will always be the largest + + // internal settings for the fifo + localparam int EARLY_STALL = STALL_IN_EARLINESS - EXCESS_EARLY_STALL; // amount of stall in earliness that the fifo will use + localparam int PREFETCH_STAGES_RAW = 3-EARLY_STALL; // EARLY_STALL=0,1,2,3 makes PREFETCH_STAGESR_RAW=3,2,1,0 respectively + localparam int PREFETCH_STAGES = (DEPTH < PREFETCH_STAGES_RAW) ? DEPTH : PREFETCH_STAGES_RAW; //clip based on depth since the prefetch adds capacity + localparam int PREFETCH_BITS_RAW = $clog2(PREFETCH_STAGES+1); // number of bits in prefetch counters + localparam int PREFETCH_BITS = (!PREFETCH_BITS_RAW) ? 1 : PREFETCH_BITS_RAW; // don't make this zero just to avoid syntax error + localparam int USE_LFSR = (EARLY_STALL<=2) ? 1 : 0; // m20k addresses is lfsr if capacity regained from at least 1 prefetch stage, else use tessellated counter which needs early increment + localparam int ADDR_RAW = $clog2(DEPTH+USE_LFSR-PREFETCH_STAGES); // number of address bits for m20k, lose 1 capacity due to nonzero state of lfsr, prefetch adds PREFETCH_STAGES of capacity + localparam int ADDR = (ADDR_RAW < 2) ? 2 : ADDR_RAW; // minimum size of lfsr + + // properties of the fifo which are consumed by the testbench + localparam int WRITE_TO_READ_LATENCY = 5; //once something is written into the fifo, how many clocks later will it be visible on the read side + localparam int RESET_EXT_HELD_LENGTH = 5; //if RESET_EXTERNALLY_HELD = 1, how many clocks does reset need to be held for + localparam int MAX_CLOCKS_TO_ENTER_SAFE_STATE = 5; //upon assertion of reset, worse case number of clocks until fifo shows both full and empty + localparam int MAX_CLOCKS_TO_EXIT_SAFE_STATE = 22; //upon release of reset, worse case number of clocks until fifo is ready to transact (not necessarily observable if INITIAL_OCCUPANCY = DEPTH) + + + + /////////////////////////// + // // + // Signal declarations // + // // + /////////////////////////// + + genvar g; + + //reset signals, all active low, aclrn is only used if ASYNC_RESET=1 otherwise sclrn_* is used, resetn_* is passed into submodules who internally decide whether to use it asynchronously or not + logic aclrn, sclrn_before_pulse_stretch; + logic [4:0] sclrn_chain /* synthesis dont_merge */; + logic sclrn_pulse_stretched, sclrn_base, sclrn, sclrn_pref_received, sclrn_reset_everything /* synthesis dont_merge */; + logic resetn_wraddr, resetn_rdaddr /* synthesis dont_merge */; + logic resetn_addr_match, resetn_full, resetn_almost_full, resetn_almost_empty /* synthesis dont_merge */; + logic [RESET_DELAY_MAX:0] resetn_delayed; + + //retime stall_in and valid_in to the correct timing, absorb excess earliness that the fifo cannot take advantage of + logic stall_in_correct_timing, valid_in_correct_timing; + logic [EXCESS_EARLY_STALL:0] stall_in_pipe; + logic [EXCESS_EARLY_VALID:0] valid_in_pipe; + + //signals that interface directly to the memory block + logic m20k_wren, m20k_wren_for_others /* synthesis dont_merge */; + logic [ADDR-1:0] m20k_wraddr, m20k_rdaddr; + logic [WIDTH-1:0] m20k_wrdata, m20k_rddata; + + //signals to determine whether to initiate transfer from memory block into prefetch + logic try_feed_prefetch, feed_prefetch; + logic wr_addr_ahead_of_rd_addr; + logic m20k_hardened_rdaddr_valid, m20k_hardened_rddata_valid; + + //signals to track occupancy in prefetch + logic decr_pref_requsted, pref_loading; + logic [1:0] pref_requested, pref_received; + logic pref_insertion_lo, pref_insertion_hi; + logic prefetch_full, prefetch_valid, prefetch_valid_pre; + + //data path of prefetch signals + logic data_out_clock_en_reg, data_out_clock_en_comb; + logic data1_clock_en, data2_clock_en, data3_clock_en /* synthesis dont_merge */; + logic [WIDTH-1:0] data1, data2, data3, data_out_reg, data_out_unreg; + + //signals to track fifo occupancy as seen by outside world + logic valid_out_early_by_two, read_from_fifo_early_by_two; + logic valid_out_early, read_from_fifo_early, try_read_from_fifo_early; + logic try_read_from_fifo, read_from_fifo; + logic fifo_in_reset; + logic stall_out_overflow, stall_out_raw, stall_out_decr_raw, stall_out_decr_no_underflow; + logic [2:0] m20k_wren_delayed; + logic not_almost_empty; + + + + //////////////////////////////////////////////////////////////////////////////////////////////////////////// + // // + // Retiming summary // + // // + // IMPORTANT: read the comments in each section so that you know what each signal means BEFORE reading // + // this table. // + // // + // If stall_in is known ahead of time, we can reduce the number of prefetch stages to save area. // + // Anything that depends on stall_in can be computed earlier, which means we know ahead of time when // + // data will exit from the prefetch. // + // // + // Timing sensitive paths at large data widths tend to be from the following: // + // 1. stall_in to read address register inside M20K (assume FIFO is deep) // + // 2. stall_in through control logic of prefetch data path to data_out (unregistering data_out helps) // + // // + // If stall_in can be known at least 3 clocks early, we can outright eliminate the prefetch. In this // + // configuration, the fifo output data is the M20K read data registers. Also the high fan-out problem // + // is now pushed into hardened logic (the address decoder inside the M20K). Typically one still needs // + // another register after the M20K output before consuming the data to allow for routing delay. // + // // + // To reach high fmax, we need extra registers on the path feeding stall_in that can get retimed into // + // the fifo. For example, if downstream can advertise an almost full which is 10 items lower than its // + // capacity, this almost full could be sent through 7 registers before feeding stall_in of this fifo, // + // and this fifo could use STALL_IN_EARLINESS = 3. // + // // + // As a general guideline when optimizing for fmax, if one can provide stall_in one clock cycle early // + // it generally better to register it outside of the FIFO and use STALL_IN_EARLINESS = 3. This will get // + // retimed into the FIFO and it usually provides more fmax benefit than removing a prefetch stage. Once // + // one register is added to stall_in, typically it is then more beneficial to fmax to remove prefetch // + // stages, as less logic means it gets placed physically closer together (less wire delay and probably // + // less routing congestion). Once the prefetch disappears, one can only add registers on stall_in // + // outside of the FIFO. In summary: // + // // + // Functional | Recommended FIFO configuration for highest fmax // + // earliness +--------------------+------------------------------------------- // + // of stall_in | STALL_IN_EARLINESS | Registers before stall_in outside of FIFO // + // ------------+--------------------+------------------------------------------- // + // 0 | 0 | 0 // + // 1 | 0 | 1 // + // 2 | 1 | 1 // + // 3 | 2 | 1 // + // 4 | 3 | 1 // + // 5 | 3 | 2 // + // // + // For a given FIFO configuration, the following summarizes the latency from stall_in to various // + // internals of the FIFO (more latency is better for fmax) and the manual retiming that is done: // + // // + // Base case | Area -1 | Area -2 | Area -3 // + // --------------------------------------------------+---------------+----------------+---------------- // + // Configuration: | | | // + // STALL_IN_EARLINESS 0 | 1 | 2 | 3 // + // PREFETCH_STAGES 3 | 2 | 1 | 0 // + // --------------------------------------------------+---------------+----------------+---------------- // + // Clock cycles of latency from stall_in to xxx: | | | // + // stall_in to m20k_rdaddr 1 | 1 | 1 | 2 // + // stall_in to wr_addr_ahead_of_rd_addr 1 | 1 | 1 | 1 // + // stall_in to pref_requested 1 | 1 | 1 | N/A // + // stall_in to pref_received 1 | 1 | 1 | N/A // + // stall_in to data_out_clock_en 0 | 1 | N/A | N/A // + // stall_in to pref_insertion_{hi,lo} 1 | 2 | N/A | N/A // + // --------------------------------------------------+---------------+----------------+---------------- // + // Manual retiming due to early stall_in: | | | // + // wr_addr_ahead_of_rd_addr retimed 0 | 0 | 0 | 0 // + // pref_requested retimed 0 | 1 clock early | 2 clocks early | N/A // + // pref_received retimed 0 | 1 clock early | 2 clocks early | N/A // + // // + //////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + //////////////////////// + // // + // Reset sequencing // + // // + //////////////////////// + + // The tessellated incr/decr/threshold detector requires at least 5 clock cycles of holding reset to let it flush + // through the tessellated adder. We also don't want something like e.g. an LFSR (M20K address) coming out of reset + // before the incr/decr/threshold is stable. So everyone gets a 5 clock cycle pulse stretched reset. This is then + // put through another 2 registers after pulse stretching to facilitate retiming. + // + // If the reset is asynchronous, every register is reset. The assumption is either async reset is on a global clock + // or we are debugging something related to initial conditions. + // + // Reset dependence | Module | Fanout (not including duplicates that Quartus makes on its own) + // --------------------------+--------------------------+---------------------------------------------------------------- + // m20k_wraddr | lfsr or tess incr | approx 10 - has its own reset + // m20k_rdaddr | lfsr or tess incr | approx 10 - has its own reset + // wr_addr_ahead_of_rd_addr | tess incr decr threshold | approx 10 - has its own reset + // m20k_wren | this module | 1 + // pref_requested | this module | 1 or 2 + // valid_out | this module | 1 + // pref_received | this module | 1 or 2, this probably gets replicated many times at large WIDTH + // prefetch_valid | this module | 1 - has its own together with pref_received + // stall_out | tess incr decr threshold | approx 10 - has its own reset + // almost_full | tess incr decr threshold | approx 10 - has its own reset + // almost_empty | tess incr decr threshold | approx 10 - has its own reset + // + // S10 reset specification: + // S (clocks to enter reset "safe state"): 5 for sclrn_before_pulse_stretch to actual register (beware synchronizer takes no time for reset assertion, but it does take time for reset release) + // P (minimum duration of reset pulse): 5 if RESET_EXTERNALLY_HELD = 1, otherwise 1 (we will internally pulse stretch the reset to 5 clocks) + // D (clocks to exit reset "safe state"): 22 (3 for synchronizer) + (9 for sclrn_before_pulse_stretch to actual register) + (10 for reset release delay for registers that absorb excess earliness) + + dla_acl_reset_handler + #( + .ASYNC_RESET (ASYNC_RESET), + .USE_SYNCHRONIZER (SYNCHRONIZE_RESET), + .SYNCHRONIZE_ACLRN (SYNCHRONIZE_RESET), + .PIPE_DEPTH (0), + .NUM_COPIES (1) + ) + dla_acl_reset_handler_inst + ( + .clk (clock), + .i_resetn (resetn), + .o_aclrn (aclrn), + .o_resetn_synchronized (), + .o_sclrn (sclrn_before_pulse_stretch) + ); + + generate + if (ASYNC_RESET) begin : async_reset + assign sclrn_base = 1'b1; + assign sclrn = 1'b1; + assign sclrn_pref_received = 1'b1; + assign sclrn_reset_everything = 1'b1; + assign resetn_wraddr = aclrn; + assign resetn_rdaddr = aclrn; + assign resetn_addr_match = resetn_delayed[RESET_DELAY_ADDR_MATCH]; + assign resetn_full = resetn_delayed[RESET_DELAY_STALL_OUT]; + assign resetn_almost_full = resetn_delayed[RESET_DELAY_ALMOST_FULL]; + assign resetn_almost_empty = resetn_delayed[RESET_DELAY_ALMOST_EMPTY]; + end + else begin : sync_reset + always_ff @(posedge clock) begin + sclrn_chain <= (sclrn_chain << 1) | sclrn_before_pulse_stretch; + sclrn_pulse_stretched <= (RESET_EXTERNALLY_HELD) ? sclrn_before_pulse_stretch : (&sclrn_chain); + sclrn_base <= sclrn_pulse_stretched; + sclrn <= sclrn_base; + sclrn_reset_everything <= (RESET_EVERYTHING) ? sclrn_base : 1'b1; + sclrn_pref_received <= sclrn_base; + resetn_wraddr <= sclrn_base; + resetn_rdaddr <= sclrn_base; + resetn_addr_match <= resetn_delayed[RESET_DELAY_ADDR_MATCH]; + resetn_full <= resetn_delayed[RESET_DELAY_STALL_OUT]; + resetn_almost_full <= resetn_delayed[RESET_DELAY_ALMOST_FULL]; + resetn_almost_empty <= resetn_delayed[RESET_DELAY_ALMOST_EMPTY]; + end + end + endgenerate + + generate + always_comb begin + resetn_delayed[0] = (ASYNC_RESET) ? aclrn : sclrn_base; + end + for (g=1; g<=RESET_DELAY_MAX; g++) begin : gen_resetn_delayed + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) resetn_delayed[g] <= '0; + else begin + resetn_delayed[g] <= (ASYNC_RESET && g==1) ? 1'b1 : resetn_delayed[g-1]; //partial reconfig requires no d-input consumption of aclr, so resetn_delayed[1] loads 1'b1 if ASYNC_RESET + if (~sclrn_pulse_stretched) resetn_delayed[g] <= '0; //asserts at the same time as sclrn_base, peek one stage ahead so that output can be registered + end + end + end + endgenerate + + // fifo_in_reset indicates when the fifo has exited from reset, cannot always use stall_out to determine if fifo has exited reset because initial occupancy could be full + // the simulation testbench consumes this to know when the fifo has exited from reset and therefore should compare if stall_out matches the bevahior of occupancy tracking + // fifo_in_reset gets exposed to the outside world when NEVER_OVERFLOWS = 1 + // one can write into the fifo as soon as possible by watching stall_out (either the fifo exited from reset with initial occupancy not full, or a read has dropped the occupancy below full) + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) fifo_in_reset <= 1'b1; + else begin + fifo_in_reset <= 1'b0; + if (~resetn_full) fifo_in_reset <= 1'b1; + end + end + + + + + //////////////////////////////////////////////// + // // + // Absorb excess earliness on input signals // + // // + //////////////////////////////////////////////// + + // the fifo cannot take advantage of STALL_IN_EARLINESS above 3 (or above 2 when HOLD_DATA_OUT_WHEN_EMPTY) + // absorb the excess earliness with registers, and provide the correctly timed version based on the amount of earliness that the fifo will use + // likewise the fifo cannot take advantage of VALID_IN_EARLINESS + generate + always_comb begin + stall_in_pipe[0] = stall_in; + valid_in_pipe[0] = valid_in; + end + for (g=1; g<=EXCESS_EARLY_STALL; g++) begin : gen_stall_in_delayed + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) stall_in_pipe[g] <= (RESET_EVERYTHING) ? 1'b1 : 1'bx; + else begin + stall_in_pipe[g] <= stall_in_pipe[g-1]; + if (~sclrn_reset_everything) stall_in_pipe[g] <= 1'b1; + end + end + end + for (g=1; g<=EXCESS_EARLY_VALID; g++) begin : gen_valid_in_delayed + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) valid_in_pipe[g] <= (RESET_EVERYTHING) ? 1'b0 : 1'bx; + else begin + valid_in_pipe[g] <= valid_in_pipe[g-1]; + if (~sclrn_reset_everything) valid_in_pipe[g] <= 1'b0; + end + end + end + endgenerate + assign stall_in_correct_timing = stall_in_pipe[EXCESS_EARLY_STALL]; + assign valid_in_correct_timing = valid_in_pipe[EXCESS_EARLY_VALID]; + + + + //////////////////// + // // + // Memory block // + // // + //////////////////// + + generate + if (WIDTH > 0) begin : gen_ram + //assuming RAM_BLOCK_TYPE == "FIFO_TO_CHOOSE", determine whether to use M20K or MLAB + //experiments show that we get lower silicon area by forcing DEPTH <= 32 FIFOs into MLAB + localparam RAM_BLOCK_TYPE_PREFERNCE = (ADDR <= 5) ? "MLAB" : "M20K"; + + //workaround for how parameters are parsed into packed data types inside altera_syncram, cannot feed it with a string parameter, the parameter needs to be untyped + //this also acts as a parameter legalizer, if one sets RAM_BLOCK_TYPE to some illegal value then we will make the choice for what altera_syncram sees as RAM_BLOCK_TYPE + localparam RAM_BLOCK_TYPE_UNTYPED = (RAM_BLOCK_TYPE == "MLAB" ) ? "MLAB" : (RAM_BLOCK_TYPE == "M20K") ? "M20K" : (RAM_BLOCK_TYPE == "AUTO") ? "AUTO" : RAM_BLOCK_TYPE_PREFERNCE; + + dla_acl_altera_syncram_wrapped #( //modelsim library: altera_lnsim + .numwords_a (2**ADDR), + .numwords_b (2**ADDR), + .address_aclr_b ("NONE"), + .address_reg_b ("CLOCK0"), + .rdcontrol_reg_b ("CLOCK0"), + .byteena_reg_b ("CLOCK0"), + .indata_reg_b ("CLOCK0"), + .clock_enable_input_a ("BYPASS"), + .clock_enable_input_b ("BYPASS"), + .clock_enable_output_b ("BYPASS"), + .intended_device_family ("Stratix 10"), //quartus will correct this automatically to whatever your project actually uses + .lpm_type ("altera_syncram"), + .operation_mode ("DUAL_PORT"), + .outdata_aclr_b ("NONE"), + .outdata_sclr_b ("NONE"), + .outdata_reg_b ("CLOCK0"), + .power_up_uninitialized ("TRUE"), + .ram_block_type (RAM_BLOCK_TYPE_UNTYPED), + .read_during_write_mode_mixed_ports ("DONT_CARE"), + .widthad_a (ADDR), + .widthad_b (ADDR), + .width_a (WIDTH), + .width_b (WIDTH), + .width_byteena_a (1), + .enable_ecc (enable_ecc), + .connect_clr_to_ram(0) + ) + altera_syncram_wrapped + ( + //clock, no reset + .clock0 (clock), + + //write port + .wren_a (m20k_wren), + .address_a (m20k_wraddr), + .data_a (m20k_wrdata), + + //read port + .address_b (m20k_rdaddr), + .q_b (m20k_rddata), + + // For ECC + .aclr0 (~aclrn), + .sclr (~sclrn), + .ecc_err_status(ecc_err_status), + + //unused + .aclr1 (1'b0), + .addressstall_a (1'b0), + .addressstall_b (1'b0), + .byteena_a (1'b1), + .byteena_b (1'b1), + .clock1 (1'b1), + .clocken0 (1'b1), + .clocken1 (1'b1), + .data_b ({WIDTH{1'b1}}), + .q_a (), + .rden_a (1'b1), + .rden_b (1'b1), + .wren_b (1'b0) + ); + end + else begin + assign ecc_err_status = 2'h0; + end + endgenerate + + + /////////////////////////////////////////// + // // + // Write side control of memory block // + // // + /////////////////////////////////////////// + + // There is one pipeline stage before incoming data is written into m20k. If write enable is high then address + // changes on the next clock, so address stays at next available place to write. + // + // Except for EARLY_STALL=3, addresses use LFSRs (linear feedback shift registers) instead of counters + // since the next state logic is simpler (probably easier to retime). The read address must follow the same + // sequence as the write address, but the sequence itself does not matter. + // + // We lose one capacity from the M20K when using LFSRs since the all zeros state is illegal. We can recover this + // capacity from the prefetch, unless EARLY_STALL=3 in which case there is no prefetch. In this case, we + // use a tessellated adder for the addresses since the increment is known one clock cycle early. + + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) begin + m20k_wren <= 1'b0; + m20k_wren_for_others <= 1'b0; + m20k_wrdata <= (RESET_EVERYTHING) ? '0 : 'x; + end + else begin + m20k_wren <= valid_in_correct_timing & ~stall_out_overflow; + m20k_wren_for_others <= valid_in_correct_timing & ~stall_out_overflow; //copy of m20k_wren, logic not related to m20k won't be pulled in close to m20k + m20k_wrdata <= data_in; + if (~sclrn) begin + m20k_wren <= 1'b0; + m20k_wren_for_others <= 1'b0; + end + if (~sclrn_reset_everything) m20k_wrdata <= '0; + end + end + + generate + if (USE_LFSR) begin : wraddr_lfsr + dla_acl_lfsr #( + .WIDTH (ADDR), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0), + .INITIAL_OCCUPANCY (INITIAL_OCCUPANCY) + ) + m20k_wraddr_inst + ( + .clock (clock), + .resetn (resetn_wraddr), + .enable (m20k_wren_for_others), + .state (m20k_wraddr) + ); + end + else begin : wraddr_tess + dla_acl_tessellated_incr_lookahead #( + .WIDTH (ADDR), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0), + .RESET_EVERYTHING (RESET_EVERYTHING), + .RESET_EXTERNALLY_HELD (1), + .INITIAL_OCCUPANCY (INITIAL_OCCUPANCY) + ) + m20k_wraddr_inst + ( + .clock (clock), + .resetn (resetn_wraddr), + .incr (valid_in_correct_timing & ~stall_out_overflow), + .count (m20k_wraddr) + ); + end + endgenerate + + + + ////////////////////////////////////////// + // // + // Read side control of memory block // + // // + ////////////////////////////////////////// + + // If there is a prefetch, the read port is kept in a +1 state. Bascially we leave read data dangling on the read port of the memory + // tblock. Assume read latency through the memory block including pipeline registers is N clock cycles (in this case N = 3), Once there + // will be space available in the prefetch, ask for new data now and pick up the existing read data in N-1 clocks from now. + // + // If there is no prefetch, we cannot use the dangling data optimization. However stall_in is now sufficiently early that we + // can use stall_in to update the read address, and even with the latency through the memory, the output data will udpate in time. + + assign try_feed_prefetch = ~prefetch_full | ~stall_in_correct_timing; + assign feed_prefetch = wr_addr_ahead_of_rd_addr & try_feed_prefetch; //there is data available in memory and prefetch will have space + + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) begin + m20k_hardened_rdaddr_valid <= 1'b0; + m20k_hardened_rddata_valid <= 1'b0; + end + else begin + m20k_hardened_rdaddr_valid <= feed_prefetch; //track the read valid through the memory + m20k_hardened_rddata_valid <= m20k_hardened_rdaddr_valid; + if (~sclrn_reset_everything) begin + m20k_hardened_rdaddr_valid <= 1'b0; + m20k_hardened_rddata_valid <= 1'b0; + end + end + end + + generate + if (USE_LFSR) begin : rdaddr_lfsr + dla_acl_lfsr #( + .WIDTH (ADDR), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0), + .INITIAL_OCCUPANCY (0) + ) + m20k_rdaddr_inst + ( + .clock (clock), + .resetn (resetn_rdaddr), + .enable (feed_prefetch), + .state (m20k_rdaddr) + ); + end + else begin : rdaddr_tess + dla_acl_tessellated_incr_lookahead #( + .WIDTH (ADDR), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0), + .RESET_EVERYTHING (RESET_EVERYTHING), + .RESET_EXTERNALLY_HELD (1), + .INITIAL_OCCUPANCY (0) + ) + m20k_rdaddr_inst + ( + .clock (clock), + .resetn (resetn_rdaddr), + .incr (feed_prefetch), + .count (m20k_rdaddr) + ); + end + endgenerate + + + + ///////////////////////////////////// + // // + // Address match lookahead logic // + // // + ///////////////////////////////////// + + // The memory block is configured so that reading and writing from the same address returns X. Therefore a read is valid + // only once the write address has advanced past the read address. The signal wr_addr_ahead_of_rd_addr is functionally + // equivalent to using combinational logic to check if m20k_wraddr != m20k_rdaddr. We look at ways of getting into + // this state so that we can register wr_addr_ahead_of_rd_addr. + + dla_acl_tessellated_incr_decr_threshold #( + .CAPACITY (DEPTH), + .THRESHOLD (1), + .INITIAL_OCCUPANCY (INITIAL_OCCUPANCY), + .WRITE_AND_READ_DURING_FULL (0), + .THRESHOLD_REACHED_AT_RESET (0), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0), + .RESET_EVERYTHING (RESET_EVERYTHING), + .RESET_EXTERNALLY_HELD (1) + ) + addr_match_inst + ( + .clock (clock), + .resetn (resetn_addr_match), + .incr_no_overflow (m20k_wren_for_others), + .incr_raw (m20k_wren_for_others), + .decr_no_underflow (feed_prefetch), + .decr_raw (try_feed_prefetch), + .threshold_reached (wr_addr_ahead_of_rd_addr) + ); + + + + //////////////////////////////// + // // + // Prefetch request control // + // // + //////////////////////////////// + + // The signal pref_requested tracks the occupancy that has been reserved inside the prefetch. It increases when we ask for + // data from the M20K, it decreases when data is read from the fifo, no change to value if both or neither event occurs. + // If EARLY_STALL > 0, pref_requested is retimed earlier since we know ahead of time when data exits the prefetch. + // prefetch_full is functionally equivalent to using combinational logic to check if pref_requested == PREFETCH_STAGES, + // but this is retimed to be registered by looking at how we enter and exit this state. + + generate + if (PREFETCH_STAGES == 0) begin : pref_req_0 //area -3 + assign prefetch_full = 1'b1; + end + else begin : pref_req + if (PREFETCH_STAGES == 1) begin : pref_req_1 //area -2 + assign prefetch_full = pref_requested[0]; //pref_requested == 1 + end + if (PREFETCH_STAGES == 2) begin : pref_req_2 //area -1 + assign prefetch_full = pref_requested[1]; //pref_requested == 2, use msb since count cannot reach 3 + end + if (PREFETCH_STAGES == 3) begin : pref_req_3 //base case + always_ff @(posedge clock or negedge aclrn) begin //lookahead to check pref_requested == 3, we could be 2 and increasing or 3 and not decreasing + if (~aclrn) prefetch_full <= 1'b0; + else begin + prefetch_full <= (pref_requested==2'h2 & wr_addr_ahead_of_rd_addr & ~decr_pref_requsted) | (pref_requested==2'h3 & (wr_addr_ahead_of_rd_addr | ~decr_pref_requsted)); + if (~sclrn_reset_everything) prefetch_full <= 1'b0; + end + end + end + assign decr_pref_requsted = prefetch_valid & ~stall_in_correct_timing; + + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) begin + pref_requested <= 'h0; + end + else begin + if (wr_addr_ahead_of_rd_addr & ~decr_pref_requsted & (pref_requested[PREFETCH_BITS-1:0]<PREFETCH_STAGES)) pref_requested <= pref_requested + 1'b1; + if (~wr_addr_ahead_of_rd_addr & decr_pref_requsted) pref_requested <= pref_requested - 1'b1; + if (~sclrn) pref_requested <= 'h0; + end + end + end + endgenerate + + + + //////////////////////////////// + // // + // Prefetch receive control // + // // + //////////////////////////////// + + // It takes time from when we request read data from the M20K until it arrives, so we need a separate counter instead of + // pref_requested to know where to slot in the data into the prefetch. The signal pref_received tracks this: it increases + // when read data arrives from the M20K, it decreases when data is read from the fifo, no change to value if both or + // neither event occurs. If EARLY_STALL > 0, pref_received is retimed earlier since we know ahead of time when data + // will exit the prefetch. In this case pref_received changes *BEFORE* data gets loaded into the prefetch due to the retiming + // so we need to keep this data alive until the read data is actually ready to be loaded (pref_insertion tracks this). + // The same retiming trick as prefetch_full is done to prefetch_valid, which is functionally equiavalent to using + // combinational to check if pref_received != 0. + + // TODO: knowing stall_in N clocks ahead of time then we also know valid_out N clocks ahead of time. Currently we don't + // expose this outside of the fifo, but we could... + + generate + if (EARLY_STALL <= 2) begin : pref_rec + if (EARLY_STALL == 0) begin : pref_rec0 + assign pref_loading = m20k_hardened_rddata_valid; + assign prefetch_valid = prefetch_valid_pre; + end + if (EARLY_STALL == 1) begin : pref_rec1 + assign pref_loading = m20k_hardened_rdaddr_valid; + assign prefetch_valid = prefetch_valid_pre; + end + if (EARLY_STALL == 2) begin : pref_rec2 + assign pref_loading = feed_prefetch; + assign prefetch_valid = pref_received[0]; + end + //EARLY_STALL == 3 does not use prefetch_valid + + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) begin + pref_received <= 'h0; + prefetch_valid_pre <= 1'b0; + end + else begin + if (pref_loading & ((pref_received[PREFETCH_BITS-1:0]=='0) | stall_in_correct_timing)) pref_received <= pref_received + 1'b1; + if (~pref_loading & (pref_received[PREFETCH_BITS-1:0]!='0) & ~stall_in_correct_timing) pref_received <= pref_received - 1'b1; + prefetch_valid_pre <= pref_loading | ~(pref_received==2'h0 | (pref_received==2'h1 & ~stall_in_correct_timing)); + if (~sclrn_pref_received) begin + pref_received <= 'h0; + prefetch_valid_pre <= 1'b0; + end + end + end + end + endgenerate + + + + ////////////////////////// + // // + // Prefetch data path // + // // + ////////////////////////// + + // If EARLY_STALL > 0 then pref_received changes before data arrives at the prefetch. To know where in the + // prefetch to load data arriving from M20K, we keep pref_received live for longer and call it pref_insertion_{hi,lo}. + + // Sizing of the prefetch: if EARLY_STALL = 0 we only have 3 prefetch stages even through there are 4 signals + // -- if output data is registered, it depends on m20k_rddata, data1, or data2, + // -- if output data is unregistered, it depends on data1, data2, or data3. + // Different bits of the data path may use different settings, but in all cases there are still 3 registers per output bit. + // If EARLY_STALL == 0, do not register too many bits of output data since data_out_clock_en is combinational + // logic and high fan-out will lower fmax. + + always_ff @(posedge clock or negedge aclrn) begin //not all of this will get used, let quartus trim it away + if (~aclrn) begin + data1_clock_en <= 1'b0; + data2_clock_en <= 1'b0; + data3_clock_en <= 1'b0; + data1 <= (RESET_EVERYTHING) ? '0 : 'x; + data2 <= (RESET_EVERYTHING) ? '0 : 'x; + data3 <= (RESET_EVERYTHING) ? '0 : 'x; + end + else begin + data1_clock_en <= m20k_hardened_rdaddr_valid; //copies of m20k_hardened_rddata_valid to reduce fan-out + data2_clock_en <= m20k_hardened_rdaddr_valid; + data3_clock_en <= m20k_hardened_rdaddr_valid; + if (data1_clock_en) data1 <= m20k_rddata; + if (data2_clock_en) data2 <= data1; + if (data3_clock_en) data3 <= data2; + if (~sclrn_reset_everything) begin + data1_clock_en <= 1'b0; + data2_clock_en <= 1'b0; + data3_clock_en <= 1'b0; + data1 <= '0; + data2 <= '0; + data3 <= '0; + end + end + end + + //clock enable is combinational logic if there is no earliness for stall_in, otherwise it is registered + assign data_out_clock_en_comb = (!HOLD_DATA_OUT_WHEN_EMPTY) ? (~prefetch_valid | ~stall_in_correct_timing) : ((~prefetch_valid & pref_loading) | (~stall_in_correct_timing & (pref_loading | pref_received>=2'h2))); + + generate + if (EARLY_STALL == 0) begin : gen_pref3 //base case + assign {pref_insertion_hi, pref_insertion_lo} = pref_received; //if PREFETCH_BITS==1, the pref_received extends to {1'b0,pref_received[0]} + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) begin + data_out_reg <= (RESET_EVERYTHING) ? '0 : 'x; + end + else begin + if (data_out_clock_en_comb) data_out_reg <= (~pref_insertion_hi) ? m20k_rddata : (~pref_insertion_lo) ? data1 : data2; + if (~sclrn_reset_everything) data_out_reg <= '0; + end + end + assign data_out_unreg = (~pref_insertion_hi) ? data1 : (~pref_insertion_lo) ? data2 : data3; + end + if (EARLY_STALL == 1) begin : gen_pref2 //area -1 -> 3:1 mux above reduces to 2:1 + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) begin + data_out_clock_en_reg <= 1'b0; + pref_insertion_hi <= 1'b0; + end + else begin + data_out_clock_en_reg <= data_out_clock_en_comb; + pref_insertion_hi <= (pref_received >= 2'h2); //same as pref_received[1], but need to have pref_insertion_hi = 0 when PREFETCH_BITS==1 + if (~sclrn_reset_everything) begin + data_out_clock_en_reg <= 1'b0; + pref_insertion_hi <= 1'b0; + end + end + end + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) begin + data_out_reg <= (RESET_EVERYTHING) ? '0 : 'x; + end + else begin + if (data_out_clock_en_reg) data_out_reg <= (~pref_insertion_hi) ? m20k_rddata : data1; + if (~sclrn_reset_everything) data_out_reg <= '0; + end + end + assign data_out_unreg = (~pref_insertion_hi) ? data1 : data2; + end + if (EARLY_STALL == 2) begin : gen_pref1 //area -2 -> mux completely collapses + assign data_out_unreg = data1; + assign data_out_reg = data1; + end + if (EARLY_STALL == 3) begin : gen_pref0 //area -3 -> prefetch completely disappears + assign data_out_unreg = m20k_rddata; + assign data_out_reg = m20k_rddata; + end + + //select whether to use registered or unregistered data_out + if (REGISTERED_DATA_OUT_COUNT == 0) begin : gen_unregistered_data_out + assign data_out = data_out_unreg; + end + else if (REGISTERED_DATA_OUT_COUNT == WIDTH) begin : gen_registered_data_out + assign data_out = data_out_reg; + end + else begin : gen_mixed_reg_data_out + assign data_out = {data_out_unreg[WIDTH-1:REGISTERED_DATA_OUT_COUNT], data_out_reg[REGISTERED_DATA_OUT_COUNT-1:0]}; + end + endgenerate + + + + ////////////////////////////////////// + // // + // Read valid retiming resolution // + // // + ////////////////////////////////////// + + // The fifo is empty if the prefetch is empty, but prefetch_valid is retimed earlier if EARLY_STALL > 0 + + assign forced_read_out = read_from_fifo; + generate + if (EARLY_STALL == 0) begin : valid_out0 + assign valid_out = prefetch_valid; + assign read_from_fifo = prefetch_valid & ~stall_in_correct_timing; + assign try_read_from_fifo = ~stall_in_correct_timing; + end + if (EARLY_STALL == 1) begin : valid_out1 + assign read_from_fifo_early = prefetch_valid & ~stall_in_correct_timing; + assign try_read_from_fifo_early = ~stall_in_correct_timing; + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) begin + valid_out <= 1'b0; + read_from_fifo <= 1'b0; + end + else begin + valid_out <= prefetch_valid; + read_from_fifo <= read_from_fifo_early; + if (~sclrn) valid_out <= 1'b0; + if (~sclrn_reset_everything) read_from_fifo <= 1'b0; + end + end + assign try_read_from_fifo = read_from_fifo; + end + if (EARLY_STALL == 2) begin : valid_out2 + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) begin + valid_out_early <= 1'b0; + valid_out <= 1'b0; + read_from_fifo_early <= 1'b0; + read_from_fifo <= 1'b0; + end + else begin + valid_out_early <= prefetch_valid; + valid_out <= valid_out_early; + read_from_fifo_early <= prefetch_valid & ~stall_in_correct_timing; + read_from_fifo <= read_from_fifo_early; + if (~sclrn) valid_out <= 1'b0; + if (~sclrn_reset_everything) begin + valid_out_early <= 1'b0; + read_from_fifo_early <= 1'b0; + read_from_fifo <= 1'b0; + end + end + end + assign try_read_from_fifo = read_from_fifo; + assign try_read_from_fifo_early = read_from_fifo_early; + end + if (EARLY_STALL == 3) begin : valid_out3 + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) begin + valid_out_early_by_two <= 1'b0; + valid_out_early <= 1'b0; + valid_out <= 1'b0; + read_from_fifo_early_by_two <= 1'b0; + read_from_fifo_early <= 1'b0; + read_from_fifo <= 1'b0; + end + else begin + valid_out_early_by_two <= wr_addr_ahead_of_rd_addr; + valid_out_early <= valid_out_early_by_two; + valid_out <= valid_out_early; + read_from_fifo_early_by_two <= wr_addr_ahead_of_rd_addr & ~stall_in_correct_timing; + read_from_fifo_early <= read_from_fifo_early_by_two; + read_from_fifo <= read_from_fifo_early; + if (~sclrn) valid_out <= 1'b0; + if (~sclrn_reset_everything) begin + valid_out_early_by_two <= 1'b0; + valid_out_early <= 1'b0; + read_from_fifo_early_by_two <= 1'b0; + read_from_fifo_early <= 1'b0; + read_from_fifo <= 1'b0; + end + end + end + assign try_read_from_fifo = read_from_fifo; + assign try_read_from_fifo_early = read_from_fifo_early; + end + endgenerate + + + + ///////////////// + // // + // Fifo full // + // // + ///////////////// + + // Let us track whether incrementing and decrementing has caused a threshold to be reached. Generally an increment + // is composed of two parts: 1. we want to increment (valid_in), and 2. we are allowed to increment (~stall_out). + // The same two part composition applies to decrement. + // + // Suppose we are trying to detect a threshold of N. We reach the threshold when the occupancy is N-1 and we are + // increasing, and we have no longer reached the threshold when the occupancy is N and we are decreasing. + // The occupancy has to be tracked using the guarded increment and decrement (incr_no_overflow and decr_no_underflow), + // but the increasing or decreasing used to change the state of threshold_reached does not need to be guarded if + // the threshold N is far away from overflow or underflow. + // + // This fifo has a 5 clock latency from write to read, so it is possible that write_used_words can be at fifo capacity + // (fifo is full) while stall_in is off (downstream wants to read) and valid_out is off (no data to provide to downstream). + // For a threshold of 5 or lower, we are not sufficiently far from underflow to use an unguarded decrement. + // + // Likewise if the initial occupancy is close to the threshold, unguarded increment and decrement can cause similar problems. + // However in the case of stall_out, valid_in=1 during reset will simply be masked by reset. Once stall_out deasserts, we + // have to guard against decr_raw until valid_out asserts from initial occupancy, there is a gap of 4 clocks here (write to + // read latency minus 1). If the initial occupancy is within 4 of the capacity (DEPTH), we must use decr_no_underflow instead. + + + + generate + if (NEVER_OVERFLOWS) begin : gen_reset_stall_out //no overflow protection, but upstream still needs a way to know when fifo has exited from reset + assign stall_out = fifo_in_reset; + assign stall_out_overflow = fifo_in_reset; + end + else begin : gen_real_stall_out + if (WRITE_AND_READ_DURING_FULL && (EARLY_STALL >= 1)) begin //decrement 1 clock before the read happens, this makes space for the write during full + assign stall_out_decr_no_underflow = read_from_fifo_early; + assign stall_out_decr_raw = (DEPTH<=5 || (DEPTH-INITIAL_OCCUPANCY)<=4) ? read_from_fifo_early : try_read_from_fifo_early; + end + else begin + assign stall_out_decr_no_underflow = read_from_fifo; + assign stall_out_decr_raw = (DEPTH<=5 || (DEPTH-INITIAL_OCCUPANCY)<=4) ? read_from_fifo : try_read_from_fifo; + end + + dla_acl_tessellated_incr_decr_threshold #( + .CAPACITY (DEPTH), + .THRESHOLD (DEPTH), + .INITIAL_OCCUPANCY (INITIAL_OCCUPANCY), + .WRITE_AND_READ_DURING_FULL ((WRITE_AND_READ_DURING_FULL && (EARLY_STALL == 0)) ? 1 : 0), + .THRESHOLD_REACHED_AT_RESET (1), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0), + .RESET_EVERYTHING (RESET_EVERYTHING), + .RESET_EXTERNALLY_HELD (1) + ) + stall_out_inst + ( + .clock (clock), + .resetn (resetn_full), + .incr_no_overflow (valid_in_correct_timing & ~stall_out_overflow), + .incr_raw (valid_in_correct_timing), + .decr_no_underflow (stall_out_decr_no_underflow), + .decr_raw (stall_out_decr_raw), + .threshold_reached (stall_out_raw) + ); + + //if we cannot decrement 1 clock before the read happens, the only way to deassert stall_out is to check if we are reading on the same clock cycle + assign stall_out = stall_out_raw & ((WRITE_AND_READ_DURING_FULL && (EARLY_STALL == 0)) ? ~read_from_fifo : 1'b1); + assign stall_out_overflow = stall_out; + end + endgenerate + + + + /////////////////// + // // + // Almost full // + // // + /////////////////// + + generate + if (ALMOST_FULL_CUTOFF == 0 && NEVER_OVERFLOWS == 0 && WRITE_AND_READ_DURING_FULL == 0) begin : full_almost_full + assign almost_full = stall_out; + end + else begin : real_almost_full + localparam int ALMOST_FULL_INIT_OCC_DIFF = ((DEPTH-ALMOST_FULL_CUTOFF) > INITIAL_OCCUPANCY) ? (DEPTH-ALMOST_FULL_CUTOFF-INITIAL_OCCUPANCY) : INITIAL_OCCUPANCY-(DEPTH-ALMOST_FULL_CUTOFF); + dla_acl_tessellated_incr_decr_threshold #( + .CAPACITY (DEPTH), + .THRESHOLD (DEPTH - ALMOST_FULL_CUTOFF), + .INITIAL_OCCUPANCY (INITIAL_OCCUPANCY), + .WRITE_AND_READ_DURING_FULL (WRITE_AND_READ_DURING_FULL), + .THRESHOLD_REACHED_AT_RESET (1), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0), + .RESET_EVERYTHING (RESET_EVERYTHING), + .RESET_EXTERNALLY_HELD (1) + ) + almost_full_inst + ( + .clock (clock), + .resetn (resetn_almost_full), + .incr_no_overflow (valid_in_correct_timing & ~stall_out_overflow), + .incr_raw (valid_in_correct_timing), + .decr_no_underflow (read_from_fifo), + .decr_raw (((DEPTH-ALMOST_FULL_CUTOFF)<=5 || ALMOST_FULL_INIT_OCC_DIFF<=4) ? read_from_fifo : try_read_from_fifo), //same protection as for stall_out + .threshold_reached (almost_full) + ); + end + endgenerate + + + + //////////////////// + // // + // Almost empty // + // // + //////////////////// + + generate + if (ALMOST_EMPTY_CUTOFF == 0) begin : empty_almost_empty + assign almost_empty = ~valid_out; + end + else begin : real_almost_empty + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) m20k_wren_delayed <= 3'h0; + else begin + m20k_wren_delayed <= {m20k_wren_delayed[1:0], m20k_wren_for_others}; + if (~sclrn_reset_everything) m20k_wren_delayed <= 3'h0; + end + end + + dla_acl_tessellated_incr_decr_threshold #( + .CAPACITY (DEPTH), + .THRESHOLD (ALMOST_EMPTY_CUTOFF + 1), + .INITIAL_OCCUPANCY (INITIAL_OCCUPANCY), + .WRITE_AND_READ_DURING_FULL (0), + .THRESHOLD_REACHED_AT_RESET (0), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0), + .RESET_EVERYTHING (RESET_EVERYTHING), + .RESET_EXTERNALLY_HELD (1) + ) + almost_empty_inst + ( + .clock (clock), + .resetn (resetn_almost_empty), + .incr_no_overflow (m20k_wren_delayed[2]), + .incr_raw (m20k_wren_delayed[2]), + .decr_no_underflow (read_from_fifo), + .decr_raw (try_read_from_fifo), + .threshold_reached (not_almost_empty) + ); + + assign almost_empty = ~not_almost_empty; + end + endgenerate + +endmodule +//end dla_acl_high_speed_fifo + + + + + + + + + + + + + + +module scfifo_to_acl_high_speed_fifo #( + //parameters from scfifo that you CAN set + parameter lpm_width, //YOU MUST SET THIS, data width + parameter lpm_numwords, //YOU MUST SET THIS, unlike scfifo, this doesn't need to be a power of 2 + parameter almost_empty_value = 1, //almost_empty asserts if usedw < almost_empty_value + parameter almost_full_value = 0, //almost_full asserts if usedw >= almost_full_value + parameter add_ram_output_register = "OFF", //"ON" | "OFF" whether to register the output data, default of scfifo is unreg + parameter lpm_showahead = "ON", //"ON" | "OFF", on is how the fifo natively works, off requires an adapter which has an area penalty and potentially a fmax penalty + parameter ram_block_type = "AUTO", //"MLAB" | "M20K" | "AUTO" -> ram_block_type parameter of altera_syncram + parameter overflow_checking = "ON", //"ON" | "OFF" whether the fifo internally guards against writing when full + + //parameters from scfifo that you CANNOT set, i.e. we ignore these + //default values are set so that when you instantiate this, you don't have to override them + parameter lpm_widthu = $clog2(lpm_width), //width of usedw, we just look at lpm_numwords + parameter lpm_type = "scfifo", + parameter underflow_checking = "ON", //it is okay if you had set this to off, that just means you are already guarding against rdreq when empty + parameter use_eab = "ON", //off means use logic elements only instead of ram + parameter intended_device_family = "Stratix 10", + + //parameters that don't exist in scfifo but are exposed to introduce new functionality + parameter INITIAL_OCCUPANCY = 0, //number of words in the fifo (write side occupancy) when it comes out of reset, note it still takes 5 clocks for this to become visible on the read side + parameter WRITE_AND_READ_DURING_FULL = 0, //set to 1 to allow writing and reading while the fifo is full, set to 1 to get normal scfifo behavior of ignoring wrreq when full + parameter REGISTERED_DATA_OUT_COUNT = (add_ram_output_register=="ON") ? lpm_width : 0, //ideally one registers the output bits used in control logic, unregister everything else, this reduces high-fan out of stall_in + parameter HOLD_DATA_OUT_WHEN_EMPTY = 0, //scfifo holds last value when empty, high speed fifo may show x when empty but can be made to behave like scfifo (set parameter to 1, this has an fmax penalty) + parameter STALL_IN_EARLINESS = 0, + parameter ASYNC_RESET = 1, //how do we use reset: 1 means registers are reset asynchronously, 0 means registers are reset synchronously + parameter SYNCHRONIZE_RESET = 0, //based on how reset gets to us, what do we need to do: 1 means synchronize reset before consumption (if reset arrives asynchronously), 0 means passthrough (managed externally) + parameter RESET_EVERYTHING = 0, //intended for partial reconfig debug, set to 1 to reset every register (normally async reset excludes data path and sync reset additionally excludes some control signals) + parameter RESET_EXTERNALLY_HELD = 0, //set to 1 if resetn will be held for at least FIVE clock cycles, otherwise we will internally pulse stretch reset before consumption + parameter enable_ecc = "FALSE" // Enable error correction coding +) ( + input wire clock, + input wire aclr, //IMPORTANT: this is IGNORED if ASYNC_RESET = 0 + input wire sclr, //IMPORTANT: this is IGNORED unless you override ASYNC_RESET to 0 at instantiation + input wire [lpm_width-1:0] data, + output logic [lpm_width-1:0] q, + input wire wrreq, + output logic empty, + input wire rdreq, + output logic full, + output logic almost_empty, + output logic almost_full, + output logic [lpm_widthu-1:0] usedw, //WARNING: this signal is NOT connected + output logic [1:0] ecc_err_status // ecc status signals +); + + logic internal_resetn, internal_aclrn, internal_sclrn; + logic valid_out, stall_in; + logic [lpm_width-1:0] q_reg, q_unreg, data_out, data_out_prev, data_out_late; + logic data_out_clock_en; + assign empty = ~valid_out; + assign stall_in = ~rdreq; + assign usedw = 'x; + + generate + if (ASYNC_RESET) begin + assign internal_resetn = ~aclr; + assign internal_aclrn = ~aclr; + assign internal_sclrn = 1'b1; + end + else begin + assign internal_resetn = ~sclr; + assign internal_aclrn = 1'b1; + assign internal_sclrn = ~sclr; + end + endgenerate + + dla_acl_high_speed_fifo + #( + //basic fifo configuration + .WIDTH (lpm_width), + .DEPTH (lpm_numwords), + .ALMOST_EMPTY_CUTOFF (almost_empty_value - 1), + .ALMOST_FULL_CUTOFF (lpm_numwords - almost_full_value), + .INITIAL_OCCUPANCY (INITIAL_OCCUPANCY), + .NEVER_OVERFLOWS ((overflow_checking=="OFF") ? 1 : 0), + .WRITE_AND_READ_DURING_FULL (WRITE_AND_READ_DURING_FULL), + + //reset configuration + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (SYNCHRONIZE_RESET), + .RESET_EVERYTHING (RESET_EVERYTHING), + .RESET_EXTERNALLY_HELD (RESET_EXTERNALLY_HELD), + + //special configurations for higher fmax / lower area + .STALL_IN_EARLINESS (STALL_IN_EARLINESS), + .REGISTERED_DATA_OUT_COUNT (REGISTERED_DATA_OUT_COUNT), + + //conformance with scfifo + .HOLD_DATA_OUT_WHEN_EMPTY (HOLD_DATA_OUT_WHEN_EMPTY), + + //ram settings + .RAM_BLOCK_TYPE (ram_block_type), + .enable_ecc (enable_ecc) + ) + dla_acl_high_speed_fifo_inst + ( + .clock (clock), + .resetn (internal_resetn), + .data_in (data), + .data_out (data_out), + .valid_in (wrreq), + .valid_out (valid_out), + .stall_in (stall_in), + .stall_out (full), + .almost_empty (almost_empty), + .almost_full (almost_full), + .forced_read_out (), + .ecc_err_status (ecc_err_status) + ); + + //adapter for converting from showahead on (native fifo) to showahead off (for usage of instances of scfifo with this) + genvar g; + generate + if (lpm_showahead == "OFF") begin + always_ff @(posedge clock or negedge internal_aclrn) begin + if (~internal_aclrn) begin + data_out_clock_en <= 1'b0; + q_reg <= '0; //normally data path should not need to be reset, this is to conform with scfifo behavior that before the first write, the read data is 0 + data_out_prev <= '0; + data_out_late <= '0; + end + else begin + data_out_clock_en <= valid_out & rdreq; //register first to reduce high fan-out severity + if (valid_out & rdreq) q_reg <= data_out; + data_out_prev <= data_out; + if (data_out_clock_en) data_out_late <= data_out_prev; //this loads one clock cycle late + if (~internal_sclrn) begin + data_out_clock_en <= 1'b0; + q_reg <= '0; + data_out_prev <= '0; + data_out_late <= '0; + end + end + end + assign q_unreg = (data_out_clock_en) ? data_out_prev : data_out_late; //resolve what was supposed to load after the fact + + //select whether to use registered or unregistered q + if (REGISTERED_DATA_OUT_COUNT == 0) begin : gen_registered_q + assign q = q_unreg; + end + else if (REGISTERED_DATA_OUT_COUNT == lpm_width) begin : gen_unregistered_q + assign q = q_reg; + end + else begin : gen_mixed_reg_q + assign q = {q_unreg[lpm_width-1:REGISTERED_DATA_OUT_COUNT], q_reg[REGISTERED_DATA_OUT_COUNT-1:0]}; + end + end + else begin //lpm_showahead == "ON" + assign q = data_out; + end + endgenerate + +endmodule +//end scfifo_to_acl_high_speed_fifo + +`default_nettype wire diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_latency_one_ram_fifo.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_latency_one_ram_fifo.sv new file mode 100644 index 0000000..b59c76d --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_latency_one_ram_fifo.sv @@ -0,0 +1,1196 @@ +// Copyright 2020 Intel Corporation.
+//
+// This software and the related documents are Intel copyrighted materials,
+// and your use of them is governed by the express license under which they
+// were provided to you ("License"). Unless the License provides otherwise,
+// you may not use, modify, copy, publish, distribute, disclose or transmit
+// this software or the related documents without Intel's prior written
+// permission.
+//
+// This software and the related documents are provided as is, with no express
+// or implied warranties, other than those that are expressly stated in the
+// License.
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// //
+// ACL LATENCY ONE RAM FIFO //
+// Designed and optimized by: Jason Thong //
+// //
+// DESCRIPTION //
+// =========== //
+// This fifo has a write to read latency of 1. Low latency fifos are often implemented with registers as storage, but this uses lots of logic as the fifo capacity increases. When the fifo latency is lower //
+// than the read latency from embedded memory, one must add bypass logic so that newly written into the fifo can appear at the output before it is readable from the memory. That is what this fifo does. //
+// //
+// REQUIRED FILES //
+// ============== //
+// - dla_acl_latency_one_ram_fifo.sv //
+// - dla_acl_lfsr.sv //
+// - dla_acl_tessellated_incr_decr_threshold.sv //
+// - dla_acl_reset_handler.sv //
+// //
+// RELATIONSHIP TO DLA_ACL_MID_SPEED_FIFO //
+// ================================== //
+// This fifo is largely derived from dla_acl_mid_speed_fifo including all its caveats of having different implementations for M20K vs MLAB. Conceptually, dla_acl_mid_speed_fifo can be thought of as having ram storage with //
+// unregistered read data from the memory and 1 prefetch stage on the read side. In the implementation that prefetch stage is pushed inside the ram. To reduce the write to read latency from 3 to 2, all that is needed //
+// is "new data mode" for mixed port reading during write. In other words, if the write address and the read address are the same, the read data should be the newly written data. This can be implemented with external //
+// logic that forwards the newly written data to the output. To then reduce the write to read latency to 1, the fifo output must capture newly written data when the fifo is empty. The structure looks like this: //
+// //
+// ^ //
+// +--------------+ |\ //
+// +----+ data_in_prev +------------+ \ //
+// | +--------------+ | \ //
+// | | \ //
+// +--------------------------------+ | //
+// | | | +----------+ //
+// data_in ---+ +--------------------+ | +------+ data_out +------- //
+// | | M20K or MLAB | | | +----------+ //
+// | | | | | //
+// +----+- write_data | | / //
+// | | | / //
+// | read_data_unreg -+------+ / //
+// +--------------------+ |/ //
+// v //
+// //
+// The output from the M20K or MLAB is unregistered, and a 3:1 mux is needed before the data_out register. To improve fmax, we need to register the output of the M20K or MLAB, which will result in unregistered //
+// data_out. For M20K, registered read data means that register can be packed inside the M20K itself so it no longer consumes ALM registers, which results in an area savings. //
+// //
+// ^ //
+// +--------------+ |\ //
+// +----+ data_in_prev +----+ \ ^ //
+// | +--------------+ | | +-------------+ |\ //
+// | | +----+ data_in_mux +-----+ \ //
+// +------------------------+ / +-------------+ | \ //
+// | |/ | \ //
+// | v | | //
+// | | | //
+// data_in ---+ +--------------------+ | +------- data_out (unregistered) //
+// | | M20K or MLAB | | | //
+// | | | | | //
+// +----+- write_data | | / //
+// | | | / //
+// | read_data_reg -+--------------------------+ / //
+// +--------------------+ |/ //
+// v //
+// //
+// REGISTERED_DATA_OUT_COUNT //
+// ========================= //
+// We support the ability to have some data_out bit registers while others are unergistered. The fifo favors unregistered data_out, however if there are a few bits of data_out that feed some timing critical control //
+// path, then one can register just those bits. If we need registered data_out (which requires unregistered data from the M20K or MLAB), the fmax penalty is less severe if we only need it for a few bits rather than //
+// all bits of data_out. However there is a quantization problem: for a given physical M20K or MLAB, we either have to register all output data or unregister all of them. Our implementation will not increase RAM //
+// usage due to this, what actually happens is REGISTERED_DATA_OUT_COUNT specifies the minimum number of bits in data_out that are registered. //
+// //
+// Here are some examples to illustrate what will happen. Supposed we are using MLAB with a physical width of 20. //
+// //
+// Example 1: DATA_WIDTH = 32, REGISTERED_DATA_OUT_COUNT = 4 //
+// Based on DATA_WIDTH we need 2 physical MLABs. Based on REGISTERED_DATA_OUT_COUNT we need 1 physical MLAB that results in registered data_out (output of fifo, not MLAB). Therefore the remaining 1 MLAB can produce //
+// unregistered data_out, and we want to maximize uasge of this. The final configuration will be 12 bits of regsitered data_out (>= 4 that the user asked for) and 20 bits of unregistered data_out. To get exactly 4 //
+// bits of registered data_out would have required 3 physical MLABs and we do not implement this. //
+// //
+// Example 3: DATA_WIDTH = 64, REGISTERED_DATA_OUT_COUNT = 8 //
+// Based on DATA_WIDTH we need 4 physical MLABs. Based on REGISTERED_DATA_OUT_COUNT we need 1 physical MLAB that results in registered data_out. Therefore the 3 remaining MLABs can produce unregistered data_out, //
+// and this is enough MLABs to produce 56 bits of unregistered data_out. In this case the user will get exactly the requested 8 bits of registered data_out. //
+// //
+// STALL_IN_EARLINESS AND VALID_IN_EARLINESS //
+// ========================================= //
+// Similar to dla_acl_low_latency_fifo, there are only two modes of earliness: none, or stall_in and valid_in both 1 clock early. For a latency one fifo, write_used_words == read_used_words, so in order to retime internal //
+// occupancy tracking 1 clock earlier, we need both stall_in and valid_in to be early. This is intended for wide fifos in which we need more time to distribute control signals that fan-out to the entire data path. //
+// Like dla_acl_mid_speed_fifo, there is a very small area penalty for registering the most timing sensitive paths. For highest fmax, use STALL_IN_EARLINESS = 1, VALID_IN_EARLINESS = 1 and REGISTERED_DATA_OUT_COUNT = 0. //
+// //
+// RELATIONSHIP TO DLA_ACL_LOW_LATENCY_FIFO //
+// ==================================== //
+// Functionally, this fifo can be used interchangeably with dla_acl_low_latency_fifo. Both have a write to read latency of one clock cycle and have the same earliness optimizations. The main difference is the logic //
+// utilization. This fifo uses memory as storage whereas dla_acl_low_latency_fifo uses registers as storage. For shallow fifos, dla_acl_low_latency_fifo is better. As the capacity increases, eventually it is cheaper to store //
+// the data in memory instead. There is a simple heuristic in dla_hld_fifo which estimates which fifo will result in lower area. Note that dla_acl_low_latency_fifo has a much higher fmax, but typically most designs are not //
+// fast enough to be limited by the lower fmax of dla_acl_latency_one_ram_fifo. //
+// //
+// DLA_HLD_FIFO FEATURES //
+// ================= //
+// This fifo is fully feature complete against all of the parameters exposed by dla_hld_fifo. It follows the same reset scheme of asserting full and empty during reset. //
+// //
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+`default_nettype none
+`include "dla_acl_parameter_assert.svh"
+
+module dla_acl_latency_one_ram_fifo #(
+ //basic fifo configuration
+ parameter int WIDTH, // width of the data path through the fifo
+ parameter int DEPTH, // capacity of the fifo, at least 1
+
+ //occupancy
+ parameter int ALMOST_EMPTY_CUTOFF = 0, // almost_empty asserts if read_used_words <= ALMOST_EMPTY_CUTOFF, read_used_words increments when writes are visible on the read side, decrements when fifo is read
+ parameter int ALMOST_FULL_CUTOFF = 0, // almost_full asserts if write_used_words >= (DEPTH-ALMOST_FULL_CUTOFF), write_used_words increments when fifo is written to, decrements when fifo is read
+ parameter int INITIAL_OCCUPANCY = 0, // number of words in the fifo (write side occupancy) when it comes out of reset, note it still takes 5 clocks for this to become visible on the read side
+
+ //reset configuration
+ parameter bit ASYNC_RESET = 0, // how do we use reset: 1 means registers are reset asynchronously, 0 means registers are reset synchronously
+ parameter bit SYNCHRONIZE_RESET = 1, // based on how reset gets to us, what do we need to do: 1 means synchronize reset before consumption (if reset arrives asynchronously), 0 means passthrough (managed externally)
+ parameter bit RESET_EVERYTHING = 0, // intended for partial reconfig debug, set to 1 to reset every register (normally async reset excludes data path and sync reset additionally excludes some control signals)
+ parameter bit RESET_EXTERNALLY_HELD = 1, // set to 1 if resetn will be held for at least FOUR clock cycles, otherwise we will internally pulse stretch reset before consumption
+
+ //ram implementation
+ parameter string RAM_BLOCK_TYPE = "FIFO_TO_CHOOSE", // "MLAB" | "M20K" | "FIFO_TO_CHOOSE" -> different implementations for MLAB vs M20K, so cannot let quartus decide in case MLAB or M20K is not explicitly specified
+
+ //special configurations for higher fmax / low area
+ parameter int STALL_IN_EARLINESS = 0, // how many clock cycles early is stall_in provided, fifo supports up to 2, setting this any higher results in registers to absorb the excess earliness
+ parameter int VALID_IN_EARLINESS = 0, // how many clock cycles early is valid_in provided, fifo can take advantage of 1 clock or valid_in earliness if stall_in is also at least 2 clocks early
+ parameter int STALL_IN_OUTSIDE_REGS = 0, // number of registers on the stall-in path external to this module that will delay the propagation of x values on reset (e.g. in dla_hld_fifo)
+ parameter int VALID_IN_OUTSIDE_REGS = 0, // number of registers on the valid-in path external to this module that will delay the propagation of x values on reset (e.g. in dla_hld_fifo)
+ parameter int REGISTERED_DATA_OUT_COUNT = 0,// AT LEAST THIS MANY of the lower bits of data_out will be registered
+ parameter bit NEVER_OVERFLOWS = 0, // set to 1 to disable fifo's internal overflow protection, area savings by removing one incr/decr/thresh, stall_out still asserts during reset but won't mask valid_in
+
+ //special features that typically have an fmax penalty
+ parameter bit HOLD_DATA_OUT_WHEN_EMPTY = 0, // 0 means data_out can be x when fifo is empty, 1 means data_out will hold last value when fifo is empty (scfifo behavior, has fmax penalty)
+ parameter bit WRITE_AND_READ_DURING_FULL = 0,//set to 1 to allow writing and reading while the fifo is full, this may have an fmax penalty, to compensate it is recommended to use this with NEVER_OVERFLOWS = 1
+
+ //hidden parameters
+ parameter int ZLRAM_RESET_RELEASE_DELAY_OVERRIDE = -1, //DO NOT TOUCH, only dla_acl_latency_zero_ram_fifo should set this
+
+ //error correction code
+ parameter enable_ecc = "FALSE" // NOT IMPLEMENTED YET, see case:555783
+)
+(
+ input wire clock,
+ input wire resetn, // see description above for different reset modes
+
+ //write interface
+ input wire valid_in, // upstream advertises it has data, a write happens when valid_in & ~stall_out -- this needs to be early if VALID_IN_EARLINESS >= 1
+ input wire [WIDTH-1:0] data_in, // data from upstream
+ output logic stall_out, // inform upstream that we cannot accept data
+ output logic almost_full, // asserts if write_used_words >= (DEPTH-ALMOST_FULL_CUTOFF)
+
+ //read interface
+ output logic valid_out, // advertise to downstream that we have data
+ output logic [WIDTH-1:0] data_out, // data to downstream
+ input wire stall_in, // downstream indicates it cannot accept data -- this needs to be early if STALL_IN_EARLINESS >= 1
+ output logic almost_empty, // asserts if read_used_words <= ALMOST_EMPTY_CUTOFF
+ output logic forced_read_out,// indicates fifo is being read on current clock cycle, read data must be consumed or it will be lost, is a registered signal if STALL_IN_EARLINESS >= 1
+
+ //signals intended only for dla_acl_latency_zero_ram_fifo
+ output logic zlram_occ_gte_one_E,
+ output logic zlram_stall_out_E,
+
+ //other
+ output logic [1:0] ecc_err_status // NOT IMPLEMENTED YET, see case:555783
+);
+
+ //////////////////////////////////////
+ // //
+ // Sanity check on the parameters //
+ // //
+ //////////////////////////////////////
+
+ // do not allow arbitrarily large amounts of earliness, as this delays the exit from reset "safe state"
+ // the checks are done in Quartus pro and Modelsim, it is disabled in Quartus standard because it results in a syntax error (parser is based on an older systemverilog standard)
+ // the workaround is to use synthesis translate to hide this from Quartus standard, ALTERA_RESERVED_QHD is only defined in Quartus pro, and Modelsim ignores the synthesis comment
+ `ifdef ALTERA_RESERVED_QHD
+ `else
+ //synthesis translate_off
+ `endif
+
+ generate
+ `DLA_ACL_PARAMETER_ASSERT_MESSAGE(DEPTH >= 1, $sformatf("dla_acl_latency_one_ram_fifo: illegal value of DEPTH = %d, minimum allowed is 1\n", DEPTH))
+ `DLA_ACL_PARAMETER_ASSERT_MESSAGE(ALMOST_EMPTY_CUTOFF >= 0 && ALMOST_EMPTY_CUTOFF <= DEPTH, $sformatf("dla_acl_latency_one_ram_fifo: illegal value of ALMOST_EMPTY_CUTOFF = %d, minimum allowed is 0, maximum allowed is DEPTH = %d\n", ALMOST_EMPTY_CUTOFF, DEPTH))
+ `DLA_ACL_PARAMETER_ASSERT_MESSAGE(ALMOST_FULL_CUTOFF >= 0 && ALMOST_FULL_CUTOFF <= DEPTH, $sformatf("dla_acl_latency_one_ram_fifo: illegal value of ALMOST_FULL_CUTOFF = %d, minimum allowed is 0, maximum allowed is DEPTH = %d\n", ALMOST_FULL_CUTOFF, DEPTH))
+ `DLA_ACL_PARAMETER_ASSERT_MESSAGE(INITIAL_OCCUPANCY >= 0 && INITIAL_OCCUPANCY <= DEPTH, $sformatf("dla_acl_latency_one_ram_fifo: illegal value of INITIAL_OCCUPANCY = %d, minimum allowed is 0, maximum allowed is DEPTH = %d\n", INITIAL_OCCUPANCY, DEPTH))
+ `DLA_ACL_PARAMETER_ASSERT_MESSAGE(REGISTERED_DATA_OUT_COUNT >= 0 && REGISTERED_DATA_OUT_COUNT <= WIDTH, $sformatf("dla_acl_latency_one_ram_fifo: illegal value of REGISTERED_DATA_OUT_COUNT = %d, minimum allowed is 0, maximum allowed is WIDTH = %d\n", REGISTERED_DATA_OUT_COUNT, WIDTH))
+ `DLA_ACL_PARAMETER_ASSERT_MESSAGE(STALL_IN_EARLINESS >= 0 && STALL_IN_EARLINESS <= 10, $sformatf("dla_acl_latency_one_ram_fifo: illegal value of STALL_IN_EARLINESS = %d, minimum allowed is 0, maximum allowed is 10\n", STALL_IN_EARLINESS))
+ `DLA_ACL_PARAMETER_ASSERT_MESSAGE(VALID_IN_EARLINESS >= 0 && VALID_IN_EARLINESS <= 10, $sformatf("dla_acl_latency_one_ram_fifo: illegal value of VALID_IN_EARLINESS = %d, minimum allowed is 0, maximum allowed is 10\n", VALID_IN_EARLINESS))
+ `DLA_ACL_PARAMETER_ASSERT_MESSAGE(VALID_IN_OUTSIDE_REGS >= 0 && VALID_IN_OUTSIDE_REGS <= 1, $sformatf("dla_acl_high_speed_fifo: illegal value of VALID_IN_OUTSIDE_REGS = %d, minimum allowed is 0, maximum allowed is 1\n", VALID_IN_OUTSIDE_REGS))
+ `DLA_ACL_PARAMETER_ASSERT_MESSAGE(STALL_IN_OUTSIDE_REGS >= 0 && STALL_IN_OUTSIDE_REGS <= 1, $sformatf("dla_acl_high_speed_fifo: illegal value of STALL_IN_OUTSIDE_REGS = %d, minimum allowed is 0, maximum allowed is 1\n", STALL_IN_OUTSIDE_REGS))
+ endgenerate
+
+ `ifdef ALTERA_RESERVED_QHD
+ `else
+ //synthesis translate_on
+ `endif
+
+
+
+ //////////////////////////
+ // //
+ // Parameter settings //
+ // //
+ //////////////////////////
+
+ // fifo configuration
+ localparam int ADDR_RAW = $clog2(DEPTH);
+ localparam int ADDR = (ADDR_RAW < 2) ? 2 : ADDR_RAW; // minimum size of lfsr
+ localparam bit USE_MLAB = (RAM_BLOCK_TYPE == "MLAB") ? 1 : (RAM_BLOCK_TYPE == "M20K") ? 0 : (ADDR <= 5) ? 1 : 0; //0 = mlab, 1 = m20k
+
+ // ram configuration
+ localparam int PHYSICAL_MLAB_WIDTH = 20;
+ localparam int PHYSICAL_M20K_WIDTH = (DEPTH <= 512) ? 40 : (DEPTH <= 1024) ? 20 : 10; //this is accurate for s10 but conservative for a10
+ localparam int PHYSICAL_RAM_WIDTH = (USE_MLAB) ? PHYSICAL_MLAB_WIDTH : PHYSICAL_M20K_WIDTH;
+ localparam int LEFTOVER_UNREG = (WIDTH - REGISTERED_DATA_OUT_COUNT) % PHYSICAL_RAM_WIDTH; //once we pack all the unregistered data_out bits into full-width physical rams, how many bits are leftover?
+ localparam int LEFTOVER_REG = REGISTERED_DATA_OUT_COUNT % PHYSICAL_RAM_WIDTH; //likewise for registered data_out bits
+ localparam int ADD_TO_REG_DATA_OUT = ((LEFTOVER_UNREG + LEFTOVER_REG) <= PHYSICAL_RAM_WIDTH) ? LEFTOVER_UNREG : 0; //if all the leftovers fit within one full-width physical ram, pack them together
+ localparam int REG_DATA_OUT_COUNT = REGISTERED_DATA_OUT_COUNT + ADD_TO_REG_DATA_OUT; //total number of data_out bits that will be registered
+ localparam int UNREG_DATA_OUT_COUNT = WIDTH - REG_DATA_OUT_COUNT; //total number of data_out bits that will be unregistered
+
+ // earliness configuration
+ localparam int EARLY_MODE = (STALL_IN_EARLINESS >= 1 && VALID_IN_EARLINESS >= 1) ? 1 : 0;
+ localparam int EARLY_VALID = EARLY_MODE;
+ localparam int EXCESS_EARLY_VALID = VALID_IN_EARLINESS - EARLY_VALID;
+ localparam int EARLY_STALL = EARLY_MODE;
+ localparam int EXCESS_EARLY_STALL = STALL_IN_EARLINESS - EARLY_STALL;
+
+ // reset timing
+ localparam int EXCESS_EARLY_STALL_WITH_EXT = EXCESS_EARLY_STALL + STALL_IN_OUTSIDE_REGS; //early stall is affected by regs outside this module; account for effect on reset timing
+ localparam int EXCESS_EARLY_VALID_WITH_EXT = EXCESS_EARLY_VALID + VALID_IN_OUTSIDE_REGS; //early valid is affected by regs outisde this module; account for effect on reset timing
+ localparam int FLUSH_EARLY_PIPES = (EXCESS_EARLY_STALL_WITH_EXT > EXCESS_EARLY_VALID_WITH_EXT) ? EXCESS_EARLY_STALL_WITH_EXT : EXCESS_EARLY_VALID_WITH_EXT; // clocks needs to flush excess earliness pipelines
+ localparam int RESET_SYNC_DEPTH = (SYNCHRONIZE_RESET) ? 3 : 0; // how many registers are added inside dla_acl_reset_handler for synchronizing the reset
+ localparam int RESET_PIPE_DEPTH = 2; // how many pipeline stages we add to sclrn
+ localparam int RESET_LATENCY = (ASYNC_RESET || RESET_EVERYTHING) ? 0 : (RESET_SYNC_DEPTH + RESET_PIPE_DEPTH); // how many clocks from the resetn input signal until the reset is consumed
+ localparam int MIN_RESET_DELAY = EARLY_MODE; // internal occ tracking is 1 clock early when EARLY_MODE=1, 1 clock to propagate to stall_out
+ localparam int RAW_RESET_DELAY = FLUSH_EARLY_PIPES - RESET_LATENCY; // delay fifo exit from safe state if need more clocks to flush earliness than reset latency
+ localparam int RESET_RELEASE_DELAY_PRE = (RAW_RESET_DELAY < MIN_RESET_DELAY) ? MIN_RESET_DELAY : RAW_RESET_DELAY; // how many clocks late the fifo exits from safe state, excluding override from zlram
+ localparam int RESET_RELEASE_DELAY = (ZLRAM_RESET_RELEASE_DELAY_OVERRIDE != -1) ? ZLRAM_RESET_RELEASE_DELAY_OVERRIDE : RESET_RELEASE_DELAY_PRE; // how many clocks late the fifo exits from safe state
+
+ // reset release delay for the various occupancy trackers
+ localparam int RESET_DELAY_OCC_GTE3 = RESET_RELEASE_DELAY - EARLY_MODE;
+ localparam int RESET_DELAY_STALL_OUT = RESET_RELEASE_DELAY - EARLY_MODE;
+ localparam int RESET_DELAY_ALMOST_FULL = RESET_RELEASE_DELAY;
+ localparam int RESET_DELAY_ALMOST_EMPTY = RESET_RELEASE_DELAY;
+ localparam int RESET_DELAY_MAX = RESET_RELEASE_DELAY;
+
+ // properties of the fifo which are consumed by the testbench
+ localparam int WRITE_TO_READ_LATENCY = 1; //once something is written into the fifo, how many clocks later will it be visible on the read side
+ localparam int RESET_EXT_HELD_LENGTH = 4; //if RESET_EXTERNALLY_HELD = 1, how many clocks does reset need to be held for
+ localparam int MAX_CLOCKS_TO_ENTER_SAFE_STATE = 2; //upon assertion of reset, worse case number of clocks until fifo shows both full and empty
+ localparam int MAX_CLOCKS_TO_EXIT_SAFE_STATE = 18; //upon release of reset, worse case number of clocks until fifo is ready to transact (not necessarily observable if INITIAL_OCCUPANCY = DEPTH)
+
+
+
+ ///////////////////////////
+ // //
+ // Signal declarations //
+ // //
+ ///////////////////////////
+
+ // Naming convention: some signals are retimed early, any signal ending with _E has the same earliness as the EARLY_MODE parameter.
+
+ //reset
+ genvar g;
+ logic aclrn, sclrn; //these are the typical active low reset signals that are consumed
+ logic sclrn_early_two, sclrn_early, sclrn_late; //helpers for sclrn
+ logic [RESET_DELAY_MAX:0] resetn_delayed; //delayed versions of aclrn or sclrn, consumed by the occupancy trackers
+ logic fifo_in_reset; //intended primarily for consumption by testbench to know when fifo is in reset, also used for stall_out when NEVER_OVERFLOWS=1
+ logic aclrn_occ_tracker, sclrn_occ_tracker; //for reproducing the same reset structure that would be inside dla_acl_tessellated_incr_decr_threshold
+
+ //retime stall_in and valid_in to the correct timing, absorb excess earliness that the fifo cannot take advantage of
+ logic stall_in_E, valid_in_E;
+ logic [EXCESS_EARLY_STALL:0] stall_in_pipe;
+ logic [EXCESS_EARLY_VALID:0] valid_in_pipe;
+
+ //write control
+ logic write_into_fifo, write_into_fifo_E; //are we writing into the fifo
+ logic try_write_into_fifo, try_write_into_fifo_E; //are we trying to write into fifo, not necessarily will write, the purpose of this is to shrink the logic cone of threshold_reached in occ trackers
+ logic advance_write_addr, advance_write_addr_E; //should the write address advance
+ logic ram_wr_en, ram_wr_en_E; //write enable to the m20k or mlab
+ logic [ADDR-1:0] ram_wr_addr; //write address to the m20k or mlab
+
+ //read control
+ logic read_from_fifo, read_from_fifo_E; //are we reading from the fifo
+ logic try_read_from_fifo, try_read_from_fifo_E; //are we trying to read from fifo, not necessarily will read
+ logic advance_read_addr_E; //should the read address advance...
+ logic m20k_addr_b_clock_en, lfsr_addr_b_incr; //...normally we should also propagate this to the m20k read address and lfsr read address, there is a special scenario during reset exit, see comments below
+ logic [ADDR-1:0] ram_rd_addr; //read address to the m20k or mlab
+
+ //emptiness tracking - many cases to consider for how to use the data bypass for low latency
+ logic occ_gte_one_E, occ_gte_two_E, occ_gte_three_E; //used_words >= 1,2,3
+ logic occ_gte_reset_exit_n, occ_gte_one_reset_exit_n, occ_gte_two_reset_exit_n; //occ_gte_three_E uses occupancy tracking, use occ encoding from dla_acl_low_latency_fifo for others, need the re-create same reset logic
+ logic valid_out_E, stall_out_E; //early valid out and early stall out
+
+ //data bypass
+ logic [WIDTH-1:0] ram_data_out; //read data output from m20k or mlab, can be registered or unregistered or some mix of the two depending on REGISTERED_DATA_OUT_COUNT
+ logic [WIDTH-1:0] data_in_prev; //data_in delayed by 1 clock cycle, used exactly as in the diagram in the comments at the top
+ logic [WIDTH-1:0] data_in_mux; //for unregistered data_out, shift some of the muxing earlier, used exactly as in the diagram in the comments at the top
+ logic [WIDTH-1:0] data_out_reg, data_out_unreg; //we compute data_out for registered and unregistered version, then data_out is just a bit select from these based on REGISTERED_DATA_OUT_COUNT
+
+ //control signals for data bypass
+ logic data_out_clock_en, data_out_clock_en_E; //if data_out is registered this is the clock enable for it, otherwise this is the clock enable for the read data register inside the m20k/mlab itself
+ logic sel_data_in; //data_out should load from data_in when the fifo is empty
+ logic sel_ram_data_out; //if data was written long enough ago and is now readable from the ram, use that data
+ logic sel_new_data, sel_new_data_E; //use data_in_prev when the fifo is not empty but data is not yet readable from the ram
+
+
+
+ /////////////
+ // //
+ // Reset //
+ // //
+ /////////////
+
+ // the reset structure is identical to dla_acl_mid_speed_fifo
+
+ // S10 reset specification:
+ // S (clocks to enter reset safe state) : 2 for sclrn_early_two to actual register (beware synchronizer takes no time for reset assertion, but it does take time for reset release)
+ // P (minimum duration of reset pulse) : 4 if RESET_EXTERNALLY_HELD = 1, otherwise 1 (we will internally pulse stretch the reset to 4 clocks)
+ // D (clocks to exit reset safe state) : 18 (3 for synchronizer) + (5 for sclrn_early_two to actual register) + (10 for reset release delay for registers that absorb excess earliness)
+
+ dla_acl_reset_handler
+ #(
+ .ASYNC_RESET (ASYNC_RESET),
+ .USE_SYNCHRONIZER (SYNCHRONIZE_RESET),
+ .SYNCHRONIZE_ACLRN (SYNCHRONIZE_RESET),
+ .PIPE_DEPTH (0),
+ .NUM_COPIES (1)
+ )
+ dla_acl_reset_handler_inst
+ (
+ .clk (clock),
+ .i_resetn (resetn),
+ .o_aclrn (aclrn),
+ .o_resetn_synchronized (),
+ .o_sclrn (sclrn_early_two)
+ );
+
+ generate
+ if (ASYNC_RESET) begin : async_reset
+ assign sclrn = 1'b1;
+ assign sclrn_late = 1'b1;
+ assign sclrn_early = 1'b1;
+ end
+ else begin : sync_reset
+ logic [2:0] sclrn_chain;
+ always_ff @(posedge clock) begin
+ sclrn_chain <= (sclrn_chain << 1) | sclrn_early_two;
+ sclrn_early <= (RESET_EXTERNALLY_HELD) ? sclrn_early_two : ((&sclrn_chain) & sclrn_early_two);
+ sclrn <= sclrn_early;
+ sclrn_late <= sclrn; //only the read address increment consumes this when using m20k and sclr
+ end
+ end
+ endgenerate
+
+ generate
+ always_comb begin
+ resetn_delayed[0] = (ASYNC_RESET) ? aclrn : sclrn; //delay 0 = original reset timing
+ end
+ for (g=1; g<=RESET_DELAY_MAX; g++) begin : gen_resetn_delayed
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) resetn_delayed[g] <= '0;
+ else begin
+ resetn_delayed[g] <= (ASYNC_RESET && g==1) ? 1'b1 : resetn_delayed[g-1]; //partial reconfig requires no d-input consumption of aclr, so resetn_delayed[1] loads 1'b1 if ASYNC_RESET
+ if (~sclrn_early) resetn_delayed[g] <= '0; //resetn_delayed goes into reset as the same time as sclrn, since this is registered need to peek one clock ahead of sclrn
+ end
+ end
+ end
+ endgenerate
+
+ //this signal is consumed by the testbench to know whether the fifo is still in reset, can't use stall_out when fifo starts as full
+ //this signal may be exported by the fifo in certain configurations, e.g. NEVER_OVERFLOWS=1
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) fifo_in_reset <= 1'b1;
+ else begin
+ fifo_in_reset <= 1'b0;
+ if (~resetn_delayed[RESET_RELEASE_DELAY]) fifo_in_reset <= 1'b1;
+ end
+ end
+
+
+
+ ////////////////////////////////////////////////
+ // //
+ // Absorb excess earliness on input signals //
+ // //
+ ////////////////////////////////////////////////
+
+ generate
+ always_comb begin
+ stall_in_pipe[0] = stall_in;
+ valid_in_pipe[0] = valid_in;
+ end
+ for (g=1; g<=EXCESS_EARLY_STALL; g++) begin : gen_stall_in_delayed
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) stall_in_pipe[g] <= 1'b1;
+ else begin
+ stall_in_pipe[g] <= stall_in_pipe[g-1];
+ if (~sclrn && RESET_EVERYTHING) stall_in_pipe[g] <= 1'b1;
+ end
+ end
+ end
+ for (g=1; g<=EXCESS_EARLY_VALID; g++) begin : gen_valid_in_delayed
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) valid_in_pipe[g] <= 1'b0;
+ else begin
+ valid_in_pipe[g] <= valid_in_pipe[g-1];
+ if (~sclrn && RESET_EVERYTHING) valid_in_pipe[g] <= 1'b0;
+ end
+ end
+ end
+ endgenerate
+ assign stall_in_E = stall_in_pipe[EXCESS_EARLY_STALL];
+ assign valid_in_E = valid_in_pipe[EXCESS_EARLY_VALID];
+
+
+
+ ////////////////////
+ // //
+ // Memory block //
+ // //
+ ////////////////////
+
+ // We can use a mix of registered and unregistered output data, see comments at the top for how this is handled.
+ // Just like dla_acl_mid_speed_fifo, we have different implementations for M20K and MLAB. Comments from dla_acl_mid_speed_fifo about this:
+
+ // Usage of altdpram - unlike the M20K in which it is impossible to bypass the input registers (addresses, write data, write enable), for the MLAB it is possible to bypass the input
+ // register for the read address. There is no parameterization of altera_syncram that supports this, hence the use of altdpram.
+
+ // It is desirable to have access to the output of read address address. In the case of MLAB, the read address is driven by ALM registers. For M20K, we have no visibility on the output
+ // of the read address register because this is a hardened register inside the M20K itself. For M20K we have our own read address in ALM registers which is always 1 ahead of the hardened
+ // read address inside the M20K. Only when we update our read address, we assert the clock enable for the hardened read address inside the M20K, this way it always captures 1 value behind
+ // what our ALM register read address is. For asynchronous reset, the M20K read address is aclr to 0 and our address starts at 1 (actually INITIAL_OCCPUPANCY=1 on the LFSR). For synchronous
+ // reset, the M20K read address clock enable is active during reset so that we can clock in the value of our ALM register read address, upon reset exit the M20K clock enable is shut off
+ // and our read address advances 1 step forward.
+
+ assign ecc_err_status = 2'h0; // ECC IS NOT IMPLEMENTED YET, see case:555783
+
+ generate
+ if (USE_MLAB) begin : gen_mlab
+ if (REG_DATA_OUT_COUNT > 0) begin : gen_mlab_reg
+ altdpram #( //modelsim library: altera_mf
+ .indata_aclr ("OFF"),
+ .indata_reg ("INCLOCK"),
+ .intended_device_family ("Stratix 10"), //quartus will correct this automatically to whatever your project actually uses
+ .lpm_type ("altdpram"),
+ .ram_block_type ("MLAB"),
+ .outdata_aclr ("OFF"),
+ .outdata_sclr ("OFF"),
+ .outdata_reg ("UNREGISTERED"), //in order to register data_out, we have to unregister the output from the ram, that way we can sneak in a 3:1 mux before data_out
+ .rdaddress_aclr ("OFF"),
+ .rdaddress_reg ("UNREGISTERED"), //we own the read address, bypass the equivalent of the internal address_b from m20k
+ .rdcontrol_aclr ("OFF"),
+ .rdcontrol_reg ("UNREGISTERED"),
+ .read_during_write_mode_mixed_ports ("DONT_CARE"),
+ .width (REG_DATA_OUT_COUNT),
+ .widthad (ADDR),
+ .width_byteena (1),
+ .wraddress_aclr ("OFF"),
+ .wraddress_reg ("INCLOCK"),
+ .wrcontrol_aclr ("OFF"),
+ .wrcontrol_reg ("INCLOCK")
+ )
+ altdpram_component
+ (
+ //clock, no reset
+ .inclock (clock),
+ .outclock (clock),
+
+ //write port
+ .data (data_in[REG_DATA_OUT_COUNT-1:0]), //the lower bits of data_out are registered
+ .wren (ram_wr_en),
+ .wraddress (ram_wr_addr),
+
+ //read port
+ .rdaddress (ram_rd_addr),
+ .outclocken (1'b1), //no effect since q is unregistered
+ .q (ram_data_out[REG_DATA_OUT_COUNT-1:0]), //the lower bits of data_out are registered
+
+ //unused
+ .aclr (1'b0),
+ .sclr (1'b0),
+ .byteena (1'b1),
+ .inclocken (1'b1),
+ .rdaddressstall (1'b0),
+ .rden (1'b1),
+ .wraddressstall (1'b0)
+ );
+ end
+ if (UNREG_DATA_OUT_COUNT > 0) begin : gen_mlab_unreg
+ altdpram #( //modelsim library: altera_mf
+ .indata_aclr ("OFF"),
+ .indata_reg ("INCLOCK"),
+ .intended_device_family ("Stratix 10"), //quartus will correct this automatically to whatever your project actually uses
+ .lpm_type ("altdpram"),
+ .ram_block_type ("MLAB"),
+ .outdata_aclr ("OFF"),
+ .outdata_sclr ("OFF"),
+ .outdata_reg ("OUTCLOCK"), //when output data is unregistered, all sources feeding that mux must be registered, one of those sources is the output of the ram
+ .rdaddress_aclr ("OFF"),
+ .rdaddress_reg ("UNREGISTERED"), //we own the read address, bypass the equivalent of the internal address_b from m20k
+ .rdcontrol_aclr ("OFF"),
+ .rdcontrol_reg ("UNREGISTERED"),
+ .read_during_write_mode_mixed_ports ("DONT_CARE"),
+ .width (UNREG_DATA_OUT_COUNT),
+ .widthad (ADDR),
+ .width_byteena (1),
+ .wraddress_aclr ("OFF"),
+ .wraddress_reg ("INCLOCK"),
+ .wrcontrol_aclr ("OFF"),
+ .wrcontrol_reg ("INCLOCK")
+ )
+ altdpram_component
+ (
+ //clock, no reset
+ .inclock (clock),
+ .outclock (clock),
+
+ //write port
+ .data (data_in[WIDTH-1:REG_DATA_OUT_COUNT]), //the upper bits of data_out are unregistered
+ .wren (ram_wr_en),
+ .wraddress (ram_wr_addr),
+
+ //read port
+ .rdaddress (ram_rd_addr),
+ .outclocken (data_out_clock_en), //q is registered and we need access to its clock enable
+ .q (ram_data_out[WIDTH-1:REG_DATA_OUT_COUNT]), //the upper bits of data_out are unregistered
+
+ //unused
+ .aclr (1'b0),
+ .sclr (1'b0),
+ .byteena (1'b1),
+ .inclocken (1'b1),
+ .rdaddressstall (1'b0),
+ .rden (1'b1),
+ .wraddressstall (1'b0)
+ );
+ end
+ end
+ else begin : gen_m20k
+ if (REG_DATA_OUT_COUNT > 0) begin : gen_m20k_reg
+ altera_syncram #( //modelsim library: altera_lnsim
+ .numwords_a (2**ADDR),
+ .numwords_b (2**ADDR),
+ .address_aclr_b ((ASYNC_RESET) ? "CLEAR1" : "NONE"),
+ .address_reg_b ("CLOCK1"),
+ .clock_enable_input_a ("BYPASS"),
+ .clock_enable_input_b ("BYPASS"),
+ .clock_enable_output_b ("BYPASS"), //q is unregistered, so clock enable has no effect
+ .enable_ecc ("FALSE"),
+ .intended_device_family ("Stratix 10"), //quartus will correct this automatically to whatever your project actually uses
+ .lpm_type ("altera_syncram"),
+ .operation_mode ("DUAL_PORT"),
+ .outdata_aclr_b ("NONE"),
+ .outdata_sclr_b ("NONE"),
+ .outdata_reg_b ("UNREGISTERED"), //in order to register data_out, we have to unregister the output from the ram, that way we can sneak in a 3:1 mux before data_out
+ .power_up_uninitialized ("TRUE"),
+ .ram_block_type ("M20K"),
+ .read_during_write_mode_mixed_ports ("DONT_CARE"),
+ .widthad_a (ADDR),
+ .widthad_b (ADDR),
+ .width_a (REG_DATA_OUT_COUNT),
+ .width_b (REG_DATA_OUT_COUNT),
+ .width_byteena_a (1)
+ )
+ altera_syncram
+ (
+ //clock and reset
+ .clock0 (clock),
+ .clock1 (clock),
+ .aclr1 ((ASYNC_RESET) ? ~aclrn : 1'b0), //this is used to reset the internal address_b when ASYNC_RESET=1
+
+ //write port
+ .wren_a (ram_wr_en),
+ .address_a (ram_wr_addr),
+ .data_a (data_in[REG_DATA_OUT_COUNT-1:0]), //the lower bits of data_out are registered
+
+ //read port
+ .address_b (ram_rd_addr),
+ .addressstall_b (~m20k_addr_b_clock_en),
+ .clocken1 (1'b1), //no effect since q is unregistered
+ .q_b (ram_data_out[REG_DATA_OUT_COUNT-1:0]), //the lower bits of data_out are registered
+
+ //unused
+ .aclr0 (1'b0),
+ .address2_a (1'b1),
+ .address2_b (1'b1),
+ .addressstall_a (1'b0),
+ .byteena_a (1'b1),
+ .byteena_b (1'b1),
+ .clocken0 (1'b1),
+ .clocken2 (1'b1),
+ .clocken3 (1'b1),
+ .data_b ({WIDTH{1'b1}}),
+ .eccencbypass (1'b0),
+ .eccencparity (8'b0),
+ .eccstatus (),
+ .q_a (),
+ .rden_a (1'b1),
+ .rden_b (1'b1),
+ .sclr (1'b0),
+ .wren_b (1'b0)
+ );
+ end
+ if (UNREG_DATA_OUT_COUNT > 0) begin : gen_m20k_unreg
+ altera_syncram #( //modelsim library: altera_lnsim
+ .numwords_a (2**ADDR),
+ .numwords_b (2**ADDR),
+ .address_aclr_b ((ASYNC_RESET) ? "CLEAR1" : "NONE"),
+ .address_reg_b ("CLOCK1"),
+ .clock_enable_input_a ("BYPASS"),
+ .clock_enable_input_b ("BYPASS"),
+ .clock_enable_output_b ("NORMAL"), //clock enable for output data register is controlled by clocken1
+ .enable_ecc ("FALSE"),
+ .intended_device_family ("Stratix 10"), //quartus will correct this automatically to whatever your project actually uses
+ .lpm_type ("altera_syncram"),
+ .operation_mode ("DUAL_PORT"),
+ .outdata_aclr_b ("NONE"),
+ .outdata_sclr_b ("NONE"),
+ .outdata_reg_b ("CLOCK1"), //when output data is unregistered, all sources feeding that mux must be registered, one of those sources is the output of the ram
+ .power_up_uninitialized ("TRUE"),
+ .ram_block_type ("M20K"),
+ .read_during_write_mode_mixed_ports ("DONT_CARE"),
+ .widthad_a (ADDR),
+ .widthad_b (ADDR),
+ .width_a (UNREG_DATA_OUT_COUNT),
+ .width_b (UNREG_DATA_OUT_COUNT),
+ .width_byteena_a (1)
+ )
+ altera_syncram
+ (
+ //clock and reset
+ .clock0 (clock),
+ .clock1 (clock),
+ .aclr1 ((ASYNC_RESET) ? ~aclrn : 1'b0), //this is used to reset the internal address_b when ASYNC_RESET=1
+
+ //write port
+ .wren_a (ram_wr_en),
+ .address_a (ram_wr_addr),
+ .data_a (data_in[WIDTH-1:REG_DATA_OUT_COUNT]), //the upper bits of data_out are unregistered
+
+ //read port
+ .address_b (ram_rd_addr),
+ .addressstall_b (~m20k_addr_b_clock_en),
+ .clocken1 (data_out_clock_en), //q is registered and we need access to its clock enable
+ .q_b (ram_data_out[WIDTH-1:REG_DATA_OUT_COUNT]), //the upper bits of data_out are unregistered
+
+ //unused
+ .aclr0 (1'b0),
+ .address2_a (1'b1),
+ .address2_b (1'b1),
+ .addressstall_a (1'b0),
+ .byteena_a (1'b1),
+ .byteena_b (1'b1),
+ .clocken0 (1'b1),
+ .clocken2 (1'b1),
+ .clocken3 (1'b1),
+ .data_b ({WIDTH{1'b1}}),
+ .eccencbypass (1'b0),
+ .eccencparity (8'b0),
+ .eccstatus (),
+ .q_a (),
+ .rden_a (1'b1),
+ .rden_b (1'b1),
+ .sclr (1'b0),
+ .wren_b (1'b0)
+ );
+ end
+ end
+ endgenerate
+
+
+
+ /////////////////////
+ // //
+ // Write address //
+ // //
+ /////////////////////
+
+ assign advance_write_addr_E = ~stall_out_E & valid_in_E & (occ_gte_two_E | (valid_out_E & stall_in_E)); //don't write to fifo if data captured persistently in the data bypass (data_out if registered, otherwise data_in_mux)
+ assign ram_wr_en_E = ~stall_out_E & valid_in_E; //simplify the write logic, this allows more writes than absolutely necessary in order to ease routing to the write enable of all the physical memories
+
+ assign try_write_into_fifo_E = valid_in_E;
+ assign write_into_fifo_E = valid_in_E & ~stall_out_E;
+
+ generate
+ if (EARLY_MODE == 0) begin : write_incr0
+ assign ram_wr_en = ram_wr_en_E;
+ assign advance_write_addr = advance_write_addr_E;
+ assign try_write_into_fifo = try_write_into_fifo_E;
+ assign write_into_fifo = write_into_fifo_E;
+ end
+ if (EARLY_MODE == 1) begin : write_incr1
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) begin
+ ram_wr_en <= 1'b0;
+ advance_write_addr <= 1'b0;
+ write_into_fifo <= 1'b0;
+ end
+ else begin
+ ram_wr_en <= ram_wr_en_E;
+ advance_write_addr <= advance_write_addr_E;
+ write_into_fifo <= write_into_fifo_E;
+ if (~sclrn) begin
+ ram_wr_en <= 1'b0;
+ advance_write_addr <= 1'b0;
+ write_into_fifo <= 1'b0;
+ end
+ end
+ end
+ assign try_write_into_fifo = write_into_fifo;
+ end
+ endgenerate
+
+ dla_acl_lfsr #(
+ .WIDTH (ADDR),
+ .ASYNC_RESET (ASYNC_RESET),
+ .SYNCHRONIZE_RESET (0),
+ .INITIAL_OCCUPANCY ((INITIAL_OCCUPANCY > 1) ? (INITIAL_OCCUPANCY - 1) : 0) //we don't advance the write address when fifo is empty, it gets captured in bypass register
+ )
+ m20k_wraddr_inst
+ (
+ .clock (clock),
+ .resetn (resetn_delayed[0]),
+ .enable (advance_write_addr),
+ .state (ram_wr_addr)
+ );
+
+
+
+ ////////////////////
+ // //
+ // Read address //
+ // //
+ ////////////////////
+
+ // Like dla_acl_mid_speed_fifo, for M20K with synchronous reset we have special logic for clocking in our ALM register read address into the hardened read address inside the M20K itself. See comments there for how this works.
+
+ assign advance_read_addr_E = occ_gte_two_E & ~stall_in_E; //if we didn't write incoming data into the ram, also don't try to read it from the ram
+
+ generate
+ if (EARLY_MODE == 0) begin : read_incr0
+ assign lfsr_addr_b_incr = (!USE_MLAB && !ASYNC_RESET) ? (advance_read_addr_E | ~sclrn_late) : advance_read_addr_E;
+ assign m20k_addr_b_clock_en = (!USE_MLAB && !ASYNC_RESET) ? (advance_read_addr_E | ~sclrn) : advance_read_addr_E;
+ end
+ if (EARLY_MODE == 1) begin : read_incr1
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) begin
+ lfsr_addr_b_incr <= 1'b0;
+ m20k_addr_b_clock_en <= 1'b0;
+ end
+ else begin
+ lfsr_addr_b_incr <= advance_read_addr_E;
+ m20k_addr_b_clock_en <= advance_read_addr_E;
+ if (!USE_MLAB && !ASYNC_RESET) begin //special reset behavior for M20K using sync reset, peek one stage ahead on sclr since we are now registering these signals
+ if (~sclrn) lfsr_addr_b_incr <= 1'b1;
+ if (~sclrn_early) m20k_addr_b_clock_en <= 1'b1;
+ end
+ else begin //normal reset behavior
+ if (~sclrn && RESET_EVERYTHING) begin
+ lfsr_addr_b_incr <= 1'b0;
+ m20k_addr_b_clock_en <= 1'b0;
+ end
+ end
+ end
+ end
+ end
+ endgenerate
+
+ dla_acl_lfsr #(
+ .WIDTH (ADDR),
+ .ASYNC_RESET (ASYNC_RESET),
+ .SYNCHRONIZE_RESET (0),
+ .INITIAL_OCCUPANCY ((!USE_MLAB && ASYNC_RESET) ? 1 : 0) //for M20K our read address is 1 ahead of the address_b inside the M20K, for async reset we don't clock our address during reset, so just start 1 ahead
+ )
+ m20k_rdaddr_inst
+ (
+ .clock (clock),
+ .resetn (resetn_delayed[0]),
+ .enable (lfsr_addr_b_incr),
+ .state (ram_rd_addr)
+ );
+
+
+
+ //////////////////////////
+ // //
+ // Emptiness tracking //
+ // //
+ //////////////////////////
+
+ // occ_gte_X checks whether used_words >= X. For a latency one fifo, write_used_words == read_used_words. We use the same encoding of occ from dla_acl_low_latency_fifo:
+ //
+ // Let occ[2:0] = {occ_gte_three_E, occ_gte_two_E, occ_gte_one_E}
+ //
+ // value of occ | actual occupancy
+ // -------------+-----------------
+ // 3'b000 | 0
+ // 3'b001 | 1
+ // 3'b011 | 2
+ // 3'b111 | 3+
+ //
+ // Only occ_gte_three_E uses an occupancy tracker, the pass-it-along-from-your-neighbor approach from dla_acl_low_latency_fifo is used to generate occ_gte_two_E and occ_gte_one_E. Special care is needed for shallow
+ // fifos where things get a bit complicated with INITIAL_OCCUPANCY and WRITE_AND_READ_DURING_FULL. Ideally all 3 occ_gte_X signals should share the same reset, but since occ_gte_three_E is driven from an
+ // occupancy tracker, we need to re-create the same reset control that the occupancy tracker would have used, which is commonized in occ_gte_reset_exit_n, and depending on INITIAL_OCCUPANCY we adjust the actual
+ // reset that occ_gte_two_E and occ_gte_one_E consume.
+
+ //mimic the reset behavior inside dla_acl_tessellated_incr_decr_threshold -- in case THRESHOLD_REACHED_AT_RESET is different than the ideal value, we need a way to restore the ideal value at reset exit
+ assign aclrn_occ_tracker = (ASYNC_RESET) ? resetn_delayed[RESET_DELAY_OCC_GTE3] : 1'b1;
+ assign sclrn_occ_tracker = (!ASYNC_RESET) ? resetn_delayed[RESET_DELAY_OCC_GTE3] : 1'b1;
+ always_ff @(posedge clock or negedge aclrn_occ_tracker) begin
+ if (~aclrn_occ_tracker) occ_gte_reset_exit_n <= 1'b0;
+ else occ_gte_reset_exit_n <= sclrn_occ_tracker;
+ end
+ assign occ_gte_one_reset_exit_n = (INITIAL_OCCUPANCY == 0) ? 1'b1 : occ_gte_reset_exit_n;
+ assign occ_gte_two_reset_exit_n = (INITIAL_OCCUPANCY <= 1) ? 1'b1 : occ_gte_reset_exit_n;
+
+ always_ff @(posedge clock or negedge aclrn_occ_tracker) begin
+ if (~aclrn_occ_tracker) occ_gte_one_E <= 1'b0;
+ else begin
+ if (DEPTH == 1) begin
+ if (~stall_in_E & occ_gte_one_E & ((WRITE_AND_READ_DURING_FULL) ? ~valid_in_E : 1'b1)) occ_gte_one_E <= 1'b0;
+ else if (valid_in_E & ~stall_out_E) occ_gte_one_E <= 1'b1;
+ end
+ else begin
+ if (valid_in_E & ((INITIAL_OCCUPANCY == 0) ? ~stall_out_E : 1'b1)) occ_gte_one_E <= 1'b1;
+ else if (~stall_in_E & ~occ_gte_two_E) occ_gte_one_E <= 1'b0;
+ end
+ if (~occ_gte_one_reset_exit_n) occ_gte_one_E <= 1'b1;
+ if (~sclrn_occ_tracker) occ_gte_one_E <= 1'b0;
+ end
+ end
+
+ generate
+ if (DEPTH >= 2) begin : gen_occ_gte_two_E
+ always_ff @(posedge clock or negedge aclrn_occ_tracker) begin
+ if (~aclrn_occ_tracker) occ_gte_two_E <= 1'b0;
+ else begin
+ if (valid_in_E & stall_in_E & occ_gte_one_E) occ_gte_two_E <= 1'b1;
+ else if (~stall_in_E & ~occ_gte_three_E & (((DEPTH==2) && (WRITE_AND_READ_DURING_FULL==0)) ? 1'b1 : ~valid_in_E)) occ_gte_two_E <= 1'b0;
+ if (~occ_gte_two_reset_exit_n) occ_gte_two_E <= 1'b1;
+ if (~sclrn_occ_tracker) occ_gte_two_E <= 1'b0;
+ end
+ end
+ end
+ else begin : zero_occ_gte_two_E
+ assign occ_gte_two_E = 1'b0;
+ end
+ endgenerate
+
+ generate
+ if (DEPTH >= 3) begin : gen_occ_gte_three_E
+ localparam bit OCC_GTE3_GUARD_INCR_RAW = (INITIAL_OCCUPANCY == 2) ? 1'b1 : 1'b0; //same problem as almost_full but in the opposite direction (valid_in=1 during reset)
+ dla_acl_tessellated_incr_decr_threshold #(
+ .CAPACITY (DEPTH),
+ .THRESHOLD (3),
+ .INITIAL_OCCUPANCY (INITIAL_OCCUPANCY),
+ .THRESHOLD_REACHED_AT_RESET (0),
+ .WRITE_AND_READ_DURING_FULL (WRITE_AND_READ_DURING_FULL),
+ .ASYNC_RESET (ASYNC_RESET),
+ .SYNCHRONIZE_RESET (0),
+ .RESET_EVERYTHING (RESET_EVERYTHING),
+ .RESET_EXTERNALLY_HELD (1)
+ )
+ occ_gte_three_inst
+ (
+ .clock (clock),
+ .resetn (resetn_delayed[RESET_DELAY_OCC_GTE3]),
+ .incr_no_overflow (write_into_fifo_E),
+ .incr_raw ((OCC_GTE3_GUARD_INCR_RAW) ? write_into_fifo_E : try_write_into_fifo_E),
+ .decr_no_underflow (read_from_fifo_E),
+ .decr_raw (try_read_from_fifo_E),
+ .threshold_reached (occ_gte_three_E)
+ );
+ end
+ else begin : zero_occ_gte_three_E
+ assign occ_gte_three_E = 1'b0;
+ end
+ endgenerate
+
+ //read logic
+ assign valid_out_E = occ_gte_one_E;
+ assign try_read_from_fifo_E = ~stall_in_E;
+ assign read_from_fifo_E = valid_out_E & ~stall_in_E;
+ assign forced_read_out = read_from_fifo;
+
+ //correct timing to no earliness
+ generate
+ if (EARLY_MODE == 0) begin : read0
+ assign valid_out = occ_gte_one_E;
+ assign try_read_from_fifo = try_read_from_fifo_E;
+ assign read_from_fifo = read_from_fifo_E;
+ end
+ if (EARLY_MODE == 1) begin : read1
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) begin
+ valid_out <= 1'b0;
+ read_from_fifo <= 1'b0;
+ end
+ else begin
+ valid_out <= occ_gte_one_E;
+ read_from_fifo <= read_from_fifo_E;
+ if (~sclrn) begin
+ valid_out <= 1'b0;
+ read_from_fifo <= 1'b0;
+ end
+ end
+ end
+ assign try_read_from_fifo = read_from_fifo;
+ end
+ endgenerate
+
+
+
+ ///////////////////////////////////
+ // //
+ // Data bypass for low latency //
+ // //
+ ///////////////////////////////////
+
+ //data_out_clock_en is the clock enable for data_out when registered, otherwise it is clock enable for the read data register inside the M20K or MLAB itself
+ //note that both scenarios can be used at the same time if REGISTERED_DATA_OUT_COUNT results in some bits of data_out being registered and some being unregistered
+ //normally data_out should load if the fifo is empty or downstream says it can accept data, things get complicated when we must hold the last value when the fifo empties
+ generate
+ if (!HOLD_DATA_OUT_WHEN_EMPTY) begin : simple_data_out_clock_en_E
+ assign data_out_clock_en_E = ~occ_gte_one_E | ~stall_in_E;
+ end
+ else begin : hold_data_out_clock_en_E
+ logic empty_and_writing_E, one_item_and_writing_and_reading_E, two_or_more_items_and_reading_E;
+ assign empty_and_writing_E = ~occ_gte_one_E & valid_in_E;
+ assign one_item_and_writing_and_reading_E = ((DEPTH==1) && (WRITE_AND_READ_DURING_FULL==0)) ? 1'b0 : (occ_gte_one_E & ~occ_gte_two_E & ~stall_in_E & valid_in_E);
+ assign two_or_more_items_and_reading_E = occ_gte_two_E & ~stall_in_E;
+ assign data_out_clock_en_E = empty_and_writing_E | one_item_and_writing_and_reading_E | two_or_more_items_and_reading_E;
+ end
+ endgenerate
+
+ //sel_data_in means data_out should source from data_in, which happens when the fifo is empty, or there is 1 word and we are reading and writing
+ //sel_new_data means data_out should source from data_in_prev -- this is essentially the new data mode discussed in the comments at the top which is used to lower the write to latency from 3 to 2
+ //in all other scenarios, data_out should source from the ram read data
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) sel_new_data_E <= 1'b0;
+ else begin
+ sel_new_data_E <= (stall_in_E) ? (occ_gte_one_E & ~occ_gte_two_E) : (occ_gte_two_E & ~occ_gte_three_E);
+ if (~sclrn && RESET_EVERYTHING) sel_new_data_E <= 1'b0;
+ end
+ end
+
+ //correct timing to no earliness -- control signal operate with earliness but the data path itself does not, this gives time for the control signals to fan-out to the entire data path width
+ generate
+ if (EARLY_MODE == 0) begin : data0
+ assign data_out_clock_en = data_out_clock_en_E;
+ assign sel_new_data = sel_new_data_E;
+ assign sel_data_in = ~occ_gte_two_E;
+ end
+ if (EARLY_MODE == 1) begin : data1
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) begin
+ data_out_clock_en <= 1'b0;
+ sel_new_data <= 1'b0;
+ sel_data_in <= 1'b0;
+ end
+ else begin
+ data_out_clock_en <= data_out_clock_en_E;
+ sel_new_data <= sel_new_data_E;
+ sel_data_in <= ~occ_gte_two_E;
+ if (~sclrn && RESET_EVERYTHING) begin
+ data_out_clock_en <= 1'b0;
+ sel_new_data <= 1'b0;
+ sel_data_in <= 1'b0;
+ end
+ end
+ end
+ end
+ endgenerate
+
+ //data path for both registered and unregistered data_out
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) begin
+ data_in_prev <= '0;
+ data_out_reg <= '0;
+ data_in_mux <= '0;
+ sel_ram_data_out <= 1'b0;
+ end
+ else begin
+ data_in_prev <= data_in;
+ if (data_out_clock_en) begin
+ data_out_reg <= (sel_data_in) ? data_in : (sel_new_data) ? data_in_prev : ram_data_out;
+ data_in_mux <= (sel_data_in) ? data_in : data_in_prev;
+ sel_ram_data_out <= ~sel_data_in & ~sel_new_data;
+ end
+ if (~sclrn && RESET_EVERYTHING) begin
+ data_in_prev <= '0;
+ data_out_reg <= '0;
+ data_in_mux <= '0;
+ sel_ram_data_out <= 1'b0;
+ end
+ end
+ end
+ assign data_out_unreg = (sel_ram_data_out) ? ram_data_out : data_in_mux;
+
+ //select whether to use registered or unregistered data_out
+ generate
+ if (REG_DATA_OUT_COUNT == 0) begin : gen_unregistered_data_out
+ assign data_out = data_out_unreg;
+ end
+ else if (REG_DATA_OUT_COUNT == WIDTH) begin : gen_registered_data_out
+ assign data_out = data_out_reg;
+ end
+ else begin : gen_mixed_reg_data_out
+ assign data_out = {data_out_unreg[WIDTH-1:REG_DATA_OUT_COUNT], data_out_reg[REG_DATA_OUT_COUNT-1:0]};
+ end
+ endgenerate
+
+
+
+ /////////////////
+ // //
+ // Fifo full //
+ // //
+ /////////////////
+
+ generate
+ if (NEVER_OVERFLOWS) begin : gen_reset_stall_out //no overflow protection, but upstream still needs a way to know when fifo has exited from reset
+ if (EARLY_MODE == 0) begin : fifo_in_reset0
+ assign stall_out_E = fifo_in_reset;
+ end
+ if (EARLY_MODE == 1) begin : fifo_in_reset1
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) stall_out_E <= 1'b1;
+ else begin
+ stall_out_E <= 1'b0;
+ if (~resetn_delayed[RESET_RELEASE_DELAY-1]) stall_out_E <= 1'b1; //RESET_RELEASE_DELAY will be at least 1 when EARLY_MODE is 1
+ end
+ end
+ end
+ end
+ else begin : gen_real_stall_out
+ localparam bit STALL_OUT_GUARD_DECR_RAW = (DEPTH == INITIAL_OCCUPANCY) ? 1'b1 : 1'b0; //if fifo starts full and stall_in=0 during reset, it will cause stall_out to deassert 1 clock earlier than expected
+ logic stall_out_E_raw;
+ dla_acl_tessellated_incr_decr_threshold #(
+ .CAPACITY (DEPTH),
+ .THRESHOLD (DEPTH),
+ .INITIAL_OCCUPANCY (INITIAL_OCCUPANCY),
+ .THRESHOLD_REACHED_AT_RESET (1),
+ .WRITE_AND_READ_DURING_FULL (WRITE_AND_READ_DURING_FULL),
+ .ASYNC_RESET (ASYNC_RESET),
+ .SYNCHRONIZE_RESET (0),
+ .RESET_EVERYTHING (RESET_EVERYTHING),
+ .RESET_EXTERNALLY_HELD (1)
+ )
+ stall_out_inst
+ (
+ .clock (clock),
+ .resetn (resetn_delayed[RESET_DELAY_STALL_OUT]),
+ .incr_no_overflow (write_into_fifo_E),
+ .incr_raw (try_write_into_fifo_E),
+ .decr_no_underflow (read_from_fifo_E),
+ .decr_raw ((STALL_OUT_GUARD_DECR_RAW) ? read_from_fifo_E : try_read_from_fifo_E),
+ .threshold_reached (stall_out_E_raw)
+ );
+ assign stall_out_E = (!WRITE_AND_READ_DURING_FULL) ? stall_out_E_raw : (stall_out_E_raw & ~read_from_fifo_E);
+ end
+ endgenerate
+
+ //correct timing to no earliness
+ generate
+ if (EARLY_MODE == 0) begin : stall_out0
+ assign stall_out = stall_out_E;
+ end
+ if (EARLY_MODE == 1) begin : stall_out1
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) stall_out <= 1'b1;
+ else begin
+ stall_out <= stall_out_E;
+ if (~sclrn) stall_out <= 1'b1;
+ end
+ end
+ end
+ endgenerate
+
+
+
+ ///////////////////
+ // //
+ // Almost full //
+ // //
+ ///////////////////
+
+ generate
+ if ((ALMOST_FULL_CUTOFF == 0) && (NEVER_OVERFLOWS == 0) && (WRITE_AND_READ_DURING_FULL == 0)) begin : full_almost_full
+ assign almost_full = stall_out;
+ end
+ else begin : real_almost_full
+ localparam bit ALMOST_FULL_GUARD_DECR_RAW = ((DEPTH-ALMOST_FULL_CUTOFF) == INITIAL_OCCUPANCY) ? 1'b1 : 1'b0; //same problem as stall_out, if stall_in=0 during reset then almost_full deasserts too early
+ dla_acl_tessellated_incr_decr_threshold #(
+ .CAPACITY (DEPTH),
+ .THRESHOLD (DEPTH - ALMOST_FULL_CUTOFF),
+ .INITIAL_OCCUPANCY (INITIAL_OCCUPANCY),
+ .THRESHOLD_REACHED_AT_RESET (1),
+ .WRITE_AND_READ_DURING_FULL (WRITE_AND_READ_DURING_FULL),
+ .ASYNC_RESET (ASYNC_RESET),
+ .SYNCHRONIZE_RESET (0),
+ .RESET_EVERYTHING (RESET_EVERYTHING),
+ .RESET_EXTERNALLY_HELD (1)
+ )
+ almost_full_inst
+ (
+ .clock (clock),
+ .resetn (resetn_delayed[RESET_DELAY_ALMOST_FULL]),
+ .incr_no_overflow (write_into_fifo),
+ .incr_raw (try_write_into_fifo),
+ .decr_no_underflow (read_from_fifo),
+ .decr_raw ((ALMOST_FULL_GUARD_DECR_RAW) ? read_from_fifo : try_read_from_fifo),
+ .threshold_reached (almost_full)
+ );
+ end
+ endgenerate
+
+
+
+ ////////////////////
+ // //
+ // Almost empty //
+ // //
+ ////////////////////
+
+ generate
+ if (ALMOST_EMPTY_CUTOFF == 0) begin : empty_almost_empty
+ assign almost_empty = ~valid_out;
+ end
+ else if (ALMOST_EMPTY_CUTOFF <= 2) begin : small_almost_empty //reuse the occupancy information we already have available
+ if (EARLY_MODE == 0) begin
+ assign almost_empty = (ALMOST_EMPTY_CUTOFF == 1) ? ~occ_gte_two_E : ~occ_gte_three_E;
+ end
+ else begin
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) almost_empty <= 1'b1;
+ else begin
+ almost_empty <= (ALMOST_EMPTY_CUTOFF == 1) ? ~occ_gte_two_E : ~occ_gte_three_E;
+ if (~sclrn) almost_empty <= 1'b1;
+ end
+ end
+ end
+ end
+ else begin : real_almost_empty
+ localparam bit ALMOST_EMPTY_GUARD_INCR_RAW = (ALMOST_EMPTY_CUTOFF == INITIAL_OCCUPANCY) ? 1'b1 : 1'b0; //same problem as almost_full but in the opposite direction (valid_in=1 during reset)
+ logic not_almost_empty;
+ dla_acl_tessellated_incr_decr_threshold #(
+ .CAPACITY (DEPTH),
+ .THRESHOLD (ALMOST_EMPTY_CUTOFF + 1),
+ .INITIAL_OCCUPANCY (INITIAL_OCCUPANCY),
+ .THRESHOLD_REACHED_AT_RESET (0),
+ .WRITE_AND_READ_DURING_FULL (WRITE_AND_READ_DURING_FULL),
+ .ASYNC_RESET (ASYNC_RESET),
+ .SYNCHRONIZE_RESET (0),
+ .RESET_EVERYTHING (RESET_EVERYTHING),
+ .RESET_EXTERNALLY_HELD (1)
+ )
+ almost_empty_inst
+ (
+ .clock (clock),
+ .resetn (resetn_delayed[RESET_DELAY_ALMOST_EMPTY]),
+ .incr_no_overflow (write_into_fifo),
+ .incr_raw ((ALMOST_EMPTY_GUARD_INCR_RAW) ? write_into_fifo : try_write_into_fifo),
+ .decr_no_underflow (read_from_fifo),
+ .decr_raw (try_read_from_fifo),
+ .threshold_reached (not_almost_empty)
+ );
+ assign almost_empty = ~not_almost_empty;
+ end
+ endgenerate
+
+
+
+ //////////////////////////////////////////////////////////
+ // //
+ // Export signals needed by dla_acl_latency_zero_ram_fifo //
+ // //
+ //////////////////////////////////////////////////////////
+
+ assign zlram_occ_gte_one_E = occ_gte_one_E;
+ assign zlram_stall_out_E = stall_out_E;
+
+endmodule
+
+`default_nettype wire
diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_latency_zero_ram_fifo.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_latency_zero_ram_fifo.sv new file mode 100644 index 0000000..a8e44e2 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_latency_zero_ram_fifo.sv @@ -0,0 +1,592 @@ +// Copyright 2020 Intel Corporation.
+//
+// This software and the related documents are Intel copyrighted materials,
+// and your use of them is governed by the express license under which they
+// were provided to you ("License"). Unless the License provides otherwise,
+// you may not use, modify, copy, publish, distribute, disclose or transmit
+// this software or the related documents without Intel's prior written
+// permission.
+//
+// This software and the related documents are provided as is, with no express
+// or implied warranties, other than those that are expressly stated in the
+// License.
+
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// //
+// ACL LATENCY ZERO RAM FIFO //
+// Designed and optimized by: Jason Thong //
+// //
+// DESCRIPTION //
+// =========== //
+// This fifo has a write to read latency of zero clock cycles, e.g. on the same clock cycle that data is written it is also readable. Zero latency is a bit of a tricky concept in that read_used_words //
+// changes BEFORE write_used_words. The interpretation is that data can bypass the storage associated with a fifo e.g. data does not need to be written to a register or a memory in order to be readable. //
+// //
+// REQUIRED FILES //
+// ============== //
+// - dla_acl_latency_zero_ram_fifo.sv //
+// - dla_acl_latency_one_ram_fifo.sv //
+// - dla_acl_lfsr.sv //
+// - dla_acl_tessellated_incr_decr_threshold.sv //
+// - dla_acl_reset_handler.sv //
+// //
+// RELATIONSHIP TO DLA_ACL_LATENCY_ONE_RAM_FIFO //
+// ======================================== //
+// This fifo is built on top of dla_acl_latency_one_ram_fifo with a combinational logic bypass so that incoming data can be forwarded to the output on the same clock cycle. Therefore it shares the same limits //
+// for maximum earliness, and it shares the caveats inherited all the way from dla_acl_mid_speed_fifo like different implementations for MLAB and M20K. //
+// //
+// RELATIONSHIP TO DLA_ACL_ZERO_LATENCY_FIFO //
+// ===================================== //
+// Functionally, this fifo can be used interchangeably with dla_acl_zero_latency_fifo. The main difference is the logic utilization. This fifo stores data in memory whereas dla_acl_zero_latency_fifo uses registers. //
+// Just like dla_acl_latency_one_ram_fifo vs dla_acl_low_latency_fifo, at shallow depths it is better to use registers, and as the capacity increases eventually memory results in lower logic utilization. //
+// //
+// DLA_HLD_FIFO FEATURES //
+// ================= //
+// This fifo is fully feature complete against all of the parameters exposed by dla_hld_fifo. It follows the same reset scheme of asserting full and empty during reset. Note that REGISTERED_DATA_OUT_COUNT is //
+// applied to the underlying dla_acl_latency_one_ram_fifo. Due to the same clock cycle data bypass, it is impossible for a zero latency fifo to ever have registered output data. //
+// //
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+`default_nettype none
+`include "dla_acl_parameter_assert.svh"
+
+module dla_acl_latency_zero_ram_fifo #(
+ //basic fifo configuration
+ parameter int WIDTH, // width of the data path through the fifo
+ parameter int DEPTH, // capacity of the fifo, at least 1
+
+ //occupancy
+ parameter int ALMOST_EMPTY_CUTOFF = 0, // almost_empty asserts if read_used_words <= ALMOST_EMPTY_CUTOFF, read_used_words increments when writes are visible on the read side, decrements when fifo is read
+ parameter int ALMOST_FULL_CUTOFF = 0, // almost_full asserts if write_used_words >= (DEPTH-ALMOST_FULL_CUTOFF), write_used_words increments when fifo is written to, decrements when fifo is read
+ parameter int INITIAL_OCCUPANCY = 0, // number of words in the fifo (write side occupancy) when it comes out of reset, note it still takes 5 clocks for this to become visible on the read side
+
+ //reset configuration
+ parameter bit ASYNC_RESET = 0, // how do we use reset: 1 means registers are reset asynchronously, 0 means registers are reset synchronously
+ parameter bit SYNCHRONIZE_RESET = 1, // based on how reset gets to us, what do we need to do: 1 means synchronize reset before consumption (if reset arrives asynchronously), 0 means passthrough (managed externally)
+ parameter bit RESET_EVERYTHING = 0, // intended for partial reconfig debug, set to 1 to reset every register (normally async reset excludes data path and sync reset additionally excludes some control signals)
+ parameter bit RESET_EXTERNALLY_HELD = 1, // set to 1 if resetn will be held for at least FOUR clock cycles, otherwise we will internally pulse stretch reset before consumption
+
+ //ram implementation
+ parameter string RAM_BLOCK_TYPE = "FIFO_TO_CHOOSE", // "MLAB" | "M20K" | "FIFO_TO_CHOOSE" -> different implementations for MLAB vs M20K, so cannot let quartus decide in case MLAB or M20K is not explicitly specified
+
+ //special configurations for higher fmax / low area
+ parameter int STALL_IN_EARLINESS = 0, // how many clock cycles early is stall_in provided, fifo supports up to 2, setting this any higher results in registers to absorb the excess earliness
+ parameter int VALID_IN_EARLINESS = 0, // how many clock cycles early is valid_in provided, fifo can take advantage of 1 clock or valid_in earliness if stall_in is also at least 2 clocks early
+ parameter int STALL_IN_OUTSIDE_REGS = 0, // number of registers on the stall-in path external to this module that will delay the propagation of x values on reset (e.g. in dla_hld_fifo)
+ parameter int VALID_IN_OUTSIDE_REGS = 0, // number of registers on the valid-in path external to this module that will delay the propagation of x values on reset (e.g. in dla_hld_fifo)
+ parameter int REGISTERED_DATA_OUT_COUNT = 0,// this is passed to dla_acl_latency_one_ram_fifo, the output of a zero latency fifo can never be registered
+ parameter bit NEVER_OVERFLOWS = 0, // set to 1 to disable fifo's internal overflow protection, area savings by removing one incr/decr/thresh, stall_out still asserts during reset but won't mask valid_in
+
+ //special features that typically have an fmax penalty
+ parameter bit HOLD_DATA_OUT_WHEN_EMPTY = 0, // 0 means data_out can be x when fifo is empty, 1 means data_out will hold last value when fifo is empty (scfifo behavior, has fmax penalty)
+ parameter bit WRITE_AND_READ_DURING_FULL = 0,//set to 1 to allow writing and reading while the fifo is full, this may have an fmax penalty, to compensate it is recommended to use this with NEVER_OVERFLOWS = 1
+
+ //error correction code
+ parameter enable_ecc = "FALSE" // NOT IMPLEMENTED YET, see case:555783
+)
+(
+ input wire clock,
+ input wire resetn, // see description above for different reset modes
+
+ //write interface
+ input wire valid_in, // upstream advertises it has data, a write happens when valid_in & ~stall_out -- this needs to be early if VALID_IN_EARLINESS >= 1
+ input wire [WIDTH-1:0] data_in, // data from upstream
+ output logic stall_out, // inform upstream that we cannot accept data
+ output logic almost_full, // asserts if write_used_words >= (DEPTH-ALMOST_FULL_CUTOFF)
+
+ //read interface
+ output logic valid_out, // advertise to downstream that we have data
+ output logic [WIDTH-1:0] data_out, // data to downstream
+ input wire stall_in, // downstream indicates it cannot accept data -- this needs to be early if STALL_IN_EARLINESS >= 1
+ output logic almost_empty, // asserts if read_used_words <= ALMOST_EMPTY_CUTOFF
+ output logic forced_read_out,// indicates fifo is being read on current clock cycle, read data must be consumed or it will be lost, is a registered signal if STALL_IN_EARLINESS >= 1
+
+ //other
+ output logic [1:0] ecc_err_status // NOT IMPLEMENTED YET, see case:555783
+);
+
+ //////////////////////////////////////
+ // //
+ // Sanity check on the parameters //
+ // //
+ //////////////////////////////////////
+
+ // do not allow arbitrarily large amounts of earliness, as this delays the exit from reset "safe state"
+ // the checks are done in Quartus pro and Modelsim, it is disabled in Quartus standard because it results in a syntax error (parser is based on an older systemverilog standard)
+ // the workaround is to use synthesis translate to hide this from Quartus standard, ALTERA_RESERVED_QHD is only defined in Quartus pro, and Modelsim ignores the synthesis comment
+ `ifdef ALTERA_RESERVED_QHD
+ `else
+ //synthesis translate_off
+ `endif
+
+ generate
+ `DLA_ACL_PARAMETER_ASSERT_MESSAGE(DEPTH >= 1, $sformatf("dla_acl_latency_zero_ram_fifo: illegal value of DEPTH = %d, minimum allowed is 1\n", DEPTH))
+ `DLA_ACL_PARAMETER_ASSERT_MESSAGE(ALMOST_EMPTY_CUTOFF >= 0 && ALMOST_EMPTY_CUTOFF <= DEPTH, $sformatf("dla_acl_latency_zero_ram_fifo: illegal value of ALMOST_EMPTY_CUTOFF = %d, minimum allowed is 0, maximum allowed is DEPTH = %d\n", ALMOST_EMPTY_CUTOFF, DEPTH))
+ `DLA_ACL_PARAMETER_ASSERT_MESSAGE(ALMOST_FULL_CUTOFF >= 0 && ALMOST_FULL_CUTOFF <= DEPTH, $sformatf("dla_acl_latency_zero_ram_fifo: illegal value of ALMOST_FULL_CUTOFF = %d, minimum allowed is 0, maximum allowed is DEPTH = %d\n", ALMOST_FULL_CUTOFF, DEPTH))
+ `DLA_ACL_PARAMETER_ASSERT_MESSAGE(INITIAL_OCCUPANCY >= 0 && INITIAL_OCCUPANCY <= DEPTH, $sformatf("dla_acl_latency_zero_ram_fifo: illegal value of INITIAL_OCCUPANCY = %d, minimum allowed is 0, maximum allowed is DEPTH = %d\n", INITIAL_OCCUPANCY, DEPTH))
+ `DLA_ACL_PARAMETER_ASSERT_MESSAGE(REGISTERED_DATA_OUT_COUNT >= 0 && REGISTERED_DATA_OUT_COUNT <= WIDTH, $sformatf("dla_acl_latency_zero_ram_fifo: illegal value of REGISTERED_DATA_OUT_COUNT = %d, minimum allowed is 0, maximum allowed is WIDTH = %d\n", REGISTERED_DATA_OUT_COUNT, WIDTH))
+ `DLA_ACL_PARAMETER_ASSERT_MESSAGE(STALL_IN_EARLINESS >= 0 && STALL_IN_EARLINESS <= 10, $sformatf("dla_acl_latency_zero_ram_fifo: illegal value of STALL_IN_EARLINESS = %d, minimum allowed is 0, maximum allowed is 10\n", STALL_IN_EARLINESS))
+ `DLA_ACL_PARAMETER_ASSERT_MESSAGE(VALID_IN_EARLINESS >= 0 && VALID_IN_EARLINESS <= 10, $sformatf("dla_acl_latency_zero_ram_fifo: illegal value of VALID_IN_EARLINESS = %d, minimum allowed is 0, maximum allowed is 10\n", VALID_IN_EARLINESS))
+ `DLA_ACL_PARAMETER_ASSERT_MESSAGE(VALID_IN_OUTSIDE_REGS >= 0 && VALID_IN_OUTSIDE_REGS <= 1, $sformatf("dla_acl_high_speed_fifo: illegal value of VALID_IN_OUTSIDE_REGS = %d, minimum allowed is 0, maximum allowed is 1\n", VALID_IN_OUTSIDE_REGS))
+ `DLA_ACL_PARAMETER_ASSERT_MESSAGE(STALL_IN_OUTSIDE_REGS >= 0 && STALL_IN_OUTSIDE_REGS <= 1, $sformatf("dla_acl_high_speed_fifo: illegal value of STALL_IN_OUTSIDE_REGS = %d, minimum allowed is 0, maximum allowed is 1\n", STALL_IN_OUTSIDE_REGS))
+ endgenerate
+
+ `ifdef ALTERA_RESERVED_QHD
+ `else
+ //synthesis translate_on
+ `endif
+
+
+
+ //////////////////////////
+ // //
+ // Parameter settings //
+ // //
+ //////////////////////////
+
+ // earliness configuration
+ localparam int EARLY_MODE = (STALL_IN_EARLINESS >= 1 && VALID_IN_EARLINESS >= 1) ? 1 : 0;
+ localparam int EARLY_VALID = EARLY_MODE;
+ localparam int EXCESS_EARLY_VALID = VALID_IN_EARLINESS - EARLY_VALID;
+ localparam int EARLY_STALL = EARLY_MODE;
+ localparam int EXCESS_EARLY_STALL = STALL_IN_EARLINESS - EARLY_STALL;
+
+ // reset timing
+ localparam int EXCESS_EARLY_STALL_WITH_EXT = EXCESS_EARLY_STALL + STALL_IN_OUTSIDE_REGS; //early stall is affected by regs outside this module; account for effect on reset timing
+ localparam int EXCESS_EARLY_VALID_WITH_EXT = EXCESS_EARLY_VALID + VALID_IN_OUTSIDE_REGS; //early valid is affected by regs outisde this module; account for effect on reset timing
+ localparam int FLUSH_EARLY_PIPES = (EXCESS_EARLY_STALL_WITH_EXT > EXCESS_EARLY_VALID_WITH_EXT) ? EXCESS_EARLY_STALL_WITH_EXT : EXCESS_EARLY_VALID_WITH_EXT; // clocks needs to flush excess earliness pipelines
+ localparam int RESET_SYNC_DEPTH = (SYNCHRONIZE_RESET) ? 3 : 0; // how many registers are added inside dla_acl_reset_handler for synchronizing the reset
+ localparam int RESET_PIPE_DEPTH = 2; // how many pipeline stages we add to sclrn
+ localparam int RESET_LATENCY = (ASYNC_RESET || RESET_EVERYTHING) ? 0 : (RESET_SYNC_DEPTH + RESET_PIPE_DEPTH); // how many clocks from the resetn input signal until the reset is consumed
+ localparam int MIN_RESET_DELAY = EARLY_MODE; // internal occ tracking is 1 clock early when EARLY_MODE=1, 1 clock to propagate to stall_out
+ localparam int RAW_RESET_DELAY = FLUSH_EARLY_PIPES - RESET_LATENCY; // delay fifo exit from safe state if need more clocks to flush earliness than reset latency
+ localparam int RESET_RELEASE_DELAY = (RAW_RESET_DELAY < MIN_RESET_DELAY) ? MIN_RESET_DELAY : RAW_RESET_DELAY; // how many clocks late the fifo exits from safe state
+
+ // reset release delay for the various occupancy trackers
+ localparam int RESET_DELAY_ALMOST_EMPTY = RESET_RELEASE_DELAY - EARLY_MODE;
+ localparam int RESET_DELAY_MAX = RESET_RELEASE_DELAY;
+
+ // properties of the fifo which are consumed by the testbench
+ localparam int WRITE_TO_READ_LATENCY = 0; //once something is written into the fifo, how many clocks later will it be visible on the read side
+ localparam int RESET_EXT_HELD_LENGTH = 4; //if RESET_EXTERNALLY_HELD = 1, how many clocks does reset need to be held for
+ localparam int MAX_CLOCKS_TO_ENTER_SAFE_STATE = 2; //upon assertion of reset, worse case number of clocks until fifo shows both full and empty
+ localparam int MAX_CLOCKS_TO_EXIT_SAFE_STATE = 18; //upon release of reset, worse case number of clocks until fifo is ready to transact (not necessarily observable if INITIAL_OCCUPANCY = DEPTH)
+
+
+
+ ///////////////////////////
+ // //
+ // Signal declarations //
+ // //
+ ///////////////////////////
+
+ // Naming convention: some signals are retimed early, any signal ending with _E has the same earliness as the EARLY_MODE parameter.
+
+ //reset
+ genvar g;
+ logic resetn_synchronized;
+ logic aclrn, sclrn; //these are the typical active low reset signals that are consumed
+ logic sclrn_early_two, sclrn_early; //helpers for sclrn
+ logic [RESET_DELAY_MAX:0] resetn_delayed; //delayed versions of aclrn or sclrn, consumed by the occupancy trackers
+ logic fifo_in_reset; //intended primarily for consumption by testbench to know when fifo is in reset
+
+ //retime stall_in and valid_in to the correct timing, absorb excess earliness that the fifo cannot take advantage of
+ logic stall_in_E, valid_in_E;
+ logic [EXCESS_EARLY_STALL:0] stall_in_pipe;
+ logic [EXCESS_EARLY_VALID:0] valid_in_pipe;
+
+ //signals extracted from dla_acl_latency_one_ram_fifo
+ logic [WIDTH-1:0] fifo_data_out; //data_out from latency one fifo
+ logic occ_gte_one_E, stall_out_E; //early valid_out, early stall_out from latency one fifo
+
+ //write bypass logic
+ logic fifo_valid_in_E; //write enable to latency one fifo
+ logic valid_out_E; //early valid_out for this fifo
+ logic forced_read_out_E; //did we read from this fifo
+ logic occ_gte_one; //if latency one fifo has valid data, then our data_out should use the data_out from latency one fifo
+
+ //almost empty -- most of the logic for this is declared inside the ALMOST_EMPTY_CUTOFF != 0 block
+ logic almost_empty_E;
+
+
+
+ /////////////
+ // //
+ // Reset //
+ // //
+ /////////////
+
+ // the reset structure is identical to dla_acl_mid_speed_fifo
+
+ // S10 reset specification:
+ // S (clocks to enter reset safe state) : 2 for sclrn_early_two to actual register (beware synchronizer takes no time for reset assertion, but it does take time for reset release)
+ // P (minimum duration of reset pulse) : 4 if RESET_EXTERNALLY_HELD = 1, otherwise 1 (we will internally pulse stretch the reset to 4 clocks)
+ // D (clocks to exit reset safe state) : 18 (3 for synchronizer) + (5 for sclrn_early_two to actual register) + (10 for reset release delay for registers that absorb excess earliness)
+
+ dla_acl_reset_handler
+ #(
+ .ASYNC_RESET (ASYNC_RESET),
+ .USE_SYNCHRONIZER (SYNCHRONIZE_RESET),
+ .SYNCHRONIZE_ACLRN (SYNCHRONIZE_RESET),
+ .PIPE_DEPTH (0),
+ .NUM_COPIES (1)
+ )
+ dla_acl_reset_handler_inst
+ (
+ .clk (clock),
+ .i_resetn (resetn),
+ .o_aclrn (aclrn),
+ .o_resetn_synchronized (resetn_synchronized),
+ .o_sclrn (sclrn_early_two)
+ );
+
+ generate
+ if (ASYNC_RESET) begin : async_reset
+ assign sclrn = 1'b1;
+ assign sclrn_early = 1'b1;
+ end
+ else begin : sync_reset
+ logic [2:0] sclrn_chain;
+ always_ff @(posedge clock) begin
+ sclrn_chain <= (sclrn_chain << 1) | sclrn_early_two;
+ sclrn_early <= (RESET_EXTERNALLY_HELD) ? sclrn_early_two : ((&sclrn_chain) & sclrn_early_two);
+ sclrn <= sclrn_early;
+ end
+ end
+ endgenerate
+
+ generate
+ always_comb begin
+ resetn_delayed[0] = (ASYNC_RESET) ? aclrn : sclrn; //delay 0 = original reset timing
+ end
+ for (g=1; g<=RESET_DELAY_MAX; g++) begin : gen_resetn_delayed
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) resetn_delayed[g] <= '0;
+ else begin
+ resetn_delayed[g] <= (ASYNC_RESET && g==1) ? 1'b1 : resetn_delayed[g-1]; //partial reconfig requires no d-input consumption of aclr, so resetn_delayed[1] loads 1'b1 if ASYNC_RESET
+ if (~sclrn_early) resetn_delayed[g] <= '0; //resetn_delayed goes into reset as the same time as sclrn, since this is registered need to peek one clock ahead of sclrn
+ end
+ end
+ end
+ endgenerate
+
+ //fifo_in_reset is consumed by the testbench to know whether the fifo is still in reset, can't use stall_out when fifo starts as full
+ //unlike other fifos, fifo_in_reset is never exposed on the output, as stall_out comes from dla_acl_latency_one_ram_fifo
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) fifo_in_reset <= 1'b1;
+ else begin
+ fifo_in_reset <= 1'b0;
+ if (~resetn_delayed[RESET_RELEASE_DELAY]) fifo_in_reset <= 1'b1;
+ end
+ end
+
+
+
+ ////////////////////////////////////////////////
+ // //
+ // Absorb excess earliness on input signals //
+ // //
+ ////////////////////////////////////////////////
+
+ generate
+ always_comb begin
+ stall_in_pipe[0] = stall_in;
+ valid_in_pipe[0] = valid_in;
+ end
+ for (g=1; g<=EXCESS_EARLY_STALL; g++) begin : gen_stall_in_delayed
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) stall_in_pipe[g] <= 1'b1;
+ else begin
+ stall_in_pipe[g] <= stall_in_pipe[g-1];
+ if (~sclrn && RESET_EVERYTHING) stall_in_pipe[g] <= 1'b1;
+ end
+ end
+ end
+ for (g=1; g<=EXCESS_EARLY_VALID; g++) begin : gen_valid_in_delayed
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) valid_in_pipe[g] <= 1'b0;
+ else begin
+ valid_in_pipe[g] <= valid_in_pipe[g-1];
+ if (~sclrn && RESET_EVERYTHING) valid_in_pipe[g] <= 1'b0;
+ end
+ end
+ end
+ endgenerate
+ assign stall_in_E = stall_in_pipe[EXCESS_EARLY_STALL];
+ assign valid_in_E = valid_in_pipe[EXCESS_EARLY_VALID];
+
+
+
+ ////////////////////////////////////////
+ // //
+ // Instantiate the latency one fifo //
+ // //
+ ////////////////////////////////////////
+
+ dla_acl_latency_one_ram_fifo
+ #(
+ .WIDTH (WIDTH),
+ .DEPTH (DEPTH),
+ .ALMOST_EMPTY_CUTOFF (0), //almost_empty is managed externally because read_used_words changes before write_used_words
+ .ALMOST_FULL_CUTOFF (ALMOST_FULL_CUTOFF),
+ .INITIAL_OCCUPANCY (INITIAL_OCCUPANCY),
+ .ASYNC_RESET (ASYNC_RESET),
+ .SYNCHRONIZE_RESET (0), //do not synchronize the reset again, this ensures that e.g. stall_out deasserting upon reset exit happens on the same clock cycle here and well as inside latency one fifo
+ .RESET_EVERYTHING (RESET_EVERYTHING),
+ .RESET_EXTERNALLY_HELD (RESET_EXTERNALLY_HELD),
+ .STALL_IN_EARLINESS (EARLY_MODE), //we have to absorb excess earliness so that valid_in and stall_in have the same earliness (needed for bypass logic), and that earliness can only be 0 or 1...
+ .VALID_IN_EARLINESS (EARLY_MODE),
+ .REGISTERED_DATA_OUT_COUNT (REGISTERED_DATA_OUT_COUNT),
+ .NEVER_OVERFLOWS (NEVER_OVERFLOWS),
+ .HOLD_DATA_OUT_WHEN_EMPTY (0),
+ .WRITE_AND_READ_DURING_FULL (WRITE_AND_READ_DURING_FULL),
+ .ZLRAM_RESET_RELEASE_DELAY_OVERRIDE(RESET_RELEASE_DELAY), //...but if valid_in or stall_in are very early, we still need the fifo to exit from reset safe state later than usual
+ .enable_ecc (enable_ecc)
+ )
+ llram_fifo_inst
+ (
+ .clock (clock),
+ .resetn (resetn_synchronized),
+
+ .valid_in (fifo_valid_in_E),
+ .data_in (data_in),
+ .stall_out (stall_out),
+ .almost_full (almost_full),
+
+ .valid_out (),
+ .data_out (fifo_data_out),
+ .stall_in (stall_in_E),
+ .almost_empty (), //almost_empty is managed externally because read_used_words changes before write_used_words
+ .forced_read_out (),
+
+ //special signals exposed by llram fifo needed by zlram fifo
+ .zlram_occ_gte_one_E (occ_gte_one_E), //this is basically early valid_out from the latency one fifo
+ .zlram_stall_out_E (stall_out_E), //early stall_out
+
+ .ecc_err_status (ecc_err_status)
+ );
+
+
+
+ ////////////////////////////////////////////////////////////////
+ // //
+ // Wrapper logic to transform latency one into latency zero //
+ // //
+ ////////////////////////////////////////////////////////////////
+
+ //write into the fifo if the zero latency bypass is not used
+ assign fifo_valid_in_E = valid_in_E & (stall_in_E | occ_gte_one_E);
+
+ //valid_out = (read_used_words != 0), happens when there is an incoming write or write_used_words != 0
+ //stall_out_E is only used to mask valid_out_E from asserting during reset due to valid_in_E
+ assign valid_out_E = occ_gte_one_E | (valid_in_E & ~stall_out_E);
+ assign forced_read_out_E = valid_out_E & ~stall_in_E;
+
+ //retime to no earliness before exporting signals to outside world
+ generate
+ if (EARLY_MODE == 1) begin : early1
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) begin
+ occ_gte_one <= 1'b0;
+ valid_out <= 1'b0;
+ forced_read_out <= 1'b0;
+ almost_empty <= 1'b1;
+ end
+ else begin
+ occ_gte_one <= occ_gte_one_E;
+ valid_out <= valid_out_E;
+ forced_read_out <= forced_read_out_E;
+ almost_empty <= almost_empty_E;
+ if (~sclrn) begin
+ occ_gte_one <= 1'b0;
+ valid_out <= 1'b0;
+ forced_read_out <= 1'b0;
+ almost_empty <= 1'b1;
+ end
+ end
+ end
+ end
+ else begin : early0
+ assign occ_gte_one = occ_gte_one_E;
+ assign valid_out = valid_out_E;
+ assign forced_read_out = forced_read_out_E;
+ assign almost_empty = almost_empty_E;
+ end
+ endgenerate
+
+
+
+ ///////////////////
+ // //
+ // Output data //
+ // //
+ ///////////////////
+
+ // take it from the low latency fifo if it has data (this keeps stuff in order), otherwise the fifo is empty so use the data bypass
+ // when holding the output data, the HOLD_DATA_OUT_WHEN_EMPTY parameter to the low latency fifo does not work when data is read directly from the bypass
+ // because in this case it never got written into the low latency fifo (and writing it causes lots of complications)
+ generate
+ if (!HOLD_DATA_OUT_WHEN_EMPTY) begin : normal_data_out
+ assign data_out = (occ_gte_one) ? fifo_data_out : data_in;
+ end
+ else begin : held_data_out
+ logic data_sel_pri_E, data_sel_sec_E, data_sel_pri, data_sel_sec;
+ logic captured_data_clock_en_E, captured_data_clock_en;
+ logic [WIDTH-1:0] captured_data_out;
+
+ assign data_sel_pri_E = occ_gte_one_E;
+ assign data_sel_sec_E = valid_in_E;
+ assign captured_data_clock_en_E = valid_out_E & ~stall_in_E;
+
+ if (EARLY_MODE == 1) begin : data_out_e1
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) begin
+ data_sel_pri <= (RESET_EVERYTHING) ? '0 : 'x;
+ data_sel_sec <= (RESET_EVERYTHING) ? '0 : 'x;
+ captured_data_clock_en <= (RESET_EVERYTHING) ? '0 : 'x;
+ end
+ else begin
+ data_sel_pri <= data_sel_pri_E;
+ data_sel_sec <= data_sel_sec_E;
+ captured_data_clock_en <= captured_data_clock_en_E;
+ if (~sclrn && RESET_EVERYTHING) begin
+ data_sel_pri <= 1'b0;
+ data_sel_sec <= 1'b0;
+ captured_data_clock_en <= 1'b0;
+ end
+ end
+ end
+ end
+ else begin : data_out_e0
+ assign data_sel_pri = data_sel_pri_E;
+ assign data_sel_sec = data_sel_sec_E;
+ assign captured_data_clock_en = captured_data_clock_en_E;
+ end
+
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) begin
+ captured_data_out <= (RESET_EVERYTHING) ? '0 : 'x;
+ end
+ else begin
+ if (captured_data_clock_en) captured_data_out <= data_out;
+ if (~sclrn && RESET_EVERYTHING) captured_data_out <= '0;
+ end
+ end
+
+ assign data_out = (data_sel_pri) ? fifo_data_out : (data_sel_sec) ? data_in : captured_data_out;
+ end
+ endgenerate
+
+
+
+
+ ////////////////////
+ // //
+ // Almost empty //
+ // //
+ ////////////////////
+
+ // Almost empty is very tricky because read_used_words changes before write_used_words. Take advantage of this property: read_used_words = write_used_words + write
+ // We use two separate occupancy trackers, one detects the original almost empty threhsold (valid if not writing), the other detects an adjust almost empty threshold (valid if writing into fifo).
+ // The value we output for almost_empty is simply muxed between these two occupancy trackers. Things get a bit complicated when we factor in all of the parameterizations that dla_hld_fifo could use.
+
+ generate
+ if (ALMOST_EMPTY_CUTOFF == 0) begin : empty_almost_empty
+ assign almost_empty_E = ~valid_out_E;
+ end
+ else begin : real_almost_empty
+
+ logic fifo_in_reset_E; //early version of fifo_in_reset
+ logic write_into_fifo_E, try_write_into_fifo_E; //are we writing or trying to writ into the fifo
+ logic read_from_fifo_E, try_read_from_fifo_E; //are we reading or trying to read from the fifo
+ logic not_almost_empty_z_E, not_almost_empty_m1_E; //only needed because occ trackers export threshold_reached, we want threshold not reached
+ logic almost_empty_z_E, almost_empty_m1_E; //almost empty with original threshold (valid if not writing), almost empty with adjusted threshold (valid if writing)
+ logic write_into_fifo_for_almost_empty_E; //are we actually writing, there are some complications with NEVER_OVERFLOWS and WRITE_AND_READ_DURING_FULL
+
+ assign write_into_fifo_E = valid_in_E & ~stall_out_E;
+ assign try_write_into_fifo_E = valid_in_E;
+ assign read_from_fifo_E = valid_out_E & ~stall_in_E;
+ assign try_read_from_fifo_E = ~stall_in_E;
+
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) fifo_in_reset_E <= 1'b1;
+ else begin
+ fifo_in_reset_E <= 1'b0;
+ if (~resetn_delayed[RESET_RELEASE_DELAY-EARLY_MODE]) fifo_in_reset_E <= 1'b1;
+ end
+ end
+
+ //this is the normal almost empty that we would see if not writing into the fifo, read_used_words = write_used_word
+ localparam bit ALMOST_EMPTY_Z_GUARD_INCR_RAW = (ALMOST_EMPTY_CUTOFF == INITIAL_OCCUPANCY) ? 1'b1 : 1'b0;
+ localparam bit ALMOST_EMPTY_Z_GUARD_DECR_RAW = (ALMOST_EMPTY_CUTOFF == 0) ? 1'b1 : 1'b0;
+ dla_acl_tessellated_incr_decr_threshold #(
+ .CAPACITY (DEPTH),
+ .THRESHOLD (ALMOST_EMPTY_CUTOFF + 1),
+ .INITIAL_OCCUPANCY (INITIAL_OCCUPANCY),
+ .THRESHOLD_REACHED_AT_RESET (0),
+ .WRITE_AND_READ_DURING_FULL (WRITE_AND_READ_DURING_FULL),
+ .WRITE_AND_READ_DURING_EMPTY(1),
+ .ASYNC_RESET (ASYNC_RESET),
+ .SYNCHRONIZE_RESET (0),
+ .RESET_EVERYTHING (RESET_EVERYTHING),
+ .RESET_EXTERNALLY_HELD (1)
+ )
+ almost_empty_z_inst
+ (
+ .clock (clock),
+ .resetn (resetn_delayed[RESET_DELAY_ALMOST_EMPTY]),
+ .incr_no_overflow (write_into_fifo_E),
+ .incr_raw ((ALMOST_EMPTY_Z_GUARD_INCR_RAW) ? write_into_fifo_E : try_write_into_fifo_E),
+ .decr_no_underflow (read_from_fifo_E),
+ .decr_raw ((ALMOST_EMPTY_Z_GUARD_DECR_RAW) ? read_from_fifo_E : try_read_from_fifo_E),
+ .threshold_reached (not_almost_empty_z_E)
+ );
+ assign almost_empty_z_E = ~not_almost_empty_z_E;
+
+
+ //this is the adjusted almost empty that we would see if writing into the fifo, read_used_words = write_used_word+1
+ localparam bit ALMOST_EMPTY_M1_GUARD_INCR_RAW = ((ALMOST_EMPTY_CUTOFF-1) == INITIAL_OCCUPANCY) ? 1'b1 : 1'b0;
+ localparam bit ALMOST_EMPTY_M1_GUARD_DECR_RAW = ((ALMOST_EMPTY_CUTOFF-1) == 0) ? 1'b1 : 1'b0;
+ dla_acl_tessellated_incr_decr_threshold #(
+ .CAPACITY (DEPTH),
+ .THRESHOLD (ALMOST_EMPTY_CUTOFF),
+ .INITIAL_OCCUPANCY (INITIAL_OCCUPANCY),
+ .THRESHOLD_REACHED_AT_RESET (0),
+ .WRITE_AND_READ_DURING_FULL (WRITE_AND_READ_DURING_FULL),
+ .WRITE_AND_READ_DURING_EMPTY(1),
+ .ASYNC_RESET (ASYNC_RESET),
+ .SYNCHRONIZE_RESET (0),
+ .RESET_EVERYTHING (RESET_EVERYTHING),
+ .RESET_EXTERNALLY_HELD (1)
+ )
+ almost_empty_m1_inst
+ (
+ .clock (clock),
+ .resetn (resetn_delayed[RESET_DELAY_ALMOST_EMPTY]),
+ .incr_no_overflow (write_into_fifo_E),
+ .incr_raw ((ALMOST_EMPTY_M1_GUARD_INCR_RAW) ? write_into_fifo_E : try_write_into_fifo_E),
+ .decr_no_underflow (read_from_fifo_E),
+ .decr_raw ((ALMOST_EMPTY_M1_GUARD_DECR_RAW) ? read_from_fifo_E : try_read_from_fifo_E),
+ .threshold_reached (not_almost_empty_m1_E)
+ );
+ assign almost_empty_m1_E = ~not_almost_empty_m1_E;
+
+
+ //if writing normally should just be: valid_in & ~stall_out, things get a bit complicated when we have never overflows and write and read during full
+ //but these special cases are only relevant when the almost empty cutoff is large enough that valid_in is impacted by fifo full (also note that full asserts during reset)
+ if ((ALMOST_EMPTY_CUTOFF == DEPTH) && NEVER_OVERFLOWS) begin
+ assign write_into_fifo_for_almost_empty_E = valid_in_E & ~fifo_in_reset_E;
+ end
+ else if ((ALMOST_EMPTY_CUTOFF == DEPTH) && WRITE_AND_READ_DURING_FULL) begin
+ assign write_into_fifo_for_almost_empty_E = valid_in_E & ((~fifo_in_reset_E & ~stall_in_E) | ~stall_out_E);
+ end
+ else begin
+ assign write_into_fifo_for_almost_empty_E = valid_in_E & ~stall_out_E; //this is identical to write_into_fifo_E
+ end
+
+ assign almost_empty_E = (write_into_fifo_for_almost_empty_E) ? almost_empty_m1_E : almost_empty_z_E;
+ end
+ endgenerate
+
+endmodule
+
+`default_nettype wire
diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_lfsr.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_lfsr.sv new file mode 100644 index 0000000..f186603 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_lfsr.sv @@ -0,0 +1,1725 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +// Linear feedback shift register, maximal length sequences using only 2-input xor gates. Use Fibonacci LFSR if WIDTH has a known configuration
+// using only 2 taps in the single feedback xor. Otherwise use Galois LFSR (2-input xor gates inside the shift register, only 3 are needed)
+//
+// This implementation uses XNOR, which means the illegal state is all ones. With initial occupancy as 0, state will reset to 0.
+//
+// IMPORTANT: this module has only been tested up to 24 bits. The LFSR tables have been extracted from "Table of Linear Feedback Shift Registers"
+// by Roy Wardand and Tim Molteno, published in 2007. There is probably no easy way to validate that a sequence goes through all 2^N-1 states
+// exactly once as N gets large.
+//
+// This module was designed in conjunction with dla_acl_high_speed_fifo.sv. The testbench is grouped together with the fifo.
+//
+// Required files:
+// -dla_acl_lfsr.sv
+// -dla_acl_reset_handler.sv
+//
+// TEMPORARY FIX:
+// Reset values are set to match the behavior of before reset cleanup. See FB case:457213. This is a workaround for now.
+// Eventually the compiler needs to set the reset parameters correctly, at which point the default values will be set
+// back to the original intent, which is for someone who knows nothing about the reset in their system.
+
+`default_nettype none
+
+module dla_acl_lfsr #(
+ parameter int WIDTH, // at least 2, up to 512
+ parameter bit ASYNC_RESET=1, // how do we use reset: 1 means registers are reset asynchronously, 0 means registers are reset synchronously
+ parameter bit SYNCHRONIZE_RESET=0, // based on how reset gets to us, what do we need to do: 1 means synchronize reset before consumption (if reset arrives asynchronously), 0 means passthrough (managed externally)
+ //RESET_EVERYTHING not needed since we already reset all registers
+ //RESET_EXTERNALLY_HELD not needed since reset pulse stretcher is not needed
+ parameter int INITIAL_OCCUPANCY=0 // if enable was asserted for INITIAL_OCCUPANCY clock cycles what would the state of the lfsr be, use this as the reset value instead of the original reset value
+)
+(
+ input wire clock,
+ input wire resetn, // WARNING: to enable retiming one must set ASYNC_RESET=0 and provide a register chain driving this resetn outside of this module
+ input wire enable,
+ output logic [WIDTH-1:0] state
+);
+
+logic aclrn, sclrn;
+dla_acl_reset_handler
+#(
+ .ASYNC_RESET (ASYNC_RESET),
+ .USE_SYNCHRONIZER (SYNCHRONIZE_RESET),
+ .SYNCHRONIZE_ACLRN (SYNCHRONIZE_RESET),
+ .PIPE_DEPTH (0),
+ .NUM_COPIES (1)
+)
+dla_acl_reset_handler_inst
+(
+ .clk (clock),
+ .i_resetn (resetn),
+ .o_aclrn (aclrn),
+ .o_resetn_synchronized (),
+ .o_sclrn (sclrn)
+);
+
+generate
+if (WIDTH == 2) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 1), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 3) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 2), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 4) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 3), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 5) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 3), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 6) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 5), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 7) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 6), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 8) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 6), .T2( 5), .T3( 4), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 9) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 5), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 10) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 7), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 11) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 9), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 12) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 11), .T2( 8), .T3( 6), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 13) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 12), .T2( 10), .T3( 9), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 14) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 13), .T2( 11), .T3( 9), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 15) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 14), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 16) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 14), .T2( 13), .T3( 11), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 17) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 14), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 18) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 11), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 19) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 18), .T2( 17), .T3( 14), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 20) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 17), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 21) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 19), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 22) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 21), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 23) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 18), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 24) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 23), .T2( 21), .T3( 20), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 25) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 22), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 26) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 25), .T2( 24), .T3( 20), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 27) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 26), .T2( 25), .T3( 22), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 28) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 25), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 29) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 27), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 30) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 29), .T2( 26), .T3( 24), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 31) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 28), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 32) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 30), .T2( 26), .T3( 25), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 33) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 20), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 34) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 31), .T2( 30), .T3( 26), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 35) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 33), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 36) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 25), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 37) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 36), .T2( 33), .T3( 31), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 38) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 37), .T2( 33), .T3( 32), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 39) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 35), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 40) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 37), .T2( 36), .T3( 35), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 41) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 38), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 42) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 40), .T2( 37), .T3( 35), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 43) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 42), .T2( 38), .T3( 37), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 44) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 42), .T2( 39), .T3( 38), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 45) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 44), .T2( 42), .T3( 41), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 46) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 40), .T2( 39), .T3( 38), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 47) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 42), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 48) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 44), .T2( 41), .T3( 39), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 49) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 40), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 50) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 48), .T2( 47), .T3( 46), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 51) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 50), .T2( 48), .T3( 45), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 52) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 49), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 53) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 52), .T2( 51), .T3( 47), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 54) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 51), .T2( 48), .T3( 46), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 55) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 31), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 56) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 54), .T2( 52), .T3( 49), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 57) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 50), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 58) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 39), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 59) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 57), .T2( 55), .T3( 52), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 60) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 59), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 61) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 60), .T2( 59), .T3( 56), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 62) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 59), .T2( 57), .T3( 56), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 63) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 62), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 64) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 63), .T2( 61), .T3( 60), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 65) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 47), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 66) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 60), .T2( 58), .T3( 57), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 67) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 66), .T2( 65), .T3( 62), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 68) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 59), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 69) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 67), .T2( 64), .T3( 63), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 70) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 69), .T2( 67), .T3( 65), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 71) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 65), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 72) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 69), .T2( 63), .T3( 62), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 73) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 48), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 74) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 71), .T2( 70), .T3( 67), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 75) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 74), .T2( 72), .T3( 69), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 76) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 74), .T2( 72), .T3( 71), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 77) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 75), .T2( 72), .T3( 71), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 78) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 77), .T2( 76), .T3( 71), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 79) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 70), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 80) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 78), .T2( 76), .T3( 71), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 81) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 77), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 82) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 78), .T2( 76), .T3( 73), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 83) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 81), .T2( 79), .T3( 76), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 84) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 71), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 85) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 84), .T2( 83), .T3( 77), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 86) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 84), .T2( 81), .T3( 80), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 87) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 74), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 88) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 80), .T2( 79), .T3( 77), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 89) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 51), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 90) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 88), .T2( 87), .T3( 85), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 91) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 90), .T2( 86), .T3( 83), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 92) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 90), .T2( 87), .T3( 86), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 93) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 91), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 94) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 73), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 95) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 84), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 96) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 90), .T2( 87), .T3( 86), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 97) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 91), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 98) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 87), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 99) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 95), .T2( 94), .T3( 92), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 100) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 63), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 101) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(100), .T2( 95), .T3( 94), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 102) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1( 99), .T2( 97), .T3( 96), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 103) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 94), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 104) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(103), .T2( 94), .T3( 93), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 105) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 89), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 106) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 91), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 107) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(105), .T2( 99), .T3( 98), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 108) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 77), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 109) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(107), .T2(105), .T3( 10), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 110) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(109), .T2(106), .T3( 10), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 111) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(101), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 112) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(108), .T2(106), .T3( 10), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 113) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(104), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 114) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(113), .T2(112), .T3( 10), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 115) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(110), .T2(108), .T3( 10), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 116) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(114), .T2(111), .T3( 11), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 117) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(116), .T2(115), .T3( 11), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 118) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 85), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 119) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(111), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 120) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(118), .T2(114), .T3(111), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 121) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(103), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 122) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(121), .T2(120), .T3(116), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 123) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(121), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 124) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 87), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 125) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(120), .T2(119), .T3(118), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 126) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(124), .T2(122), .T3(119), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 127) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(126), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 128) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(127), .T2(126), .T3(121), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 129) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(124), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 130) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(127), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 131) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(129), .T2(128), .T3(123), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 132) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(103), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 133) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(131), .T2(125), .T3(124), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 134) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 77), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 135) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(124), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 136) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(134), .T2(133), .T3(128), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 137) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(116), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 138) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(137), .T2(131), .T3(130), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 139) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(136), .T2(134), .T3(131), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 140) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(111), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 141) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(140), .T2(135), .T3(128), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 142) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(121), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 143) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(141), .T2(140), .T3(138), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 144) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(142), .T2(140), .T3(137), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 145) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 93), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 146) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(144), .T2(143), .T3(141), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 147) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(145), .T2(143), .T3(136), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 148) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(121), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 149) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(142), .T2(140), .T3(139), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 150) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 97), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 151) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(148), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 152) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(150), .T2(149), .T3(146), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 153) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(152), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 154) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(153), .T2(149), .T3(145), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 155) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(151), .T2(150), .T3(148), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 156) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(153), .T2(151), .T3(147), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 157) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(155), .T2(152), .T3(151), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 158) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(153), .T2(152), .T3(150), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 159) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(128), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 160) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(158), .T2(157), .T3(155), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 161) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(143), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 162) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(158), .T2(155), .T3(154), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 163) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(160), .T2(157), .T3(156), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 164) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(159), .T2(158), .T3(152), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 165) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(162), .T2(157), .T3(156), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 166) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(164), .T2(163), .T3(156), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 167) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(161), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 168) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(162), .T2(159), .T3(152), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 169) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(135), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 170) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(147), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 171) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(169), .T2(166), .T3(165), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 172) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(165), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 173) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(171), .T2(168), .T3(165), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 174) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(161), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 175) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(169), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 176) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(167), .T2(165), .T3(164), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 177) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(169), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 178) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1( 91), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 179) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(178), .T2(177), .T3(175), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 180) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(173), .T2(170), .T3(168), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 181) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(180), .T2(175), .T3(174), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 182) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(181), .T2(176), .T3(174), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 183) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(127), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 184) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(177), .T2(176), .T3(175), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 185) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(161), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 186) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(180), .T2(178), .T3(177), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 187) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(182), .T2(181), .T3(180), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 188) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(186), .T2(183), .T3(182), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 189) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(187), .T2(184), .T3(183), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 190) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(188), .T2(184), .T3(177), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 191) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(182), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 192) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(190), .T2(178), .T3(177), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 193) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(178), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 194) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(107), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 195) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(193), .T2(192), .T3(187), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 196) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(194), .T2(187), .T3(185), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 197) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(195), .T2(193), .T3(188), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 198) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(133), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 199) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(165), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 200) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(198), .T2(197), .T3(195), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 201) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(187), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 202) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(147), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 203) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(202), .T2(196), .T3(195), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 204) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(201), .T2(200), .T3(194), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 205) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(203), .T2(200), .T3(196), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 206) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(201), .T2(197), .T3(196), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 207) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(164), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 208) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(207), .T2(205), .T3(199), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 209) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(203), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 210) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(207), .T2(206), .T3(198), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 211) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(203), .T2(201), .T3(200), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 212) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(107), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 213) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(211), .T2(208), .T3(207), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 214) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(213), .T2(211), .T3(209), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 215) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(192), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 216) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(215), .T2(213), .T3(209), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 217) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(172), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 218) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(207), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 219) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(218), .T2(215), .T3(211), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 220) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(211), .T2(210), .T3(208), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 221) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(219), .T2(215), .T3(213), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 222) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(220), .T2(217), .T3(214), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 223) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(190), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 224) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(222), .T2(217), .T3(212), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 225) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(193), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 226) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(223), .T2(219), .T3(216), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 227) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(223), .T2(218), .T3(217), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 228) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(226), .T2(217), .T3(216), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 229) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(228), .T2(225), .T3(219), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 230) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(224), .T2(223), .T3(222), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 231) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(205), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 232) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(228), .T2(223), .T3(221), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 233) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(159), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 234) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(203), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 235) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(234), .T2(229), .T3(226), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 236) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(231), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 237) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(236), .T2(233), .T3(230), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 238) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(237), .T2(236), .T3(233), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 239) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(203), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 240) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(237), .T2(235), .T3(232), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 241) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(171), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 242) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(241), .T2(236), .T3(231), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 243) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(242), .T2(238), .T3(235), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 244) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(243), .T2(240), .T3(235), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 245) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(244), .T2(241), .T3(239), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 246) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(245), .T2(244), .T3(235), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 247) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(165), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 248) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(238), .T2(234), .T3(233), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 249) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(163), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 250) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(147), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 251) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(249), .T2(247), .T3(244), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 252) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(185), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 253) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(252), .T2(247), .T3(246), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 254) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(253), .T2(252), .T3(247), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 255) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(203), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 256) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(254), .T2(251), .T3(246), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 257) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(245), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 258) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(175), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 259) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(257), .T2(253), .T3(249), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 260) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(253), .T2(252), .T3(250), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 261) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(257), .T2(255), .T3(254), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 262) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(258), .T2(254), .T3(253), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 263) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(170), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 264) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(263), .T2(255), .T3(254), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 265) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(223), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 266) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(219), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 267) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(264), .T2(261), .T3(259), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 268) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(243), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 269) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(268), .T2(263), .T3(262), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 270) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(217), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 271) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(213), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 272) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(270), .T2(266), .T3(263), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 273) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(250), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 274) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(207), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 275) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(266), .T2(265), .T3(264), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 276) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(275), .T2(273), .T3(270), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 277) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(274), .T2(271), .T3(265), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 278) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(273), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 279) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(274), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 280) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(278), .T2(275), .T3(271), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 281) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(188), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 282) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(247), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 283) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(278), .T2(276), .T3(271), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 284) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(165), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 285) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(280), .T2(278), .T3(275), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 286) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(217), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 287) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(216), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 288) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(287), .T2(278), .T3(277), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 289) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(268), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 290) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(288), .T2(287), .T3(285), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 291) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(286), .T2(280), .T3(279), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 292) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(195), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 293) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(292), .T2(287), .T3(282), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 294) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(233), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 295) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(247), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 296) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(292), .T2(287), .T3(285), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 297) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(292), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 298) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(294), .T2(290), .T3(287), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 299) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(295), .T2(293), .T3(288), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 300) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(293), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 301) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(299), .T2(296), .T3(292), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 302) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(261), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 303) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(297), .T2(291), .T3(290), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 304) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(303), .T2(302), .T3(293), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 305) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(203), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 306) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(305), .T2(303), .T3(299), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 307) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(305), .T2(303), .T3(299), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 308) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(306), .T2(299), .T3(293), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 309) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(307), .T2(302), .T3(299), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 310) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(309), .T2(305), .T3(302), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 311) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(308), .T2(306), .T3(304), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 312) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(307), .T2(302), .T3(301), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 313) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(234), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 314) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(299), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 315) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(314), .T2(306), .T3(305), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 316) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(181), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 317) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(315), .T2(313), .T3(310), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 318) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(313), .T2(312), .T3(310), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 319) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(283), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 320) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(319), .T2(317), .T3(316), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 321) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(290), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 322) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(255), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 323) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(322), .T2(320), .T3(313), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 324) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(321), .T2(320), .T3(318), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 325) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(323), .T2(320), .T3(315), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 326) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(325), .T2(323), .T3(316), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 327) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(293), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 328) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(323), .T2(321), .T3(319), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 329) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(279), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 330) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(328), .T2(323), .T3(322), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 331) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(329), .T2(325), .T3(321), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 332) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(209), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 333) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(331), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 334) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(333), .T2(330), .T3(327), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 335) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(333), .T2(328), .T3(325), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 336) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(335), .T2(332), .T3(329), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 337) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(282), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 338) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(336), .T2(335), .T3(332), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 339) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(332), .T2(329), .T3(323), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 340) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(337), .T2(336), .T3(329), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 341) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(336), .T2(330), .T3(327), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 342) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(217), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 343) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(268), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 344) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(338), .T2(334), .T3(333), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 345) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(323), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 346) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(344), .T2(339), .T3(335), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 347) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(344), .T2(337), .T3(336), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 348) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(344), .T2(341), .T3(340), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 349) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(347), .T2(344), .T3(343), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 350) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(297), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 351) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(317), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 352) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(346), .T2(341), .T3(339), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 353) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(284), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 354) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(349), .T2(341), .T3(340), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 355) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(354), .T2(350), .T3(349), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 356) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(349), .T2(347), .T3(346), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 357) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(355), .T2(347), .T3(346), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 358) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(351), .T2(350), .T3(344), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 359) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(291), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 360) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(359), .T2(335), .T3(334), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 361) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(360), .T2(357), .T3(354), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 362) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(299), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 363) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(362), .T2(356), .T3(355), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 364) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(297), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 365) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(360), .T2(359), .T3(356), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 366) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(337), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 367) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(346), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 368) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(361), .T2(359), .T3(351), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 369) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(278), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 370) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(231), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 371) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(369), .T2(368), .T3(363), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 372) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(369), .T2(365), .T3(357), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 373) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(371), .T2(366), .T3(365), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 374) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(369), .T2(368), .T3(366), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 375) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(359), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 376) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(371), .T2(369), .T3(368), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 377) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(336), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 378) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(335), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 379) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(375), .T2(370), .T3(369), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 380) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(333), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 381) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(380), .T2(379), .T3(376), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 382) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(301), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 383) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(293), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 384) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(378), .T2(369), .T3(368), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 385) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(379), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 386) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(303), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 387) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(385), .T2(379), .T3(378), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 388) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(387), .T2(385), .T3(374), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 389) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(384), .T2(380), .T3(379), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 390) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(301), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 391) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(363), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 392) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(386), .T2(382), .T3(379), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 393) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(386), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 394) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(259), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 395) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(390), .T2(389), .T3(384), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 396) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(371), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 397) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(392), .T2(387), .T3(385), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 398) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(393), .T2(392), .T3(384), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 399) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(313), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 400) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(398), .T2(397), .T3(395), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 401) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(249), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 402) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(399), .T2(398), .T3(393), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 403) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(398), .T2(395), .T3(394), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 404) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(215), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 405) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(398), .T2(397), .T3(388), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 406) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(249), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 407) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(336), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 408) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(407), .T2(403), .T3(401), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 409) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(322), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 410) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(407), .T2(406), .T3(400), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 411) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(408), .T2(401), .T3(399), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 412) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(265), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 413) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(407), .T2(406), .T3(403), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 414) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(405), .T2(401), .T3(398), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 415) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(313), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 416) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(414), .T2(411), .T3(407), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 417) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(310), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 418) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(417), .T2(415), .T3(403), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 419) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(415), .T2(414), .T3(404), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 420) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(412), .T2(410), .T3(407), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 421) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(419), .T2(417), .T3(416), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 422) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(273), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 423) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(398), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 424) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(422), .T2(417), .T3(415), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 425) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(413), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 426) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(415), .T2(414), .T3(412), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 427) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(422), .T2(421), .T3(416), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 428) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(323), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 429) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(422), .T2(421), .T3(419), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 430) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(419), .T2(417), .T3(415), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 431) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(311), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 432) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(429), .T2(428), .T3(419), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 433) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(400), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 434) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(429), .T2(423), .T3(422), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 435) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(430), .T2(426), .T3(423), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 436) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(271), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 437) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(436), .T2(435), .T3(431), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 438) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(373), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 439) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(390), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 440) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(439), .T2(437), .T3(436), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 441) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(410), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 442) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(440), .T2(437), .T3(435), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 443) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(442), .T2(437), .T3(433), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 444) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(435), .T2(432), .T3(431), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 445) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(441), .T2(439), .T3(438), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 446) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(341), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 447) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(374), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 448) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(444), .T2(442), .T3(437), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 449) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(315), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 450) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(371), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 451) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(450), .T2(441), .T3(435), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 452) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(448), .T2(447), .T3(446), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 453) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(449), .T2(447), .T3(438), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 454) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(449), .T2(445), .T3(444), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 455) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(417), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 456) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(454), .T2(445), .T3(433), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 457) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(441), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 458) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(255), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 459) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(457), .T2(454), .T3(447), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 460) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(399), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 461) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(460), .T2(455), .T3(454), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 462) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(389), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 463) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(370), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 464) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(460), .T2(455), .T3(441), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 465) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(406), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 466) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(460), .T2(455), .T3(452), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 467) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(466), .T2(461), .T3(456), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 468) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(464), .T2(459), .T3(453), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 469) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(467), .T2(464), .T3(460), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 470) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(321), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 471) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(470), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 472) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(470), .T2(469), .T3(461), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 473) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(470), .T2(467), .T3(465), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 474) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(283), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 475) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(471), .T2(467), .T3(466), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 476) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(461), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 477) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(470), .T2(462), .T3(461), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 478) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(357), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 479) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(375), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 480) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(473), .T2(467), .T3(464), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 481) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(343), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 482) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(477), .T2(476), .T3(473), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 483) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(479), .T2(477), .T3(474), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 484) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(379), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 485) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(479), .T2(469), .T3(468), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 486) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(481), .T2(478), .T3(472), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 487) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(393), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 488) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(487), .T2(485), .T3(484), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 489) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(406), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 490) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(271), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 491) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(488), .T2(485), .T3(480), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 492) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(491), .T2(485), .T3(484), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 493) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(490), .T2(488), .T3(483), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 494) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(357), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 495) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(419), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 496) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(494), .T2(491), .T3(480), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 497) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(419), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 498) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(495), .T2(489), .T3(487), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 499) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(494), .T2(493), .T3(488), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 500) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(499), .T2(494), .T3(490), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 501) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(499), .T2(497), .T3(496), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 502) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(498), .T2(497), .T3(494), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 503) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(500), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 504) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(502), .T2(490), .T3(483), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 505) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(349), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 506) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(411), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 507) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(504), .T2(501), .T3(494), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 508) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(399), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 509) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(506), .T2(502), .T3(501), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 510) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(501), .T2(500), .T3(498), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 511) begin
+ fibonacci_lfsr #(.WIDTH(WIDTH), .T1(501), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+if (WIDTH == 512) begin
+ galois_lfsr #(.WIDTH(WIDTH), .T1(510), .T2(507), .T3(504), .INITIAL_OCCUPANCY(INITIAL_OCCUPANCY)) lfsr_inst (.clock(clock), .aclrn(aclrn), .sclrn(sclrn), .enable(enable), .state(state));
+end
+endgenerate
+
+endmodule
+
+
+
+//The high speed FIFO uses LFSRs as the write and read addresses to memory. In order for the FIFO to exit reset with
+//a nonzero occupancy, we must be able to advance the write address forward INITIAL_OCCUPANCY times. Each of the LFSR
+//implementations contain a function which advances the state exactly the same way as the hardware logic gates would
+//when the LFSR is actually in use, but the function applies the state advancement to some temporary signals which
+//ultimately set the parameter RESET_VALUE. The function has no logic cost, RESET_VALUE is a compile time constant.
+
+
+module galois_lfsr #(
+ parameter int WIDTH,
+ parameter int T1,
+ parameter int T2,
+ parameter int T3,
+ parameter int INITIAL_OCCUPANCY=0
+)
+(
+ input wire clock,
+ input wire aclrn,
+ input wire sclrn,
+ input wire enable,
+ output logic [WIDTH-1:0] state
+);
+function [WIDTH-1:0] galois_lfsr_reset_value;
+input int T1, T2, T3, INITIAL_OCCUPANCY;
+begin
+ bit [WIDTH-1:0] old_state, new_state;
+ int INIT_OCC_DIV_4K, INIT_OCC_MOD_4K; //to get around the loop iteration problem
+ INIT_OCC_DIV_4K = INITIAL_OCCUPANCY >> 12;
+ INIT_OCC_MOD_4K = INITIAL_OCCUPANCY & 12'hfff;
+ old_state = '0;
+ for (int i=0; i<INIT_OCC_DIV_4K; i++) begin
+ for (int k=0; k<4096; k++) begin
+ for (int j=1; j<WIDTH; j++) begin
+ if ((j==T1) || (j==T2) || (j==T3)) new_state[j-1] = ~old_state[j] ^ old_state[0];
+ else new_state[j-1] = old_state[j];
+ end
+ new_state[WIDTH-1] = old_state[0];
+ old_state = new_state;
+ end
+ end
+ for (int i=0; i<INIT_OCC_MOD_4K; i++) begin
+ for (int j=1; j<WIDTH; j++) begin
+ if ((j==T1) || (j==T2) || (j==T3)) new_state[j-1] = ~old_state[j] ^ old_state[0];
+ else new_state[j-1] = old_state[j];
+ end
+ new_state[WIDTH-1] = old_state[0];
+ old_state = new_state;
+ end
+ galois_lfsr_reset_value = old_state;
+end
+endfunction
+localparam bit [WIDTH-1:0] RESET_VALUE = galois_lfsr_reset_value(T1, T2, T3, INITIAL_OCCUPANCY);
+always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) state <= RESET_VALUE;
+ else begin
+ if (enable) begin
+ for (int i=1; i<WIDTH; i++) begin
+ if ((i == T1) || (i == T2) || (i == T3)) state[i-1] <= ~state[i] ^ state[0];
+ else state[i-1] <= state[i];
+ end
+ state[WIDTH-1] <= state[0];
+ end
+ if (~sclrn) state <= RESET_VALUE;
+ end
+end
+endmodule
+
+
+
+module fibonacci_lfsr #(
+ parameter int WIDTH,
+ parameter int T1,
+ parameter int INITIAL_OCCUPANCY=0
+)
+(
+ input wire clock,
+ input wire aclrn,
+ input wire sclrn,
+ input wire enable,
+ output logic [WIDTH-1:0] state
+);
+function [WIDTH-1:0] fibonacci_lfsr_reset_value;
+input int T1, INITIAL_OCCUPANCY;
+begin
+ bit [WIDTH-1:0] old_state, new_state;
+ int INIT_OCC_DIV_4K, INIT_OCC_MOD_4K; //to get around the loop iteration problem
+ INIT_OCC_DIV_4K = INITIAL_OCCUPANCY >> 12;
+ INIT_OCC_MOD_4K = INITIAL_OCCUPANCY & 12'hfff;
+ old_state = '0;
+ for (int i=0; i<INIT_OCC_DIV_4K; i++) begin
+ for (int j=0; j<4096; j++) begin
+ new_state[0] = ~old_state[T1-1] ^ old_state[WIDTH-1];
+ new_state[WIDTH-1:1] = old_state[WIDTH-2:0];
+ old_state = new_state;
+ end
+ end
+ for (int i=0; i<INIT_OCC_MOD_4K; i++) begin
+ new_state[0] = ~old_state[T1-1] ^ old_state[WIDTH-1];
+ new_state[WIDTH-1:1] = old_state[WIDTH-2:0];
+ old_state = new_state;
+ end
+ fibonacci_lfsr_reset_value = old_state;
+end
+endfunction
+localparam bit [WIDTH-1:0] RESET_VALUE = fibonacci_lfsr_reset_value(T1, INITIAL_OCCUPANCY);
+always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) state <= RESET_VALUE;
+ else begin
+ if (enable) begin
+ state[0] <= ~state[T1-1] ^ state[WIDTH-1];
+ state[WIDTH-1:1] <= state[WIDTH-2:0];
+ end
+ if (~sclrn) state <= RESET_VALUE;
+ end
+end
+endmodule
+
+`default_nettype wire
diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_low_latency_fifo.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_low_latency_fifo.sv new file mode 100644 index 0000000..e5b4d7a --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_low_latency_fifo.sv @@ -0,0 +1,916 @@ +// Copyright 2020 Intel Corporation.
+//
+// This software and the related documents are Intel copyrighted materials,
+// and your use of them is governed by the express license under which they
+// were provided to you ("License"). Unless the License provides otherwise,
+// you may not use, modify, copy, publish, distribute, disclose or transmit
+// this software or the related documents without Intel's prior written
+// permission.
+//
+// This software and the related documents are provided as is, with no express
+// or implied warranties, other than those that are expressly stated in the
+// License.
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// //
+// ACL LOW LATENCY FIFO //
+// Designed and optimized by: Jason Thong //
+// //
+// DESCRIPTION //
+// =========== //
+// This fifo is fmax optimized for Stratix 10 at the expense of area. This fifo uses registers as storage and therefore it is not //
+// recommended for large DEPTH. The low latency designation means that every input affects the output within 1 clock cycle, e.g. the //
+// write-to-read latency is 1 clock. Stall/valid semantics are used, where upstream indicates availability through valid and downstream //
+// applies backpressure through stall. A write into the fifo occurs when valid_in==1 && stall_out==0. A read from the fifo occurs when //
+// valid_out==1 && stall_in==0. //
+// //
+// REQUIRED FILES //
+// ============== //
+// - dla_acl_low_latency_fifo.sv //
+// - dla_acl_reset_handler.sv //
+// - dla_acl_fanout_pipeline.sv //
+// - dla_acl_std_synchronizer_nocut.v //
+// //
+// RESET BEHAVIOR //
+// ============== //
+// During reset the fifo appears as both full and empty. One can interact with the fifo once full deasserts. The almost_full signal also //
+// follows the same behavior as full for reset. See dla_acl_high_speed_fifo.sv for typical values that the reset parameters should have for //
+// various platforms. //
+// //
+// ALMOST FULL AND ALMOST EMPTY //
+// ============================ //
+// The ALMOST_***_CUTOFF parameters refer to how much dead space would be in the fifo if one were to use almost_full as same clock cycle //
+// backpressure (dead space in not being able to completely fill the fifo), or if one were to almost_empty as same clock cycle underflow //
+// prevention (dead space in not being able to empty the fifo). See chart below for interpretation of values: //
+// //
+// Scfifo parameter | Our parameter | Interpretation //
+// ------------------------------------+---------------------------+--------------------------------------------------------------- //
+// almost_empty_value = 1 | ALMOST_EMPTY_CUTOFF = 0 | almost_empty behaves the same way as empty //
+// almost_empty_value = 2 | ALMOST_EMPTY_CUTOFF = 1 | almost_empty asserts when read_used_words is 1 or less //
+// ------------------------------------+---------------------------+--------------------------------------------------------------- //
+// almost_full_value = lpm_numwords | ALMOST_FULL_CUTOFF = 0 | almost_full behaves the same way as full //
+// almost_full_value = lpm_numwords-1 | ALMOST_FULL_CUTOFF = 1 | almost_full asserts when write_used_words is DEPTH-1 or higher //
+// //
+// INITIAL OCCUPANCY //
+// ================= //
+// The parameter INITIAL_OCCUPANCY describes the number of words of garbage data in the fifo as it exits from reset. Typically this is 0, //
+// e.g. we have to write into the fifo before anything is readable. If INITIAL_OCCUPANCY > 0, then valid_out is 0 during reset, and when //
+// it eventually asserts it is then safe for downstream to transact reads from the fifo. Exit from reset should be handled separately for //
+// upstream and downstream. In particular, the assertion of valid_out (to downstream) and the deassertion of stall_out (to upstream) may //
+// not happen on the same clock cycle. If INITIAL_OCCUPANCY == DEPTH, one cannot use stall_out to observe reset exit, only when at least //
+// one item has been read from the fifo will stall_out then deasert. //
+// //
+// VALID_IN_EARLINESS AND STALL_IN_EARLINESS //
+// ========================================= //
+// This is an fmax optimization. If valid_in and stall_in are known one clock cycle ahead of time, we compute occupancy one clock early. //
+// This gives an extra clock cycle from the control logic (occupancy, clock enables, mux selects) to the data path logic, which helps //
+// mitigate fmax degradation due to high fan-out (large WIDTH). Only values 0 and 1 are supported since the biggest fmax gain comes from //
+// registering the control logic before consumption. Any excess earliness is absorbed by dla_hld_fifo, we leave it to Quartus to retime it. //
+// //
+// Note that NEVER_OVERFLOWS and WRITE_AND_READ_DURING_FULL are two separate features and any combination of the two will work properly. //
+// NEVER_OVERFLOWS means one must externally track occupancy to ensure valid_in is not asserted when the fifo should not be written to. //
+// WRITE_AND_READ_DURING_FULL means the fifo cannot be written to when the fifo is full and not being read. //
+// //
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+// TESTBENCH: the testbench for this has now been merged into testbench of dla_hld_fifo
+
+
+`default_nettype none
+`include "dla_acl_parameter_assert.svh"
+
+module dla_acl_low_latency_fifo #(
+ //basic fifo configuration
+ parameter int WIDTH, // width of the data path through the fifo
+ parameter int DEPTH, // capacity of the fifo
+
+ //occupancy
+ parameter int ALMOST_EMPTY_CUTOFF = 0, // almost_empty asserts if read_used_words <= ALMOST_EMPTY_CUTOFF, read_used_words increments when writes are visible on the read side, decrements when fifo is read
+ parameter int ALMOST_FULL_CUTOFF = 0, // almost_full asserts if write_used_words >= (DEPTH-ALMOST_FULL_CUTOFF), write_used_words increments when fifo is written to, decrements when fifo is read
+ parameter int INITIAL_OCCUPANCY = 0, // number of words in the fifo when it comes out of reset
+
+ //reset configuration
+ parameter bit ASYNC_RESET = 1, // how do we use reset: 1 means registers are reset asynchronously, 0 means registers are reset synchronously
+ parameter bit SYNCHRONIZE_RESET = 0, // based on how reset gets to us, what do we need to do: 1 means synchronize reset before consumption (if reset arrives asynchronously), 0 means passthrough (managed externally)
+ parameter bit RESET_EVERYTHING = 0, // intended for partial reconfig debug, set to 1 to reset every register (normally async reset excludes data path and sync reset additionally excludes some control signals)
+ parameter bit RESET_EXTERNALLY_HELD = 0, // has no effect since low latency fifo doesn't need reset pulse stretching, put here for parameter compatibility with dla_hld_fifo
+
+ //special configurations for higher fmax / lower area
+ parameter int STALL_IN_EARLINESS = 0, // how many clock cycles early is stall_in provided, fifo can take advantage of 1 clock or stall_in earliness if valid_in is also at least 1 clock early
+ parameter int VALID_IN_EARLINESS = 0, // how many clock cycles early is valid_in provided, fifo can take advantage of 1 clock or valid_in earliness if stall_in is also at least 1 clock early
+ parameter int STALL_IN_OUTSIDE_REGS = 0, // number of registers on the stall-in path external to this module that will delay the propagation of x values on reset (e.g. in dla_hld_fifo)
+ parameter int VALID_IN_OUTSIDE_REGS = 0, // number of registers on the valid-in path external to this module that will delay the propagation of x values on reset (e.g. in dla_hld_fifo)
+ parameter int REGISTERED_DATA_OUT_COUNT = 0,// 0 to WIDTH inclusive, data_out[REGISTERED_DATA_OUT_COUNT-1:0] are registered, the remaining upper bits are unregistered
+ // generally REGISTERED_DATA_OUT_COUNT should be 0 unless fifo output data drives control logic, in which case just those bits should be registered
+ // this parameter is ignored if DEPTH == 1 in which case data_out is always registered
+ parameter bit NEVER_OVERFLOWS = 0, // set to 1 to disable fifo's internal overflow protection, stall_out still asserts during reset but won't mask valid_in
+
+ //special features that typically have an fmax penalty
+ parameter bit HOLD_DATA_OUT_WHEN_EMPTY = 0, // 0 means data_out can be x when fifo is empty, 1 means data_out will hold last value when fifo is empty (scfifo behavior, has fmax penalty)
+ parameter bit WRITE_AND_READ_DURING_FULL = 0,// set to 1 to allow writing and reading while the fifo is full, this may have an fmax penalty, to compensate it is recommended to use this with NEVER_OVERFLOWS = 1
+
+ //hidden parameters
+ parameter int RESET_RELEASE_DELAY_OVERRIDE_FROM_ZERO_LATENCY_FIFO = -1 //do not touch, only dla_acl_zero_latency_fifo should set this
+)
+(
+ input wire clock,
+ input wire resetn, // see description above for different reset modes
+
+ //write interface
+ input wire valid_in, // upstream advertises it has data, a write happens when valid_in & ~stall_out -- this needs to be early if VALID_IN_EARLINESS >= 1
+ input wire [WIDTH-1:0] data_in, // data from upstream
+ output logic stall_out, // inform upstream that we cannot accept data
+ output logic almost_full, // asserts if write_used_words >= (DEPTH-ALMOST_FULL_CUTOFF)
+
+ //read interface
+ output logic valid_out, // advertise to downstream that we have data
+ output logic [WIDTH-1:0] data_out, // data to downstream
+ input wire stall_in, // downstream indicates it cannot accept data -- this needs to be early if STALL_IN_EARLINESS >= 1
+ output logic almost_empty, // asserts if read_used_words <= ALMOST_EMPTY_CUTOFF
+ output logic forced_read_out,// indicates fifo is being read on current clock cycle, read data must be consumed or it will be lost, is a registered signal if STALL_IN_EARLINESS >= 1 && VALID_IN_EARLINESS >= 1
+
+ //expose occupancy to outside world, intended for use by dla_acl_zero_latency_fifo, also potentially useful if one wants multiple thresholds for almost full or empty
+ output logic [DEPTH-1:0] occ, // occupancy, see description below for the encoding
+ output logic [DEPTH-1:0] occ_low_reset, // occupancy intended for use in backpressuring downstream e.g. almost empty -- during reset the occupancy encoding of 0 means fifo is empty
+ output logic [DEPTH-1:0] occ_high_reset // occupancy intended for use in backpressuring upstream e.g. almost full -- during reset the occupancy encoding of all ones means fifo is full
+);
+
+ //////////////////////////////////////
+ // //
+ // Sanity check on the parameters //
+ // //
+ //////////////////////////////////////
+
+ // do not allow arbitrarily large amounts of earliness, as this delays the exit from reset "safe state"
+ // the checks are done in Quartus pro and Modelsim, it is disabled in Quartus standard because it results in a syntax error (parser is based on an older systemverilog standard)
+ // the workaround is to use synthesis translate to hide this from Quartus standard, ALTERA_RESERVED_QHD is only defined in Quartus pro, and Modelsim ignores the synthesis comment
+ `ifdef ALTERA_RESERVED_QHD
+ `else
+ //synthesis translate_off
+ `endif
+
+ generate
+ `DLA_ACL_PARAMETER_ASSERT_MESSAGE(DEPTH >= 1, $sformatf("dla_acl_low_latency_fifo: illegal value of DEPTH = %d, minimum allowed is 1\n", DEPTH))
+ `DLA_ACL_PARAMETER_ASSERT_MESSAGE(ALMOST_EMPTY_CUTOFF >= 0 && ALMOST_EMPTY_CUTOFF <= DEPTH, $sformatf("dla_acl_low_latency_fifo: illegal value of ALMOST_EMPTY_CUTOFF = %d, minimum allowed is 0, maximum allowed is DEPTH = %d\n", ALMOST_EMPTY_CUTOFF, DEPTH))
+ `DLA_ACL_PARAMETER_ASSERT_MESSAGE(ALMOST_FULL_CUTOFF >= 0 && ALMOST_FULL_CUTOFF <= DEPTH, $sformatf("dla_acl_low_latency_fifo: illegal value of ALMOST_FULL_CUTOFF = %d, minimum allowed is 0, maximum allowed is DEPTH = %d\n", ALMOST_FULL_CUTOFF, DEPTH))
+ `DLA_ACL_PARAMETER_ASSERT_MESSAGE(INITIAL_OCCUPANCY >= 0 && INITIAL_OCCUPANCY <= DEPTH, $sformatf("dla_acl_low_latency_fifo: illegal value of INITIAL_OCCUPANCY = %d, minimum allowed is 0, maximum allowed is DEPTH = %d\n", INITIAL_OCCUPANCY, DEPTH))
+ `DLA_ACL_PARAMETER_ASSERT_MESSAGE(REGISTERED_DATA_OUT_COUNT >= 0 && REGISTERED_DATA_OUT_COUNT <= WIDTH, $sformatf("dla_acl_low_latency_fifo: illegal value of REGISTERED_DATA_OUT_COUNT = %d, minimum allowed is 0, maximum allowed is WIDTH = %d\n", REGISTERED_DATA_OUT_COUNT, WIDTH))
+ `DLA_ACL_PARAMETER_ASSERT_MESSAGE(STALL_IN_EARLINESS >= 0 && STALL_IN_EARLINESS <= 10, $sformatf("dla_acl_low_latency_fifo: illegal value of STALL_IN_EARLINESS = %d, minimum allowed is 0, maximum allowed is 10\n", STALL_IN_EARLINESS))
+ `DLA_ACL_PARAMETER_ASSERT_MESSAGE(VALID_IN_EARLINESS >= 0 && VALID_IN_EARLINESS <= 10, $sformatf("dla_acl_low_latency_fifo: illegal value of VALID_IN_EARLINESS = %d, minimum allowed is 0, maximum allowed is 10\n", VALID_IN_EARLINESS))
+ `DLA_ACL_PARAMETER_ASSERT_MESSAGE(VALID_IN_OUTSIDE_REGS >= 0 && VALID_IN_OUTSIDE_REGS <= 1, $sformatf("dla_acl_high_speed_fifo: illegal value of VALID_IN_OUTSIDE_REGS = %d, minimum allowed is 0, maximum allowed is 1\n", VALID_IN_OUTSIDE_REGS))
+ `DLA_ACL_PARAMETER_ASSERT_MESSAGE(STALL_IN_OUTSIDE_REGS >= 0 && STALL_IN_OUTSIDE_REGS <= 1, $sformatf("dla_acl_high_speed_fifo: illegal value of STALL_IN_OUTSIDE_REGS = %d, minimum allowed is 0, maximum allowed is 1\n", STALL_IN_OUTSIDE_REGS))
+ endgenerate
+
+ `ifdef ALTERA_RESERVED_QHD
+ `else
+ //synthesis translate_on
+ `endif
+
+
+
+ //////////////////////////
+ // //
+ // Parameter settings //
+ // //
+ //////////////////////////
+
+ //excess earliness
+ localparam int EARLINESS = ((STALL_IN_EARLINESS >= 1) && (VALID_IN_EARLINESS >= 1)) ? 1 : 0; //how much earliness on stall_in and valid_in will the fifo take advantage of
+ localparam int EXCESS_EARLY_STALL = STALL_IN_EARLINESS - EARLINESS; //how many pipeline stages to use to absorb excess STALL_IN_EARLINESS
+ localparam int EXCESS_EARLY_VALID = VALID_IN_EARLINESS - EARLINESS; //how many pipeline stages to use to absorb excess VALID_IN_EARLINESS
+
+ //reset timing
+ localparam int EXCESS_EARLY_STALL_WITH_EXT = STALL_IN_EARLINESS + STALL_IN_OUTSIDE_REGS; //early stall is affected by regs outside this module; account for effect on reset timing
+ localparam int EXCESS_EARLY_VALID_WITH_EXT = VALID_IN_EARLINESS + VALID_IN_OUTSIDE_REGS; //early valid is affected by regs outisde this module; account for effect on reset timing
+ localparam int FLUSH_EARLY_PIPES = (EXCESS_EARLY_STALL_WITH_EXT > EXCESS_EARLY_VALID_WITH_EXT) ? EXCESS_EARLY_STALL_WITH_EXT : EXCESS_EARLY_VALID_WITH_EXT; //clocks needs to flush excess earliness pipelines
+ localparam int RESET_SYNC_DEPTH = (SYNCHRONIZE_RESET) ? 3 : 0; //how many registers are added inside dla_acl_reset_handler for synchronizing the reset
+ localparam int RESET_PIPE_DEPTH = 2; //how many pipeline stages we add to sclrn
+ localparam int RESET_LATENCY = (ASYNC_RESET || RESET_EVERYTHING) ? 0 : (RESET_SYNC_DEPTH + RESET_PIPE_DEPTH); //how many clocks from the resetn input signal until the reset is consumed
+ localparam int MIN_RESET_RELEASE_DELAY = EARLINESS; //when earliness = 1 occ is retimed one clock earlier, need to delay fifo exit from safe state by at least 1 clock
+ localparam int RAW_RESET_RELEASE_DELAY = FLUSH_EARLY_PIPES - RESET_LATENCY; //delay fifo exit from safe state if need more clocks to flush earliness than reset latency
+ localparam int RESET_RELEASE_DELAY_PRE = (RAW_RESET_RELEASE_DELAY < MIN_RESET_RELEASE_DELAY) ? MIN_RESET_RELEASE_DELAY : RAW_RESET_RELEASE_DELAY; //how many clocks late the fifo exits from safe state
+ localparam int RESET_RELEASE_DELAY = (RESET_RELEASE_DELAY_OVERRIDE_FROM_ZERO_LATENCY_FIFO != -1) ? RESET_RELEASE_DELAY_OVERRIDE_FROM_ZERO_LATENCY_FIFO : RESET_RELEASE_DELAY_PRE;
+
+ // properties of the fifo which are consumed by the testbench
+ localparam int WRITE_TO_READ_LATENCY = 1; //once something is written into the fifo, how many clocks later will it be visible on the read side
+ localparam int RESET_EXT_HELD_LENGTH = 1; //how many clocks does reset need to be held for, this fifo does not take advantage of RESET_EXTERNALLY_HELD
+ localparam int MAX_CLOCKS_TO_ENTER_SAFE_STATE = 5; //upon assertion of reset, worse case number of clocks until fifo shows both full and empty
+ localparam int MAX_CLOCKS_TO_EXIT_SAFE_STATE = 15; //upon release of reset, worse case number of clocks until fifo is ready to transact (not necessarily observable if INITIAL_OCCUPANCY = DEPTH)
+
+
+
+ ///////////////////////////
+ // //
+ // Signal declarations //
+ // //
+ ///////////////////////////
+
+ genvar g;
+ logic aclrn, sclrn_pre, sclrn, sclrn_reset_everything; //reset
+ logic [RESET_RELEASE_DELAY:0] resetn_delayed;
+ logic fifo_in_reset;
+
+ //retime stall_in and valid_in to the correct timing, absorb excess earliness that the fifo cannot take advantage of
+ logic stall_in_correct_timing, valid_in_correct_timing;
+ logic [EXCESS_EARLY_STALL:0] stall_in_pipe;
+ logic [EXCESS_EARLY_VALID:0] valid_in_pipe;
+
+ //occupancy tracking
+ logic [DEPTH-1:0] occ_next;
+
+ //depth 1 (and larger) fifo
+ logic data_out_reg_clock_en, data_out_reg_clock_en_pre;
+
+ //depth 2 (and larger) fifo
+ //signals for registered output data
+ logic [WIDTH-1:0] data_out_reg, data_one_reg;
+ logic data_out_reg_select, data_out_reg_select_pre;
+ logic data_one_reg_clock_en, data_one_reg_clock_en_pre;
+ //signals for unregistered output data
+ logic stall_in_prev, full;
+ logic [WIDTH-1:0] data_out_unreg, data_zero_unreg, data_one_unreg;
+ logic data_out_unreg_select, data_out_unreg_select_pre;
+ logic data_zero_unreg_clock_en, data_zero_unreg_clock_en_pre;
+ logic data_zero_unreg_clock_en_pre_default, data_zero_unreg_clock_en_pre_hold, data_zero_unreg_clock_en_pre_nvof;
+ logic data_zero_unreg_select, data_zero_unreg_select_pre;
+ logic data_one_unreg_clock_en, data_one_unreg_clock_en_pre;
+ logic data_one_unreg_select, data_one_unreg_select_pre;
+
+ //depth 3 (and larger) fifo
+ //signals for registered output data
+ logic late_stall_in;
+ logic [WIDTH-1:0] data_reg [DEPTH-1:0];
+ logic [DEPTH-1:0] data_reg_clock_en, data_reg_clock_en_pre;
+ logic [DEPTH-1:0] data_reg_select, data_reg_select_pre;
+ logic data_reg_last_select;
+ //signals for unregistered output data
+ logic [WIDTH-1:0] data_unreg [DEPTH-1:0];
+ logic [DEPTH-1:0] data_unreg_clock_en, data_unreg_clock_en_pre;
+ logic [DEPTH-1:0] data_unreg_select, data_unreg_select_pre;
+ logic data_unreg_last_select;
+
+
+
+ /////////////
+ // //
+ // Reset //
+ // //
+ /////////////
+
+ // S10 reset specification:
+ // S (clocks to enter reset "safe state"): 2 (sclrn pipeline, one inside dla_acl_reset_handler, one which we manually create)
+ // P (minimum duration of reset pulse): 1 (no pulse stretcher is needed)
+ // D (clocks to exit reset "safe state"): 15 (3 for synchronizer) + (2 for sclrn pipeline) + (10 for reset release delay for registers that absorb excess earliness)
+
+ dla_acl_reset_handler
+ #(
+ .ASYNC_RESET (ASYNC_RESET),
+ .USE_SYNCHRONIZER (SYNCHRONIZE_RESET),
+ .SYNCHRONIZE_ACLRN (SYNCHRONIZE_RESET),
+ .PIPE_DEPTH (1), //we add one more pipeline stage ourselves, needed so that resetn_delayed can use sclrn_pre
+ .NUM_COPIES (1)
+ )
+ dla_acl_reset_handler_inst
+ (
+ .clk (clock),
+ .i_resetn (resetn),
+ .o_aclrn (aclrn),
+ .o_resetn_synchronized (),
+ .o_sclrn (sclrn_pre)
+ );
+ always_ff @(posedge clock) begin
+ sclrn <= sclrn_pre;
+ end
+ assign sclrn_reset_everything = (RESET_EVERYTHING) ? sclrn : 1'b1;
+
+ generate
+ always_comb begin
+ resetn_delayed[0] = (ASYNC_RESET) ? aclrn : sclrn;
+ end
+ for (g=1; g<=RESET_RELEASE_DELAY; g++) begin : gen_resetn_delayed
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) resetn_delayed[g] <= '0;
+ else begin
+ resetn_delayed[g] <= (ASYNC_RESET && g==1) ? 1'b1 : resetn_delayed[g-1]; //partial reconfig requires no d-input consumption of aclr, so resetn_delayed[1] loads 1'b1 if ASYNC_RESET
+ if (~sclrn_pre) resetn_delayed[g] <= '0; //resetn_delayed goes into reset as the same time as sclrn, since this is registered need to peek one clock ahead of sclrn
+ end
+ end
+ end
+ endgenerate
+
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) fifo_in_reset <= 1'b1;
+ else begin
+ fifo_in_reset <= 1'b0;
+ if (~resetn_delayed[RESET_RELEASE_DELAY]) fifo_in_reset <= 1'b1;
+ end
+ end
+
+ logic resetn_master_mask;
+ logic [DEPTH-1:0] resetn_mask;
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) begin
+ resetn_master_mask <= 1'b0;
+ end
+ else begin
+ resetn_master_mask <= 1'b1;
+ if (~resetn_delayed[RESET_RELEASE_DELAY-EARLINESS]) resetn_master_mask <= 1'b0;
+ end
+ end
+ always_comb begin
+ for (int i=0; i<DEPTH; i++) begin
+ resetn_mask[i] = (i==INITIAL_OCCUPANCY || (i+1)==INITIAL_OCCUPANCY) ? resetn_master_mask : 1'b1;
+ end
+ end
+
+
+
+
+
+ ////////////////////////////////////////////////
+ // //
+ // Absorb excess earliness on input signals //
+ // //
+ ////////////////////////////////////////////////
+
+ // the fifo cannot take adnvatage of STALL_IN_EARLINESS above 1 and VALID_IN_EARLINESS above 1
+ // to take advantage of earliness, both STALL_IN_EARLINESS and VALID_IN_EARLINESS need to be 1
+ // absorb the excess earliness with registers, and provide the correctly timed version based on the amount of earliness that the fifo will use
+ generate
+ always_comb begin
+ stall_in_pipe[0] = stall_in;
+ valid_in_pipe[0] = valid_in;
+ end
+ for (g=1; g<=EXCESS_EARLY_STALL; g++) begin : gen_stall_in_delayed
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) stall_in_pipe[g] <= (RESET_EVERYTHING) ? 1'b1 : 1'bx;
+ else begin
+ stall_in_pipe[g] <= stall_in_pipe[g-1];
+ if (~sclrn_reset_everything) stall_in_pipe[g] <= 1'b1;
+ end
+ end
+ end
+ for (g=1; g<=EXCESS_EARLY_VALID; g++) begin : gen_valid_in_delayed
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) valid_in_pipe[g] <= (RESET_EVERYTHING) ? 1'b0 : 1'bx;
+ else begin
+ valid_in_pipe[g] <= valid_in_pipe[g-1];
+ if (~sclrn_reset_everything) valid_in_pipe[g] <= 1'b0;
+ end
+ end
+ end
+ endgenerate
+ assign stall_in_correct_timing = stall_in_pipe[EXCESS_EARLY_STALL];
+ assign valid_in_correct_timing = valid_in_pipe[EXCESS_EARLY_VALID];
+
+
+
+ //////////////////////////
+ // //
+ // Occupancy tracking //
+ // //
+ //////////////////////////
+
+ // occ[i] means that the occupancy is greater than i, e.g. occ[0] means there is 1 or more items
+ // occ is retimed early like valid_in and stall_in when EARLINESS == 0
+ //
+ // The following table lists all the values that occ can take when DEPTH = 4
+ //
+ // value of occ | actual occupancy
+ // -----------------+-----------------
+ // 4'b0000 | 0
+ // 4'b0001 | 1
+ // 4'b0011 | 2
+ // 4'b0111 | 3
+ // 4'b1111 | 4
+
+ generate
+ if (DEPTH == 1) begin : gen_depth_1_occ
+ if (WRITE_AND_READ_DURING_FULL) begin
+ assign occ_next[0] = (valid_in_correct_timing & resetn_master_mask) ? 1'b1 : (occ[0] & ~stall_in_correct_timing & resetn_master_mask) ? 1'b0 : occ[0];
+ end
+ else begin
+ assign occ_next[0] = (valid_in_correct_timing & ~occ[0] & resetn_master_mask) ? 1'b1 : (occ[0] & ~stall_in_correct_timing & resetn_master_mask) ? 1'b0 : occ[0];
+ end
+ end
+ else begin : gen_depth_n_occ
+ always_comb begin
+ occ_next[0] = (valid_in_correct_timing & resetn_mask[0]) ? 1'b1 : (~stall_in_correct_timing & resetn_mask[0]) ? occ[1] : occ[0];
+ for (int i=1; i<DEPTH-1; i++) begin //middle registers have no boundary effect, used when DEPTH >= 3
+ occ_next[i] = (valid_in_correct_timing & stall_in_correct_timing & resetn_mask[i]) ? occ[i-1] : (~valid_in_correct_timing & ~stall_in_correct_timing & resetn_mask[i]) ? occ[i+1] : occ[i];
+ end
+ if (WRITE_AND_READ_DURING_FULL) begin
+ occ_next[DEPTH-1] = (~stall_in_correct_timing & ~valid_in_correct_timing & resetn_mask[DEPTH-1]) ? 1'b0 : (valid_in_correct_timing & stall_in_correct_timing & resetn_mask[DEPTH-1]) ? occ[DEPTH-2] : occ[DEPTH-1];
+ end
+ else begin
+ occ_next[DEPTH-1] = (~stall_in_correct_timing & resetn_mask[DEPTH-1]) ? 1'b0 : (valid_in_correct_timing & resetn_mask[DEPTH-1]) ? occ[DEPTH-2] : occ[DEPTH-1];
+ end
+ end
+ end
+ endgenerate
+
+ //most of occ_low_reset and occ_high_reset will get trimmed away by Quartus
+ //occ_high_reset is needed to apply backpressure to upstream during reset (stall_out and almost_full)
+ //occ_low_reset is needed to starve downstream during reset, especially when initial occupancy is nonzero (valid_out and almost_empty)
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) begin
+ for (int i=0; i<DEPTH; i++) occ[i] <= (i >= INITIAL_OCCUPANCY) ? 1'b0 : 1'b1;
+ occ_low_reset <= '0;
+ occ_high_reset <= '1;
+ end
+ else begin
+ occ <= occ_next;
+ occ_low_reset <= occ_next;
+ occ_high_reset <= occ_next;
+ if (~resetn_delayed[RESET_RELEASE_DELAY-EARLINESS]) begin //when EARLINESS=1, exit from reset one clock early so that we get correct values on valid_out and stall_out
+ for (int i=0; i<DEPTH; i++) occ[i] <= (i >= INITIAL_OCCUPANCY) ? 1'b0 : 1'b1;
+ occ_low_reset <= '0;
+ occ_high_reset <= '1;
+ end
+ end
+ end
+
+
+
+ ///////////////////////////////////////////////////
+ // //
+ // Output control signals related to occupancy //
+ // //
+ ///////////////////////////////////////////////////
+
+ //delay by 1 clock before exposing to outside world if we have earliness
+ generate
+ if (EARLINESS == 1) begin
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) begin
+ valid_out <= 1'b0;
+ stall_out <= 1'b1;
+ almost_empty <= 1'b1;
+ almost_full <= 1'b1;
+ forced_read_out <= 1'b0;
+ end
+ else begin
+ valid_out <= occ_low_reset[0];
+ stall_out <= (NEVER_OVERFLOWS) ? 1'b0 : (WRITE_AND_READ_DURING_FULL) ? occ_high_reset[DEPTH-1] & stall_in_correct_timing : occ_high_reset[DEPTH-1];
+ almost_empty <= (ALMOST_EMPTY_CUTOFF >= DEPTH) ? 1'b1 : (ALMOST_EMPTY_CUTOFF < 0) ? 1'b0 : ~occ_low_reset[ALMOST_EMPTY_CUTOFF];
+ almost_full <= (ALMOST_FULL_CUTOFF >= DEPTH) ? 1'b1 : (ALMOST_FULL_CUTOFF < 0) ? 1'b0 : occ_high_reset[DEPTH-ALMOST_FULL_CUTOFF-1];
+ forced_read_out <= occ_low_reset[0] & ~stall_in_correct_timing;
+ if (~resetn_delayed[RESET_RELEASE_DELAY]) begin
+ valid_out <= 1'b0;
+ stall_out <= 1'b1;
+ almost_empty <= 1'b1;
+ almost_full <= 1'b1;
+ forced_read_out <= 1'b0;
+ end
+ end
+ end
+ end
+ else begin //EARLINESS == 0
+ always_comb begin
+ valid_out = occ_low_reset[0];
+ stall_out = (NEVER_OVERFLOWS) ? fifo_in_reset : (WRITE_AND_READ_DURING_FULL) ? fifo_in_reset | (occ_high_reset[DEPTH-1] & stall_in_correct_timing) : occ_high_reset[DEPTH-1];
+ almost_empty = (ALMOST_EMPTY_CUTOFF >= DEPTH) ? 1'b1 : (ALMOST_EMPTY_CUTOFF < 0) ? 1'b0 : ~occ_low_reset[ALMOST_EMPTY_CUTOFF];
+ almost_full = (ALMOST_FULL_CUTOFF >= DEPTH) ? 1'b1 : (ALMOST_FULL_CUTOFF < 0) ? 1'b0 : occ_high_reset[DEPTH-ALMOST_FULL_CUTOFF-1];
+ forced_read_out = occ_low_reset[0] & ~stall_in_correct_timing;
+ end
+ end
+ endgenerate
+
+
+
+ //helper signals
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) begin
+ stall_in_prev <= (RESET_EVERYTHING) ? '0 : 'x;
+ full <= (RESET_EVERYTHING) ? '0 : 'x;
+ late_stall_in <= (RESET_EVERYTHING) ? '0 : 'x;
+ end
+ else begin
+ stall_in_prev <= stall_in_correct_timing;
+ full <= (EARLINESS == 1) ? occ[DEPTH-1] : occ_next[DEPTH-1];
+ late_stall_in <= (EARLINESS == 1) ? stall_in_prev : stall_in_correct_timing;
+ if (~sclrn_reset_everything) begin
+ stall_in_prev <= '0;
+ full <= '0;
+ late_stall_in <= '0;
+ end
+ end
+ end
+
+
+
+ ////////////////////
+ // //
+ // Depth 1 fifo //
+ // //
+ ////////////////////
+
+ //naming convention: the ****_pre signals are retimed earlier when EARLINESS == 1, this applies to depth 1, depth 2, and depth 3+
+ generate
+ if (DEPTH == 1) begin : gen_depth_1
+ //clock enable
+ assign data_out_reg_clock_en_pre = (WRITE_AND_READ_DURING_FULL) ? ((NEVER_OVERFLOWS) ? valid_in_correct_timing : valid_in_correct_timing & (~stall_in_correct_timing | ~occ[0])) :
+ (HOLD_DATA_OUT_WHEN_EMPTY) ? ~occ[0] & valid_in_correct_timing : ~occ[0];
+
+ //retime if we have earliness
+ if (EARLINESS == 1) begin
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) begin
+ data_out_reg_clock_en <= (RESET_EVERYTHING) ? '0 : 'x;
+ end
+ else begin
+ data_out_reg_clock_en <= data_out_reg_clock_en_pre;
+ if (~sclrn_reset_everything) data_out_reg_clock_en <= '0;
+ end
+ end
+ end
+ else begin
+ always_comb begin
+ data_out_reg_clock_en = data_out_reg_clock_en_pre;
+ end
+ end
+
+ //output data is always registered
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) begin
+ data_out_reg <= (RESET_EVERYTHING) ? '0 : 'x;
+ end
+ else begin
+ if (data_out_reg_clock_en) data_out_reg <= data_in;
+ if (~sclrn_reset_everything) data_out_reg <= '0;
+ end
+ end
+ assign data_out_unreg = data_out_reg;
+ end
+ endgenerate
+
+
+
+ ////////////////////
+ // //
+ // Depth 2 fifo //
+ // //
+ ////////////////////
+
+ //generate both registered and unregistered output data versions
+ //we can select which version to consume per bit of data path, the unused parts will be synthesized away
+ generate
+ if (DEPTH == 2) begin : gen_depth_2
+
+ ////////////////////////////////////
+ // Registered output data version //
+ ////////////////////////////////////
+
+ //clock enable
+ assign data_out_reg_clock_en_pre = (HOLD_DATA_OUT_WHEN_EMPTY) ? (~stall_in_correct_timing & (occ[1] | valid_in_correct_timing)) | (~occ[0] & valid_in_correct_timing) : ~stall_in_correct_timing | ~occ[0];
+ assign data_one_reg_clock_en_pre = (WRITE_AND_READ_DURING_FULL) ? ~occ[1] | ~stall_in_correct_timing : ~occ[1];
+
+ //mux select
+ assign data_out_reg_select_pre = ~occ[1];
+
+ //retime if we have earliness
+ if (EARLINESS == 1) begin
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) begin
+ data_out_reg_clock_en <= (RESET_EVERYTHING) ? '0 : 'x;
+ data_out_reg_select <= (RESET_EVERYTHING) ? '0 : 'x;
+ data_one_reg_clock_en <= (RESET_EVERYTHING) ? '0 : 'x;
+ end
+ else begin
+ data_out_reg_clock_en <= data_out_reg_clock_en_pre;
+ data_out_reg_select <= data_out_reg_select_pre;
+ data_one_reg_clock_en <= data_one_reg_clock_en_pre;
+ if (~sclrn_reset_everything) begin
+ data_out_reg_clock_en <= '0;
+ data_out_reg_select <= '0;
+ data_one_reg_clock_en <= '0;
+ end
+ end
+ end
+ end
+ else begin
+ always_comb begin
+ data_out_reg_clock_en = data_out_reg_clock_en_pre;
+ data_out_reg_select = data_out_reg_select_pre;
+ data_one_reg_clock_en = data_one_reg_clock_en_pre;
+ end
+ end
+
+ //data path
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) begin
+ data_out_reg <= (RESET_EVERYTHING) ? '0 : 'x;
+ data_one_reg <= (RESET_EVERYTHING) ? '0 : 'x;
+ end
+ else begin
+ if (data_out_reg_clock_en) data_out_reg <= (data_out_reg_select) ? data_in : data_one_reg;
+ if (data_one_reg_clock_en) data_one_reg <= data_in;
+ if (~sclrn_reset_everything) begin
+ data_out_reg <= '0;
+ data_one_reg <= '0;
+ end
+ end
+ end
+
+
+ //////////////////////////////////////
+ // Unregistered output data version //
+ //////////////////////////////////////
+
+ //clock enable
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) begin
+ data_zero_unreg_clock_en_pre_default <= (RESET_EVERYTHING) ? '0 : 'x;
+ data_one_unreg_clock_en_pre <= (RESET_EVERYTHING) ? '0 : 'x;
+ end
+ else begin
+ data_zero_unreg_clock_en_pre_default <= ~stall_in_correct_timing | ~occ[0];
+ data_one_unreg_clock_en_pre <= (WRITE_AND_READ_DURING_FULL) ? ~occ_next[1] | ~stall_in_correct_timing : ~occ_next[1];
+ if (~sclrn_reset_everything) begin
+ data_zero_unreg_clock_en_pre_default <= '0;
+ data_one_unreg_clock_en_pre <= '0;
+ end
+ end
+ end
+ assign data_zero_unreg_clock_en_pre_hold = (HOLD_DATA_OUT_WHEN_EMPTY) ? (valid_in_correct_timing | occ[0]) : 1'b1;
+ assign data_zero_unreg_clock_en_pre_nvof = (WRITE_AND_READ_DURING_FULL) ? ((HOLD_DATA_OUT_WHEN_EMPTY) ? ~stall_in_correct_timing & occ[1] : ~stall_in_correct_timing) : 1'b0;
+ assign data_zero_unreg_clock_en_pre = (data_zero_unreg_clock_en_pre_default & data_zero_unreg_clock_en_pre_hold) | data_zero_unreg_clock_en_pre_nvof;
+
+ //mux select
+ assign data_out_unreg_select_pre = (HOLD_DATA_OUT_WHEN_EMPTY) ? ~stall_in_prev & occ[0] : ~stall_in_prev;
+ assign data_zero_unreg_select_pre = ~occ[0] | data_zero_unreg_clock_en_pre_nvof;
+
+ //retime if we have earliness
+ if (EARLINESS == 1) begin
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) begin
+ data_out_unreg_select <= (RESET_EVERYTHING) ? '0 : 'x;
+ data_zero_unreg_clock_en <= (RESET_EVERYTHING) ? '0 : 'x;
+ data_zero_unreg_select <= (RESET_EVERYTHING) ? '0 : 'x;
+ data_one_unreg_clock_en <= (RESET_EVERYTHING) ? '0 : 'x;
+ end
+ else begin
+ data_out_unreg_select <= data_out_unreg_select_pre;
+ data_zero_unreg_clock_en <= data_zero_unreg_clock_en_pre;
+ data_zero_unreg_select <= data_zero_unreg_select_pre;
+ data_one_unreg_clock_en <= data_one_unreg_clock_en_pre;
+ if (~sclrn_reset_everything) begin
+ data_out_unreg_select <= '0;
+ data_zero_unreg_clock_en <= '0;
+ data_zero_unreg_select <= '0;
+ data_one_unreg_clock_en <= '0;
+ end
+ end
+ end
+ end
+ else begin
+ always_comb begin
+ data_out_unreg_select = data_out_unreg_select_pre;
+ data_zero_unreg_clock_en = data_zero_unreg_clock_en_pre;
+ data_zero_unreg_select = data_zero_unreg_select_pre;
+ data_one_unreg_clock_en = data_one_unreg_clock_en_pre;
+ end
+ end
+
+ //late mux select, do not register so that constant is easily seen when WRITE_AND_READ_DURING_FULL = 0
+ assign data_one_unreg_select = (WRITE_AND_READ_DURING_FULL) ? ~full : 1'b1;
+
+ //data path
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) begin
+ data_zero_unreg <= (RESET_EVERYTHING) ? '0 : 'x;
+ data_one_unreg <= (RESET_EVERYTHING) ? '0 : 'x;
+ end
+ else begin
+ if (data_zero_unreg_clock_en) data_zero_unreg <= (data_zero_unreg_select) ? data_in : data_one_unreg;
+ if (data_one_unreg_clock_en) data_one_unreg <= (data_one_unreg_select) ? data_in : data_zero_unreg;
+ if (~sclrn_reset_everything) begin
+ data_zero_unreg <= '0;
+ data_one_unreg <= '0;
+ end
+ end
+ end
+ assign data_out_unreg = (data_out_unreg_select) ? data_one_unreg : data_zero_unreg;
+ end
+ endgenerate
+
+
+
+ /////////////////////
+ // //
+ // Depth 3+ fifo //
+ // //
+ /////////////////////
+
+ //generate both registered and unregistered output data versions
+ //we can select which version to consume per bit of data path, the unused parts will be synthesized away
+ generate
+ if (DEPTH >= 3) begin : gen_depth_3_plus
+
+ ////////////////////////////////////
+ // Registered output data version //
+ ////////////////////////////////////
+
+ //clock enable
+ always_comb begin
+ data_reg_clock_en_pre[0] = (HOLD_DATA_OUT_WHEN_EMPTY) ? (~stall_in_correct_timing & (occ[1] | valid_in_correct_timing)) | (~occ[0] & valid_in_correct_timing) : ~stall_in_correct_timing | ~occ[0];
+ end
+ for (g=1; g<DEPTH-1; g++) begin : gen_data_reg_clock_en_pre
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) begin
+ data_reg_clock_en_pre[g] <= (RESET_EVERYTHING) ? '0 : 'x;
+ end
+ else begin
+ data_reg_clock_en_pre[g] <= ~stall_in_correct_timing | ~occ[g];
+ if (~sclrn_reset_everything) data_reg_clock_en_pre[g] <= '0;
+ end
+ end
+ end
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) begin
+ data_reg_clock_en_pre[DEPTH-1] <= (RESET_EVERYTHING) ? '0 : 'x;
+ end
+ else begin
+ data_reg_clock_en_pre[DEPTH-1] <= (WRITE_AND_READ_DURING_FULL) ? ~occ_next[DEPTH-1] | ~stall_in_correct_timing : ~occ_next[DEPTH-1];
+ if (~sclrn_reset_everything) data_reg_clock_en_pre[DEPTH-1] <= '0;
+ end
+ end
+
+ //mux select
+ always_comb begin
+ data_reg_select_pre = ~occ;
+ data_reg_select_pre[0] = ~occ[1];
+ if (WRITE_AND_READ_DURING_FULL) data_reg_select_pre[1] = ~occ[1] | ~stall_in_correct_timing;
+ end
+
+ //retime if we have earliness
+ if (EARLINESS == 1) begin
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) begin
+ data_reg_clock_en <= (RESET_EVERYTHING) ? '0 : 'x;
+ data_reg_select <= (RESET_EVERYTHING) ? '0 : 'x;
+ end
+ else begin
+ data_reg_clock_en <= data_reg_clock_en_pre;
+ data_reg_select <= data_reg_select_pre;
+ if (WRITE_AND_READ_DURING_FULL) data_reg_clock_en[1] <= data_reg_clock_en_pre[1] | ~stall_in_correct_timing;
+ if (~sclrn_reset_everything) begin
+ data_reg_clock_en <= '0;
+ data_reg_select <= '0;
+ end
+ end
+ end
+ end
+ else begin
+ always_comb begin
+ data_reg_clock_en = data_reg_clock_en_pre;
+ data_reg_select = data_reg_select_pre;
+ if (WRITE_AND_READ_DURING_FULL) data_reg_clock_en[1] = data_reg_clock_en_pre[1] | ~stall_in_correct_timing;
+ end
+ end
+
+ //late mux select, do not register so that constant is easily seen when WRITE_AND_READ_DURING_FULL = 0
+ assign data_reg_last_select = (WRITE_AND_READ_DURING_FULL) ? ~full : 1'b1;
+
+ //data path
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) begin
+ data_reg[0] <= (RESET_EVERYTHING) ? '0 : 'x;
+ end
+ else begin
+ if (data_reg_clock_en[0]) data_reg[0] <= (data_reg_select[0]) ? data_in : (late_stall_in) ? data_reg[1] : data_reg[2];
+ if (~sclrn_reset_everything) data_reg[0] <= '0;
+ end
+ end
+ for (g=1; g<DEPTH-1; g++) begin : gen_data_reg
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) begin
+ data_reg[g] <= (RESET_EVERYTHING) ? '0 : 'x;
+ end
+ else begin
+ if (data_reg_clock_en[g]) data_reg[g] <= (data_reg_select[g]) ? data_in : data_reg[g+1];
+ if (~sclrn_reset_everything) data_reg[g] <= '0;
+ end
+ end
+ end
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) begin
+ data_reg[DEPTH-1] <= (RESET_EVERYTHING) ? '0 : 'x;
+ end
+ else begin
+ if (data_reg_clock_en[DEPTH-1]) data_reg[DEPTH-1] <= (data_reg_last_select) ? data_in : data_reg[1];
+ if (~sclrn_reset_everything) data_reg[DEPTH-1] <= '0;
+ end
+ end
+ assign data_out_reg = data_reg[0];
+
+
+ //////////////////////////////////////
+ // Unregistered output data version //
+ //////////////////////////////////////
+
+ //clock enable
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) begin
+ data_unreg_clock_en_pre <= (RESET_EVERYTHING) ? '0 : 'x;
+ end
+ else begin
+ for (int i=0; i<DEPTH-1; i++) begin
+ data_unreg_clock_en_pre[i] <= ~stall_in_correct_timing | ~occ[i];
+ end
+ data_unreg_clock_en_pre[DEPTH-1] <= ~occ_next[DEPTH-1] | ((WRITE_AND_READ_DURING_FULL) ? ~stall_in_correct_timing : 1'b0);
+ if (~sclrn_reset_everything) data_unreg_clock_en_pre <= '0;
+ end
+ end
+ assign data_zero_unreg_clock_en_pre_hold = (HOLD_DATA_OUT_WHEN_EMPTY) ? (valid_in_correct_timing | occ[0]) : 1'b1;
+ assign data_zero_unreg_clock_en_pre_nvof = (WRITE_AND_READ_DURING_FULL) ? ((HOLD_DATA_OUT_WHEN_EMPTY) ? ~stall_in_correct_timing & occ[1] : ~stall_in_correct_timing) : 1'b0;
+ assign data_zero_unreg_clock_en_pre = (data_unreg_clock_en_pre[0] & data_zero_unreg_clock_en_pre_hold) | data_zero_unreg_clock_en_pre_nvof;
+
+ //mux select
+ always_comb begin
+ data_unreg_select_pre = ~occ;
+ data_unreg_select_pre[0] = ~occ[0] | data_zero_unreg_clock_en_pre_nvof;
+ data_out_unreg_select_pre = (!HOLD_DATA_OUT_WHEN_EMPTY) ? (~stall_in_prev) : (~stall_in_prev & occ[0]);
+ end
+
+ //retime if we have earliness
+ if (EARLINESS == 1) begin
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) begin
+ data_unreg_clock_en <= (RESET_EVERYTHING) ? '0 : 'x;
+ data_unreg_select <= (RESET_EVERYTHING) ? '0 : 'x;
+ data_out_unreg_select <= (RESET_EVERYTHING) ? '0 : 'x;
+ end
+ else begin
+ data_unreg_clock_en <= data_unreg_clock_en_pre;
+ data_unreg_clock_en[0] <= data_zero_unreg_clock_en_pre;
+ data_unreg_select <= data_unreg_select_pre;
+ data_out_unreg_select <= data_out_unreg_select_pre;
+ if (~sclrn_reset_everything) begin
+ data_unreg_clock_en <= '0;
+ data_unreg_select <= '0;
+ data_out_unreg_select <= '0;
+ end
+ end
+ end
+ end
+ else begin
+ always_comb begin
+ data_unreg_clock_en = data_unreg_clock_en_pre;
+ data_unreg_clock_en[0] = data_zero_unreg_clock_en_pre;
+ data_unreg_select = data_unreg_select_pre;
+ data_out_unreg_select = data_out_unreg_select_pre;
+ end
+ end
+
+ //late mux select, do not register so that constant is easily seen when WRITE_AND_READ_DURING_FULL = 0
+ assign data_unreg_last_select = (WRITE_AND_READ_DURING_FULL) ? ~full : 1'b1;
+
+ //data path
+ for (g=0; g<DEPTH-1; g++) begin : gen_data_unreg
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) begin
+ data_unreg[g] <= (RESET_EVERYTHING) ? '0 : 'x;
+ end
+ else begin
+ if (data_unreg_clock_en[g]) data_unreg[g] <= (data_unreg_select[g]) ? data_in : data_unreg[g+1];
+ if (~sclrn_reset_everything) data_unreg[g] <= '0;
+ end
+ end
+ end
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) begin
+ data_unreg[DEPTH-1] <= (RESET_EVERYTHING) ? '0 : 'x;
+ end
+ else begin
+ if (data_unreg_clock_en[DEPTH-1]) data_unreg[DEPTH-1] <= (data_unreg_last_select) ? data_in : data_unreg[0];
+ if (~sclrn_reset_everything) data_unreg[DEPTH-1] <= '0;
+ end
+ end
+ assign data_out_unreg = (data_out_unreg_select) ? data_unreg[1] : data_unreg[0];
+ end
+ endgenerate
+
+
+
+ ///////////////////////////////////////////////////////////////////
+ // //
+ // Select whether to use registered or unregistered output data //
+ // //
+ ///////////////////////////////////////////////////////////////////
+
+ generate
+ if (REGISTERED_DATA_OUT_COUNT == 0) begin : gen_unregistered_data_out
+ assign data_out = data_out_unreg;
+ end
+ else if (REGISTERED_DATA_OUT_COUNT == WIDTH) begin : gen_registered_data_out
+ assign data_out = data_out_reg;
+ end
+ else begin : gen_mixed_reg_data_out
+ assign data_out = {data_out_unreg[WIDTH-1:REGISTERED_DATA_OUT_COUNT], data_out_reg[REGISTERED_DATA_OUT_COUNT-1:0]};
+ end
+ endgenerate
+
+endmodule
+
+`default_nettype wire
diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_mid_speed_fifo.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_mid_speed_fifo.sv new file mode 100644 index 0000000..1b6ea65 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_mid_speed_fifo.sv @@ -0,0 +1,991 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// // +// ACL MID SPEED FIFO // +// Designed and optimized by: Jason Thong // +// // +// DESCRIPTION // +// =========== // +// This fifo was designed as a replacement for scfifo when scfifo is configured in show-ahead mode and with the output data registered. In this configuration the write to read latency is 3 clocks. This fifo // +// has both a higher fmax and lower area than scfifo under most configurations (no usage of almost_empty, consume only one of full or almost_full). This is also meant as a replacement for dla_acl_high_speed_fifo. // +// Although high speed fifo has a higher fmax, the area is penalty is often not worthwhile if other parts of the circuit limit the fmax to something significantly lower. // +// // +// FUNCTIONAL COMPATIBILITY WITH SCFIFO // +// ==================================== // +// There are two major differences in behavior between this fifo and scfifo: // +// // +// 1. Reset behavior: During reset this fifo asserts both full and empty, basically it refuses to interact with its surroundings until the reset has propagated through the entire fifo. When using synchronous // +// reset not every register is reset, only the critical registers are reset and their reset state propagates to others. // +// // +// 2. Almost empty: One of the annoying aspects of scfifo is that for small almost empty thresholds, there are situations where empty=1 and almost_empty=0, which logically makes no sense. The reason for this // +// is almost_empty in scfifo is based on write_used_words, the number of words that have been written into the fifo. This is distinct from read_used_words, which is the number of words readable from the // +// fifo. They are not the same because it takes time a word written into the fifo to become readable. In this fifo, almost_empty behaves properly since it is based on read_used_words. // +// // +// Other differences that can removed by setting certain parameters: // +// // +// 3. Read data when empty: This fifo may output X when the fifo is empty, which might actually be useful for simulation to ensure that data is not being consumed when the fifo is empty. Conversely, scfifo // +// holds the last data that was read when the fifo is empty. On both fifos, the read data is undefined until the first write. To mimic scfifo behavior with this fifo, set HOLD_DATA_OUT_WHEN_EMPTY=1. // +// // +// REQUIRED FILES // +// ============== // +// - dla_acl_mid_speed_fifo.sv // +// - dla_acl_lfsr.sv // +// - dla_acl_tessellated_incr_decr_threshold.sv // +// - dla_acl_reset_handler.sv // +// // +// STALL_IN_EARLINESS AND VALID_IN_EARLINESS // +// ========================================= // +// In this fifo earliness is used as an fmax optimization, unlike high speed fifo which used it primarily as an area savings. There are 3 modes of earliness: // +// // +// 1. No earliness: this is the zero-clock-cycle handshaking used by scfifo. // +// // +// 2. STALL_IN_EARLINESS >= 1: one extra clock cycle of read latency (stall_in to new value in data_out) allows us to register certain timing sensitive signals. There is a very small area increase from this // +// but it is generally well worth the extra 100 MHz or so that results from inserting a few registers in key places. // +// // +// 3. STALL_IN_EARLINESS >= 2 && VALID_IN_EARLINESS >= 1: this mode is intended for wide fifos which have high fanout from control signals to anything that affects the data path, e.g. the clock enable for the // +// read data register inside the M20K or MLAB. Physical memories are only so wide, so we need multiple physical memories for one wide logical memory, so even things like distributing the same address to all // +// of the memories becomes a challenge. Compared to the mode above, this mode retimes all of the control logic one clock earlier, so there is more time to distribute those control signals to the data path. // +// For example, instead of 1 control register driving 1024 data registers, if we had 2 clocks to distribute this we could instead have 1 control register driving 32 delayed copies of that control register, // +// each of which drives 32 of the data register (still 1024 data registers in total). We let Quartus figure out how much replication is needed in the intermediate stages. Obviously there is an area penalty. // +// // +// The maximum earliness that this fifo can make use of is STALL_IN_EARLINESS = 2 and VALID_IN_EARLINESS = 1. Excess earliness is absorbed before consumption. // +// // +// RAM_BLOCK_TYPE // +// ============== // +// There are different implementations based on whether an M20K or MLAB is used. MLABs have a favorable feature of the read address not needing to be registered inside the memory itself. Although we still // +// drive the read address with a register, we now have access to the output of that register. For M20K this register is inside the M20K itself and therefore we have no access to its output. For M20K we have // +// our own address register in ALM registers which always stays 1 spot ahead of the read address inside the M20K. Every time we update our own read adddress, the clock enable for the M20K read address is // +// asserted so that it captures the old value just before the update of own read address. The consequence of this is we cannot let Quartus decide the RAM implementation, the FIFO needs to choose if the ram // +// block type has not been explicitly set to M20K or MLAB by the user. // +// // +// DLA_HLD_FIFO FEATURES // +// ================= // +// This fifo is fully featured against all of the parameters exposed by dla_hld_fifo except for REGISTERED_DATA_OUT_COUNT. Read data from this fifo is always registered, and in the case of M20K it comes from the // +// hardened read data register inside the M20K itself. It follows the same reset scheme of asserting full and empty during reset. // +// // +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +`default_nettype none +`include "dla_acl_parameter_assert.svh" + +module dla_acl_mid_speed_fifo #( + //basic fifo configuration + parameter int WIDTH, // width of the data path through the fifo + parameter int DEPTH, // capacity of the fifo, at least 1 + + //occupancy + parameter int ALMOST_EMPTY_CUTOFF = 0, // almost_empty asserts if read_used_words <= ALMOST_EMPTY_CUTOFF, read_used_words increments when writes are visible on the read side, decrements when fifo is read + parameter int ALMOST_FULL_CUTOFF = 0, // almost_full asserts if write_used_words >= (DEPTH-ALMOST_FULL_CUTOFF), write_used_words increments when fifo is written to, decrements when fifo is read + parameter int INITIAL_OCCUPANCY = 0, // number of words in the fifo (write side occupancy) when it comes out of reset, note it still takes 5 clocks for this to become visible on the read side + + //reset configuration + parameter bit ASYNC_RESET = 0, // how do we use reset: 1 means registers are reset asynchronously, 0 means registers are reset synchronously + parameter bit SYNCHRONIZE_RESET = 1, // based on how reset gets to us, what do we need to do: 1 means synchronize reset before consumption (if reset arrives asynchronously), 0 means passthrough (managed externally) + parameter bit RESET_EVERYTHING = 0, // intended for partial reconfig debug, set to 1 to reset every register (normally async reset excludes data path and sync reset additionally excludes some control signals) + parameter bit RESET_EXTERNALLY_HELD = 1, // set to 1 if resetn will be held for at least FOUR clock cycles, otherwise we will internally pulse stretch reset before consumption + + //ram implementation + parameter string RAM_BLOCK_TYPE = "FIFO_TO_CHOOSE", // "MLAB" | "M20K" | "FIFO_TO_CHOOSE" -> different implementations for MLAB vs M20K, so cannot let quartus decide in case MLAB or M20K is not explicitly specified + + //special configurations for higher fmax / low area + parameter int STALL_IN_EARLINESS = 0, // how many clock cycles early is stall_in provided, fifo supports up to 2, setting this any higher results in registers to absorb the excess earliness + parameter int VALID_IN_EARLINESS = 0, // how many clock cycles early is valid_in provided, fifo can take advantage of 1 clock or valid_in earliness if stall_in is also at least 2 clocks early + parameter int STALL_IN_OUTSIDE_REGS = 0, // number of registers on the stall-in path external to this module that will delay the propagation of x values on reset (e.g. in dla_hld_fifo) + parameter int VALID_IN_OUTSIDE_REGS = 0, // number of registers on the valid-in path external to this module that will delay the propagation of x values on reset (e.g. in dla_hld_fifo) + parameter bit NEVER_OVERFLOWS = 0, // set to 1 to disable fifo's internal overflow protection, area savings by removing one incr/decr/thresh, stall_out still asserts during reset but won't mask valid_in + + //special features that typically have an fmax penalty + parameter bit HOLD_DATA_OUT_WHEN_EMPTY = 0, // 0 means data_out can be x when fifo is empty, 1 means data_out will hold last value when fifo is empty (scfifo behavior, has fmax penalty) + parameter bit WRITE_AND_READ_DURING_FULL = 0,//set to 1 to allow writing and reading while the fifo is full, this may have an fmax penalty, to compensate it is recommended to use this with NEVER_OVERFLOWS = 1 + + //error correction code + parameter enable_ecc = "FALSE" // NOT IMPLEMENTED YET, see case:555783 +) +( + input wire clock, + input wire resetn, // see description above for different reset modes + + //write interface + input wire valid_in, // upstream advertises it has data, a write happens when valid_in & ~stall_out -- this needs to be early if VALID_IN_EARLINESS >= 1 + input wire [WIDTH-1:0] data_in, // data from upstream + output logic stall_out, // inform upstream that we cannot accept data + output logic almost_full, // asserts if write_used_words >= (DEPTH-ALMOST_FULL_CUTOFF) + + //read interface + output logic valid_out, // advertise to downstream that we have data + output logic [WIDTH-1:0] data_out, // data to downstream + input wire stall_in, // downstream indicates it cannot accept data -- this needs to be early if STALL_IN_EARLINESS >= 1 + output logic almost_empty, // asserts if read_used_words <= ALMOST_EMPTY_CUTOFF + output logic forced_read_out,// indicates fifo is being read on current clock cycle, read data must be consumed or it will be lost, is a registered signal if STALL_IN_EARLINESS >= 1 + + //other + output logic [1:0] ecc_err_status // NOT IMPLEMENTED YET, see case:555783 +); + + ////////////////////////////////////// + // // + // Sanity check on the parameters // + // // + ////////////////////////////////////// + + // do not allow arbitrarily large amounts of earliness, as this delays the exit from reset "safe state" + // the checks are done in Quartus pro and Modelsim, it is disabled in Quartus standard because it results in a syntax error (parser is based on an older systemverilog standard) + // the workaround is to use synthesis translate to hide this from Quartus standard, ALTERA_RESERVED_QHD is only defined in Quartus pro, and Modelsim ignores the synthesis comment + `ifdef ALTERA_RESERVED_QHD + `else + //synthesis translate_off + `endif + + generate + `DLA_ACL_PARAMETER_ASSERT_MESSAGE(DEPTH >= 1, $sformatf("dla_acl_mid_speed_fifo: illegal value of DEPTH = %d, minimum allowed is 1\n", DEPTH)) + `DLA_ACL_PARAMETER_ASSERT_MESSAGE(ALMOST_EMPTY_CUTOFF >= 0 && ALMOST_EMPTY_CUTOFF <= DEPTH, $sformatf("dla_acl_mid_speed_fifo: illegal value of ALMOST_EMPTY_CUTOFF = %d, minimum allowed is 0, maximum allowed is DEPTH = %d\n", ALMOST_EMPTY_CUTOFF, DEPTH)) + `DLA_ACL_PARAMETER_ASSERT_MESSAGE(ALMOST_FULL_CUTOFF >= 0 && ALMOST_FULL_CUTOFF <= DEPTH, $sformatf("dla_acl_mid_speed_fifo: illegal value of ALMOST_FULL_CUTOFF = %d, minimum allowed is 0, maximum allowed is DEPTH = %d\n", ALMOST_FULL_CUTOFF, DEPTH)) + `DLA_ACL_PARAMETER_ASSERT_MESSAGE(INITIAL_OCCUPANCY >= 0 && INITIAL_OCCUPANCY <= DEPTH, $sformatf("dla_acl_mid_speed_fifo: illegal value of INITIAL_OCCUPANCY = %d, minimum allowed is 0, maximum allowed is DEPTH = %d\n", INITIAL_OCCUPANCY, DEPTH)) + `DLA_ACL_PARAMETER_ASSERT_MESSAGE(STALL_IN_EARLINESS >= 0 && STALL_IN_EARLINESS <= 10, $sformatf("dla_acl_mid_speed_fifo: illegal value of STALL_IN_EARLINESS = %d, minimum allowed is 0, maximum allowed is 10\n", STALL_IN_EARLINESS)) + `DLA_ACL_PARAMETER_ASSERT_MESSAGE(VALID_IN_EARLINESS >= 0 && VALID_IN_EARLINESS <= 10, $sformatf("dla_acl_mid_speed_fifo: illegal value of VALID_IN_EARLINESS = %d, minimum allowed is 0, maximum allowed is 10\n", VALID_IN_EARLINESS)) + `DLA_ACL_PARAMETER_ASSERT_MESSAGE(VALID_IN_OUTSIDE_REGS >= 0 && VALID_IN_OUTSIDE_REGS <= 1, $sformatf("dla_acl_high_speed_fifo: illegal value of VALID_IN_OUTSIDE_REGS = %d, minimum allowed is 0, maximum allowed is 1\n", VALID_IN_OUTSIDE_REGS)) + `DLA_ACL_PARAMETER_ASSERT_MESSAGE(STALL_IN_OUTSIDE_REGS >= 0 && STALL_IN_OUTSIDE_REGS <= 1, $sformatf("dla_acl_high_speed_fifo: illegal value of STALL_IN_OUTSIDE_REGS = %d, minimum allowed is 0, maximum allowed is 1\n", STALL_IN_OUTSIDE_REGS)) + endgenerate + + + `ifdef ALTERA_RESERVED_QHD + `else + //synthesis translate_on + `endif + + + + ////////////////////////// + // // + // Parameter settings // + // // + ////////////////////////// + + // fifo configuration + localparam int ADDR_RAW = $clog2(DEPTH); + localparam int ADDR = (ADDR_RAW < 2) ? 2 : ADDR_RAW; // minimum size of lfsr + localparam bit USE_MLAB = (RAM_BLOCK_TYPE == "MLAB") ? 1 : (RAM_BLOCK_TYPE == "M20K") ? 0 : (ADDR <= 5) ? 1 : 0; //0 = mlab, 1 = m20k + + // earliness configuration + localparam int EARLY_MODE = (STALL_IN_EARLINESS >= 2 && VALID_IN_EARLINESS >= 1) ? 2 : (STALL_IN_EARLINESS >= 1) ? 1 : 0; + localparam int EARLY_VALID = (EARLY_MODE == 2) ? 1 : 0; + localparam int EXCESS_EARLY_VALID = VALID_IN_EARLINESS - EARLY_VALID; + localparam int EARLY_STALL = EARLY_MODE; + localparam int EXCESS_EARLY_STALL = STALL_IN_EARLINESS - EARLY_STALL; + + // reset timing + localparam int EXCESS_EARLY_STALL_WITH_EXT = EXCESS_EARLY_STALL + STALL_IN_OUTSIDE_REGS; //early stall is affected by regs outside this module; account for effect on reset timing + localparam int EXCESS_EARLY_VALID_WITH_EXT = EXCESS_EARLY_VALID + VALID_IN_OUTSIDE_REGS; //early valid is affected by regs outisde this module; account for effect on reset timing + localparam int FLUSH_EARLY_PIPES = (EXCESS_EARLY_STALL_WITH_EXT > EXCESS_EARLY_VALID_WITH_EXT) ? EXCESS_EARLY_STALL_WITH_EXT : EXCESS_EARLY_VALID_WITH_EXT; // clocks needs to flush excess earliness pipelines + localparam int RESET_SYNC_DEPTH = (SYNCHRONIZE_RESET) ? 3 : 0; // how many registers are added inside dla_acl_reset_handler for synchronizing the reset + localparam int RESET_PIPE_DEPTH = 2; // how many pipeline stages we add to sclrn + localparam int RESET_LATENCY = (ASYNC_RESET || RESET_EVERYTHING) ? 0 : (RESET_SYNC_DEPTH + RESET_PIPE_DEPTH); // how many clocks from the resetn input signal until the reset is consumed + localparam int MIN_RESET_DELAY = EARLY_VALID; // internal occ tracking is 1 clock early when EARLY_VALID=1, 1 clock to propagate to stall_out + localparam int RAW_RESET_DELAY = FLUSH_EARLY_PIPES - RESET_LATENCY; // delay fifo exit from safe state if need more clocks to flush earliness than reset latency + localparam int RESET_RELEASE_DELAY = (RAW_RESET_DELAY < MIN_RESET_DELAY) ? MIN_RESET_DELAY : RAW_RESET_DELAY; // how many clocks late the fifo exits from safe state + + // reset release delay for the various occupancy trackers + localparam int RESET_DELAY_ADDR_MATCH = RESET_RELEASE_DELAY + 1 - EARLY_STALL; + localparam int RESET_DELAY_STALL_OUT = RESET_RELEASE_DELAY - EARLY_VALID; + localparam int RESET_DELAY_ALMOST_FULL = RESET_RELEASE_DELAY; + localparam int RESET_DELAY_ALMOST_EMPTY = RESET_RELEASE_DELAY + 2; // + 2 is actually WRITE_TO_READ_LATENCY - 1 + localparam int RESET_DELAY_MAX = RESET_DELAY_ALMOST_EMPTY; // this will always be the largest + + // properties of the fifo which are consumed by the testbench + localparam int WRITE_TO_READ_LATENCY = 3; //once something is written into the fifo, how many clocks later will it be visible on the read side + localparam int RESET_EXT_HELD_LENGTH = 4; //if RESET_EXTERNALLY_HELD = 1, how many clocks does reset need to be held for + localparam int MAX_CLOCKS_TO_ENTER_SAFE_STATE = 2; //upon assertion of reset, worse case number of clocks until fifo shows both full and empty + localparam int MAX_CLOCKS_TO_EXIT_SAFE_STATE = 18; //upon release of reset, worse case number of clocks until fifo is ready to transact (not necessarily observable if INITIAL_OCCUPANCY = DEPTH) + + + + /////////////////////////// + // // + // Signal declarations // + // // + /////////////////////////// + + // Naming convention: some signals are retimed early, any signal ending with _ES has the same earliness as the EARLY_STALL parameter. Likewise any signal ending with _EV has the same earliness as EARLY_VALID. + + //reset + genvar g; + logic aclrn, sclrn; //these are the typical active low reset signals that are consumed + logic sclrn_early_two, sclrn_early, sclrn_late; //helpers for sclrn + logic [RESET_DELAY_MAX:0] resetn_delayed; //delayed versions of aclrn or sclrn, consumed by the occupancy trackers + logic fifo_in_reset; //intended primarily for consumption by testbench to know when fifo is in reset, also used for stall_out when NEVER_OVERFLOWS=1 + + //absorb excess earliness that the fifo cannot take advantage of + logic stall_in_ES, valid_in_EV; + logic [EXCESS_EARLY_STALL:0] stall_in_pipe; + logic [EXCESS_EARLY_VALID:0] valid_in_pipe; + + //write control + logic write_into_fifo, write_into_fifo_EV; //are we writing into the fifo + logic try_write_into_fifo, try_write_into_fifo_EV; //are we trying to write into fifo, not necessarily will write, the purpose of this is to shrink the logic cone of threshold_reached in occ trackers + logic [ADDR-1:0] ram_wr_addr, ram_wr_addr_EV; //write address to the m20k or mlab + logic ram_wr_en; //write enable to the m20k or mlab + + //addr match related -- has the write address advanced further than the read address, e.g. is there data in the m20k or mlab that can be consumed + logic write_into_fifo_ESM1; //retimed version of write_into_fifo with the same earliness as EARLY_STALL-1 + logic wr_addr_ahead_of_rd_addr_ES; //is write address ahead of read address + + //read control + logic try_feed_prefetch_ES; //try to feed the prefetch if it is empty or fifo is being read + logic feed_prefetch_ES; //actually feed the prefetch it we are trying to and write address is ahead of read address + logic ram_rd_addr_incr_EV; //if feeding prefetch, advance the read pointer... + logic m20k_addr_b_clock_en, m20k_addr_b_clock_en_EV;//...normally we should also propagate this to the m20k read address, there is a special scenario during reset exit, see comments below + logic [ADDR-1:0] ram_rd_addr, ram_rd_addr_EV; //read address to the m20k or mlab + + //prefetch control + logic prefetch_clock_en; //clock enable for the prefetch, which is actually the hardened output read data registers inside the m20k + logic valid_out_ES; //early valid_out + + //occupancy trackers -- stall_out, almost_full, almost_empty + logic stall_out_EV; //early stall_out + logic read_from_fifo, read_from_fifo_ES, read_from_fifo_EV; //are we reading from the fifo + logic try_read_from_fifo, try_read_from_fifo_ES, try_read_from_fifo_EV; //are we trying to read from fifo, not necessarily will read, purpose is to simplify threshold_reached logic in occ trackers + + + + ///////////// + // // + // Reset // + // // + ///////////// + + // S10 reset specification: + // S (clocks to enter reset safe state) : 2 for sclrn_early_two to actual register (beware synchronizer takes no time for reset assertion, but it does take time for reset release) + // P (minimum duration of reset pulse) : 4 if RESET_EXTERNALLY_HELD = 1, otherwise 1 (we will internally pulse stretch the reset to 4 clocks) + // D (clocks to exit reset safe state) : 18 (3 for synchronizer) + (5 for sclrn_early_two to actual register) + (10 for reset release delay for registers that absorb excess earliness) + + dla_acl_reset_handler + #( + .ASYNC_RESET (ASYNC_RESET), + .USE_SYNCHRONIZER (SYNCHRONIZE_RESET), + .SYNCHRONIZE_ACLRN (SYNCHRONIZE_RESET), + .PIPE_DEPTH (0), + .NUM_COPIES (1) + ) + dla_acl_reset_handler_inst + ( + .clk (clock), + .i_resetn (resetn), + .o_aclrn (aclrn), + .o_resetn_synchronized (), + .o_sclrn (sclrn_early_two) + ); + + generate + if (ASYNC_RESET) begin : async_reset + assign sclrn = 1'b1; + assign sclrn_late = 1'b1; + assign sclrn_early = 1'b1; + end + else begin : sync_reset + logic [2:0] sclrn_chain; //pulse extend from 1 clock to 4 clocks + always_ff @(posedge clock) begin + sclrn_chain <= (sclrn_chain << 1) | sclrn_early_two; + sclrn_early <= (RESET_EXTERNALLY_HELD) ? sclrn_early_two : ((&sclrn_chain) & sclrn_early_two); + sclrn <= sclrn_early; + sclrn_late <= sclrn; //only the read address increment consumes this when using m20k and sclr + end + end + endgenerate + + generate + always_comb begin + resetn_delayed[0] = (ASYNC_RESET) ? aclrn : sclrn; //delay 0 = original reset timing + end + for (g=1; g<=RESET_DELAY_MAX; g++) begin : gen_resetn_delayed + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) resetn_delayed[g] <= '0; + else begin + resetn_delayed[g] <= (ASYNC_RESET && g==1) ? 1'b1 : resetn_delayed[g-1]; //partial reconfig requires no d-input consumption of aclr, so resetn_delayed[1] loads 1'b1 if ASYNC_RESET + if (~sclrn_early) resetn_delayed[g] <= '0; //resetn_delayed goes into reset as the same time as sclrn, since this is registered need to peek one clock ahead of sclrn + end + end + end + endgenerate + + //this signal is consumed by the testbench to know whether the fifo is still in reset, can't use stall_out when fifo starts as full + //this signal may be exported by the fifo in certain configurations, e.g. NEVER_OVERFLOWS=1 + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) fifo_in_reset <= 1'b1; + else begin + fifo_in_reset <= 1'b0; + if (~resetn_delayed[RESET_RELEASE_DELAY]) fifo_in_reset <= 1'b1; + end + end + + + + //////////////////////////////////////////////// + // // + // Absorb excess earliness on input signals // + // // + //////////////////////////////////////////////// + + generate + always_comb begin + stall_in_pipe[0] = stall_in; + valid_in_pipe[0] = valid_in; + end + for (g=1; g<=EXCESS_EARLY_STALL; g++) begin : gen_stall_in_delayed + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) stall_in_pipe[g] <= 1'b1; + else begin + stall_in_pipe[g] <= stall_in_pipe[g-1]; + if (~sclrn && RESET_EVERYTHING) stall_in_pipe[g] <= 1'b1; + end + end + end + for (g=1; g<=EXCESS_EARLY_VALID; g++) begin : gen_valid_in_delayed + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) valid_in_pipe[g] <= 1'b0; + else begin + valid_in_pipe[g] <= valid_in_pipe[g-1]; + if (~sclrn && RESET_EVERYTHING) valid_in_pipe[g] <= 1'b0; + end + end + end + endgenerate + assign stall_in_ES = stall_in_pipe[EXCESS_EARLY_STALL]; + assign valid_in_EV = valid_in_pipe[EXCESS_EARLY_VALID]; + + + + //////////////////// + // // + // Memory block // + // // + //////////////////// + + // Usage of altdpram - unlike the M20K in which it is impossible to bypass the input registers (addresses, write data, write enable), for the MLAB it is possible to bypass the input + // register for the read address. There is no parameterization of altera_syncram that supports this, hence the use of altdpram. + + // It is desirable to have access to the output of read address address. In the case of MLAB, the read address is driven by ALM registers. For M20K, we have no visibility on the output + // of the read address register because this is a hardened register inside the M20K itself. For M20K we have our own read address in ALM registers which is always 1 ahead of the hardened + // read address inside the M20K. Only when we update our read address, we assert the clock enable for the hardened read address inside the M20K, this way it always captures 1 value behind + // what our ALM register read address is. For asynchronous reset, the M20K read address is aclr to 0 and our address starts at 1 (actually INITIAL_OCCPUPANCY=1 on the LFSR). For synchronous + // reset, the M20K read address clock enable is active during reset so that we can clock in the value of our ALM register read address, upon reset exit the M20K clock enable is shut off + // and our read address advances 1 step forward. + + assign ecc_err_status = 2'h0; // ECC IS NOT IMPLEMENTED YET, see case:555783 + + assign ram_wr_en = write_into_fifo; + + generate + if (WIDTH > 0) begin : gen_ram + if (USE_MLAB) begin : gen_mlab + altdpram #( //modelsim library: altera_mf + .indata_aclr ("OFF"), + .indata_reg ("INCLOCK"), + .intended_device_family ("Stratix 10"),//quartus will correct this automatically to whatever your project actually uses + .lpm_type ("altdpram"), + .ram_block_type ("MLAB"), + .outdata_aclr ("OFF"), + .outdata_sclr ("OFF"), + .outdata_reg ("OUTCLOCK"), //output data is registered, clock enable for this is controlled by outclocken + .rdaddress_aclr ("OFF"), + .rdaddress_reg ("UNREGISTERED"), //we own the read address, bypass the equivalent of the internal address_b from m20k + .rdcontrol_aclr ("OFF"), + .rdcontrol_reg ("UNREGISTERED"), + .read_during_write_mode_mixed_ports ("DONT_CARE"), + .width (WIDTH), + .widthad (ADDR), + .width_byteena (1), + .wraddress_aclr ("OFF"), + .wraddress_reg ("INCLOCK"), + .wrcontrol_aclr ("OFF"), + .wrcontrol_reg ("INCLOCK") + ) + altdpram_component + ( + //clock, no reset + .inclock (clock), + .outclock (clock), + + //write port + .data (data_in), + .wren (ram_wr_en), + .wraddress (ram_wr_addr), + + //read port + .rdaddress (ram_rd_addr), + .outclocken (prefetch_clock_en), + .q (data_out), + + //unused + .aclr (1'b0), + .sclr (1'b0), + .byteena (1'b1), + .inclocken (1'b1), + .rdaddressstall (1'b0), + .rden (1'b1), + .wraddressstall (1'b0) + ); + end + else begin : gen_m20k + altera_syncram #( //modelsim library: altera_lnsim + .numwords_a (2**ADDR), + .numwords_b (2**ADDR), + .address_aclr_b ((ASYNC_RESET) ? "CLEAR1" : "NONE"), + .address_reg_b ("CLOCK1"), + .clock_enable_input_a ("BYPASS"), + .clock_enable_input_b ("BYPASS"), + .clock_enable_output_b ("NORMAL"), //clock enable for output data register is controlled by clocken1 + .enable_ecc ("FALSE"), + .intended_device_family ("Stratix 10"), //quartus will correct this automatically to whatever your project actually uses + .lpm_type ("altera_syncram"), + .operation_mode ("DUAL_PORT"), + .outdata_aclr_b ("NONE"), + .outdata_sclr_b ("NONE"), + .outdata_reg_b ("CLOCK1"), //output data is registered, clock1 and clock0 come from the same source, using clock1 so that we gain acceses to certain clock enables + .power_up_uninitialized ("TRUE"), + .ram_block_type ("M20K"), + .read_during_write_mode_mixed_ports ("DONT_CARE"), + .widthad_a (ADDR), + .widthad_b (ADDR), + .width_a (WIDTH), + .width_b (WIDTH), + .width_byteena_a (1) + ) + altera_syncram + ( + //clock and reset + .clock0 (clock), + .clock1 (clock), + .aclr1 ((ASYNC_RESET) ? ~aclrn : 1'b0), //this is used to reset the internal address_b when ASYNC_RESET=1 + + //write port + .wren_a (ram_wr_en), + .address_a (ram_wr_addr), + .data_a (data_in), + + //read port + .address_b (ram_rd_addr), + .addressstall_b (~m20k_addr_b_clock_en), + .clocken1 (prefetch_clock_en), + .q_b (data_out), + + //unused + .aclr0 (1'b0), + .address2_a (1'b1), + .address2_b (1'b1), + .addressstall_a (1'b0), + .byteena_a (1'b1), + .byteena_b (1'b1), + .clocken0 (1'b1), + .clocken2 (1'b1), + .clocken3 (1'b1), + .data_b ({WIDTH{1'b1}}), + .eccencbypass (1'b0), + .eccencparity (8'b0), + .eccstatus (), + .q_a (), + .rden_a (1'b1), + .rden_b (1'b1), + .sclr (1'b0), + .wren_b (1'b0) + ); + end + end + endgenerate + + + + /////////////////////////////////////////////// + // // + // Write logic -- resolve earliness timing // + // // + /////////////////////////////////////////////// + + // all of the write logic is retimed early by EARLY_VALID, we need to restore no earliness timing for the ram and some occupancy trackers (almost_full, almost_empty) + + assign try_write_into_fifo_EV = valid_in_EV; + assign write_into_fifo_EV = valid_in_EV & ~stall_out_EV; + + generate + if (EARLY_VALID == 0) begin : write_ev0 + assign write_into_fifo = write_into_fifo_EV; + assign try_write_into_fifo = try_write_into_fifo_EV; + assign ram_wr_addr = ram_wr_addr_EV; + end + if (EARLY_VALID == 1) begin : write_ev1 + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) begin + write_into_fifo <= 1'b0; + ram_wr_addr <= '0; + end + else begin + write_into_fifo <= write_into_fifo_EV; + ram_wr_addr <= ram_wr_addr_EV; + if (~sclrn) write_into_fifo <= 1'b0; + if (~sclrn && RESET_EVERYTHING) ram_wr_addr <= '0; + end + end + assign try_write_into_fifo = write_into_fifo; + end + endgenerate + + + + ///////////////////// + // // + // Write address // + // // + ///////////////////// + + dla_acl_lfsr #( + .WIDTH (ADDR), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0), + .INITIAL_OCCUPANCY (INITIAL_OCCUPANCY) + ) + ram_wr_addr_inst + ( + .clock (clock), + .resetn (resetn_delayed[0]), + .enable (write_into_fifo_EV), + .state (ram_wr_addr_EV) + ); + + + + ////////////////////////////////////////////// + // // + // Read logic -- resolve earliness timing // + // // + ////////////////////////////////////////////// + + // The DECISION on whether to read from the ram is retimed early by EARLY_STALL clock cycles. The UPDATE of the read address itself is retimed early by EARLY_VALID clock cycles. + // When EARLY_STALL is 0, then EARLY_VALID == EARLY_STALL. When EARLY_STALL is 1 or larger, then EARLY_VALID == EARLY_STALL-1, so in these cases the decision to read from the ram + // happens 1 clock cycle before read address itself is updated. This allows the decision to be registered first which helps fmax. In the case of EARLY_VALID = 1, there is an extra + // pipeline stage from the read address to the M20K or MLAB. + + // Decision on whether to read from the ram: does the prefetch have space right now (~valid_out_ES) or will it have space because we are reading (~stall_in_ES) -> this means we COULD feed the prefetch. + // In order to actually feed the prefetch, we also need the write address to be ahead of the read address. + assign try_feed_prefetch_ES = ~valid_out_ES | ~stall_in_ES; + assign feed_prefetch_ES = wr_addr_ahead_of_rd_addr_ES & try_feed_prefetch_ES; + + // Normally we should advance the read address when we are able to feed the prefetch. + // When using M20K we don't have access to the address_b register inside the M20K, so we run our own read address register 1 spot ahead, and when it updates then only we clock it into the M20K. + // For aclr, we reset the address_b register inside the M20K, and ram_rd_addr resets to 1 ahead. + // For sclr, during reset ram_rd_addr is 0 and that gets clocked into the M20K, upon exit of reset we no longer clock ram_rd_addr into the M20K and ram_rd_addr moves ahead by 1. + // Note the update of the read address itself is based on EARLY_VALID whereas the decision to read is based on EARLY_STALL, so we have to convert earliness settings. + generate + if (EARLY_STALL == 0) begin : read_incr0 //EARLY_VALID == EARLY_STALL + assign ram_rd_addr_incr_EV = (!USE_MLAB && !ASYNC_RESET) ? (feed_prefetch_ES | ~sclrn_late) : feed_prefetch_ES; + assign m20k_addr_b_clock_en_EV = (!USE_MLAB && !ASYNC_RESET) ? (feed_prefetch_ES | ~sclrn) : feed_prefetch_ES; + end + if (EARLY_STALL >= 1) begin : read_incr12 //EARLY_VALID == EARLY_STALL-1, one pipeline stage needed for EV to consume from ES + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) begin + ram_rd_addr_incr_EV <= 1'b0; + m20k_addr_b_clock_en_EV <= 1'b0; + end + else begin + ram_rd_addr_incr_EV <= feed_prefetch_ES; + m20k_addr_b_clock_en_EV <= feed_prefetch_ES; + if (!USE_MLAB && !ASYNC_RESET) begin //special reset behavior for M20K using sync reset, peek one stage ahead on sclr since we are now registering these signals + if (~sclrn) ram_rd_addr_incr_EV <= 1'b1; + if (~sclrn_early) m20k_addr_b_clock_en_EV <= 1'b1; + end + else begin //normal reset behavior + if (~sclrn && RESET_EVERYTHING) begin + ram_rd_addr_incr_EV <= 1'b0; + m20k_addr_b_clock_en_EV <= 1'b0; + end + end + end + end + end + endgenerate + + + + //////////////////// + // // + // Read address // + // // + //////////////////// + + dla_acl_lfsr #( + .WIDTH (ADDR), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0), + .INITIAL_OCCUPANCY ((!USE_MLAB && ASYNC_RESET) ? 1 : 0) //for M20K our read address is 1 ahead of the address_b inside the M20K, for async reset we don't clock in our address during reset, so just start 1 ahead + ) + ram_rd_addr_inst + ( + .clock (clock), + .resetn (resetn_delayed[0]), + .enable (ram_rd_addr_incr_EV), + .state (ram_rd_addr_EV) + ); + + //correct the timing for the signals driving the ram itself + generate + if (EARLY_VALID == 0) begin : read_addr_ev0 + assign ram_rd_addr = ram_rd_addr_EV; + assign m20k_addr_b_clock_en = m20k_addr_b_clock_en_EV; + end + if (EARLY_VALID == 1) begin : read_addr_ev1 + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) begin + ram_rd_addr <= '0; + m20k_addr_b_clock_en <= 1'b0; + end + else begin + ram_rd_addr <= ram_rd_addr_EV; + m20k_addr_b_clock_en <= m20k_addr_b_clock_en_EV; + if (~sclrn && RESET_EVERYTHING) begin + ram_rd_addr <= '0; + m20k_addr_b_clock_en <= (!USE_MLAB && !ASYNC_RESET) ? 1'b1 : 1'b0; //special reset behavior for M20K using sync reset + end + end + end + end + endgenerate + + + + ///////////////////////////////////// + // // + // Address match lookahead logic // + // // + ///////////////////////////////////// + + // The memory block is configured so that reading and writing from the same address returns X. A read is valid once the write address has advanced past the read address. In tracking the number + // of "readable" addresses, we therefore increment one clock cycle after the write has happened. We decrement as soon as the read happens. + + // Whether or not any addresses are "readable" has been retimed by EARLY_STALL clocks ahead. The read side logic has all be retimed early by EARLY_STALL clocks. The write side logic is retimed + // ahead by EARLY_VALID clocks, so we need to do an earliness convesion. When EARLY_STALL = 0, the increment should happen 1 clock after the write. When EARLY_STALL = 1, we still have EARLY_VALID = 0 + // so the increment should happen at the same time as the write. When EARLY_STALL = 2 we have EARLY_VALID = 1, so the increment should happen at the same time as the write. + + generate + if (EARLY_STALL == 0) begin : addr_match_es0 //EARLY_VALID == EARLY_STALL -> increment should happen 1 clock after the write into the ram + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) write_into_fifo_ESM1 <= 1'b0; + else begin + write_into_fifo_ESM1 <= write_into_fifo_EV; + if (~sclrn) write_into_fifo_ESM1 <= 1'b0; + end + end + end + if (EARLY_STALL >= 1) begin : addr_match_es12 //EARLY_VALID == EARLY_STALL-1 -> increment should happen on the same clock as the write into the ram + assign write_into_fifo_ESM1 = write_into_fifo_EV; + end + endgenerate + + dla_acl_tessellated_incr_decr_threshold #( + .CAPACITY (DEPTH), + .THRESHOLD (1), + .INITIAL_OCCUPANCY (INITIAL_OCCUPANCY), + .THRESHOLD_REACHED_AT_RESET (0), + .WRITE_AND_READ_DURING_FULL (0), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0), + .RESET_EVERYTHING (RESET_EVERYTHING), + .RESET_EXTERNALLY_HELD (1) + ) + addr_match_inst + ( + .clock (clock), + .resetn (resetn_delayed[RESET_DELAY_ADDR_MATCH]), + .incr_no_overflow (write_into_fifo_ESM1), + .incr_raw (write_into_fifo_ESM1), //do not use unguarded incr, with initial occupancy = 0 and valid_in = 1 during reset, threshold_reached will assert 1 clock too soon coming out of reset + .decr_no_underflow (feed_prefetch_ES), + .decr_raw (try_feed_prefetch_ES), + .threshold_reached (wr_addr_ahead_of_rd_addr_ES) + ); + + + + ////////////////// + // // + // Fifo empty // + // // + ////////////////// + + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) valid_out_ES <= 1'b0; + else begin + if (wr_addr_ahead_of_rd_addr_ES & ~valid_out_ES) valid_out_ES <= 1'b1; + if (~wr_addr_ahead_of_rd_addr_ES & ~stall_in_ES) valid_out_ES <= 1'b0; + if (~sclrn) valid_out_ES <= 1'b0; + end + end + + + + ////////////////////////////////////// + // // + // Read valid retiming resolution // + // // + ////////////////////////////////////// + + // Read side logic is computed early, restore no earliness timing of signals for occupancy trackers, valid_out, and prefetch clock enable + + assign read_from_fifo_ES = valid_out_ES & ~stall_in_ES; //will we FORCE a read from the fifo in EARLY_STALL clocks from now + assign try_read_from_fifo_ES = ~stall_in_ES; //could we TRY to read from the fifo in EARLY_STALL clocks from now, e.g. does downstream have space for more data + assign forced_read_out = read_from_fifo; //are we FORCING a read from the fifo right now + + generate + if (EARLY_STALL == 0) begin : read_es0 + assign valid_out = valid_out_ES; + assign prefetch_clock_en = (!HOLD_DATA_OUT_WHEN_EMPTY) ? try_feed_prefetch_ES : feed_prefetch_ES; + assign read_from_fifo_EV = read_from_fifo_ES; + assign try_read_from_fifo_EV = try_read_from_fifo_ES; + assign read_from_fifo = read_from_fifo_ES; + assign try_read_from_fifo = try_read_from_fifo_ES; + end + if (EARLY_STALL == 1) begin : read_es1 + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) begin + valid_out <= 1'b0; + prefetch_clock_en <= (!HOLD_DATA_OUT_WHEN_EMPTY) ? 1'b1 : 1'b0; + read_from_fifo_EV <= 1'b0; + end + else begin + valid_out <= valid_out_ES; + prefetch_clock_en <= (!HOLD_DATA_OUT_WHEN_EMPTY) ? try_feed_prefetch_ES : feed_prefetch_ES; + read_from_fifo_EV <= read_from_fifo_ES; + if (~sclrn) begin + valid_out <= 1'b0; + read_from_fifo_EV <= 1'b0; + end + if (~sclrn && RESET_EVERYTHING) prefetch_clock_en <= (!HOLD_DATA_OUT_WHEN_EMPTY) ? 1'b1 : 1'b0; + end + end + assign try_read_from_fifo_EV = read_from_fifo_EV; + assign read_from_fifo = read_from_fifo_EV; + assign try_read_from_fifo = read_from_fifo_EV; + end + if (EARLY_STALL == 2) begin : read_es2 + logic valid_out_early, prefetch_clock_en_early; + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) begin + valid_out_early <= 1'b0; + valid_out <= 1'b0; + prefetch_clock_en_early <= (!HOLD_DATA_OUT_WHEN_EMPTY) ? 1'b1 : 1'b0; + prefetch_clock_en <= (!HOLD_DATA_OUT_WHEN_EMPTY) ? 1'b1 : 1'b0; + read_from_fifo_EV <= 1'b0; + read_from_fifo <= 1'b0; + end + else begin + valid_out_early <= valid_out_ES; + valid_out <= valid_out_early; + prefetch_clock_en_early <= (!HOLD_DATA_OUT_WHEN_EMPTY) ? try_feed_prefetch_ES : feed_prefetch_ES; + prefetch_clock_en <= prefetch_clock_en_early; + read_from_fifo_EV <= read_from_fifo_ES; + read_from_fifo <= read_from_fifo_EV; + if (~sclrn) begin + valid_out <= 1'b0; + read_from_fifo_EV <= 1'b0; + end + if (~sclrn && RESET_EVERYTHING) begin + valid_out_early <= 1'b0; + prefetch_clock_en_early <= (!HOLD_DATA_OUT_WHEN_EMPTY) ? 1'b1 : 1'b0; + prefetch_clock_en <= (!HOLD_DATA_OUT_WHEN_EMPTY) ? 1'b1 : 1'b0; + read_from_fifo <= 1'b0; + end + end + end + assign try_read_from_fifo_EV = read_from_fifo_EV; + assign try_read_from_fifo = read_from_fifo; + end + endgenerate + + + + ///////////////// + // // + // Fifo full // + // // + ///////////////// + + // Suppose we are trying to detect a threshold of N. We reach the threshold when the occupancy is N-1 and we are increasing, and we have no longer reached the threshold + // when the occupancy is N and we are decreasing. The occupancy has to be tracked using the guarded increment and decrement (incr_no_overflow and decr_no_underflow), + // but the increasing or decreasing used to change the state of threshold_reached does not need to be guarded if the threshold N is far away from overflow or underflow. + // + // This fifo has a 3 clock latency from write to read, so it is possible that write_used_words can be at fifo capacity (fifo is full) while stall_in is off (downstream wants + // to read) and valid_out is off (no data to provide to downstream). For a threshold of 3 or lower, we are not sufficiently far from underflow to use an unguarded decrement. + // + // Likewise if the initial occupancy is close to the threshold, unguarded increment and decrement can cause similar problems. However in the case of stall_out, valid_in=1 + // during reset will simply be masked by reset. Once stall_out deasserts, we have to guard against decr_raw until valid_out asserts from initial occupancy, there is a gap of + // 2 clocks here (write to read latency minus 1). If the initial occupancy is within 2 of the capacity (DEPTH), we must use decr_no_underflow instead. + + generate + if (NEVER_OVERFLOWS) begin : gen_reset_stall_out //no overflow protection, but upstream still needs a way to know when fifo has exited from reset + if (EARLY_VALID == 1) begin + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) stall_out_EV <= 1'b1; + else begin + stall_out_EV <= 1'b0; + if (~resetn_delayed[RESET_RELEASE_DELAY-1]) stall_out_EV <= 1'b1; //RESET_RELEASE_DELAY will be at least 2 when EARLY_VALID is 1 + end + end + end + else begin + assign stall_out_EV = fifo_in_reset; + end + end + else begin : gen_real_stall_out + + localparam bit STALL_OUT_GUARD_DECR_RAW = ((DEPTH <= WRITE_TO_READ_LATENCY) || ((DEPTH-INITIAL_OCCUPANCY) <= (WRITE_TO_READ_LATENCY-1))) ? 1'b1 : 1'b0; + logic stall_out_EV_raw; + + dla_acl_tessellated_incr_decr_threshold #( + .CAPACITY (DEPTH), + .THRESHOLD (DEPTH), + .INITIAL_OCCUPANCY (INITIAL_OCCUPANCY), + .THRESHOLD_REACHED_AT_RESET (1), + .WRITE_AND_READ_DURING_FULL (WRITE_AND_READ_DURING_FULL), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0), + .RESET_EVERYTHING (RESET_EVERYTHING), + .RESET_EXTERNALLY_HELD (1) + ) + stall_out_inst + ( + .clock (clock), + .resetn (resetn_delayed[RESET_DELAY_STALL_OUT]), + .incr_no_overflow (write_into_fifo_EV), + .incr_raw (try_write_into_fifo_EV), + .decr_no_underflow (read_from_fifo_EV), + .decr_raw ((STALL_OUT_GUARD_DECR_RAW) ? read_from_fifo_EV : try_read_from_fifo_EV), + .threshold_reached (stall_out_EV_raw) + ); + + assign stall_out_EV = (!WRITE_AND_READ_DURING_FULL) ? stall_out_EV_raw : (stall_out_EV_raw & ~read_from_fifo_EV); + + end + endgenerate + + generate + if (EARLY_VALID==0) begin : stall_out0 + assign stall_out = stall_out_EV; + end + if (EARLY_VALID==1) begin : stall_out1 + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) stall_out <= 1'b1; + else begin + stall_out <= stall_out_EV; + if (~sclrn) stall_out <= 1'b1; + end + end + end + endgenerate + + + + /////////////////// + // // + // Almost full // + // // + /////////////////// + + generate + if ((ALMOST_FULL_CUTOFF == 0) && (NEVER_OVERFLOWS == 0) && (WRITE_AND_READ_DURING_FULL == 0)) begin : full_almost_full + assign almost_full = stall_out; + end + else begin : real_almost_full + //similar idea of read-side protection as stall_out + localparam int ALMOST_FULL_INIT_OCC_DIFF = ((DEPTH-ALMOST_FULL_CUTOFF) > INITIAL_OCCUPANCY) ? (DEPTH-ALMOST_FULL_CUTOFF-INITIAL_OCCUPANCY) : INITIAL_OCCUPANCY-(DEPTH-ALMOST_FULL_CUTOFF); + localparam bit ALMOST_FULL_GUARD_DECR_RAW = (((DEPTH-ALMOST_FULL_CUTOFF) <= WRITE_TO_READ_LATENCY) || (ALMOST_FULL_INIT_OCC_DIFF <= (WRITE_TO_READ_LATENCY-1))) ? 1'b1 : 1'b0; + + dla_acl_tessellated_incr_decr_threshold #( + .CAPACITY (DEPTH), + .THRESHOLD (DEPTH - ALMOST_FULL_CUTOFF), + .INITIAL_OCCUPANCY (INITIAL_OCCUPANCY), + .THRESHOLD_REACHED_AT_RESET (1), + .WRITE_AND_READ_DURING_FULL (WRITE_AND_READ_DURING_FULL), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0), + .RESET_EVERYTHING (RESET_EVERYTHING), + .RESET_EXTERNALLY_HELD (1) + ) + almost_full_inst + ( + .clock (clock), + .resetn (resetn_delayed[RESET_DELAY_ALMOST_FULL]), + .incr_no_overflow (write_into_fifo), + .incr_raw (try_write_into_fifo), + .decr_no_underflow (read_from_fifo), + .decr_raw ((ALMOST_FULL_GUARD_DECR_RAW) ? read_from_fifo : try_read_from_fifo), + .threshold_reached (almost_full) + ); + end + endgenerate + + + + //////////////////// + // // + // Almost empty // + // // + //////////////////// + + generate + if (ALMOST_EMPTY_CUTOFF == 0) begin : empty_almost_empty + assign almost_empty = ~valid_out; + end + else begin : real_almost_empty + logic not_almost_empty; + logic write_into_fifo_late, write_into_fifo_late_two; + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) begin + write_into_fifo_late <= 1'b0; + write_into_fifo_late_two <= 1'b0; + end + else begin + write_into_fifo_late <= write_into_fifo; + write_into_fifo_late_two <= write_into_fifo_late; + if (~sclrn && RESET_EVERYTHING) begin + write_into_fifo_late <= 1'b0; + write_into_fifo_late_two <= 1'b0; + end + end + end + + dla_acl_tessellated_incr_decr_threshold #( + .CAPACITY (DEPTH), + .THRESHOLD (ALMOST_EMPTY_CUTOFF + 1), + .INITIAL_OCCUPANCY (INITIAL_OCCUPANCY), + .THRESHOLD_REACHED_AT_RESET (0), + .WRITE_AND_READ_DURING_FULL (0), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0), + .RESET_EVERYTHING (RESET_EVERYTHING), + .RESET_EXTERNALLY_HELD (1) + ) + almost_empty_inst + ( + .clock (clock), + .resetn (resetn_delayed[RESET_DELAY_ALMOST_EMPTY]), + .incr_no_overflow (write_into_fifo_late_two), + .incr_raw (write_into_fifo_late_two), + .decr_no_underflow (read_from_fifo), + .decr_raw (try_read_from_fifo), + .threshold_reached (not_almost_empty) + ); + assign almost_empty = ~not_almost_empty; + end + endgenerate + +endmodule + +`default_nettype wire diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_parameter_assert.svh b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_parameter_assert.svh new file mode 100644 index 0000000..0998aff --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_parameter_assert.svh @@ -0,0 +1,95 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +RkS+WR/tcDhbCxV+P+hySRAZm4MAoIeeMm4InFhvFj/ZoWLpQZl4m8H3P3b/XrQBW+EiyDDYQE4h +1sGvLqUe7TuqSYmpgwZ6sGjpsdDcIw8sFgjWmDB/QzXy9A6vPmrUBUph5tiRuDnfQpjgMqHnKlBy +eNIYcFKSx/XagmAYlIOE6r9U9H0wQmSp/4lnvfsm0ydKVPV3iUGBWBZmbZ9SX5eS8rRV62FZs2yi +m6g3m5ZVIsxBGnj+gsuwn08SAwYxtYBBvOi1VNbGFjGQjg5627zHx8O6ZlxWRwkbNwlf5njH4cCW +Pi+IYqg6fiNastyVpHj8SFgBuC0oNEfjCNJz9g== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 4208) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_reset_handler.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_reset_handler.sv new file mode 100644 index 0000000..aff51df --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_reset_handler.sv @@ -0,0 +1,300 @@ +// Copyright 2015-2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +///////////////////////////////////////////////////////////////////////////////////// +// // +// dla_reset_handler (renamed version of dla_acl_reset_handler) // +// // +// This block handles the generation of asynchronous and synchronous reset // +// signals for an OpenCL system. Only one type of reset will be generated // +// (based on the ASYNC_RESET parameter), with the other hard-wired to be // +// inactive, so that any logic relying on the unused reset signal will be // +// optimized away. // +// // +// The block takes an active-low reset input that is meant to be fed by a // +// global signal. For use as an asynchronous reset, the input signal directly // +// (or through a synchronizer) feeds the asynchronous reset output. For use // +// as a synchronous reset signal, the input reset is synchronized with proper // +// metastability hardening. // +// // +// *-------------------------------------------------* // +// | AVAILABLE FEATURES | // +// *-------------------------*--------------*----------------*-----------------* // +// | WIRING MODE | Synchronizer | Pulse Extender | Fanout Pipeline | // +// *-------------------------*--------------*----------------*-----------------* // +// | synchronous | Optional | Optional | Optional | // +// | async pass-through | - | - | - | // +// | async with synchronizer | Must Enable | - | - | // +// *-------------------------*--------------*----------------*-----------------* // +// // +///////////////////////////////////////////////////////////////////////////////////// + +/* +Example usage of the reset handler: + +modul my_module #( + parameter bit ASYNC_RESET = 1, // how do the registers CONSUME reset: 1 means registers are reset asynchronously, 0 means registers are reset synchronously + parameter bit SYNCHRONIZE_RESET = 0 // before consumption, do we SYNCHRONIZE the reset: 1 means use a synchronizer (reset arrived asynchronously), 0 means passthrough (reset was already synchronized) + ... +) ( + input wire clk, + input wire i_resetn, // this signal is assumed to be routed on a global network (although that is not strictlty necessary) + ... +); + + // local parameters + localparam NUM_RESET_COPIES = 3; // select this number to reduce the fanout of the synchronous reset signal within this module + localparam RESET_PIPE_DEPTH = 4; // select this number to allow adequate registers on the reset path for retiming + + // reset related signals + // we will write code that uses both of these signals, but remember that one of them will be hard-wired to '1' based on whether we select asynchronous or synchronous reset + logic aclrn; // only one async reset signal, no special handling for fanout + logic [NUM_RESET_COPIES-1:0] sclrn; // multiple copies of synchronous reset to reduce fanout + logic resetn_synchronized; // use this signal to prevent sub-blocks from requiring additional synchronizers + + // instantiate the reset handler + dla_reset_handler #( + .ASYNC_RESET (ASYNC_RESET), // select whether reset should be consumed asynchronously (1) or synchronously (0) + .USE_SYNCHRONIZER (SYNCHRONIZE_RESET), // select whether to synchronize the reset BEFORE CONSUMPTION + .SYNCHRONIZE_ACLRN (SYNCHRONIZE_RESET), // if ASYNC_RESET == 1 && USE_SYNCHRONIZER == 1, select whether o_alcrn should use the synchronized reset + .PIPE_DEPTH (RESET_PIPE_DEPTH), + .NUM_COPIES (NUM_RESET_COPIES) + ) dla_reset_handler_inst ( + .clk (clk), + .i_resetn (i_resetn), + .o_aclrn (aclrn), + .o_sclrn (sclrn), + .o_resetn_synchronized (resetn_synchronized) + ); + + // sample always block showing use of both aclrn and sclrn + always_ff @(posedge clk or negedge aclrn) begin + // code to use the async reset + // remember, if ASYNC_RESET is set to 0, then aclrn is hard-wired to '1', and all this logic is + // optimized away, so no ACLR ports are actually used in that case + if (~aclrn) begin + // reset EVERY register with aclrn + // if something is missing from this list that register will hold its value when aclrn == 0, whereas the desired behavior is typically aclrn has no effect + myreg1 <= '0; + myreg2 <= '0; + ... + end + else begin + myreg1 <= ...; + myreg2 <= ...; + + // code the sync reset + // Since this comes at the BOTTOM of the code, the assignments here override assignments above, thus + // the synchronous reset takes precendence over all other assignments in this always block. + // Recommended coding style is that this code should be an exact copy of the async code above, + // but optionally with select lines commented out, since not all signals may need a synchronous + // reset. It is a good practice to only reset those registers that REQUIRE a reset here. + if (~scnlrn[0]) begin // select which copy of sclrn to use, to optimize fanout of each copy + // reset only SOME register with sclrn + myreg1 <= '0; + //myreg2 <= '0; // leave this code here, but commented out, to show that this signal has intentionally NOT been reset with sclrn + end + end + end + + // sample sub-module instantiation that has its own synchronizer + my_submodule1 #( + .ASYNC_RESET (ASYNC_RESET), // pass this parameter on to sub modules + ... + ) my_submodule1_inst ( + .clk (clk), + .i_resetn (i_resetn), // pass the input reset signal straight through + ... + ); + + // sample sub-module instantiation that does not have its own synchronizer + my_submodule2 #( + .ASYNC_RESET (ASYNC_RESET), // module may or may not have this parameter + .SYNCHRONIZE_RESET (0), // some modules may selectively allow adding a synchronizer locally or not + // this would be passed on to the USE_SYNCHRONIZER parameter in my_submodule2's dla_reset_handler + ... + ) my_submodule2_inst ( + .clk (clk), + .i_resetn (resetn_synchronized), + ... + ); + + ... + +endmodule +*/ + +`default_nettype none + +module dla_acl_reset_handler #( + // Configure port wiring: + parameter ASYNC_RESET = 0, // set to 1 to select asynchronous reset output, 0 to select synchronous reset output + parameter SYNCHRONIZE_ACLRN = 0, // set to 1 to cause the aclrn output to be fed through the synchronizer (only if enabled), 0 to have it fed directly by i_resetn (when ASYNC_RESET = 1) + + // Configure the synchronizer block: + parameter USE_SYNCHRONIZER = 1, // set to 1 to enable a clock domain crossing synchronizer, 0 to use i_resetn directly without a synchronizer + + // Configure the pulse extender block: + parameter PULSE_EXTENSION = 0, // prolongs the duration of the synchronized reset pulse by PULSE_EXTENSION cycles + // Parameter is only respected when reset is synchronous (ASYNC_RESET = 0) + // Configure the fanout block: + parameter PIPE_DEPTH = 1, // number of pipeline stages for synchronous reset outputs (pipeline stages are added AFTER the synchronizer) + // A value of 0 is valid and means the input will be passed straight to the output after the synchronizer chain + parameter NUM_COPIES = 1 // number of copies of the synchronous reset output. Minimum value 1. +) ( + input wire clk, + input wire i_resetn, // this MUST be an active-low reset signal, NOTE that if this signal is left disconnected, the output reset signals will be stuck ASSERTED + output logic o_aclrn, // asynchronous reset output, equal to i_resetn (synchronized if SYNCHRONIZE_ACLRN=1) if ASYNC_RESET=1, hard wired to '1' otherwise + output logic [NUM_COPIES-1:0] o_sclrn, // multiple copies of synchronous reset output, with 'dont_merge' constraints applied to the registers that feed them to help with fanout + // these signals will be hard-wired to '1' if ASYNC_RESET is 1 + output logic o_resetn_synchronized // signal to drive reset to local sub-modules (to prevent the need for multiple reset synchronizers within a local block) + // if ASYNC_RESET = 1 and SYNCHRONIZE_ACLRN = 0, this is a copy of i_resetn, otherwise this is the reset signal after the synchronizer block +); + + ////////////////////////////////////////// + // // + // First stage: synchronize the reset // + // // + ////////////////////////////////////////// + + localparam SYNCHRONIZER_DEFAULT_DEPTH = 3; // number of register stages used in sychronizer, default is 3 for S10 devices, must always be 2 or larger for all devices + logic resetn_synchronized; + + if (USE_SYNCHRONIZER) begin : GEN_SYNCHRONIZER + if (ASYNC_RESET) begin : GEN_ASYNC_RESET + dla_cdc_reset_async u_dla_cdc_sync_reset + ( + .clk (clk), + .i_async_resetn (i_resetn), + .o_async_resetn (resetn_synchronized) + ); + end else begin : GEN_SYNC_RESET + dla_cdc_reset_sync u_dla_cdc_sync_reset + ( + .clk (clk), + .i_async_resetn (i_resetn), + .o_sync_resetn (resetn_synchronized) + ); + end + end + else begin : NO_SYNCHRONIZER + assign resetn_synchronized = i_resetn; + end + + + + ///////////////////////////////////// + // // + // Second stage: pulse extension // + // // + ///////////////////////////////////// + + logic resetn_extended; + + if (PULSE_EXTENSION > 0 && ASYNC_RESET == 0) begin : GEN_PULSE_EXTENDER // ignore pulse extender argument if reset type is asynchronous + // POWER-UP NOTE: + // This module has no "reset" for its own internal state, and will power up to a random state (PR). If the MSB is 0 on power-up, a spurious + // reset pulse of unknown length will be triggered while the counter counts down to -1. This is not a problem because the "real" reset pulse + // will follow. The resulting behavior will be correct whether the "real" pulse arrives during or after the spurious pulse. + + // count goes from PULSE_EXTENSION down to -1 + localparam WIDTH = $clog2(PULSE_EXTENSION+1) + 1; // Number of bits needed to represent PULSE_EXTENSION, plus one extra MSB for rollover detection + logic [WIDTH-1:0] count; + + // Peculiar coding style is used to work around synthesis arithmetic LUT inference issue - see case 459381. + // Must express all combinational logic as happening BEFORE the arithmetic logic to guarantee LUT depth 1. + logic [WIDTH-1:0] count_mod; + logic [WIDTH-1:0] decr; + + // Present synthesis with an unmistakable counter + always_ff @(posedge clk) begin //no reset + count <= count_mod - decr; + end + + // Express control logic as coming before the arithmetic operands + always_comb begin + if (!resetn_synchronized) begin // active low reset is active, set count to PULSE_EXTENSION + count_mod = PULSE_EXTENSION; + decr = '0; + end + else begin // reset is not active, count down + if (!count[WIDTH-1]) begin // MSB = 0, counter has not reached -1 yet, keep counting down + count_mod = count; + decr = 1'b1; + end + else begin // counter rolled over, stay at -1 + count_mod = '1; + decr = '0; + end + end + end + + // original code (for readability) + // always_ff @(posedge clk) begin + // if (!resetn_synchronized) count <= PULSE_EXTENSION; + // else if (!count[WIDTH-1]) count <= count - 1; + // else count <= -1; + // end + + assign resetn_extended = count[WIDTH-1]; + end + else begin : NO_PULSE_EXTENDER + assign resetn_extended = resetn_synchronized; + end + + + + //////////////////////////////////////////////////////////////////////////////////////////////////////////// + // // + // Third stage: reset distribution management - make multiple copies and add pipeline registers to each // + // // + //////////////////////////////////////////////////////////////////////////////////////////////////////////// + + logic [NUM_COPIES-1:0] resetn_fanout_pipeline; + + if (PIPE_DEPTH > 0) begin : GEN_RESET_PIPELINE + logic [NUM_COPIES-1:0] pipe [PIPE_DEPTH-1:0] /* synthesis dont_merge */; + always_ff @(posedge clk) begin //no reset + pipe[0] <= {NUM_COPIES{resetn_extended}}; + for (int i=1; i<PIPE_DEPTH; i++) begin + pipe[i] <= pipe[i-1]; + end + end + assign resetn_fanout_pipeline = pipe[PIPE_DEPTH-1]; + end + else begin : NO_RESET_PIPELINE + assign resetn_fanout_pipeline = {NUM_COPIES{resetn_extended}}; + end + + + + ////////////////////////////////// + // // + // Finally, drive the outputs // + // // + ////////////////////////////////// + + if (ASYNC_RESET) begin : GEN_ASYNC_RESET + assign o_aclrn = (SYNCHRONIZE_ACLRN) ? resetn_synchronized : i_resetn; //use a sychronized reset if USE_SYNCHRONIZER==1 && SYNCHRONIZE_ACLRN==1 + assign o_sclrn = '1; //tie off + assign o_resetn_synchronized = o_aclrn; //choose the selected reset before fanout pipeline, pulse extension is not allowed on async reset so this is the same as after the synchronizer stage + end + else begin : GEN_SYNC_RESET + assign o_aclrn = '1; //tie off + assign o_sclrn = resetn_fanout_pipeline; //this already has synchronize, pulse extend, and fanout pipeline integrated in + assign o_resetn_synchronized = resetn_extended; //choose the selected reset before fanout pipeline + end + +endmodule + +`default_nettype wire diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_shift_register_no_reset.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_shift_register_no_reset.sv new file mode 100644 index 0000000..8476680 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_shift_register_no_reset.sv @@ -0,0 +1,45 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +`default_nettype none + +module dla_acl_shift_register_no_reset #( + parameter int unsigned WIDTH, + parameter int unsigned STAGES +) ( + input wire clock, + input wire [WIDTH-1:0] D, + output logic [WIDTH-1:0] Q +); + genvar g; + generate + if (STAGES == 0) begin : NO_STAGES + assign Q = D; + end + else begin : GEN_STAGES + logic [WIDTH-1:0] pipe [STAGES-1:0]; + always_ff @(posedge clock) begin + pipe[0] <= D; + end + for (g=1; g<STAGES; g++) begin : GEN_PIPE + always_ff @(posedge clock) begin + pipe[g] <= pipe[g-1]; + end + end + assign Q = pipe[STAGES-1]; + end + endgenerate + +endmodule + +`default_nettype wire diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_std_synchronizer_nocut.v b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_std_synchronizer_nocut.v new file mode 100644 index 0000000..e3b324c --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_std_synchronizer_nocut.v @@ -0,0 +1,195 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +// This file was copied from altera_std_synchronizer_nocut.v, found in +// ($QUARTUS_ROOTDIR)/ip/altera/primitives/altera_std_synchronizer. This +// copy was made and added to the HLD IP library since altera_std_synchronizer_nocut +// is intended for internal use only, and thus is not easily found by Quartus. +// The only change has been to change the comments, and update the name of +// the module (to dla_acl_std_synchronizer_nocut from altera_std_synchronizer_nocut). + +//----------------------------------------------------------------------------- +// +// File: dla_acl_std_synchronizer_nocut.v +// +// Abstract: Single bit clock domain crossing synchronizer. Exactly the same +// as altera_std_synchronizer.v, except that the embedded false +// path constraint is removed in this module. If you use this +// module, you will have to apply the appropriate timing +// constraints. +// +// We expect to make this a standard Quartus atom eventually. +// +// Composed of two or more flip flops connected in series. +// Random metastable condition is simulated when the +// __ALTERA_STD__METASTABLE_SIM macro is defined. +// Use +define+__ALTERA_STD__METASTABLE_SIM argument +// on the Verilog simulator compiler command line to +// enable this mode. In addition, define the macro +// __ALTERA_STD__METASTABLE_SIM_VERBOSE to get console output +// with every metastable event generated in the synchronizer. +// +`timescale 1ns / 1ns + +module dla_acl_std_synchronizer_nocut ( + clk, + reset_n, + din, + dout + ); + + parameter depth = 3; // This value must be >= 2 ! + parameter rst_value = 0; + + input clk; + input reset_n; + input din; + output dout; + + // QuartusII synthesis directives: + // 1. Preserve all registers ie. do not touch them. + // 2. Do not merge other flip-flops with synchronizer flip-flops. + // QuartusII TimeQuest directives: + // 1. Identify all flip-flops in this module as members of the synchronizer + // to enable automatic metastability MTBF analysis. + + (* altera_attribute = {"-name ADV_NETLIST_OPT_ALLOWED NEVER_ALLOW; -name SYNCHRONIZER_IDENTIFICATION FORCED; -name DONT_MERGE_REGISTER ON; -name PRESERVE_REGISTER ON "} *) reg din_s1; + + (* altera_attribute = {"-name ADV_NETLIST_OPT_ALLOWED NEVER_ALLOW; -name DONT_MERGE_REGISTER ON; -name PRESERVE_REGISTER ON"} *) reg [depth-2:0] dreg; + + //synthesis translate_off + initial begin + if (depth <2) begin + $display("%m: Error: synchronizer length: %0d less than 2.", depth); + end + end + + // the first synchronizer register is either a simple D flop for synthesis + // and non-metastable simulation or a D flop with a method to inject random + // metastable events resulting in random delay of [0,1] cycles + +`ifdef __ALTERA_STD__METASTABLE_SIM + + reg[31:0] RANDOM_SEED = 123456; + wire next_din_s1; + wire dout; + reg din_last; + reg random; + event metastable_event; // hook for debug monitoring + + initial begin + $display("%m: Info: Metastable event injection simulation mode enabled"); + end + + always @(posedge clk) begin + if (reset_n == 0) + random <= $random(RANDOM_SEED); + else + random <= $random; + end + + assign next_din_s1 = (din_last ^ din) ? random : din; + + always @(posedge clk or negedge reset_n) begin + if (reset_n == 0) + din_last <= (rst_value == 0)? 1'b0 : 1'b1; + else + din_last <= din; + end + + always @(posedge clk or negedge reset_n) begin + if (reset_n == 0) + din_s1 <= (rst_value == 0)? 1'b0 : 1'b1; + else + din_s1 <= next_din_s1; + end + +`else + + //synthesis translate_on + generate if (rst_value == 0) + always @(posedge clk or negedge reset_n) begin + if (reset_n == 0) + din_s1 <= 1'b0; + else + din_s1 <= din; + end + endgenerate + + generate if (rst_value == 1) + always @(posedge clk or negedge reset_n) begin + if (reset_n == 0) + din_s1 <= 1'b1; + else + din_s1 <= din; + end + endgenerate + //synthesis translate_off + +`endif + +`ifdef __ALTERA_STD__METASTABLE_SIM_VERBOSE + always @(*) begin + if (reset_n && (din_last != din) && (random != din)) begin + $display("%m: Verbose Info: metastable event @ time %t", $time); + ->metastable_event; + end + end +`endif + + //synthesis translate_on + + // the remaining synchronizer registers form a simple shift register + // of length depth-1 + generate if (rst_value == 0) + if (depth < 3) begin + always @(posedge clk or negedge reset_n) begin + if (reset_n == 0) + dreg <= {depth-1{1'b0}}; + else + dreg <= din_s1; + end + end else begin + always @(posedge clk or negedge reset_n) begin + if (reset_n == 0) + dreg <= {depth-1{1'b0}}; + else + dreg <= {dreg[depth-3:0], din_s1}; + end + end + endgenerate + + generate if (rst_value == 1) + if (depth < 3) begin + always @(posedge clk or negedge reset_n) begin + if (reset_n == 0) + dreg <= {depth-1{1'b1}}; + else + dreg <= din_s1; + end + end else begin + always @(posedge clk or negedge reset_n) begin + if (reset_n == 0) + dreg <= {depth-1{1'b1}}; + else + dreg <= {dreg[depth-3:0], din_s1}; + end + end + endgenerate + + assign dout = dreg[depth-2]; + +endmodule + + + diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_tessellated_incr_decr_threshold.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_tessellated_incr_decr_threshold.sv new file mode 100644 index 0000000..014db18 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_tessellated_incr_decr_threshold.sv @@ -0,0 +1,422 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +// This module tracks whether FIFO occupancy is above a predefined threshold. Since the occupancy can only change by +1, 0, or -1,
+// only the lower bits of the used_words counter need to be timing exact. For example, say we want to detect if occupancy >= 2. We
+// activate if occupancy==1 and increasing, and we deactivate if occupancy==2 and decreasing. To detect if occupancy is 1 or 2,
+// the bottom 2 bits of used_words needs to be exact, but the upper bits can be 1 clock cycle late. If the occupancy is 1 or 2 right
+// now, then 1 clock cycle ago it must have been in the range of 0 to 3 inclusive. This technique is applied recursively, e.g. the
+// higher bits of used_words are more stale. If we want a different threshold, then we adjust the reset value of used_words.
+//
+// This module was designed in conjunction with dla_acl_high_speed_fifo.sv. The testbench is grouped together with the fifo.
+//
+// Required files:
+// -dla_acl_tessellated_incr_decr_threshold.sv
+// -dla_acl_reset_handler.sv
+//
+// TEMPORARY FIX:
+// Reset values are set to match the behavior of before reset cleanup. See FB case:457213. This is a workaround for now.
+// Eventually the compiler needs to set the reset parameters correctly, at which point the default values will be set
+// back to the original intent, which is for someone who knows nothing about the reset in their system.
+
+`default_nettype none
+
+module dla_acl_tessellated_incr_decr_threshold #(
+ //general configuration
+ parameter longint CAPACITY, // occupancy starts at INITIAL_OCCUPANCY, incr_no_overflow and decr_no_underflow should never push occupancy below 0 or above CAPACITY
+ parameter longint THRESHOLD, // 1 or larger, up to CAPACITY, 1 checks for not empty, CAPACITY checks for full
+ parameter longint INITIAL_OCCUPANCY = 0,
+
+ //DEPRECATED -- case:555803 tracks the removal of this
+ parameter int RESET_RELEASE_DELAY = 0, // THIS PARAMETER HAS NO EFFECT NO MATTER WHAT VALUE YOU SET IT TO, look at the reset structure inside dla_acl_mid_speed_fifo for how to now handle delayed reset exit
+
+ //special behavior needed for some cases in fifo
+ parameter bit THRESHOLD_REACHED_AT_RESET = 0, // set to 1 if you want threshold_reached to be high at reset, e.g. fifo appears full at reset
+ parameter bit WRITE_AND_READ_DURING_FULL = 0, // if 1 then incr and decr can cancel when occupancy is at CAPACITY, if 0 then incr is ignored when occupancy is at CAPACITY
+ parameter bit WRITE_AND_READ_DURING_EMPTY = 0,// set to 1 for use with almost_empty in zero latency fifos, behavior is different when read_used_words changes before write_used_words
+
+ //reset configuration
+ parameter bit ASYNC_RESET = 1, // how do we use reset: 1 means registers are reset asynchronously, 0 means registers are reset synchronously
+ parameter bit SYNCHRONIZE_RESET = 0, // based on how reset gets to us, what do we need to do: 1 means synchronize reset before consumption (if reset arrives asynchronously), 0 means passthrough (managed externally)
+ parameter bit RESET_EVERYTHING = 0, // intended for partial reconfig debug, set to 1 to reset every register (normally async reset excludes data path and sync reset additionally excludes some control signals)
+ parameter bit RESET_EXTERNALLY_HELD = 1 // set to 1 if resetn will be held for at least FOUR clock cycles, otherwise we will internally pulse stretch reset before consumption
+)(
+ input wire clock,
+ input wire resetn, // longest reset chain is through the tessellated adder
+ input wire incr_no_overflow, // when tracking fifo occupancy, this is typically "wrreq & ~full"
+ input wire incr_raw, // to detect when the threshold is reached, we don't care about overflow, so can use "wrreq"
+ input wire decr_no_underflow, // when tracking fifo occupancy, this is typically "rdreq & ~empty"
+ input wire decr_raw, // to detect when the threshold is reached, we don't care about underflow, so can use "rdreq"
+ output logic threshold_reached // asserted when occupancy >= THRESHOLD
+);
+
+ // the basic functionality of this circuit is as follows:
+ // always_ff @(posedge clock) begin
+ // //decr must be off when occupancy is 0, incr must be off when occupancy == CAPACITY (unless WRITE_AND_READ_DURING_FULL = 1)
+ // occupancy <= occupancy + incr_no_overflow - decr_no_underflow;
+ // if (~resetn) occupancy <= INITIAL_OCCUPANCY;
+ // end
+ // assign threshold_reached = (occupancy >= THRESHOLD);
+
+ // To support initial occupancy, we could instead reset the occupancy to 0 and assign threshold_reached = occupancy >= (THRESHOLD-INITIAL_OCCUPANCY).
+ // This circuit was designed to detect (THRESHOLD-INITIAL_OCCUPANCY) = 0. This is the timing requirements for different bits of the occupancy counter:
+ //
+ // Bit range | Name | Max lateness | Detection range boundary factoring in lateness
+ // -------------+-----------+---------------+-------------------------------------------------
+ // 1:0 | lo | 0 | N/A - timing is exact
+ // 4:2 | mid | 1 | -2 to +1, are we in the right group of 4
+ // 5+ | hi | 13 | -18 to +13, are we in the right group of 32
+ //
+ // Note that mid[2] (bit 4 of occupancy) is computed at the same time as the other bits of mid, but is grouped together with the zero detect for hi. The group of 16
+ // defined by mid[2] spans from -10 to +5, so actually there can be up to 5 clocks of lateness. The threshold reached happens at mid=1 instead of mid=0 so that we
+ // can get some extra lateness for mid[2].
+ // +-------+
+ // threshold - initial_occupancy: -19 -18 -17 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 |-1 0 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14
+ // +-------+
+ // lo: 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 | 1 2 | 3 0 1 2 3 0 1 2 3 0 1 2 3 0
+ // +---+-------+---+
+ // mid: 6 5 5 5 5 4 4 4 4 3 3 3 3 2 2 2 2 | 1 1 1 1 | 0 0 0 0 7 7 7 7 6 6 6 6 5
+ // +---------------------------------------------------------------+---------------+-----------------------------------------------+
+ // hi: 1 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |-1
+ // +-------------------------------------------------------------------------------------------------------------------------------+
+ //
+ // The reset values come from the column where "threshold - initial occupancy" is 0, in this example lo=2, mid=1, and hi=0. This will detect an initial occupancy adjusted
+ // threshold of 0. If we wanted to detect threshold 19 for example, the reset values simply come from 19 columns to the left, as we would need to increment 19 times
+ // (moving rightwards) until we reach the threshold, in this case the reset values are lo=3, mid=6 and hi=1.
+ //
+ // Notice how the group of 4 for mid is not centered inside the group of 32 for hi. While this means we cannot utilize the maximum lateness (a group size of 32 should have
+ // lateness of 15), non-centered groups makes the tessellation logic simpler. This results in fewer pipeline stages that are needed to propagate a carry to the higher bits.
+ // Area savings are achieved by tolerating a lower max lateness (13 is plenty enough, CAPACITY is specified on 64 bits so the occupancy cannot really use more bits).
+
+
+ localparam int INIT_OCC_TO_THRESH = THRESHOLD - INITIAL_OCCUPANCY;
+ localparam bit THRESHOLD_REACHED_EXIT_RESET = (THRESHOLD > INITIAL_OCCUPANCY) ? 1'b0 : 1'b1;
+
+ //tessellation control - for bits 5+ of the occupancy counter, specify the minimum number of bits per tessellation stage
+ //experiments indicate 4 is the best value for both fmax and area
+ //a smaller value results in more pipelined registers for wrap-around detect, a value of 3 ensures everything fits within a 6-lut including the sclr
+ //a larger value does not necessarily save area, quartus may decide to use a carry chain which tends to bloat the area
+ //this parameter specifies the minimum size, maximum lateness is 13 so if the occupancy needs many bits then we will increase the number of bits per tessellation stage
+ localparam int MIN_TESS_SIZE_HI_BITS = 4;
+
+
+
+ /////////////
+ // //
+ // Reset //
+ // //
+ /////////////
+
+ //count_at_target determines if the upper bits (excluding bits 1:0) are at the correct value such that a transition is allowed on threshold_reached
+ //count_at_target is not reset, and neither is the zero detect on the upper bits (bit 5+)
+ //the counters for occupancy are reset, but there are up to 3 pipeline stages from these to count_at_target (up to 2 for the zero detect, and one more for count_at_target)
+ //therefore the reset needs to be held for 4 clock edges, 1 to reset the counters, and up to 3 more to propagate to count_at_target
+ //the reason for not resetting count_at_target is to reduce the fanin logic (can fit within a 6 lut) and to reduce fanout of the reset signal (improves routability)
+
+ //since we have to hold the reset for 4 clocks anyways, we can also remove the reset from the wrap-around detect registers, the pipeline stages from tessellating the counter
+ //if the previous tessellation stage did not report a wrap-around on the previous clock cycle, then the current tessellation stage cannot report a wrap-around now, use this to propagate reset value 0
+ //lo_3_0 has a reset, which means we can skip mid_5_6, hi.wrap[0], and hi.wrap[1] -> this will cover up to 2+3+4+4 = 13 bits of the counter
+ //hi.wrap[2] has a reset, which means we can skip hi.wrap[3], hi.wrap[4], and hi.wrap[5]
+ //hi.wrap[6] has a reset, which means we can skip hi.wrap[7], and hi.wrap[8]
+
+ genvar g;
+ logic aclrn, sclrn;
+ logic sclrn_before_pulse_stretch, sclrn_pulse_stretched;
+ logic [3:0] sclrn_chain;
+ logic reset_exit_n;
+
+ dla_acl_reset_handler
+ #(
+ .ASYNC_RESET (ASYNC_RESET),
+ .USE_SYNCHRONIZER (SYNCHRONIZE_RESET),
+ .SYNCHRONIZE_ACLRN (SYNCHRONIZE_RESET),
+ .PIPE_DEPTH (0),
+ .NUM_COPIES (1)
+ )
+ dla_acl_reset_handler_inst
+ (
+ .clk (clock),
+ .i_resetn (resetn),
+ .o_aclrn (aclrn),
+ .o_resetn_synchronized (),
+ .o_sclrn (sclrn_before_pulse_stretch)
+ );
+
+ generate
+ if (ASYNC_RESET) begin : gen_no_sclrn
+ assign sclrn = 1'b1;
+ end
+ else if (RESET_EXTERNALLY_HELD) begin : gen_direct_sclrn //this is the typical usage from within dla_hld_fifo on s10
+ assign sclrn = sclrn_before_pulse_stretch;
+ end
+ else begin : gen_pulse_stretch_sclrn
+ always_ff @(posedge clock) begin
+ sclrn_chain <= (sclrn_chain << 1) | sclrn_before_pulse_stretch;
+ sclrn_pulse_stretched <= &sclrn_chain;
+ sclrn <= sclrn_pulse_stretched;
+ end
+ end
+ endgenerate
+
+ //assuming occupancy starts at 0, so if threshold_reached needs to be asserted during reset, we need a way to deassert it after reset is released
+ //the only thing consumed from this block below is the reset_exit_n signal
+ generate
+ if (THRESHOLD_REACHED_EXIT_RESET == THRESHOLD_REACHED_AT_RESET) begin //don't need to flip value of threshold_reached at end of reset
+ assign reset_exit_n = 1'b1; //this is active low
+ end
+ else begin
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) reset_exit_n <= 1'b0;
+ else begin
+ reset_exit_n <= sclrn;
+ end
+ end
+ end
+ endgenerate
+
+
+ //////////////////////////
+ // //
+ // Occupancy tracking //
+ // //
+ //////////////////////////
+
+ generate
+ if (THRESHOLD < 1) begin : THRESHOLD_REACHED_ONE
+ assign threshold_reached = 1'b1;
+ end
+ else if (THRESHOLD > CAPACITY) begin : THRESHOLD_REACHED_ZERO
+ assign threshold_reached = 1'b0;
+ end
+ else if (CAPACITY == 64'd1) begin : CAPACITY_ONE
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) threshold_reached <= THRESHOLD_REACHED_AT_RESET;
+ else begin
+ if (incr_no_overflow & ((WRITE_AND_READ_DURING_EMPTY) ? ~decr_no_underflow : 1'b1)) threshold_reached <= 1'b1;
+ if (decr_no_underflow & ((WRITE_AND_READ_DURING_FULL) ? ~incr_no_overflow : 1'b1)) threshold_reached <= 1'b0;
+ if (~reset_exit_n) threshold_reached <= THRESHOLD_REACHED_EXIT_RESET;
+ if (~sclrn) threshold_reached <= THRESHOLD_REACHED_AT_RESET;
+ end
+ end
+ end
+ else begin : INCR_DECR
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // //
+ // Tessellated counters to track the occupancy, upper bits are progressively more stale //
+ // //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+ localparam bit [63:0] TWO_MINUS_INIT_OCC_TO_THRESH = 64'd2 - INIT_OCC_TO_THRESH;
+ localparam bit [1:0] LO_RESET = TWO_MINUS_INIT_OCC_TO_THRESH[1:0];
+ localparam bit [63:0] FIVE_PLUS_INIT_OCC_TO_THRESH = 64'd5 + INIT_OCC_TO_THRESH;
+ localparam bit [2:0] MID_RESET = FIVE_PLUS_INIT_OCC_TO_THRESH[4:2];
+
+ logic [1:0] lo; //bits [1:0] of occupancy
+ logic [2:0] mid; //bits [4:2] of occupancy, reverse order
+ logic lo_3_0; //asserts when lo transitions between 3 and 0 -> like an enable for mid
+ logic mid_5_6; //asserts when mid transitions between 3 and 4 -> like an enable for hi
+ logic count_at_target; //are bits [WIDTH-1:2] at the correct value such that a transition on threshold_reached may happen, represents the collection of mid and hi
+ logic upper_zeros; //like count_at_target, but applicable only to bits [WIDTH-1:5]
+
+ //bits 1:0, exact timing
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) begin
+ lo <= LO_RESET;
+ lo_3_0 <= 1'b0;
+ end
+ else begin
+ //a more quartus-friedly version of:
+ //lo <= lo + incr_no_overflow - decr_no_underflow
+ lo[0] <= lo[0] ^ incr_no_overflow ^ decr_no_underflow;
+ lo[1] <= lo[1] ^ (incr_no_overflow & ~decr_no_underflow & lo[0]) ^ (~incr_no_overflow & decr_no_underflow & ~lo[0]);
+
+ //assert when lo transitions between 3 and 0, use next state logic (3 and incrementing, or 0 and decrementing) so that registered signal asserts when the wrap actually happens
+ lo_3_0 <= (incr_no_overflow & ~decr_no_underflow & (lo==2'h3)) | (~incr_no_overflow & decr_no_underflow & (lo==2'h0));
+ if (~sclrn) begin
+ lo <= LO_RESET;
+ lo_3_0 <= 1'b0;
+ end
+ end
+ end
+
+ //bits 4:2 reverse order, 1 clock late
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) begin
+ mid <= MID_RESET;
+ mid_5_6 <= 1'b0;
+ end
+ else begin
+ if (lo_3_0) begin //lo has wrapped around between 0 and 3
+ if (lo[0]) mid <= mid + 1'b1; //lo is currently odd, therefore it must have went from 0 to 3 -> although lo decremented, mid increments, this is where the reversal happens
+ else mid <= mid - 1'b1;
+ end
+
+ //assert when mid transitions between 5 and 6, use next state logic (5 and incrementing, or 6 and decrementing) so that registered signal asserts when the wrap actually happens
+ mid_5_6 <= lo_3_0 & ((lo[0]) ? (mid==3'h5) : (mid==3'h6));
+ if (~sclrn) begin
+ mid <= MID_RESET;
+ if (RESET_EVERYTHING) mid_5_6 <= 1'b0;
+ end
+ end
+ end
+
+ //bits 5+ reverse order, 2+ clocks late, uppermost bits can be up to 10 clocks late, zero detect can be up to 12 clocks late
+ //the only signal consumed from this block is upper_zeros, which is a stale version of checking if {hi,mid[2]} == 0
+ if (CAPACITY <= 16) begin
+ assign upper_zeros = 1'b1;
+ end
+ else if (CAPACITY <= 32) begin
+ assign upper_zeros = ~mid[2];
+ end
+ else begin : HIGH_CAPACITY
+ localparam int HI_BITS = $clog2(CAPACITY) - 5;
+ localparam bit [63:0] THIRTEEN_PLUS_INIT_OCC_TO_THRESH = 64'd13 + INIT_OCC_TO_THRESH;
+ localparam bit [HI_BITS-1:0] HI_RESET = THIRTEEN_PLUS_INIT_OCC_TO_THRESH[HI_BITS+4:5];
+
+ localparam int TESS_STAGES_RAW = (HI_BITS+MIN_TESS_SIZE_HI_BITS-1) / MIN_TESS_SIZE_HI_BITS; //ceiling(hi_bits/tess_size)
+ localparam int TESS_STAGES = (TESS_STAGES_RAW >= 9) ? 9 : TESS_STAGES_RAW; //clip at 9 stages, stage 0 is 2 clocks late, stage 8 is 10 clocks late
+
+ logic [HI_BITS-1:0] hi; //the actual bits of the tessellated counter
+ logic [TESS_STAGES:0] wrap; //index n+1 indicates stage n has wrapped-around - asserts on the same clock cycle as the counter actually wrapping around
+ logic [TESS_STAGES:0] odd; //this is just the lsb of the counter from each tessellation stage
+
+ assign wrap[0] = mid_5_6; //previous values for first tessellation stage come from the mid counter
+ assign odd[0] = mid[0];
+
+ for (g=0; g<TESS_STAGES; g++) begin : HI_TESS
+ localparam int START = g * HI_BITS / TESS_STAGES; //inclusive
+ localparam int END = (g+1) * HI_BITS / TESS_STAGES; //exclusive
+
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) begin
+ hi[END-1:START] <= HI_RESET[END-1:START];
+ wrap[g+1] <= 1'b0;
+ end
+ else begin
+ if (wrap[g]) begin
+ if (odd[g]) hi[END-1:START] <= hi[END-1:START] - 1'b1;
+ else hi[END-1:START] <= hi[END-1:START] + 1'b1;
+ end
+ //current stage wraps arounds when (0 and decrementing) | (MAX_VALUE and incrementing), use next state logic so that registered signal asserts when the wrap actually happens
+ wrap[g+1] <= (wrap[g] & odd[g] & ~(|hi[END-1:START])) | (wrap[g] & ~odd[g] & (&hi[END-1:START]));
+ if (~sclrn) begin
+ hi[END-1:START] <= HI_RESET[END-1:START];
+ if (g==2 || g==6) wrap[g+1] <= 1'b0;
+ else if (RESET_EVERYTHING) wrap[g+1] <= 1'b0;
+ end
+ end
+ end
+ assign odd[g+1] = hi[START];
+ end
+
+ //hi can be up to 10 clocks late, use up to 2 clocks to determine if all bits are 0
+ //upper_zeros is up to 12 clocks late
+ localparam int HI_AND_MID2_BITS = HI_BITS + 1;
+ logic [HI_AND_MID2_BITS-1:0] hi_and_mid2;
+ assign hi_and_mid2 = {hi, mid[2]};
+
+ if (HI_AND_MID2_BITS <= 6) begin : UPPER_ZEROS_ONE
+ always_ff @(posedge clock) begin
+ upper_zeros <= (hi_and_mid2 == 0);
+ end
+ end
+ else if (HI_AND_MID2_BITS <= 11) begin : UPPER_ZEROS_ONE_PLUS //instead of grouping 6 and 5 inputs and then merging the result, we can fit the 5 within the second stage merge
+ logic group;
+ always_ff @(posedge clock) begin
+ group <= (hi_and_mid2[5:0] == 0);
+ upper_zeros <= group & (hi_and_mid2[HI_AND_MID2_BITS-1:6] == 0);
+ end
+ end
+ //we could extend the trick used in UPPER_ZEROS_ONE_PLUS to save one register, but it is not common for fifos to need so much capacity
+ else begin : UPPER_ZEROS_TWO
+ //first register stage collects groups of 6, second register stage merges all together
+ localparam int GROUPS = (HI_AND_MID2_BITS+5) / 6; //ceiling(hi_and_mid2_bits/6)
+ logic [GROUPS-1:0] group;
+ always_ff @(posedge clock) begin
+ for (int i=0; i<GROUPS-1; i++) group[i] <= (hi_and_mid2[6*i+:6] == 0);
+ group[GROUPS-1] <= (hi_and_mid2[HI_AND_MID2_BITS-1:6*(GROUPS-1)] == 0);
+ upper_zeros <= &group;
+ end
+ end
+ end
+
+
+
+ //////////////////////////////////////////////////////////
+ // //
+ // Can a transition even happen on threshold_reached? //
+ // //
+ //////////////////////////////////////////////////////////
+
+ //determine if the upper bits (exluding bits 1:0) are at the value at which a transition is allowed for threshold_reached
+ //let quartus trim away stuff that isn't needed at smaller bit width
+ if (CAPACITY <= 4) begin
+ assign count_at_target = 1'b1;
+ end
+ else if (CAPACITY <= 8) begin
+ assign count_at_target = mid[0];
+ end
+ else begin
+ always_ff @(posedge clock) begin
+ //mid[1:0] next state 1: (1 and no change) or (0 and incrementing) or (2 and decrementing)
+ count_at_target <= ((~lo_3_0) ? (mid[1:0]==2'h1) : (lo[0]) ? (mid[1:0]==2'h0) : (mid[1:0]==2'h2)) & upper_zeros;
+ end
+ end
+
+
+
+ //////////////////////////////////////////////
+ // //
+ // Check if we are crossing the threshold //
+ // //
+ //////////////////////////////////////////////
+
+ if (THRESHOLD == 1 && !WRITE_AND_READ_DURING_EMPTY) begin //checking for not empty
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) threshold_reached <= THRESHOLD_REACHED_AT_RESET;
+ else begin
+ if (decr_raw & (lo==2'h2) & count_at_target) threshold_reached <= 1'b0;
+ if (incr_raw) threshold_reached <= 1'b1;
+ if (~reset_exit_n) threshold_reached <= THRESHOLD_REACHED_EXIT_RESET;
+ if (~sclrn) threshold_reached <= THRESHOLD_REACHED_AT_RESET;
+ end
+ end
+ end
+ else if (THRESHOLD == CAPACITY && !WRITE_AND_READ_DURING_FULL) begin //checking for full
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) threshold_reached <= THRESHOLD_REACHED_AT_RESET;
+ else begin
+ if (incr_raw & (lo==2'h1) & count_at_target) threshold_reached <= 1'b1;
+ if (decr_raw) threshold_reached <= 1'b0;
+ if (~reset_exit_n) threshold_reached <= THRESHOLD_REACHED_EXIT_RESET;
+ if (~sclrn) threshold_reached <= THRESHOLD_REACHED_AT_RESET;
+ end
+ end
+ end
+ else begin //if threshold is not near full or empty, don't need to guard against overflow/underflow
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) threshold_reached <= THRESHOLD_REACHED_AT_RESET;
+ else begin
+ if (incr_raw & ~decr_raw & (lo==2'h1) & count_at_target) threshold_reached <= 1'b1;
+ if (~incr_raw & decr_raw & (lo==2'h2) & count_at_target) threshold_reached <= 1'b0;
+ if (~reset_exit_n) threshold_reached <= THRESHOLD_REACHED_EXIT_RESET;
+ if (~sclrn) threshold_reached <= THRESHOLD_REACHED_AT_RESET;
+ end
+ end
+ end
+ end
+ endgenerate
+
+endmodule
+
+`default_nettype wire
diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_tessellated_incr_lookahead.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_tessellated_incr_lookahead.sv new file mode 100644 index 0000000..2a99d58 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_tessellated_incr_lookahead.sv @@ -0,0 +1,252 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +// If one can tolerate an extra clock cycle of latency from the increment signal to when the counter is updated
+// then it gives sufficient time to do lookahead (bottom bits are 1) so that we can generate independent
+// increment signals for each bit range. Without the extra latency this strategy can still be done, but then
+// we would need combinational logic for the clock enables for each bit range of the counter.
+
+// This module was designed in conjunction with dla_acl_high_speed_fifo.sv. The testbench is grouped together with the fifo.
+
+// Required files:
+// -dla_acl_tessellated_incr_lookahead.sv
+// -dla_acl_reset_handler.sv
+// -dla_acl_fanout_pipeline.sv
+// -dla_acl_std_synchronizer_nocut.sv
+
+// TEMPORARY FIX:
+// Reset values are set to match the behavior of before reset cleanup. See FB case:457213. This is a workaround for now.
+// Eventually the compiler needs to set the reset parameters correctly, at which point the default values will be set
+// back to the original intent, which is for someone who knows nothing about the reset in their system.
+
+
+`default_nettype none
+
+module dla_acl_tessellated_incr_lookahead #(
+ //general configuration
+ parameter int WIDTH, // width of the counter, no limit but no longer logic depth 1 at 15 or higher, and also INITIAL_OCCUPANCY is inherently only 32 bits
+ parameter int INITIAL_OCCUPANCY = 0, // initial value of the counter
+
+ //reset configuration
+ parameter bit ASYNC_RESET = 1, // how do we use reset: 1 means registers are reset asynchronously, 0 means registers are reset synchronously
+ parameter bit SYNCHRONIZE_RESET = 0, // based on how reset gets to us, what do we need to do: 1 means synchronize reset before consumption (if reset arrives asynchronously), 0 means passthrough (managed externally)
+ parameter bit RESET_EVERYTHING = 0, // intended for partial reconfig debug, set to 1 to reset every register (normally async reset excludes data path and sync reset additionally excludes some control signals)
+ parameter bit RESET_EXTERNALLY_HELD = 1 // set to 1 if resetn will be held for at least THREE clock cycles, otherwise we will internally pulse stretch reset before consumption
+) (
+ input wire clock,
+ input wire resetn, // if using sync reset, resetn must be held for at least THREE clocks (cnt -> lo_ones -> incr_stage), otherwise set RESET_EXTERNALLY_HELD=0 so pulse stretch is dnoe internally
+ input wire incr, // increment the count as of 2 clock cycles later
+ output logic [WIDTH-1:0] count // count that tracks increment, resets to 0
+);
+
+ // basic functionality of this circuit
+ // logic incr_prev;
+ // always_ff @(posedge clock) begin
+ // incr_prev <= incr;
+ // count <= count + incr_prev;
+ // if (~resetn) begin
+ // incr_prev <= 1'b0;
+ // count <= INITIAL_OCCUPANCY;
+ // end
+ // end
+
+ //reset
+ logic aclrn, sclrn;
+ logic sclrn_before_pulse_stretch, sclrn_after_pulse_stretch, sclrn_base;
+ logic [2:0] sclrn_chain;
+
+ dla_acl_reset_handler
+ #(
+ .ASYNC_RESET (ASYNC_RESET),
+ .USE_SYNCHRONIZER (SYNCHRONIZE_RESET),
+ .SYNCHRONIZE_ACLRN (SYNCHRONIZE_RESET),
+ .PIPE_DEPTH (0),
+ .NUM_COPIES (1)
+ )
+ dla_acl_reset_handler_inst
+ (
+ .clk (clock),
+ .i_resetn (resetn),
+ .o_aclrn (aclrn),
+ .o_resetn_synchronized (),
+ .o_sclrn (sclrn_before_pulse_stretch)
+ );
+
+ generate
+ if (RESET_EXTERNALLY_HELD) begin : gen_direct_sclrn
+ assign sclrn = sclrn_before_pulse_stretch;
+ end
+ else begin : gen_pulse_stretch_sclrn
+ always_ff @(posedge clock) begin
+ sclrn_chain <= (sclrn_chain << 1) | sclrn_before_pulse_stretch;
+ sclrn_after_pulse_stretch <= &sclrn_chain;
+ sclrn_base <= sclrn_after_pulse_stretch;
+ sclrn <= sclrn_base;
+ end
+ end
+ endgenerate
+
+
+ // tessellation configuration:
+ // - only up to 4 stages are allowed because lower 2 bits can roll over before fifth stage can update
+ // - for 6-lut, need to be at most WIDTH = 14, beyond this the circuit will still work but no longer logic depth 1
+ //
+ // WIDTH | FIRST | SECOND | THIRD | FOURTH
+ // --------+-----------+-----------+-----------+-------
+ // 1 | 1 | 0 | 0 | 0
+ // 2 | 2 | 0 | 0 | 0
+ // 3 | 3 | 0 | 0 | 0
+ // 4 | 4 | 0 | 0 | 0
+ // --------+-----------+-----------+-----------+-------
+ // 5 | 2 | 3 | 0 | 0
+ // 6 | 2 | 4 | 0 | 0
+ // --------+-----------+-----------+-----------+-------
+ // 7 | 2 | 2 | 3 | 0
+ // 8 | 2 | 3 | 3 | 0
+ // 9 | 2 | 3 | 4 | 0
+ // 10 | 2 | 4 | 4 | 0
+ // --------+-----------+-----------+-----------+-------
+ // 11 | 2 | 3 | 3 | 3
+ // 12 | 2 | 3 | 3 | 4
+ // 13 | 2 | 3 | 4 | 4
+ // 14 | 2 | 4 | 4 | 4
+ // --------+-----------+-----------+-----------+-------
+ // 15 | 2 | 4 | 4 | 5
+ // 16 | 2 | 4 | 5 | 5
+ // 17 | 2 | 5 | 5 | 5
+
+ localparam bit [31:0] INIT_OCC = INITIAL_OCCUPANCY; //allows for bit selects into INIT_OCC
+ localparam int STAGES = (WIDTH<=4) ? 1 : (WIDTH<=6) ? 2 : (WIDTH<=10) ? 3 : 4;
+ localparam int UPPER_STAGES = (STAGES<=2) ? 1 : (STAGES-1);
+ localparam int UPPER_WIDTH = (WIDTH<=4) ? 4 : (WIDTH-2);
+
+ localparam int FIRST_BITS = (STAGES==1) ? WIDTH : 2;
+ localparam int SECOND_BITS = (STAGES==1) ? 0 : (UPPER_WIDTH/UPPER_STAGES);
+ localparam int THIRD_BITS = (STAGES<=2) ? 0 : ((2*UPPER_WIDTH/UPPER_STAGES)-(UPPER_WIDTH/UPPER_STAGES));
+ localparam int FOURTH_BITS = (STAGES<=3) ? 0 : ((3*UPPER_WIDTH/UPPER_STAGES)-(2*UPPER_WIDTH/UPPER_STAGES));
+
+ //first stage
+ logic first_incr;
+ logic [FIRST_BITS-1:0] first_cnt;
+
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) begin
+ first_incr <= 1'b0;
+ first_cnt <= INIT_OCC[0 +: FIRST_BITS];
+ end
+ else begin
+ first_incr <= incr;
+ first_cnt <= first_cnt + first_incr;
+ if (~sclrn) begin
+ first_incr <= 1'b0;
+ first_cnt <= INIT_OCC[0 +: FIRST_BITS];
+ end
+ end
+ end
+
+ //second stage
+ logic first_ones, second_incr;
+ logic [SECOND_BITS-1:0] second_cnt;
+ generate
+ if (SECOND_BITS) begin
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) begin
+ first_ones <= (INIT_OCC[0 +: FIRST_BITS] == {FIRST_BITS{1'h1}}) ? 1'b1 : 1'b0;
+ second_incr <= 1'b0;
+ second_cnt <= INIT_OCC[FIRST_BITS +: SECOND_BITS];
+ end
+ else begin
+ first_ones <= ((incr & first_incr) ? (first_cnt==2'h1) : (incr | first_incr) ? (first_cnt==2'h2) : (first_cnt==2'h3)) ? 1'b1 : 1'b0;
+ second_incr <= incr & first_ones;
+ second_cnt <= second_cnt + second_incr;
+ if (~sclrn) begin
+ if (RESET_EVERYTHING) first_ones <= (INIT_OCC[0 +: FIRST_BITS] == {FIRST_BITS{1'h1}}) ? 1'b1 : 1'b0;
+ second_incr <= 1'b0;
+ second_cnt <= INIT_OCC[FIRST_BITS +: SECOND_BITS];
+ end
+ end
+ end
+ end
+ endgenerate
+
+ //third stage
+ logic second_ones, third_incr;
+ logic [THIRD_BITS-1:0] third_cnt;
+ generate
+ if (THIRD_BITS) begin
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) begin
+ second_ones <= (INIT_OCC[FIRST_BITS +: SECOND_BITS] == {SECOND_BITS{1'h1}}) ? 1'b1 : 1'b0;
+ third_incr <= 1'b0;
+ third_cnt <= INIT_OCC[(FIRST_BITS+SECOND_BITS) +: THIRD_BITS];
+ end
+ else begin
+ second_ones <= &second_cnt;
+ third_incr <= incr & first_ones & second_ones;
+ third_cnt <= third_cnt + third_incr;
+ if (~sclrn) begin
+ if (RESET_EVERYTHING) second_ones <= (INIT_OCC[FIRST_BITS +: SECOND_BITS] == {SECOND_BITS{1'h1}}) ? 1'b1 : 1'b0;
+ third_incr <= 1'b0;
+ third_cnt <= INIT_OCC[(FIRST_BITS+SECOND_BITS) +: THIRD_BITS];
+ end
+ end
+ end
+ end
+ endgenerate
+
+ //fourth stage
+ logic third_ones, fourth_incr;
+ logic [FOURTH_BITS-1:0] fourth_cnt;
+ generate
+ if (FOURTH_BITS) begin
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) begin
+ third_ones <= (INIT_OCC[(FIRST_BITS+SECOND_BITS) +: THIRD_BITS] == {THIRD_BITS{1'h1}}) ? 1'b1 : 1'b0;
+ fourth_incr <= 1'b0;
+ fourth_cnt <= INIT_OCC[(FIRST_BITS+SECOND_BITS+THIRD_BITS) +: FOURTH_BITS];
+ end
+ else begin
+ third_ones <= &third_cnt;
+ fourth_incr <= incr & first_ones & second_ones & third_ones;
+ fourth_cnt <= fourth_cnt + fourth_incr;
+ if (~sclrn) begin
+ if (RESET_EVERYTHING) third_ones <= (INIT_OCC[(FIRST_BITS+SECOND_BITS) +: THIRD_BITS] == {THIRD_BITS{1'h1}}) ? 1'b1 : 1'b0;
+ fourth_incr <= 1'b0;
+ fourth_cnt <= INIT_OCC[(FIRST_BITS+SECOND_BITS+THIRD_BITS) +: FOURTH_BITS];
+ end
+ end
+ end
+ end
+ endgenerate
+
+ //output
+ generate
+ if (STAGES == 1) begin
+ assign count = first_cnt;
+ end
+ if (STAGES == 2) begin
+ assign count = {second_cnt, first_cnt};
+ end
+ if (STAGES == 3) begin
+ assign count = {third_cnt, second_cnt, first_cnt};
+ end
+ if (STAGES == 4) begin
+ assign count = {fourth_cnt, third_cnt, second_cnt, first_cnt};
+ end
+ endgenerate
+
+endmodule
+
+
+
+`default_nettype wire
diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_width_clip.svh b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_width_clip.svh new file mode 100644 index 0000000..6a8cbf5 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_width_clip.svh @@ -0,0 +1,49 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//
+// Objective:
+// The width of a data path signal should be parameter of type "int unsigned", however this causes some complications for width = 0.
+// When the width parameter is of type "int", the bit indexing is actually [-1:0] which is confusing but legal.
+// However for "int unsigned", verilog spec say mixing signed and unsigned results in unsigned, so -1 unsigned is interpreted as a large number.
+// We provide a macro to clip the width when 0.
+//
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+`ifndef DLA_ACL_WIDTH_CLIP_SVH
+`define DLA_ACL_WIDTH_CLIP_SVH
+
+`define DLA_ACL_WIDTH_CLIP(WIDTH) (((WIDTH)==0)?0:((WIDTH)-1)):0
+
+`endif
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//
+// Example usage:
+//
+// `include "dla_acl_width_clip.svh"
+// module my_module #(
+// parameter int unsigned MY_WIDTH
+// ) (
+// output logic [`DLA_ACL_WIDTH_CLIP(MY_WIDTH)] my_signal
+// );
+// localparam int unsigned BYTEENABLE_WIDTH = MY_WIDTH/8;
+// logic [`DLA_ACL_WIDTH_CLIP(BYTEENABLE_WIDTH)] my_byteenable;
+//
+// Notes:
+// - if MY_WIDTH == 0, my_signal is declared as [0:0]
+// - if MY_WIDTH >= 1, my_signal is declared as [WIDTH-1:0]
+// - do not include the :0 to select the lower bit range, the macro already includes it
+//
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_zero_latency_fifo.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_zero_latency_fifo.sv new file mode 100644 index 0000000..cebf569 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_acl_zero_latency_fifo.sv @@ -0,0 +1,513 @@ +// Copyright 2020 Intel Corporation.
+//
+// This software and the related documents are Intel copyrighted materials,
+// and your use of them is governed by the express license under which they
+// were provided to you ("License"). Unless the License provides otherwise,
+// you may not use, modify, copy, publish, distribute, disclose or transmit
+// this software or the related documents without Intel's prior written
+// permission.
+//
+// This software and the related documents are provided as is, with no express
+// or implied warranties, other than those that are expressly stated in the
+// License.
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// //
+// ACL ZERO LATENCY FIFO //
+// Designed and optimized by: Jason Thong //
+// //
+// DESCRIPTION //
+// =========== //
+// This fifo has a write to read latency of zero clock cycles. On the same clock cycle that data is written, it is also readable. This is //
+// achieved by adding a data bypass using combinational logic. This is built on top of dla_acl_low_latency_fifo, which is a fifo with write //
+// to read latency of 1. The zero latency fifo has a very large fmax penalty due to the combinational logic between inputs and outputs. //
+// //
+// REQUIRED FILES //
+// ============== //
+// - dla_acl_zero_latency_fifo.sv //
+// - dla_acl_low_latency_fifo.sv //
+// - dla_acl_reset_handler.sv //
+// - dla_acl_fanout_pipeline.sv //
+// - dla_acl_std_synchronizer_nocut.v //
+// //
+// INTERPRETATION OF ZERO LATENCY //
+// ============================== //
+// Zero write to read latency can be a tricky concept. Typically in a fifo there are two occupancy trackers: //
+// //
+// 1. write_used_words: //
+// - tracks how many words have been written into the fifo //
+// - increments one clock after write (on the next clock edge when write is asserted), decrements one clock after read ack //
+// - stall_out (fifo is full) and almost_full are based on this value //
+// 2. read_used_words: //
+// - tracks how many words are readable from the fifo //
+// - increments WRITE_TO_READ_LATENCY clocks after write, decrements one clock after read ack //
+// - valid_out (fifo is not empty) and almost_empty are based on this value //
+// //
+// In a high latency fifo e.g. dla_acl_high_speed_fifo with WRITE_TO_READ_LATENCY = 5, write_used_words increments before read_used_words. //
+// The interpretation is that something written into the fifo takes some time before that item is readable. In dla_acl_low_latency_fifo //
+// we have WRITE_TO_READ_LATENCY = 1, so write_used_words has the same timing as read_used_words. In dla_acl_zero_latency_fifo, notice that //
+// read_used_words increments BEFORE write_used_words. It may sound like something is readable before it has been written to the fifo, //
+// but the interpretation here is that data can bypass the storage associated with a fifo e.g. data does not need to be written to a //
+// register or a memory in order to be readable. //
+// //
+// RESET BEHAVIOR //
+// ============== //
+// The fifo asserts full (stall_out) and empty (~valid_out) during reset. Refer to dla_acl_high_speed_fifo.sv for full details. //
+// //
+// ALMOST FULL AND ALMOST EMPTY //
+// ============================ //
+// The ALMOST_***_CUTOFF parameters refer to how much dead space would be in the fifo if one were to use almost_full as same clock cycle //
+// backpressure (dead space in not being able to completely fill the fifo), or if one were to almost_empty as same clock cycle underflow //
+// prevention (dead space in not being able to empty the fifo). See chart below for interpretation of values: //
+// //
+// Scfifo parameter | Our parameter | Interpretation //
+// ------------------------------------+---------------------------+--------------------------------------------------------------- //
+// almost_empty_value = 1 | ALMOST_EMPTY_CUTOFF = 0 | almost_empty behaves the same way as empty //
+// almost_empty_value = 2 | ALMOST_EMPTY_CUTOFF = 1 | almost_empty asserts when read_used_words is 1 or less //
+// ------------------------------------+---------------------------+--------------------------------------------------------------- //
+// almost_full_value = lpm_numwords | ALMOST_FULL_CUTOFF = 0 | almost_full behaves the same way as full //
+// almost_full_value = lpm_numwords-1 | ALMOST_FULL_CUTOFF = 1 | almost_full asserts when write_used_words is DEPTH-1 or higher //
+// //
+// INITIAL OCCUPANCY //
+// ================= //
+// The parameter INITIAL_OCCUPANCY describes the number of words of garbage data in the fifo as it exits from reset. Typically this is 0, //
+// e.g. we have to write into the fifo before anything is readable. If INITIAL_OCCUPANCY > 0, then valid_out is 0 during reset, and when //
+// it eventually asserts it is then safe for downstream to transact reads from the fifo. Exit from reset should be handled separately for //
+// upstream and downstream. In particular, the assertion of valid_out (to downstream) and the deassertion of stall_out (to upstream) may //
+// not happen on the same clock cycle. If INITIAL_OCCUPANCY == DEPTH, one cannot use stall_out to observe reset exit, only when at least //
+// one item has been read from the fifo will stall_out then deasert. //
+// //
+// VALID_IN_EARLINESS AND STALL_IN_EARLINESS //
+// ============================ //
+// This is an fmax optimization. If valid_in and stall_in are known one clock cycle ahead of time, we compute occupancy one clock early. //
+// This gives an extra clock cycle from the control logic (occupancy, clock enables, mux selects) to the data path logic, which helps //
+// mitigate fmax degradation due to high fan-out (large WIDTH). Only values 0 and 1 are supported since the biggest fmax gain comes from //
+// registering the control logic before consumption. Any excess earliness is absorbed by dla_hld_fifo, we leave it to Quartus to retime it. //
+// //
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+// TESTBENCH: the testbench for this has now been merged into testbench of dla_hld_fifo
+
+
+`default_nettype none
+`include "dla_acl_parameter_assert.svh"
+
+module dla_acl_zero_latency_fifo #(
+ //parameters are mostly passed directly into dla_acl_low_latency_fifo, see that module for detailed descriptions, we will highlight the important differences here
+ //basic fifo configuration
+ parameter int WIDTH,
+ parameter int DEPTH,
+
+ //occupancy
+ parameter int ALMOST_EMPTY_CUTOFF = 0, // almost_empty asserts if read_used_words <= ALMOST_EMPTY_CUTOFF, note that read_used_words changes before write_used_words at zero write to read latency
+ parameter int ALMOST_FULL_CUTOFF = 0,
+ parameter int INITIAL_OCCUPANCY = 0,
+
+ //reset configuration
+ parameter bit ASYNC_RESET = 1,
+ parameter bit SYNCHRONIZE_RESET = 0,
+ parameter bit RESET_EVERYTHING = 0,
+ parameter bit RESET_EXTERNALLY_HELD = 0,
+
+ //special configurations for higher fmax / lower area
+ parameter int STALL_IN_EARLINESS = 0,
+ parameter int VALID_IN_EARLINESS = 0,
+ parameter int STALL_IN_OUTSIDE_REGS = 0, // number of registers on the stall-in path external to this module that will delay the propagation of x values on reset (e.g. in dla_hld_fifo)
+ parameter int VALID_IN_OUTSIDE_REGS = 0, // number of registers on the valid-in path external to this module that will delay the propagation of x values on reset (e.g. in dla_hld_fifo)
+ parameter int REGISTERED_DATA_OUT_COUNT = 0,// this affects fifo_data_out (the data_out inside dla_acl_low_latency_fifo), not the output of dla_acl_zero_latency_fifo which can never be registered due to the bypass
+ parameter bit NEVER_OVERFLOWS = 0,
+
+ //special features that typically have an fmax penalty
+ parameter bit HOLD_DATA_OUT_WHEN_EMPTY = 0,
+ parameter bit WRITE_AND_READ_DURING_FULL = 0
+)
+(
+ input wire clock,
+ input wire resetn, // see description above for different reset modes
+
+ //write interface
+ input wire valid_in, // upstream advertises it has data, a write happens when valid_in & ~stall_out -- this needs to be early if VALID_IN_EARLINESS >= 1
+ input wire [WIDTH-1:0] data_in, // data from upstream
+ output logic stall_out, // inform upstream that we cannot accept data
+ output logic almost_full, // asserts if write_used_words >= (DEPTH-ALMOST_FULL_CUTOFF)
+
+ //read interface
+ output logic valid_out, // advertise to downstream that we have data
+ output logic [WIDTH-1:0] data_out, // data to downstream
+ input wire stall_in, // downstream indicates it cannot accept data -- this needs to be early if STALL_IN_EARLINESS >= 1
+ output logic almost_empty, // asserts if read_used_words <= ALMOST_EMPTY_CUTOFF
+ output logic forced_read_out // indicates fifo is being read on current clock cycle, read data must be consumed or it will be lost, is a registered signal if STALL_IN_EARLINESS >= 1 && VALID_IN_EARLINESS >= 1
+);
+
+ //////////////////////////////////////
+ // //
+ // Sanity check on the parameters //
+ // //
+ //////////////////////////////////////
+
+ // do not allow arbitrarily large amounts of earliness, as this delays the exit from reset "safe state"
+ // the checks are done in Quartus pro and Modelsim, it is disabled in Quartus standard because it results in a syntax error (parser is based on an older systemverilog standard)
+ // the workaround is to use synthesis translate to hide this from Quartus standard, ALTERA_RESERVED_QHD is only defined in Quartus pro, and Modelsim ignores the synthesis comment
+ `ifdef ALTERA_RESERVED_QHD
+ `else
+ //synthesis translate_off
+ `endif
+
+ generate
+ `DLA_ACL_PARAMETER_ASSERT_MESSAGE(DEPTH >= 1, $sformatf("dla_acl_zero_latency_fifo: illegal value of DEPTH = %d, minimum allowed is 1\n", DEPTH))
+ `DLA_ACL_PARAMETER_ASSERT_MESSAGE(ALMOST_EMPTY_CUTOFF >= 0 && ALMOST_EMPTY_CUTOFF <= DEPTH, $sformatf("dla_acl_zero_latency_fifo: illegal value of ALMOST_EMPTY_CUTOFF = %d, minimum allowed is 0, maximum allowed is DEPTH = %d\n", ALMOST_EMPTY_CUTOFF, DEPTH))
+ `DLA_ACL_PARAMETER_ASSERT_MESSAGE(ALMOST_FULL_CUTOFF >= 0 && ALMOST_FULL_CUTOFF <= DEPTH, $sformatf("dla_acl_zero_latency_fifo: illegal value of ALMOST_FULL_CUTOFF = %d, minimum allowed is 0, maximum allowed is DEPTH = %d\n", ALMOST_FULL_CUTOFF, DEPTH))
+ `DLA_ACL_PARAMETER_ASSERT_MESSAGE(INITIAL_OCCUPANCY >= 0 && INITIAL_OCCUPANCY <= DEPTH, $sformatf("dla_acl_zero_latency_fifo: illegal value of INITIAL_OCCUPANCY = %d, minimum allowed is 0, maximum allowed is DEPTH = %d\n", INITIAL_OCCUPANCY, DEPTH))
+ `DLA_ACL_PARAMETER_ASSERT_MESSAGE(REGISTERED_DATA_OUT_COUNT >= 0 && REGISTERED_DATA_OUT_COUNT <= WIDTH, $sformatf("dla_acl_zero_latency_fifo: illegal value of REGISTERED_DATA_OUT_COUNT = %d, minimum allowed is 0, maximum allowed is WIDTH = %d\n", REGISTERED_DATA_OUT_COUNT, WIDTH))
+ `DLA_ACL_PARAMETER_ASSERT_MESSAGE(STALL_IN_EARLINESS >= 0 && STALL_IN_EARLINESS <= 10, $sformatf("dla_acl_zero_latency_fifo: illegal value of STALL_IN_EARLINESS = %d, minimum allowed is 0, maximum allowed is 10\n", STALL_IN_EARLINESS))
+ `DLA_ACL_PARAMETER_ASSERT_MESSAGE(VALID_IN_EARLINESS >= 0 && VALID_IN_EARLINESS <= 10, $sformatf("dla_acl_zero_latency_fifo: illegal value of VALID_IN_EARLINESS = %d, minimum allowed is 0, maximum allowed is 10\n", VALID_IN_EARLINESS))
+ `DLA_ACL_PARAMETER_ASSERT_MESSAGE(VALID_IN_OUTSIDE_REGS >= 0 && VALID_IN_OUTSIDE_REGS <= 1, $sformatf("dla_acl_high_speed_fifo: illegal value of VALID_IN_OUTSIDE_REGS = %d, minimum allowed is 0, maximum allowed is 1\n", VALID_IN_OUTSIDE_REGS))
+ `DLA_ACL_PARAMETER_ASSERT_MESSAGE(STALL_IN_OUTSIDE_REGS >= 0 && STALL_IN_OUTSIDE_REGS <= 1, $sformatf("dla_acl_high_speed_fifo: illegal value of STALL_IN_OUTSIDE_REGS = %d, minimum allowed is 0, maximum allowed is 1\n", STALL_IN_OUTSIDE_REGS))
+ endgenerate
+
+ `ifdef ALTERA_RESERVED_QHD
+ `else
+ //synthesis translate_on
+ `endif
+
+
+
+ //////////////////////////
+ // //
+ // Parameter settings //
+ // //
+ //////////////////////////
+
+ //excess earliness
+ localparam int EARLINESS = ((STALL_IN_EARLINESS >= 1) && (VALID_IN_EARLINESS >= 1)) ? 1 : 0; //how much earliness on stall_in and valid_in will the fifo take advantage of
+ localparam int EXCESS_EARLY_STALL = STALL_IN_EARLINESS - EARLINESS; //how many pipeline stages to use to absorb excess STALL_IN_EARLINESS
+ localparam int EXCESS_EARLY_VALID = VALID_IN_EARLINESS - EARLINESS; //how many pipeline stages to use to absorb excess VALID_IN_EARLINESS
+
+ //reset timing
+ localparam int EXCESS_EARLY_STALL_WITH_EXT = STALL_IN_EARLINESS + STALL_IN_OUTSIDE_REGS; //early stall is affected by regs outside this module; account for effect on reset timing
+ localparam int EXCESS_EARLY_VALID_WITH_EXT = VALID_IN_EARLINESS + VALID_IN_OUTSIDE_REGS; //early valid is affected by regs outisde this module; account for effect on reset timing
+ localparam int FLUSH_EARLY_PIPES = (EXCESS_EARLY_STALL_WITH_EXT > EXCESS_EARLY_VALID_WITH_EXT) ? EXCESS_EARLY_STALL_WITH_EXT : EXCESS_EARLY_VALID_WITH_EXT; //clocks needs to flush excess earliness pipelines
+ localparam int RESET_SYNC_DEPTH = (SYNCHRONIZE_RESET) ? 3 : 0; //how many registers are added inside dla_acl_reset_handler for synchronizing the reset
+ localparam int RESET_PIPE_DEPTH = 2; //how many pipeline stages we add to sclrn
+ localparam int RESET_LATENCY = (ASYNC_RESET || RESET_EVERYTHING) ? 0 : (RESET_SYNC_DEPTH + RESET_PIPE_DEPTH); //how many clocks from the resetn input signal until the reset is consumed
+ localparam int MIN_RESET_RELEASE_DELAY = EARLINESS; //when earliness = 1 occ is retimed one clock earlier, need to delay fifo exit from safe state by at least 1 clock
+ localparam int RAW_RESET_RELEASE_DELAY = FLUSH_EARLY_PIPES - RESET_LATENCY; //delay fifo exit from safe state if need more clocks to flush earliness than reset latency
+ localparam int RESET_RELEASE_DELAY = (RAW_RESET_RELEASE_DELAY < MIN_RESET_RELEASE_DELAY) ? MIN_RESET_RELEASE_DELAY : RAW_RESET_RELEASE_DELAY; //how many clocks late the fifo exits from safe state
+
+ // properties of the fifo which are consumed by the testbench
+ localparam int WRITE_TO_READ_LATENCY = 0; //once something is written into the fifo, how many clocks later will it be visible on the read side
+ localparam int RESET_EXT_HELD_LENGTH = 1; //how many clocks does reset need to be held for, this fifo does not take advantage of RESET_EXTERNALLY_HELD
+ localparam int MAX_CLOCKS_TO_ENTER_SAFE_STATE = 5; //upon assertion of reset, worse case number of clocks until fifo shows both full and empty
+ localparam int MAX_CLOCKS_TO_EXIT_SAFE_STATE = 15; //upon release of reset, worse case number of clocks until fifo is ready to transact (not necessarily observable if INITIAL_OCCUPANCY = DEPTH)
+
+
+
+ ///////////////////////////
+ // //
+ // Signal declarations //
+ // //
+ ///////////////////////////
+
+ //reset
+ genvar g;
+ logic aclrn, sclrn_pre, sclrn, sclrn_reset_everything, resetn_synchronized;
+ logic [RESET_RELEASE_DELAY:0] resetn_delayed;
+ logic fifo_in_reset, occ_in_reset;
+
+ //retime stall_in and valid_in to the correct timing, absorb excess earliness that the fifo cannot take advantage of
+ logic stall_in_correct_timing, valid_in_correct_timing;
+ logic [EXCESS_EARLY_STALL:0] stall_in_pipe;
+ logic [EXCESS_EARLY_VALID:0] valid_in_pipe;
+
+ //signals for wrapping around low latency fifo to get zero latency behavior
+ logic fifo_valid_in, fifo_valid_out;
+ logic [WIDTH-1:0] fifo_data_out;
+ logic [DEPTH-1:0] occ_low_reset, occ_high_reset;
+ logic almost_empty_if_not_writing, almost_empty_if_writing, valid_in_correct_timing_mask;
+ logic almost_empty_pre, valid_out_pre;
+
+
+
+ /////////////
+ // //
+ // Reset //
+ // //
+ /////////////
+
+ // IMPORTANT: reset behavior must EXACTLY match dla_acl_low_latency_fifo
+
+ // S10 reset specification:
+ // S (clocks to enter reset "safe state"): 2 (sclrn pipeline, one inside dla_acl_reset_handler, one which we manually create)
+ // P (minimum duration of reset pulse): 1 (no pulse stretcher is needed)
+ // D (clocks to exit reset "safe state"): 15 (3 for synchronizer) + (2 for sclrn pipeline) + (10 for reset release delay for registers that absorb excess earliness)
+
+ dla_acl_reset_handler
+ #(
+ .ASYNC_RESET (ASYNC_RESET),
+ .USE_SYNCHRONIZER (SYNCHRONIZE_RESET),
+ .SYNCHRONIZE_ACLRN (SYNCHRONIZE_RESET),
+ .PIPE_DEPTH (1), //we add one more pipeline stage ourselves, needed so that resetn_delayed can use sclrn_pre
+ .NUM_COPIES (1)
+ )
+ dla_acl_reset_handler_inst
+ (
+ .clk (clock),
+ .i_resetn (resetn),
+ .o_aclrn (aclrn),
+ .o_resetn_synchronized (resetn_synchronized),
+ .o_sclrn (sclrn_pre)
+ );
+ always_ff @(posedge clock) begin
+ sclrn <= sclrn_pre;
+ end
+ assign sclrn_reset_everything = (RESET_EVERYTHING) ? sclrn : 1'b1;
+
+ generate
+ always_comb begin
+ resetn_delayed[0] = (ASYNC_RESET) ? aclrn : sclrn;
+ end
+ for (g=1; g<=RESET_RELEASE_DELAY; g++) begin : gen_resetn_delayed
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) resetn_delayed[g] <= '0;
+ else begin
+ resetn_delayed[g] <= (ASYNC_RESET && g==1) ? 1'b1 : resetn_delayed[g-1]; //partial reconfig requires no d-input consumption of aclr, so resetn_delayed[1] loads 1'b1 if ASYNC_RESET
+ if (~sclrn_pre) resetn_delayed[g] <= '0; //resetn_delayed goes into reset as the same time as sclrn, since this is registered need to peek one clock ahead of sclrn
+ end
+ end
+ end
+ endgenerate
+
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) begin
+ fifo_in_reset <= 1'b1;
+ occ_in_reset <= 1'b1;
+ end
+ else begin
+ fifo_in_reset <= 1'b0;
+ occ_in_reset <= 1'b0;
+ if (~resetn_delayed[RESET_RELEASE_DELAY]) fifo_in_reset <= 1'b1;
+ if (~resetn_delayed[RESET_RELEASE_DELAY-EARLINESS]) occ_in_reset <= 1'b1;
+ end
+ end
+
+
+
+ ////////////////////////////////////////////////
+ // //
+ // Absorb excess earliness on input signals //
+ // //
+ ////////////////////////////////////////////////
+
+ // the fifo cannot take adnvatage of STALL_IN_EARLINESS above 1 and VALID_IN_EARLINESS above 1
+ // to take advantage of earliness, both STALL_IN_EARLINESS and VALID_IN_EARLINESS need to be 1
+ // absorb the excess earliness with registers, and provide the correctly timed version based on the amount of earliness that the fifo will use
+ generate
+ always_comb begin
+ stall_in_pipe[0] = stall_in;
+ valid_in_pipe[0] = valid_in;
+ end
+ for (g=1; g<=EXCESS_EARLY_STALL; g++) begin : gen_stall_in_delayed
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) stall_in_pipe[g] <= (RESET_EVERYTHING) ? 1'b1 : 1'bx;
+ else begin
+ stall_in_pipe[g] <= stall_in_pipe[g-1];
+ if (~sclrn_reset_everything) stall_in_pipe[g] <= 1'b1;
+ end
+ end
+ end
+ for (g=1; g<=EXCESS_EARLY_VALID; g++) begin : gen_valid_in_delayed
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) valid_in_pipe[g] <= (RESET_EVERYTHING) ? 1'b0 : 1'bx;
+ else begin
+ valid_in_pipe[g] <= valid_in_pipe[g-1];
+ if (~sclrn_reset_everything) valid_in_pipe[g] <= 1'b0;
+ end
+ end
+ end
+ endgenerate
+
+ //these signals either both have EARLINESS == 0 or both have EARLINESS == 1
+ assign stall_in_correct_timing = stall_in_pipe[EXCESS_EARLY_STALL];
+ assign valid_in_correct_timing = valid_in_pipe[EXCESS_EARLY_VALID];
+
+
+
+ //occ_***_reset and the ****_pre signals are retimed early like valid_in and stall_in when EARLINESS == 1
+
+ dla_acl_low_latency_fifo
+ #(
+ .WIDTH (WIDTH),
+ .DEPTH (DEPTH),
+ .ALMOST_EMPTY_CUTOFF (0), //almost_empty is managed here because read_used_words changes before occ
+ .ALMOST_FULL_CUTOFF (ALMOST_FULL_CUTOFF),
+ .INITIAL_OCCUPANCY (INITIAL_OCCUPANCY),
+ .ASYNC_RESET (ASYNC_RESET),
+ .SYNCHRONIZE_RESET (0), //do not synchronize the reset again, this ensures that e.g. stall_out deasserting upon reset exit happens on the same clock cycle here and well as inside low latency fifo
+ .RESET_EVERYTHING (RESET_EVERYTHING),
+ .RESET_EXTERNALLY_HELD (RESET_EXTERNALLY_HELD),
+ .STALL_IN_EARLINESS (EARLINESS), //we have to absorb excess earliness so that valid_in and stall_in have the same earliness (needed for bypass logic), and that earliness can only be 0 or 1...
+ .VALID_IN_EARLINESS (EARLINESS),
+ .REGISTERED_DATA_OUT_COUNT (REGISTERED_DATA_OUT_COUNT),
+ .NEVER_OVERFLOWS (NEVER_OVERFLOWS),
+ .HOLD_DATA_OUT_WHEN_EMPTY (0),
+ .WRITE_AND_READ_DURING_FULL (WRITE_AND_READ_DURING_FULL),
+ .RESET_RELEASE_DELAY_OVERRIDE_FROM_ZERO_LATENCY_FIFO(RESET_RELEASE_DELAY) //...but if valid_in or stall_in are very early, we still need the fifo to exit from reset safe state later than usual
+ )
+ ll_fifo_inst
+ (
+ .clock (clock),
+ .resetn (resetn_synchronized),
+
+ .valid_in (fifo_valid_in),
+ .data_in (data_in),
+ .stall_out (stall_out),
+ .almost_full (almost_full),
+
+ .valid_out (fifo_valid_out),
+ .data_out (fifo_data_out),
+ .stall_in (stall_in_correct_timing),
+ .almost_empty (), //we have to manage this since read_used_words updates sooner than write_used_words
+ .forced_read_out (),
+
+ .occ (),
+ .occ_low_reset (occ_low_reset),
+ .occ_high_reset (occ_high_reset)
+ );
+
+ //write into the fifo if the zero latency bypass is not used
+ assign fifo_valid_in = valid_in_correct_timing & (stall_in_correct_timing | occ_low_reset[0]);
+
+ //occ tracks write_used_words, convert to read_used_words by incrementing if writing to fifo (write can bypass storage)
+ //stall_out gates valid_in when the fifo is full and also during reset (during which the fifo advertises that it is full)
+ generate
+ if (ALMOST_EMPTY_CUTOFF == DEPTH) begin
+ assign almost_empty_if_not_writing = 1'b1;
+ end
+ else begin
+ assign almost_empty_if_not_writing = ~occ_low_reset[ALMOST_EMPTY_CUTOFF];
+ end
+ endgenerate
+ generate
+ if (ALMOST_EMPTY_CUTOFF == 0) begin
+ assign almost_empty_if_writing = 1'b0;
+ end
+ else begin
+ assign almost_empty_if_writing = ~occ_low_reset[ALMOST_EMPTY_CUTOFF-1];
+ end
+ endgenerate
+
+ //if writing normally should just be: valid_in & ~stall_out, things get a bit complicated when we have never overflows and write and read during full
+ //but these special cases are only relevant when the almost empty cutoff is large enough that valid_in is impacted by fifo full (also note that full asserts during reset)
+ generate
+ if ((ALMOST_EMPTY_CUTOFF == DEPTH) && NEVER_OVERFLOWS) begin
+ assign valid_in_correct_timing_mask = ~occ_in_reset;
+ end
+ else if ((ALMOST_EMPTY_CUTOFF == DEPTH) && WRITE_AND_READ_DURING_FULL) begin
+ assign valid_in_correct_timing_mask = (~occ_in_reset & ~stall_in_correct_timing) | ~occ_high_reset[DEPTH-1];
+ end
+ else begin
+ assign valid_in_correct_timing_mask = ~occ_high_reset[DEPTH-1];
+ end
+ endgenerate
+
+
+
+
+
+ //assign almost_empty_select = valid_in_correct_timing & ~occ_high_reset[DEPTH-1];
+ //assign valid_in_correct_timing_mask = ~occ_high_reset[DEPTH-1] | (~occ_in_reset & ~stall_in_correct_timing);
+
+ assign almost_empty_pre = (valid_in_correct_timing & valid_in_correct_timing_mask) ? almost_empty_if_writing : almost_empty_if_not_writing;
+
+ //same conversion of write_used_words to read_used_words
+ //valid_out = (read_used_words != 0), and that can only happen if there is an incoming write or if write_used_words != 0
+ assign valid_out_pre = (valid_in_correct_timing & ~occ_high_reset[DEPTH-1]) | occ_low_reset[0];
+
+ //retime almost_empty and valid_out
+ generate
+ if (EARLINESS == 1) begin
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) begin
+ almost_empty <= 1'b1;
+ valid_out <= 1'b0;
+ forced_read_out <= 1'b0;
+ end
+ else begin
+ almost_empty <= almost_empty_pre;
+ valid_out <= valid_out_pre;
+ forced_read_out <= valid_out_pre & ~stall_in_correct_timing;
+ if (~sclrn) begin
+ almost_empty <= 1'b1;
+ valid_out <= 1'b0;
+ forced_read_out <= 1'b0;
+ end
+ end
+ end
+ end
+ else begin //EARLINESS == 0
+ assign almost_empty = almost_empty_pre;
+ assign valid_out = valid_out_pre;
+ assign forced_read_out = valid_out & ~stall_in_correct_timing;
+ end
+ endgenerate
+
+
+ //output data, take it from the low latency fifo if it has data (this keeps stuff in order), otherwise the fifo is empty so use the data bypass
+ //when holding the output data, the HOLD_DATA_OUT_WHEN_EMPTY parameter to the low latency fifo does not work when data is read directly from the bypass
+ //because in this case it never got written into the low latency fifo (and writing it causes lots of complications)
+ generate
+ if (!HOLD_DATA_OUT_WHEN_EMPTY) begin
+ assign data_out = (fifo_valid_out) ? fifo_data_out : data_in;
+ end
+ else begin
+ logic data_sel_pri_pre, data_sel_sec_pre, data_sel_pri, data_sel_sec;
+ logic captured_data_clock_en_pre, captured_data_clock_en;
+ logic [WIDTH-1:0] captured_data_out;
+
+ assign data_sel_pri_pre = occ_low_reset[0];
+ assign data_sel_sec_pre = valid_in_correct_timing;
+ assign captured_data_clock_en_pre = valid_out_pre & ~stall_in_correct_timing;
+
+ if (EARLINESS) begin
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) begin
+ data_sel_pri <= (RESET_EVERYTHING) ? '0 : 'x;
+ data_sel_sec <= (RESET_EVERYTHING) ? '0 : 'x;
+ captured_data_clock_en <= (RESET_EVERYTHING) ? '0 : 'x;
+ end
+ else begin
+ data_sel_pri <= data_sel_pri_pre;
+ data_sel_sec <= data_sel_sec_pre;
+ captured_data_clock_en <= captured_data_clock_en_pre;
+ if (~sclrn && RESET_EVERYTHING) begin
+ data_sel_pri <= 1'b0;
+ data_sel_sec <= 1'b0;
+ captured_data_clock_en <= 1'b0;
+ end
+ end
+ end
+ end
+ else begin
+ assign data_sel_pri = data_sel_pri_pre;
+ assign data_sel_sec = data_sel_sec_pre;
+ assign captured_data_clock_en = captured_data_clock_en_pre;
+ end
+
+ always_ff @(posedge clock or negedge aclrn) begin
+ if (~aclrn) begin
+ captured_data_out <= (RESET_EVERYTHING) ? '0 : 'x;
+ end
+ else begin
+ if (captured_data_clock_en) captured_data_out <= data_out;
+ if (~sclrn && RESET_EVERYTHING) captured_data_out <= '0;
+ end
+ end
+
+ assign data_out = (data_sel_pri) ? fifo_data_out : (data_sel_sec) ? data_in : captured_data_out;
+ end
+ endgenerate
+
+
+endmodule
+
+`default_nettype wire
diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_alm_pipelined_accum.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_alm_pipelined_accum.sv new file mode 100644 index 0000000..e2151be --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_alm_pipelined_accum.sv @@ -0,0 +1,196 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +kxf5pJb0FJ7DPt7z7l+70wvBRAIjd3SM0fWh4BPOUmYtXQKPz5P8+fGK6qFaT7a/43Ky4VWKw0Qh +1HAbsZ5uHL6Jq/qDOu85ocSOkNFbrMwYYiqbGCC1MolKOYZGS0oCwDHbqcMTmQh1BSehNtY1RSH1 +G62eS+Nclqwa9sttFLOdCDnUcNkSeizrUJO3/Jvo6TyfpIqJ8deqcQhn5RKYxfSx+kw2PEPw0bng +io7XUYGmMeu289Vn75skB4hHjBblN5aChD7VItVKGruDjXXVqOTWvbA4wSvZpitjll4MR+b9WDUV +Fi1yezCOzeensksnTF3ivR0sQ/BdRr34tLEW6g== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 9920) +`pragma protect data_block +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 +jvs= +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_clamp.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_clamp.sv new file mode 100644 index 0000000..30ea48c --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_clamp.sv @@ -0,0 +1,111 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +HYcn9TS5RXKA/P2haJlr+H+u5EM8XpIIV7rzK98hnmYZ7JylVjONtausoOFa8czJNSuGlEPiQwIg +qQIEG5nJhyByrCetDqvF3KlGa0i9ymGv+cCwflahNnZn9Mn1Ld9NXFKHQ+C6TF3AEOPThzD/OlAo +A3GzInlFtx7zt6k8baTCkUtxBp1PAwceWozpAAV/mBiUfRyj99h3BuPjPpLb2vagROGuQMFk9+G/ +9tsHUj/8jBMaWywQsOwbIEUoOV6CslhQ4/voSbsyvKRF0AG6kVCxAhvkvsPtcC2+3vSa6I/x3W/0 +F0JGQOMlVvH4S7BWII5Qalv+ydAoSflKiOXpXg== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 5104) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_config_decoder.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_config_decoder.sv new file mode 100644 index 0000000..220c73f --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_config_decoder.sv @@ -0,0 +1,388 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +n7e1s4lnS4BysAPxHbF0b41NRMaH63BNaQp1gFl+dCt6jRj2gykoPBwxRSNYXK2W6/WyEud8EEWH +waiqrGKgkDhh0i8tpFTnCjw9yI2svTInnXnIn6ZGhwSqgRS/A5Ib3QY7rDtf7dtQgYiJ5tX+C/aO +w+aChbqjxyFxc1wQ2swuVAUXJJbLf5vFsglin/0zAfvGyVl5R5S4yUI2TpzSx1XieiHsv/ax/St0 +1ffoK7aEj8z5VAb2xyKChv/P2Lz9xcH4yAcp00X5aQkdEdnL6Io2N+7lLx6/UVe+ZzkXNUzLico3 +YqLNTk7/desHTy1LW6Vml6rhTOqbRPF7bcuf1g== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 20880) +`pragma protect data_block +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 +yYNW/aOrungs9zyZSazs64Q8 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_constants.svh b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_constants.svh new file mode 100644 index 0000000..b9abb67 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_constants.svh @@ -0,0 +1,106 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +qA/+asjrZwaW8y/P6o7KQpxRvsKXgJEN2vG7m6linPeWXJSO9KZ5ylhu9TzbsCpqs5s+uAUK5WSB +Xt0058hWOiNUTVV3DgrMEhYxkxcpT9huMMup7Z7qAT6WQmTKroaFEDOeWh7x0Kd8IyZ7z5O2xWqm +ixv2VkZ4wrDo8zOs0KBfaK6/oJswKU7qQwSmb0BlB8KPOd4ACihCCYZ3n5J5yYT6A29dRT1Hh4MO +p0xJdqYEr9GT+2bb5YocECS1hLIMcB376zAXv7j9AIXGdk29DeDCS0Eoc234UeNoeTgbvb0expHw +6QmBo/fMwQd0JSMqEr0WM8RDbbk/pN5xsHAUJw== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 4816) +`pragma protect data_block +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 +Cv4sgnlbf6rBr/tcYYTzv9XzjEGBoYuePDf16Q== +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_continuous_activations.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_continuous_activations.sv new file mode 100644 index 0000000..c009ad6 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_continuous_activations.sv @@ -0,0 +1,190 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +w9CFVd1fhWSwSQszsuOKsA3oGHcvWIvfXrGo+ttl0JASkKBgtv1SEj4l3hXOVSUtmDmL1vkiIdck +Om7YFrFxoyAgmARylzKaAb/GsEQSSf2GBWDAS8gGcID17GUV9Zxi1ZX5SZgskWMZVfIJDZT0GqLD +xJ/zwn1bDYrW0XHcDoFDlxXQP8ZrSzqSUtLBXPSnaVHcZ540qjpfgagAkazH3aCe55UZsi9WGmBr +S68DU/PDqx4+AJxj32eNwCo14yf39NwiiMEIyb3jYj2kplKH0cYK0JT4JxcV9m++HXUsn42C2HjI +zS/Av90D0TMn14Ac3SkF5osLOejHqtOhaqb0lA== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 9584) +`pragma protect data_block +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 +zjq7lyTUWZU= +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_control.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_control.sv new file mode 100644 index 0000000..ccefbad --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_control.sv @@ -0,0 +1,488 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +J665ks2G6mz9hcWRfpIt3h81kgghQDvbdX0UiWRZX9fJ+2GDntmig8crOqCS754oKvHSRez8RX8L +hsa1+3z2J3a6Egco2GpyigNKP0+Oa3+4keq13AWquCu5CY/owfHWIJQzP1qZdL1pgqSK2qPyGTYW +hiriB0wRZ02j1L/jPOCRVJ5hrkxUgAfXnM6ctNePEqsZ9wzzsO8IaM2sH2f2XNwHDGGoDImf0Y0M +IOVFmCeoJQecKXhbUbibTo50qjrAmcRhm4aaQMIM4dPQCUAXVSd3rsLOF6OorZP25/pOp4YwCzBd +rvsPQ/BWguybdi4kjQdzJiqrl2zYH6pSpcgPOQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 26592) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_core.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_core.sv new file mode 100644 index 0000000..f32da56 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_core.sv @@ -0,0 +1,383 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +UTa96JOTwRDC1XWheELoNkXpq3KIrZOVNBtixByBqFKyG5JTg5BNG/p894jD3hQBIemCdobpRDV0 +vaLmAPHT9FRWP/cUo+OCKAb1wEqu5WdageWl7iLiwI+Ly55xiOcWJFQ85vv3xDDy8gvPV/z3pByc +1jO/ypHoe6Zj2NM7uckqKk+xd3SlQrfn+ghpZnz4w43HkUGMjsaDFBBM6qUSfH4v9V0uygArLfwU +1rGqhEMqwOhe6Ac2ZO02Lt8sRA+LP8tRi9d4uJbfs24GMkkhtos0XrLnMQnEsqzkmNueO7wTzcbP +sy/WS1q4beXh7j01mRA20wTy65o8uxBd7af6fw== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 20608) +`pragma protect data_block +sXjjx3LR9ZhYKCew0LaUgE6cQEqUPCCaxfJELRa+PCmKGzmFzrSp/rEY9Fq81jPJfaq6n/mLbsm2 +GMPMndqv08Y0RQ137HBYoJnTILHVrG0ZCpZBK2AsluGh9JGPvN2bCJDC6ugNlXFVIb9SDLmbV+NX +YZHlRvnRLYzrFAQLyGfgWl0akQnIlmQSvBYvuOcm8zsZIBW9C2PEQ332nPFnrh9MNH+sbmwX2tKy +jCEmHp+kx2wNZXnm2+Mgty9GG/bGqmHnPBf+HbH7MJPeTFX7H6ZvJEj7tPjW5zYW5ectB04Qgivt +XbYTob9wcpFk3RYA6A85QxcB8YjA2CXOGNcwXsXVo7h9D9hPMoSsCanK+isl9GtjUk44e03IyBBz +yo8zQriiDNqrdm2l9MTbLLSb1+QFDQtjmuzqnIYGpN82PWjyzsqwrZDyq9FXpnadv4SXA84TXyMY +lNNEFlAh1dlvtwoZMI73dyl1fSP+eWDJkAXD0W9QZNj+GOpobRI4iEh1oNc/W2fcy0ui2meUZ9Vl +VbCyeYBpGMOJMZfuTncHC5vkyXdCh+9JMSrBxnP+fizl+U0CFDNyqDc9ZX0D/LgJnYdHuAwhFXl+ +ge9vecoDHrL1HXWyUzU226mQcvrqu6kr/oDOBzOpOdrx74vacaGCzmF16m81omIz8VOLkGhfaL+J +jGhxoktZLYFB1I+8EuxOcbcJ5APGLGFFLJV1nQF0eM9WDiB9dU8bbZztYZHILeFlRP3ioiA4KITS +ijZsFKJi7DGWqXiafAjHOOCMtNoR683Tl8i1llTAG7sKHisSYno6AqhEmXeoNaX+q/oiQa7zvEDT +y4sN0DUOE2MP61JJmFj1WupZKj+HGzBxFX5EGG+qSumaNKH3ubqg0rIbPU9pY+rkxxVqFQq3kt2Y +aSCWCANtfawr60W4Yv97dmtSNKY5aikC06z+POY9/A81p1N54OYRXLNOmkbPFHziqPVISPDl/b9j +RylzDzANBGkV6HuP4tUfb5LeLesnQ+kKdBzGzjGGiyJiwo5Z7bdcFYiYv42AFLFRE2qkT4bWGGOJ +BZycaj7N8gjWlPSIEMi1+4gaRWIkmSlrdHW4zESaA1o/quyUvWejKx0s/wXo1oq53Bs667jKZvjX +34nmUENGmtH1Z+X4Z9j4SaRoZYYo+AcDD6+jVXnnqEy+hDeG6rlDVpapuThJvTSTJhobf54tPstd +6MY0tXHkMUbNQzlzYdLtygvgfYViRfjLp/7WL+NANLnYeg7nhdP5FYDHe97IhjauqTAE4fA7RoHO +QdCBkKZm6dKcXlZuYw/lW4XH1h8Dd7n+vK8hoATQ6dnYF4fEMh0iBXJU9TEHMkONQXbqDTl7PAHY +anGxDpfCJYp/+xB4btZnkIOZKPbzDNkItW33PUKTjiaM90EwhYGimLlAfg/tpQcjEVGHvVon8qLq +PueB3Cnw7AX19Gsr0Cj+JxHSDP25qPJpehwhCFKGcnvf1gRQ64mX7SycwjJRZM4MmqG+kQ7tCvFn +ZkNNq+6UD30l9ENXYeABXR4zRtCn1kN/McaFDmIeHiAVmQyU5NphA7sZVlzY2YdY/BWwNHqoDhrF +fy6SrhfHe32xT7cBWM+OwCtSwJsLgwrHH97ZBfF5th/QvuJl6ccv48QJlJXKzB/zC+uOXIXf78/v +ocVp8ivv0lWvTLe9FfSSH0tzn9ydOuSLEE8FWQ5dIVPi1hH1nxAbuE/EaDXEeVui6c+Cx6jRs1/L +IynTMSAd91kviq0VDwp2kVtcxGNRwcv3KGSYxeHF7ZlYbFPFZjlQYmz4JG0KugY6yFNmtrKguHFc +Ra74zeWcJdiE6TZKwcaQy/ucfb+iM1pcSih2DEaItcrXMzf3Tm/aoGv48aobdRC2LeOXQlDUVoZe +Ir/iz3GKRcmWUyizuJGdwaseaFE98tLGuoVbJS3vMaaIiOxUL5WjTHVEC9wdLwYErBoz25B6x3zU +rKWR7sH0GrwHLl/yMqotUS4d+QQ+daUTVeLxazwvisPnlfsBTbKnOm34zHmjbCZW2rDiOgdZv+Qz +GXCsUp6FIA/qAhBioNEAYncxrv1Ptszm/bE7oyPNtWcYxSTtw4O0gGO5D44I5R00GjnOjT1sdAod +o5DYNuMnVeJEZOredPPJklk6QVxlaPtxkyQ010zSEzTSphdWxMl4qTrJG7kNf21u+DSXb3YVhV2w +l8XQoWR1JzEcdamBSVsOL7HPZ207mu+D189CNaCbr+7Pswm9wQdoyxfk//cdxEGlnGcZVnxZvON3 +D2MiWZsv5D+h3NEHUv/ZZ6PSH3xmgjPMTx2iygKmZ2U+hCjtHJYO4kAS3IXVD8rQ0Yflyp75eCZo +ipUNdGOLZZ+LPnWbpXsiF36Jhc8vwjiYxs2zFGy3c0OXB0CHulzWVfFJkrMsrjTB0EpAmMkxmd1i +L6wa8xyr91XeupQWbppPdSVOCV2k9g8OXWkpsSQd1L+GoIYOinU5rV5L8TGXvC/TXuMA3kP/Wcan +LQrZ64NKJwWPmCv1v0vXVPwNMrkFN8kli32GbEHKquT1nV6uyLD30QiPvl8bh9KNQmhPMyhuZoNU ++8g2ZVdZ/5fHsr8DVz0axQEiiggXE88UxhbY9WStW0tYiVfISRCCKFo3NqYLt9huekIuzvzTAfKI +FnpyiaiEW57pTJDsk+EycfGNi4ycuG3ciV0wo5J91TO7u4lIqmTAPtW+yqX4huANyGJK4sORVDwy +wOBGMQSkP9ptmqrgsMtErFjmtJoimlFrjiC5NNMpTIvR7Pd+R1EkkgahpMnn/C4B06Nd6sZH3/3g +Cdjx75bc7Vyc39jCPHSKEldxmu9Q9A6SNLkM0IWGu6ucbR2euJc4hewoCi9THIRcxj6lP1uUmH56 +gYHWQY6C+5CFed+vkhxsC0pyU2z+yPTnmXKE7N1Lr/i1mE6V/Okw6fuWC1p0KiFOWTkekOnz4lNd +lhFojWuzpPK6uq+iY/S+3/02xjoE1YhA1l+Ny0Xx38b7Ve3vIibmLP18RNZxP9D5J4qyi+bMSZZL +l1uBcnr/70qR+kCRKp1lSiFWkGaykIVqkNQPVYjrnQmtEuXPnBmFNDqjpqATEhnXZzokH6sWekCj +qyYggVljfFbL6OdBQ5OagGjtDBnVFIOmpS7vhVe3f/lGag+OjC3GswhfVZEtPnECKJ+vSuO4utoa +KpTSpklqh0sztoMM8u9dk4TcYun1DU1AE6/qIE4tS7f6lXfzGRmjlc9oIDv1dME9fG+BlYdjKikb +dW5OHXSSrebkGQttjeVF0A1r2lZtRHXZrWKzqufRIJygaug/KKbh/UAbBiRXFPfJo7Fes9rm2o5g +I2lKi3Y7C0gJvVlyDOuCK0nc7na00XZ+7MFksjzhDrsh0DW9FOJXTZH6L5cumavie+NQnUGlancW +dktslzeIBddB9wmTxZmB3c1NG1fhFYXFg2i+YodwvdCppnKYQqpvMAmjC+bHFn1wXmjYL/m1yJCh +spghy43DzMuzfogKtC0zSunpYoQytbx/Q+McswqqGZ7oqbhLgIiu0KNiZ5hpuh7ERs3vBJEItnt0 +knIMUc567V6H5SlWL4NBQFE8lvTtKrQl+zSTSn803ZPBjn4SYkYnAKeB9ddBAFG403OOtpnTupC8 +BX91feo7K7r7AOiVlEWDilOprMKKKRwxpuNeD6sORbVfpLpWaqiDDgPbut3Jgm+ET0lR+keVVDqg +zy1K2qqCB9+ATbkvFw4WMlbisqZvc+q3fGw/IT0x+7FrYJ/vYhNsCRBwWhJ+4lUVFYa6MOBRhkhk +bmymh+brhgUPZTho2LTQchxSn4YGW+QTWaMbGxc04nhP1N9w6pZOz4jtjWDvaI2u+TpS1V1Srp7G +p2GUFmC9Saf6ObnYX0nAbr9RfzON0zc0gTP90hyGjI0VV9itx53VrschB1dCzH9bNel0hbJD/BC3 +fOUez6Z/elkLCIJZB0tQeBIir7198MdyoH0sSMTXFAaazWKzF5vuf+BdDsDsKwj0WJ1sx/22/uzs +JnR11cl8KJoJwLAfdZXqJXiyWqc0XpyypI2gekp+ecwp0V4uyLtT4LOTnfFLlxti7Z+C4DwHmB/d +q3Qmw8BRl08tLZ4vzl3hTu1Y+WbzeQPhW1Tjv1I2YlKydiZ7lcxJuwLLg5M4WjAlUMA5hxCU/TbQ +YyXExkmWBkjw/HPQX029fENQmVZj7CgZhqv/1chKjkMNqDaFKJNQJwU5ok8QPXveJdZZZeA/lbx0 +ma/b2dZwAg7vtO2lFyCdpRgInkn7NCDbIOlry2FjzPFG3u42tCVGDSCt+HZ07+aPCeCVYVN1xDhm +i4bNubafn/+eBMenTrMznnXSjlbisSwyX/iZ6X/WnsI6G+NH8qSIMs3w5dIKKZ5yBBymZb3dGs1h +qlAHofg4p6Lv3XOadZrO5mzJM1BcE77mBdxwqaJasiqkZ/fqNiZTHRho9pt4pau+fDUBKPD4JFB4 +KORLdEe/sMCY4HaJngLRgld1icJRRkpoKhPyplPcIyqke8SYDPBYYcTXHyiPD8edovfkwGsbPKBf +qX47TNtOJ458xqR8Z0SfYKhV2gOp8mHuSKUswjMcj7hjhjtx1IFB2GM2r1i/MLMAmk3S3dgraHGO +anWt+HoIAaKvJ8PAGTgpABUSE4nc17N74j/VJnixdzD1RYx+fF8iAnHoj4Dn4Q9ZMwvMeeYWEXMn +iUGIuEQI3EMHS75w8oSR0UaejuqYao7stpxrtAi66vadwQ0E0LjqKWcIm9XuyZ75kWK5qXvXYaGh +vEqECdzx0u6/pq/6D1iHGer1dd3ppWpE24tnsiIE3WFtj6EyK1ziVTxMHqjOd59D0CEabp4erpu9 +86zVnlboTaLQ5BOfZyend3fi3UqrZNDmFI8/JxsGMSCSwyhrd2nfn6iYt7lPfiRAzlcmFLVyCBCE +uQAQkWNveF6mS7Hn2bhAZHDbJ61Sys5VI9ra+7d6KsXslaconAl04L8drVK3Y83cY+fd1yvsTZJt +s2EZ305W5jPOhoXoW+d5ubhg0EHTpy6BuGsI54m88j0/xwhn84S8TXOWgFfWcwrgunS2mTz9yuKh +wiN1ezJGv+mRItUcfuDNhDNv4zEjV5DlujW1UuIFLTfK6rNJ7R1lSkgH0lNr2Mb8sqekMNgYuBS5 +GAzog1SWErNvRa44i4wOBqcvdouIRdWDEOdRtjyHEwby7t3eiXq/bAs15zb7Fu3BP2xHcodbHa83 +HJKUwJEoBagAGW9KqAla2elnLC9LdeHMBIDflJ4eFDCbGjMbUIGzQfVVt2AI8CHC98CBKCh4anpk +mAega9eBgn0SphTfnIXhmLWGbuIoFQbowLMLqGeVNvKAMNrRiOQMm2WYhkcm7/iyxYBf6YEYa832 +0zkBh3xH2j3m2MXeE+2ER1tguoUmgGVRyGRH+dqLxF8zhsFtw36Mr2JmbLTdBdPf692zkIqKkaCa +m+fgpAbGJte02+ZrERnwumy0cyhmKh2ExX1WpurC/hEzK9LJeDcL6zcLfqHuk1ZA1fiEdu05TUiR +e7AJeERMK3DzQvT9dtaOX2RWOk7kvgpDW0D9LwB6bYYLBn1rXhm4oOqqrwb0beleatfPoqV1T7db +0L1GIX/PjIRQsnVjgyex3WvbqEj/1G8zXaRwoA6TBZpVzMmOLgt7QYaewNmZP9q9SCnEOd7/woiR +QOU+C88g2z/uo0MHbNzScjktFYcg0g1PQR+RWy2ldqRqUxnVD4MC1BTl0G/Ry21hGL6EX8VkFP2H +Dl5wz+IV/A9ZwyVCBkmtb8ajDJrti1IwD8AGXQnEoSIczIAOOuk2dsIJ0ocxulNgGnKCWQ45oFs5 +wwZBSFJc/MesCeH+bzs89PeeUWV5959bZBBbcxXMfLBiNexEcdJ+7e1BZ1wvdoiDEom9tNzQsa0z +WE8KcbV1J7Em7Z2sqK6doej/j5yvX0XqyQ6X1e9jF4Tk2rmAk+5NYoHZcnENNK9u9ro39qYT8WGa +eExwaNuiXHw1y3iBx9XUaib3pOJyBaqtQq9BLIWg5WmY5PIFx2xx5NRnUUwTvP+VNFRTAFjFFF55 +cNadDPSI0l9OC5DXP5VKmh2g8ZJIM3M0JQ+CiDXmh7uQ2pyOm26OE/n7Ypd62d9kprfkKDC/8CVm +YcSOK/5Gc1iF7Ud3J4bHVAJV+C01e84eShjVIaVwXwvY9XXAJ46lBFAUrvDrumk/xRAOrpzlnXfy +1GZUabHRon8HJABBf32isgSFzR0tup/ZfK5GM9a9p20D7wqP9lPp+MxvYAYEcLv+tNGr1E2Rk1R9 +60jB4CS8RByyacCEhOIr1IY2kewLoI0WxdZGPgGbH6/89BDWvq7rETyzs570wV2xFLA+fjJifJVG +b4KYAY5yjeKN2RYi0lNFkFUXLOLbQqBqVEls5U41gjysk8wDi1iGBcKQUT9PIFKLM+LVdAq0/srO +4/kPFFTSp32HTKUA8nWibJ0C8KrS1Ynp/5cRxbc2inyF9ogFGwkXSYWdhbLytpWGX/wxsK71ZBiT +ptjfq9DmKcAprzgkR9EGS9lX6wT/NdaGzhhPkNClPQt8BgseKtALhvtlLeYDGIytTg7GIe9Jn+0b +8YeG9cM18pOKa/rdaPbkXMyAjYmPoNbX8udSXu66xqMTLGpJwqM4UhVE7gtGfVgWy+8rLI4dm4E7 +DTeDwS94X+LW1kb/m9x0BTiwb1DEMZyP5fQ9FmaMMvgz/MFAP4/Kte2o1r/TpWXSChim7LqAvJY4 +7sYqOJ+r03IdMpOPa+Ve1yPOl1CVtvzE1eN7X66Krle8JdBGzbpnnI2hAVeNNtObsd0uSezY/Oc4 +Zqij8KfdvZQizqYd5mkSUw1NjIZ3nH9s5pHiZNkgStDrDshrbqxQr48x3z2cGGs67cqGYudeu9UV +TVLg+z7HLVhUc29/2wfa0sWCb6/DSlhL7xMrf1sIHhZTYxqtg1GrqAOtoSESz1+I25u3SWpwiOAE +aC+NUzrFB1KqjzIwVzxtPKXmLbbvyi4FGF6uQgN0Tnv0B46qqtGNs6LRJFhOXYYujcfW9QhX9hDt +s/H9Sad/gNZxpThpuPh2f/DMfNSlHDK6Pj7F09GCTKLv0s02c4g7XNOX6Lko6y5BSjAXzR+e0LBE +zm6ZOAXhEaF77P4elIMC3+55uInQ+3a1gAv1X8q9k0fj8HgBx8olwQh/+ielUh3RA82Vx5taRou1 +T6QNBLOZpCs49wIix2qif+gjiIC/KxSKCfLRyusYfdbaBG2mFtrhIlqgQM8SyU0ppNwXkogs6Dk9 +RM0cScykY/l3pXKlG00lI0dw2CwYHu0040wxAT9KANlnldAggKrYUdNlDBMWyQBjJSjn8p3ntSem +DB5o10KmSXnMi9MS10Jsz14U+A1W8BZBsL56R2QXK6CRCSkCorV5X7UAGOH9TZB6g49nqH9QSYAj +Ua780pCPZ2+xQkau7ZA2/SMbEnYOCYFnRTdSG/rOl3avkmlazbkRdmpJR5t1jQuQB+1HsqAFHW+V +AuWCROlNm3zHL3h51rs+Hxq4fGqkR8URDNIdmAfxdK5XOoOUhVfEbkFozMIayp5pp+zxLYJcioAT +xkLvFOQfvIvQ3DAZ0lG8m8CSNuZHhKSqh3mipvieli/+r6PP9SvuTLB7ho//NQuN2GFz5Lkl2NKz +RuwDX91uQShT9+OXKdsHDYWhqeDVdYbyxSAIEhVNcr6LMmKIpFH9l86x1I1FMgx/P0BYVwOuR9aF +jRR3ghjfQxkuad1nX/yfrecccQ6CaJbhinekU5OYWdckmp4QS5an2REZwHYgUh3fwI5ezSsC04Zh +l+zqWMHzRyXAeAFF9cjbumemIaMF39POStMYk+uw1947rdmWDpXb1PfNhgpZI4R76aHUxbtOUHAJ +iN+YvO0gzz2zunuvYQMrs8192DR+dCmJ+ylvew5jBbUaMyVFNydNqMOhGgFSBU8KmqPsu0dNU4Av +TNHDBx96mbwGOruIuqEx1c35GK79ufESd9vP6ugZB7gg45c6mNR9gstxS7SIZigI1J0rn/ywrZo7 +KkKIT43IzfewpMR2wh1tmeduupbMuheXKrEi6IudnLoLj2K9q9CiuDMcCIpkjwseZW3sf+/LrT99 +ZkXFfD2swSuh94NL0VC8MQU680UZ6SLkYuXsSNQlusfGucGYwHobuOk8nkSIJ8/atL53266Z76Au +tUw75wUHO4n2udMbmyhLsHDb1KqaVItovu73TVfTLIXJeQgCt88eve2RrMy1BUbuODMkkbkTCeAf +TiJSxIXdcjq3UdL89lVmSScJGoq4Je9LslIco/FRwVLIeneMyFgeJjvzPomUDqQhSYtHPLzbHDVb +4+rFhgNoTfOv3A+C39+K/5aAoIuUn+Drvl3WTK+yLjZfO6KGHWCFKc0UIOA6/JQnXTWbLXSsRXjH +PKS4GUoBXDz7zDyVHzkvumdIj3xcvnTtAW6i0IPF01J6QAgGIAcaxndsANeYB7v/bc7aV2O45uba +7e0bgGVrmrstnz0iMsls7bjzOA9RKAgYFIj4AUG3qsUFRlX6PIl3+k7j5NguzY4CGd+FD9+itZte +d/L4ptKslat/+w9IwpRiYivQTQYjskEmrxnS2lX+x9/dEKFxZU1F/Wx26ziMj+nVgtOY0toJVkQt +ZYuGDKRrPGLB3rP48Bl6qfjTsoKfICvYi0qg1/MozgXZduUviUi9XPa5bCPCiymfXGzScIfDXPoH +jrCu2Ze4LIx4Mu6Rjhs1AMihF/1+5+4Hm8fgpkZm/em8YmI67V5quV2YjFKEMtraViSfOS5bQMER +iI8I5MHfzI2tPBBa7+CuLg/YcxZn70j8Y2QLelpqVUEYgvsXATxcb8eBmV0ZXYVuISv/XLI+KW4N +LqUY8zlYHQFX0pvzxjOGXmCjWspECYSmLXeiEmTFzeXECq5FhGWc6YMk7jMLXnggkFRqK4HATNvM +cYlq5B7ro/zMrdVPoKhLFKQpCeGgiLUmMdNaNhYQKD46u0TRXI0Gq4AJnccBv7aO2QtlBMoiSKDX +lX/bkn/drXwtKbSVlURcoieucWJOkcamQRtJJhzHXr4Jra2dzIHU6Ik+4RmBsd3qERnpplNMtOOs +drMKKphwW2oMP2rLyA1eGvzMZpzww0HJhCugEa+75QS+YhyELrGr+pPh/ROTg18MalcbI9IA8jwY +bMt9NXU7hrk2BnwWU65cmdJQpXj/JIEhHAhaerAODXcKctWAa6ko1VnUnroWpkgnbwUcVa9RMuq+ +89mPfn48kfPRbxHlN5G/W3LnE0reACOSoY83fpxUR21BobliPPGjzaMrmw3FWAt9J0mdXnXWK9r5 +Bj8oo/KkGj0GVfSu6gbyLgc6aDlfy3lTk874j/H/qKJtftWVET3gQn+EKf9XTaw/s6Kt+0JtCcjL +vXDMBieeoMh/TjDh1yj4ZmzSplTxBQFwVYKkgDIAv1lUKY4WeEY/OHEfT0jmAN1yXOeg+dG6VMuW +4Hfug0lcOxpe4Yvpaz7MKfkfHa+U+qf0XnyLPruSkCxckeaLe2vykSUfd2dGGHnSoqDr0/xr+y7K ++v3bhaLWV4aIlps27wE4+GGJcJ4cDOm9SYwcr3gxVJDixfpZagK1gcJO7Vku0OyI+H/1Mv+JcBsj +vE3/TRD5t9xMq3hoyO1MaZa9qfzlFMZRzDEknxsMvx/1Jv2+39EaWCg8dK1WzHEYe3rD2VcC8UYe +fhYT5XOxeS7KbVrXCaI1BDwniG43KmXwfQiW2bd9wEYgm4rLulfrh06QQrIRqiHKvIHoxpzw27IU +pRPma0MVlrJrb9kU6tmnbbrTwmyiGYdlKtb+CNAoHhNn2SBZU6C94s5O+LY2HV2inkrpTagOkyg9 +0AEq13Yoif93cwHM/7RjHNK/V92K36BX1QSf/to9R1dTreaiKvoGDyPwVKG1O7KhJGEArvm+AqeO +no2KTPXjUqefyKxlsuHoP6saN5IQZkGT+PU/3aIujwAPCNUfT1xRm5BT+SQIw9NElacFXmkUKW2O +Q1hSKAuLYoq1WrRXDqxSQv+uSdB9kRoVm0zIWiJdNM57SQzyHrG1B2B+H8xPCgJ+wJv1o0YDBp7x +P0mu426cANXXFp3Qowvyyu0qybBprp8Gy0fdrPYaPX1Yz1bM73TcBZNrsTcrwtuAgH3KcY/7vMti +v1cccDKBiIcYgLkV7Pk4XzW5Pbp8G2jJNApBs3rGQIgoWwkm2WKLyd2CQWq9GS/KOYEU/V23E3ek +BmIMETG68fYju2xY3NeEmd5pwkjrTDXvZeVruDqxO1fgEGhdSvy866LmGX4NfIr2VNXFmCTCQLcn +OfcxPwd5Kq9WP4Z3Jr2xtugh/bEh2vzwT2/tG0zo068WWqi2iX+mieDk0cxbdYSJIUMGg4UXa9PT +RhSSMeKnUfXmvFrE8Y3PIEvHQDwXrfLXdH2+imhoAMjKPxGOu3qN9Lbkj2/Su3cQ7NP4sN9Zd9bf +hJembO915SkN0zD3j1u0mAJWuY3kfVpW9CHNdXX0sVR6lrpVz7gTb+3sbpFf6+GoeQqyVVhL884v +AR+NoHgQFbrVDtC98aPCi301NXBsQZ4dyTK7A++vnGgtJJpaWimbuQbQGKnCW+3w/axSNv2RMGQy +qQZnBCgvH0j3TXQgItifrvG5rEeZMkhW4M87zcs3Mjh/XjywTwn+qK5SPzkmCWh2C+LhFKijxtmE +BojpFZQbAlsoRB90fATU37u4pNCti/9RxzmYnghA7rOOR5vPhqLeObTpRdW7kycK5qWZH0MOcgKp +rbuw9iXqfHeItsgUDkVRocBPAJgDYrBIPR1UfFlDUth2yUDCiDMDL53oW/oMZYhORmSu9A6KtYt5 +Ih2QKXMqNP4nyq5VujrfWp7bjiZhKZTEj9LTOeeJEcvVrqQ/uLHQio+860u4dGjwGtZTxVK/6wEv +x4I7lDs44eTlsOERPigEilqKa9HnPUwaHyi5qdb6XY0xpZPNnbrfjxqh30yt2RD2N0YL9mG02VQZ +S1o0zxqEVDBloyPrPFLMzJUPvFY7G4cBX2TDuxayJ/7qhGpBwB4HRbWuPAq88WLas8XrnZftfqoP +l6Tfrq7hFDvPcYEGwQggbLYMCU1Hh/Q8/v5+fwL6JDWBjtZD+Qrz++yBJ5kMAehZomrw2+M3y0Uu +sbheF/gAadixAlwCk2jC6MUFwVMLPrV/ktc0lH5S2SI2gCC6uOawCAdiUJx4a2MQjgA3nZJLct7L +j1tscd/sypHgx/RcEKxSO/CuMYCL3g/Ewag4Cagzl+A+5TT2+VxaPl4Xm2Swb5ItAPwyAMx6w2/2 +lySm48eZBS8hksC+lQFSMTYfTSXBLoC72bYE/zFXY+KFTPO5+vAisRyMGjQYtf7skTzSxldysrwm +GTfSkSdtoGajct7/73tzYI54Z0fUm+/vn94ka2LygPHIpd4HjTD3ebooufoRD+WdHM+416VfVL40 +aE4hqnz+f94EvHHAknL92+5NxmxDO/dc3akBPSLan2RCqyktb4sLCSg14gUAkqF1p+u6kwiYhmj5 +CHkFqZOHo11OJWq4Ay46035LuDQviDHNI/50YAJ5EAz8s3VIzuH/eLl22mOtoud+aAMAXIXKGClY +5SKU8MbBkr3rnu2USUAfBW00skNgoHr55lbpeDRmM5uCvE6ZyVyxOnJwk61FupGsBGHFXTFUrfUs +HvP72vLiJQMJ/xmbB4AQM3AKnEgG7Qen5f5bx3uytJVT/SRqnj68yheGhNpQ52Zz2r6zqqmupzrq +ubxuTK0Yp6WU8p3mosuuay+oFCfHAoM4PB5qLy3lxzd/SgebuU9Jiw+ssfK86xGafh64S/4Hwdkk +V2fikiACTZkGYeTY1j+W1QvxSAELevBdERHFyp7EirxP2Y+BDJQUWJnu/66ESYvnKcYoFCiRB87a +07w97wzoBhBKKPY2WKkoxWXtojJ3SNxJ3ai5HpcmBixyRyZRBjD1lj4GVXdii2NldzY8OnsH2Jhk +WaSKV068ABnULtTzLzh45YJUYDwfkY0P/0rtFS+GfUpZMnYCj64U1FnlJxcrF44fsokY/+HF+Tn6 +uCMMCcYiwufBb0WuS8HkHpumlAD+PDdJjlX9HvBybtaoCKFgciB5QQz2uYaXemW2bvqK9TRT4Dtk +T4H+84AMeBHrVFpIeoqwyanXIsHCVb8E6KO6LFgDQtNJXono5EqeFxXmmPcCds7DnRe4dkkHAdI/ +p8ni2KpIXJek4APZbGhNjBP5h/plMFI3Y06rS5CDEnAg1CjZoutlSzwdwRH6+mLCu46hiAz/UAeZ +RRK9fVnOxB3eHYx485BkQEeSuSiMlmNgRFY69MH7/CQH1X2xu9DbL6yOKu45XsP1fM9T6LrF47ck +tNLnQCmgVH3laMB8V2XvyrwHeIfrVq/7eyAWY9UL+woYhPABQ0o44Tm/6bF88xKKL9dGoG3BELDg +hgx1Uo10nupp/YJUs9xc3MShvL1brRMlnF+gFcnA3dQyIu6qfq5cBPRrhdBVAaJ/cH5vP4Yeex7S +o8kUBgMjAWrqAUjKoNWip4n1Mlj+m4fEdLdGT1KVR5LCTbOKSM90bzslWtAiXCgvY4PlR3BP/zqk +ofT+utciyLAICITIIn6hPQZH7UykLqpHU9K8nzYwbub1cBRvW6lMMFAtFHmgOE2nPSKcDA0LFuIS +/1IjN+f6LDenVe9xhhx/DYbqJnXD9tgfWkhsecFk5ojlnLGtkFy270dG0EGGBYHNUgRDTU5OQ+6Y +KNXglPORxzvLVBeWmLYdf30AEdG+QJ/WnA46aJ24+JlzswQcs/CdvOr8M6XscuP05+Ji7aGRaDTx +nmLtDMIPNLeZ/5kzfero0aXqUImJnjj0FMySk5uXHU8v6F1N7sWxC5rvFyy5l2yRpw/KezM+/V+a +2vDbLoBQnyTgUyGhh+FJU8tdwaQ7ri1c4njc7nHlc5OtbR3Q9nRJ0YtYEKheeDit8k/ET8p0b1uI +anPg6uscCc5YAsIe2jUArC6PMKw+3+h3W1CPSi0iSjlneqcqTsIa0dmJlaxbDsSVoSc4jr09Dwo6 +Z+XTU1HYNhzqv97E8W6De8duPB1+rx+4YU71UVQTG3IfrDd2jA4lxXlLpoSwxk4u+nbMH2OOoGgr +y7EBWl7tdJ4e85Lqoftm0T5vyunOCyEQ5I1TeOfwLq5Gz7AyltjI22HXjEcHeOXvmHiPNdTXubJu +4W3fOX7hli2ePJ6dD+2LS5YVJXW0KvBlbosImmRlVgugX1Zh87s2vGYDcY/40xoTKiugiU5bN/XL +urVXjsdDjBZ2ZnOP8EyOHmZFA6B64Vm9mZH5owsGwf422tru4KygN6oPjIBnOYaiO363U5aBXRNs +CEbUV6fLa9ZAw7E5XzCcGldSNOhYuQBE/iWY3B7NlSGLXhYBl2XkCpOEur6q4CmLpitGi1jI8tR7 +7zQMA2tpGD5o8BvKRYCEqv9dy+Leh8Yam0oEzU8yQKAO6eG8S82DTdYxGZWpbwrpEvwLS1sOg3Ul +x1NTQzTzouxG7viaAKdgSdYI2k5iebht7ma8yB/mVtyRMlPIRAy9F8vrE2qABIyCHnYxetdR5KAa +Y5aeEezdGPnVB1st+adKpzsCHrpcLXV+MY3Qu03rkNUiB865NL5RbFBhL8c4Sym8LkEAI8PkgN16 +XzipLgdKQH4MakD6O5I4JU+2O+xh9CZ8u7Y/lrr8GjqGdvk8HTW72FiYjCTNINawuoUmt+3LQ9g2 +44GG04Vq99tEDbfhf3l9oBmIZGSbHmrcWPwrWK8Q0jcUvu/3CRyxkyd/V4h+z0cDvW+D/CAW5rP+ +Kwgb7ZKpxG/PGRIL1+ECgEI2lhWEA4EKUjRyNOK5HUrkkZHClPhIpVEESvhDlAIwT4Powi2o0clN +LjgFKTSr1qlT4ebEvDiCFK888KwArcrxGhxqjVHm34V8lg/L+ffDrU/IggTzayyyvpuz7hNqDptn +r7nh5q+IdcdzS3momDCJkIU3HX5OwCdsz+RdIR8kDZXUh58/v6RmyIwAqBIyTwVyqpCoZo9q+9JK +uV6Q0Zro0rqDv3YClZeDqasEhIHjcvt0OmNEryCLWB6j7wEZd9LSZ+MIvZkxbFun7egKGXgj2YrV +gdfKlzYLW7CnxLyvQELhA9X+UgpFN9pUcPGz/qpRBbvNLiLFRAVilUchDUTFwBuTJmFwfqQ7BZyb +WFrLdW7+TfaT1O6yjoOC/SxdOMCZqNVazOQHBXNxpCX5PtGQenY9om12IhxFptkeb1UKuNjydKw+ +RfUAUzhjvwPiEIssFN1WnKWfUMQTJPBhbsiogDoyHHCRu7XBmKOX7cFF7j/fRTjSGr5XfTvTYc+u +otaqsCcfj930Dk+KTEVqJLUE18dWP7BGTyptDu0OBQ/JOlai5Ar4ao+0rnFmIjJW9d19GzYwXQUV +CssFOIfy8lcMP+OvIpJNp8toQfWc0YQ4dmS5hStzKBbmExvgJS+iww+i/zUfbTq5ttdVX+H/qWwC +WKf0BbQu5PEha9jz59wKkaLBxMQJLgjSLgyEM203iMOjYndZ/9LGtXfJf8NWEdybjq4Hnjd6/tRi +lYIGd++SsO/mpWN40c6ON4vY4TaajG1UIurfCnez+33k1wynsCqHww9cGoxgaAvxBqePFibDB046 +NwshFmnLctnddwTJ4TaR5DqGA4gqzqxwy3ZQn9Lz6NoLc3pbBiWOq5zj4jeIsmAhOxZY1BkK1ICb +0CgN7Z/8FdmnFcjNFuBs5kFD4ylq4QM9LK66WR5kCmNY/AjWeISr6J2ODitSCro01jHESj856Gt9 +EBqVvBLaRPxPX2HgQinOUp7PbJDfGgOwMqFdR+F7Us38zLWccasy0jmKGLVyCUd/8lNCNGEqbC/N +ThbMsYDu2bKrBEeqGnT5GY+g5c1JypUZAbVYvrxkpeYdN9cz+tsO+tyyQmwyevi4Fvt01HnNs2dP +TXz95s4oSN2tl6DQ60nHJcNspOypV8lntr1Hpt/Y+SHG/+HAZkMNNZO6dxPlTDE85uSajL0L+M34 ++NABSCwJuP7TtK6/5NShzDj4A+h7Kjx9oq+hEvbxIwqiUZ9cfFqTokMPQKJjPXqfH/SG/o1Gc1tF +qszI1enhLaiahEMEpvFVUCGBtsmEIAshPrXU3Qfy3M/v89FpsB4IC3bYQkOkG07AHTAaiKwpipb9 +Mkxvfnr01/2uXPAZu83a9ZVvQYJFbDHqdFHlLM4Z/ZosyGmD/0nzD8sgixSKBb/WuSi38wNo/wvA +tjnO9v8JmEnUg9T9xFih6WDeYZlM8NUdMj38oVOqSHL/lTKVhFLWIfcx7pbVYAZLrGuKT7aDENHM +TwUqJ4dNXpymDvTOBQ45tviV0T9hx+l9n/pKoStLTkOVycnWSx9aB3kx27zmUe0h2gsLufs/M0pn +xbN6qg6/qSF4/CDz/hv1p9CmpUOSTx8DMSEgD0YYQlTInaeVBgpANy8svNbOd6AAc/wtDT5ihBf5 +TdzVg65bYQ8+dfdu6n+/jB1T27Npt4L/T6j3u+Jf1TUU9yf1SSd3N5+c0PqBFaWr3PMZaTQWSSWw +34hDK3dN981g2z3ABT+175yhA60Iql48T7FCjU2hUCT8ycUyetzb+2LDVYEmcJ10Xm6x+KTgb1Gd +DgOJFPRiqdTJbepQRsFl1EcbglCd58zQCFT4vYZOKULF1Kz+psl6NfOShLAbRi2B+d7p8XVqkEW6 +BQxZR8Nko5NoUnDwCHgZeaHe/NkQraKI/0xeanC5+VHjUZeaaaf6vz8//d3xGibmRLuGU6HaZCfV +4NssqbDvR8Gz8bbvHf5hhPWu1j3PRRZVpKLIAfH5tUHBnqFJh3X4SQfk5OpdthFboEY66kLNbtNp +oPFtjDUTjpA6k+aybnx2hf/Q75oWk4xcN3r4BASw3GAAt6AmQWwDXgyzs61In+ktNOzZ6wZLwOx+ +4HVU5rZDDQm8DGhqbcVhj5pMYFZeVyYf3xHZfyvPzoCgeXzWhWoiJpc96nEQArjBCivkdmLFPjv5 +sMIrb3SBBa5aF7WiG/Bh6YsmNywXYPHcujbkTWJINLZtmcdqWv9w9siQp1fAP0BocaW68KxzEBCz +K7b4OFeMoZTONMR6p9B6jpN4kNSZYLXWYat4Cht4f89pS60UQR6OfpAtIKZTf1vag08OvyPzqUb3 +WnqbwLPQtfIxgXEsGEBo5uRmZD5s6tMTngi93oVgRcrQNDDsSi8ugToSLfwIrWETseRpmXjADz0a +q10OdLTA7EjS6aMIthohlGtAB8FDPMQCtpD5GIOOzFoiumDnirDcqPa8nNubVZagyka0tysCLdhD +C+m5oQoMPeRWIoixYtdoZTZ6x3dQnVeonNZ3pB+VWNzNnfQ8M+D84z/rdlPebE+G9zMQJQC8HDs3 +wz3/FOfNdIRkUeKCb1FMHdyMT8dOYMX+MrEf+VS3X8RjuWT+zYrXUpNSvnGulRUgnUxslkMeYjG9 +9FTABGgpbHGhRAPzemKUGxEmlwb2OubVsP6lOU9iVJnptp9Zhfd5HfsjyhwdvLYZ3+xaetA1V6R+ +AdP8RDg5C2VlvO7BSakTTQ0pJ0DEevTFwXxyNuC7HaxPOGj/iIeN0DKBVincVhkgbyqZD+ScVBiu +dYgA/2A2pl2q0YU2cJnNlm2WaOqhnmnCkaO5iRJf0g3XWwXyHOqTmkGwp/MJjY/fG3z239oxMmaC +65/Ixm8d+whuxzMymgeLs8/0dr3L6Nzyqh0+Im6CO17QImlpcRfaEe/amiIvvauhPjcsR/s7VEuY +6ed4KwSDKJ6UvRe0bVBEbpSZfTEKPOSyZbZeFQzzbMd4hs5rQPvqwUthjkHw1nKo5OBBzhDzTq0A +Ae45mTngHbOmNZX484pPWGKczFL6TgjQvP+8N/POqJQ1cEmEag+iXjZjh8itHh4DJvT0XiUqWNzd +zVHwH/bdM5lxXXTAmjR2UJ8R0BCLvI1fYSi5cX1sF9mgNGVEZKbGM4Pkc3mjQNRykPXtbioYnmw2 +7mlpLH27KA1VLgW0hXMsx4xxC/kawA4gW3sRvC7JUKWYIUj2C2KSN9HALBsxp/lPXGInZa+Nzloh +RBmyJReQD8XvPIrTpqN/8QQPswzVNmdrswK+/t7mSN/xZ4F+J5yZQmfwHrT6UEZekezNJgW0Eis1 +JM3LMZpefq2F/R9JX/wH4fp3ZZITL24/D5yzgn+7/uTW/llXwKVzPc69pffsNVYinjjsRUKmjtrc +mwtar7LzygQmtc9vnQ1RfGmiWzG0UlHwDbp/4YCJQTym2UFAZdtL6nuVptv3V4ENq94eAw/U8kHh +BtxCXQJSiA8qLAZF/15NCPxMw17aW3uLmS6sIxa2uxsIvjtVpm/VH8mEdYbf9i2lp4bnSJznxizL +1RpngjvrMaRI09ggC8EHqJEXXRRweWNWmcZFrCymettYHyfrCndZstPjtWAehEcyHZ0aysXbIIqu +QuGRah7Tp8sN0Tvpko/V2hxNkyVtZUTnE9YNtmE6TAfuWDr8Il+K1JMYmhucNF87G10KE3g6/y05 +PIUz8oCQjoCz9LnmJpuSdH4AdV5hkh9IKEDBAU7C/IHZnX0V6S54PNRxo2FTilBB8eBcz0+dt4iE +J3GDoA7nMrLRz0aAfFJxof/OKrcpdTK6aEA3qg3IZhUNjyouNhGr/hyfHkSyRN66bxKnnNgpX0ua +WVGMy+T63KPxyW19Z/p2XBg6xic1Zy59ljoyP5PYbo7P5TrXI7HqNGgjRXgR1i4UF1eAEACFI6Wa +LMC9xau9piIu0QicNAZ1GvkwJp6Uxi7JMtlFz6jHLx1ZAU0GkGD0YX2rkVSP32CJ2efQ/rJw7cBD +N4DTg9QZUJUCSukh4UwoHs5UZNFSFVHlrhPmgsb3UH9sLnypbAQ8q5xfjKRDb9MUmZrejxueyR6n +XutaYWSHlCEErlDcURPlAESrXSaiOJ7B83RKUFL9bM1phPZnSptb34WgYE5OqceYmPNQkK7OzDpm +57mwwV1frhkyNnMbW0Xn3d90Zf7eXmupUyTvZXC1rNuLq3TKpjqtrSepbZYW7NhxWNCmapnKloO7 +rEqj2bvbDS6IlLkAboA/xdMJZETaWfHvHnO80xFALmr+lA4HRHLOql/fTzV7BTsOKmCMV9z4kDmj +i+p2LJBQcwjXmlMYkjitzNhgDgA2G8rmG5qKnfFeMvCdjKMgMN6xWAUlpVeuMJZ74dUNBE4WPiU5 +pMn6VO2g+Wlp7Wi5Ktt0nyh40yQT4FMETs12JTU8l5wxsmZlWdwTt0Md+P2v4PE49vXWNUjGSr/Q +kfimQIYPiU0iChr9CDy9D7YcUKk+aTn/FX+aLOi581s3ybu4ZQxGdjz0fm1TRhokSuROBv+OvAVU +i04NuE0CE60+ZzzGm//IsKfxbN7xjGjJ2Hw7hwNjx6O5xIXdGM41+Mk218Jpt8jL0dKChO9Ty8+e +iJ6xsX3H9n8csdzAE8H5dCGrrAG/JcBR5LKKmU4gf43FDDdW/TWP8gL441uql3K1MvO+ZSXtr4sM +Us4qVyxNS+9zLveWfYCx5Ym2w5mJmwvZNRw8rK9MoWdKshj3RBPMEJ9lhvIB1Ysqm6ELD5Z+S+qo +d8FDKwWNfw6oQPmPdN5l9LqKA118CRtlkjOc6fF3BWTpvbFdIshNm5mkuNqiAmpIkcTHnNagP5x2 +KaJikFGORA6ngzBpL7LB08uCGoLgnFVeoFRg11YdAts+YOH0CGCcMvtexQjPrsq44NnC3FcuXCZV +vIGcd5iP1g+kbzhfhFExt3rVLuDWR9i3962mScU+FrJXmbKigiF+TYCPVpoaQR0qUwmop4MdTfkM +7V3FoNbAVuTAFZ3zIhdZMKrXLHXyLFcknUH29t1S9M2i/NSVvxt8JORbwtIA8Hy6gbl1zQRdYuGN +g7lU37FswJstQALV8sFtToMelvMDmB01GKTat0aluGTjXeqC9WCrPs28zLDmOGZaDHGMMjn/yY2G +kgkSSQuZw2SEZTS35Y426mMhfzkAuXZD1MRSyY0bs5SsjIjSSW3XNPpS/V4zXE+FpelnkH/1LtCe +dYerKiuIv/iVZrw9lV8V672S5ELIBgcywc5jufftE4vDF3N8s/b24AlVgYUyFZj6150i7Vi/MvJn +IKd0QBs2ZpebvVR7yQ266b+Uxt2vhT4amBrXZcX5RLol41AuM+LLYh/yxPuO/dMxSjp07ShDXbtv +Ljje7UC5IOtxSNp0qVQpWe2MrNoqIaKB7Ta/XXp6LlOIA3FKfO073Q4Sfti0f0gRM3GYiIWu1Moc +D5YJFB3RcFXfb/A7QtZsHX0jrjXOu8hIEd64/49+vQc+mn40eLCfhsyvPfNq28H4dlrvJgXqJ439 +k6LIJDpYiZ5j74D9BxnFhnAnRCdEfBL4fbTh8edLnuQq3Y6gygE0Y3sAerPGG+VbHQkUurFXQ3OC +8m4ahV+HLGgRDltTs2vgFIhUWhuoPHhY8dmQq7b7vING3FbSCPAXXWuI4RouZAJ0rTLihkkHDQci +csPmmmKLqGkOqrliwe7eGeUO7n4A5B4k7oC6NACqWo9RTV4D94kMIp07o1hTacNDEol/CBjMz/jA +kLtAnHwqBO3BR14SQlY3UsoDvSfvGXtsr5mSX5BwAs7wJhoY0dPsqw2JfuSywR6O0edutVUc+0Jg +SSSn6N0eDiH4K5FNGC8b/6T+nFmuTdniSBSGDuU6hyoGhWIIVgBK/N/q6sgbOeKaOOgczCVaxiHs +nQ/f6QToMDu9kWlGSDV6IK3RuPQ3Kma7d4C8F4cLCf6iDPrxZ0K7VNcevUpYWvXJ+6cVXv59fYkA +x4H3ld2q62jIisg7pjgjA06BUNvMoMc/mHz62cwIegZMBOmE02Oj2glgmRVK9njQADAj44pKLJFh +lepYiM6lnLOhs4+ElCNibCYhDj2j+qF3nzcr0DVcKWlCdqev69NmdjYTDEiIcdMNctYYeglqntts +6s5zKyYKkvFN2KCMoMAsl24FpP2pVggWm7Mlg+3HxxdeINzPuM9VcezgfvAcTh2n35lJ4GZ8n1q9 +TesBTm/hJB6n4EUO5MgeDEHuN2HNd4/sfve2IkkV2NJcjRCml17DeuqWTp2kLIP0VkRmsAtudOVr +HUN1218IQi6K5t8Cjx/u4GD/B75O22LjqbAP0F7QkM2q/1V+goFUANuRYBJChqO5azz+OaIwovEQ +zhruOTUK7kHf8eY2H/JdvxSLV02Y4DF9ew8iEhv0rXywrENgZR4S34z2DZ8/WiEm7naEqRk0Sjdx +ESgpGZQWz2Pcr4JXtzg4/tpDwdMOtQbxHVSZ7hx4Td72PCYGwkWavihuS7yEBrKrN06vj+NANY3a +knOYfzcGkrLH6brNSyBu1+B7I+W7HuTatXrgymO5yhy3A94imFXM+obrvaePix8M6g3IO0RBhHXc +SL9nwd4Dkj0wuK3g2lbQXYRQ5ZsEa57nFN8v0nmW/MnBj2nbjz0Aj0lj49U+t2g7ZfVkmqxxxQxs +lkj6b2ePygG28I6uvtLUPBrZMVW+9Krfuk0gAfH1Mm7kf8514nwkDGaFSPkPVeeWVDkL7dlJrV4q +Rb/eiVBde3m5v2uzIRWEZTfS6zHYN/PdNPc81b0MQ0LVJ5VSoxYcyVniHIRJUAArbw+qVf29ZYmG +IaFjX8dtgVF6D6apfXIksNe8NcPItxIrZYxXqYNBhSanATDJl6WcmL2RgJ1JW8dNv2YAti0kT3J2 +VNhg12iFhrJveb6717eGXf3LsAxtPXH4AB4XV6wtwu/QAwSqvof5NuHiAZnw+q0AuAUPJU6JsE3K +3AHVxNqNe/7U4+2Yosa7S5KTpHZOJQ+iZKpcF3Br1i5rnlRH2aDNJNaSUx+OwsMe1azBsC4WJo4p +c3fZ/36nWaVzOTcOHCALAejwz3MLbrLsML7fJt3hsMsk+GKgElRn/5W4S77KcCyM8HpmsFH8rh0W +IxVh6fbQ8uTa2dF86+rkstPKtCPu3mR/dlBWPWqfNXHp7HocHscjJNx0672tmL2jUeFxht4PKtcO +Ooo8nspV+chWnBWvt+30hHsaqm7dlPmwemQZ/+oehrB1wSq1F10GOk+rR6d6u1FKVLV0tiGxf4pk +sukNBcm1mdZk4zv7IB3cyzkLFRCj8BcHdbB9c/NQn3wUu9vXp7o1drkM/SgiFJyVjcpV7vR6dc12 +nvy65EptiEeITOkBm5lVHh9s5s4GRS0X4OKO1raGxmQNY73Enzise4WxhBG6ZZd2NPy/c9u0W0Gf +uApKdapbWVI6ZW1qEgHwmB1SaE/I3ngaYwmRfOUt6Wea+hNnTWZkgKvIwCU249DDJgOMOwy8aoli +YEMf0JE+YpuemPLaROI7nILNzzvjiGEP0qbuIDebpHwwdMP4WTtTew8bjmBasOr71v7/5vAbr4wm +zYr09sQBpg5G2TV3kGmS4cuhAA2qmkAjEbjqyGuXBlEbia7ar3RQh+tFNN8a5mr5A3Bo1hjy4HGO +g/BpUZJy8Q8EAonHGLPXkWzsmzM9U/1Pwndkf8gbsrdrNvRe9mqNH0tG9qculqydA4u7eTeoj2dN +w8P77evyajfM0AyfKhGdHJwhA4+fb/vz1MHXn75oATIVyKJn3ZjQT1WRaCW1hYFxDlB/UPhij7/A +rPkwW+Z8HpLlLetN+PruKDxGVnwGnvrIvoX9A2vPeQyP99LVBl5KedkElYJbBmUrV6kWhcuByTVm +BLM1UzD+Sck8IFK3c1Hj6K8X8dDsK8G8hLuP+0Bp61JZGs74xMWinPkqE+STyU/Uj8COB8aRHjOX +39JM1Cd5HRhpTyfkQ/29cEY/z7HCsBXfstEy1uuiqgGOIbBope3G/pQ4UWTyLDrxMd7vUC9pfAt+ +knNRJmxOkzjn5tVB86Rj1G0Gbm6Fkdn8Y8CgFPvb+8pBxzxb5dpi7Qtp+AtfnigBW4ayucy4aoJN +vdm0/oYAGwVTAS2amT9Bd/Z+JwrNJSfBtKHxRkGUArggzLJQjx3/pq3PiuSbNPEVi/XPpYlSMVLI +NcFOh/2nUj925LAxOKLVzKE0msUhM7P4rP2Nh153jytM2xpV90KqzVgvFIT/YNdRobxum+HL8e15 +hyCwl9CbrNMIlqecKzTHnBVbOAyj50ntQ9USDJbRIBosFH4MXpGKo3R5Kd+6RrzfaxMpX1RjAHsn +zf/r7yda2XqNrgMn2YPkQhDQeZuwIxnY2mbj1JQ472EGa6vgT8epm7yzPyStJYHoU3LD2j1BIQ+S +dhx80Jeo/ZshYPYpm82orrfZzs8KoAK5/+YgeHds7GkJYB6zjoZsjMc/IbNMMwTgkQVGiQAOw8s5 +4sy+u24QpYhtG2Qqqr2nWWJT4QK+2j0MYbvh6Q6UigVtdcQtjBJDHJxpm0dZ9xWBJqKetbwL6PLl +Mxkljrg2toYm7phckxkPqMdjFcYJjgIlGwvKFaMnFm1oAdKxMPtbAVllJpTuUhKXh0eAJNoh4ZLu +cqgYl8PydDVClrJ814U51Shv+r9fMusvflWoJDVo/b8i6vfa6e3gFJsyRq9ltI0dRqHiGVQHOVs8 +EMkP/cTwsDbMVSU9WL1ijleo2Dt6m3t4JnyqW3veWS3S5F9+LUJDoxuaXpqZW5x4fEJcJSMcQjlh +NsYPw5k9fs6jPUz7ZNE6WfHpc5PeWmXVy0NyEKQJkbGlOPWwhnXlBUBYXDrScaNDpCNhuQtw6rAt +C7YCrFSb3KTZYyKu88YQNcp5tICMayISRXQXgKLyMIUUuQUYOx5Watw13rdldxCGKGwVyUUyjgrH +41mtUxSfK5MKk4bzzE0P0JSKLgyc0RHn4ygq9U71CrbRKusKT1uTHZ7yg8VM6q9DrF6CGQm53eyO +ru9wJl7Rim+Q5RCOIADza01Vl0vrioK6+1MZZvIVqTzgRqj4LeGYYlaxUQhT9fDe082CCHNMs9zd +cN3LccCXBajLnu6BA1URvEvca/Qd+5uFkgDFvBubhxplIa0PiJ45ScH+TM9kYBAWlzwriAhw0yLF +MztE55nKueLoeAiRxP+7RqOy1UZm4jIW3X4RD2Edlm0ptF0gVuwW78TS0xMtCO629+vBJFUJRSPf +cgU0h+Hf2JK8rKHUpqPYQP7vDmL3JaBEyp4R/Qq5VPozVdaqOelc/gaezBFQHBxNNJkkOP4EWF5k +CTUlh5ceTsRDhcorrYpoikyMKgaq8W/0b557IaaQQ6dJ7Xg6YChYkUP3SaFMfZYffsleb781+OIx +h33l9lAFrreqb7V7OffSOYXk6SWPjioWN19xrM8L2K2QaB0lUPl7dy7tcgk2utNi4HHSzUQZUAfx ++7rb8Za3v4TenDeCbZUq7QVZbAHQtoVHPETMxSGKwCMD1HW1/IvP5+fPUfoGaibRA3m/zcOThtz2 +b0/adLp4t17KZthAwVtmgGAUbO6GsAGqYUy5BKySDKywazdnCWYD4EptPzSTf6CZle9z31uTy3yp +tpxPB3B9rmpWGcxHDoxY/A83E8JX0IhsEeo/iCoDX0N2olRntMS65WXwAJxAWCL1hzZx5pCK1qPo +APfVQEAx9HebEn6rRSpZ4i8FfQH07ITCOoQLbk+DdFCry+D8PCsEKjWCpAolj85uxkHtDXS/pm1y +EZGPU7NMBV4rH3Br4jF/3sjUFYRszAcxY1ORSL93IeZGuBxxnhWES5Pxz9b+dnZ/rX97Pf5j1cHj +C/Lj+xB5/rixsAoZWq4HIC++eDIZpm7Ho3411+RojSyb4BlV01fA+4iRlv83TOxM8WJ2+FAg1GXr +WmxeSbbGAwj6FpvGPVQI0nh1MsvGY0Xfo52dKcCPSvpdooBMwdOEQtl9fhJrPyZrmMcsMYzLKIP6 +odo0CossHqqyQ1ESb0RTIlz/a7dePAPLT1SEdab4D5v2tUyCz/pfFyF1zak5xv23i88gz2YZeSNG +TEf+TdfuysBBDRRioHeLK04AQWjnXy5ALCKNZDI/CPhuTG1LrIMvXdLaoGX3jX2KhCMnIV6br0jC +KeCKUegLybrByPpw3TRzUFOCwuWrGNjzegRBU1N6An1LwXhp5YS2FKHbWrpb5NjZ1FepUuE3nzH4 +FEo2yqm+LzfBOe1GcJ4jSjD9FobjAMwopiS6YPSz34DLVx7ftAApRQtQ039s7XVTrJfxx5LGBe7M +xQwsCzMYctUAcR9TbGr2WGopGoDJtQj7ASDMMcH84/VAePzFCoVv7lYAFfgLvsMgwmR7JOLRnKcq +dGaQtOLObbLYGwArIiKp7rg2yZXO7G1GNJzWVmwq9ERRJkokWcGJxF9I2d8QSI4vqsHe+lYv5y6j +Sk2H/48wyBV3PrS2apCR4cXMG8FQoGuPAdGRWs7/WcqtROT1Rc6OWpsuxQB0JiUqKs+IDXsJBc1m +koWD7EzHojWSzynJqLitvMVQvu1tQNGY0UoGt6e4/910+viTPfST63HVeV0JzCg9jwtPHhRMSmHU +7CvOC10E1PnHWHW109YIlPQRuJsRuaRkv46hn8tEIdhaWZJ+V9JCVYhNNXlZTdCnBMjgkMmSb5Ki +J4YN/AAmLK+eK9rSJrutbpTltjmj4QZnQqpCY6JAHrHKEMW95ObHKWSMMIwQ5S/amgCoL4nh2VS3 +NycoRlBGlTOyu3kFanpQmDUOThnq1Jb11pax5oEyfNG5h5Nb3Z8fmzplFXpoqPi51jprzq62h1wq +qt8YHByO9E5yp/B3e/f2a6pqtKnlpYUs3e0PFdlWUuiR0S0ozT8VoNwpAQl7jDynh5ig11zWsw6I +3Vaw20l0g1SteiZcjr8KfIfhgHNINsG8xErs6xQNYCl2OA/I67Sn67TE1GRtS+Ws57L3SaktGJ27 +f1ZelrHO98DX96Be/FtNNIZAgvn/ExnkRV8gEDncapWlnh6qvaykay+GyZlSH1B3GtCvv1NKeKcE +Ea+yG+39N3d/I32NhPkTkA3O6kRby63UpAo2co1pSxEkXcEjRApvAJlxGYbhJqvBWwKfhsT6NFwn +uCl9pjln42X6aS4RA0A90g7PuF7gFabNDnQdS1TRLEbdBkJ53ryS6iu/VCwPaOp6Eg2/38sv7szr +ldarNd1ZxVuZVPs1fClIqZAZ+uJvk+mE4RzeBDfMlXcUjUiUrs4yE47uipGC7qMajLJfLKRO4jZF +a6gapVQ0/eKjD70KIz1QY2FNo8vZyF15/hmsSFurOSKHqc/DBOTXXHQfbpZbkdzuQHrB26MlVBYT +/dx+XbyoRY9GbGomEFd0QlKUKKq3n1nzBLEqVaV1P7cQ1yGg4KE4wrLDEZxbn0nBOJBk2XWxOo1g +BvyLWS4gMq3S7CeDou+dwoVSmbOgmWFOB0+aJD4dBlZOc+jWNTdDyomVStLo97SbTpq5TTn/TPH+ +LS+hbJ83GNbPWrCtHB4mQmGgnLmD0AEqtrCZlNy2GAeEnyNo/iY8TNeRc9spykGYU71UzC8y+/07 +NW+kxypagKHpFGq6JlXrEAY87Z4fnrFVJP47AeDieBokIu1WQHl868r+bfAUnZaX4W8DwTIyTqBg +t7L0xxC9p5rVadHRFQyRzA5whiu22MnWXtpzO4S/AKksaPLoJ8++67V36aD6+EvqBOehdPC3ropY +Wy/oxxBYmO/4Qt3/bfEpgzlXwG/wQBseSo+iA/IMf3a5eDGdeUJwdph3J7bO9c66W9tKuJq+XGGd +JRJ3bY9hogMut1xbCxwT7w1ARDOcWVQN+d7ayjCdnNVOmjq80fUPAAipLDs6fxi20m6F8Rd2hWRA +Ox30OggOeL7UGchv7+y9M//oFByqGaE/KMCubsuqWtNahSYGyEduxWUbHZkK5INBcpkv7szz6vVD +bTO1Lt44EAQy46V2cfEYd56hKbuMdkiOxjlagA4yQOTT3RRYTsWde+K8/TNEhhAh2a+CsEYa4BDd +bbtgul0GqaeNpmISqrjLzEM5B4qB2pzG34oSQwZ/Lb9pAc446+q+/ECBRLVUPBaGm7/zpXOHsPpr +He0+0GSpHGkqjxz/wQU/sqVHxEw9Jgdf7KTlOxBKHV1FLs4xRSO49oxiHTYOeHUA38auxPcBH/FS +pFEqK0DhUdmMqSD4oOIfPEVI2oJx227RwpU1xQSxMRlTNu3PLICa7pnbH25hXbwNehxqq2BBYDjJ +VZPCwICi1DfpEkNITQSqy0Igvj6Ls0m6za2LZKidwiSgfNDeMDaGjL2t8ClkSg1saD9sa8dK3zpS +20Fn/x4cu+JQotytgz49Euf7Ax9bG5LP9XeD51XnoHBPjhYSObm9rsBV3huZdR0pDTqqNiNXL346 +kYYB8P9KdJNVV8rADMFSZ4KkwsA9doWjO3XGCVNb09+ZVS9EhR3RbPCVLQZYKXKcaXRqAgSSsDT3 +Ui69u4Wo8UqdiHc9JKvo8YNhD6OiZfXc49oQUl6ycdNK1I1z3msap8znuvNXl+YDFaNLyYZ2N29V +vaTZNkLmQLFeyEDDVHZxZWVpI+AmrNRQykfBe13tgI86/zx7ilEJtz/gdd0fzoAVnXtfnqA4ghDt +Rn/p6I9tQpESimngqPocjXi4sqMOtuLhj3EhdPUQPN5yjp8hDpRxtADQ5gSNKPy4+E7HMlBjXn70 +s/1TBysxNjrIYpdOu8k2GjDMRU5tpAhlGF2gUCXihtsOnyhYHO7nj4q/nJaooCEuAa071jYkzkVe +6QhdxsOCsxk1YSMFw+ofiMSN1DzRnRBm4ASmZaTpebgCQbkFMDNYWiusVGXh9uJDYql9Ex/sLzHi +xwsZ0+j4YzLJGgYzSPe6r2qhdH/Gflqqs0vX219gVkNE+KTqMYH560d1b90/v0+HKq4oHTUaTkKm +Fpj55TS5H+Q+fCg3AOH6YHGrD5odVfhaWWUxg2+8x6bdHHTnYXlPzBn2/0DXFDAaM4tzxT4+e6pX +jOWLQBMjWUwh0rHefQAcqv74MoSALNh7sHYMUZmZBA7PX3hG8MEaMPpad31qWqMGxETqMim/rR7V +NmBMfTwqTTotWbqBKi3BUAMhcbLTdBO6dS205grIFohFPIWBMbTSBHO4M/Wj5hebWeyDQmTiZzRl +ds3JeMfq305S3zAegA4yzEhdbhG8XLfxVpadIAk7vkRD6pTle5mtP5KOfu8hUrgenF5sZiGl4/jL ++744G6huP3xisW/xVsyCBe5aYAK2uU7lXFJEjtTBTosK0/8uBzvEVPW8+N1iGht1kfKmvolT/z8t +MwlT5BPDCLiqptaUBmqPivZp761ez2xdpF20Ip7DjzV1AfdoJeQLXHhx56Q9pmsJVxo3wAReaOgs +oBirSo1apqf7qwFce9MabxWDHHy+5QV864e1EreCM4Bk0qSs+xF1+fPhro570znf5Z8wXx0m2a+a +RxcSua4Cn9TC1XhvOuuJtz4WMsoJ7EjkJw2Ez5P9XIFFJ4ENVJMBfoHXZbZv5C9rabLyYC/HUq+F +YJYn3/DUq2m1VcNECxhS22RfBDfntDREzrEVUUuXoQ== +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_debug.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_debug.sv new file mode 100644 index 0000000..cc861c7 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_debug.sv @@ -0,0 +1,78 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +QkvT7w/cYtNYTIAlLBflCiV5uhf8my7wbnvgCucUUFA8G9tgT35jJg+CvmHhNMzynOtSLK71EQnw +WROt08XOcvshNz97FSksPNdegauJriQEm2Q/5JCa380wa81sSXWLgk3n1UNZ+VMpw6aFI9M02Ndm +1qVnceoBqoLB2dRO+uibEOW25POWdOeACd4yj5Xy2vPOutcIczmmR4Lw4xgHS2++Q4Unt5oBexV9 +VcTap8NiFl6lsfMs+W9hK6FzxqBxduAhHsQReoFgEN5crFv6ulxBKzYpswoxNbmFKOtMx5FqtnyR +GFFiwbpXuxM47f3EjsL+FHmMIcEHApfSiunnww== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 3232) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_functions.svh b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_functions.svh new file mode 100644 index 0000000..354111d --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_functions.svh @@ -0,0 +1,306 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +udNdOMbYfgNU9JJgkKKW/1C+UJgjdsmoku2Ax7Yq200K9mrk1mRoQJC2vR4iqNqAV8eEiePsGRs5 +wtBEKm/Le7phTSAy+O4DDuTLC2SDw7h4Dv23ZnBA+edVE59aO89GjkWGohsELQawDVoUWPb27E0U +uVJcWp+KeGgLV83WPCcdGcbYGeZ5qJXMf0JTGE2dtfc3i6vB0phus0fXziqVTdOa8AS1tbsfLiV0 +8r85ApfyzXYfLydVfjFCRfq1Q9hbVDHOx/jHTCz+WoCpwh/REFySMg9KDwKWi9JcMcozGbBX5mDv +r2XChvw6VSXkA+dsmDyOHRuUXSjnfNycsoE14A== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 16224) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_group.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_group.sv new file mode 100644 index 0000000..b4da6b3 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_group.sv @@ -0,0 +1,220 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +kERFTyFGpY0tC5/eMRKJ9xUcl98cQAnropH/z1Aj0Ae58MCKzSRYTPeKHnsWhK35Kj2FiqBO5REi +9qtlczjQhUxj71Kr/YjuGQNOyxOV3rOdVoeN8MrmITHdTKRp6Pn5TaKq6K/RttuDE4GeZXB38KON +hy9MnqLJC5Vpi34YKZk/VoV8f4ZZWlPoqJYhP+Y13V87ZeuIEwsb5InjKDv40LSC3F8LCWV8ySpe +82UIsqlTI1zdrrb0saPrsg6ekdl5WZRk8GtNluAefiK/44+sZAKIPYzopOZu9AVJiE2fDD1IwuHP +omkQtdh9ZCpPWCM7dDNgh11ilffOJH5nt6NsZA== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 11328) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_if.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_if.sv new file mode 100644 index 0000000..d77ac47 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_if.sv @@ -0,0 +1,96 @@ +// Copyright 2021-2021 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +`include "dla_aux_activation_constants.svh" + +interface control_to_param_cache_if #( + dla_aux_activation_pkg::aux_special_params_t special_params, + dla_aux_activation_pkg::aux_data_pack_params_t data_pack_params +); + localparam PARAM_CACHE_DEPTH = special_params.PARAM_CACHE_DEPTH; + localparam PARAM_CACHE_ADDR_RAW = $clog2(PARAM_CACHE_DEPTH); // number of address bits for m20k + localparam PARAM_CACHE_ADDR = (PARAM_CACHE_ADDR_RAW < 2) ? 2 : PARAM_CACHE_ADDR_RAW; // minimum size of lfsr + typedef struct packed { + logic wr_valid; + logic [PARAM_CACHE_ADDR-1:0] wr_addr; + logic [data_pack_params.VECTOR_SIZE-1:0][PARAM_WIDTH-1:0] wr_data; + + logic rd_ready; + logic [PARAM_CACHE_ADDR-1:0] rd_addr; + } Type; + Type data; + modport sender (output data); + modport receiver (input data); +endinterface + +interface param_cache_to_control_if #( + dla_aux_activation_pkg::aux_special_params_t special_params, + dla_aux_activation_pkg::aux_data_pack_params_t data_pack_params +); + typedef struct packed { + logic wr_ready; + + logic rd_valid; + logic [data_pack_params.VECTOR_SIZE-1:0][PARAM_WIDTH-1:0] rd_data; + } Type; + Type data; + modport sender (output data); + modport receiver (input data); +endinterface + +// Port structure from config to control +interface activation_config_to_control_if #( + dla_aux_activation_pkg::aux_special_params_t special_params, + dla_interface_pkg::aux_data_pack_params_t data_pack_params, + int DIM1 = 1, + int DIM2 = 1 +); + typedef struct packed { +// ------------------------------ START EDITING ------------------------------ + logic [data_pack_params.VECTOR_SIZE-1:0][PARAM_WIDTH-1:0] param; + logic param_valid; + + logic cmd_valid; + logic [$clog2(special_params.MAX_TILE_CHANNELS +1)-1:0] tile_channels; + logic [$clog2(special_params.MAX_TILE_HEIGHT +1)-1:0] tile_height; + logic [$clog2(special_params.MAX_TILE_WIDTH +1)-1:0] tile_width; + logic [OPERAND_WIDTH-1:0] operand; +// ------------------------------ END EDITING ------------------------------ + } Type; + Type data [DIM1][DIM2]; + modport sender (output data); + modport receiver (input data); +endinterface + +// Port structure from control to lane(s) +interface activation_control_to_lane_if #( + dla_aux_activation_pkg::aux_special_params_t special_params, + dla_interface_pkg::aux_data_pack_params_t data_pack_params, + int DIM1 = 1, + int DIM2 = 1 +); + typedef struct packed { +// ------------------------------ START EDITING ------------------------------ + logic [data_pack_params.VECTOR_SIZE-1:0][PARAM_WIDTH-1:0] param; + logic bypass_clamp; // bypass the CLAMP block if present + logic bypass_round_clamp; // bypass the ROUND_CLAMP block if present + logic bypass_prelu; // bypass the PReLU block if present + logic bypass_continuous_activations; // bypass the ContinuousActivations block if present + logic lrelu_mode; // use the PReLU hardware block in LReLU mode (duplicate single parameter) + logic ready; // signal provided to the input buffer to stall +// ------------------------------ END EDITING ------------------------------ + } Type; + Type data [DIM1][DIM2]; + modport sender (output data); + modport receiver (input data); +endinterface diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_input_buffer.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_input_buffer.sv new file mode 100644 index 0000000..fd1da71 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_input_buffer.sv @@ -0,0 +1,138 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +FQSfW74uznr1tcQ1f4XPBVglcHZmvbzjw4A4WW01CZAWFk7lhsjsQzJK4bfXFE1TAGbmWpOedOU0 +Eoxo5O9FvtGLUUqYU6lN0MVYo9k3bAMiAK+AogU9aDAhrbiwAL5Y/8E2hFT6DKCOR/VnCUKPqwks +hTvm0nBRM9AxdY1EJphb8VUT3ybxDnP8fjlWbvnvyPtuVrhkvdhFSwz/ZP/01VRUInDSrLuvzBaE +T9BqiGH4vPwxIIJ96yL6UBgpe9QZjLaOBV3vgzzUaKxr6cDO0ib9R90wVrs9E+xAuIhFp2gGng2q +4bz0uiEOE4jqRd57jILkBezaWDauLPkIWLcmcw== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 6624) +`pragma protect data_block +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 +OQxigN2JxboqJ5tk +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_input_buffer_pipeline_stage.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_input_buffer_pipeline_stage.sv new file mode 100644 index 0000000..e8f68f9 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_input_buffer_pipeline_stage.sv @@ -0,0 +1,110 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +yoVpLsgmNou75M/Yq8shgNJv1wv7Sk5Uq97WahQKK0+sjuhMERficDvXgJTynwkosyPLv9ggNGZB +5qY4rfEiIwmfMIOnLI6OqpfxKYREnOerc2km43em25Q9FimRnHJvkA46DhAh0lI4/UukCbsgvvhH +t1CTn8hW53BnRGZOaKRlC3zCtV2q09oh6j++LVir8SwPrHMzIGDJXrcIic1VvpNUxYBkYAPnwx/S +t5Mi8ovAtOlzFHW2Mr7tFnZ/2YEufAe8oJhdP3XuPAbMHWs0/MFjQHqNnH5WJemF+9uMfxnmlnbU +ulQecsaY+gypWINyFwIquIn3daNw1J+q6IEzhg== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 5072) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_lane.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_lane.sv new file mode 100644 index 0000000..d388fa9 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_lane.sv @@ -0,0 +1,197 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +f0kLcJE4nILKMt5F/0sDdvy7bZHUR61f7Q1aMiXwM8N6zn8Z8W/mo5M31fJtPr+0E/h6enzPbqXw +rGMjUe9rnTHVLzoVDpABrYIz6wdWu1WEEfkMfBuUBesFua8RvzJ6fcVoAbxv0VnEhgZ6Jq8B6UMA +whJf0VBS8n0S+FnudRJynI1MrurrPio4eeC/ujV0sdnKlmC+PKdUCAmCZXdYHoZML5EJNMH45zQw +xRuUC30QnaYNo/8lMarBh7XDkCzDvdnwst3P0tBsQi6YYYldriWmOwg+QvjvuJhq8not9Ydw5Ymc +JtrF9b8lB4YxgwLvG2eZ4X5nqT1F1//Y1Hln3Q== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 10000) +`pragma protect data_block +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 +NHwOmWRJ8StQjmag3z07sStTMdcxL+EADA== +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_mult_dsp.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_mult_dsp.sv new file mode 100644 index 0000000..98f6a38 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_mult_dsp.sv @@ -0,0 +1,200 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +7kFZS4lwYXFqjsvncXd8P/hzNKXghOGvaPk1RL6vid/D2p0T8gl7/jmQjatGftsXp41FHCewZu5R +tmC1IX3E40p2bMElSZJSgOmq//F4VKB6aakAsS/gTZLyj849LY/EQxR1Fnud2K6QjCddbNdlEm8x +8aZ/aeIrQ5lH/fBJJYpbcI5ypC8RaI6c/Pz0Fbo9fzuANuZmNjtsZwTrTAYLMolMSeUDLsJkiDK+ +nEhpzpIQV057OPwZfX29zGJcKzPISxJzoGKMBL5H9GGWIXNP6qAALx+hBYJVq40Aw09OkszbgTCn +z6UXOAQqhHzVecNHS6Z/BPDyZrmaqNsDFQZVoQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 10192) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_param_cache.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_param_cache.sv new file mode 100644 index 0000000..e3233f5 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_param_cache.sv @@ -0,0 +1,137 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +5DKME4Q298qOWCjQd+8+L3qJG3s3t6woUjo+On4/whui045zctKoKp1pjRkPs8fQ8tGlvhanK91i +FkFJm9xeCztsGnOqb8Vb68mBZ0VM8gVadCRtHDUcN5TePvcUM6ymuyfrM81VG94BiLivqRVsMNYH +rwnOkEAg2VHD5IndAZkEiZktF0VTluJmJY9u35wWNTmfkhChFAIg4PccGo3iR30o7mh9LU53HG2b +T37iNlmrH0YPmbDh66oKqAnf3R8JcH6mU/d/jiKzC41NCb2y6xAWNqtZh+xXkhu8JkH8OJ78kKPZ +qgT8vTiH0/2IzjtRX1Z4ftC9YAZ6Xi8WkNetwQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 6560) +`pragma protect data_block +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 +xIu1k54= +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_pkg.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_pkg.sv new file mode 100644 index 0000000..d6f7e71 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_pkg.sv @@ -0,0 +1,104 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +iwue43/Y9dl2Fy4KCxEEbSvsI0nazrhO+m2i8FboAaWEnOU2+XiAj0I5pimtZrf6audZNUMSxQ0m +zdmT6dUaoX9H0a8nptnoDw+oOQkGgk9KJRwJtm3gsD2A5XgeW931mo9J61ZPvRoijFsmzltnLlfD +gHKTCjiruZuQGLsTQVjAuIlFSAz66J39V9TzfQbzlVvyp6fUIO/u+wCOi6t95jUklCxe0zY0Sl0r +YRwsLRMm7sk9PtxtQ7rrsZwQdUFfYmkOElZyH8TAFf5/TkIc+HuOO3mS48A07trWlkjaA+Cy7s/3 +7Ib10B84bie0Q9946xNKSua1+lIUD6oK4AqoKg== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 4704) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_prelu.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_prelu.sv new file mode 100644 index 0000000..61a8a3e --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_prelu.sv @@ -0,0 +1,99 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +2qVw0hIDTF2P87yBhfSldAvTfXvFuAHNv/UR1gbCPo+goFmlHb6wqi9Xg55MkxPkFfsyP3egh9B2 +wdgLCZS0DjjHcqXm7N/ukSfiQ4wHStr51Zd8UDE1W5u5qQAJRur+oNww167y6kC8mnoHhY3FFW2k +ZHZ2X3Y/RN0tCbJ+0UiqiGrCV5dHc6/MbZ+IX0YHIQInzAuqj/2PCjTSfBIMHw/PY8ilj1bdn83L +g07uzfGIkJF8PlGiU0teuBvYaefRQY+kQeJBtmeDxjGDMHr1BA1C1i3l9ilpMlDDKDDTnxvpqfjy +bP6Q/SL944HckgBJ9fNMtpG6SMIQKnHu+C8siQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 4432) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_round_clamp.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_round_clamp.sv new file mode 100644 index 0000000..d6ee51e --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_round_clamp.sv @@ -0,0 +1,232 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +gM0CP0SSECztJddlKnmRpEVtmgGmUyrIplFymz/E63oJXnRSD3frHiQbFHQAEab1ZIv/UGd5PgmG +uhlQBON1CvQhTcv+/9uPB4LyURqZh8ilT4nJJ6niTsxRTv7i6tX367BC8qbMpaH12l+7SqepE58d +SPL3rLuGVHegiG1qpTcPfE7aCs5v8zvbeCI3Fq3w5EcCN2f/Ie7QNjDwTVGSXB3HK0jCMkxHsKmB +UANmeZ/EaZH3Ezn2riq206DHaAHYYfXhnjSW0HAxplFnKVAtZa8+g6R9G7MDZDg4mQFtes+8UE91 +h4AXbb1qdUUkd+mskbflREmoZJ0FG1Ya2xPXPA== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 11984) +`pragma protect data_block +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 +l1Jrln9Pkus3oI7m3YY= +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_top.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_top.sv new file mode 100644 index 0000000..1df3972 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_activation_top.sv @@ -0,0 +1,373 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +NnxiLWm7+H7y9TSjezYGLnJkTtUwuBsi3IJ8+PDM2qZv9H+kbPdnpPNjEFK2nB+NPl6kVLl5MqsZ +Y04oJ1uJUPfC9ZTDATxJWi+6HGK/k2919LVi6HJ7GLhJ0iEEbHPTnGuyJfFzZwxBJo1ECxDf6a8R +qigo64S3gQJLSaJjWjAfVo9xEfpLCqr1pInro3X7+eDP6ZVpmSDSiqDNN79fBapobGup/houl+ky +3Pdh3I+qCumvOIEFb1aINg1NF5eaIv53JTe3LVmBHvnUX8B2J8jbY9aR48trdWNE+XjRBMRutrcl +B3pceJ7uz0eUZ+6FKna7rOuvtLk8aAZSpcX1Jw== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 20048) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_config_decoder.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_config_decoder.sv new file mode 100644 index 0000000..76170c3 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_config_decoder.sv @@ -0,0 +1,124 @@ +// Copyright 2020-2023 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +/* + * Module `dla_aux_depthwise_config_decoder` + * + * Config decoder of the auxiliary block. + * + * WARNING! ONLY EDIT THE PARTS MARKED IN BETWEEN + * "START EDITING" AND "END EDITING" + * + * See README.md of the Example Aux block for more details. + */ + +`undefineall +`resetall +`default_nettype none + +`include "dla_acl_parameter_assert.svh" + +module dla_aux_depthwise_config_decoder + import dla_aux_depthwise_pkg::*; +#( + parameter aux_depthwise_arch_params_t ARCH // Architecture parameters +) ( + input wire clk , // Clock + input wire i_resetn , // Active-low sync reset + // + input var logic [ARCH.CONFIG_STREAM_PARAMS.DATA_WIDTH-1:0] i_config , // Config stream input + input var logic i_config_valid , // Config stream input valid + output generic_response_t o_config , // Config stream response + input control_to_config_t i_control_to_config, // Control to config connection + depthwise_config_to_control_if.sender o_config_to_control, // Config to control connection + // + output debug_config_t o_debug // Debug output +); + +/* synthesis translate_off */ +`DLA_ACL_PARAMETER_ASSERT_MESSAGE(aux_data_pack_params_t'(o_config_to_control.data_pack_params) == ARCH.AUX_DATA_PACK_PARAMS, + "o_config_to_control if parameters don't match data pack params") +`DLA_ACL_PARAMETER_ASSERT_MESSAGE(aux_special_params_t'(o_config_to_control.special_params) == ARCH.AUX_SPECIAL_PARAMS, + "o_config_to_control if parameters don't match special params") +/* synthesis translate_on */ + + localparam NUM_LANES = ARCH.AUX_DATA_PACK_PARAMS.GROUP_SIZE * ARCH.AUX_DATA_PACK_PARAMS.GROUP_NUM; + localparam TOTAL_CONFIG_BITS = aux_depthwise_calc_total_config_bits(ARCH); + + localparam TOTAL_CONFIG_WORDS = (TOTAL_CONFIG_BITS + ARCH.CONFIG_STREAM_PARAMS.DATA_WIDTH - 1) / + ARCH.CONFIG_STREAM_PARAMS.DATA_WIDTH; + + logic [0:TOTAL_CONFIG_WORDS-1] [ARCH.CONFIG_STREAM_PARAMS.DATA_WIDTH-1:0] config_shift_reg; + logic [0:TOTAL_CONFIG_WORDS-1] valid_shift_reg ; + + logic configured; + + // + // Shift register to assemble multiple config beats into a full config word + // + always_ff @(posedge clk) begin : proc_shift_reg + if (i_config_valid && o_config.ready) begin + // shift config on successful handshake + config_shift_reg[0] <= i_config; + // shifting continues until the valid pipe is filled with ones + valid_shift_reg [0] <= 1'b1; + for (int i = 1; i < TOTAL_CONFIG_WORDS; i++) begin + config_shift_reg[i] <= config_shift_reg[i-1]; + valid_shift_reg [i] <= valid_shift_reg [i-1]; + end + end + // break back-pressure when control block signals us with a done pulse + if (i_control_to_config.done) begin + valid_shift_reg <= '0; + end + if (~i_resetn) begin + valid_shift_reg <= '0; + end + end : proc_shift_reg + + // + // Backpressure generator + // + always_ff @(posedge clk) begin : proc_response_gen + // backpressure starts if the valid pipeline is filled with ones + o_config.ready <= ~valid_shift_reg[TOTAL_CONFIG_WORDS-1]; + // extra checks on successful handshake + if (i_config_valid && o_config.ready) begin + if (TOTAL_CONFIG_WORDS > 1) begin + // if multi-beat config and current cycle is active check the previous valid shift reg value + o_config.ready <= ~valid_shift_reg[TOTAL_CONFIG_WORDS-2]; + end else begin + // else start back-pressuring immediately + o_config.ready <= 1'b0; + end + end + // stop backpressure when control sub-module signals us with a done pulse + if (i_control_to_config.done) begin + o_config.ready <= 1'b1; + end + if (~i_resetn) begin + o_config.ready <= 1'b0; + end + end : proc_response_gen + + // + // Resister full config word + // + assign configured = valid_shift_reg[TOTAL_CONFIG_WORDS-1]; + always_ff @(posedge clk) begin : proc_to_config + // concatenate 'configured' flag with the full config word and assign to the packed config + // structure that drives the control sub-module + o_config_to_control.data[0][0] <= {configured, TOTAL_CONFIG_BITS'({config_shift_reg})}; + end + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_control.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_control.sv new file mode 100644 index 0000000..9c5ae69 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_control.sv @@ -0,0 +1,484 @@ +// Copyright 2020-2023 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +/* + * Module `dla_aux_depthwise_control` + * + * Control of the core functionality of the auxiliary block. + * + * WARNING! ONLY EDIT THE PARTS MARKED IN BETWEEN + * "START EDITING" AND "END EDITING" + * + * See README.md of the Example Aux block for more details. + */ + +`undefineall +`resetall +`default_nettype none + +`include "dla_acl_parameter_assert.svh" + +module dla_aux_depthwise_control + import dla_aux_depthwise_pkg::*; +#( + parameter aux_depthwise_arch_params_t ARCH // Architecture parameters +) ( + input wire clk , // Clock + input wire i_resetn , // active low reset + // + depthwise_config_to_control_if.receiver i_config_to_control, // Config to control connection + output control_to_config_t o_control_to_config, // Control to config connection + depthwise_control_to_lane_if.sender o_control_to_lane , // Control to lane connection + input lane_to_control_t i_lane_to_control , // Lane to control connection + // + output debug_control_t o_debug // Debug output +); + +/* synthesis translate_off */ +`DLA_ACL_PARAMETER_ASSERT_MESSAGE(aux_data_pack_params_t'(i_config_to_control.data_pack_params) == ARCH.AUX_DATA_PACK_PARAMS, + "i_config_to_control if parameters don't match data pack params") +`DLA_ACL_PARAMETER_ASSERT_MESSAGE(aux_special_params_t'(i_config_to_control.special_params) == ARCH.AUX_SPECIAL_PARAMS, + "i_config_to_control if parameters don't match special params") +`DLA_ACL_PARAMETER_ASSERT_MESSAGE(aux_data_pack_params_t'(o_control_to_lane.data_pack_params) == ARCH.AUX_DATA_PACK_PARAMS, + "o_control_to_lane if parameters don't match data pack params") +`DLA_ACL_PARAMETER_ASSERT_MESSAGE(aux_special_params_t'(o_control_to_lane.special_params) == ARCH.AUX_SPECIAL_PARAMS, + "o_control_to_lane if parameters don't match special params") +/* synthesis translate_on */ + +// +// ------------------------------ START EDITING ------------------------------ +// + // Shorthand versions of parameters + localparam NATIVE_VECTOR_SIZE = ARCH.AUX_DATA_PACK_PARAMS.NATIVE_VECTOR_SIZE ; + localparam VECTOR_SIZE = ARCH.AUX_DATA_PACK_PARAMS.VECTOR_SIZE ; + localparam MAX_WINDOW_HEIGHT = ARCH.AUX_SPECIAL_PARAMS.MAX_WINDOW_HEIGHT ; + localparam MAX_WINDOW_WIDTH = ARCH.AUX_SPECIAL_PARAMS.MAX_WINDOW_WIDTH ; + localparam MAX_STRIDE_HORIZONTAL = ARCH.AUX_SPECIAL_PARAMS.MAX_STRIDE_HORIZONTAL; + localparam MAX_STRIDE_VERTICAL = ARCH.AUX_SPECIAL_PARAMS.MAX_STRIDE_VERTICAL ; + localparam MAX_DILATION_VERTICAL = ARCH.AUX_SPECIAL_PARAMS.MAX_DILATION_VERTICAL ; + localparam MAX_DILATION_HORIZONTAL = ARCH.AUX_SPECIAL_PARAMS.MAX_DILATION_HORIZONTAL ; + localparam VERTICAL_LINES = MAX_WINDOW_HEIGHT + ((MAX_WINDOW_HEIGHT-1) * (MAX_DILATION_VERTICAL-1)); + localparam WINDOW_BITS_VERTICAL = $clog2(MAX_WINDOW_HEIGHT + 1); + localparam WINDOW_BITS_HORIZONTAL = $clog2(MAX_WINDOW_WIDTH + 1); + localparam DILATION_BITS_VERTICAL = $clog2(MAX_DILATION_VERTICAL + 1); + localparam DILATION_BITS_HORIZONTAL = $clog2(MAX_DILATION_HORIZONTAL + 1); + localparam VECTOR_RATIO = NATIVE_VECTOR_SIZE / VECTOR_SIZE; + localparam TILE_COUNT = ARCH.AUX_DATA_PACK_PARAMS.GROUP_SIZE * + ARCH.AUX_DATA_PACK_PARAMS.GROUP_NUM; + + + // input valid counters + logic [$clog2( VECTOR_RATIO + 1 )-1:0] count_in_vector; + logic [$clog2(ARCH.AUX_SPECIAL_PARAMS.MAX_TILE_WIDTH + 1 )-1:0] count_in_width ; + logic [$clog2(ARCH.AUX_SPECIAL_PARAMS.MAX_TILE_HEIGHT + 1 )-1:0] count_in_height; + logic [$clog2(ARCH.AUX_SPECIAL_PARAMS.MAX_TILE_CHANNELS + NATIVE_VECTOR_SIZE)-1:0] count_in_channels ; + + // output valid counters + logic [$clog2( VECTOR_RATIO + 1 )-1:0] count_out_vector; + logic [$clog2(ARCH.AUX_SPECIAL_PARAMS.MAX_TILE_WIDTH + 1 )-1:0] count_out_width ; + logic [$clog2(ARCH.AUX_SPECIAL_PARAMS.MAX_TILE_HEIGHT + 1 )-1:0] count_out_height; + logic [$clog2(ARCH.AUX_SPECIAL_PARAMS.MAX_TILE_CHANNELS + NATIVE_VECTOR_SIZE)-1:0] count_out_channels ; + + // Register the computation of the effective filter sizes to be used lane_to_control_t + logic [WINDOW_BITS_VERTICAL-1:0] kernel_vert_minus_one; + logic [WINDOW_BITS_HORIZONTAL-1:0] kernel_horiz_minus_one; + + logic [DILATION_BITS_VERTICAL-1:0] dilation_vert_minus_one; + logic [DILATION_BITS_HORIZONTAL-1:0] dilation_horiz_minus_one; + + logic [WINDOW_BITS_VERTICAL+DILATION_BITS_VERTICAL-1:0] kernel_x_dilation_vert; + logic [WINDOW_BITS_HORIZONTAL+DILATION_BITS_HORIZONTAL-1:0] kernel_x_dilation_horiz; + + logic [WINDOW_BITS_VERTICAL+DILATION_BITS_VERTICAL:0] eff_kernel_vert; + logic [WINDOW_BITS_HORIZONTAL+DILATION_BITS_HORIZONTAL:0] eff_kernel_horiz; + + always_ff @(posedge clk) begin + if (~i_resetn) begin + kernel_vert_minus_one <= '{default:'0}; + kernel_horiz_minus_one <= '{default:'0}; + dilation_vert_minus_one <= '{default:'0}; + dilation_horiz_minus_one <= '{default:'0}; + kernel_x_dilation_vert <= '{default:'0}; + kernel_x_dilation_horiz <= '{default:'0}; + eff_kernel_vert <= '{default:'0}; + eff_kernel_horiz <= '{default:'0}; + end else begin + kernel_vert_minus_one <= (i_config_to_control.data[0][0].window_height - 1); + kernel_horiz_minus_one <= (i_config_to_control.data[0][0].window_width - 1); + dilation_vert_minus_one <= (i_config_to_control.data[0][0].dilation_vertical - 1); + dilation_horiz_minus_one <= (i_config_to_control.data[0][0].dilation_horizontal - 1); + kernel_x_dilation_vert <= kernel_vert_minus_one * dilation_vert_minus_one; + kernel_x_dilation_horiz <= kernel_horiz_minus_one * dilation_horiz_minus_one; + eff_kernel_vert <= i_config_to_control.data[0][0].window_height + kernel_x_dilation_vert; + eff_kernel_horiz <= i_config_to_control.data[0][0].window_width + kernel_x_dilation_horiz; + end + end + // + // Input valid counter comprises cascaded counters of vector, width, height and channels. + // + // The input backpressure signal is also generated in this process. + // + logic input_group_done; + logic feature_ready; + logic feature_almost_ready; + logic configured_delayed; + assign o_control_to_lane.data[0][0].ready = feature_ready; + always_ff @(posedge clk) begin : proc_input_counters + // Nested counters for channels, line and column, which operate only when the core's input is valid + configured_delayed <= i_config_to_control.data[0][0].configured; + input_group_done <= 0; + feature_almost_ready <= 0; + if (i_config_to_control.data[0][0].configured & ~configured_delayed) + o_control_to_lane.data[0][0].configured_starting <= ~o_control_to_lane.data[0][0].configured_starting; + if (o_control_to_config.done) + o_control_to_lane.data[0][0].configured_ending <= ~o_control_to_lane.data[0][0].configured_ending; + if (i_lane_to_control.core_input_valid) begin + // shallow channels counter + count_in_vector <= count_in_vector + 1'b1; + if (count_in_vector >= VECTOR_RATIO-1) begin + count_in_vector <= '0; + // column counter + count_in_width <= count_in_width + 1'b1; + // We want to stop reading features if filters are not ready and if we are close to getting enough features to produce output + // enough features euql to a number of rows = window_height and columns equal window_width + if ((count_in_height >= kernel_vert_minus_one) && (count_in_width >= i_config_to_control.data[0][0].window_width-2)) begin + feature_almost_ready <= 1; + end + if (count_in_width >= i_config_to_control.data[0][0].tile_width-1) begin + count_in_width <= '0; + // line counter + count_in_height <= count_in_height + 1'b1; + if (count_in_height >= i_config_to_control.data[0][0].tile_height-1) begin + count_in_height <= '0; + // channels counter + input_group_done <= 1; + count_in_channels <= $bits(count_in_channels)'(count_in_channels + NATIVE_VECTOR_SIZE); + if (count_in_channels >= i_config_to_control.data[0][0].tile_channels - NATIVE_VECTOR_SIZE) begin + count_in_channels <= '0; + input_group_done <= 1; + // input tensor is finished, backpressure the input pipeline + //o_control_to_lane.data[0][0].ready <= 1'b0; + end + end + end + end + end + // + begin + logic configured_reg; + logic filter_ready_reg; + // register the current value of the 'configured' signal + configured_reg <= i_config_to_control.data[0][0].configured; + filter_ready_reg <= i_lane_to_control.depthwise_filter_ready; + // wait for a rising edge of the 'configured' signal to disable input pipeline backpressure + // CHECKME: why the first and? + end + // reset counters if in reset or not configured + if (~i_resetn || ~i_config_to_control.data[0][0].configured) begin + count_in_vector <= '0; + count_in_width <= '0; + count_in_height <= '0; + count_in_channels <= '0; + input_group_done <= 1'b0; + feature_almost_ready <= 0; + configured_delayed <= '0; + end + if (~i_resetn) begin + o_control_to_lane.data[0][0].configured_starting <= 0; + o_control_to_lane.data[0][0].configured_ending <= 0; + end + end : proc_input_counters + // + // state machine to handle when features and filters should be ready to be received + // right now, we receive filters first then features, then we process + // + typedef enum logic [2:0] { + IDLE = 3'b000, + FILTER_FEATURE = 3'b001, + FILTER = 3'b010, + FEATURE = 3'b011, + PROCESSING = 3'b100 + } state_t; + state_t state, state_next; + always_ff @(posedge clk) begin + if (~i_resetn) begin + state <= IDLE; + end else begin + state <= state_next; + end + end + always_comb begin + state_next = state; + feature_ready = 0; + case(state) + IDLE: begin + feature_ready = 0; + if (i_config_to_control.data[0][0].configured) begin + state_next = FILTER_FEATURE; + feature_ready = 1; + end + end + FILTER_FEATURE: begin + feature_ready = 1; + if (feature_almost_ready) begin + feature_ready = 0; + state_next = FILTER; + end + if (i_lane_to_control.depthwise_filter_ready) + state_next = FEATURE; + end + FILTER: begin + if (i_lane_to_control.depthwise_filter_ready) + state_next = FEATURE; + end + FEATURE: begin + feature_ready = 1; + if (input_group_done) begin + state_next = PROCESSING; + feature_ready = 0; + end + else if (o_control_to_lane.data[0][0].done & i_config_to_control.data[0][0].configured) begin + state_next = FILTER; + feature_ready = 0; + end else if (o_control_to_lane.data[0][0].done & ~i_config_to_control.data[0][0].configured) begin + state_next = IDLE; + feature_ready = 0; + end + end + PROCESSING: begin + if (o_control_to_config.done) begin + state_next = IDLE; + feature_ready = 0; + end + else if (o_control_to_lane.data[0][0].done & i_config_to_control.data[0][0].configured) + state_next = FILTER_FEATURE; + else if (o_control_to_lane.data[0][0].done & ~i_config_to_control.data[0][0].configured) + state_next = IDLE; + end + default: state_next = IDLE; // Default state + endcase + end + // Pass dilation from config to lane + assign o_control_to_lane.data[0][0].dilation_vertical = i_config_to_control.data[0][0].dilation_vertical; + assign o_control_to_lane.data[0][0].dilation_horizontal = i_config_to_control.data[0][0].dilation_horizontal; + // + // Line-buffers inside the core are implemented as FIFOs. FIFO synchronization and handover + // between consequent tensors are achieved by the following steps: + // * Line buffers are filled with tensor-width amount of data at the beginning of each tensor. + // * The fill level is kept constant throughout the tensor. + // * At the end of each tensor all FIFOs are drained to prepare them for the next tensor. + // + always_ff @(posedge clk) begin : proc_line_buff_control + o_control_to_lane.data[0][0].line_buff_wait_fill <= count_in_height == 0; + o_control_to_lane.data[0][0].line_buff_flush <= count_in_height == i_config_to_control.data[0][0].tile_height-1; + // Flush the FIFO fill level when window height is configured to be 1 + if (i_config_to_control.data[0][0].window_height == 1 && i_config_to_control.data[0][0].configured) begin + o_control_to_lane.data[0][0].line_buff_wait_fill <= 1'b0; + o_control_to_lane.data[0][0].line_buff_flush <= 1'b1; + end + if (~i_resetn) begin + o_control_to_lane.data[0][0].line_buff_wait_fill <= 1'b0; + o_control_to_lane.data[0][0].line_buff_flush <= 1'b0; + end + end : proc_line_buff_control + + // + // Padding generator control consists of multiple enable flags. Each flag enables a set/reset + // mode of a register or act like select bits of a multiplexer. + // + // If max window size is larger than the configured window size, then the generator is used to + // load the identity element of the operation into the out of bound registers. + // + always_ff @(posedge clk) begin : proc_pad_control + o_control_to_lane.data[0][0].window_height <= i_config_to_control.data[0][0].window_height; + o_control_to_lane.data[0][0].window_width <= i_config_to_control.data[0][0].window_width; + // Vertical padding control + for (int i = 0; i < TILE_COUNT; i++) begin : proc_pad_control_vert + for (int j = 0; j < VERTICAL_LINES; j++) begin + // For the height of the active window, determine if, when and which padding mode is enabled + // per-tile and per-line + // ((MAX_WINDOW_HEIGHT-1) * (MAX_DILATION_VERTICAL-1)) + if (j < eff_kernel_vert) begin + o_control_to_lane.data[0][0].en_pad_zero_vert[i][j] <= ( + count_in_height < j + i_config_to_control.data[0][0].tile_vertical_start[i] || + count_in_height > j + i_config_to_control.data[0][0].tile_vertical_end [i]) && + i_config_to_control.data[0][0].padding_mode == 2'b00; + // + // TODO: Implement constant and reflection boundary conditions + // + o_control_to_lane.data[0][0].en_pad_nan_vert[i][j] <= ( + count_in_height < j + i_config_to_control.data[0][0].tile_vertical_start[i] || + count_in_height > j + i_config_to_control.data[0][0].tile_vertical_end [i]) && + i_config_to_control.data[0][0].padding_ignore; + end else begin + // For the lines outside the active window, pad everything to NaN, which is defined to be + // the identity element + o_control_to_lane.data[0][0].en_pad_nan_vert[i][j] <= 1'b1; + end + end + end : proc_pad_control_vert + // Horizontal padding control + for (int i = 0; i < TILE_COUNT; i++) begin : proc_pad_control_horiz + for (int j = 0; j < MAX_WINDOW_WIDTH; j++) begin + // For the width of the active window, determine if, when and which padding mode is enabled + // per-tile and per-line + if (j < i_config_to_control.data[0][0].window_width) begin + o_control_to_lane.data[0][0].en_pad_zero_horiz[i][j] <= ( + count_in_width < j + i_config_to_control.data[0][0].tile_horizontal_start[i] || + count_in_width > j + i_config_to_control.data[0][0].tile_horizontal_end [i]) && + i_config_to_control.data[0][0].padding_mode == 2'b00; + // + // TODO: Implement constant and reflection boundary conditions + // + o_control_to_lane.data[0][0].en_pad_nan_horiz[i][j] <= ( + count_in_width < j + i_config_to_control.data[0][0].tile_horizontal_start[i] || + count_in_width > j + i_config_to_control.data[0][0].tile_horizontal_end [i]) && + i_config_to_control.data[0][0].padding_ignore; + end else begin + // For the columns outside the active window pad everything to NaN, which is defined to be the + // identity element + o_control_to_lane.data[0][0].en_pad_nan_horiz[i][j] <= 1'b1; + end + end + end : proc_pad_control_horiz + // These flags mark the area of padding + o_control_to_lane.data[0][0].is_padding_zone_vert <= i_config_to_control.data[0][0].window_height > 1 && + count_in_height < (eff_kernel_vert-1); + o_control_to_lane.data[0][0].is_padding_zone_horiz <= i_config_to_control.data[0][0].window_width > 1 && + count_in_width < (eff_kernel_horiz-1); + if (~i_resetn) begin + o_control_to_lane.data[0][0].is_padding_zone_vert <= 1'b1; + o_control_to_lane.data[0][0].is_padding_zone_horiz <= 1'b1; + o_control_to_lane.data[0][0].window_height <= MAX_WINDOW_HEIGHT; + o_control_to_lane.data[0][0].window_width <= MAX_WINDOW_WIDTH; + end + end : proc_pad_control + + // + // Stride counters and stride valid signal generator. + // + // Other input counters are used in conjunction + // + always_ff @(posedge clk) begin : proc_stride + // stride counters + logic [$clog2(MAX_STRIDE_VERTICAL +1):0] count_stride_vert ; + logic [$clog2(MAX_STRIDE_HORIZONTAL+1):0] count_stride_horiz; + // Count only when input is valid and shallow channels counter is about to overflow (which means + // we are moving on to the next face coordinates) + if (i_lane_to_control.core_input_valid) begin + if (count_in_vector >= VECTOR_RATIO-1) begin + // By default, increment the horizontal stride counter, as long as the width-counter has + // counted minimum window-with number of elements (so core has a full window to operate on). + if (count_in_width >= kernel_horiz_minus_one) begin + count_stride_horiz <= count_stride_horiz + 1'b1; + end + // Reset horizontal stride counter when it overflows + if (count_stride_horiz >= i_config_to_control.data[0][0].stride_horizontal - 1) begin + count_stride_horiz <= '0; + end + // Vertical stride counter is manipulated only when the input width-counter is about to + // overflow + if (count_in_width >= i_config_to_control.data[0][0].tile_width-1) begin + // Reset the horizontal counter + count_stride_horiz <= '0; + // By default, increment the vertical stride counter, as long as the height-counter has + // counted minimum window-height number of elements (so core has a full window to operate + // on). + if (count_in_height >= kernel_vert_minus_one) begin + count_stride_vert <= count_stride_vert + 1'b1; + end + // Reset vertical stride counter when it overflows or when input height-counter is about + // to overflow + if ( + count_stride_vert >= i_config_to_control.data[0][0].stride_vertical - 1 || + count_in_height >= i_config_to_control.data[0][0].tile_height - 1 + ) begin + count_stride_vert <= '0; + end + end + end + end + // Stride counters must be reset when window height is configured to 1 + if ( + i_config_to_control.data[0][0].window_height == 1 && i_config_to_control.data[0][0].configured && + count_stride_horiz == '1 && count_stride_vert == '1 + ) begin + count_stride_vert <= '0; + count_stride_horiz <= '0; + end + // During reset both counters are set to give one extra cycle to the counters + if (~i_resetn || ~i_config_to_control.data[0][0].configured) begin + count_stride_horiz <= '1; + count_stride_vert <= '1; + end + // + // Stride is valid when both horizontal and vertical counters are zero + // + o_control_to_lane.data[0][0].stride_valid <= count_stride_vert == '0 && count_stride_horiz == '0; + end : proc_stride + + // + // Output valid counter comprises cascaded counters of vector, width, height and channels. + // + // A 'done' pulse is sent to the config decoder when the last tensor element is processed. + // + always_ff @(posedge clk) begin : proc_output_counters + // clear the done signal by default + o_control_to_config.done <= 1'b0; + o_control_to_lane.data[0][0].done <= 1'b0; + // Nested counters for channels, line and column, which operate only when core has a valid result. + if (i_lane_to_control.core_output_valid) begin + // shallow channels counter + count_out_vector <= count_out_vector + 1'b1; + if (count_out_vector >= VECTOR_RATIO-1) begin + count_out_vector <= '0; + // column counter + count_out_width <= $bits(count_out_width)'(count_out_width + i_config_to_control.data[0][0].stride_horizontal); + if (count_out_width >= (i_config_to_control.data[0][0].tile_width - + i_config_to_control.data[0][0].window_width) - + kernel_x_dilation_horiz) begin + count_out_width <= '0; + // line counter + count_out_height <= $bits(count_out_height)'(count_out_height + i_config_to_control.data[0][0].stride_vertical); + //-i_config_to_control.data[0][0].stride_vertical + 1 + if (count_out_height >= i_config_to_control.data[0][0].tile_height - + i_config_to_control.data[0][0].window_height - + kernel_x_dilation_vert) begin + count_out_height <= '0; + // send a 1 clock cycle long 'done' every time channels counter increment + // to indicate a new set of filters + o_control_to_lane.data[0][0].done <= 1'b1; + // channels counter + count_out_channels <= $bits(count_out_channels)'(count_out_channels + NATIVE_VECTOR_SIZE); + if (count_out_channels >= i_config_to_control.data[0][0].tile_channels - NATIVE_VECTOR_SIZE) begin + count_out_channels <= '0; + // send a 1 clock cycle long 'done' pulse after all counters reset to 0 + o_control_to_config.done <= 1'b1; + end + end + end + end + end + // Reset counters if the module is in reset or not configured + if (~i_resetn || ~i_config_to_control.data[0][0].configured) begin + count_out_vector <= '0; + count_out_width <= '0; + count_out_height <= '0; + count_out_channels <= '0; + end + end : proc_output_counters +// +// ------------------------------ END EDITING ------------------------------ +// + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_core.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_core.sv new file mode 100644 index 0000000..08c743a --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_core.sv @@ -0,0 +1,563 @@ +// Copyright 2020-2023 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +/* + * Module `dla_aux_depthwise_core` + * + * Core functionality of the auxiliary block. + * + * WARNING! ONLY EDIT THE PARTS MARKED IN BETWEEN + * "START EDITING" AND "END EDITING" + * + * CHECKME:add a dedicated depthwise readme and point to the FD + * See README.md of the Example Aux block for more details. + */ + +`undefineall +`resetall +`default_nettype none + +`include "dla_acl_parameter_assert.svh" + +// ------------------------------ START EDITING ------------------------------ +// Change the module name to aux name: dla_aux_<name>_core +module dla_aux_depthwise_core + // Change the package name to aux name: dla_aux_<name>_pkg + import dla_aux_depthwise_pkg::*, dla_common_pkg::*; +// ------------------------------ END EDITING ------------------------------ +#( + parameter int ID, // Unique ID of the lane + parameter aux_depthwise_arch_params_t ARCH, // Architecture parameters + parameter vector_dot_arch_t AUX_DEPTHWISE_VECTOR_ARCH, + parameter vector_dot_arch_info_t DEPTHWISE_VECTOR_ARCH_INFO +) ( + input wire clk , // Clock + input wire i_resetn , // Active-low sync reset + // + input var logic + [ARCH.AUX_DATA_PACK_PARAMS.VECTOR_SIZE-1:0] + [ARCH.AUX_DATA_PACK_PARAMS.ELEMENT_BITS-1:0] i_data , // Data input stream port + input var logic i_data_valid , // Data input stream port valid + // + depthwise_control_to_lane_if.receiver i_control , // Control input port + // + output logic + [ARCH.AUX_DATA_PACK_PARAMS.VECTOR_SIZE-1:0] + [ARCH.AUX_DATA_PACK_PARAMS.ELEMENT_BITS-1:0] o_result , // Result output stream port + output logic o_result_valid, // Result output stream port valid + // + input wire [ARCH.AUX_DATA_PACK_PARAMS.VECTOR_SIZE-1:0] + [ARCH.AUX_SPECIAL_PARAMS.MAX_WINDOW_HEIGHT*ARCH.AUX_SPECIAL_PARAMS.MAX_WINDOW_WIDTH-1:0] + [ARCH.AUX_DATA_PACK_PARAMS.ELEMENT_BITS-1:0] i_filter, + + input wire [ARCH.AUX_DATA_PACK_PARAMS.VECTOR_SIZE-1:0] + [AUX_DEPTHWISE_VECTOR_ARCH.BIAS_WIDTH-1:0] i_bias, // fp32 bias + // + output logic o_depthwise_filter_ready, + // + input var logic i_config_filter_bias_valid, // Config (actual data) for cache + input var logic [31:0] i_config_filter_bias_data, + output var logic o_config_filter_bias_ready, + // + output debug_core_t o_debug // Debug output +); + +/* synthesis translate_off */ +`DLA_ACL_PARAMETER_ASSERT_MESSAGE(aux_data_pack_params_t'(i_control.data_pack_params) == ARCH.AUX_DATA_PACK_PARAMS, + "i_control if parameters don't match data pack params") +`DLA_ACL_PARAMETER_ASSERT_MESSAGE(aux_special_params_t'(i_control.special_params) == ARCH.AUX_SPECIAL_PARAMS, + "i_control if parameters don't match special params") +/* synthesis translate_on */ + +// +// ------------------------------ START EDITING ------------------------------ +// + localparam DATA_IS_FLOAT = 1'b1; + localparam DATA_IS_SIGNED = 1'b1; + + localparam MAX_WINDOW_HEIGHT = ARCH.AUX_SPECIAL_PARAMS.MAX_WINDOW_HEIGHT ; + localparam MAX_WINDOW_WIDTH = ARCH.AUX_SPECIAL_PARAMS.MAX_WINDOW_WIDTH ; + localparam WINDOW_BITS_VERTICAL = $clog2(MAX_WINDOW_HEIGHT + 1); + localparam WINDOW_BITS_HORIZONTAL = $clog2(MAX_WINDOW_WIDTH + 1); + localparam MAX_TILE_WIDTH = ARCH.AUX_SPECIAL_PARAMS.MAX_TILE_WIDTH ; + localparam PIPELINE_REG_NUM = ARCH.AUX_SPECIAL_PARAMS.PIPELINE_REG_NUM ; + localparam MAX_TREE_DEPTH_VERTICAL = ARCH.AUX_SPECIAL_PARAMS.MAX_WINDOW_HEIGHT == 1 ? 1 : + $clog2(ARCH.AUX_SPECIAL_PARAMS.MAX_WINDOW_HEIGHT); + localparam MAX_TREE_DEPTH_HORIZONTAL = ARCH.AUX_SPECIAL_PARAMS.MAX_WINDOW_WIDTH == 1 ? 1 : + $clog2(ARCH.AUX_SPECIAL_PARAMS.MAX_WINDOW_WIDTH ); + + localparam ELEMENT_BITS = ARCH.AUX_DATA_PACK_PARAMS.ELEMENT_BITS ; + localparam VECTOR_SIZE = ARCH.AUX_DATA_PACK_PARAMS.VECTOR_SIZE ; + localparam NATIVE_VECTOR_SIZE = ARCH.AUX_DATA_PACK_PARAMS.NATIVE_VECTOR_SIZE; + + localparam VECTOR_RATIO = NATIVE_VECTOR_SIZE / VECTOR_SIZE; + + + // Support Dilation + localparam MAX_DILATION_VERTICAL = ARCH.AUX_SPECIAL_PARAMS.MAX_DILATION_VERTICAL ; + localparam MAX_DILATION_HORIZONTAL = ARCH.AUX_SPECIAL_PARAMS.MAX_DILATION_HORIZONTAL ; + localparam DILATION_BITS_VERTICAL = $clog2(MAX_DILATION_VERTICAL + 1); + localparam DILATION_BITS_HORIZONTAL = $clog2(MAX_DILATION_HORIZONTAL + 1); + localparam VERTICAL_LINES = MAX_WINDOW_HEIGHT + ((MAX_WINDOW_HEIGHT-1) * (MAX_DILATION_VERTICAL-1)); + // + // Parameter checking + // + initial /* synthesis enable_verilog_initial_construct */ + begin + // check VECTOR_RATIO to be an integer + if ((VECTOR_SIZE * VECTOR_RATIO) != NATIVE_VECTOR_SIZE) begin + $fatal(1, {"Illegal parameterization (dla_aux_depthwise_core.sv), NATIVE_VECTOR_SIZE %0d is not", + "an integer multiple of VECTOR_SIZE %d"}, NATIVE_VECTOR_SIZE, VECTOR_SIZE); + end + end + + + // + // Definitions + // + typedef logic + [ARCH.AUX_DATA_PACK_PARAMS.VECTOR_SIZE-1:0] + [ARCH.AUX_DATA_PACK_PARAMS.ELEMENT_BITS-1:0] my_stream_lane_t; + + depthwise_control_to_lane_if #( + .special_params (ARCH.AUX_SPECIAL_PARAMS ), + .data_pack_params(ARCH.AUX_DATA_PACK_PARAMS), + .DIM2(PIPELINE_REG_NUM)) control_pipe_vert(); + + depthwise_control_to_lane_if #( + .special_params (ARCH.AUX_SPECIAL_PARAMS ), + .data_pack_params(ARCH.AUX_DATA_PACK_PARAMS), + .DIM2(1)) control_dilation_vert(); + + my_stream_lane_t data_inbuff; + logic data_inbuff_valid; + + logic line_buff_valid; + logic line_buff_stall; + + logic line_buffer_full [VERTICAL_LINES]; + logic line_buffer_empty [VERTICAL_LINES]; + + my_stream_lane_t data_line_buff [VERTICAL_LINES]; + logic data_line_buff_valid [VERTICAL_LINES]; + + my_stream_lane_t data_pipe_vert [PIPELINE_REG_NUM] [VERTICAL_LINES]; + logic data_pipe_vert_valid [PIPELINE_REG_NUM] [VERTICAL_LINES]; + + + logic [MAX_WINDOW_HEIGHT-1 : 0] [ELEMENT_BITS-1:0] data_dilated_vert [VECTOR_SIZE-1:0]; + logic data_dilated_vert_valid [MAX_WINDOW_HEIGHT]; + + + // Instantiate Shift register for feature data + logic [MAX_WINDOW_HEIGHT*MAX_WINDOW_WIDTH-1:0] [ELEMENT_BITS-1:0] data_buf [VECTOR_SIZE-1:0]; + logic [MAX_WINDOW_HEIGHT*MAX_WINDOW_WIDTH-1:0] [ELEMENT_BITS-1:0] data_buf_adjusted_kernel [VECTOR_SIZE-1:0]; + logic [MAX_WINDOW_HEIGHT*MAX_WINDOW_WIDTH-1:0] [ELEMENT_BITS-1:0] data_buf_delayed [VECTOR_SIZE-1:0]; + logic [MAX_WINDOW_HEIGHT*MAX_WINDOW_WIDTH-1:0] [ELEMENT_BITS-1:0] data_buf_shifted [VECTOR_SIZE-1:0]; + logic [VERTICAL_LINES-1 : 0] [ELEMENT_BITS-1:0] data_buf_new_repacked [VECTOR_SIZE-1:0]; + my_stream_lane_t data_buf_new [VERTICAL_LINES]; + logic [ARCH.AUX_DATA_PACK_PARAMS.VECTOR_SIZE-1:0] [31:0] fp32_result; + + // Signal for the ready filter from the cache, but it should only be valid when configured + logic filter_cache_ready; + + // Instantiate Shift register for filter data + logic [VECTOR_SIZE-1:0] [MAX_WINDOW_HEIGHT*MAX_WINDOW_WIDTH-1:0] [ELEMENT_BITS-1:0] filter_data_buf; + logic [VECTOR_SIZE-1:0] [AUX_DEPTHWISE_VECTOR_ARCH.BIAS_WIDTH-1:0] bias_data_buf; + logic filter_valid; //indicates we recievd all filters for the current batch of data + // + // Input Buffer + // + always_ff @(posedge clk) begin : proc_inbuff + data_inbuff <= i_data; + data_inbuff_valid <= i_data_valid; + if (~i_resetn) begin + data_inbuff_valid <= 1'b0; + end + end : proc_inbuff + + + // + // Line Buffers + // + // FIFOs should keep a certain fill level in order to act like line buffers + assign line_buff_valid = data_line_buff_valid[0] & ~i_control.data[0][0].line_buff_flush ; + assign line_buff_stall = ~data_line_buff_valid[0] | i_control.data[0][0].line_buff_wait_fill; + // Line 0 is the input data itself + assign data_line_buff[0] = data_inbuff; + assign data_line_buff_valid[0] = data_inbuff_valid; + // Line buffers implemented with FIFOs + for (genvar j = 1; j < VERTICAL_LINES; j++) begin : gen_line_buffer + dla_hld_fifo #( + .WIDTH (ELEMENT_BITS * VECTOR_SIZE ), // in words + .DEPTH (MAX_TILE_WIDTH * VECTOR_RATIO), // in bits + .SYNCHRONIZE_RESET(0 ), + .NEVER_OVERFLOWS (1 ), + .STYLE ("ms" ), + .RAM_BLOCK_TYPE ("M20K" ) + ) line_buffer_inst ( + .clock (clk ), + .resetn (i_resetn ), + // + .i_valid (line_buff_valid ), + .i_data (data_line_buff [j-1] ), // input is the output of the previous line + .o_stall (line_buffer_full [j ] ), + .o_almost_full ( ), + // + .o_valid ( ), + .o_data (data_line_buff [j ] ), + .i_stall (line_buff_stall ), + .o_almost_empty( ), + .o_empty (line_buffer_empty[j ] ), + // + .ecc_err_status( ) + ); + end + + + // + // Relaxation Pipeline Registers + // + always_ff @(posedge clk) begin : proc_pipeline_reg + foreach(data_pipe_vert[,k]) begin + // register output of all FIFOs + data_pipe_vert[0][k] <= data_line_buff[k]; + // override the valid signals with FIFO's output stall info + data_pipe_vert_valid[0][k] <= ~line_buff_stall; + end + control_pipe_vert.data[0][0] <= i_control.data[0][0]; + // + for (int i = 1; i < PIPELINE_REG_NUM; i++) begin + data_pipe_vert[i] <= data_pipe_vert[i-1]; + data_pipe_vert_valid[i] <= data_pipe_vert_valid[i-1]; + control_pipe_vert.data[0][i] <= control_pipe_vert.data[0][i-1]; + end + end + + + // Insert the new data from the line buffers and take padding into consideration + for(genvar j = 0; j < VERTICAL_LINES; j++) begin + assign data_buf_new[j] = control_pipe_vert.data[0][PIPELINE_REG_NUM-1].en_pad_zero_vert[ID][j] || + control_pipe_vert.data[0][PIPELINE_REG_NUM-1].en_pad_nan_vert[ID][j] || + control_pipe_vert.data[0][PIPELINE_REG_NUM-1].en_pad_zero_horiz[ID][0] || + control_pipe_vert.data[0][PIPELINE_REG_NUM-1].en_pad_nan_horiz[ID][0] ? '0 : data_pipe_vert[PIPELINE_REG_NUM-1][j]; + end + + // Repack new data coming from the line buffers + for (genvar i = 0; i < VECTOR_SIZE; i++) begin : gen_repack_vec + for (genvar j = 0; j < VERTICAL_LINES; j++) begin : gen_repack_window + assign data_buf_new_repacked[i][j] = data_buf_new[j][i]; + end + end + + // Intercept here to support dilation + logic [DILATION_BITS_HORIZONTAL-1:0] dilation_horizontal; + logic [DILATION_BITS_VERTICAL-1:0] dilation_vertical; + logic [WINDOW_BITS_VERTICAL+DILATION_BITS_VERTICAL-1:0] select_dilation_vert [MAX_WINDOW_HEIGHT]; + + assign dilation_horizontal = control_pipe_vert.data[0][PIPELINE_REG_NUM-1].dilation_horizontal; + assign dilation_vertical = control_pipe_vert.data[0][PIPELINE_REG_NUM-1].dilation_vertical; + + // Generate select signal logic + always_comb begin + for(int i=0; i<MAX_WINDOW_HEIGHT; i=i+1) begin + select_dilation_vert[i] = dilation_vertical * i; + end + end + + + // Select the vertical data for dilation purposes + // 1 cycle latency + always_ff @(posedge clk) begin : proc_data_vert_dilation + control_dilation_vert.data[0][0] <= control_pipe_vert.data[0][0]; + for (int v = 0; v < VECTOR_SIZE; v++) begin : gen_vector_vert_dilation + for (int j = 0; j <VERTICAL_LINES ; j++) begin : gen_elements_vert_dilation + for(int i=0; i<MAX_WINDOW_HEIGHT; i=i+1) begin + if (j == select_dilation_vert[i]) begin + data_dilated_vert[v][i] <= data_buf_new_repacked[v][j]; + data_dilated_vert_valid[i] <= data_pipe_vert_valid[PIPELINE_REG_NUM-1][j]; + end + end + end + end + for(int i=0; i<MAX_WINDOW_HEIGHT; i=i+1) begin + if (~i_resetn) begin + data_dilated_vert_valid[i] <= '0; + end + end + end + + // Declare output signals from shift registers + //logic [MAX_WINDOW_HEIGHT*MAX_WINDOW_WIDTH-1:0] [ELEMENT_BITS-1:0] data_buf [VECTOR_SIZE-1:0]; + logic [MAX_WINDOW_WIDTH*MAX_WINDOW_HEIGHT-1:0] [ARCH.AUX_DATA_PACK_PARAMS.ELEMENT_BITS-1:0] sr_data [VECTOR_SIZE-1:0] [MAX_DILATION_HORIZONTAL]; + + // Generate the select input signals + // This counter acts as a ring, in some cases the first valid data might not be placed + // in the first index, but it should be fine as long as we always increment by 1 and + // we iterate over all indices + logic [DILATION_BITS_HORIZONTAL-1:0] dilation_horiz_counter_in; + + always_ff @(posedge clk) begin + if (~i_resetn) begin + dilation_horiz_counter_in <= '{default:'0}; + end else if (data_dilated_vert_valid[0]) begin + // increment the counter + dilation_horiz_counter_in <= dilation_horiz_counter_in + 1; + if (dilation_horiz_counter_in >= dilation_horizontal-1) + dilation_horiz_counter_in <= 'b0; + end + end + + // Instantiate the shift registers + logic shift_load [MAX_DILATION_HORIZONTAL]; + for (genvar j = 0; j < MAX_DILATION_HORIZONTAL; j++) begin : gen_shift_registers + assign shift_load[j] = ((data_dilated_vert_valid[0] == 1'b1) & (dilation_horiz_counter_in == j)); + for (genvar v = 0; v < VECTOR_SIZE; v++) begin : gen_shift_registers_vec + dla_aux_depthwise_shift_register #( + .BIT_WIDTH(ARCH.AUX_DATA_PACK_PARAMS.ELEMENT_BITS), + .SEGMENTS(MAX_WINDOW_WIDTH), + .NUM_INPUTS(MAX_WINDOW_HEIGHT) + ) sr ( + .clk(clk), + .i_resetn(i_resetn), + .i_data(data_dilated_vert[v]), + .i_load_shift(shift_load[j]), + .i_shift_left(1'b1), + .o_data(sr_data[v][j]) + ); + end + end + + // Generate the select output signals + logic [DILATION_BITS_HORIZONTAL-1:0] dilation_horiz_counter_out_valid; + logic [DILATION_BITS_HORIZONTAL-1:0] dilation_horiz_counter_out_valid_delayed; + + always_ff @(posedge clk) begin + if (~i_resetn) begin + dilation_horiz_counter_out_valid <= '{default:'0}; + end else if (data_dilated_vert_valid[0]) begin + dilation_horiz_counter_out_valid <= dilation_horiz_counter_out_valid + 1; + if (dilation_horiz_counter_out_valid >= dilation_horizontal-1) + dilation_horiz_counter_out_valid <= '{default:'0}; + end + end + + // We delay that because we have a one cycle delay between having an input_valid and the data being + // loaded to the shift register + always_ff @(posedge clk) begin + if (~i_resetn) begin + dilation_horiz_counter_out_valid_delayed <= '{default:'0}; + end else begin + dilation_horiz_counter_out_valid_delayed <= dilation_horiz_counter_out_valid; + end + end + + // Receive output data from shift registers + always_comb begin + for(int v=0; v<VECTOR_SIZE; v++) begin + data_buf[v] = '{default:'0}; + for(int i=0; i<MAX_DILATION_HORIZONTAL; i=i+1) begin + if (dilation_horiz_counter_out_valid_delayed == i) begin + data_buf[v] = sr_data[v][i]; + end + end + end + end + + // Handle the case where window_width < MAX_WINDOW_WIDTH + for (genvar i = 0; i < VECTOR_SIZE; i++) begin : gen_adjust_k_size_vec + for (genvar j = 0; j < MAX_WINDOW_HEIGHT; j++) begin : gen_adjust_k_size_window_h + for (genvar k = 0; k < MAX_WINDOW_WIDTH; k++) begin : gen_adjust_k_size_window_w + assign data_buf_adjusted_kernel[i][j*MAX_WINDOW_HEIGHT + k] = j < i_control.data[0][0].window_height ? data_buf[i][j*MAX_WINDOW_HEIGHT + k] : '0; + end + end + end + + // Have a signal to indicate that the module is configured (or reconfigured) and ready to go + logic configured_and_ready; + + // Handle Filters and Biases from the config network + dla_aux_depthwise_filter_bias_cache #( + .MAX_WINDOW_HEIGHT(MAX_WINDOW_HEIGHT), + .MAX_WINDOW_WIDTH(MAX_WINDOW_WIDTH), + .ELEMENT_BITS(ELEMENT_BITS), + .CONFIG_BIT_WIDTH(32), // could parametrize + .VECTOR_SIZE(VECTOR_SIZE), + .WINDOW_BITS_VERTICAL(WINDOW_BITS_VERTICAL), + .WINDOW_BITS_HORIZONTAL(WINDOW_BITS_HORIZONTAL), + .BIAS_WIDTH(AUX_DEPTHWISE_VECTOR_ARCH.BIAS_WIDTH) + ) filter_bias_cache ( + .clk(clk), + .i_resetn(i_resetn), + .i_data_valid(i_config_filter_bias_valid), + .i_data(i_config_filter_bias_data), + .i_configured_and_ready(configured_and_ready), + .i_done(i_control.data[0][0].done), + .i_window_width(i_control.data[0][0].window_width), + .i_window_height(i_control.data[0][0].window_height), + .o_config_filter_bias_ready(filter_cache_ready), + .o_filter_valid(filter_valid), + .o_filter(filter_data_buf), + .o_bias(bias_data_buf) + ); + + assign configured_and_ready = i_control.data[0][0].configured_starting != i_control.data[0][0].configured_ending; + + // ready signal to config network is the local filter_bias_cache ready and the configured + assign o_config_filter_bias_ready = configured_and_ready & filter_cache_ready; + + assign o_depthwise_filter_ready = filter_valid; + + // Instantiate delay register for DSP chain matching + // C,D should be delayed + // A - * chain_out + // B - | | + // | + // C - * + chain_out_2 + // D - | + localparam GROUP_DELAY_SIZE = 2; // Mults/DSP for AGX7 and AGX5 devices, could be different for others + localparam DSP_DELAY = 4; // Will come from arch + for (genvar i = 0; i < VECTOR_SIZE; i++) begin : gen_delay_vec + for (genvar j = 0; j < MAX_WINDOW_HEIGHT*MAX_WINDOW_WIDTH; j = j + GROUP_DELAY_SIZE) begin : gen_delay_height_width + for (genvar k = 0; k < GROUP_DELAY_SIZE; k++) begin : gen_delay_group + if (j + k < MAX_WINDOW_HEIGHT*MAX_WINDOW_WIDTH) begin + dla_delay #( + .WIDTH (ELEMENT_BITS), + .DELAY ((j / GROUP_DELAY_SIZE) * DSP_DELAY), + .DEVICE (AUX_DEPTHWISE_VECTOR_ARCH.DEVICE) + ) delay ( + .clk (clk), + .i_data (data_buf_adjusted_kernel[i][j+k]), + .o_data (data_buf_delayed[i][j+k]) + ); + end + end + end + end + + + // Instantiate Multipliers + + // These definitions should come from arch + parameter DOT_OUTPUT_WIDTH = 32; + + + for (genvar i = 0; i < VECTOR_SIZE; i++) begin : gen_multiply_chain + dla_dot_dsp_pack1x1_mult_fp16 #( + .arch (AUX_DEPTHWISE_VECTOR_ARCH), + .DOT_OUTPUT_WIDTH (DOT_OUTPUT_WIDTH), + .ARCH (ARCH) + ) vector_engine ( + .clk (clk), + .i_feature (data_buf_delayed[i]), + .i_filter (filter_data_buf[i]), + .i_bias (bias_data_buf[i]), + .o_dot_result (fp32_result[i]) + ); + end + + //synthesis translate_off + always_ff @(posedge clk) begin + for (int i = 0; i < VECTOR_SIZE; i++) begin + for (int j = 0; j < MAX_WINDOW_HEIGHT*MAX_WINDOW_WIDTH; j++) begin + if (filter_data_buf[i][j] != i_filter[i][j]) begin + $display("filter_data_buf[%0d][%0d] = %0d and i_filter[%0d][%0d] = %0d", i, j, filter_data_buf[i][j], i, j, i_filter[i][j]); + end + end + end + end + + //synthesis translate_on + + // Instantiate valid generation control + // This input_valid indicates that the current input in hand (data_dilated_vert_valid[0]) + // that is coming alongside control_dilation_vert should produce an output + // For Example, if we have a 3x3 window, after you handle adding, the first element that should be associated + // with an output is the third column third row (having this element means we can produce an output) + logic input_valid, valid_delayed; + + assign input_valid = data_dilated_vert_valid[0] && control_dilation_vert.data[0][0].stride_valid && + ~control_dilation_vert.data[0][0].is_padding_zone_horiz && + ~control_dilation_vert.data[0][0].is_padding_zone_vert; + + // CHECKME: I'm really not sure about the one cycle delay at the beginning (1 + + // but it's consistent with different padding, stride and kernel sizes + // add 1 + DEPTHWISE_VECTOR_ARCH_INFO.DSP_DOT_LATENCY to core latency + dla_delay #( + .WIDTH (1), + .DELAY (1 + DEPTHWISE_VECTOR_ARCH_INFO.DSP_DOT_LATENCY), + .DEVICE (AUX_DEPTHWISE_VECTOR_ARCH.DEVICE) + ) delay ( + .clk (clk), + .i_data (input_valid), + .o_data (valid_delayed) + ); + + + // FP32 to Result type (FP16) conversion + localparam bit SUPPORT_SUBNORMAL = 0; + localparam int RESULT_MANTISSA_WIDTH = 10; + localparam int RESULT_EXPONENT_WIDTH = 5; + localparam int RESULT_EXPONENT_BIAS = 15; + localparam int RESULT_WIDTH = 1 + RESULT_EXPONENT_WIDTH + RESULT_MANTISSA_WIDTH; + logic dsp_accum_sign [VECTOR_SIZE-1:0]; + logic [FP32_EXPONENT_WIDTH-1:0] dsp_accum_exponent [VECTOR_SIZE-1:0]; + logic [FP32_MANTISSA_WIDTH-1:0] dsp_accum_mantissa [VECTOR_SIZE-1:0]; + + logic [RESULT_WIDTH-1:0] new_accum_dsp_output [VECTOR_SIZE-1:0]; + + for (genvar i = 0; i < VECTOR_SIZE; i++) begin : gen_convert_to_fp16 + // split the sign, exponent and mantissa of fp32_result into three variables + assign {dsp_accum_sign[i], dsp_accum_exponent[i], dsp_accum_mantissa[i]} = fp32_result[i]; + + // CHECKME: [mohamed] should we pipeline this FP32 to FP16 conversion (9-bit addition followed by a 3-to-1 mux)? + always_comb begin + automatic logic new_sign; + automatic logic [FP32_EXPONENT_WIDTH:0] new_exponent; + automatic logic [RESULT_MANTISSA_WIDTH-1:0] new_mantissa; + new_sign = dsp_accum_sign[i]; + new_exponent = {1'b0, dsp_accum_exponent[i]} + {1'b1, (FP32_EXPONENT_WIDTH)'(RESULT_EXPONENT_BIAS - FP32_EXPONENT_BIAS)}; + new_mantissa = dsp_accum_mantissa[i][$high(dsp_accum_mantissa[i]) -: RESULT_MANTISSA_WIDTH]; + + // if the result of the addition is zero or a negative number implies and underflow + if (new_exponent == 0 || new_exponent[FP32_EXPONENT_WIDTH]) begin + // underflow + if (SUPPORT_SUBNORMAL) begin + new_mantissa = {(|dsp_accum_exponent[i]), new_mantissa} >> (-signed'(new_exponent[RESULT_EXPONENT_WIDTH-1:0])); + end else begin + new_mantissa = {RESULT_MANTISSA_WIDTH{1'b0}}; + end + new_exponent = {RESULT_EXPONENT_WIDTH{1'b0}}; + end + else if (new_exponent == {RESULT_EXPONENT_WIDTH{1'b1}} || + (!new_exponent[FP32_EXPONENT_WIDTH] & |new_exponent[FP32_EXPONENT_WIDTH-1: RESULT_EXPONENT_WIDTH])) begin + // overflow + new_exponent = {{(RESULT_EXPONENT_WIDTH-1){1'b1}}, 1'b0}; + new_mantissa = {RESULT_MANTISSA_WIDTH{1'b1}}; + end + o_result[i] = {new_sign, new_exponent[RESULT_EXPONENT_WIDTH-1:0], new_mantissa}; + end + end + + // + // Final assignment + // + // CHECKME: this is not right, because we have to pause valid generation + // at the end of the line (window_width cycles) until we get the first window_width + // new elements into the data_buf + assign o_result_valid = valid_delayed; +// +// ------------------------------ END EDITING ------------------------------ +// + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_debug.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_debug.sv new file mode 100644 index 0000000..2a7d102 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_debug.sv @@ -0,0 +1,54 @@ +// Copyright 2020-2023 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + + +/* + * Module `dla_aux_depthwise_debug` + * + * Debug functionality of the auxiliary block. + * + * WARNING! ONLY EDIT THE PARTS MARKED IN BETWEEN + * "START EDITING" AND "END EDITING" + * + * See README.md of the Example Aux block for more details. + */ + +`undefineall +`resetall +`default_nettype none + +module dla_aux_depthwise_debug + import dla_aux_depthwise_pkg::*; +#( + parameter aux_depthwise_arch_params_t ARCH // Architecture parameters +) ( + input wire clk , // Clock + input wire i_resetn , // Active-low sync reset + // + input debug_config_t i_config , // Debug from config + input debug_group_t i_group , // Debug from group + // + input var logic [ARCH.DEBUG_AXI_PARAMS.ADDR_WIDTH-1:0] i_raddr , // Debug AXI read-address port + input var logic i_raddr_valid, // Debug AXI read-address port valid + output generic_response_t o_raddr , // Debug AXI read-address port response + input generic_response_t i_rdata , // Debug AXI read-data port response + output logic [ARCH.DEBUG_AXI_PARAMS.DATA_WIDTH-1:0] o_rdata , // Debug AXI read-data port + output logic o_rdata_valid // Debug AXI read-data port valid +); + +// ------------------------------ START EDITING ------------------------------ + // Limitation: Debug is to be implemented yet. + +// ------------------------------ END EDITING ------------------------------ + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_filter_bias_cache.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_filter_bias_cache.sv new file mode 100644 index 0000000..1994137 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_filter_bias_cache.sv @@ -0,0 +1,244 @@ +// Copyright 2020-2023 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + + +/* + * Module `dla_aux_depthwise_filter_bias_cache` + * + * Cache for filters and biases of the depthwise module. + * + * WARNING! DO NOT EDIT THIS FILE FOR FUTURE-COMPATIBILITY + */ + +`undefineall +`resetall +`default_nettype none + +module dla_aux_depthwise_filter_bias_cache +#( + parameter int MAX_WINDOW_HEIGHT, + parameter int MAX_WINDOW_WIDTH, + parameter int ELEMENT_BITS, + parameter int CONFIG_BIT_WIDTH, + parameter int VECTOR_SIZE, + parameter int WINDOW_BITS_VERTICAL, + parameter int WINDOW_BITS_HORIZONTAL, + parameter int BIAS_WIDTH +) ( + input wire clk, + input wire i_resetn, + input var logic i_data_valid, + input var logic [CONFIG_BIT_WIDTH-1:0] i_data, + input var logic i_configured_and_ready, + input var logic i_done, // indicates a chunk of data with c_vec is processed, so we restart + input var logic [WINDOW_BITS_HORIZONTAL-1:0] i_window_width, // captures actual layer window_width + input var logic [WINDOW_BITS_VERTICAL-1:0] i_window_height, // captures actual layer window_height + output var logic o_config_filter_bias_ready, // ready signal for config network + output var logic o_filter_valid, + output logic [VECTOR_SIZE-1:0][MAX_WINDOW_HEIGHT*MAX_WINDOW_WIDTH-1:0][ELEMENT_BITS-1:0] o_filter, + output logic [VECTOR_SIZE-1:0][BIAS_WIDTH-1:0] o_bias // fp32 bias +); + + localparam int NUM_COUNT2_BITS = $clog2(VECTOR_SIZE + 1); + logic [MAX_WINDOW_HEIGHT*MAX_WINDOW_WIDTH:0] [ELEMENT_BITS-1:0] Line; // one line shift register of K*K + 1 (for bias) + logic [VECTOR_SIZE-1:0][MAX_WINDOW_HEIGHT*MAX_WINDOW_WIDTH:0][ELEMENT_BITS-1:0] filters_biases; + logic [WINDOW_BITS_VERTICAL + WINDOW_BITS_HORIZONTAL - 1 : 0] window_height_x_width; + logic [VECTOR_SIZE-1:0][15:0] bias; + + logic [WINDOW_BITS_VERTICAL + WINDOW_BITS_HORIZONTAL - 1 : 0] count; + logic [NUM_COUNT2_BITS-1:0] count2; + logic [WINDOW_BITS_VERTICAL-1:0] counter_height; + logic [WINDOW_BITS_HORIZONTAL-1:0] counter_width; + + logic last_in; + logic ready_local; + logic bias_read, filter_read; + logic filter_bias_valid, filter_valid_bias_delayed, filter_valid_filter_delayed; + logic should_shift; + + assign o_filter_valid = filter_valid_filter_delayed; + assign last_in = ((count2 == VECTOR_SIZE-1) && (count == ((window_height_x_width+1) >> 1)) && + (count != '0)); + assign o_config_filter_bias_ready = ready_local & ~last_in; + assign window_height_x_width = i_window_width * i_window_height; + + // state machine to control reading and extracting filters and biases + // 5 states, idle, reading (from config network), bias (extracting bias), filter (extracting filter), ready + // + logic read_bias, read_filters; + typedef enum logic [1:0] { + READING = 2'b00, + BIAS = 2'b01, + FILTER = 2'b10, + READY = 2'b11 + } state_t; + state_t state, state_next; + always_ff @(posedge clk) begin + if (~i_resetn) begin + state <= READING; + end else begin + state <= state_next; + end + end + always_comb begin + read_bias = 0; + read_filters = 0; + state_next = state; + case(state) + READING: begin + if (filter_bias_valid) + state_next = BIAS; + end + BIAS: begin + read_bias = 1; + if (bias_read) begin + state_next = FILTER; + read_bias = 0; + end + end + FILTER: begin + read_filters = 1; + if (filter_read) begin + state_next = READY; + read_filters = 0; + end + end + READY: begin + if (i_done) + state_next = READING; + end + default: begin + state_next = READING; // Default state + end + endcase + end + + always_ff @(posedge clk) begin + if (~i_resetn || i_done) begin + count <= '0; + count2 <= '0; + filter_bias_valid <= 0; + ready_local <= 1; + end else if (i_data_valid & ready_local & i_configured_and_ready & !last_in) begin + // Shift left and insert new data into line buffer L + for (integer i = 2; i <= MAX_WINDOW_HEIGHT * MAX_WINDOW_WIDTH; i = i + 1) begin + Line[i] <= Line[i - 2]; + end + Line[0] <= i_data[ELEMENT_BITS-1:0]; + Line[1] <= i_data[2*ELEMENT_BITS-1:ELEMENT_BITS]; + + count <= count + 1; + end + // Check if line buffer is full + if ((count == ((window_height_x_width+1) >> 1)) && (count != '0)) begin + count2 <= count2 +1; + // Shift filter array down by 1 line + for (integer i = VECTOR_SIZE-1; i > 0; i = i - 1) begin + filters_biases[i] <= filters_biases[i - 1]; + end + + // Insert new Line into the top row of filter array + filters_biases[0] <= Line; + if (i_data_valid) + count <= 1; + else + count <= 0; + end + // send out filter_valid + if ((count2 == VECTOR_SIZE-1) && (count == ((window_height_x_width+1) >> 1)) && (count != '0)) begin + filter_bias_valid <= 1; + count2 <= 0; + count <= 0; + ready_local <= 0; + end + if (read_bias || (should_shift && read_filters)) begin + for (int v = 0; v < VECTOR_SIZE; v++) begin : gen_filter_bias_shift + filters_biases[v] <= filters_biases[v] >> ELEMENT_BITS; + end + end + end + + // read bias first + always_ff @(posedge clk) begin + if (~i_resetn || i_done) begin + bias_read <= 0; + filter_valid_bias_delayed <= 0; + end else if (read_bias) begin + for (int v = 0; v < VECTOR_SIZE; v++) begin : gen_bias_assignment + bias[v] <= filters_biases[VECTOR_SIZE-v-1][0]; + end + filter_valid_bias_delayed <= filter_bias_valid; + bias_read <= 1; + end + end + + for (genvar i = 0; i < VECTOR_SIZE; i++) begin : gen_convert_bias_fp32 + dla_aux_depthwise_fp32_convert #( + .INPUT_EXPONENT_WIDTH(5), + .INPUT_MANTISSA_WIDTH(10) + ) bias_convert ( + .clk(clk), + .i_data(bias[i]), + .o_data(o_bias[i]) + ); + end + // Adjust filters such that they come out as follows: + // channel - values (filter_channel_WH) (WH width and height H*W-1 = n) + + // 0 - bias_0, filter_0_n, filter_0_n-1, .... , filter_0_1, filter_0_0 + // 1 - bias_1, filter_1_n, filter_1_n-1, .... , filter_1_1, filter_1_0 + // | | + // | | + // | | + // dw_k_vec-1(k) - bias_k, filter_k_n, filter_k_n-1, .... , filter_k_1, filter_k_0 + + // Handle filters in the case where window_width/height < MAX_WINDOW_WIDTH/HEIGHT + // Works generally with all cases where window_width/height <= MAX_WINDOW_WIDTH/HEIGHT + for (genvar i = 0; i < VECTOR_SIZE; i++) begin : gen_handle_filters_v + for (genvar j = 0; j < MAX_WINDOW_HEIGHT; j++) begin : gen_handle_filters_h + for (genvar k = 0; k < MAX_WINDOW_WIDTH; k++) begin : gen_handle_filters_w + always_ff @(posedge clk) begin + if ((j >= i_window_height) || (k >= i_window_width)) begin + o_filter[i][j*MAX_WINDOW_HEIGHT + k] <= '0; + end else if (read_filters && + ((j*MAX_WINDOW_HEIGHT + k) == (counter_height*MAX_WINDOW_HEIGHT + counter_width))) begin + o_filter[i][j*MAX_WINDOW_HEIGHT + k] <= filters_biases[VECTOR_SIZE-i-1][0]; + end + end + end + end + end + + // This dictates when to read (sequentially) a new value from the main filter buffer and shift to the next value + assign should_shift = ((counter_width < i_window_width) && (counter_height < i_window_height)); + always_ff @(posedge clk) begin + if (~i_resetn || i_done) begin + counter_width <= '0; + counter_height <= '0; + filter_valid_filter_delayed <= 0; + filter_read <= 0; + end else if (read_filters) begin + counter_width <= counter_width + 1; + if ((counter_width >= MAX_WINDOW_WIDTH-1) && (counter_height < i_window_height-1)) begin + counter_width <= 0; + counter_height <= counter_height + 1; + end else if ((counter_width >= i_window_width-1) && (counter_height >= i_window_height-1)) begin + counter_height <= 0; + counter_width <= 0; + filter_valid_filter_delayed <= filter_valid_bias_delayed; + filter_read <= 1; + end + end + end + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_fp32_convert.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_fp32_convert.sv new file mode 100644 index 0000000..ff31dd5 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_fp32_convert.sv @@ -0,0 +1,72 @@ +// Copyright 2020-2023 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + + +// this module converts any floating point number with exponent <= 8 to an FP32 number +// area cost of this module is 32 Regs and ceil(log6(INPUT_EXPONENT_WIDTH)) ALMs + +`undefineall +`resetall +`default_nettype none +`include "dla_acl_parameter_assert.svh" + +module dla_aux_depthwise_fp32_convert import dla_common_pkg::*; #( + int INPUT_EXPONENT_WIDTH, + int INPUT_MANTISSA_WIDTH, + int INPUT_WIDTH = 1 + INPUT_EXPONENT_WIDTH + INPUT_MANTISSA_WIDTH +) ( + input wire clk, + input wire [INPUT_WIDTH-1:0] i_data, + output logic [FP32_WIDTH-1:0] o_data +); + +// bit width difference between FP32 exponent and input exponent +localparam NUM_MIDDLE_BITS = FP32_EXPONENT_WIDTH - INPUT_EXPONENT_WIDTH; + +`DLA_ACL_PARAMETER_ASSERT_MESSAGE(INPUT_EXPONENT_WIDTH <= FP32_EXPONENT_WIDTH, $sformatf("This module expects an INPUT_EXPONENT_WIDTH (%d) <= %d", INPUT_EXPONENT_WIDTH, FP32_EXPONENT_WIDTH)) + +logic [FP32_WIDTH-1:0] fp32_output_normal; +logic fp32_sign; + + +// FP16 normal numbers +always_comb begin + automatic logic input_exponent_msb; + automatic logic [INPUT_EXPONENT_WIDTH-2:0] input_exponent_lower; + + + automatic logic [FP32_EXPONENT_WIDTH-1:0] fp32_exponent; + automatic logic [FP32_MANTISSA_WIDTH-1:0] fp32_mantissa = '0; + + automatic logic conv_middle; + + + // logic for converting a floating point exponent to an 8-bit FP32 exponent + input_exponent_msb = i_data[INPUT_WIDTH-2]; // most significant exponent bit + input_exponent_lower = i_data[(INPUT_WIDTH-3)-:(INPUT_EXPONENT_WIDTH-1)]; // rest of exponent bits + // exponent conversion logic + conv_middle = (~input_exponent_msb) & (|input_exponent_lower); + fp32_exponent = {input_exponent_msb, {NUM_MIDDLE_BITS{conv_middle}} , input_exponent_lower}; + + fp32_sign = i_data[INPUT_WIDTH-1]; + fp32_mantissa[(FP32_MANTISSA_WIDTH-1)-:INPUT_MANTISSA_WIDTH] = i_data[INPUT_MANTISSA_WIDTH-1:0]; + + fp32_output_normal = {fp32_sign, fp32_exponent, fp32_mantissa}; +end + +// pipeline the conversion output +always_ff @(posedge clk) begin + o_data <= fp32_output_normal; +end + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_group.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_group.sv new file mode 100644 index 0000000..f025556 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_group.sv @@ -0,0 +1,203 @@ +// Copyright 2020-2023 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +/* + * Module `dla_aux_depthwise_group` + * + * Group wrapper of the auxiliary block. + * + * WARNING! DO NOT EDIT THIS FILE FOR FUTURE-COMPATIBILITY + * + * This module is a template for all auxiliary blocks and the content should + * not be modified for future compatibility. + * + * Do not modify any of fields other than the module name and included package + * name. In case of a limitation or bug please contact owner of the Example + * Aux block. + * + * See README.md of the Example Aux block for more details. + */ + +`undefineall +`resetall +`default_nettype none + +`include "dla_acl_parameter_assert.svh" + +module dla_aux_depthwise_group + import dla_aux_depthwise_pkg::*; +#( + parameter int ID, // Unique ID of the group + parameter aux_depthwise_arch_params_t ARCH, // Architecture parameters + parameter vector_dot_arch_t AUX_DEPTHWISE_VECTOR_ARCH, + parameter vector_dot_arch_info_t DEPTHWISE_VECTOR_ARCH_INFO + +) ( + input wire clk , // Clock + input wire i_resetn , // Active-low sync reset + // + input var logic + [ARCH.AUX_DATA_PACK_PARAMS.GROUP_SIZE-1:0] + [ARCH.AUX_DATA_PACK_PARAMS.VECTOR_SIZE-1:0] + [ARCH.AUX_DATA_PACK_PARAMS.ELEMENT_BITS-1:0] i_data , // Data input stream port + input var logic i_data_valid , // Data input stream port valid + output generic_response_t o_data , // Data input response + // + input generic_response_t i_result , // Result output response + output logic + [ARCH.AUX_DATA_PACK_PARAMS.GROUP_SIZE-1:0] + [ARCH.AUX_DATA_PACK_PARAMS.VECTOR_SIZE-1:0] + [ARCH.AUX_DATA_PACK_PARAMS.ELEMENT_BITS-1:0] o_result , // Result output stream port + output logic o_result_valid , // Result output stream port valid + // + input wire [ARCH.AUX_DATA_PACK_PARAMS.VECTOR_SIZE-1:0] + [ARCH.AUX_SPECIAL_PARAMS.MAX_WINDOW_HEIGHT*ARCH.AUX_SPECIAL_PARAMS.MAX_WINDOW_WIDTH-1:0] + [ARCH.AUX_DATA_PACK_PARAMS.ELEMENT_BITS-1:0] i_filter, + + input wire [ARCH.AUX_DATA_PACK_PARAMS.VECTOR_SIZE-1:0] + [AUX_DEPTHWISE_VECTOR_ARCH.BIAS_WIDTH-1:0] i_bias, // fp32 bias + // + depthwise_config_to_control_if.receiver i_config_to_control , // Config to control port + output control_to_config_t o_control_to_config , // Control to config port + // + depthwise_control_to_lane_if.receiver i_control_to_lane , // (global control input) + depthwise_control_to_lane_if.sender o_control_to_lane_next, // the next group of lanes + // + input var logic i_config_filter_bias_valid, // Config (actual data) for cache + input var logic [31:0] i_config_filter_bias_data, + output var logic o_config_filter_bias_ready, + output debug_group_t o_debug // Debug output +); + +/* synthesis translate_off */ +`DLA_ACL_PARAMETER_ASSERT_MESSAGE(aux_data_pack_params_t'(i_config_to_control.data_pack_params) == ARCH.AUX_DATA_PACK_PARAMS, + "i_config_to_control if parameters don't match data pack params") +`DLA_ACL_PARAMETER_ASSERT_MESSAGE(aux_special_params_t'(i_config_to_control.special_params) == ARCH.AUX_SPECIAL_PARAMS, + "i_config_to_control if parameters don't match special params") +`DLA_ACL_PARAMETER_ASSERT_MESSAGE(aux_data_pack_params_t'(i_control_to_lane.data_pack_params) == ARCH.AUX_DATA_PACK_PARAMS, + "i_control_to_lane if parameters don't match data pack params") +`DLA_ACL_PARAMETER_ASSERT_MESSAGE(aux_special_params_t'(i_control_to_lane.special_params) == ARCH.AUX_SPECIAL_PARAMS, + "i_control_to_lane if parameters don't match special params") +`DLA_ACL_PARAMETER_ASSERT_MESSAGE(aux_data_pack_params_t'(o_control_to_lane_next.data_pack_params) == ARCH.AUX_DATA_PACK_PARAMS, + "o_control_to_lane_next if parameters don't match data pack params") +`DLA_ACL_PARAMETER_ASSERT_MESSAGE(aux_special_params_t'(o_control_to_lane_next.special_params) == ARCH.AUX_SPECIAL_PARAMS, + "o_control_to_lane_next if parameters don't match special params") +/* synthesis translate_on */ + + logic + [ARCH.AUX_DATA_PACK_PARAMS.VECTOR_SIZE-1:0] + [ARCH.AUX_DATA_PACK_PARAMS.ELEMENT_BITS-1:0] data [ARCH.AUX_DATA_PACK_PARAMS.GROUP_SIZE]; + logic data_valid [ARCH.AUX_DATA_PACK_PARAMS.GROUP_SIZE]; + logic + [ARCH.AUX_DATA_PACK_PARAMS.VECTOR_SIZE-1:0] + [ARCH.AUX_DATA_PACK_PARAMS.ELEMENT_BITS-1:0] result [ARCH.AUX_DATA_PACK_PARAMS.GROUP_SIZE]; + logic result_valid [ARCH.AUX_DATA_PACK_PARAMS.GROUP_SIZE]; + + depthwise_control_to_lane_if #( + .special_params (ARCH.AUX_SPECIAL_PARAMS ), + .data_pack_params(ARCH.AUX_DATA_PACK_PARAMS)) control_to_lane(); + lane_to_control_t lane_to_control; + + debug_control_t debug_from_control; + debug_lane_t debug_from_lane ; + + for (genvar i = 0; i < ARCH.AUX_DATA_PACK_PARAMS.GROUP_SIZE; i++) begin : gen_stream_lane + // Input data port's valid signal is distributed to all lanes + assign data_valid[i] = i_data_valid ; + // Input data port's data signal is uncombined per lane + assign data[i] = i_data[i]; + // All lanes' results are combined at the result output + assign o_result[i] = result[i]; + end : gen_stream_lane + + // Only first lane's result port's valid signal is relayed to the output + assign o_result_valid = result_valid[0]; + + // If this is the first group or per-group control is enabled, then ignore the control input and + // implement the control sub-block instead. Otherwise, control input is used. + if (ID == 0 || ARCH.AUX_GENERIC_PARAMS.PER_GROUP_CONTROL) begin : gen_control_group + dla_aux_depthwise_control #( + .ARCH(ARCH) + ) dla_aux_depthwise_control_inst ( + .clk (clk ), + .i_resetn (i_resetn ), + .i_config_to_control(i_config_to_control), + .o_control_to_config(o_control_to_config), + .o_control_to_lane (control_to_lane ), + .i_lane_to_control (lane_to_control ), + .o_debug (debug_from_control ) + ); + end : gen_control_group + else begin : gen_control_bypass + assign control_to_lane.data[0][0] = i_control_to_lane.data[0][0]; + end : gen_control_bypass + + // Bypassed to the control interface to the control output. + assign o_control_to_lane_next.data[0][0] = control_to_lane.data[0][0]; + + // First lane is instantiated separately since it needs to communicate with the control block and + // also generate debug information. The rest of the lanes are clones and do not interact with + // other sub-blocks. + dla_aux_depthwise_lane #( + .ID (ID ), + .ARCH(ARCH), + .AUX_DEPTHWISE_VECTOR_ARCH(AUX_DEPTHWISE_VECTOR_ARCH), + .DEPTHWISE_VECTOR_ARCH_INFO(DEPTHWISE_VECTOR_ARCH_INFO) + ) dla_aux_depthwise_lane_inst ( + .clk (clk ), + .i_resetn (i_resetn ), + .i_data (data [0]), + .i_data_valid (data_valid [0]), + .o_data (o_data ), + .i_result (i_result ), + .o_result (result [0]), + .o_result_valid (result_valid [0]), + .i_filter (i_filter ), + .i_bias (i_bias ), + .i_config_filter_bias_valid (i_config_filter_bias_valid), + .i_config_filter_bias_data (i_config_filter_bias_data), + .o_config_filter_bias_ready (o_config_filter_bias_ready), + .i_control_to_lane(control_to_lane ), + .o_lane_to_control(lane_to_control ), + .o_debug (debug_from_lane ) + ); + for (genvar i = 1; i < ARCH.AUX_DATA_PACK_PARAMS.GROUP_SIZE; i++) begin : gen_lanes + dla_aux_depthwise_lane #( + .ID (ARCH.AUX_DATA_PACK_PARAMS.GROUP_SIZE * ID + i), + .ARCH(ARCH ) + ) dla_aux_depthwise_lane_inst ( + .clk (clk ), + .i_resetn (i_resetn ), + .i_data (data [i]), + .i_data_valid (data_valid [i]), + .o_data ( ), + .i_result (i_result ), + .o_result (result [i]), + .o_result_valid (result_valid [i]), + .i_filter (i_filter ), + .i_bias (i_bias ), + .i_config_filter_bias_valid (i_config_filter_bias_valid), + .i_config_filter_bias_data (i_config_filter_bias_data), + .o_config_filter_bias_ready (o_config_filter_bias_ready), + .i_control_to_lane(control_to_lane ), + .o_lane_to_control( ), + .o_debug ( ) + ); + end : gen_lanes + + assign o_debug = '{ + control : debug_from_control, + lane : debug_from_lane + }; + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_if.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_if.sv new file mode 100644 index 0000000..31eb4ab --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_if.sv @@ -0,0 +1,112 @@ +// Copyright 2021-2021 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. +`undefineall +// Port structure from config to control +interface depthwise_config_to_control_if #( + dla_aux_depthwise_pkg::aux_special_params_t special_params, + dla_interface_pkg::aux_data_pack_params_t data_pack_params, + int DIM1 = 1, + int DIM2 = 1 +); +// ------------------------------ START EDITING ------------------------------ + localparam TILE_COUNT = data_pack_params.GROUP_SIZE * data_pack_params.GROUP_NUM; + localparam CONFIG_ID_BITS = special_params.CONFIG_ID_WIDTH ; + localparam WINDOW_BITS_VERTICAL = $clog2(special_params.MAX_WINDOW_HEIGHT + 1); + localparam WINDOW_BITS_HORIZONTAL = $clog2(special_params.MAX_WINDOW_WIDTH + 1); + localparam STRIDE_BITS_VERTICAL = $clog2(special_params.MAX_STRIDE_VERTICAL + 1); + localparam STRIDE_BITS_HORIZONTAL = $clog2(special_params.MAX_STRIDE_HORIZONTAL + 1); + localparam TILE_BITS_VERTICAL = $clog2(special_params.MAX_TILE_HEIGHT + 1); + localparam TILE_BITS_HORIZONTAL = $clog2(special_params.MAX_TILE_WIDTH + 1); + localparam TILE_BITS_DEPTHWISE = $clog2(special_params.MAX_TILE_CHANNELS + 1); + localparam VERTICAL_DILATION_BITS_DEPTHWISE = $clog2(special_params.MAX_DILATION_VERTICAL + 1); + localparam HORIZONTAL_DILATION_BITS_DEPTHWISE = $clog2(special_params.MAX_DILATION_HORIZONTAL + 1); + localparam ELEMENT_BITS = data_pack_params.ELEMENT_BITS ; +// ------------------------------ END EDITING ------------------------------ + + typedef struct packed { +// ------------------------------ START EDITING ------------------------------ + logic configured ; + // + logic padding_ignore ; + logic [ 1:0] padding_mode ; + logic [ ELEMENT_BITS-1:0] padding_constant ; + logic [ HORIZONTAL_DILATION_BITS_DEPTHWISE-1:0] dilation_horizontal ; + logic [ VERTICAL_DILATION_BITS_DEPTHWISE-1:0] dilation_vertical ; + logic [TILE_COUNT-1:0] [ TILE_BITS_HORIZONTAL-1:0] tile_horizontal_end ; + logic [TILE_COUNT-1:0] [ TILE_BITS_HORIZONTAL-1:0] tile_horizontal_start; + logic [TILE_COUNT-1:0] [ TILE_BITS_VERTICAL-1:0] tile_vertical_end ; + logic [TILE_COUNT-1:0] [ TILE_BITS_VERTICAL-1:0] tile_vertical_start ; + logic [ TILE_BITS_DEPTHWISE-1:0] tile_channels ; + logic [ TILE_BITS_HORIZONTAL-1:0] tile_width ; + logic [ TILE_BITS_VERTICAL-1:0] tile_height ; + logic [STRIDE_BITS_HORIZONTAL-1:0] stride_horizontal ; + logic [ STRIDE_BITS_VERTICAL-1:0] stride_vertical ; + logic [WINDOW_BITS_HORIZONTAL-1:0] window_width ; + logic [ WINDOW_BITS_VERTICAL-1:0] window_height ; + logic [ CONFIG_ID_BITS-1:0] config_id ; +// ------------------------------ END EDITING ------------------------------ + } Type; + Type data [DIM1][DIM2]; + modport sender (output data); + modport receiver (input data); +endinterface + +// Port structure from control to lane(s) +interface depthwise_control_to_lane_if #( + dla_aux_depthwise_pkg::aux_special_params_t special_params, + dla_interface_pkg::aux_data_pack_params_t data_pack_params, + int DIM1 = 1, + int DIM2 = 1 +); + localparam TILE_COUNT = data_pack_params.GROUP_SIZE * data_pack_params.GROUP_NUM; + localparam WINDOW_BITS_VERTICAL = $clog2(special_params.MAX_WINDOW_HEIGHT + 1); + localparam WINDOW_BITS_HORIZONTAL = $clog2(special_params.MAX_WINDOW_WIDTH + 1); + + localparam MAX_WINDOW_HEIGHT = special_params.MAX_WINDOW_HEIGHT ; + localparam MAX_WINDOW_WIDTH = special_params.MAX_WINDOW_WIDTH ; + + localparam MAX_DILATION_VERTICAL = special_params.MAX_DILATION_VERTICAL ; + localparam MAX_DILATION_HORIZONTAL = special_params.MAX_DILATION_HORIZONTAL ; + + localparam VERTICAL_DILATION_BITS_DEPTHWISE = $clog2(special_params.MAX_DILATION_VERTICAL + 1); + localparam HORIZONTAL_DILATION_BITS_DEPTHWISE = $clog2(special_params.MAX_DILATION_HORIZONTAL + 1); + localparam VERTICAL_LINES = MAX_WINDOW_HEIGHT + ((MAX_WINDOW_HEIGHT-1) * (MAX_DILATION_VERTICAL-1)); + typedef struct packed { + // only the handshake signal 'ready' is fixed in this structure, which is used by control to + // signal that the core is not stalled + logic ready; +// ------------------------------ START EDITING ------------------------------ + logic line_buff_flush; + logic line_buff_wait_fill; + logic is_padding_zone_vert; + logic is_padding_zone_horiz; + logic [TILE_COUNT-1:0] [VERTICAL_LINES-1:0] en_pad_nan_vert ; + logic [TILE_COUNT-1:0] [VERTICAL_LINES-1:0] en_pad_zero_vert ; + logic [TILE_COUNT-1:0] [special_params.MAX_WINDOW_WIDTH -1:0] en_pad_nan_horiz ; + logic [TILE_COUNT-1:0] [special_params.MAX_WINDOW_WIDTH -1:0] en_pad_zero_horiz; + logic stride_valid; + logic [WINDOW_BITS_HORIZONTAL-1:0] window_width ; + logic [ WINDOW_BITS_VERTICAL-1:0] window_height ; + logic done; // Indicates that a depthwise_k_vec chunk of data is out + // We need these signals to keep track of when we switch layes because the filter bias + // cache will only be ready when in a new layer + logic configured_starting; + logic configured_ending; + logic [VERTICAL_DILATION_BITS_DEPTHWISE-1:0] dilation_vertical; + logic [HORIZONTAL_DILATION_BITS_DEPTHWISE-1:0] dilation_horizontal; +// ------------------------------ END EDITING ------------------------------ + } Type; + Type data [DIM1][DIM2]; + modport sender (output data); + modport receiver (input data); +endinterface diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_input_buffer.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_input_buffer.sv new file mode 100644 index 0000000..24bdc85 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_input_buffer.sv @@ -0,0 +1,110 @@ +// Copyright 2020-2023 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + + +/* + * Module `dla_aux_depthwise_input_buffer` + * + * Input buffer of each lane of the auxiliary block. + * + * WARNING! DO NOT EDIT THIS FILE FOR FUTURE-COMPATIBILITY + * + * This module is a template for all auxiliary blocks and the content should + * not be modified for future compatibility. + * + * Do not modify any of fields other than the module name and included package + * name. In case of a limitation or bug please contact owner of the Example + * Aux block. + * + * See README.md of the Example Aux block for more details. + */ + +`undefineall +`resetall +`default_nettype none + +module dla_aux_depthwise_input_buffer + import dla_aux_depthwise_pkg::*; +#( + parameter aux_depthwise_arch_params_t ARCH // Architecture parameters +) ( + input wire clk , // Clock + input wire i_resetn , // Active-low sync reset + // + input var logic + [ARCH.AUX_DATA_PACK_PARAMS.VECTOR_SIZE-1:0] + [ARCH.AUX_DATA_PACK_PARAMS.ELEMENT_BITS-1:0] i_data , // Data input stream port + input var logic i_data_valid , // Data input stream port valid + output generic_response_t o_data , // Data input stream port response + // + input generic_response_t i_result , // Result output stream port response + output logic + [ARCH.AUX_DATA_PACK_PARAMS.VECTOR_SIZE-1:0] + [ARCH.AUX_DATA_PACK_PARAMS.ELEMENT_BITS-1:0] o_result , // Result output stream port + output logic o_result_valid, // Result output stream port valid + // + output debug_input_buffer_t o_debug // Debug output +); + + localparam REG_STAGES = ARCH.AUX_GENERIC_PARAMS.INPUT_BUFFER_REG_STAGES; + + // Internal output of pipeline + logic + [ARCH.AUX_DATA_PACK_PARAMS.VECTOR_SIZE-1:0] + [ARCH.AUX_DATA_PACK_PARAMS.ELEMENT_BITS-1:0] internal_stream_data ; + logic internal_stream_data_valid ; + generic_response_t internal_stream_data_response; + + // Instantiate the buffer unless the number of registering stages is zero + if (REG_STAGES > 0) begin + logic + [ARCH.AUX_DATA_PACK_PARAMS.VECTOR_SIZE-1:0] + [ARCH.AUX_DATA_PACK_PARAMS.ELEMENT_BITS-1:0] stream_data [REG_STAGES+1]; + logic stream_data_valid [REG_STAGES+1]; + generic_response_t stream_data_response [REG_STAGES+1]; + + assign stream_data[0] = i_data; + assign stream_data_valid[0] = i_data_valid; + assign o_data = stream_data_response[0]; + + assign stream_data_response[REG_STAGES] = internal_stream_data_response; + assign internal_stream_data = stream_data[REG_STAGES] ; + assign internal_stream_data_valid = stream_data_valid[REG_STAGES]; + + for (genvar i = 0; i < REG_STAGES; i++) begin : gen_register_stages + dla_aux_depthwise_pipeline_stage #( + .ARCH(ARCH) + ) dla_aux_depthwise_pipeline_stage_inst ( + .clk (clk ), + .i_resetn (i_resetn ), + .i_data (stream_data [i ]), + .i_data_valid (stream_data_valid [i ]), + .o_data (stream_data_response[i ]), + .i_result (stream_data_response[i+1]), + .o_result (stream_data [i+1]), + .o_result_valid(stream_data_valid [i+1]) + ); + end + end else begin + assign internal_stream_data = i_data ; + assign internal_stream_data_valid = i_data_valid ; + assign o_data = internal_stream_data_response; + end + + // connect register stages and module output + assign internal_stream_data_response.ready = i_result.ready; + + assign o_result = internal_stream_data; + assign o_result_valid = internal_stream_data_valid & internal_stream_data_response.ready; + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_lane.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_lane.sv new file mode 100644 index 0000000..aa2af9b --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_lane.sv @@ -0,0 +1,196 @@ +// Copyright 2020-2023 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + + +/* + * Module `dla_aux_depthwise_lane` + * + * Lane sub-module of the auxiliary block. + * + * WARNING! DO NOT EDIT THIS FILE FOR FUTURE-COMPATIBILITY + * + * This module is a template for all auxiliary blocks and the content should + * not be modified for future compatibility. + * + * Do not modify any of fields other than the module name and included package + * name. In case of a limitation or bug please contact owner of the Example + * Aux block. + * + * See README.md of the Example Aux block for more details. + */ + +`undefineall +`resetall +`default_nettype none + +`include "dla_acl_parameter_assert.svh" + +module dla_aux_depthwise_lane + import dla_aux_depthwise_pkg::*; +#( + parameter int ID, // Unique ID of the lane + parameter aux_depthwise_arch_params_t ARCH, // Architecture parameters + parameter vector_dot_arch_t AUX_DEPTHWISE_VECTOR_ARCH, + parameter vector_dot_arch_info_t DEPTHWISE_VECTOR_ARCH_INFO +) ( + input wire clk , // Clock + input wire i_resetn , // Active-low sync reset + // + input var logic + [ARCH.AUX_DATA_PACK_PARAMS.VECTOR_SIZE-1:0] + [ARCH.AUX_DATA_PACK_PARAMS.ELEMENT_BITS-1:0] i_data , // Data input port + input var logic i_data_valid , // Data input port valid + output generic_response_t o_data , // Data input response + // + input generic_response_t i_result , // Result output response + output logic + [ARCH.AUX_DATA_PACK_PARAMS.VECTOR_SIZE-1:0] + [ARCH.AUX_DATA_PACK_PARAMS.ELEMENT_BITS-1:0] o_result , // Result output port + output logic o_result_valid , // Result output port valid + // + input wire [ARCH.AUX_DATA_PACK_PARAMS.VECTOR_SIZE-1:0] + [ARCH.AUX_SPECIAL_PARAMS.MAX_WINDOW_HEIGHT*ARCH.AUX_SPECIAL_PARAMS.MAX_WINDOW_WIDTH-1:0] + [ARCH.AUX_DATA_PACK_PARAMS.ELEMENT_BITS-1:0] i_filter, + + input wire [ARCH.AUX_DATA_PACK_PARAMS.VECTOR_SIZE-1:0] + [AUX_DEPTHWISE_VECTOR_ARCH.BIAS_WIDTH-1:0] i_bias, // fp32 bias + // + input var logic i_config_filter_bias_valid, // Config (actual data) for cache + input var logic [31:0] i_config_filter_bias_data, + output var logic o_config_filter_bias_ready, + // + depthwise_control_to_lane_if.receiver i_control_to_lane, // Control to lane port + output lane_to_control_t o_lane_to_control, // Control to lane response + // + output debug_lane_t o_debug // Debug output +); + +/* synthesis translate_off */ +`DLA_ACL_PARAMETER_ASSERT_MESSAGE(aux_data_pack_params_t'(i_control_to_lane.data_pack_params) == ARCH.AUX_DATA_PACK_PARAMS, + "i_control_to_lane if parameters don't match data pack params") +`DLA_ACL_PARAMETER_ASSERT_MESSAGE(aux_special_params_t'(i_control_to_lane.special_params) == ARCH.AUX_SPECIAL_PARAMS, + "i_control_to_lane if parameters don't match special params") +/* synthesis translate_on */ + + localparam MIN_OUTPUT_BUFFER_FIFO_CUTOFF = + aux_depthwise_calc_core_latency(ARCH.AUX_SPECIAL_PARAMS, ARCH.AUX_DATA_PACK_PARAMS, DEPTHWISE_VECTOR_ARCH_INFO); + // If FIFO depth or cutoff parameters are set to -1 the values are calculated internally + localparam OUTPUT_BUFFER_FIFO_CUTOFF = ARCH.AUX_GENERIC_PARAMS.OUTPUT_BUFFER_FIFO_CUTOFF == -1 ? + MIN_OUTPUT_BUFFER_FIFO_CUTOFF : ARCH.AUX_GENERIC_PARAMS.OUTPUT_BUFFER_FIFO_CUTOFF; + localparam OUTPUT_BUFFER_FIFO_DEPTH = ARCH.AUX_GENERIC_PARAMS.OUTPUT_BUFFER_FIFO_DEPTH == -1 ? + OUTPUT_BUFFER_FIFO_CUTOFF + 3 : ARCH.AUX_GENERIC_PARAMS.OUTPUT_BUFFER_FIFO_DEPTH; + localparam FIFO_WIDTH = ARCH.AUX_DATA_PACK_PARAMS.ELEMENT_BITS * + ARCH.AUX_DATA_PACK_PARAMS.VECTOR_SIZE; + + logic fifo_afull; + + // Parameter checking + initial /* synthesis enable_verilog_initial_construct */ + begin + // The output (skid) buffer size must be larger than the data stored in the data pipeline. + // In the case of back-pressure the core will fill the output buffer as it cannot be stalled + if (OUTPUT_BUFFER_FIFO_CUTOFF >= OUTPUT_BUFFER_FIFO_DEPTH) begin + $fatal(1, {"Illegal parameterization (dla_aux_depthwise_lane.sv), expecting ", + "OUTPUT_BUFFER_FIFO_CUTOFF < OUTPUT_BUFFER_FIFO_DEPTH"}); + end + // The skid depth must be greater than a minimum value + if (OUTPUT_BUFFER_FIFO_CUTOFF < MIN_OUTPUT_BUFFER_FIFO_CUTOFF) begin + $fatal(1, {"Illegal parameterization (dla_aux_depthwise_lane.sv), expecting ", + "OUTPUT_BUFFER_FIFO_CUTOFF >= ", $sformatf("%0d",MIN_OUTPUT_BUFFER_FIFO_CUTOFF)}); + end + end + + // internal connecting wires for user logic block + logic + [ARCH.AUX_DATA_PACK_PARAMS.VECTOR_SIZE-1:0] + [ARCH.AUX_DATA_PACK_PARAMS.ELEMENT_BITS-1:0] core_data ; // + logic core_data_valid ; + generic_response_t core_data_response; // + + logic + [ARCH.AUX_DATA_PACK_PARAMS.VECTOR_SIZE-1:0] + [ARCH.AUX_DATA_PACK_PARAMS.ELEMENT_BITS-1:0] core_result ; // + logic core_result_valid ; + generic_response_t core_result_response; // + logic depthwise_filter_ready; + // connect ready signals to input buffer + assign core_data_response.ready = i_control_to_lane.data[0][0].ready & ~fifo_afull & i_resetn; + + // connect core input and output valid signals to the control + assign o_lane_to_control.core_input_valid = core_data_valid; + assign o_lane_to_control.core_output_valid = core_result_valid; + assign o_lane_to_control.depthwise_filter_ready = depthwise_filter_ready; + + dla_aux_depthwise_input_buffer #( + .ARCH(ARCH) + ) dla_aux_depthwise_input_buffer_inst ( + .clk (clk ), + .i_resetn (i_resetn ), + .i_data (i_data ), + .i_data_valid (i_data_valid ), + .o_data (o_data ), + .i_result (core_data_response ), + .o_result (core_data ), + .o_result_valid(core_data_valid ), + .o_debug (o_debug.input_buffer) + ); + dla_aux_depthwise_core #( + .ID (ID ), + .ARCH(ARCH), + .AUX_DEPTHWISE_VECTOR_ARCH(AUX_DEPTHWISE_VECTOR_ARCH), + .DEPTHWISE_VECTOR_ARCH_INFO(DEPTHWISE_VECTOR_ARCH_INFO) + ) dla_aux_depthwise_core_inst ( + .clk (clk ), + .i_resetn (i_resetn ), + .i_data (core_data ), + .i_data_valid (core_data_valid ), + .i_control (i_control_to_lane ), + .o_result (core_result ), + .o_result_valid(core_result_valid ), + .i_filter (i_filter ), + .i_bias (i_bias ), + .o_depthwise_filter_ready(depthwise_filter_ready), + .i_config_filter_bias_valid (i_config_filter_bias_valid ), + .i_config_filter_bias_data (i_config_filter_bias_data ), + .o_config_filter_bias_ready (o_config_filter_bias_ready ), + .o_debug (o_debug.core_function) + ); + + // Output buffer is implemented with a FIFO + // (depth is in words and width is in bits) + dla_hld_fifo #( + .WIDTH (FIFO_WIDTH ), + .DEPTH (OUTPUT_BUFFER_FIFO_DEPTH ), + .ALMOST_FULL_CUTOFF(OUTPUT_BUFFER_FIFO_CUTOFF), + .SYNCHRONIZE_RESET (0 ), + .NEVER_OVERFLOWS (1 ), + .STYLE ("ms" ) + ) dla_hld_fifo_inst ( + .clock (clk ), + .resetn (i_resetn ), + // + .i_valid (core_result_valid ), + .i_data (core_result ), + .o_stall (o_debug.output_buffer.full ), + .o_almost_full (fifo_afull ), + // + .o_valid (o_result_valid ), + .o_data (o_result ), + .i_stall (!i_result.ready ), + .o_almost_empty( ), + .o_empty (o_debug.output_buffer.empty), + // + .ecc_err_status( ) + ); + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_pipeline_stage.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_pipeline_stage.sv new file mode 100644 index 0000000..1053d7e --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_pipeline_stage.sv @@ -0,0 +1,120 @@ +// Copyright 2020-2023 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + + +/* + * Module `dla_aux_depthwise_pipeline_stage` + * + * One register stage of the input buffer of each lane of the auxiliary block. + * + * WARNING! DO NOT EDIT THIS FILE FOR FUTURE-COMPATIBILITY + * + * This module is a template for all auxiliary blocks and the content should + * not be modified for future compatibility. + * + * Do not modify any of fields other than the module name and included package + * name. In case of a limitation or bug please contact owner of the Example + * Aux block. + * + * See README.md of the Example Aux block for more details. + */ + +`undefineall +`resetall +`default_nettype none + +module dla_aux_depthwise_pipeline_stage + import dla_aux_depthwise_pkg::*; +#( + parameter aux_depthwise_arch_params_t ARCH // Architecture parameters +) ( + input wire clk , // Clock + input wire i_resetn , // Active-low sync reset + // + input var logic + [ARCH.AUX_DATA_PACK_PARAMS.VECTOR_SIZE-1:0] + [ARCH.AUX_DATA_PACK_PARAMS.ELEMENT_BITS-1:0] i_data , // Data input stream port + input var logic i_data_valid , // Data input stream port valid + output generic_response_t o_data , // Data input stream port response + // + input generic_response_t i_result , // Result output stream port response + output logic + [ARCH.AUX_DATA_PACK_PARAMS.VECTOR_SIZE-1:0] + [ARCH.AUX_DATA_PACK_PARAMS.ELEMENT_BITS-1:0] o_result , // Result output stream port + output logic o_result_valid // Result output stream port valid +); + + localparam REG_READY = 1'b1; // always register ready pipe + localparam REG_VALID = 1'b1; // always register valid pipe + + logic + [ARCH.AUX_DATA_PACK_PARAMS.VECTOR_SIZE-1:0] + [ARCH.AUX_DATA_PACK_PARAMS.ELEMENT_BITS-1:0] inter_data; + logic inter_data_valid; + + // + // Ready Side Register Stage + // + if (REG_READY > 0) begin : gen_pipelined_ready + logic + [ARCH.AUX_DATA_PACK_PARAMS.VECTOR_SIZE-1:0] + [ARCH.AUX_DATA_PACK_PARAMS.ELEMENT_BITS-1:0] reg_data; + logic reg_data_valid; + generic_response_t reg_resp; + + always_ff @(posedge clk) begin + o_data.ready <= i_result.ready || !o_result_valid; + if (o_data.ready) begin + reg_data <= i_data; + reg_data_valid <= i_data_valid; + end + if (!i_resetn) begin + o_data.ready <= 1'b0; + reg_data_valid <= 1'b0; + end + end + + always_comb begin + if (o_data.ready) begin + inter_data = i_data; + inter_data_valid = i_data_valid; + end else begin + inter_data = reg_data; + inter_data_valid = reg_data_valid; + end + end + end else begin + assign o_data = i_result; + assign inter_data = i_data; + assign inter_data_valid = i_data_valid; + end + + // + // Valid Side Register Stage + // + if (REG_VALID > 0) begin : gen_pipelined_valid + always_ff @(posedge clk) begin + if ( i_result.ready || !o_result_valid ) begin + o_result <= inter_data; + o_result_valid <= inter_data_valid; + end + if (!i_resetn) begin + o_result_valid <= 1'b0; + end + end + end else begin + assign o_result = inter_data; + assign o_result_valid = inter_data_valid; + end + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_pkg.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_pkg.sv new file mode 100644 index 0000000..0f07a5a --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_pkg.sv @@ -0,0 +1,208 @@ +// Copyright 2020-2023 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + + +/* + * Module `dla_aux_depthwise_pkg` + * + * Package template for specific auxiliary blocks. + * + * WARNING! ONLY EDIT THE PARTS MARKED IN BETWEEN + * "START EDITING" AND "END EDITING" + * + * The names of the structures and parameterized classes are fixed types and + * should not be modified for future-compatibility. The contents of structures + * marked for editing are examples that can be discarded and populated with + * auxiliary-specific content. + * + * See README.md of the Example Aux block for more details. + */ + +`undefineall +`resetall +`default_nettype none + +package dla_aux_depthwise_pkg; + import dla_common_pkg::*; + + `include "dla_aux_generic_pkg.svh" // Header for definitions common among all auxiliaries + +// ------------------------------ START EDITING ------------------------------ + // Other imports and includes can be added +// ------------------------------ END EDITING ------------------------------ + + // + // User Aux port and parameter structures + // + + // Auxiliary parameters specific for each aux + typedef struct { +// ------------------------------ START EDITING ------------------------------ + int DEPTHWISE_TYPE; + int MAX_WINDOW_HEIGHT; + int MAX_WINDOW_WIDTH; + int MAX_STRIDE_VERTICAL; + int MAX_STRIDE_HORIZONTAL; + int MAX_TILE_HEIGHT; + int MAX_TILE_WIDTH; + int MAX_TILE_CHANNELS; + int CONFIG_ID_WIDTH; + int PIPELINE_REG_NUM; + int MAX_DILATION_VERTICAL; + int MAX_DILATION_HORIZONTAL; +// ------------------------------ END EDITING ------------------------------ + } aux_special_params_t; + + // Port structure from control to config + typedef struct { + logic done; // One clock cycle wide pulse used to signal config that previous config is done + } control_to_config_t; + + // grouped arch parameter type + typedef struct { + aux_data_pack_params_t AUX_DATA_PACK_PARAMS; + stream_params_t CONFIG_STREAM_PARAMS; + debug_axi_params_t DEBUG_AXI_PARAMS; + aux_generic_params_t AUX_GENERIC_PARAMS; + aux_special_params_t AUX_SPECIAL_PARAMS; + } aux_depthwise_arch_params_t; + + typedef struct { + int DOT_OUTPUT_WIDTH; + int DEVICE_DSP_MULT_LATENCY; + int DSP_ADDER_LAENCY; + int DSP_CHAIN_ADDER_LAENCY; + int DSP_OUTPUT_LATENCY; + int DSP_CHAIN_LEN; + int STANDALONE_DSP_DOT_LATENCY; + int CHAINED_DSP_DOT_LATENCY; + int DSP_DOT_LATENCY; + int EXTRA_LATENCY; + int DOT_LATENCY; + int ACCUM_LATENCY; + int TOTAL_LATENCY; + } vector_dot_arch_info_t; + + // Function used for calculating the skid buffer latency. This latency value is not necessarily + // equal to the input-to-output delay of the core. For simple blocks those values might be equal. + // For complex blocks with arbitrary clock-enable signals within the core the amount of skid is + // calculated by considering the worst corner cases of the backpressure switching. + function int aux_depthwise_calc_core_latency( + aux_special_params_t special_params, + aux_data_pack_params_t data_pack_params, + vector_dot_arch_info_t DEPTHWISE_VECTOR_ARCH_INFO + ); +// ------------------------------ START EDITING ------------------------------ + localparam FIXED_RESPONSE_DELAY = 6; + localparam OUTPUT_FIFO_RESPONSE_DELAY = 3; + + return FIXED_RESPONSE_DELAY + OUTPUT_FIFO_RESPONSE_DELAY + + special_params.PIPELINE_REG_NUM + 1 + + //$clog2(special_params.MAX_WINDOW_HEIGHT) + 1 + + $clog2(special_params.MAX_WINDOW_WIDTH) + 1 + + 1 + DEPTHWISE_VECTOR_ARCH_INFO.DSP_DOT_LATENCY + // vector engine chain delay + data_pack_params.NATIVE_VECTOR_SIZE / data_pack_params.VECTOR_SIZE; +// ------------------------------ END EDITING ------------------------------ + endfunction : aux_depthwise_calc_core_latency + + // Total number of config bits are calculated here. Its implementation is aux specific. + function int aux_depthwise_calc_total_config_bits(aux_depthwise_arch_params_t params); +// ------------------------------ START EDITING ------------------------------ + automatic int num_lanes = aux_calc_num_lanes(params.AUX_DATA_PACK_PARAMS); + + return ( + params.AUX_SPECIAL_PARAMS.CONFIG_ID_WIDTH + + $clog2(params.AUX_SPECIAL_PARAMS.MAX_WINDOW_HEIGHT + 1) + + $clog2(params.AUX_SPECIAL_PARAMS.MAX_WINDOW_WIDTH + 1) + + $clog2(params.AUX_SPECIAL_PARAMS.MAX_STRIDE_VERTICAL + 1) + + $clog2(params.AUX_SPECIAL_PARAMS.MAX_STRIDE_HORIZONTAL + 1) + + $clog2(params.AUX_SPECIAL_PARAMS.MAX_TILE_HEIGHT + 1) + + $clog2(params.AUX_SPECIAL_PARAMS.MAX_TILE_WIDTH + 1) + + $clog2(params.AUX_SPECIAL_PARAMS.MAX_TILE_CHANNELS + 1) + + $clog2(params.AUX_SPECIAL_PARAMS.MAX_TILE_HEIGHT + 1) * num_lanes + + $clog2(params.AUX_SPECIAL_PARAMS.MAX_TILE_HEIGHT + 1) * num_lanes + + $clog2(params.AUX_SPECIAL_PARAMS.MAX_TILE_WIDTH + 1) * num_lanes + + $clog2(params.AUX_SPECIAL_PARAMS.MAX_TILE_WIDTH + 1) * num_lanes + + $clog2(params.AUX_SPECIAL_PARAMS.MAX_DILATION_VERTICAL + 1) + + $clog2(params.AUX_SPECIAL_PARAMS.MAX_DILATION_HORIZONTAL + 1) + + params.AUX_DATA_PACK_PARAMS.ELEMENT_BITS + + 2 + + 1 + ); + endfunction : aux_depthwise_calc_total_config_bits +// ------------------------------ END EDITING ------------------------------ + + // Other user defined structures, classes, functions, etc. +// ------------------------------ START EDITING ------------------------------ + // ... + // ... + // Definitions for the vector dot engine used to compute depthwise convolution + // defined similar to fpga/pe_array/rtl/src/dla_pe_array_pkg.sv + typedef struct { + int FEATURE_WIDTH; + int FILTER_WIDTH; + int BIAS_WIDTH; + int DOT_SIZE; + device_family_t DEVICE; + } vector_dot_arch_t; + + + + function automatic vector_dot_arch_info_t get_arch_info( + dla_aux_depthwise_pkg::vector_dot_arch_t arch + ); + `include "dla_vector_dot_arch_info.svh" + automatic vector_dot_arch_info_t arch_info = '{ + DOT_OUTPUT_WIDTH: DOT_OUTPUT_WIDTH, + DEVICE_DSP_MULT_LATENCY: DEVICE_DSP_MULT_LATENCY, + DSP_ADDER_LAENCY: DSP_ADDER_LAENCY, + DSP_CHAIN_ADDER_LAENCY: DSP_CHAIN_ADDER_LAENCY, + DSP_OUTPUT_LATENCY: DSP_OUTPUT_LATENCY, + DSP_CHAIN_LEN: DSP_CHAIN_LEN, + STANDALONE_DSP_DOT_LATENCY: STANDALONE_DSP_DOT_LATENCY, + CHAINED_DSP_DOT_LATENCY: CHAINED_DSP_DOT_LATENCY, + DSP_DOT_LATENCY: DSP_DOT_LATENCY, + EXTRA_LATENCY: EXTRA_LATENCY, + DOT_LATENCY: DOT_LATENCY, + ACCUM_LATENCY: ACCUM_LATENCY, + TOTAL_LATENCY: TOTAL_LATENCY + }; + return arch_info; + endfunction +// ------------------------------ END EDITING ------------------------------ + + // User defined logic debug port + typedef struct { +// ------------------------------ START EDITING ------------------------------ + logic dummy; // other signals +// ------------------------------ END EDITING ------------------------------ + } debug_core_t; + + // User defined control debug port + typedef struct { +// ------------------------------ START EDITING ------------------------------ + logic dummy; // other signals +// ------------------------------ END EDITING ------------------------------ + } debug_control_t; + + // User defined config debug port + typedef struct { +// ------------------------------ START EDITING ------------------------------ + logic dummy; // other signals +// ------------------------------ END EDITING ------------------------------ + } debug_config_t; + +// Header for debug-related definitions common among all auxiliaries +`include "dla_aux_generic_debug_pkg.svh" + +endpackage diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_shift_register.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_shift_register.sv new file mode 100644 index 0000000..4ab7501 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_shift_register.sv @@ -0,0 +1,70 @@ +// Copyright 2020-2023 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +/* + * Module `dla_aux_depthwise_shift_register` + * + * Parametrizable shift register to shift right/left + * with reset and variable width/stages/number of inputs support + */ + +`undefineall +`resetall +`default_nettype none + + module dla_aux_depthwise_shift_register + // Change the package name to aux name: dla_aux_<name>_pkg + import dla_aux_depthwise_pkg::*, dla_common_pkg::*; +// ------------------------------ END EDITING ------------------------------ +#( + parameter int BIT_WIDTH = 16, + parameter int SEGMENTS = 3, + parameter int NUM_INPUTS = 3, + parameter int STAGES = SEGMENTS * NUM_INPUTS +) ( + input wire clk , // Clock + input wire i_resetn , // Active-low sync reset + // + input var logic [NUM_INPUTS-1:0] [BIT_WIDTH-1:0] i_data , // Data input + input var logic i_load_shift , // load_shift enable (accept new data) + input var logic i_shift_left , // direction of shift + // + output logic [STAGES-1:0] [BIT_WIDTH-1:0] o_data // Data output +); + + +// Define the main shift register +logic [STAGES-1:0] [BIT_WIDTH-1:0] shift_reg ; +logic [STAGES-1:0] [BIT_WIDTH-1:0] shift_reg_shifted ; + +assign shift_reg_shifted = i_shift_left ? shift_reg << NUM_INPUTS*BIT_WIDTH : shift_reg >> NUM_INPUTS*BIT_WIDTH; + +always_ff @(posedge clk) begin + if (~i_resetn) begin + shift_reg <= '{default:'0}; + end else begin + if (i_load_shift) begin + // Load new data into the shift register + if (i_shift_left) begin + shift_reg <= {shift_reg_shifted[STAGES-1:NUM_INPUTS] , i_data}; + end else begin + shift_reg <= {i_data, shift_reg_shifted[STAGES-1 - NUM_INPUTS:0]}; + end + end + end +end + +// Output the entire shift register +assign o_data = shift_reg; + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_top.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_top.sv new file mode 100644 index 0000000..59ca3c2 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_depthwise_top.sv @@ -0,0 +1,381 @@ +// Copyright 2020-2023 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +/* + * Module `dla_aux_depthwise_top` + * + * Top level of the aux block. + * + * WARNING! DO NOT EDIT THIS FILE FOR FUTURE-COMPATIBILITY + * + * This module is a template for all auxiliary blocks and the content should + * not be modified for future compatibility. + * + * Do not modify any of fields other than the module name and included package + * name. In case of a limitation or bug please contact owner of the Example + * Aux block. + * + * See README.md of the Example Aux block for more details. + */ + +`undefineall +`resetall +`default_nettype none + +module dla_aux_depthwise_top + import dla_aux_depthwise_pkg::*; +#( + parameter aux_data_pack_params_t AUX_DATA_PACK_PARAMS, + parameter stream_params_t CONFIG_STREAM_PARAMS, + parameter debug_axi_params_t DEBUG_AXI_PARAMS, + parameter aux_generic_params_t AUX_GENERIC_PARAMS, + parameter aux_special_params_t AUX_SPECIAL_PARAMS, + parameter vector_dot_arch_t AUX_DEPTHWISE_VECTOR_ARCH, + parameter vector_dot_arch_info_t DEPTHWISE_VECTOR_ARCH_INFO, + // + localparam stream_params_t DATA_STREAM_PARAMS = '{ // Data stream parameterization + DATA_WIDTH : aux_params_to_bus_width(AUX_DATA_PACK_PARAMS)}, + localparam int GROUP_DELAY = AUX_DATA_PACK_PARAMS.GROUP_DELAY, + localparam int GROUP_NUM = AUX_DATA_PACK_PARAMS.GROUP_NUM, + localparam int GROUP_SIZE = AUX_DATA_PACK_PARAMS.GROUP_SIZE, + localparam int VECTOR_SIZE = AUX_DATA_PACK_PARAMS.VECTOR_SIZE, + localparam int ELEMENT_BITS = AUX_DATA_PACK_PARAMS.ELEMENT_BITS +) ( + input wire clk , // Clock + input wire i_aresetn , // Active-low async reset + // + input var logic [GROUP_NUM -1:0] + [GROUP_SIZE -1:0] + [VECTOR_SIZE -1:0] + [ELEMENT_BITS-1:0] i_data , // Data input stream port + input var logic i_data_valid , // Data input stream port valid + output generic_response_t o_data , // Data input stream port response + // + input generic_response_t i_result , // Result output stream port response + output logic [GROUP_NUM -1:0] + [GROUP_SIZE -1:0] + [VECTOR_SIZE -1:0] + [ELEMENT_BITS-1:0] o_result , // Result output stream port + output logic o_result_valid , // Result output stream port valid + // + input var logic [CONFIG_STREAM_PARAMS.DATA_WIDTH-1:0] i_config , // Config stream port + input var logic i_config_valid , // Config stream port valid + output generic_response_t o_config , // Config stream port response + input var logic i_config_filter_bias_valid, // Config (actual data) for cache + input var logic [CONFIG_STREAM_PARAMS.DATA_WIDTH-1:0] i_config_filter_bias_data, + output var logic o_config_filter_bias_ready, + // + input var logic [DEBUG_AXI_PARAMS.ADDR_WIDTH-1:0] i_debug_raddr , // Debug AXI read-address port + input var logic i_debug_raddr_valid, // Debug AXI read-address port valid + output generic_response_t o_debug_raddr , // Debug AXI read-address port response + input generic_response_t i_debug_rdata , // Debug AXI read-data port response + output logic [DEBUG_AXI_PARAMS.DATA_WIDTH-1:0] o_debug_rdata , // Debug AXI read-data port + output logic o_debug_rdata_valid // Debug AXI read-data port valid +); + + localparam int GROUP_SHIFT = (GROUP_NUM-1)*GROUP_DELAY+1; + + // Parameter checking + initial /* synthesis enable_verilog_initial_construct */ + begin + // check AUX_DATA_PACK_PARAMS + if (AUX_DATA_PACK_PARAMS.ELEMENT_BITS > 32 || AUX_DATA_PACK_PARAMS.ELEMENT_BITS <= 0) begin + $fatal(1, {"Illegal parameterization (dla_aux_depthwise_top.sv), ELEMENT_BITS = %0d, ", + "expected 0 < ELEMENT_BITS <= 32"}, AUX_DATA_PACK_PARAMS.ELEMENT_BITS); + end + if (AUX_DATA_PACK_PARAMS.VECTOR_SIZE <= 0) begin + $fatal(1, {"Illegal parameterization (dla_aux_depthwise_top.sv), VECTOR_SIZE = %0d, ", + "expected VECTOR_SIZE > 0"}, AUX_DATA_PACK_PARAMS.VECTOR_SIZE); + end + if (AUX_DATA_PACK_PARAMS.NATIVE_VECTOR_SIZE <= 0) begin + $fatal(1, {"Illegal parameterization (dla_aux_depthwise_top.sv), NATIVE_VECTOR_SIZE = %0d, ", + "expected NATIVE_VECTOR_SIZE > 0"}, AUX_DATA_PACK_PARAMS.NATIVE_VECTOR_SIZE); + end + if (AUX_DATA_PACK_PARAMS.GROUP_SIZE <= 0) begin + $fatal(1, {"Illegal parameterization (dla_aux_depthwise_top.sv), GROUP_SIZE = %0d, ", + "expected GROUP_SIZE > 0"}, AUX_DATA_PACK_PARAMS.GROUP_SIZE); + end + if (AUX_DATA_PACK_PARAMS.GROUP_NUM <= 0) begin + $fatal(1, {"Illegal parameterization (dla_aux_depthwise_top.sv), GROUP_NUM = %0d, ", + "expected GROUP_NUM > 0"}, AUX_DATA_PACK_PARAMS.GROUP_NUM); + end + if (AUX_DATA_PACK_PARAMS.GROUP_DELAY < 0) begin + $fatal(1, {"Illegal parameterization (dla_aux_depthwise_top.sv), GROUP_DELAY = %0d, ", + "expected GROUP_DELAY >= 0"}, AUX_DATA_PACK_PARAMS.GROUP_DELAY); + end + + // check CONFIG_STREAM_PARAMS + if (CONFIG_STREAM_PARAMS.DATA_WIDTH <= 0) begin + $fatal(1, {"Illegal parameterization (dla_aux_depthwise_top.sv), CONFIG_STREAM_PARAMS.DATA_WIDTH ", + "= %0d, expected CONFIG_STREAM_PARAMS.DATA_WIDTH > 0"}, CONFIG_STREAM_PARAMS.DATA_WIDTH); + end + + // check DEBUG_AXI_PARAMS + if (DEBUG_AXI_PARAMS.DATA_WIDTH <= 0) begin + $fatal(1, {"Illegal parameterization (dla_aux_depthwise_top.sv), DEBUG_AXI_PARAMS.DATA_WIDTH = ", + "%0d, expected DEBUG_AXI_PARAMS.DATA_WIDTH > 0"}, DEBUG_AXI_PARAMS.DATA_WIDTH); + end + if (DEBUG_AXI_PARAMS.ADDR_WIDTH <= 0) begin + $fatal(1, {"Illegal parameterization (dla_aux_depthwise_top.sv), DEBUG_AXI_PARAMS.ADDR_WIDTH = ", + "%0d, expected DEBUG_AXI_PARAMS.ADDR_WIDTH > 0"}, DEBUG_AXI_PARAMS.ADDR_WIDTH); + end + + // check AUX_GENERIC_PARAMS + if (AUX_GENERIC_PARAMS.INPUT_BUFFER_REG_STAGES < 0) begin + $fatal(1, {"Illegal parameterization (dla_aux_depthwise_top.sv), AUX_GENERIC_PARAMS.", + "INPUT_BUFFER_REG_STAGES = %0d, expected AUX_GENERIC_PARAMS.INPUT_BUFFER_REG_STAGES >= 0"}, + AUX_GENERIC_PARAMS.INPUT_BUFFER_REG_STAGES); + end + if (AUX_GENERIC_PARAMS.COMMAND_BUFFER_DEPTH < 0) begin + $fatal(1, {"Illegal parameterization (dla_aux_depthwise_top.sv), AUX_GENERIC_PARAMS.", + "COMMAND_BUFFER_DEPTH = %0d, expected AUX_GENERIC_PARAMS.COMMAND_BUFFER_DEPTH >= 0"}, + AUX_GENERIC_PARAMS.COMMAND_BUFFER_DEPTH); + end + if (AUX_GENERIC_PARAMS.PER_GROUP_CONTROL != 0 && + AUX_GENERIC_PARAMS.PER_GROUP_CONTROL != 1) begin + $fatal(1, {"Illegal parameterization (dla_aux_depthwise_top.sv), AUX_GENERIC_PARAMS.", + "PER_GROUP_CONTROL = %0d, expected AUX_GENERIC_PARAMS.PER_GROUP_CONTROL = 0 or 1"}, + AUX_GENERIC_PARAMS.PER_GROUP_CONTROL); + end + if (AUX_GENERIC_PARAMS.DEBUG_LEVEL < 0) begin + $fatal(1, {"Illegal parameterization (dla_aux_depthwise_top.sv), AUX_GENERIC_PARAMS.DEBUG_LEVEL ", + "= %0d, expected AUX_GENERIC_PARAMS.DEBUG_LEVEL >= 0"}, AUX_GENERIC_PARAMS.DEBUG_LEVEL); + end + if (AUX_GENERIC_PARAMS.DEBUG_ID < 0) begin + $fatal(1, {"Illegal parameterization (dla_aux_depthwise_top.sv), AUX_GENERIC_PARAMS.DEBUG_ID = ", + "%0d, expected AUX_GENERIC_PARAMS.DEBUG_ID >= 0"}, AUX_GENERIC_PARAMS.DEBUG_ID); + end + if (AUX_GENERIC_PARAMS.DEBUG_EVENT_DEPTH < 0) begin + $fatal(1, {"Illegal parameterization (dla_aux_depthwise_top.sv), AUX_GENERIC_PARAMS.", + "DEBUG_EVENT_DEPTH = %0d, expected AUX_GENERIC_PARAMS.DEBUG_EVENT_DEPTH >= 0"}, + AUX_GENERIC_PARAMS.DEBUG_EVENT_DEPTH); + end + + // Note: AUX_SPECIAL_PARAMS must be checked in relevant files (config_decoder, control and core) + end + + // Arch assignment + localparam aux_depthwise_arch_params_t ARCH = '{ + AUX_DATA_PACK_PARAMS : AUX_DATA_PACK_PARAMS, + CONFIG_STREAM_PARAMS : CONFIG_STREAM_PARAMS, + DEBUG_AXI_PARAMS : DEBUG_AXI_PARAMS, + AUX_GENERIC_PARAMS : AUX_GENERIC_PARAMS, + AUX_SPECIAL_PARAMS : AUX_SPECIAL_PARAMS + }; + + // Reset module constants + localparam RST_USE_SYNCHRONIZER = 1; // yes clock domain crossings + localparam RST_PIPE_DEPTH = 3; // stages of synchronization registers + localparam RST_NUM_COPIES = 3; // number of reset signals + + // synchronized reset + logic [RST_NUM_COPIES-1:0] sclrn; + + /*------------------------------------------------------------------------------ + -- Reset handler + ------------------------------------------------------------------------------*/ + dla_reset_handler_simple #( + .USE_SYNCHRONIZER(RST_USE_SYNCHRONIZER), + .PIPE_DEPTH (RST_PIPE_DEPTH ), + .NUM_COPIES (RST_NUM_COPIES ) + ) dla_reset_handler_simple_inst ( + .clk (clk ), + .i_resetn(i_aresetn), // active-low asyncronous reset input + .o_sclrn (sclrn ) // one or more copies of synchronized reset, 'dont_merge' constraints applied + ); + + // Group 0 only signals + control_to_config_t control_to_config; + + // Systolic Group signals + // config-control interface and related signals + depthwise_config_to_control_if #( + .special_params (AUX_SPECIAL_PARAMS ), + .data_pack_params(AUX_DATA_PACK_PARAMS) + ) config_to_control[GROUP_SHIFT](); + + // control-lane interface + depthwise_control_to_lane_if #( + .special_params (AUX_SPECIAL_PARAMS ), + .data_pack_params(AUX_DATA_PACK_PARAMS) + ) control_to_lane[GROUP_SHIFT](); + + // data and result handshaking signals + logic stream_data_valid[GROUP_SHIFT-1:0]; + generic_response_t stream_result_request [GROUP_SHIFT-1:0]; + + // synchronized reset + logic group_sreset_n [GROUP_SHIFT-1:0]; + + logic [ARCH.AUX_DATA_PACK_PARAMS.VECTOR_SIZE-1:0][ARCH.AUX_SPECIAL_PARAMS.MAX_WINDOW_HEIGHT*ARCH.AUX_SPECIAL_PARAMS.MAX_WINDOW_WIDTH-1:0][ARCH.AUX_DATA_PACK_PARAMS.ELEMENT_BITS-1:0] filter_data_buf; + logic [ARCH.AUX_DATA_PACK_PARAMS.VECTOR_SIZE-1:0][AUX_DEPTHWISE_VECTOR_ARCH.BIAS_WIDTH-1:0] bias_data_buf; // fp32 bias + // debug connections + debug_config_t debug_from_config; + debug_group_t debug_from_group ; + + // Assign group delay input signals + assign group_sreset_n [0] = sclrn[0]; + assign stream_data_valid [0] = (i_data_valid & o_data.ready); + assign stream_result_request[0].ready = i_result.ready; + + // + // Group-delay chains of all group delayed signals + // + if (GROUP_DELAY > 0) begin : gen_non_zero_delay + for(genvar i = 1; i < GROUP_SHIFT; i++) begin : gen_group_delay + always_ff @(posedge clk) begin : proc_group_delay + group_sreset_n [i] <= group_sreset_n [i-1]; + stream_result_request[i] <= stream_result_request[i-1]; + stream_data_valid [i] <= stream_data_valid [i-1]; + control_to_lane [i].data[0][0] <= control_to_lane [i-1].data[0][0]; + config_to_control [i].data[0][0] <= config_to_control [i-1].data[0][0]; + end : proc_group_delay + end : gen_group_delay + end : gen_non_zero_delay + + // + // Config decoder + // + dla_aux_depthwise_config_decoder #( + .ARCH(ARCH) + ) dla_aux_depthwise_config_decoder_inst ( + .clk ( clk ), + .i_resetn ( sclrn [RST_NUM_COPIES-2] ), + .i_config ( i_config ), + .i_config_valid ( i_config_valid ), + .o_config ( o_config ), + .i_control_to_config ( control_to_config ), + .o_config_to_control ( config_to_control[0] ), + .o_debug ( debug_from_config ) + ); + + // + // Multiple groups (phases) are generated + // + // First group is responsible for interacting with Config Decoder and generating debug information + dla_aux_depthwise_group #( + .ID (0 ), + .ARCH(ARCH), + .AUX_DEPTHWISE_VECTOR_ARCH(AUX_DEPTHWISE_VECTOR_ARCH), + .DEPTHWISE_VECTOR_ARCH_INFO(DEPTHWISE_VECTOR_ARCH_INFO) + ) dla_aux_depthwise_group_inst ( + .clk ( clk ), + .i_resetn ( group_sreset_n [0] ), + .i_data ( i_data [0] ), + .i_data_valid ( stream_data_valid [0] ), + .o_data ( {>>{o_data}} ), + .i_result ( stream_result_request [0] ), + .o_result ( o_result [0] ), + .o_result_valid ( o_result_valid ), + .i_filter ( filter_data_buf ), + .i_bias ( bias_data_buf ), + .i_config_to_control ( config_to_control [0] ), + .o_control_to_config ( control_to_config ), + .i_control_to_lane ( control_to_lane [0] ), + .o_control_to_lane_next ( control_to_lane [0] ), + .i_config_filter_bias_valid ( i_config_filter_bias_valid ), + .i_config_filter_bias_data ( i_config_filter_bias_data ), + .o_config_filter_bias_ready ( o_config_filter_bias_ready ), + .o_debug ( debug_from_group ) + ); + // Other groups only consume decoded config + for (genvar i = 1; i < GROUP_NUM; i++) begin : gen_groups + // Must pass an interface to o_control_lane_next, so create a placeholder interface + depthwise_control_to_lane_if #(.special_params(AUX_SPECIAL_PARAMS), .data_pack_params(AUX_DATA_PACK_PARAMS)) output_control_to_lane(); + + dla_aux_depthwise_group #( + .ID (i ), + .ARCH(ARCH), + .AUX_DEPTHWISE_VECTOR_ARCH(AUX_DEPTHWISE_VECTOR_ARCH), + .DEPTHWISE_VECTOR_ARCH_INFO(DEPTHWISE_VECTOR_ARCH_INFO) + ) dla_aux_depthwise_group_inst ( + .clk ( clk ), + .i_resetn ( group_sreset_n [i * GROUP_DELAY] ), + .i_data ( i_data [i ] ), + .i_data_valid ( stream_data_valid [i * GROUP_DELAY] ), + .o_data ( ), + .i_result ( stream_result_request[i * GROUP_DELAY] ), + .o_result ( o_result [i ] ), + .o_result_valid ( ), + .i_filter ( filter_data_buf ), + .i_bias ( bias_data_buf ), + .i_config_to_control ( config_to_control [i * GROUP_DELAY] ), + .o_control_to_config ( ), + .i_control_to_lane ( control_to_lane [i * GROUP_DELAY] ), + .o_control_to_lane_next ( output_control_to_lane ), + .i_config_filter_bias_valid ( i_config_filter_bias_valid ), + .i_config_filter_bias_data ( i_config_filter_bias_data ), + .o_config_filter_bias_ready ( ), + .o_debug ( ) + ); + end : gen_groups + + // + // Filter bias cache + // + logic filter_cache_ready; + logic configured_and_ready; + initial begin + if (o_config_filter_bias_ready != (filter_cache_ready && configured_and_ready)) begin + $display("Double plumbed filters not matching ready %d %d %d", o_config_filter_bias_ready, filter_cache_ready, configured_and_ready); + end + end + //assign o_config_filter_bias_ready = filter_cache_ready && configured_and_ready; + assign configured_and_ready = control_to_lane[0].data[0][0].configured_starting != + control_to_lane[0].data[0][0].configured_ending; + + dla_aux_depthwise_filter_bias_cache #( + .MAX_WINDOW_HEIGHT (ARCH.AUX_SPECIAL_PARAMS.MAX_WINDOW_HEIGHT ), + .MAX_WINDOW_WIDTH (ARCH.AUX_SPECIAL_PARAMS.MAX_WINDOW_WIDTH ), + .ELEMENT_BITS (ARCH.AUX_DATA_PACK_PARAMS.ELEMENT_BITS ), + .CONFIG_BIT_WIDTH (32 ), + .VECTOR_SIZE (ARCH.AUX_DATA_PACK_PARAMS.VECTOR_SIZE ), + .WINDOW_BITS_VERTICAL ($clog2(ARCH.AUX_SPECIAL_PARAMS.MAX_WINDOW_HEIGHT + 1) ), + .WINDOW_BITS_HORIZONTAL ($clog2(ARCH.AUX_SPECIAL_PARAMS.MAX_WINDOW_WIDTH + 1) ), + .BIAS_WIDTH (AUX_DEPTHWISE_VECTOR_ARCH.BIAS_WIDTH ) + ) filter_bias_cache ( + .clk ( clk ), + .i_resetn ( group_sreset_n [0] ), + .i_data_valid ( i_config_filter_bias_valid ), + .i_data ( i_config_filter_bias_data ), + .o_config_filter_bias_ready ( filter_cache_ready ), + .i_configured_and_ready ( configured_and_ready ), + .i_done ( control_to_lane[GROUP_SHIFT-1].data[0][0].done ), // use the last lane's data + .i_window_width ( control_to_lane[0].data[0][0].window_width ), + .i_window_height ( control_to_lane[0].data[0][0].window_height ), + .o_filter_valid ( ), + .o_filter ( filter_data_buf ), + .o_bias ( bias_data_buf ) + ); + + // + // Debug + // + dla_aux_depthwise_debug #( + .ARCH(ARCH) + ) dla_aux_depthwise_debug_inst ( + .clk (clk ), + .i_resetn(sclrn[RST_NUM_COPIES-1] ), + // + .i_config(debug_from_config ), + .i_group (debug_from_group ), + // + .i_raddr (i_debug_raddr ), + .i_raddr_valid(i_debug_raddr_valid), + .o_raddr (o_debug_raddr ), + .i_rdata (i_debug_rdata ), + .o_rdata (o_debug_rdata ), + .o_rdata_valid(o_debug_rdata_valid) + ); + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_dspba_delay_ver.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_dspba_delay_ver.sv new file mode 100644 index 0000000..424e208 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_dspba_delay_ver.sv @@ -0,0 +1,337 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +xIN8qv+WIHCSQGPVNDtfjiHnuFBztqjmiZ75PMZRZpB1g5UtmEJlkzL5ENW1eYGySwAnhzQlUIne +fuiLPaKKqxWBOpBLDQxHDdx8wlhBPsjOduTsGfuM15ihltf3ijbT1KaDqNobEL9uZ/TuEit2DrIY +Ib+gLExELklylyMhljQh9IxdSNh7AM5TgRZpegYlsdSYOrn2dfcH6gvW99d4/xRBLUDqdyzqJ6Fa +KWH77FLYCLNykteWBlH4oEk60t+wUP/dsGaikvcpA2nxEx6kH/uKfPXi20K8o4sAFLSd5ytMjYht +Vd4XOBOt432m12UYMAGkWRAfdykqBZiy4vtuvw== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 17984) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_float_16_to_float_32.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_float_16_to_float_32.sv new file mode 100644 index 0000000..f2f48f3 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_float_16_to_float_32.sv @@ -0,0 +1,343 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +cQeM21uM0Rt6M+2+HoiyAeixY/mJ/L7clKRtOQWaHHdd4WldVkxlSk8uEey0mE4z2mFO+qQq2Vrm +pE0NQUeocUy5Gz5bred1qbg8DY5nu6e8Dn7eRmAZFudcr9qxZuxpO7cs90d1KWL7hNFLtl74V1aE +mF45UUB1xyNyCBofNZTFl6qXCSw6w8ofWXEVWBaRIoD2WwXxlyOnNDBMv0aQe1YduvmnkRp6Kt5P +LdwvEQb773YRiOkZxOZl/8wyfSE4ADFh5qb0CbtFmOFiBfKvr1OzVeNt543iGm1RW73CcoECXPol +UeQOMaxK8c4DoVqpudrgITWSy0m9XJgOTxjOHg== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 18336) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_float_32_to_float_16.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_float_32_to_float_16.sv new file mode 100644 index 0000000..c9cc55f --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_float_32_to_float_16.sv @@ -0,0 +1,426 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +sO2DvKrMY6BQz4KaLPqA3FeoEyz99fTSmLMnTHt+YyTSdefuMtrZvBPkzmAcwxrgTNxqASzCVZOH +u165d3u6D6pZGGZ/GBq75dTcLr63NXsozOSBZ1i6umhZZRQglmagyu3JmMv3eO2ekWArjmAJsKe/ +IEF4PARhvVnHhr2PxCWcPD5a1meFPa3ZYe+zWVclgVG8EGdGdH3wpmhnMXhSjxjYrcJGBI/hFEKC +tnw1e5stIXvY72c210UAtZcyJO9gIc1PS2QYeh9O9qqbTg9v7/NJN4ya0IvDcLR/TCVgM/lYhMdG +cyixz6pjGUpByiKy1gZk/d+gdi0OvhQvEWcRrg== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 23056) +`pragma protect data_block +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 +Zy0CHm8H+DA+R20Lew9SZG7P7GwOKNroRqNH5w== +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_generic_debug_pkg.svh b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_generic_debug_pkg.svh new file mode 100644 index 0000000..82073ce --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_generic_debug_pkg.svh @@ -0,0 +1,63 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +IH5094/68EJG6zriJR8Xm9QGTgX7qbluyG06LIA+lwB6YIUqPwWAP60+FOxFcYrYjr0YvJGspUq7 +O58V+Na5DTf0/wfcAgIH1lYenROq8QrcoJ7ELtBBlmaTK6bWOVGt44yo8t91/4pAegQNZNqtP/Vm +AEwO9+EnoFFD+Qzh54CwiqYE0Ugn8ODxpm2ixQkuIz1msH0WBxPai0BaAdoINeTx4IWo/CFmnC1B +iQzGaSLo1m91JULyqZcixHiIhDiSH0fWeYhruwwtN/MlFMcr61+uRve0Pr0qj0J7X0xDk+V1vS8i +KfL6CGtrg86WZkE1HvZZIOpP9xTvpub8YP80mg== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 2368) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_generic_pkg.svh b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_generic_pkg.svh new file mode 100644 index 0000000..b5f1516 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_generic_pkg.svh @@ -0,0 +1,105 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +Z3WRACh+hlflj/FzIuixmOH8RzR0AHhcr8+KB6B+L6KoxSZhyVq4rQCMuaecIQlVkD77JxWEhSVG +NU8BTDd0y10jtqdxEacrmF/zbQPyVBQajO4Zf1djafZcIv9K1aUBiA93XaryDnNzLh4Mw6eGemhW +VZkIf8KmnLfrAYgcCjDreP8FefVRJfsdD+qLb9cqMPYgb/xxJEDwYWd+9AsfOaNGnYGbAOSl7BeK +2RWw5ApQd4H2/3mjZaUvRsR0PSIPJ9SaY/UfLu7FhVSHc1GpOXjL4zfgEhts21VRBH+qhBoWmhuC +yaNT8cbGkR/goh4SOy4OL2w8CcfLf7BkuO5OzA== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 4752) +`pragma protect data_block +jmNxCrSdveh187FvmeA0kJBxxebvlSahZi0OcsXS5uPNMZNjPQCpqQV389lfw97cntNd1leW3f5C +fmjVsNFbJJN1ni4G3oqesfApLNHAtibdrvEaBOZTTkoKly5zwLJTouR9weFRlqfnrsNKbAewNFgO +uuLxLC7hIpYG0FsuQVtkTN2iMSB4a9bnkSJXwNMFPRv3vBXhl+fQMWPj0qUQFcHNyIcx6eCYxrQs +DVUKi5+JEIVeMYZoJ4+n5lyqIGYLqyXhNRLulMrNMIwa0tQnkpkRDMt0ny0CPvan9ouyvqtmYqAV +bRAoQVTXLsyPM11lTJJ1W0TvBW0GvM6HXPPTCZ0/RtDyqiDYP+SRYrt6KizeZ50cggMVC0Lh4A13 +y/VumTQ88eWHGsg7V8NXHCdJxaPwnqDssVNw4vI7bse4P42+tEaAxd5lBKhJU9pHQU0ZBoyo3tmW +Ngy344CKUjzOqEo1O8z5+++xH71kmCJKV0nQ1cqH8iuBHwZ5LeSV4LfIR1K4gGW0H2hiMe8ryVmt +DwKyyScF4ehGflGhENZ8QHBa4O08O4pTIgE52jeRDsEMn92+uTwkF5pWMQb/0PEhJVbOJIGa+n7B +9o6vNfpNeJB9TeR/Er4e04w1eFpr0G/4DAGv9H8S8fPGtUV6loNoRnaeU7uEhX8iy/k4bQ33bVNP +u07GBc6oA8r06frcpmWUya4s0Dgu9DUybHhVqG0acXRBLEWPZln+06JKKx98Kc59zQKbibVdakuu +Xj6AnLI0B47gGRX95OUe6kAhGw20QXwapW/0G5FLXTQixQ0F0C2UBTYHQW0Ibgvf3N7sLw5NrX9l +1lnFos9quhrn2oPUijiLtxcMap60AP5n6xSxMAK0zL9W/Ym4YAMcqxjwaL/GxXwptc86f5qIvCZq +6GIxkdEtHzsFUWALe8k0ijuZOMpjD4i9XnP+TEKaZfMoHYV0WYm5T60TnX4LxFzgBUoJU5A6ja5R +1tr2mTnSDl8tME55emcRtEC5jKk83tNiuJSJQqFRZG+sdjd9LHKMUby0mt5pRR01FP0sWwucSmSg +xck4E7TzCDiaDsQaBzEEbI/d1tTmXHBnY4ZlIDLPHYXZRLJjvLz/UUdRJbjbcKDly1zPtAk71UYc +orTOPBrVeHRgCQodyaFz7+qmB3FGKeshfeECbRYt4Gq+ymVh8x4PyeFlw/v64bFlDheCAoEctQFV +O1yAy9vsM860FGh13jVbH591oHcPIf1d9VyLFrdYvJkuf+SPH5DVMwYPQGm8lygjgxmbe5Mri2OE +g38J/mOI6B6UuzQ8lIhHeY9MTomJS6Nd7rjL18FRmMtQlrsJKRTWBCX3A7qp8+r4hO9oOItSEPHn +ZGYo8WtnnjQaBq88tBCWNiLHep6c5pD346A0igYzwcnnQrTQol1nPWw41RDGoaUuIz2KHlmvHfAt +1rv1P4UEVIfWd5S6EjeGMByabU3awsMGnFONgszzJK7sw/gyD4B/YJy3OdwkA4RdZhwe+5bktG5O +YyPd5NTuxdh305k4MLRA36Y/JklxOH6+4wZS+SuZxVrRigBSCZXK49FgYF2YEgjWl1cTLUmZ20vc +DTUGQCeDIXdKccv0jDDUhmzPr/amfuwMpW6b6NXGyRO6QSpv3PFFxkDObxDmi/LirAYzN9SL9Qcu +W5mIqdJtQWaEl1B4Xmm0+qc/U7tQztaG3G3EWt3silivtcYx2lmjpkym2P1gybcH8s6Qac/dUmbr +Nr7ecJqJ/FKxuoEolNU+bBiufWQrJ0BnxO6uJl7B64wSsDndiUZl+iCxFQGCuMPTtPVPKkigXgqt +93WCZGS/fP40dYw5k4t5iFjp3+3hGvdACZf4PsZRNAcEx3xR1SNsCvHfublORNwK8SjOlqKhAD5B +hhlTNGKGq/HM6dDEKldnoXxWh7fKqGSQ2Fb4r5QQhXIz8n5qO+mAO7L4L8Oh3A0vu13vCmxfzP1q +yQRnhAVN7WMDh1uEc7RQbJSKP6svhHu+MRqEBifpqLmYFxNOXcCKIJcF90Do0aFfgQjtrs/aJ36M +4l/nWUNO9mtVVRS/qRZuJ2UAo19Jc9Jh+A7tc5rK6PQ9GI+uP2lIa8GzgL5wRABWULlRmG8Wscz/ +fYt8KAkJDYEAwXG7CPUhmfimHzkCwAEIeF262ofOzrCnhPpZS8TWE6otzx4xx7hIHUy230T7ad4A +ozQG/Ch5d0FayKFJ/ryLiYu5KpS00yuwXj4yJiNEnrBTMyt0gVQ7x1WC62pXfXq9h3SNyXKPdCA0 +2cJGuXu42Ww7EOKU+iA2h+i2i4qKXCJmQeSrC7aIO63MzOnGfsgwDw8VH+H+S9X1LBelg5S4SCNd +LA/ILFCbM7RPXiBHoQgX+Gqsd9GNraTUz1Aiug498rmSkl2kA++KZNHoN02C3GYKjZMI8zCk55dK +X7uPwKKcGYI1+xKR9+UktCTWn357SQZO5iyTi/ro5qYZMrKOV48Hus1dJ0+PNtvPZ5mMjNv57m+R +/GtoVcpgFN4jlSjbobMYDlT7sTCx2EbXNfMWv1V2Pd1ieMwDMFHF7gWLuwiLfMTl5+Eq0Bb/wFab +h4u8U2p9Jq8ZHY2gAwawkee+e4RJyMNboHMzxy2QN1YvIVg+hHOM5YtjeAhENXbl6clyJDX2KTxu +yfmWOqYjUs8EDB1RxNh+88AdIMvdlorn5UtFwWUGmXEaZ9YxfYPuRNS0MdDrcqpXw0gHneUDqOJe +p8GdPnQY2Vt3TtgfU2BY07sw4YNNgQ6Q6X2+zDCfldunVx/RtazZ+PT9BJIRwwGxDzr8VsiCq9N+ +bLYsLfKCdG9mCyZN+JvfXvFT3Cy1xaOnxy976cZrX/8fn4RDELBsE+ihmzH1PS2daiQJyzmN+n73 +MYtmpb3RVAWXKce9/hDKqzrXgN4SQMUJ8p8C/PKwm+4iByelYUQpmR+F3Q/7nGUA8ypGe6OzvtdZ +xUbNAb2IsTeZAzT9QUqu3jtrOn7Bf2YHCv6ox7tZ7ulWHaTHdnhLu1GYYHykMgYklGd2HDW2wodP +7OOUyvWVeel6ISqlF85k5FvGAji+OURC5jWekFkJui4vOzJjs0Vh8jTfHc8r7GJmWqkGQ8SFvwmU +oL8lWICopQ6bSjZp6lLURcna2iehYu1lPFxEzLvdPw4QFoKX4bZgqrjm+Mg4vL2YRuqdBDySgBrH +BwjgM8ljUGVKe3tC060JqiE9oiEJ4XgRtpl4N2zlWZqxGurDikWbircbyKnnRPiVr0+WRfIVTi9i +++xK7c3QWIiNeexgz3Po2n9OdTOQxXLUy9ZGu96iPb6161hTcp8NDANCI1lpRd0L4hEB3Hj+PKfr +X9WmfYstJu/++YhCLEhkbg/kGzNoNB7EAjl+ym0x86eZgUDnzyw2bJmSMI260ckoabH2FHIFqu9K +R2Jf0zOdlOnj9N42sgL0CiZXNBFu7M/i5dAuwFwqegDPJ2Vd5uWI7axgjxioW6K5w+zGjQwJ8cfy +iAcdeMha31c2Dm//v/lZos5YppSgNy/DPpWeD3cKdD319dWaRglueO3hBM7FEVE2bsdlYRXeQC+h +JBskN3nVU+AESml6/3EK3wJypQLzyy+IsSXvZWwBkwRbhifhtrRASh3NBEwE/j5oYyTw+oK0j7ME +7MagQA8EhyuVebWa6RJ/P77U8QbemReWKhA8jQO0JnESsOEfnJAFD/9k4XdbXXa/2fo4ZuOMmxt1 +RvXZ7gn8tg2wgizLYRaJqmpXgivFAAvHz0jp+4mZXoVzmmpxuxVKr0qd4vwOH/6AkAetRG/ry5Ud +Vj8vVX/xjd4RkOxywmzXCkvSCqrJh0fTadpWq7ovzYnB4clWVcEdQFsnRu4IXLdGLWF5lrYwsSPv +WshXztKg9VdWs+JQ82sg6MV3REhAX5bFJW2E1SWqpGFTLTelpDk1ut3GM4VWQ7ShBdKTaFuZPI/2 +IgGn3gy7KKwlUp/jAbnaBRvRsq+RfU2AIdoU6pIyvxLk7CZoZLkoAqKXA5tAxoVEyIGoFjVS4wk+ +Pj9Ehi6Z5BjsKYULZClQeNusqhRHFGvUXJGcC6AKN51o2s3hSB7CK8RlW0ioJIQH9wGCfiXhAqFa +FcidbH7lsxR4eKMDxsetpujhWZO/pd7VYTxzInmVMicHofnTGrUslCNY01HAE7EzyhdzudcyRAvw +bWYATHv6mf0CCZbYEKfjQwk9bgF5lOW6I5wOXd+aacl25u+H+TpAVE1x5n6vhV9UFCu83DSFzJEv +3DWGXimmBdrZlApk6kdUjzP+QhUGGZhGMfiQpPqlRJusgLfv9d1JBueolI9gqTcME7tcD9b01q4t +ZiZXCOxUkwjluqokPKExM1CluxfTtU2FMOJHxOglCeNdEROtRIreOq8GtyjkFxcV/9UDQZQdhmD5 +G1WnEaDv1fwlIo2bwrA0mBHnrKcnoSYJAHX2+jnYP75QmS4Zr/M2e+8mNvLlarD+CG/v+LsHuFN9 +4vmadlTwoTo/6Z8rUFWE9xixiy7ZrGU45ANsrE1jRBW0gAQhTVo/1g/j9g3qX/vO4KO/ycXX6Rg9 +KJ/7ows2t7Wr2zQbycKM0R+/jmHQ8WZVN6wHfLDnm9ieNuupqy6cypAlg9AfKlyfT/wxmiF4lQL6 +cbWF5XDXFt+TK0fp/+g8d2/PPw2lItbf6wN5wVAj4FYVdpBNr9GGuztE/y5d15anat4Z/uzIaBQD +VNCMjUzvRTkyoOAxYQ2qpvc7Z6vW/LXasW7ESkXm1mT8V558O4bOfK+bDnrnKmBGIag51OX2mqxh +lgIF/ZJIX3evd5L+tVQZj8zdxfSFI9l1PhmlNHyRS/+3EXAKxnhMizKr75xD78wGIC1hCuo0D9eR ++UQZi9GWXtiqCfqJZcoFAt4CrX7Nm7QrVCqEoNgdGBLRF3K7hSp0/LOyfSsAlIJLIitIHKavuAZb +Ws91ciVu3SDclOg+Pi2khqimn2bbYTDJ94qTtfuZ8KrN3NyF/5LZ2HDT0p3qd6OOk1DKbeROaFo/ +XhuMNg917AM21Cm5Rkl027u7RHEKaV3q4yWQx3koj2hLXTNNADyaYHprJGtMcKiwQ4MdTAdaBEQc +yJHzN+nqRPj8NHaPll0qEb+RPqscGasXM5RNinResEZHfUHcS1+vN8W6WIGtTOoYS0r8R9s8wu5r +D2s4ZmCBEQjMQ2tbCsPv35l1m8WYiCZv81gTV31Q+YxPaQOkYA8/+CPFHeNaKeH4U15DfR9Esr0i +uzFBzMefK8i2LbCWXaJPMrRk+2JWe099XfhyKJfh+HOdjRg8z2S7LursrkDYKrFC+SHM5w0FRswF +DWRBWzsiaFOT68/vq+zFIz+NHNM2SGGY9ypgocls/5nIwR+yWMpKmCpe1IoMdXmFRUbwAAExafGc +Dk1dtl5ZV8l6/lv1zyG6lBcmy2d0E+N4hcImcplef5+Zen377nT/6C5KO4zSeBhxowJVy29wkfiR +3khpPu+5eqERQt/46JmOTsFyW5ykaEe9uY1GjNn+pFmJo+ES9cwmqb2ZqxO/DEFfLh75VIs40gQV +3XnybtKdgPN1tOTGIgwpfBciz6WIWSelYp9WZ7HTvxqwgJxQPPNtPRYQF3iP7PbY6y3lM0haehVO +3oskIboXoGKCq3uEf0zBEfvaxmE1w5ZlXLv/slT+YFtQVqFRNxj5uCPBOVbyFxJ8eah7+gJc3IPq +vyTyUnXclwG2oRROrDsuGemL6avdrwWI4PZY9v1GLd6l4891g92FofoJxiQgTZ9WsfRxOpEYD6Vb +1MIoEZMZhBuQN+fi88pShzkryXYkQrsWG6bXkLDDlVVmPBWOEUFpS/IdGdSpVWfzo1gdZ0aKqIcd +rDevhdhvZfF+nVLTCMlaCMtKdpkUgJu+0z/1RoI59aLfwkUqMif3OmYg+UsMgVmGuJxUs4nntw5z +pSNQG/VlLKaVh1cjsKPTgZaiDYvaraZf+nNBZOrr/D6AKI3rGt0mMlkRJFBIxu3/Q2YfUKBAfRsd +iMLwNnGFbPNxTsNBN14hxyYdLeEAu+XibKNaYcBnfGWNpYiI0fj4NOrHYyor4G8CHM5p+sV0Kxo6 +2F3psZXLlndrI2QsBQVNgdxwSFZTCDTyxTfZZEDY6yZfIRk5HADS0mBhvFXYwwMBzLnjSSOygljT +NToSkxpweBO2URvdpCLrQuWiMUvWoUgFzCy4/+a8MClUKsVKTNN6I9xdsyUlUbtUe6MU0td6ot+d +c6Kl7nsI186UPPX1oKLCIFcvf8uo7j2qvs5de9JGEcq1hTIyyIwkXkfNGZ1B8dmG6wPfGy8ly3iM +NtG0QdrhjuqO84V1lBe2+WfOx8hF +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_pool_config_decoder.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_pool_config_decoder.sv new file mode 100644 index 0000000..3aef86c --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_pool_config_decoder.sv @@ -0,0 +1,114 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +u0aeSX3T4WqsuiqfuVI5hDlrpd7m7/YZ8e5vU/EGSXRFpaKHpjKa8+2jOwhsX75wWmQNu7gfwa3K +mIXZP8fZOzP6NPElePN1xIg/EXSK52pr7WZtyXNeYvC6dJ2YRyqSWYTCgx9ImKsDrTTzDLpJ2ICC +hCPO23rw+mScytIyjb4YBwHGOJCaZsSt3TDQ64M+R9WNTk+unbX6rwohrJhpcXguM/i+y0dW3zEt +MXo+j+4gfrgA/tbcKm9muPhfqZDmRo2ZpmtxKFwh8WZh3RJX05EG+PRHB6/Uh7W7uipFKjX7T6/k +ZTanEjKpJBUIkpudsIRnUPCr0gVwta2+C7rnfw== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 5296) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_pool_control.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_pool_control.sv new file mode 100644 index 0000000..8f93bd2 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_pool_control.sv @@ -0,0 +1,315 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +lzJg6EA5BnJgbKGgUcTYQV5kNGG8oliMS8qlcI84PFhfyTlxkpNEvxf33MJKwwkIOgnVzaqobHU7 +lZyAYEzLONNDShie5WUa+sdDMKcZCtUSHmn6V2FIVmRGkluG8BG/e68Ghd/b1wEWAz2TcfwEhT68 +UBaKpDIUJfeJ7Xy3bF24s93FmPksBE7DVwuRzT1dPHph0vnkuMuCcmcz4/VbSno5o10sEX6aviaO +28XXWKJGhkghSylZopgFn51WZfv67F/VaN5H2xEaPmAsKmpKzhnVqDnTE3w3F8HZZ3tIl40t2QJj +6RpIlCEiRIHUm88M/kTXCKvnA50dmL5uPN5nWA== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 16736) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_pool_core.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_pool_core.sv new file mode 100644 index 0000000..0f87427 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_pool_core.sv @@ -0,0 +1,276 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +VRSwdtvSi8hf2Igxromk53h0QH5ilrPrfihA6Pz3iZWs2IbXNN+fuOuZyO6DRbHd7F6vVUezEol7 +p7ls801/PT8OYbIvBDUT0jbIvCvXnE/OGFhZmaEHVQZYALogl5s9xE8NyEWQs2+836Q3xlotRwF1 +HJrBvwiTOWgRwXfllpnckPamR3YpcQwNO3k+5c2m99fmKafmy6hjVGGB0AicQHAm9Rc85FZECvFa +N4EtE9nFsKMvE6q/kKus601dkLFNj75IHNJimC8MGn/lkw/LHjk7nodSAGr6a+Rl51tA1bIAZT4L +XgB/vaGUf/Qf6EjG0mzYX2CW30asA/QGj0XDuw== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 14480) +`pragma protect data_block +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 +wRo= +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_pool_debug.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_pool_debug.sv new file mode 100644 index 0000000..8de1ae1 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_pool_debug.sv @@ -0,0 +1,66 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +P+oRuWVfu4EvX2W9OeFtRH6mmwlhPEjgZy42bVfxBpZwDuYsumuQT4nzLgmzb5bii02RfpYhXSfF +z2a67eKfn9+CnET6q0/k6SNp7GDzAUhJ3gvVRrqDW/SyYaZO9qNHksb5VqYhDCL3054u3WsEGh7I +SX8U7Ia+RLBW6oUD01X6TVFdqIcK/4LO47TQmHc9bIwyMGj2VTfxp3u+iWZ5MyM7AiofvfV7cWDq +yTysI8M3DcY7nIFuFJHq9+EXtGl1/FLBYBw0zneDJghzjL4Bo0XnBIKDkfyA4ktCm8FZA7L5k6vb ++3zajNt/heSuHdSlW0o/z5v5R4nwIcNAx875Yg== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 2560) +`pragma protect data_block +Rw/4EHVpZwpkNejMcP+PP+IFiBPemI+VZD0EQUeew/fabtyYM1lhSFOJq6KSFtVrCU7H3ngqmHVY +oiU5vOX7YlpPEvruW7Bd4l9rCFwguQ3cT0z4bpIGwZuGmv0N7Z16rAtORHrX7QZKKsYOzDYR73fY +11Dq1ypKZ8mP5y4pQHHgOiQKUo9xGKhy8HkLCqPhtkj/GKiRfJB8WT2zdD5fAQ1mJ7PID1aamQah +Uc9MeOV2Lf9bzLw4lxKoAe8MHl3q4MYX9UrLkftmQRPnbLD/SFA2AdhXvrTbK+HDzglvSBtc9VLp +C75TofOOyMlL0BnGIlWuWlLlkZhpy/pdDakoEZ0ag3p6X/RHCVbngI3XyEyvhjX21JvPuQsFP1wi +OgGWzXN+GeNoKrb7dSF4gdagqM0uRxu80LBUiAb+F++VRkbvcbSRPTNNiscj4/NBDVz82TukRNbc +BPcpJ4vaKfmwPSoqA4A3D23uNqY+koGsK6iefQTe5AfcpJs6fcIempl6EdY0jGKHkEdLPPldgMt3 +ijAUsAgaIq5J7bht4jSbTysuEErrchXkZj56KLLDaCpDmuBxthOLg9Qspv1p2Q8dNxajgSfcVy2M +jQbEYtjsYlVOzdYBSFvM8nvFWCCbQnwXpUyB7xeHlT4IDLBIa3bvkJDzEaf4JoKnG2KlOdHorIqJ +xlONnn4/oMWgHzOJp31/hQ4IxyjdvUwua0+5TlcMfrP+18pbOgwB9X1XqHZuYU/SbydGKGuFFZyY +Rc+ucY565co2U3qwa1DMuvSAMpbNVbI+Y0/KJApF/IK1GS4momu4zFYv/yLlRHmGPiuIVCrHfb7x +GkrQ3SlQ80CeNMe54MH6CeRYD8kwASZKKJbC6hyS/0kqzXRqDqKeQ1wuises/A4yYva7nQ73gGEM +f3Op9Nfkue1HMPUWCd0yrGMR0gPlRytNPEUIlRw0cZfox5nXqbUR/Yj6YDMRUDLcQJ0R3uexF1qk +1bsVzcwE/dMZ/Jt8KAbIdJvJycMlK3A38ZAQwEwsQUYMR5U/DSgPG3kGiH+TpV3UFmQwtFw+qyfj +9xGTT9BI3U1iBgOp7kgao1xxqDxXinGuIHgBHKb9peqB8IdpmZKY1Uy/6mmE2mdfQ1HVqDv4MWzk +JOsdBmG9mR5ipSj7JSCacoL+4wfVdH3O+guarIO4IheOCNGceuCFszQ7Om+0X5XR7iYkaTVM3Y/0 +dOM2iFo9jaj7l6knmEOBWXtBkX5Lta95TmT0hPfUudGFvmTn14G/2zgpZF5OAiUMFo0AB3/9O8P3 +2ol8CvcZsyYJ6RUgJcBcN43eGEqRovueZ/+5+IwfzdYd7ybjPgei4/KKtVVgLoZWksXvT8rsS/2y ++OUPTMBDYjvn1rEYePTFIGSRYM3v9WQ25iO3N5GXOVK7hf8Owuyo+szicY2gRKFrtcRUsz9Ywqjr +ops/LujWAOmXIJkeop/KdXNeVZ3E+TMD4IBkBoCLCw3KsSYKpSC/4yxd+hiDEUfIY7np3RlCLopB +pJwuGOKkQI43Vtd8172yKnDgaRKkOsKWikv8RtEmSl3BwGg1qevjhtK7wJtiHlvyckjreVHy6EVh +Uqe70LiJnd0rvZmk0D4b1WJZoaxmB0wlnXPoTd1nT/plfxDQ3TfvgDbYLhuxnK3Gkc/mgnAbjJDi +1mJHl5B5m6u3fMQUd/RRemwD87wyY2R1CROpmq2Bty+g96KeKR5YXlpOFnZoeXv9hxKxALc2Cp1H +/C+1wq8cwMlSRFN5+ElSPUjW1M/TgOT1zmJBG4Ahnf64nNPHJzSxeXn9tu3lBwb1Rje1JedNYZfB +BPKNlwJZa5tkQ9p0iLb6A88U/Wh0TR+WY7f2wOEtur2okGEDFfcMVEOGjbOdLL6I2GG8N5jS2+Zj +uudFaY/cI8rOfOyRXePJOwVoTXaZSyCZx71ghogelUGSRS2pEd0gDTx+C/tToHKYRzZESXIbayRx +d58Kow8W1QsZlYQRaDptz/DhbPoPmG3S0Ykr011wIqZuS1IAN+2c4SHiqANryeUjvqKuvKMqkL8P +oPQZ7wy1SKjBik6euViYd+IwFm/dTcgJNhMbKsRK7eQe3mZSb43mXxpvCbhR1QMw1NBljCU2grG2 ++fD/SdgNavB/uogHJiPpOIW18ZNbls92N0BN4+1k8h4ddKhbwuBWsXhI2ZLDBVuvxYxqXcQuziTP +FdSxqqc2gAQ4TBaEFhIxN3eP0ajmw4JGtEJsgqGLSxqxPEig8zVlJgVUKBE8ri+BuE795u3Hd7HH +OyJLwkh21c65e7/9Bzwr67QhyhtEP/1T3A8ZB9eczkBS5RNyRN5ot+kAnS9umI2gZ2wT7cSKpnDV +3+pi+L/NPInJCImt+yrKRTW92piq3HrB+TKD8XSb8mnckUi6GPKeCCT3PGyijMv6sbULi+KhA9yX +aVi4uU347eZS78pXdHkfI0JvUW0cEHI1ujvxAvpwNL5Ca72jxB346IK1QbQ8StnK9p71G2f//+VB +SAJRo9bJWqNHTBsZ+Tff/7Wbkj0yWCP3cQudEWHXvdwEbWM2DFMpXBn4qJrcX6ek99jMR6b6PGzT +j5wV2+VFxeQ7PS6PLNUwQobWLkC473ayf+1Mh/GTcaj0NsyutvWFJ0rcQFv3y9rWquPG6GCqB+3d +FYj7jdqpvOpSjmNYpDci8pcFIxfMy4e5ISqtcaEgQ7Vld8scWN/y8fsim8kbyXwg+wgMkgk7LRpA +CeSH6KVKJXU5WaU+nwZehZYJ7dVyF7HOrZoan99IrA1gVxQOdj0GNNx5MYFzjFm7GLhM2IDBi3Xn +cb4lKfvmbLQhDOeVgMOW5UvtOa0SSkayQe/YV5xV2PKm1lFUEfP6qdhd2C/meYuw7/GDbvKcuu41 +8egnbm95mr5fRC7kOfDnAEKabxDA0dteYkC3sIMrWteemPxFj0TQs3iHXh0ljxfk9btQF02xnvIZ +RfK8bas1Hn3FLRZc2gyRESsys+feZuJDsseW8iCs/Io55q9/ExTa+cc0aJeexKC7HVfZ42NS/C8j +6h6kzntDIbccc17zbfjDxMLjjk6ZeMDmDZFy+6ol3V9BY45gM9EjFlXZCO0FMKN8t7QCgGqEHPTn +3SVI1DqM06DCTWfWlwjiOJL3ATsK2D4kW8qwk0GSx2ZVyF8luhtapN4mvQz9DagRXzDTEBp45InU +gGa/BCS7NlsMpZGQnmlkyZe9ds/fSNoZbkfwCID5YXACiza1pppl+C3v7oXMTEkHnom+Eaj4MVqN +cs6ULVtTK5U7hsCBH2FyLeJnyFgsZHkuu+ESCT+vNE1vfjeGeUcIYqXaV1/iat/Rp+VLoDUarhAg +ozLiqTwqTWUXrzSWdADVIRCWxfWqtaD7m/bzJaN5mLICi7SarFKuLF+OZmhE2doBBtszhw== +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_pool_group.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_pool_group.sv new file mode 100644 index 0000000..fcda50d --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_pool_group.sv @@ -0,0 +1,170 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +mcA6gUa8cLS6xaiz+xk7QcnYMEsZD1vmlSoqhPGv7uNCPVpvmvl0JITdEITO2PxVsfCSbLBgGI6D +iPy74zecq7innjH6SNI2N5tKuVtpprVu4ii/ujlGPOrXvCy9tY+czXWuoJxNETGIP4AQem+kdbq8 +rbYTPJlEUcPUXIQXsruEjw2Z3/zMU6BvoMBGiIE6gFkHekwrBPtVCAua2gVBSwGnNWNWJqvSAl8c +vJPtHXnyp6vOo135kDQPM3yKIMKJBHB1dM3m2J2BNkxfXE8+DfVSSYFf8W4hyGqPvWfApE+B8d6b +h3VKDYUI6K8Mjjzd9VhKTSDMiWeoylUZU1YU7g== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 8480) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_pool_if.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_pool_if.sv new file mode 100644 index 0000000..31e03ea --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_pool_if.sv @@ -0,0 +1,87 @@ +// Copyright 2021-2021 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +// Port structure from config to control +interface pool_config_to_control_if #( + dla_aux_pool_pkg::aux_special_params_t special_params, + dla_interface_pkg::aux_data_pack_params_t data_pack_params, + int DIM1 = 1, + int DIM2 = 1 +); +// ------------------------------ START EDITING ------------------------------ + localparam TILE_COUNT = data_pack_params.GROUP_SIZE * data_pack_params.GROUP_NUM; + localparam CONFIG_ID_BITS = special_params.CONFIG_ID_WIDTH ; + localparam WINDOW_BITS_VERTICAL = $clog2(special_params.MAX_WINDOW_HEIGHT + 1); + localparam WINDOW_BITS_HORIZONTAL = $clog2(special_params.MAX_WINDOW_WIDTH + 1); + localparam STRIDE_BITS_VERTICAL = $clog2(special_params.MAX_STRIDE_VERTICAL + 1); + localparam STRIDE_BITS_HORIZONTAL = $clog2(special_params.MAX_STRIDE_HORIZONTAL + 1); + localparam TILE_BITS_VERTICAL = $clog2(special_params.MAX_TILE_HEIGHT + 1); + localparam TILE_BITS_HORIZONTAL = $clog2(special_params.MAX_TILE_WIDTH + 1); + localparam TILE_BITS_DEPTHWISE = $clog2(special_params.MAX_TILE_CHANNELS + 1); + localparam ELEMENT_BITS = data_pack_params.ELEMENT_BITS ; +// ------------------------------ END EDITING ------------------------------ + + typedef struct packed { +// ------------------------------ START EDITING ------------------------------ + logic configured ; + // + logic padding_ignore ; + logic [ 1:0] padding_mode ; + logic [ ELEMENT_BITS-1:0] padding_constant ; + logic [TILE_COUNT-1:0] [ TILE_BITS_HORIZONTAL-1:0] tile_horizontal_end ; + logic [TILE_COUNT-1:0] [ TILE_BITS_HORIZONTAL-1:0] tile_horizontal_start; + logic [TILE_COUNT-1:0] [ TILE_BITS_VERTICAL-1:0] tile_vertical_end ; + logic [TILE_COUNT-1:0] [ TILE_BITS_VERTICAL-1:0] tile_vertical_start ; + logic [ TILE_BITS_DEPTHWISE-1:0] tile_channels ; + logic [ TILE_BITS_HORIZONTAL-1:0] tile_width ; + logic [ TILE_BITS_VERTICAL-1:0] tile_height ; + logic [STRIDE_BITS_HORIZONTAL-1:0] stride_horizontal ; + logic [ STRIDE_BITS_VERTICAL-1:0] stride_vertical ; + logic [WINDOW_BITS_HORIZONTAL-1:0] window_width ; + logic [ WINDOW_BITS_VERTICAL-1:0] window_height ; + logic [ CONFIG_ID_BITS-1:0] config_id ; +// ------------------------------ END EDITING ------------------------------ + } Type; + Type data [DIM1][DIM2]; + modport sender (output data); + modport receiver (input data); +endinterface + +// Port structure from control to lane(s) +interface pool_control_to_lane_if #( + dla_aux_pool_pkg::aux_special_params_t special_params, + dla_interface_pkg::aux_data_pack_params_t data_pack_params, + int DIM1 = 1, + int DIM2 = 1 +); + localparam TILE_COUNT = data_pack_params.GROUP_SIZE * data_pack_params.GROUP_NUM; + typedef struct packed { + // only the handshake signal 'ready' is fixed in this structure, which is used by control to + // signal that the core is not stalled + logic ready; +// ------------------------------ START EDITING ------------------------------ + logic line_buff_flush; + logic line_buff_wait_fill; + logic is_padding_zone_vert; + logic is_padding_zone_horiz; + logic [TILE_COUNT-1:0] [special_params.MAX_WINDOW_HEIGHT-1:0] en_pad_nan_vert ; + logic [TILE_COUNT-1:0] [special_params.MAX_WINDOW_HEIGHT-1:0] en_pad_zero_vert ; + logic [TILE_COUNT-1:0] [special_params.MAX_WINDOW_WIDTH -1:0] en_pad_nan_horiz ; + logic [TILE_COUNT-1:0] [special_params.MAX_WINDOW_WIDTH -1:0] en_pad_zero_horiz; + logic stride_valid; +// ------------------------------ END EDITING ------------------------------ + } Type; + Type data [DIM1][DIM2]; + modport sender (output data); + modport receiver (input data); +endinterface diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_pool_input_buffer.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_pool_input_buffer.sv new file mode 100644 index 0000000..afda29c --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_pool_input_buffer.sv @@ -0,0 +1,107 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +hQEpf1bLTvsw38MPxEyxssXqgu1hLv4EE0akN9FspNXgvFyOgSL1XpmNp4cPWvrw6OPJhPLhpTAt +F/G5ikPiUjFIDEE2DYi2Ly5t7IRWUmWDXldg+/NKLNwxd+0XTI7PKuu8rVRzWKfbcrE/hHLHkA08 +CUcOkneuj5ym0RoeCDm/iYT8yaXjRhdzHMz+cuG66+ogUND+8N/j6Oc7t8XzCvkhc9IQ8afdnoX9 +q/cVbZnDGSwSwG/JSq5+5doNMOeV9DueUed85yXiQ8gCHE+YcD3oExGP2jznfQ1AtIZf+P7llxiZ +ToL7hHOQRHoVUloC+o1t2cP8MlaNXUMTs/0jCg== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 4896) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_pool_lane.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_pool_lane.sv new file mode 100644 index 0000000..b976222 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_pool_lane.sv @@ -0,0 +1,158 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +tbp1p4or2XqXTVR3lDxYTkDmH70W8hBoRME0TzJ0bQATLDKdlaAtmnp7jwEqAHJ2WRGennjM+e/R +BsmJyyVP6Yie2HkuMlCVQFaFXJ2akyOiQB25iIIdp0UUiEPFlP7CQ8pMV9yvxHv6Jkx18MSO4tFf +t8fEGXvKUmbffqv6Q0RTBQo1a0IyqSfVeMkz2LGrgftKmEmVn8fujYXuR8H++n5Np+b9j2PsciRQ +Q/kjvOZ1VNRVqyQljG6/iZfeS2uNFnp4iIXbsqXV3wJwPGY0tWzDiHzHiSS8Xi4Vr+HyCBPl5k5P +nLsw1cMt/gEKSP+PdZrKAIgIm0vgBtPvDNfL1g== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 7776) +`pragma protect data_block +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 +ukXsie+WEL8taJ7fQEdNZUt0u6ayWzfY +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_pool_pipeline_stage.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_pool_pipeline_stage.sv new file mode 100644 index 0000000..0417be4 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_pool_pipeline_stage.sv @@ -0,0 +1,96 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +cT9oYG5mDqr9T3VovuQAGXjg/M+eTCUhUxEMGM+bfrIQlZpWd5MEvkRy8VNbORMLlQu5c/jt0q1S +F4J2vMcbb8XbYObZfRXVK0cNUINADfsQBBEYTZmYzySlmDdw2VyKOl5HKZL/4bav+w3ejt3xIaMg +bj1hByBOcW9B3qaoHBAO9inr5i3p9zwWQ2sXP9U9oeoBcrKLpFd5ok9+5qiuZEliF1tEVZ0w1Nes +YrCnsWhWocnd0M7rcM2Hr6oT7gAw4ggORvg0w9EBfyZcz7qyanOnwUypSot31MQYwmPNAoPQvAUH +SWhjD6DzGYOfcmFgTW8dH9bW4oJr0ta9zLZtFg== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 4272) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_pool_pkg.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_pool_pkg.sv new file mode 100644 index 0000000..ed38f8a --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_pool_pkg.sv @@ -0,0 +1,140 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +Oslx4KIEkY0uGxcALBO0pfgX1QpYzSjAZJQL94Yg9Ht1Nz1PopSqPwlKLgbl/Qd+GI4TAjcstSwk +cgEWoKVYNpRcmyOyNqk/Srsgmfjq7gctsQYwS66IxVUGL0J06IjqeODy01/REwPuZE1s5HNKWZFx +OLKDRO7frlXaoEG5xvcGdgZ1X7XNLbLGVJVw49rvxZAvP47kUC2KXF69Q+n/oM+/UxEMfSmd9W7J +TShXI6mUAWg+Zh7/hyTv1biILKWWACgmzOVVD0pNrl6kjkTP0f6nVKV7Vt4gWd9vbSOhGnh/3aCl +PBW40BoqaYqm8tKwoM4WWxWtKcW5WYuTCYObhg== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 6768) +`pragma protect data_block +4oN96f8P5zYxNaMvcBgXnFFNik+9kTyb7MpwvcY54tVMHgmgPnZP6Mq9/DmlLBvUgP2b+rMaFk9h +CbMaN5gCONC8ZotLEWfFPYK/scc1+PiLNeQe82PgD9mS3BW24ousw3W768yEm/mcM7CDJjG0IxUN +55m4L9XJ9KACwJXu0HFHLpQPL4Pz2adt78Wnu4tohdY9aw+mMuW6en8FWOMQj2GXgI9IuzhObKGA +MaYRUgX+91Hwde8AaOYFIiv2VFZqD3uqb0Tx2pc9OzxV+IJyIKBNYNPTyzfW66ElfoCeVkVsVD3U +LIaxHwIOIT6mJf2JsLZkMepIk09jQAh6iA0PEPQShnoqWB+z+OMSTF9vlDtSZz+UW7/wcfc/P106 +QUUNrBdcdNGgusABA1pG1TRZQKNYL0lnIulLazwc41b+lAdQwUTm+lHpBxNeIwbknz/ZNbkVPXcS +1tnXJ9TTzi0i+EEvMiMUL2VUVvhdXDWPYnetxAkhk4qYiOnjtRYOhZoWwEkX+QoaZr2/menCaYQp +JLzLORNCZNvey3Rxn72CTkxQzfR8Qdl5gt/QpCW3YTed5oZV6pTLy4Ppr0I69AQ+pWIdp2Md/HIm +bBwTGwbgi3FIbVA7Ob+zTnA6W+oDG+ePjzumX5DvhLLfkLdM5wFS0RBg6lp+/f9h6/RJUxbutGJV +sjfgywVqdHhFaafQseLnzN/It7snClozX7DfyDtp7rsaa8TPZ1tc4CBa4gKBIk5oud/CUXOFADOU +kSAsfaVAAtsBZT+w/zDaFzHprmb48I8Xqa753ZMBVe7s5L59gW/CK5+YGk7gebKNDV07uiwYMn/4 +/muCZMsUV4qydwSbTVjF1S1Get8Mp9R3R1wtZJQ6rDe3qmQ+d3vcgDU+ktqUqb5oNbx8Ss+qeNGp +Nxj05fY6LCk+baYqzT6Cn557/kHqDIpsDIotNiBSQoY0mYU1E1j8MNEPPJv46hRVZDlYvtcqRFVi +YVZ+4CXqe78uxTcZzWZD5nJRqNivYovAccYuaNslko9MEWhbxdfGxeKFyOK7JMVwEaYhDhl/jS9B +7U6hjGHBKy0/v2PF9PXktcrjhjSEYl4AGgZg69rVO2af1R5HNXxcpt+vx7fXd7+dk19znCUQSixY +eSmTJJw7iyCuEVl/ueggJ7hy1/Og3gNEFoy44/FG/kBzVH4AjnIO3QLbWFaa7oDstZDL8MheRkFa +gbcVsNfqha32eSQwNWq3L4hz09Oyw349Pdx8lF22Q4NmqmcXHegjRiaUhfqCFtMNM1A/cQ2XbeMt +3DZBYW/RNN+QhBJGMzYVF23dgzU9icCdV9p/cndHQPuEiMtCbT6plytRNMSZ2UDflvVxIGT/dviu +9qGICp33N0bVMxH3GIGXefOn58h/moYZ69tTOH4hD1oOhvqTFcN/zN54UEQWvspi5CfwsHARdUwO +upiRyLmbzxU2ArUEoBR4ew7Js+k/y5JG5EJjVnN8GndhUGfaTDCM4O9PW5Q42jbyBF0YK5gGWHTX +RW4iQ+mCQMZnOBX705VPLpcCnGhEv+5hn5YLTew1GDAxNlldsuSGHXYmeU5EXAlGF/ofJ3YgPvQ8 +MvMf8go9FqTlvCt1sCExW2lWmWmS+0QemCcWGUHVp3iU86FZCfqjZdCFKE3mkzHFSsm8XqrVozc/ +KWcWw2PIWyQWHn5WlvjVVvGSs19BgasBFZsQkVwO3HyDrKP82t7ev2Xi1LabOPGzyvN7BUsuaD59 +yN6ImNna7FnmME8VcVJe9FPahJ6kheyvrV4mdAIWrHCqLbPCWykHK7libQtBYdgd7bwsfzoby9Ds +67K8kChjPFbdLrZwUhhyJlQnwVepzsIGBSOmWG8599cGGEwqfTszyKbaOnvLuLYu0ty3UOoVwci7 +6qFFdbfABqcvzJcg1YgL0SFMP0heTjRpc8jWPsPO2CeCbVk42tyAoQ2byLf+M7KZeWAz7i0FYfnH +OYmUnTu0Z2h5KBswk5xgiqpej7ZXsmxHYbqW9WLOleLga0QcDgIJhxmrAneDROYDpwqfnYdBfQnj +Fgmb/Gq6g1fcQAKHaP5t1NRO/uA39VfLprbU3hCr4brF3sj1ST2hrwrJvi9N8t9Yr8JfTvK+znRR +azW5IF0Ie3inUq3S8q1UWPyN6EhXdJfAuvAsSkFmhz0u1g/p3q7Oiqe62T1AwejoiOMbQrCOF/5P +FtRSLX3o+7Eb28KiyanVZEUJi0b0wry1eeYSE8+eEG/nDD9eNf6pFSrgSP7aLcLr2W9hepY+8z0O +fL5vExQRG7IT1Xa9oRaZVE/nGeS43502qqHR0vbK4QfqutIHRDd/DXD6U0hqCMHtyLYEoJaWMMRm +1EzTivo3tTEUUBBfEK3BZBsyFJ07dWVoxo58zDgkMblCxb1ojB09Hq4VGTh/L2boJ5/NDcgolpR1 +oBBWUEufjsXSlykPvYa48SMnZZrW2GUka1oXgjwnRSg2Fk1vVRjO9Q2KJZo2U+1pMJRjtleL0cZD +uDKRciU5920XgcxG2rT2dtabVbskNETQHgKfHGhwBa1fETIv5r/1nmUXtE0xUaF6ePIwdF8TYrz0 +pDUgI+P3Q9cZnVVaQMoKbVQ0C0jn18EhxK2PB/e12Rlscmkjo9vCh83SmD7BSAvHhNo2QamKhdp9 +4/jbnvCeU0RtNJ6sB9R2Zft2hF08sCUdr4o1Bqpf7izZaHYFKAnaDL6Fskjok4YJwi0F8mD+xtmc +gFnGQpkokjPaAxSFMMUZ+KlDlZGey2QJGXZ5sJ7juT7sN4Zxp2WO5hhDJKKGr0SRnKyWuIsD+rYr +kfyZsqJi1bg7f4Aoi9zjlmaHnlbTfsv/RnLoThi26SxvoX2IbpuF5qX5mhJ+gtrH719iT+92CdvF +Mj/wBJcvsQGw1iFoBlwdn/p2N9PB4e3S2eOJV0CkXrYedUp/98kJ5n72pgqjlFTzH80fXdd0s0zc +4yzhu/+xRknK3b/yQkSg38alypMF4zmLPrfFJ01Myk16fmK9DrrpO7CKGLZXrdlhSkWghy0RZ+em +ewswbGaYtZ6MqDa6S60br1tvhxwMx5S8LchrMKb66SGYugFfizMbAvpcXOMAfa/FtFj90e92aUMa +JlhWH/2wuZ2rMaOxV1QDLCiD61q/9YuzB4cu96+zkbZYT9PoRTB1vWHYBUPrCzhdSxeqww8dQljz +ZB9dleAlwVTqQs6m9rqQGFAN3B2dogEk9WK4v6L2B+V8t1gn6WOjZv4Q/K19J6ZxV2rKDIaMXzSm +XC4YMFtDeSy32ka0SNvZ+KVftG2V7inHNtKmmc+74ZxpibWCtJlNm6gqZRHePiDdz5yY7mE2A+CG +6iNIkbJddCBwID3KDre84WfRtkL9aLfP5c76UI9gaCiaQdkS1AHBeOeoV++k3h8pg55AzTptpHF6 +vGTb+/is9ocw+Y3u8Th93/B1qP2sEk8Al5A1ZpwoQl5uEkdrpReSSqOeIsnebyRYszDlPPChYK3x +U1eWCE6x5zvW48yfQ+f0HaUXbQaShMBCUuya7GzDGTZ5yitQCWXBGc9N6dBvOeEVR8mWNFSUK5Li +OZQTKDHQz9uy6Q9k2XiAjdoap+KdyQdjaJVijyPh9fsZS56ZFayub1QZHrN9EAxStUMXbBzx3B8R +je2k3P3CN1VneWLfewKcwNw9aIu5JvUB0EzIwSww/n+idaXWrYhbZAv1kpKqo2xQepGDmBf9rBs+ +G2Z/p1VAl5gfKTvpEuquCxD2H0/u8RbVxc/NJzh/Lol6CVs56TGH/+TlFYBk74nYULU6QiwVWYc4 +h+jNLWk2Jr6IMvu3eGpcGZFnM8ab/n5tMA7piplTBEgC2y63M7o5uDXzQU2mijsJpW+OBsoLLFSa +Th8cMELijh2ux3KsrZQkmuyDzjstDXtb8XS+Np9Xr4efJNRU/Qn3bi5ARQH1mqvgZKh4WOcki0dN +qkP4wcWsfDhkNOX86rq+dUsNYsdG7wnWvv2hyunQNTGWvwX6M++OvZdTYqLK/iRDsDeJ0y9XjwhI +m9kNdLvMMsjweGB29i/Vxj3qFCKTkzTzD0Xb+PnnCvf/hEFbBouaH9vpS6RC1duQ8FBxqHON1YuK +M48Ck1kwAT5SqpN+S3llT+ec2CNINL+q0By+SihFJONf5W9U0b1fTLPWYjmqgOYQE38C4ZvpM8kg +2d6OYG3s9Lbt+En+N0YVozX40drv05LJtfxn7Bn+xyJ4E5DmweWp9MA/4sezyMCiBl60sE8A1PgJ +0AUfn+C/Y9mFBuvcOE0qx00GxZAgr/GEl7LdTXKTT7MdezaQ14SajoMDiqxiQLQTcJIlauUYV7zK +G0UbxQ/nAUOjARBJt84Y6actq+Nm/3KSCz+FFzPXjrf2cjAgTXmhgu43YA2DEb1SYKfwiWhwQf7g +y1kL0DJks9cGjzQzKPHeq3uAlDvme18B/xWSu+DHYb302Qg4qoCEr4ARt8lBIbu6NSwBVTZynApv +rmW2dVcTXm0ooTFLiR0ADoJQ0c+n2bdJZBKG6EwWbcig5B6gV8j8JvBns0oaYbfG0L+X3yDyo4I2 +uiHGzoCoL+6wx2feFGJ8ErlghxiSd3YMF+9hI8EFgdgeYuvNkPPFe/5wXmalfchUVoU2AMYn2Jem +XSfnJuAPLCtKDmsIo3iBsCbs51sL7+s3pP+ZouMikSORVmIs/KCqeD1nYCf7vPwLaLXgIpF7vWJg +Yv3zvRTdbbVEE5bUi15Qf3c7bbM6Unt66PF1EfY99Yu9qxdbgkKKrodRgwyBO5lgM42zIPWj4RMU +H169G1C12fgPh7/WtmTNdrbRND+sZFH18YGeNJBI2XJnFp9ZFezIf3Dhfziov3xwF2EUBuR1/gbf +ec/dYd+AytqyD8t1t5n1NbK4McAuk6XOEBXqfZYFmasR3PEZIZSw/pz5Q7wBkDhJpVA3mle21CTr +0lINei2KP2J27GP+OHItxfXOCOZBCHIwq4VaGSLnh0O+DByDMyr+ZlD7qob7q+T9vGXHyXvOMwlo +MRokMSZVXxJS51kr7SbuFdL4WdXmG65oq1mX0ojodGhyyER8LpK5gf4hh4WhEplLomeq7+rOFwD6 +uHK5c1dq75hatgCwntoq3l0fpVJG9sRsWArFCXdZET7H6FgkiJt0YGWFIHo4f+hi4yad95jgb/YP +Wa6GBdDQP0FYc5vsU+fl3hjsE2Zra27a1MgKY9V/BNiPZY1ZVmTRNnFMqI//zfQ2cb/DcYSe3NIj +9QAZQw2+4f+l3tKkIa1KoQ4PoW/4WsxMajJMp0EXRhoghgu3aZUqoYdTVpX8YW4+JqKEcOnnLCvt +mvHLqMo5btlAUoIiGIO5KCqULOi7xl+u0pOzlMLyWiSiGg09LpocUd1/oPO6sNsJaXOSba/OYO4Z +Hr3295kunS++qdkHHkBZFsc4cV1r099WRS7ZJjbtZWbJZGhiR9xpqXQUOBMJ7d2plWa6an1o7EwS +YCPD3RMiA7vq7g0t6F5/BXYs4Vo/SHWokdgdHtJ6pIzhzt28FF0EkVQpeumk2mIvc/KHxMBuXUv+ +3RaoDlMFxIe0bhKgkbPnMcJ+AEB4hUYO+CcVNwmhKI4Iij3OP1NnOfAL+Q8RYGJcvCgveYgcvkOl +6FTjh1OE6cxCyVaymcWnZK3y0OgVdooPiJ+TumSme/KNaStkr7UJBZG2o3fcz2k34XElwdyxuPhD +dxBvhoF2gMSF0HUrsTN4IneyxXG1V7a0NkO4GiGSlbNgNMBVSWDr4M02TD5FZKaAVh9znJiFl7rs +mMtdqLlSHwUiRuXOm2m0lXVwImuiPhIRiNepZYw5CsIgUVnetmLN4rxwbN3KEjJTIhHT9fbgYy9T +DSZrJk+b7CGmy0lVd6HaK8fPNTwT5bVMRgYx1EV+RndF00VMyEVwiCgIXm6khAM58stl7BOMc33u +iVbjXgKm34GTyQbg7BDOtyCXWcqNIKzjHW+rV6oclam+Edph7mB741FSijVKxErPYMWNZihvgTkv +6BiS1H2m2jBerQMNLgfBOvlcKcYSltDSzsVl4hWhok7GjRHqNZ6+fF514Pyfo49t4GFjH4demHtl +wOKgQXMWmCs0gMlrsXb3mi2StCt2qmX2ZxtjghKEIv2azul+M8qRzJaqc7E91Vw2TG0iArOM/EBF +k8j6netzHGZINCxUNjwSJ+CULaHgmo2lwYWnlSxQMND5w4kMJdlTTy65omzgujrma3AiunBgksjl +UV0gscdRPyRNt6jhKRgxKyC8mQ1tc9cUcd4/K2ebVdZNUckqbfwyLQ9kLOuMvsraLiooSllnPDh7 +Neu7FuEb0X2uLBxc6ZMReyPMWi300FYvq/hCDdZF8dAy/w7nOSg58UphqzBqxLdEl6/z2TSsxpKQ +P3rKnGlI1E1jUR/ZqhnPrQvUOycyCTL4QL7/YOERlAE8xp215UGaBdud1rgdLAqW2s2Yhpk2LzLV +NXpQ5ya5KUWmrRhFQbCO+r8v3KSrXixRCnXx+Q+f9yl17V93t2rCr+ho4/tVQZHWM0sukal/sjH1 +IUExjLXqnacQc5xlcfh7wj1ZOHdih1ZmiyzTE6Ub2gPLl2n2ys4jRotQGwi3lrwHK0eSAm0xHjVr +3Bylw6nSMAiNM+rwT0tOLRVTYfBYNOLdfySFVB3BZm31vqJMLOsd0fAZdT9oDoMGf5G0t+Akze8H +0EMXBocgmdqrgAaZNEAuO0L6Wkk5l5eTL2ebt2BanmqecwQlN87LVY7AcABjwYUsGmJ7bkHpTOQt +zC+mAhTYRTKs83ozweY0Lkadj6ZSPuv5MSad+rL7mnVdwEG8O2HZ/eN9uH0H679hoTrHiKozRNAS +ZDmZkyka1VC+uaNcCKkjc/L6jKGMx94r2RhQZ5+v3Hf2gW1a0tN8isHwKGdlfr0vMoSs0oFe1Uqm +bzra8pSnQKGT0KKg/l+auNuswgsoaTUgEtNz4HWnOXz8hSH2djiaG/LrxCx+U2qZu6NvJODceESn +oXApwdHAWI8sIRT1yMX8R+LND79c3cmcTCGhraqHtqBTgMjG2OxR02xzm72gQMTzPx23laGZKPVn +a7Yfa8IJXhpzxkyk2WtyZOw60/A982TEVbx/y7gosCyGiJH2nFA5I/42QAL63OD+nP2RxDLlZ+0C +eFbbEL0F9klErUCI2FEnepm85ImpjsKdGwtWdPWISkPpym6Mwm3GP7j0Vw6XpWhDOfV4vODUB/yL +oHVPe2WyxLXitWxLZogpqb3+c8za4NZsm8RYc6FtxzXx1gskMZX1GEWUqLfYJUOCwls6KrIWCSDf +566M9udWuERSpn6i8xNXyZzH1qJS5jAAV92Y9sc4HZcNhSvk7PcF3A+0M8JVE73GnLU731nZAfgC +MTNiZC7IJx3IfNJCtXbHt+/bd/TwkHJu+N1nYOddzGEs51pIWcxnqn4dQx7qGq0lg/GkAICgEYNp +/UYvE5GI7A7mNqxHrwy6DLcJNK8kw3SRD7FY06lq95jxiwQmNbVO7P7X0eEeO9cFmD83qpFrbGbJ +hxFYJvqsjwxKM/Q6HVYCFvVy49hdp//3c/kU/BlDsVgtyp4RkpCdQ+9mfRrvGuSZ0l5n1i7B1GT5 +AtpXk2eJBHGhUT5QxHc5TqwOG2/+5mURRZnRycad43bMibMre6LVjRm4Ru2uqgPpNq0JjEJGHOde +mCm3XRpcOL6M21G4tZmjWgZD9CQ2tVWX+jV29dOwu9xSb70pbSTB2TSz+0Yl+8eOdK8hkiaar7jf +6rODmN74RiQB/p9qupOXcU9XO6Ifm3SMTUWH2euWuOOt3bG0ExCv4lzmwtwFs9iWdh7ctExGRwG6 +0KoPhnEJ/BPohfNE9Aiq/5S+Wv8G6SOxWA3rd4EVOd6p1t5I4YFyIieIrS/7xHQ67tQiNlpZnjbH +TL8Z7nnUqVs4Gjcz3hH6JkETi5wK/OVblItZBQ157ZgQV7neA7kC1clJE1aMJPbjdK+zefSL1Dq0 +JiGgdKxJwEPgtthhcET6/h7inSAszBRfYDiydx096p1DLdyJwDIo71zX1/Q9L1/rQQqhYOx2Ngzh +sUO1EQbqJfp3sXn2Zs3rhw6/abZ899KPsEqmwxZP5ptDM+yUpXwYU8yi8DbaEryVGJ8agOtAsy6v +uX6OuldH0MKWaFm1IBntpqqNz5PMRQVPzYOfDvKoKxYSDHBDu7l8yunS+ZXLv9HAiK0J36uBzc0W +vy86owrgzk0TgE1V5jYrmVns3dG0w5/MMuCJ6t3CP90J5Znh7OIlvA6kwQWOgJXiKoJc9SrBfEAv +ymmLxjPSY0UnezhRTRvelm4NMxKkb4Y/N6rokUIvOZ6L1iBQCeY4CsdPkkfK5kFe+PPbGePMsyr/ +fXzEBMODthpcYA5/fwx9ihA9bTythQe2cBV0W5HnE4vTj9jEqJQ3uxuc6akz+OzOdsZi41ReCkTh +tDQmiG1MMvUp4tCr9hR+leJ6ZpoQstE3TUjHbCPyxRJCQmbB++sAU2rhIhWwawiJjbFLqRWYTqD7 +/QqMzwekNIDy+7rGkgbNITHyPqROXlfTizhHLo7kb4liY+nBYc612qUUgTAkhYYBX11CALRLyqne +wqIHfCwzgvsuabGrfzpo8/qXzw5DbBKvocGOrI7OGUA1zbITu0rVW3+fnHW5MJFzRXllzGnHSp9E +oJU2Y+sVMo6XOM1X20cB6QdztGvQxgayxEWd2pKBRdqfXuzc8212vGqfSU5JyEeOuQ8EYRiW632n +B2XAJuWXBPljhjanOk0OvzzK7siYdAPaCr4CF9rfmMzClvlhiDoKAos5GuwnGLSuTnS98Bl/s+Sa +yJ9cFUmEmIO+YowGhGy+qNCLtomqtFuscJ8DuR33tybd7TAqydAWRxxD1RBYubqwufY/HYWc70W2 +mcMLT86HCG0RjGY8hHkLdeaeGrWHppQCcxbr9BKeyzMbmIDdm2DVyGEdfNJDQh4N/BjaxJtjDhnv +M77uiaXOOliQeSy1rkJ9k7LHmWJX2+NgV+Nr/E0Mag9LTOX+o7N7CPKZ +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_pool_top.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_pool_top.sv new file mode 100644 index 0000000..f9292c9 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_pool_top.sv @@ -0,0 +1,288 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +7bhATTMdlJPl6G3kPYht8wm7SMlmd3xt6T0lHoOu3KmbYLqRe0T8FqjUtATzp+WxRimAhLsUPfyB +nsg9TU7HzdV7/6vXksYhXpWDe+j9JTTNXZ+JXjxOEMcxqm5MSr9c4ShrDmPf8TlZw08V1cKvcUxQ +5TzMRbFbMXu3p9IQ8rYtoemI9Lv7Xor2kMXxh7w7bztE5YRiYX+YnxgGgIPVFVyvaPgo/ZOxo7ik +oyFt4YfFXHiPu1TXwRVsBTJziyXGPaYdJHMlP8MynB/q1oCmE1Slqz3+7YJYfmS1UxN3f0SlrxGa +Q6V/22L6nx3WYW0HwXsZbYKyu7byhGKV5bGimg== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 15184) +`pragma protect data_block +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 +NV0TeiMu3GyMLXVmOaUB1Cqni3Lg/w== +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_pool_tree.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_pool_tree.sv new file mode 100644 index 0000000..0bfc74f --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_pool_tree.sv @@ -0,0 +1,83 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +xnaaBrmVoK9ZpTqECwjGBqtagJDXROo3SBSND0XeF2b2oxG2Pe7g/TUOcZNJA7U7G7M1XbxHg2Rw +zRjYPX2GvNhm4Tylzfqua7MPcHkPD9zS0t6h5gL3s6HQ+7kjQqtJXgTk/vvPA/XC4v77/uOXaryK ++8AZX+wgKOjfIvSWrTPvrh4atrPfC6cG1tV2K73BL0aVz+2jZzEq3nbds8hm4SQiUfCvuJc8KI9D +YugODTk37ENZiBVMEejSrlSbJFHmNHk+3jq4wCocls4m7v1piSLjJ9xttjJuuRt8V5h/GQJ3APyf +nb4F9UizMGCcQKUwjRj8kPBaZZmmqtOp1KDOcA== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 3504) +`pragma protect data_block +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 +Fajoe5MlFl5693WUk2zy/ERjFS5yQjYDDFmM +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_sigmoid_tanh_recip_half_A10.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_sigmoid_tanh_recip_half_A10.sv new file mode 100644 index 0000000..87c309a --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_sigmoid_tanh_recip_half_A10.sv @@ -0,0 +1,1514 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +LveXyO3pFT4kGKv2s+EMrMzMNLlTAkpq5NkZU5YZ3Jbm06iBxv0bPYoyNRcPZVCPGSGt2tptxRFk +aTQxlcKZSAeJYrDewYSQC2SNVPua0OZQ2PKKI9XJ/5/TMa4WGCmf1DBVeOLEAS9hDwICZahpBFl4 +o9L0jmNt7BtuBjgM8o+qd7FRIMwNRR87Tv9+c8nOvQKTphcCX/2bNnhTPY5088XZZm2lL+vNFGYh +mXjLp0iwHQuFtXeZj2cy8afuUEZ+hi0Z2iac9OAZdI+X+vyjEg//qEXfiSNDrsGv3RPL9RJF5sbr +emppgFD7fx2LujXUZPqUNVZF6w4kXTEo9tMcsQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 85056) +`pragma protect data_block +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 +E/hTEBVJ7rRr7zIm +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_sigmoid_tanh_recip_half_AGX.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_sigmoid_tanh_recip_half_AGX.sv new file mode 100644 index 0000000..a392d06 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_sigmoid_tanh_recip_half_AGX.sv @@ -0,0 +1,1458 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +xBzt9YrU2Tyv7iVd7nP5+I9apBOlc2BZc/u9cHjgSIzbiTRmsKc2wpS1Y4gZkq3f85pnMH7gL5MP +a+x/32w9qIUQgr4tRYBA/NFNP7UC51j03Zmk1unLRU3Cz4icWjegK6XpqzqPQaGSgIzkCtbTuP+N +0TUv7KP90y6fXXyN+NnISfHqhOixS7MpF8vPlAi+TShO8ZbUho56X4DLVdC9ZL/FNMMu6cZ4puzg +/zIBJPs0aV/Yw9dLaLsEVB75eq1WDKrY+6SOZR51a57xeNzbaNdELS2w/bZSDK7sEws6u5Br/Rxg +N0VAWGku7LmKvBQb5RiO+xJ2KfOLAAG3VGUkPQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 81872) +`pragma protect data_block +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 +FsCMnVS+K+smbiSyqPTfucJFLfw= +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_sigmoid_tanh_recip_half_C10.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_sigmoid_tanh_recip_half_C10.sv new file mode 100644 index 0000000..17136ff --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_sigmoid_tanh_recip_half_C10.sv @@ -0,0 +1,1514 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +3VR2FZL1EQQVBLlN3oaZ9gnFIpf+BD+vDZrwII3hHEfMSaP8EJ8HASCyOsvHAKeECbSIG3ikz9p3 +PJ9XVd7d47isrM7j/werG4wChChx8UFgPJBc/701cyJnkPDaeToG8HRGeiq+OO7hacj/Ii34TmWZ +iwNlzkrzS+ZkUGm6MawIzu0Ks+G4KxirALMBlPtbbuWXDM5UyL3HM8fRr9htCVLEerkG1crdWK01 +ygFFz2peKtizBqU6e7h0VzSjWfsGsHSRhOnTWJvK4znbglu9Av0kTxnFGMPqG9FkEYiNrd46SaY9 +L+gLw/nH5PRTeocci8ELIVAoX4I5ksl2B23gNA== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 85072) +`pragma protect data_block +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 +FMel0NKzJgM4EH+uvdyh4MqcJHoVc+H/VgljvA== +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_sigmoid_tanh_recip_half_S10.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_sigmoid_tanh_recip_half_S10.sv new file mode 100644 index 0000000..91fe977 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_sigmoid_tanh_recip_half_S10.sv @@ -0,0 +1,1440 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +XWI8jxkm9HRH6UbDONONddwQpZR8liKeNi1vpod1LksIt0MiE3wbu8mRB4oI0hTdBTj++AtHGIb9 +R5yBrTr2EPQJSszzVOB82FbuUKcfY8pA9qWi+Z9d7UDeioZxuNK97foKqmEIrgYx8ITBX5DBcvfR +7mHbSXS/gNf2O9MI50DLadCAatrh+pVSdrT/t6OmmrAxBxG/4xbroP/pwLHsaLG3MReebOodZzOr +gYMiyPev0AKueF8CnGXett+olJh31zjhjpdtpFGyNuXTcYivIh37SZW8Fr+CU1+jyBN8UynapGZE +8Jf8lmhTIPlUGm9ANXnWxEPF8SHrHupcvEOBqw== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 80880) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_config_decoder.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_config_decoder.sv new file mode 100644 index 0000000..eb0cddf --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_config_decoder.sv @@ -0,0 +1,115 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +7dZBGxraWNXBvVPPLNc4/WNgswUoxXjekiu5FONUFTgwOBLZOtFNNvA4K5j0E3HCe1bRNmz59KmG +sy5KzW+WX+N8i9R/HIc5J/FNn4c/4Clni/2FNT9H1da0H2sxaHRPVTiulVZc9OylnbRlD0kd8Quq +lzhTAgxoWteKJf1tQ5bMVxbRzj5mMIoorJ2ajUOfS7QQGXL1p2onD3x8/vpqI9PkCPLQO1YAvvkC +T+FHmfDiaalBjBZRa6QNHp4e7oMwaqK4XGT0VpJ6E6mh+178eZSbDGOwz7iUqyIGdfqGJjIq0hXY +oNTLivvEwuDuT+YHypQBZydHjpBeDP6t3jV2bQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 5328) +`pragma protect data_block +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 +0VUvwuX0K2ypmwn6UQJGtkOLTDCC/GnTuDdg +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_control.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_control.sv new file mode 100644 index 0000000..107f51f --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_control.sv @@ -0,0 +1,176 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +O7CIA9J8DJkKRKtDNELZngnWZ2zqXhnHylZLKEvMVDIKAIkqOBeWJfcRD8r9ADa3AepauFciZA3C +rbCsm6tWVCdnoH1X6Y1FmUbgwQtGRtfFB9zV0mABCuf6UJKdcxlyjkNGD3G7H0UIJH56O1nI1atF +huiIhnaOPKUZSnIBjM4ZIa6OfDUOBAxHFbz4/VUQ9BMv0WTAPRIipEuyaqeoAsJdvQwOXst+iglJ +8mi7yMhO46se30jTewrSdz3EDZWOLlxic+QRNBYU++TCqxKgOAtiSfckBBR44TJWImWvW+U1u/8q +3KDZoYnnzvIhNTfMvk1Mw7CZ8nNMNrEvDW+TBw== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 8832) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_core.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_core.sv new file mode 100644 index 0000000..fb309a7 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_core.sv @@ -0,0 +1,242 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +tgb6ZlbVgorrQcQzVIAFMOG/wLslRTfUYHLjqtRoreddLhTz8TvAja+9nCLVf+BwChtVb9gu72An +1PDII3loMONWieiiBEplAuNESfYxtnQDCI+FAkNMJDiUAoGg1V5It4SPGjV4t3bYDx89OUF9U6Fb +dq8OGWKIXp3v8HInOKOIbPR8ABtEvvkCH5QoA2MTEr8dlENVr9rxUdcMJmxywnITaR21rSwurGEY +amh7zwkq3axngPgYS9gQ0CmuC69JQHXsxkTNrj6wPrQi/vaAE9s2x5hC5Y4L2F4rzIqBIHjWWwCO +9Y+fEwfNIKRgQ5js/CkHwTGV8vtB1pFFM9dRtQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 12576) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_debug.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_debug.sv new file mode 100644 index 0000000..9ea569f --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_debug.sv @@ -0,0 +1,66 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +dzEwAyNipeXRStMPEaDXWu6A8278u1wXZJZYivItlqTkmmmA7FliRMo1k6Z2tYkEv04tpjmW2tgd +gIqEA/OangK4ir+YmvWFCMm2rICNOQBLuPEMQpvYjVDmozcNu4rW9lqOsRrSOcW9FNz+rlo84Sd/ +vJljUYeQZ24I/RA9bbo8WJ4yif9ydxBC/3C+9H5LvxW8a3kLSmbA1FGxzm5/fOWxIOUdXEgx/dxQ +I57s31RJHJeHh6AaZmUiW8RDosr61tX2HXZJcXrXBF0fKp+h2dAKkba1sH//2DWPYw4ZIdxZJgOH +eEXl4+MI1Omkkw/07EbvUU6/8H6hUdjSEW8T9g== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 2560) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_division_A10.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_division_A10.sv new file mode 100644 index 0000000..6237193 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_division_A10.sv @@ -0,0 +1,1383 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +H68uwd2yG4peQJDCy92HNZKF0tcmYQgSoiGBznEkMzYTFrugPU2ECnLCQ9Lh/KVYH/fGMwmXVd5c +f+E9pm6aNjzhLt26ACn2wfkKixCQjJ8qOPcfPExb+roCIMLpA3Oc3zjgy4nt7ij+/RO1wX2pIB4N +QZNcUoWfeXGwXr39UvDjLnhAbwJUZeqYPaZZplCBjw00kcgA15pB014RqmSyKPrXTs2WICkkf1mo +TtK9kxU0yTex/pSwZW/ds4m5InW3exb4tlSnKNhrdG/+bs6kzBd2gWz9v3kV3ix/fy0GU5qIYpxr +kjtGM6d0B/FnagGZ5V1/F+aIkJpi+c9K1ZTq6Q== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 77616) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_division_AGX.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_division_AGX.sv new file mode 100644 index 0000000..71bf252 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_division_AGX.sv @@ -0,0 +1,1464 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +hZU7RsmCDBHP/VA2PGvoV4IfvQfc+6+MsZ1vSuFhZJ8WCxlirUxrFd43l0EJZxArfLIcS0R7bGqD +G5/sGYFP8gBjNqbwGai6/8VreGoytGW1yOhfHtFPHZMao9eSYt04W/WB2RB39ajSkf5HSAtKulCx +BbRLPQnfH0/vgHmYhX5N/Z/1Fwh/uzKVD4rZ5N8We0eNoTnWJmbqgyTPDDLWAQZNKuzDNCK9b+AV +TrZmLNKzLTQNhDs8pYyvH7dVIg4/KdqxAWmr+rWX7Qi0Fy9Uh/Bng2ejGfX2z685OH0chb392dAW +jRH0g4fV8r+1GjLqERsDP/9s+sQO+XO3j4QrNQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 82240) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_division_C10.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_division_C10.sv new file mode 100644 index 0000000..cf429b3 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_division_C10.sv @@ -0,0 +1,1384 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +YzS3dqSeqHecbHqEvyNdux1uVLOtWuBZRbkEg2sQ1L1Q0FiV3gHV6UAnta1QrUV3MduvSi0xDnEY +nyuTg/l54i2pBSuvhzvH1lXLk3qJJG+kEPSRU395FvDigLID0WjC06iOJY8hi5qHr+U5Ep7IV9Vf +X9pPSPscO4ppzJHVMfcIaGIoOY87GUDWIPywsD3PHruB2BzqA3tcBrMQe9RgmJFXWvbcYDNwCFaD +Uf9Wwm3prti0XAXDIWdLylfiLcaj7WgAGK4bZFtHiEPYCv3suraBiGNtTMwcS+YRnarLAqXJ0AiG +3rIUBJGEZPwX5MP1YxJ8BNCY+KzPgNO3aKZnhA== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 77648) +`pragma protect data_block +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 +wNhY0gdnclM0ANTOArQ= +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_division_S10.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_division_S10.sv new file mode 100644 index 0000000..728cd67 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_division_S10.sv @@ -0,0 +1,1635 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +wAyVa2YONtFDUTQiDlnTYMnuq2POCt0K7+h25Cb+oNgoT4vt1yTo9isZlONBJbz42fdmuUt0KJWd +fA4a6XbIwYuZW5F+9Sxobo+69c1t5mHlv5ChNuUfuNA+03MUYrX2E+b1kx3iyLsU9Kli2G5PWpt2 +TKc0aOpb9PYu6t0GWQ5KoNTiJxNtVmgbJ/aoh/1nyvkrZxPQkFeQVnJ5z1R7bswe6GbpUDT9okZ8 +XMo4chDL1xToPm+cIsLHiwP0TdN1VeS0/YKX/gYM8g1PyPCceUVeF3cH9Hl8Ce+wOhHubJBQpk/h +f6tH9MK+AQ2IkB58+szsjvq2rp97v9nT7ZVhnQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 91984) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_division_wrapper.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_division_wrapper.sv new file mode 100644 index 0000000..dd95dd2 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_division_wrapper.sv @@ -0,0 +1,82 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +lP+uJ1TVT3qSHrI5glqAPdN2y6fOo2R5RCv2L36XrDnyNXxmo1rXQKsWxm6v9v7KQs+MlMxOgQrF +kcQTdZxnWZIRihvz1wuZ2KJ4ivUQH6ynckSuRs9JlOgWV/L28UlwMSnpcAQ6OGxg8uegDbP9nbbU +EkQj4tl70/y9FPz1/uybPpgBxy4iFZ5eH8CUMMKX8ht/MutId+zjeDdrZe74ujLhbp/ghy4CBojF +/yW6JZ9jItr9IPro3pwlQZ2T15pHWoyVvZ1r/s+yPd9guYDhT/GNes03ndHA2uer9Cns2zdZSR+I +d7hvGbcbC0CvtScSUlMxeULL4M0CKi7/v5/9qw== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 3456) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_exponent_A10.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_exponent_A10.sv new file mode 100644 index 0000000..2f572b5 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_exponent_A10.sv @@ -0,0 +1,2064 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +woMs203xGhV0JfTz1Ve10IVFJzNbyymsNi92SB5m7J7FPD02Zp+z2nLa6gYqt2m5xWXPwIfQWUVt +zO2qNuM08TPcpQp9MeraTIoaWNhUT587taMLWt/d2qeJsdIp0aDUfAHQdb6XWGGqBO8SQGqsbZrM +kbEN8tON1KwOzzNwJ9SjSvu5kp6ybIJVRQu+hekMLabfdzP2VA7Q7rxE4tCrrPhh3Eufvu17y7Iv +yfS590zdxHuvsKrV8xESqa+2TsA0qqGAZSKaEVbLgYWESDxsbIBLUeHL5RR9tpMY3fVhjmFbfR3Y +vD/BI2EvNJ2e1JX9xxt4Cws6kofy0LZdx+BcoQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 116400) +`pragma protect data_block +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 +saZocU+g +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_exponent_AGX.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_exponent_AGX.sv new file mode 100644 index 0000000..6598b1d --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_exponent_AGX.sv @@ -0,0 +1,1927 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +i+1ST2jeNpqPkgn/aOHRggMfsItelV5dsN2VwHvtQLoQVnMKNAnncv8VUmU7ytu5FZRtcCIIGxJG +gSIvl8fTCBMa9mtnEzp+lJL1t/bPoc6otDsAh2T4aOPVqpkCOcwQQ2Qps+6TF7ZmZa6TlM2go1f3 +9IDhl4qC35k8Wiv03xWZ44v1mw+hRnWjxHW8Y60lG5VXMGUTkle4JSpTConvSL14++WuSEKHdTAI +0Frl6riiZ3l6YZeKcGdXQyEGFqNirLi4blmh+Q7SweSzxsjQdH1CR9OiBaGkzEmvQPVL1RLioZxy +doHJT0qujTu6dMcNhhBPzWbilpiwj/1kG+LU/Q== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 108624) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_exponent_C10.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_exponent_C10.sv new file mode 100644 index 0000000..5fccd84 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_exponent_C10.sv @@ -0,0 +1,2053 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +Tk1hmqDVwXRZDQgLojhMpw0rn2RJvfBep2Yu4IcNKVp8VkAS/Xp703jevnQnmsO2737hAj7v/6qo +YgdeaNtlMbNLlUpYoDtMOwn2XlQyM4OrN6Pu5CxXaGnq0554f3rvMkuv0x2gv1TKGB6pNO0S+B5G +3VANnqzyM01ernDFeiJSyZrR88vccijXyOFxD7Jr1UK/Q9gcYQT91fR+yJGyON4NgQ3mGeM0xUc3 ++6iHr1j1/4rdWyxIOPJDZ0/HBonZ1iA+QPjRZQo+NaRDM7iKwC/0W0pdW/5pK9RjH5EPWTCgTe9Y +lisWivk0WM0XuZKsjE9JtIjacU3GZKTjsBCaMw== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 115808) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_exponent_S10.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_exponent_S10.sv new file mode 100644 index 0000000..f296695 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_exponent_S10.sv @@ -0,0 +1,2166 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +b5o9PBr/i8kuRvztsC5bQttejZhOd0G8pEEI8nySSHEw2phxub3+0L0vQhg1MR7GiY/f1jSVtxAv +gRZZ6s8tEMraQfbH5vfxyzMGionp6mFiuqb0SQaOJI5VmtWhw+70hqkECBIRgEchfxMR6UxBFye9 +59TMo1/6RW1ut74FN6Ys4YOndJ8U6r6Wa5dZ8slIbG77bb/kMC5KbXy4r1NPipxT5hrBE5bKmygc +dkH/Q1wgM5HLpvxiCuXQo8d9DJTnVqE5ZMYvvpCzHJKESka4QIbXKlrivStTQv17yT1SOsRh6FIp +wCq3XYHhxefh8J99L9QsKlkYIyCOzFvCItJuUA== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 122240) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_exponent_wrapper.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_exponent_wrapper.sv new file mode 100644 index 0000000..a005ecd --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_exponent_wrapper.sv @@ -0,0 +1,79 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +NoAypRK3ghWeUxoUDWZEjVx5Lxc5C1ePXqPpVfS5MwQ+Wm1/nXAiUZAOf9sfOE7Dst+UrDQdN0wD +Yi9dsn59jwbG+6qTf5P2PiOzeeoI+en5yIPSiM5NAZ1on/7Zm0a3jRtrqcEC/w75jfgM+vZoPbP1 +eX3qm/hmgf+zjQA9gZRylA5iFKyWn2n8b1boUeNW8DeoNZCAGS9ze54Iq2S2VbJlV0/lMBbOAsrk +NatqDf28KoUL6cnjbjoGtjoeP+JUQ/xX7kUyA5LTf8DMDTPQMKP4rPljZam7C5XkwXVarrw3yZ8p +N1UwBte3hbVesVZduqFH0AVLehJueY3lJ1/yUw== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 3280) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_group.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_group.sv new file mode 100644 index 0000000..17799fe --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_group.sv @@ -0,0 +1,171 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +jFIk+jvBRWDLtsRhBdojbDytp4/vO5fAkLtaqTMCBt/XMXEvplSrnAqFhXidymHnGhaSAZQIAUkt +9ZgjVxdncDxoBmmdXnLQQqnrXEeWgkeUy8bf+z8QAF3oOHQwsgbHE7SEXppBPIYrYiuE8ox9mgBN +8U4pDi5DXZ1tS7UEXzUgSCLyXKbfNPkEBSWUt5O1BN8vncqxmjiRS5NR1z0ymcg6tSisKv+QfcTX +DmTG5roGqDQzfTGDEweL+8mEY+ilIumWjBxSOiIcg8BvfvPgdGW6u6WiOV3/BV7ZsOAOqG4NoXQg +G5lzUz89NujKSziSkAqBh9kDxu4KXKQ0WxPnAg== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 8512) +`pragma protect data_block +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 +PEqLKzNv1+/Z0NUIu0hBowxuOQ== +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_if.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_if.sv new file mode 100644 index 0000000..4ca11a9 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_if.sv @@ -0,0 +1,65 @@ +// Copyright 2021-2021 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +// Port structure from config to control +interface softmax_config_to_control_if #( + dla_aux_softmax_pkg::aux_special_params_t special_params, + dla_interface_pkg::aux_data_pack_params_t data_pack_params, + int DIM1 = 1, + int DIM2 = 1 +); +// ------------------------------ START EDITING ------------------------------ + // localparam TILE_COUNT = data_pack_params.GROUP_SIZE * data_pack_params.GROUP_NUM; + localparam CONFIG_ID_BITS = special_params.CONFIG_ID_WIDTH ; + localparam FRAME_SIZE_BITS = $clog2(special_params.MAX_NUM_CHANNELS + 1) ; + localparam DATA_SIZE_BITS = $clog2(special_params.MAX_NUM_CHANNELS + 1) ; + localparam ELEMENT_BITS = data_pack_params.ELEMENT_BITS ; +// ------------------------------ END EDITING ------------------------------ + + typedef struct packed { +// ------------------------------ START EDITING ------------------------------ + logic configured ; + // + logic [ FRAME_SIZE_BITS-1:0] frame_size ; + logic [ DATA_SIZE_BITS-1:0] data_size ; + logic [ CONFIG_ID_BITS-1:0] config_id ; +// ------------------------------ END EDITING ------------------------------ + } Type; + Type data [DIM1][DIM2]; + modport sender (output data); + modport receiver (input data); +endinterface + +// Port structure from control to lane(s) +interface softmax_control_to_lane_if #( + dla_aux_softmax_pkg::aux_special_params_t special_params, + dla_interface_pkg::aux_data_pack_params_t data_pack_params, + int DIM1 = 1, + int DIM2 = 1 +); + localparam TILE_COUNT = data_pack_params.GROUP_SIZE * data_pack_params.GROUP_NUM; + typedef struct packed { + // only the handshake signal 'ready' is fixed in this structure, which is used by control to + // signal that the core is not stalled + logic ready; +// ------------------------------ START EDITING ------------------------------ + logic sum_mode; + logic sum_init; + logic sum_last; + logic output_enable; +// ------------------------------ END EDITING ------------------------------ + } Type; + Type data [DIM1][DIM2]; + modport sender (output data); + modport receiver (input data); +endinterface diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_input_buffer.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_input_buffer.sv new file mode 100644 index 0000000..ed266fd --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_input_buffer.sv @@ -0,0 +1,109 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +2qbWhD4vrPD1rMtjL5AwXFFL4MFf2xkCJsj79pRuvxxu61RuI2gXNLkX60HjcBzXg4PRauZzAffY +1jaOLifpvWJR3SnD5e0LpiWPopr8Sd2Mu7YTocqNSIPfAOQgzveEhktDRqZ/Io5R9JL3wtW9qryU +J2g56QYV9bRTJCZYrd/3cz2Z68Ey3s+am5m2PaeLSnji8kPpTaHGt14rrtbs0Z9/nn1Q1PqgAyKZ +ozd6otQnfe7O/pfmUmIu2X06+UtQfwo0GkFG+ZJqKlpLnjfdoa/6u9+mtsMPWwQHp3QN+Af9fEjJ +UwQyLG8Ckwp1ufOBNHRBnWn1/ntPioEDylZN2Q== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 4992) +`pragma protect data_block +nD5qz3T9bZfMRPzjBUQxeR2VxRiJTrh/AqGNBWFrZeWXRIIiT2j2G4OHRF062onr87RTjmcTTilw +15cPZRMKfZrjEg+mSJyWpHeukI7r+Sy0Ag9RLubxyggk/IH/HnvYJaSfxaq8jNBuh5WCKHv8Xp84 +CqVOtoQBBNxTBTNXybK/RxaTrMKx1xRV2bmTt+tbL178V+iTisRTJFG91pQubhEyhpA8Zrsrh64J +L4VYeZCWrREz8EhD1PqaeHUQhhXQVcH6MhV5d6pQlRNKz5v49uY7YOAevahXUOHg8IB8UQyV8ppo +2BubjOrWIYQxeUrOng9KBpIlhCoM/AHKksWV81HNBEztUsppBkGTvzoD7bmb0fTY1JS+qxjzBMUB +MREXELZFEsfRm0TNRC1DbQNNIosq26sgSeE8vDTLTUlyj8F+Y6YDR5iSVKv7DELFbwscwMJfeVTO +qsEf3/agXJ6Oee3alhnUeqyHT/0waYJErDlOFIXiPcQIPEnRQlwqgTFIFwAe5x6oo9HgwXeMctVZ +NzgWZgkUW+GKw9FLCi00/YoDxjSWfLCSBZkAcbyeume7RVNs+CrHKhPE2TtpePG3DC1A+41CZhZ7 +y/tM5iKKC53Tr4zKKgrvq0A8r94B6Hk9CnsYwtUJiXhA9ycFebWlOTC7l5QoOvewvkYgwdG36QKn +tNLi1XcBNVmSNxalaORdQZOMpdVT9Ps3T293qvPJ8HKLUy30jIZqVZtVf6olKQOwLYfXq1vMchPt +AHLK0fw013Jt2tELEWtOicwS6JkUWioZwQNzlh2txOaJYbm+ZZkTU8WK5AL63Nvhkcnm/D8VfSQR +chOW7ZRkaBoSlGyYJXCtYX1VKmTdYO71Mm3FsB2JQB9LJ40j00zHA6aWGow5kRwyssbFqgM/gm3i +Vaf7va1VCNyAgE4I6fJrAhBjXfg6qckPFGwBVhAmpbFZwEzOBkY0CTohPPzf2fYC1acN1kbgnij7 +U8nyYlLyPS7sdxpTUotP4XJVjlIUoghE+l8lJj9XtwwQOv2YMDzpL6mbpAV/xpvXBAw40K+JWHOV +sHf2PUm7GCj4GjQATgUs7Z6zsYUEeFqz8JBsXl/IlU45jDNcp80VeXbyq81qiKfgACO0emg4u/Bj +p2NiMOJ1+YK8cI24Yz9gl2/uXSCw1yAbCJm0PTstMA1dlK4cj1uC6xWjA3GKOAEAv9cM1VzAv24p +E72uMzzEmxDeFPHKy1z0wy7b7CViTCB4ugJcPEv8767l9K4lFMe4AfyYU8FYHZiXCIgEbF2OkVSm +dUIOxe24jw1T00Thpm+4U0tBmzzL6Rc4QPYC5rVADyTIwNezOp+RQ/8cTmI6EjzdWVbqZSk2WUYd +NCPVwe3KfdqEbh/4MNWd5R+YhV2v1Wz6Y9kFZzLNv9poXPUZ9hV6a+VBMzo5Ww6eg/K6Im/v7mF2 +3/2ZiDlA9y+Rqr9fUakGVum/vYZKqEBachow0TJAfynokYBI1+DnOLtbLofXGFeqSCfpmml4z7Ps +1PcIp8P+jaEU63ceAD9M3uTnUL5u19wPMDQ8gesKXzRYAbi52VlFSHiTOCPpS9cC3SlGTfavm/tQ +3tbxsaebEp1l8pVNBzFRORCCyeaOFnmdT7E4vjq//g0AjJcJSrHHFkRdU4xeSms+1DjBgDi/TKde +pas9V0qbbxIMYkzZiNJorHnSBFH/5x446GrI2aqLxyMEq7WiMvHwLkaGAoSUa4BjOkDecuw++no/ +69nXG3GD1nvqdSjy1IML4pjNbT3eBZI1u5sZTiimpedO+mGOSU2c0wIWUTR3OJ9DjaV5LczgTQ7j +WN804Vb2KW0ItGQw5ZthTNMoPd52z/TqhY+zQZggb2M42duEppOZ7k2Xg0VuJg2Dr4HsPvL6gcxe +n/QDszDiu/FhjvRc3t6mqlk21JU4fOn9iPNtj4T+/GhHpXYjdkQavURZnfF1+IjdPzvN4qnKW3R9 +Cv9LhyA9o6qmiLw+eDiX9Jck0SpY9WxseVCskvdjzh/BUY2mY+hCx8yInXTxakgOMA/Ws7RtpfaR +mXpLs8FDp4Wc1HBYEN/iDzjoK/tveQ7F1eI3XAIyhmAB+Swnww7fZVjmjmaTTcxRnBtwnUAjFtUO +fP5DXUGRqtTkryZUGbquV7P54C9soWuuQfY/cRlW0pR1RvuahBX/Gqcg0cLE7w8M9PGA71/PJF3P +y62WQOILoqv7evdujAJdLkWSgUztf9dnNfkkQM/xCLnXMYvJUsN9MS8tA3r8GzxoCvi74HAc8PAd +lo8Xzd1UM6tXEsEl6XKyKBo4bGCuVMMDZjjh9NmyZMkx20dzYSc+3sDg57a8+iqPlZDuRn6oWyFm +oQeMljE+/w5c1FBiwNTzxq6hRmB2iikOBOvJ68HljgOIw/wTy2NGEaqEyBnSjronF02RxjkPBDQq +qLg0EZ7D1ztIk7cw4i1iiCDbektbM1ko09UQ1VC9YQOlQdNOLxLsoLiV7wcCy9i6TFsaiu/L56jl +drM0RpwbyQBUFIWNwzxZcVjgYosZVdj5k9Is9z+IaGlxANYIMAr4roJPq413V9T17mcjL/2DSweg +DzdR32MFRyVM4JQFTJPq8x4t1z7ZadWLSCBeV5oq8+GxC61p3YiD6Jsgseo/2kN02DvxzcNi6wQi +FFl5e1/wO4/CcqdQICj7bHwYviQFq60uOZfAwACu3DVUSh7CEsYmyxQB1Teq2RLWUOtc1tYgt8YZ +YAc3B3yJmWNcA/DcCAAH4lZn5kpqVeq1iuB6eub0NhByCw9DViFnV8cioqsJMcuTQMV1t2Ea0QSQ +ywZweJmE0gKO5QlYThatkM/4sD9ixLmQvQs2r0nczaZofiNzuo2gJUssjq4hm32OGIbEL9+6E/Ay +i3OtcwzaSZDruhrSi3Z4aAxyVIYEUOF6eS/yRfg8+3HaxFHxFyLaDGCv4LYvRpi3ZP9e6OC0+ItM +dYmkLNyhnllclv/ikw+UNIZHxTMMOyie6m8vNxS1IiQ9nCBAzOvnwE3QVJy0GFWYM1pkFjKyGcYy +vOTk5s45fL05QjgprqQnybL3o5mv0m1a2iw7uubOZa2XYz1C8t7QdLo4E25tACeOx3Pc0kDSTrrC +iSzqCaJ7N7Tv6ibUHbvwXsFiWZJxuDsf2Yqe8+wTaZtyXxds66Vtl8ETx9QbvA4VBBlPCQdkThPa +TFo83Y/vxmYf4JTaezph9QSLhlW9CXZoz1D70ab06EiutZxt8B1u27h55cWt7v9L8ZtZ+QJU7m8j +re5evAeVVPJtd0EgxtGWIKA0oiFhnyHbHluGATbb8Y7oYkDBcJV6kCbM6G3oS/95t+c+NopnyFYL +HuO4iz5dLoOo6FRScKvctEMs9EhPDBzbOXRgQKpgByQt4mG8mj5ROeM49JDwvBwO9nrxSDz8sdjP +7fFvsFUTGOHhOMoIs9f3DzxYlI9nbaoeNgfwFDi0yjAmpbEpBxi07WNMdHCx1+UbIgR1Z8OMEA+v +4zTzzCFIlZKAYuH0t+RWOHeq8u9Y7WJdxdPY7ZIj8ni7aSzPfawDWlQAmuqm2B5V0g+KPD6FKlMP +EKNcw1aEnfc7pXZa73Den4hePtuikQ+Bn61jlmK7JyHxkAVnaxXPYkrw8HApU1P1sblzPKtZXK3R +HnO3rAz9Zg9eIXzGirVKskOAlG73zXPLUY7K/8FmhNGXJT5vCPyZ5VYv4HTw9FHxO/5+13VS+zLC +uUDZFFlmiioO7Hk0qa0ApjvVxoWj5nKpss8fW1iRWuiNKsizbp5aK18sNZaHCVJQt0J+yYUCtJ7u +N45fCoHgJMlxyDlbs/2bdJOJEcgxZWVbyvZfAVoZqKYl5wCaglbTqJIsShdKD5NZaAGORwG9dR/u ++p+E9fntCz9wCsAkfwTYIQnJfivEffxr1TyewOH2ugP3xqARIt+BtCm2nflm6DidpPY2jejQ+9Cg +rSNgdlNWsUKvteJNOroTc2FwckUek6/Y2DGNnGHxqPt9OOSsIbthtf0h56lTXUvyEqtzLEzHJpTp +42Dd6eaRiWi/j94pJipHoltI/ccOc9mdXqdYa9mjrpENA+Ibydh4ajPLmZIrpewqKJAzUVRobNXs +iDeNkwLASyK/VTt7elg4Tt91BfEveoFwre/WiCginH6Q0oOQL3+UvyZFSYmI45tbnRWB19zA9ncI +UepFdqYIOPYY3yln8pj3TnPIH4RMvJ0UBmBTXjpbesu9kYkgtXVDWouoh2tRG9GpNBZiiUYj4MYV +QTnr071msLpp1UFYLBqMCub6YIzfxzmi4i3N1D3oyvE7X16tFIbpnFFX1QrjB9YFM95p2V2DsXpy +0Y9W3lgPXLsUYCYoaOUko0Seg3cG45j6bexmJ0uI02N4zOIIbluLi3aeMWe0ZfnTOI0CHD8TM9GS +h0WKS3Bu0Ak6HNzlyZHHvNF676QlbQSx58Eqw5YsCnmBxeAZ27ABqiaRVKnnFW+DkX3QCsthMQew +DWGn7SGEOP46JGV16kGyleBRl4W7j+56YVHoT9jb8N+gOoaRJ/U29iAS8GcEgMomEIOqwg+6x4fL +iQbmlWgvncOqDaGtm22unnuqH4aE578BPNxsozHqIxuhPFFIezn3ZnVlERd9PZqOrIhzPNaC5fY3 +C1KRmLXPQXazRh7szBDAw3J7HXkmxIoLhf3kQJvLNTRSzbwRyxD/mBhlUEiy99D1Dxtz1GJFbcfv +dU0eQG11Yzsx6gI12s5K+JzypqaJ7gocUGZ9aE9hifSO8hvRc6/1B/7pM1LMZAcldGbwV3LqdWqg +56KntfL2mjoy6jBwcsGNOIH91xp1xAQjsST8Sd+OAzdPPVryWKDAEUtW9Qo+YV2Vro6JBb3xFFfj +AhwX2i9vOaYitVpASNTOQDuZPu7KMsE2/tXtZn6OySRPb6KZMF/dHWn6cR+rE1jkLBfi6RUUmTZI ++CnBwLOccX/+fbqqGNugd1XV81eBT0o/beeyK3MhupW0t0gSL6YgbwMkNg5IOFpCBwGRSpzoI23s +soUng1HIaTFShgrm5IqCYyJ5So4bp3Uuy4WF8bmt3nkdgszl2mO8MlLe8RBkS6Vwt/DgV1VM/M4F +hcQHAQBgUu7e+lXIbOVPtFJfoAaKll6jTDhTvaP57leaumso2qYGVSAgfWm24dchT2tzlzejW+rc +gus47r0XGGYxcSnqEx2soic721j4iGKfl3S2egw3mQgVLO6AC5zkSHyVK6mAwHAaveR/1RKWUEeE +aH9RXwBaFGdPZ8BfHcWjzAVdInckRBZP1oN5RruLRNieeUs81tCUeue0a9o4njYfRmCfExQsv7Bm +hPggBxkowi+zw8khP4PxfmHfhas3dywpH+GFqysXcH0rp6sxN6ebBnZHzD6VsLRh+SYapQfXbqu3 +h3EOEogc3GW8njV5+RWr9xmIrFLcV9wuJqmuGdHoj1ILODn/xhBzYdPb2KoqM58mlNc1Vg/AsaB0 +Ml8+x/7iLTsTiNFRqjgFbGa1G2RoDFKBT92JpJXrZd8Vh1sU831Ki5yzsxwt3RoenXuhRGCsDz3u +ZHdB5HKK4lJIxY1SkyJ5qOEASJjPCHErESKwQ/oUW7VtfiHlpVZRb+J+uajpl7je14irzhO9JLCA +92bnh0c7s5CxXoWRk/+SQJ92S67WkI5i600seAwq1q74pFYozplBgNhwHxa5MA5kLw8DoW77PinQ +dBeYlWJxtkMYGdVOP3VOgYSA06zxS3fZznhEC7X/R9Gf8MCUTABF/eMW3RMXxIcZ/BH9KcxSczkc +ZutL/eCcOiq1tg6MhVIzzdvGxuivSdrWcA+B00l6sxgygRYorohdEOZaqR067C4UQssz7pZIiXbd +oVfywlScI/rnzVp54gj5q0UgScCUpBgy0exfACF8kn2ElMF5d0yTHeqGW8J9RVPVJsH6Q1K86Kbc +IyNdIupw1R1XFAkwFgDh85VWdEczFtRsBd5mq3Ezt3VczytSYISsfjZ2Cl3pbo2ubqPFWaS4fCHT +rGk8i+R3d+I2ADYqzCL7afQtqKTRGGnPFDpBy1Fz9H5v3BkQ9dn1XCMY+z2Ye8E+BIDsfqcldl8+ +VyOKjHZRo5hQpO4ZXdMd+/26Y+a/dEHpjjT6dBA5di9RqDAIYYz7N8IzviwDWKUiMOj+gpR+XE4C +SuhLzeQ+M0bpppjnwLPn4nGQxqXRz8RJqDC2ANLK4lFvxFg5O54nH0Z8u6KJ39kI2hIXzHOCiRnb +suG9iU4ZUAdDUCOsopEVoAtHvfd2HLqRBwSaY37B4xbsJ9fMlXGoXZ6yUqylkhqBlQ2DpUBZfu62 +P1vyK2US/kCIWdpcFH3gqB6UPAYuY6R+ZO+utepRTIE62FkRRpEC84zlBLkcPlx4zycu4n8BTRyj +5HKVBsn6HzSc4oyV6TzJVM+1lUMgyxjZDnMpVZsoTYRt1j7sCCI6mfnkBhSo0urrqU8RA0Zu+kYm +5eb5WGWHh1fEx14MBs3W2Bo82AoPUcRyPbY6RZuGGmqr6u1ZQnC8zaQEh79PDCR4xduxdNISGA6w +TTeIU3LXNn3LTTHpQlXzgsUOmaLrp2gJM8u0XEng412XBLkII5LQM4j9jNuLUvfBpG01QOsvR7tN +wM8Jho3NmrFRyRw8299jwOJ+j7XCsxpq0sq1O33APpZe +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_lane.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_lane.sv new file mode 100644 index 0000000..561f233 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_lane.sv @@ -0,0 +1,162 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +VPkv9lY2Ee+9yvQGL+4HBEmYXgBjrJw1F+DeanPJapsmpZ03w4p6aieBrdF8jETxUvNDB6h7KI0f +y6FpDmyQeMVB30ILaVluLYRm4Oo7BWUJ14f9Etp2xpsOxuZt0lwlhVTMUndFF8qYKK/ye1KmU2c0 +1V4oDhfOqd/H+FF1/RDiFTGtvu6/Orr8j1dBh1l7M2xepaXUQIK8GwS88hhvdIrjqZ2vhHQBHWsV +4l00z2O19bVifEOEGNYH4KEanwXGYmN0CQzVXBiqx1ucq2YdpNavsW/I5+dT/pq8/WNkwntytrsa +t2NhKFbRk9L3mXVaPxXpIY7wuIa5yHdHxEiPjw== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 8032) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_pipeline_stage.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_pipeline_stage.sv new file mode 100644 index 0000000..1b7388c --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_pipeline_stage.sv @@ -0,0 +1,96 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +pUCd0NP5Mu+aqLoYYtVrZTW+jlNUIWiq0o+8tuj6rt7PJt95SqD/PUsiPLrU6vpkplwRU+5Dgy+y +/gnLgyHj5gBEn0hOfzmOLdDqocv4czB/OvOAwnKIf3RuKOLTPx2lwnEmE+r8keylt4gg9tpeanw3 +VECDZSR8W1NuPM6ReIi8NJnN3r3Xg5eCjJKAxooyVaAGq7Wbx295ZjLsLfme5c5JqkMnRaYEGVaJ +quFKoHRIxtT/G6ulDBjw3D3oY35qZR73ayxrxkKhgivIBFyIpuUy1sF9w+JU+EwfqeEcGQdFxQEd +bJRo3YCy88ukpkLQK3hWyJ/PFtPdhQLxgFlBOQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 4272) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_pkg.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_pkg.sv new file mode 100644 index 0000000..629baf6 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_pkg.sv @@ -0,0 +1,171 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +E47zKKa7SvQUCL3WMKvE2QQgwiwRaSkCIeJaJuxrDt5Ycx5bC81HdpXDsHKuqUVieP1lVJTbKjBw +LITsQ7GgEJRF4zpFApOk0QWIpMA2TBUtlcbLqVPKAQVO7CQNY36phbndslqABKqeT23AOz6npFq8 +4B7aN2b9TmEliqD9QJS06tGEGkwzP6IHDsb7RzEW3h2+0jmAo9K2ZhNzA7w1xBOnKdSl//Y78iuN +vmeOFkvP2I+Q/PYopLNbRXAjiC9R2zQHvghxnF22B98N054SaKvPEh3SuVY/+FKOwai788H4V+fO +b/RFc8AusVHfQ1N9wB0/ANrMLevdoLLBYbc+Rw== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 8528) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_top.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_top.sv new file mode 100644 index 0000000..d97ec5e --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_aux_softmax_top.sv @@ -0,0 +1,401 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +6srZ9wtXwTStVG+LOLJqVuHwrF7Bn4kCy8lxZ9SXCuHCYgYr+MVLAlh4qUcm4Nyx5TnXimdyV9AR +U542sGFrU0E4dzvqKAZl9rrcBvjYstwK4qXlQRQSnRXFS3/kAin/tTbY+NBImhHl9wCTMo6sbOXb +y9OW4UZIyudnAHD5B8ieDn5vaQEiPl7Ik47HSb3Dm7nb3LwBqw31pF94Ml/IlOvgjXQITLLSQz/F +B6mkIwLdeVx2d+BGiN9VbrLjPW4B0Ihgt1hiOFrP5hZ9uU3v+nYQxY7WaPMkC22Y8X4JoLf6m5Ag +01yj0RcnoNZcAme6G3RjED3VA9l6GhuI96pmWQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 21648) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_bitscan_optimized.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_bitscan_optimized.sv new file mode 100644 index 0000000..eac9388 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_bitscan_optimized.sv @@ -0,0 +1,239 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +V+9ttP5A/0hF1VILw+hiGzoSGtsdZVrYmxW4P5DZNfgFsVEDrb0OmjG0EQu/EBHUCjDLZ1VfYyzT +7w8W0JxGCV0aPcIIqFV5HnuyNEPOjXSsPLUDPx73DFgHdx9Cs9FvIRcqkUAsiONQgbNNl7lF7uTy +2nXRiLy9nDFUqd2haQFq8VnwPxloQOFXUKif7T2rzqIgfjjrBTHJhvFsopEDUsHjo8fawDHo8MTt +cI1Da+q6eRODfyZfi48l+2dVg64D7jUsp2E/dOEP7PJlvdQ8333Guntor5mygNOIOSBOBT87HfUQ +ZF1pI/mCX9vGVW9Ajr9pbnqF/N3D+NN7zmGVag== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 12400) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_c10_adder1.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_c10_adder1.sv new file mode 100644 index 0000000..089850b --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_c10_adder1.sv @@ -0,0 +1,95 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +isrAqQEZHY2HqIm/AaNiNXE3ZCiYZcFGqySJ0kDRjJ4CPL9QWo9NnQRh6vSnw7C6FsjjfHDmpI1q +h0OJKWupxxu8BR3SA8tmUQbWneLJF9yajYYML6aQ8qaLZVL8ENNo8CvpZXTGrPzxE5gG+ArVYKBA +nW/B1rdOe0qI3+P2NjzR/8vXXosh3cEJtuH4f8nSKQuzy4O/XYxWZZv+gsgoYNcLW6JQOJVImqlh +xoA3ifGunOqX+Tra8iVv05iJQ1Nkb+7Fj2RTHnpNSShSodJLxbnvXd8+KC77QN+/WrXjyWjScGFh +QMGOL6LsmrKpO9gOnKUhzCJu/Q61h7L0l6xizw== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 4208) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_cdc_reset_aligned.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_cdc_reset_aligned.sv new file mode 100644 index 0000000..d0d84d1 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_cdc_reset_aligned.sv @@ -0,0 +1,105 @@ +// Copyright 2022 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +`resetall +`undefineall +`default_nettype none + +/// Synchronize a reset to a clock domain. Provide both asynchronous asserting and synchronous asserting reset outputs +/// The output asynchronous reset and the synchronous reset will NOT assert at the same time. +/// Both output resets deassert synchronous to clk and on the same cycle +/// The full delay from i_async_resetn to o_sync_resetn is approximately *8 cycles* +module dla_cdc_reset_aligned #( + parameter PIPE_STAGES = 2 // Number of addition registers to add to sync (and async) reset to allow retiming on o_sync_resetn +) ( + input wire clk, + input wire i_async_resetn, + + output logic o_async_resetn, /// Reset asserts asynchronously with i_async_reset_n, deasserts synchronous to clk on the same cycle as o_sync_resetn + output logic o_sync_resetn /// Reset asserts synchronously, and deasserts synchronous to clk on the same cycle as o_async_resetn +); + +logic w_resetn; + +// We instantiate an internal module for custom constraint matching. (The aclr pin gets the -to constraint) +dla_clock_cross_half_sync_internal #( + .METASTABILITY_STAGES ( 3 ) +) dla_areset_clock_cross_sync_special_name_for_sdc_wildcard_matching ( + .i_src_data (1'b1), + + .clk_dst (clk), + .i_dst_async_resetn (i_async_resetn), + .o_dst_data (w_resetn) +); + +localparam META_STAGES = 3; + +// w_resetn still asserts asynchronously so we have to clean it again to use it in fully synchronous logic + +logic w_fully_sync_resetn; + +dla_clock_cross_half_sync #( + .METASTABILITY_STAGES ( META_STAGES ) +) fully_sync_areset ( + .i_src_data (w_resetn), + + .clk_dst (clk), + .i_dst_async_resetn (1'b1), + .o_dst_data (w_fully_sync_resetn) +); + +// Match the above half sync de-assertion latency + +logic [META_STAGES-1:0] r_async_resetn_match_half_sync; // match the pipelining for synchronous reset so that all logic exits from reset on the same clock cycle + +always_ff @(posedge clk or negedge w_resetn) begin + if (w_resetn == 1'b0) begin + r_async_resetn_match_half_sync <= {META_STAGES{1'b0}}; + end else begin + r_async_resetn_match_half_sync <= {r_async_resetn_match_half_sync[META_STAGES-2:0], 1'b1}; + end +end + +if (PIPE_STAGES == 0) begin + assign o_async_resetn = r_async_resetn_match_half_sync[META_STAGES-1]; + assign o_sync_resetn = w_fully_sync_resetn; +end else begin + // Add a small pipeline to synchronous reset to allow retiming on these flops + + // No constraints are needed on r_resetn_sync_pipe because w_fully_sync_resetn is already synchronized. + logic [PIPE_STAGES-1:0] r_resetn_sync_pipe; // pipelining added to reset which will be consumed synchronously, retiming should still be allowed on that logic + + // reset pipelining on synchronous reset + always_ff @(posedge clk) begin //no reset + r_resetn_sync_pipe <= {r_resetn_sync_pipe[PIPE_STAGES-2:0], w_fully_sync_resetn}; + end + + // Again, match the above latency + logic [PIPE_STAGES-1:0] r_async_resetn_match_sync_pipe; // match the pipelining for synchronous reset so that all logic exits from reset on the same clock cycle + + always_ff @(posedge clk or negedge w_resetn) begin + if (w_resetn == 1'b0) begin + r_async_resetn_match_sync_pipe <= {PIPE_STAGES{1'b0}}; + end else begin + r_async_resetn_match_sync_pipe <= {r_async_resetn_match_sync_pipe[PIPE_STAGES-2:0], r_async_resetn_match_half_sync[META_STAGES-1]}; + end + end + + // for registers that consume reset _asynchronous assertion_ with synchronous deassert + assign o_async_resetn = r_async_resetn_match_sync_pipe [PIPE_STAGES-1]; + + // for registers that can take synchronous asserting reset. r_resetn_sync_pipe can be replicated and retimed by synthesis safely + assign o_sync_resetn = r_resetn_sync_pipe [PIPE_STAGES-1]; +end + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_cdc_reset_async.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_cdc_reset_async.sv new file mode 100644 index 0000000..b2f3ffc --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_cdc_reset_async.sv @@ -0,0 +1,42 @@ +// Copyright 2022 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +`resetall +`undefineall +`default_nettype none + +/// Synchronize a reset to a clock domain. Provide both asynchronous asserting reset output +/// Both output resets deassert synchronous to clk +module dla_cdc_reset_async ( + input wire clk, + input wire i_async_resetn, + + output logic o_async_resetn /// Reset asserts asynchronously with i_async_reset_n, deasserts synchronous to clk +); + +logic w_resetn; + +// We instantiate an internal module for custom constraint matching. (The aclr pin gets the -to constraint) +dla_clock_cross_half_sync_internal #( + .METASTABILITY_STAGES ( 3 ) +) dla_areset_clock_cross_sync_special_name_for_sdc_wildcard_matching ( + .i_src_data (1'b1), + + .clk_dst (clk), + .i_dst_async_resetn (i_async_resetn), + .o_dst_data (w_resetn) +); + +assign o_async_resetn = w_resetn; + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_cdc_reset_sync.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_cdc_reset_sync.sv new file mode 100644 index 0000000..e2c745a --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_cdc_reset_sync.sv @@ -0,0 +1,54 @@ +// Copyright 2022 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +`resetall +`undefineall +`default_nettype none + +/// Synchronize a reset to a clock domain. Provide synchronous reset output. +module dla_cdc_reset_sync #( + parameter int PIPE_STAGES = 0 /// Optional pipe stages to allow retiming +) ( + input wire clk, + input wire i_async_resetn, + + output logic o_sync_resetn /// Reset asserts synchronously, and deasserts synchronous to clk +); + +logic w_fully_sync_resetn; + +dla_clock_cross_half_sync fully_sync_areset ( + .i_src_data (i_async_resetn), + + .clk_dst (clk), + .i_dst_async_resetn (1'b1), + .o_dst_data (w_fully_sync_resetn) +); + +if (PIPE_STAGES == 0) begin + assign o_sync_resetn = w_fully_sync_resetn; +end else begin + // Add a small pipeline to synchronous reset to allow retiming on these flops + + // No constraints are needed on r_resetn_sync_pipe because w_fully_sync_resetn is already synchronized. + logic [PIPE_STAGES-1:0] r_resetn_sync_pipe; // pipelining added to reset which will be consumed synchronously, retiming should still be allowed on that logic + + // reset pipelining on synchronous reset + always_ff @(posedge clk) begin //no reset + r_resetn_sync_pipe <= {r_resetn_sync_pipe[PIPE_STAGES-2:0], w_fully_sync_resetn}; + end + + assign o_sync_resetn = r_resetn_sync_pipe [PIPE_STAGES-1]; +end + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_clock_cross_full_sync.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_clock_cross_full_sync.sv new file mode 100644 index 0000000..7836dfd --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_clock_cross_full_sync.sv @@ -0,0 +1,56 @@ +// Copyright 2022 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +`resetall +`undefineall +`default_nettype none + +/// This is a 'full' synchronizer meaning that there is an input flop in the source domain before +/// a 3-stage register chain in the destination domain. +/// Full synchronizers should be used in place of half synchronizers whenever and wherever possible to +/// eliminate the possibility of combinational logic between the source flop and the destination flops +/// A wrapper module is used so that sdc timing constaints can use wildcard matching on the instantiation name. +/// Normally, you should never changes the default METASTABILITY_STAGES to anything but 3 unless you're absolutely +/// sure you know what you're doing + +module dla_clock_cross_full_sync #( + parameter int METASTABILITY_STAGES = 3 /// Do not change this parameter unless you're absolutely sure you know what you're doing +) ( + input wire clk_src, + input wire i_src_async_resetn, /// Asynchronous reset to the source domain input flop. Ensure it resets synchronous to clk_src + input wire i_src_data, + output wire o_src_data, + + input wire clk_dst, + input wire i_dst_async_resetn, /// Asynchronous reset to the destination metastability flops. Ensure it resets synchronous to clk_dst + output wire o_dst_data +); + + dla_clock_cross_full_sync_internal + #( + .WIDTH ( 1 ), + .METASTABILITY_STAGES ( METASTABILITY_STAGES ) + ) + dla_clock_cross_full_sync_special_name_for_sdc_wildcard_matching //do NOT change this instance name + ( + .clk_src (clk_src), + .i_src_async_resetn (i_src_async_resetn), + .i_src_data (i_src_data), + .o_src_data (o_src_data), + + .clk_dst (clk_dst), + .i_dst_async_resetn (i_dst_async_resetn), + .o_dst_data (o_dst_data) + ); + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_clock_cross_full_sync_internal.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_clock_cross_full_sync_internal.sv new file mode 100644 index 0000000..04ff5c8 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_clock_cross_full_sync_internal.sv @@ -0,0 +1,78 @@ +// Copyright 2022 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +`resetall +`undefineall +`default_nettype none + +`include "dla_acl_parameter_assert.svh" + +/// This module is an internal module for CDC. External code should NOT be instantiating this directly +/// Constraint matching will not be applied by dla_clock_cross_sync.sdc +/// Extrodinary care must be take when WIDTH is >1! +/// Different bits of the data bus can cross clock domains on different clock cycles. +/// This skew will not show up in simulation. The intended use for a multi-bit signal is one that has been stable +/// for a long time, e.g. software reading back a hardware performance counter long after all the work has finished. +/// A proper multi-bit CDC should be used instead + +module dla_clock_cross_full_sync_internal #( + parameter int WIDTH = 1, /// Extrodinary care must be take when WIDTH is >1! + parameter int METASTABILITY_STAGES = 3 /// Do not change this parameter unless you're absolutely sure you know what you're doing +) ( + input wire clk_src, + input wire i_src_async_resetn, + input wire [WIDTH-1:0] i_src_data, + output wire [WIDTH-1:0] o_src_data, + + input wire clk_dst, + input wire i_dst_async_resetn, + output wire [WIDTH-1:0] o_dst_data +); + +`DLA_ACL_PARAMETER_ASSERT_MESSAGE(METASTABILITY_STAGES > 1, $sformatf(" %m : METASTABILITY_STAGES must be > 1 %d \n", METASTABILITY_STAGES)) + +localparam BODY_META_STAGES = METASTABILITY_STAGES-1; + +//register the source signal before sending it the other clock domain +//technically this is not necessary, but this guarantees no combinational logic can feed the synchronizer chain +//The register is explicitly not optimized to allow SDC matching against the src reg +(* altera_attribute = {"-name ADV_NETLIST_OPT_ALLOWED NEVER_ALLOW; -name DONT_MERGE_REGISTER ON; -name PRESERVE_REGISTER ON"} *) logic [WIDTH-1:0] dla_cdc_src_data_reg; +always_ff @(posedge clk_src or negedge i_src_async_resetn) begin + if (i_src_async_resetn == 1'b0) begin + dla_cdc_src_data_reg <= {WIDTH{1'b0}}; + end else begin + dla_cdc_src_data_reg <= i_src_data; + end +end +assign o_src_data = dla_cdc_src_data_reg; + +//3-stage register chain to synchronize the signal onto clk_dst +(* altera_attribute = {"-name ADV_NETLIST_OPT_ALLOWED NEVER_ALLOW; -name DONT_MERGE_REGISTER ON; -name PRESERVE_REGISTER ON; -name SYNCHRONIZER_IDENTIFICATION FORCED"} *) logic [WIDTH-1:0] dla_cdc_sync_head; +(* altera_attribute = {"-name ADV_NETLIST_OPT_ALLOWED NEVER_ALLOW; -name DONT_MERGE_REGISTER ON; -name PRESERVE_REGISTER ON"} *) logic [WIDTH-1:0] dla_cdc_sync_body [BODY_META_STAGES-1:0]; +always_ff @(posedge clk_dst or negedge i_dst_async_resetn) begin + if (i_dst_async_resetn == 1'b0) begin + dla_cdc_sync_head <= {WIDTH{1'b0}}; + for (int i=0; i < BODY_META_STAGES; i++) begin + dla_cdc_sync_body[i] <= {WIDTH{1'b0}}; + end + end else begin + dla_cdc_sync_head <= dla_cdc_src_data_reg; + dla_cdc_sync_body[0] <= dla_cdc_sync_head; + for (int i=1; i < BODY_META_STAGES; i++) begin + dla_cdc_sync_body[i] <= dla_cdc_sync_body[i-1]; + end + end +end +assign o_dst_data = dla_cdc_sync_body[BODY_META_STAGES-1]; + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_clock_cross_half_sync.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_clock_cross_half_sync.sv new file mode 100644 index 0000000..4d94d95 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_clock_cross_half_sync.sv @@ -0,0 +1,46 @@ +// Copyright 2022 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +`resetall +`undefineall +`default_nettype none + +`include "dla_acl_parameter_assert.svh" + +// A 3-stage register chain is used to synchronize each bit of a signal into another clock domain. +// A wrapper module is used so that sdc timing constaints can use wildcard matching on the instantiation name. + +module dla_clock_cross_half_sync #( + parameter METASTABILITY_STAGES = 3 +) ( + input wire i_src_data, + + input wire clk_dst, + input wire i_dst_async_resetn, /// Asynchronous reset to the destination metastability flops. Ensure it resets synchronous to clk_dst + output wire o_dst_data +); + + dla_clock_cross_half_sync_internal #( + .WIDTH ( 1), + .METASTABILITY_STAGES (METASTABILITY_STAGES) + ) + dla_clock_cross_half_sync_special_name_for_sdc_wildcard_matching //do NOT change this instance name + ( + .i_src_data (i_src_data), + + .clk_dst (clk_dst), + .i_dst_async_resetn (i_dst_async_resetn), + .o_dst_data (o_dst_data) + ); + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_clock_cross_half_sync_internal.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_clock_cross_half_sync_internal.sv new file mode 100644 index 0000000..a77cc02 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_clock_cross_half_sync_internal.sv @@ -0,0 +1,61 @@ +// Copyright 2022 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +`resetall +`undefineall +`default_nettype none + +`include "dla_acl_parameter_assert.svh" + +/// This module is an internal module for CDC. External code should NOT be instantiating this directly +/// Constraint matching will not be applied by dla_clock_cross_sync.sdc +/// Different bits of the data bus can cross clock domains on different clock cycles. +/// This skew will not show up in simulation. The intended use for a multi-bit signal is one that has been stable +/// for a long time, e.g. software reading back a hardware performance counter long after all the work has finished. +/// A proper multi-bit CDC should be used instead + +module dla_clock_cross_half_sync_internal #( + parameter int WIDTH = 1, /// Extrodinary care must be take when WIDTH is >1! + parameter int METASTABILITY_STAGES = 3 /// Do not change this parameter unless you're absolutely sure you know what you're doing +) ( + input wire [WIDTH-1:0] i_src_data, + + input wire clk_dst, + input wire i_dst_async_resetn, + output wire [WIDTH-1:0] o_dst_data +); + + `DLA_ACL_PARAMETER_ASSERT_MESSAGE(METASTABILITY_STAGES > 1, $sformatf(" %m : METASTABILITY_STAGES must be > 1 %d \n", METASTABILITY_STAGES)) + localparam BODY_META_STAGES = METASTABILITY_STAGES-1; + + //3-stage register chain to synchronize the signal onto clk_dst + (* altera_attribute = {"-name ADV_NETLIST_OPT_ALLOWED NEVER_ALLOW; -name DONT_MERGE_REGISTER ON; -name PRESERVE_REGISTER ON; -name SYNCHRONIZER_IDENTIFICATION FORCED"} *) logic [WIDTH-1:0] dla_cdc_sync_head; + (* altera_attribute = {"-name ADV_NETLIST_OPT_ALLOWED NEVER_ALLOW; -name DONT_MERGE_REGISTER ON; -name PRESERVE_REGISTER ON"} *) logic [WIDTH-1:0] dla_cdc_sync_body [BODY_META_STAGES-1:0]; + always_ff @(posedge clk_dst or negedge i_dst_async_resetn) begin + if (i_dst_async_resetn == 1'b0) begin + dla_cdc_sync_head <= {WIDTH{1'b0}}; + for (int i=0; i < BODY_META_STAGES; i++) begin + dla_cdc_sync_body[i] <= {WIDTH{1'b0}}; + end + end else begin + dla_cdc_sync_head <= i_src_data; + dla_cdc_sync_body[0] <= dla_cdc_sync_head; + for (int i=1; i < BODY_META_STAGES; i++) begin + dla_cdc_sync_body[i] <= dla_cdc_sync_body[i-1]; + end + end + end + + assign o_dst_data = dla_cdc_sync_body[BODY_META_STAGES-1]; + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_clock_cross_sync.sdc b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_clock_cross_sync.sdc new file mode 100644 index 0000000..1fdd242 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_clock_cross_sync.sdc @@ -0,0 +1,14 @@ +# timing constraints related to dla_clock_cross_full_sync.sv, dla_clock_cross_half_sync.sv, and dla_cdc_sync_resetn.sv + +# cut the path to the first stage inside each synchronizer + +# The pins should be |q to |d instead of |* to |*, but Quartus 19.2 cannot match that constraint style for some reason. +set_false_path -from [get_pins -compatibility_mode -nocase {*|dla_clock_cross_full_sync_special_name_for_sdc_wildcard_matching|dla_cdc_src_data_reg[*]|*}] \ + -to [get_pins -compatibility_mode -nocase {*|dla_clock_cross_full_sync_special_name_for_sdc_wildcard_matching|dla_cdc_sync_head[*]|*}] + +# The pin below should be |d +set_false_path -to [get_pins -compatibility_mode -nocase {*|dla_clock_cross_half_sync_special_name_for_sdc_wildcard_matching|dla_cdc_sync_head[*]|*}] + + +set_false_path -to [get_pins -compatibility_mode -nocase {*|dla_areset_clock_cross_sync_special_name_for_sdc_wildcard_matching|dla_cdc_sync_head[*]|clrn}] +set_false_path -to [get_pins -compatibility_mode -nocase {*|dla_areset_clock_cross_sync_special_name_for_sdc_wildcard_matching|dla_cdc_sync_body[*][*]|clrn}] diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_common_enums.svh b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_common_enums.svh new file mode 100644 index 0000000..ef2dda6 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_common_enums.svh @@ -0,0 +1,39 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +kU+BVA3aa5XZwH1ZVim+rdgwUvo+cQvVgKY6z0+eHJbRagvf1ii0zZH0g6vQAkVkfq2o6T8rnC61 +mezL9g8/dwwOuNCrQG3LnqEBkr8+ldCO4TeTltrDnjnHQ2EYPQjljlIgrhK5FBdzHprS3BCMyi/Z +IjL6yEusEjahZeTTud8IwMdjxpcMZopbGS9oPKAcIqvloyG71zPiVtJNl8YfO6T8gwU0V0/O63TK +FxEjjutuAXpTcuFqZ0urQisH/3Wmhxf/T0sYGF7bdf1S08r6kEgYPsYBVhjjYPoF+POxg9I7ODk2 +bC3fOy2lxC4UQCykMmQw4N45Bh42AO7blE3/Ww== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 1024) +`pragma protect data_block +V4+HyA1EVNBqDsQ+16h0yvh416PGhqsBgiygPh73YNUcrIznwWrf/M4drTwKZu3QRxVZYyWhDCZc +RGHHw2PdZJIn59JiX5oczp1anNPfEkdRh2gCfp1Ny7Ijrr2E0LGvGQjIy0N+bM7B2i/dg+bTwJDZ +jZerd/A6c23MW62GQWPn7zf+ctLp1c1YKWa3/F9v5DxX6xWHG+fQwlenfhdUfwN/GEMG2vttq0Kk +sCbckriBtV9BARgWyD+IerT+RA3WA6pF18PGiqIrIOMX3McLkSEeFy/LNk+FEDXxRhk+xVr8eTtC +Lptu8ueN0s5DTEmEqHlHyBeLyWm8KG7SWAa5c7QJdaEet6nygCvbSvGlz7dWfYdzOrD9yTgIuZtf +07PYFc0YSNHKXEf+pEhGM/T321scZN5haFcOxv0MW9/vTRw+FTpbpf3I9gBWNK0Z4twJfujelh19 +Zx4JTiB7p9mPp9lquDYH/+qnJgnQVtpJdKowI0fCl//aXcIjY9iUNhusF1tuNrlL4yU/ogH2xUCL +7oNAb4ImgV/tn/UuDaJFuXITyoCmEYrxRZYF1KeWjz44GDW2dESwzo2G3uJJbSyubqZVgLz6ZbDG +4mUsF14+ZKu7AaCWKE5XXezJbEBG292ATjh6QW8PBwxEQ0GGmV6J0dunX+6RpeMboOr7dhoORDF7 +0phs2lMox+SMWiAg0zkNKd+u382Wn9CHr5l0XeO6Ewzslbdk2FiTQ2H7/XRE/jCa2gs24hDkOrMi +9aRJjy45i77Z2Ybihidh5Aes7b6RedOmxrZuYCEquKaDEbPuP9Aj//wSuLxB8W1ZjfJip2WsdYqs +3xkRpsCNpq9TmMCeav4YVOr0C19c0+zxp8lEsA3YOpiyJvVCVqBfCokVFQHSwHv6qqj7Y00QAJLO +S5rvl7AL99nlErpJ4+ioTQI6Dx3arr2HO8WPhkkT4MYr1B4fUE3B7ABlc2PwjxbMk84AN+6X/TYV +Kc9ZZBbmAGl5lGSGkadQod+LIGKrSM4aDUoCXhxaWIeMVKUzNXZuvxRszyWMEh1TWxMYhn9/3Gz7 +ARVZP+ezJGAjaF5bl3fkfpGRQDsRWd2W5CKfo5y78WVn4v9QYW7OTl1kDDb2gCI9i1qX32z6CQ7r +pv4SGFn9JCwBFhmmTV1jwMeXekrCXUX7+K8qqGpiMHUnUDB/+tDSTosf8BCjjDjdkd4QszpRtF/f +Zh7sRII9GiGoMoSo1xqob3ujGmmCRI/OcW5DjKvsLTZycdPQdplaO15gQamWn5ZnjLTWtzpxkPyQ +q4AvSBGNEEXeJuseIXPFN4Ep911YFQ0Q659Q5zcEYfdJKyUM81Mg38W1fvZrwuJEhwnffkc/hA== +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_common_macros.svh b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_common_macros.svh new file mode 100644 index 0000000..9c0d970 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_common_macros.svh @@ -0,0 +1,89 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +hWUJPeXVNjj+yQikM1NLW+isHMp5J8iuJWDjewLGQfmehWb4UE+6/tvOxIV8osmfsY7OXvktILU5 +OfSq1U03VurTWtKcOLNd0N/P4srgSf7iqCSIFmzdOErSza4pcNYlnBQxoOMCHGQf121pQPD2S7FE +0BIM965jy1TikSS42HpqpDChrRXXDLCWX9P4Mn/mJIT1FtCKVhidJIbSUC92n4136S4hjIg2+21s +ONOcpk6TVrISkOBDy2X5FvtReXkdSXyd5d3Wr7h1uxMDUoaO53UzVQAzNdld8qiW5KENdarNNovD +3sIw0OXQSHX5nCoSmOLVkWEc6KmSTEECCT2bKA== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 3824) +`pragma protect data_block +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 +4Mmdf70= +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_common_pkg.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_common_pkg.sv new file mode 100644 index 0000000..53f8e1b --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_common_pkg.sv @@ -0,0 +1,121 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +o0jY4y2gw1ixfeMUe/j2IbBCU3IZVHYY2jdXluvqggSSLI/fHJIs1dDdTJaNe1w1pDr8Ojjm0pAf +CXsd32mAMD7xpQuLoxH4UXwM8qHCgfi8CGf4fCx7gCMtvg6dJf6TCuGSXiK8ScRHX5JZLRt9hKg3 +BoX39AXevuH305xfyi0Dr165SPmaw6jUahPp80UIWx0P0L4Fr4vhhZWJIY2bCXbgQwoGrbM3W9BB +9P4Wc3k6dDN+v9/DeTzFIIbIzYYX67hvTOEFStRFKTxbaYY0r3/3UAxy1awdCtrhiHJG3+I6PhWq +T0oz+bNQCOS1oaFylk3+n9LilcJjCIVWOn8v8g== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 5664) +`pragma protect data_block +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 +dyuTkbh//z5w3i3F3GjDxylc2bSc +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_common_types.svh b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_common_types.svh new file mode 100644 index 0000000..e8673d9 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_common_types.svh @@ -0,0 +1,56 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +oJEE15iMLTV6pA8YG3SXM7JFHoGmjYT0hqrNcBtnqi6W0s8D3Qgs5tvCiNln9GOaZ5dm2nQ1kZV2 +uhkAuly91psHAfj60reYpUp+g2OYqp22fOtSeRLTfzsBacpvuYqE48xbWegNbk7GsPaNaGyKeF80 +5f4vCf/D88X3M0Oy9RCJRocm79DwssQVKK6EXoW/Sbbi+PqrSW24YnAMKJYu5BZYLZ8kV/RGrEJV +JotrvfcvP5hpffJ8rM3m6utVQK3n3qL72Xu62IqeG4K6pzdxFepEF6U7vjyLPV2AWK/CSo/lWOZ0 +zLZyg9gky3MsoH1xVFriUvTBk8llmE/AOroIdA== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 1952) +`pragma protect data_block +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 +XdbuQr0DtEihcBHi7lQ= +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_config_data_concat.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_config_data_concat.sv new file mode 100644 index 0000000..76b478c --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_config_data_concat.sv @@ -0,0 +1,120 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +j5YMdNvUT4wSla3mpKnCQrRkCpLKeWR6viUM4HN7iZpQNlqmoj0Qwpk67qFhPI/NrvO87Ua7R/bf +O4CnuxFWZg4F9VytOVU9opagoBVsMjF66zmhbVUK+Bo6V6p3YC+eilWKX1Q9c92vWTXs1XtQmLsE +GnCvLa9DpgCleOVcUdPeK7a3ia+lDI3PDpg3dedmdlCAm9uIQ6P1M7V1eDzCBQVxtsTTfafOGhb5 +0Axnqb9Tm7J/2Rer/bXPe/QNyvSo9/cV3D6g87bSfBhsyNHuzmUECPIhUoJvALUr7kV+HjaI7oBk +BTHWBHtDJLYOTjP4FgsNftgsT+5lRxSYB7whIA== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 5616) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_config_data_split.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_config_data_split.sv new file mode 100644 index 0000000..506fb38 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_config_data_split.sv @@ -0,0 +1,138 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +u8YQW/rDzl2pklYJpkQXqrDGdE8DIjFSHHDa5sM7ZRe597d9RoiuyS2fYTXXDA1594jk6F/lJGIo +s6rPez8keRzNtPBaoSG58zuiplklwCoMtGZgcXFMIsnwcDxWgLQYTDbGsjTI7ZP1Fb0h1oiqrzgl +1hZHKBeHOmTGW95ZVhOny5axYapLY5SuT0QgGpPy8RmiLQI7wmSV9sxQi91E2nBFzxs6Mabjsy6x +0czNj2o+Ep80X/zbBWXY2JwmyxIcDQ+VyGlEzgE8YMstK5JTgNJMDZjoBAhP7DsRzZqfAaGE/3U5 +u6lgJm9MiQ1pA9jqZ18omIBxoJmsxnddJDSHbQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 6656) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_config_deserialize.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_config_deserialize.sv new file mode 100644 index 0000000..b626256 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_config_deserialize.sv @@ -0,0 +1,69 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +bPsNbqKsL5DPUh/O/q5qS9boRmzgTEnZHDUgRDr993ApnBo/BeBVBbrOELQ2gInk2VZhOGy9BVKV +emoGr3jDpQvf9JZpsQaqNnqus9jJ9jUx8H1qOkcw+K4zT9rmEi1rxb9S7/7BLkI5cZTWnm9Mw9oE +sLFV1QYmNrn3055uU0RxoigHTNB9+0vTCj8fF20fdRTc/rNb19GRvwOPGYjoL+QcF0rfjt6/tVRn +FsffPZrEdZ11Odi27S9jAq2+u8TiX2eCXXwg6er1+JjOTBcsYj7rsFTdkb6tsqdxXb7xG8Nf/B8o +35o8OWMA/+bBJyEXTDchxRFvhMvBDOuMg6T6gg== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 2688) +`pragma protect data_block +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 +3dJv67sU8dgG +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_config_network.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_config_network.sv new file mode 100644 index 0000000..47bd61d --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_config_network.sv @@ -0,0 +1,449 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +fGmDx7UR9Q2iltt4f/9ZZG57Izum/gi6Ng/xm9osd/7PLaxjHmrnyKOe+g6HUAPb4K1dPjPqL54s +QvsfpOCW6Xm00T9BIFphgyeItF8ZWeeykw3fad49vWGbzvx3E/tyicPSGHdM9GyNFN6hT3Cu8dZE +LUQlne0nyXDpsKPv9aFsvt2gzvXM4ly0I613fMwAY0RFabJ1ejuNMOg3jWFZiq0R1x4j3imf0egw +IFkRTRgQ5EtEvYtYNtFkvXBEgImuSv8dA0u+cmFG66Ntt8+gd+nmfK34045TUUokfoBnSId/LsFx +NSPHlIr8mvNSk5BedathhJG/Ju5vvUzlYsM40A== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 24352) +`pragma protect data_block +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 +/sRUnjDIUcuUDlh2qw== +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_constants.svh b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_constants.svh new file mode 100644 index 0000000..41b565f --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_constants.svh @@ -0,0 +1,52 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +P9ILNf3SWv0t2RMK++pxVsBx0EZUgEC0UuTOUEiInUSImJZ2RRBpw18yyX6u8kfyouFkX4g/YvM5 +0kTY2ouuFsxmGr2fU2vPCBduVACJZoBF0JjoMa2p7iR363NiTvLMkQrAQMkBFAUMGyNFOMvfynFE +SS+ZgYss3/YCHMwYz50MMg2S8O1GrOCIkK6q3+phqDkvRt447D0xqnrbpQxyurKXpNoaHiED8peq +Sb94KHCkO8DuvI5zz96TnzvKLAkQi5DcZbnaYCyIWv/fqXwLvbWBcU8p0TePFRlztpwdq4aiwdrA +0G2cNhtxYVQoOtDn4lgAKYEIjxpZgGwnx6Aq4w== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 1712) +`pragma protect data_block +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 +xGY= +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_counter.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_counter.sv new file mode 100644 index 0000000..d0be539 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_counter.sv @@ -0,0 +1,112 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +44TZbU/50JuG4AvBT/sMUWlN9D+0ABq7mu+DYYrNORBkXnWJD7UFtbz5kEN+XNhvS39U0BBXyIwI ++GpEembFUv9FTrR5R3psAyil6hfk5En59t1LysS7ndnNiJIy+dm29bh3911vERAe+4B6Y9UewNyH +H7XKqTc/iI7ACbso3/5/kYAf37HdRvKKfmrDvxBdmFPb2RTkQwwxdQMJ4LDcEBu09l/UAluuNpfE +jfmimunQtSzx4zGmv2RtvdX8hSoGbOxqenSKCheJ1V860H3gwLY+4r9FrqVf2ahGx37a6F+3xGjZ +GFHnh/YqPXJdc/Kc8KKCgc5gAc67FRq7dyApKg== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 5136) +`pragma protect data_block +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 +1P2dNZAK +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_ddrfree_config_data_read.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_ddrfree_config_data_read.sv new file mode 100644 index 0000000..d8920de --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_ddrfree_config_data_read.sv @@ -0,0 +1,125 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +SzItTV9ofSoI2oFW+DryUOTHwxtj27AAcVaoRCC7KEgqF40+SagngkQZwaE0Sso+17hronrCCHeP +uZyCCFvFjtpN8nPqaJmjM9brfsnp653Dc/qkV6yPJvKFPZ4ZoNf9tCIz+sqUnVEjUblF9ff3887x +E99gS59lJ+Hr13D2w5Kuv4ukRrP6YCIzyG/wEevQimadhApo8eQR06Bi+B2ksSyFkyOhWOz66NAF +/xbBh3z4+XC0Xg8sJ/Vmc26KrKwKlz6HC2J5ywsvkoW8/HuE2g80tOvX1jxPRgA+tY8ItH0sJDXO +rOrKESrLNoKEW76rsMU4wn4GmMtMD1uvaMfw0g== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 5904) +`pragma protect data_block +zWqHFoX2O4RCWCKPIWsjJPtlvlABlX4+EIgczfF9Hu8WcMrkN/DpJBPfYLzBnQfFbqAwfGId/enp +SJhJyouNkEHp9z2T1JUiIAWuhf/JEs+/JbceSj79MbamlY8lhzgmQE0IacaUY9iRw3eMflW1By1a +1WUKFfR4qg3kNtkxY0Zfsql2+PR8UVVPGgNu6ikb/70inu9jHWegjgpxWbHZ+WEbUN6GQY0ouza/ +ydx6RjcCV9r1pi+cLId44nYIN8PKl19TEwre+vCo6LvHVl8DZhH4av8UOLTH5i/4ixgGFanmgDkE +TimBARkSsuaWCc5AEpoDNKbAvvaj6ZA6liXuHHvXvpNbgrTt1S0H4lSSZYIq5ogwutdYIOkAQlnp +m1AK5OsJAUr93YCglaLPemn7LBFDKdutCAUi6hEM86jpBZQzmFqUCvSNRJ/GSgHl2MWpzyW7tCVt +JfLYCc/aKx1nuy8XB5NaBW0IZE7JezJVtyxYHh8q0YbxWv/rjA7nBXPmvG2dVZow0OxfqsEzWyfM +ZBwglKhVTxmyRhBe0FSBJ5q+ODblhjC5I+3Zy1lgcOiiZqVK3qBrwHN4+FkyrqYo2t9DJIKj8GkR +7WHNiVUQsuP3lSCvmiqLWIwVgTjXDKRRDaP9AKi8lKEZqguB2bKCs3x6gQT0aVBmTfZtFpG0IBfd +BoSRvPmXBAs809Dfd9mbG/zZf7ASaBu3zYYWF594hj+KKtVn1VdO7ZU9UaiM0Udp0UibxGM215Wu +60E2J6lA7Os0Db4TAJFkOPaiuMqbT7kgVRQ5Lpg3rF7YMJXX9uzgIJjmSnZ6r0PFPEOCs1KhyTNs +Y9pps4xIpvyfarh2mvIwOw8lsp6OH/tdiR0pnBE7x8arp1OcYMc57jtiNYu9PCTGOAFRZQR4Ix76 +TNAy8/ZlzP9R7OKAVJYma1JpOymHbb9HRNg06nnToHJZlpTSHTX6GrdNGcH2de5zPxO8ZpQgPGUZ +wsdXDUDLQEnvpIMCFS9xre1K+ZomE8jhRaNlMAyKC0rDHm8SJMwRnYBLP5TrlD2QHQf3NBrPuI4p +aOGNj+0jPEVkgIskfI2v+VKNgqYsSmRzK9+CBsmp3b7kgs9QJWkh7arOge2Zzr/kaBJam4QzwVEg +u69CyrOQaUhy7xGHliyZBBYaQAybO+bGQbnNXbILmXzXpL8TKBarnWmqtwpoaZCCyqoCYvVAkqV4 +Cq53Da1ddR07JPPmRy+UBIqq3VRs92tWyoh5Sm/zjl8U/TjMTbE4OtDx3Mh/Z+mxQeNVNx2qFEah +KF4ggX3dJpwu1QuEp8Nm4Xx7mazmenZWy86FJTaVh+3N/CBFzxFCNVpuPSyiP9uRtMiKyMB41wVn +RuEr81Rd6SCaYZG/IGjsdGHJa3Wftxjj1olR6Ed+xp2+yoiwqa9BUgD2dJeB7OaIDRqv33k1zpfZ +LJeadctnPEnASWt59vCoc56p6xhQHQ87K8n+uYxIIFJLSUskw3QP9/saFNfZZgchpK3hVMQrwbfO +zZTYzH50tHYZMcoJPXBagrLLBUOjSRLIkG28Q1pg1QEyq6VXawsSzAA6jjRI3/13Cu6rzus5mWzG +o1oQAFERqbeKXr7o/7fQvQ+44k8hzi+ltZVC1EoNy6MKxZRnCHfxRvu2xxepJRqJhOb998DjD0jF +pP/13ysqu8vQyC4W02KrE/k7eQ/MYcQyQkgJfAeHcZhf2fl/vnBfyN6ELb1qIuhK//p7DckzmuY0 +tFw5ePRCK7pYXv/KOb2hpvflMUmRO+AUEaD4GNjWmdqRIXtv6MrqeDNrdNlL+31kdI7ksR6ugXRG +Io8G7Wr4B1AIdN/jWuDVMvGvNTgjuHP/Bh6ll/txFDnHQeAqpIzp/a9lUPBxc4dbzkV5QJfZNnR0 +oE99sAOZBlquV9IN+yU2CSwHgScpSbJqMzqiAo0kp5Z3O3w4Lzbxz5pudes93oy2H0OczKwH+apd +s9F3rl2o90Yc/SDknV1agLBOmHfW/k9D9Zt/dZgoGs22iXfHaGUEA03VNWIYL1SWhZ4QTp3nZzwZ +hsURBFPvZG0X6odrRYo6593Jkr5DNIXo7bRDAQYais+s+RzOMftlglYrKu5woboxg/NZwVNGhxGj +C6s++aQSnzqD+DZPqGrabQVT0KMBYu0DN5EnWk9ge3nDG8/+d+GQpMW77NyvYeTV9M+IZm0lkDHy +SRGBvLFhQphQgwadDPsfBVOZeqDfEf/fzMr+5CkiS65yMyaGozq3KTLEsNqGit4SeIPvfHwuZhLR +Huxovwhq9qFjWKPazMeu75qWHhg7csRGx3ony3wc+FVUx42IPSRrr7k/t6vUixr9/NIHjRYR0ggf +L5CdUm0FwK67IMVi4vil7oOCihJt97uJv8CZnUzdRb0FSd81aVTRuAcoYWDf4hQfq93WTn1dTHXg +JYftkhYHr8BLmaNSYX5XoPhuhRGGo3eGHGYzGZVy4TLAHY/0bJT4RNXjPKKw29NAkDtXciZD6u1u +wSv0w1Bg+5glaRUEjMdU9JHZgMwq/u1VpKBOoyCgOU8Sc3/8eqA4fWSZqMSne513oiLG5nxq+OOR +10NiNP9vzBcWmVzzaKaE5FKeUxgCbrX0g9Qxn4rQi9nf28x1JAR1Fd2zfTwUQshLP1FnhjBCh2/V +EkN0HyCEK5etBnu8E0/P2tBhr5OiLOQ2VIM2lhY+QEI+/q7Oy69N2dKF+I+Bk95nJiuXirNzeVRt +55lFW2OxRLqgKNLgrJCSEfTqezP/dVRQEJqhLGqFOUH0U6aL2QO2Pov2xf18wnlbja7A6exVqM4d +cbzeg+FVbEjDZULY2o9DTVtQgZrIwKQiueVhoh02i7T84nKzshrtj93Cpn+DxXh4XJodccnFMURZ +ESmVdOE6tGxqNSfVa357Xmev6arNGq2TYw+4AXUjuIrcum7OPqb1Zb3ecCjsLK2h2oNiLDGiBo6W +6v+IRjhSh3ie47pI85FLKRIDvXmc8YJwsNJEEPOmiSBBsOdTbEcQRIbw5wGgZYJCoghJO9qRJQxF +OeIEVp+VZqkUiNkGKWdH5H4QRusSqKJYaueXcYegZ82LtnE3xCaXkoEbtxGBvUXO8cpJkyRyxWxW +ToAUuW0dJfI5LxTXvv0o7wrKoRfoxhG71mWzT+UeDxaVNewJptlUvHTjmd3QBR8YqXuPZjxWlezQ +nuHE5lY5y1odOS8MerCFFJ9o58dDI8uAjM0GweWNSXpb7PtZFzklbs93ifWN+sEfsPAg5k37TLQQ +5eXvNGkeAy93AYGywFJOj/lAYKmN24wT217kj4HLsxLsfnjpzEdF9qqBtsHrcsatak/x7OlNqMMb +mmoVBtuEZNDzlxxHdIspWCn3y3uAtRxZ2BIsZlFCQ3WzEdoR4MzAqhfQm0bgye7hzh+/NJYgcN1D +DwTRHSlPOR2wL7qYSns+i0LcT/YCLY8i0equNK/QiJI6tsnFTQZlpIEMDI9l/DkpPr58P6X8mEfJ +cezmKOtNHk6KEfzUnBnrS3N9Z6WOhN09Qmd9oWUxMOrwUaN17DaoiB8rV62F0+CS76agTiOzIsIy +LvQxj+gCAL+JhlBQSTPYg1zEo6Iu+7fsctteBdQSaM8eG90q4JoStLm1uFUekta3iqNxNcY7/iGz +cBItVLlK+lJ5975p2j3YBcM63RELlDEtDUs1n7Fu0D+t4YyOW0EJ+DwYrn4QOPTYx1kEjsqnz9QR +ArfaPJ2LyNYKPhGcIRrIqv6+QEW2pJMLOz1FQ2IrOr13TybDXC8dUTOxNZO3VPuh+aiXxdfcBGCY +u1QkU+593WtW3NAWYQhC03RSjItSPWy+WHhEKMmw05SAa7Cy8xU0qkHezo0K7BgHkySUKkJyZovJ +xYb4RYeeD84T0MR8bcY/BzPxPDHG+2KKvzdUvRaKJiLJoDqOFyeskTVWsXp7m84k5X7CMU6DjWs/ +6wQUFi5sI1TmIrya5DmYLbafQzSsDoSnwjgsiqe9ucXrdw3i65RII9HNBz//t1pAxcknZVks6Ss3 +N28exyuQScdFw9FdmUlA7pMyDTVepAOg3QMZBOx595wiF6w/+5pD3BBNSNl+WyJVBFx4fqaD+eWF +DoqEbXgOWP2+oXwkhwk19kjlQYdgZZBpCYtpDubd8UgxU1yAIA1Pf/9OzIvRCrtX/qOK1IvIMudr +Sw+WIlqwY4hVzty883crR2sBfQu5Chc3ozT4du1d5jGydRRz8ExMyIC7Kr1y2p/vebx0biiYb8mq +bCPcMOjNeo0h6XYE1LCD7JvQ9culARiMacipb4Us7t24SecpVhOeKc8ZWMTrh1PCr2T2ld3g6lXM +aU++5qylooWYX4kmhprIKuDry0bOq88xAmVzt///vJYFVi0JXSPK6rfTnyLpEyDgyAU8XeENyu0e +BigqlCr2iO/rHl9rptq84gkhhoZF8MRwOp1R/WQRrRXm76TOU/jBDOfOtYfhTUCvS6s6BR2mKrdz +qUG4a9+QqVweTeZmM1Vk8AXYk0cCOoDM+gAcGHzfVTdg60MuB3Tm0bAHerXdJeMA463/eart0iH2 +g4moiMLt1EBVE4uaN1tdWjv8FCzVNwa5d3zpf7Honk1LEU23eTUMK0gedOEBZemgF2WdWT3lyeq1 +W2TMbPNtGEOnnF9p8gtgwFl98Oyl44StywC2v6ozNhzfZpomALHKY4DVeGf7PE1uMCcqmIgJ2Gbl +TSapYxJXwtaqOvqU8XihS7zf4lL0W4rEOz6boYPCpzObD0IVf8Mv1NLwmuTgNiYtuTaZm726yrzG +d3adxtBtd1k09K6App4Gj6vMrwn+hADSjA1SWqGMI/KVxx281LfYxfKrZE52miW+F8/NM6pHQnfX +PcPXDfaKR08qLFHmrES/HLsWLEjQulAqy6n0r8TSaMKCqadCEV6g+VqfeRuUNaLgBe0eFevc+kKQ +KyO/VGYXII1H6VIL+qTO+51C0AeEcU5r8J7jWiWeMIJQwbNjmUhxIfTU6T1fdQ0pW3JwcpnNNW8a +uwJljMvMerjoy4M2IWJtSBBi4gq6zTDJZ2YNL33JwB2H6sNyu3FD+XYsuwVdQjrzjuNggQsyOQkU +ZTL/XOJUbwjoguaDhLkmZvDjq3fSi5/nNy8YnOPgQeQVVWvlAXUIljeYu4Ow41f0BsS3wrqL2rBO +0TqMp6WpAje6f6Rt3lrpjiXPJOwPM9zpFvqdRDW+mWX51iaKEmgMXMUdXg+WsvDflRbfvScr7TM3 +PdPm0zKF8uzgTWEaTRYKZGJ6CNsFouB6PmlfR+Qmhs2n+6LukQRMZp7dXp1G0uFzuxAq0DLCmI+P +AGEu3GIR0vedHOgQ6YPfqlB+Uee0EN+cSWNzE3SkCdlxwRf0K90nhtjXKQ1gcJkuznILMTH+EYIm +M8ajRLit4ABriuJSLCLJ/87ah5uNK56Vln+kHA3J+kQjgW4rA7qEA/wHeS8QT4djE3N1PKo52Flp +T7zMx0meR8WTlALgGv99ZqZ0d8B8rmqDB5qbuf/9f36P7WMaphtT/Vm1qDhj7fVSkS+nYFkqOMqr +LyWwczvH24iqxHOtW0l6TDUc5JTpJFiCNJe4v2jD8fD52UvZp45Jl06gTIZNdt+iLrsnnE2dK12M +Fv67sbfSOuK/WsnwQxp8+BQGdumJ7JDHx7O+7CNGbNKsolQHmXvJeKJS0gG9GnKI3SsnmUlqdjnW +YbUm9VnEM0igPFkQmT94YuZxz2t5f9dxyi8MV3aTD0GeccadagAF/n/JZgwtMOrvdlc2+78TeHr1 +JaGKhMaufOv8iHmJ/cjd2ADyF9Ow57/YC+fmAw8yWw4c4L7hKKTARKrKUVq6slZZbchzK+rmPmGh +cpWh+5Mq131VulwkDoNJlYPl8Dezj9wyYakwU03Ryo9XhhWWmVqinjFbuRa6JX7POo8X0hUDbRO+ +qbg1LWPjzUVG8hKZ/rg9ZzlKbz56VlopIubzf48elAAAPK29Nd6PqzeZ48Ca7bGHbn53jXHAIFH3 +Keo35UaLcSaEJX55LWlciwJzOPHor17vmngTlhTrEzSKjLwsw9s43X6h4GFkIrKtmjLnhnPLTO8d +dARWmzUxpXNaf8ky9M2y/oz7vGSphu/OR+MxDsf5iy/7ZaKibIim7cJRgqwB6IJNZkT/Z7tUpeIH +EZArLdt9hEebJmh/gk6VoDk/H8qLLLlaBuYeKMKqQ8GLncDZVFjMpGLau4uqPj+f3s+vJQsuqtDW +EOHqxflgPX+WmIaArrOZ0Pf4X3Sy02RCdjRCSwo5VbpppTVZXmE5Itrh+LJF1H/VjIZwHY4bFwBU +6CBJN1i/tE7zfmoUrWOXOtryOc75PcaJiuJETGKGyn8d6lJ7AfMw/R/Zzxp2M1tx/q0W30aPGs/S +uzI9BkumNh32WuZ6d+vJxV+PqEYLIwLtMdpwRyVAPBITcbqKLIb0isjc1ZCWtYA5WlUuRN5SOUSJ +xcl/+ZcCugGImie9Lnwob4/W+E94/w/IhY7DR2qO83mpOffYxu+1kDH+bO39C2E578HPnINMdjdR ++Movh24n0Odyc5esKJy91jD80rKjOIZYSjXtADLWBw+awiBI0FlyyddK/ZwxWv7VeYKcrAaIF4Tm ++5w8fbyFO5Eywx+QNPW9+glh8zDRrsUDy+NveltHe5bzxZYz8PvZ1Zaq3+TSVbpggvVIYIVACOZw +Z99Phqs68mbeV0kwF6TmJA2W2CbNAWaKp9ssjK1iyQfZWGMuBwJ9x1PZxuE9TXWdjzsO4dLcaGjl +m8LVb/XuLpgi/fJp2bb5j2Nz6hyQ2/07POveMURnnJu9/nPKwJXrL6lXvpOO8QyDrvLQ2MV+Xl/W +SPHkE0Am6mh04zVBGvBZqRVxvsEKBnHM/L/tt0pNXCw0xGeyIuwbZwJtSsCw0TK5qa9JXM2mGR/g +m3RLzL8mJlZ0qCZm5H+tyoMyPgutcQ5AaaNxozQCYo6ssFoc2+uICV7XrJ4TmACannFOZ8zNDz4A +hB1kwocwWzKfKsvbf1rAZDNOejLa2b9klJKCvI04+kDhecavqCes844wYHTN6wSQQ9at9qU+17th +a/TrlyZMyfcUVr3IBVQWjh6ESbwXaVJ/TH5bn4BliVowFCOgzZZsZkuqHI1l+78hGY3CVvG5wF3T +xVeC+PIMYob350o8aMLsOByHm7FJlyDh2TBVQQYHseBKR1RZPl/YqPrAoWZNTOdTu469rBp6oz1B +dW4dbFwLz/W2F4iPPkkmZkTUujHZk5oXeYu7ZlDp2lIocRDfmSfI8GOW0U2yew5lx/0cshDXz9wU +rVGnc9VS2EH+Ucpc/MkNwbCh2IYAEOdlSrWEr6NL/fwQH2ASK+npapd7hLoQKvQx122D/gMwhuo9 +Rv4BtuZLtRmxAkQdpuEnb++wy/HL1S2S5rz4Avag1fOyRSx8nO1LqDEGLGoFtK2QOqYTE5ZDisHc +BCq9JI3RmDSZszXcpBTZl52sio/nYaB756qTMH3qiCshWWHIl9Ex9puxJhV8iJHXj3FQ4ZOw2nRa +r/1Y/JfsQFdfRzUNBDC+vfWJIvQRKug3sOU9KbLotYUQxQV7ob6+ogRX2eVEA8HdtoIY2V1UFBKT +/CIPemVgs5yBsUgQ8Pdf5aerG37MWhyW8s67RuolENzd6AN84bvBpZpaDBevn+CVV8hbaBbSWIeB +jA8iMQTL8KOX6voOGDl4yDoY7FIXzNzlrh1mX7sqmPhf/uFfwlk3duZnXyLy8P3GI8aYIIN7Iweq +WrC+/0s0gg3+PVrNCX7BzXCfCRGgseQAoPO2DnXNkAR1bE/U1HPsBitGUHxf5Ne+4T9fcc6Y0HAD +nuzWQGHc8hMGWNI43tB0fRuseS8pw1Of6EzeMvG2Lutj +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_debug_network.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_debug_network.sv new file mode 100644 index 0000000..9c9d2fb --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_debug_network.sv @@ -0,0 +1,197 @@ +// Copyright 2021 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +// This is the top module for the debug network. At a high level, it forwards read requests from the CSR to one of many +// externally-attached debug-capable modules. This can be used to make hardware profiling counters readable over the CSR, +// for example. The upper bits of the address (typically 8 bits) are used to decide which debug-capable module to forward +// the read request to). The lower bits of the address (typically 24 bits) are forwarded to the debug-capable module. + +// To perform one debug network read, the runtime must follow the scheme below: +// 1. Send the debug network read address to hardware +// - write to the CSR, this will trigger a read request to debug network +// - the value written to CSR is the read address sent to debug network +// 2. Wait for CSR to cache the response data from debug network +// - runtime can poll a status register +// - in case something has gone wrong, runtime may give up after a few tries i.e. transaction timed out +// 3. Collect the debug network read data from hardware +// - read the cached value from the CSR + +// The handshaking above was developed so that no matter what happens in the debug network, the CSR will never get stuck +// in some bad state. Furthermore, the debug network itself is fault tolerant to externally-attached debug-capable modules +// not accepting requests or not producing responses. + +// Under normal operation (no utilization of fault tolerance), there should only be at most one outstanding transaction at +// any time on the debug network. The architecture of the debug network is a ring with a shared data path between address and +// data. Each node on the ring interfaces with one external debug-capable module. For one transaction, the following happens: +// 1. address is sent around the debug network ring until one node decodes it for itself +// 2. this node forwards the read request to that external debug-capable module +// 3. this node collects the read response +// 4. response data is sent around the debug network ring + +// The debug network is fault tolerant to external debug-capable modules not accepting a valid or not producing a response. +// A misbehaving external debug-capable module cannot starve another properly behaving external module of addresses or +// responses. To support this, requests are never backpressured by the debug network. If there is already an outstanding +// request to a misbehaving module, then clobber the address being advertised to the misbehaving module. + +// Technically this breaks the AXI-4 spec (data cannot change once valid is asserted), but this only happens if a module +// didn't respond to the read request (either because it never accepted the request or never produced a response). This will +// cause the runtime to treats this as a time out, and it will then move on to issue another read request to some different +// address. If all modules respond within a reasonable amount of time, then the handshaking with the debug network is AXI-4 +// conformant. A reasonable amount of time is defined by the runtime, runtime can query CSR for whether it has yet cached +// read response data, runtime may poll this status register a few times before giving up. + +// The debug network is also fault tolerant to external debug-capable modules producing spurious read responses. A read +// response is only accepted if a prior read request was accepted. + +`resetall +`undefineall +`default_nettype none +`include "dla_acl_parameter_assert.svh" + +module dla_debug_network #( + parameter int DATA_WIDTH, //width of the read response data, typically 32 + parameter int ADDR_WIDTH, //width of the read request address, typically 32 + parameter int ADDR_LOWER, //how many lower bits of the address are forwarded to external debug-capable module, typically 24 + //the upper ADDR_WIDTH-ADDR_LOWER bits of address are used to identify the module id + parameter int NUM_MODULES //how many external debug-capable modules are attached, module id goes from 0 to NUM_MODULES-1 +) ( + input wire clk, + input wire i_resetn_async, //active low reset that has NOT been synchronized to any clock + + //read request from csr, AXI-4 lite read address channel + input wire i_csr_arvalid, + input wire [ADDR_WIDTH-1:0] i_csr_araddr, + output logic o_csr_arready, + + //read response to csr, AXI-4 lite read response channel + output logic o_csr_rvalid, + output logic [DATA_WIDTH-1:0] o_csr_rdata, + input wire i_csr_rready, + + //read request forwarded to external debug-capable modules, AXI-4 lite read address channels + output logic o_dbg_arvalid [NUM_MODULES-1:0], + output logic [ADDR_LOWER-1:0] o_dbg_araddr [NUM_MODULES-1:0], + input wire i_dbg_arready [NUM_MODULES-1:0], + + //read responses collected from external debug-capable modules, AXI-4 lite read response channels + input wire i_dbg_rvalid [NUM_MODULES-1:0], + input wire [DATA_WIDTH-1:0] i_dbg_rdata [NUM_MODULES-1:0], + output logic o_dbg_rready [NUM_MODULES-1:0] +); + + // Parameter legality checks + // Non-trivial data widths + `DLA_ACL_PARAMETER_ASSERT(DATA_WIDTH >= 1) + `DLA_ACL_PARAMETER_ASSERT(ADDR_WIDTH >= 1) + `DLA_ACL_PARAMETER_ASSERT(ADDR_LOWER >= 1) + `DLA_ACL_PARAMETER_ASSERT(NUM_MODULES >= 1) + + // Must have some upper address bits for the module id + `DLA_ACL_PARAMETER_ASSERT(ADDR_WIDTH > ADDR_LOWER) + + // Module id must be representable on the ADDR_WIDTH-ADDR_LOWER upper bits of the address + `DLA_ACL_PARAMETER_ASSERT(NUM_MODULES <= 2**(ADDR_WIDTH-ADDR_LOWER)) + + + + // Reset synchronizer + logic sclrn; + dla_reset_handler_simple #( + .USE_SYNCHRONIZER (1), + .PIPE_DEPTH (1), + .NUM_COPIES (1) + ) + reset_synchronizer + ( + .clk (clk), + .i_resetn (i_resetn_async), + .o_sclrn (sclrn) + ); + + + + // Shared bus for address and data, use the larger width + localparam int BUS_WIDTH = (ADDR_WIDTH > DATA_WIDTH) ? ADDR_WIDTH : DATA_WIDTH; + + logic ring_forced_valid [NUM_MODULES:0]; + logic [BUS_WIDTH-1:0] ring_shared_bus [NUM_MODULES:0]; + logic ring_is_addr [NUM_MODULES:0]; + + + + // Generate the ring, each node decodes the address and interfaces with one external debug-capable module + genvar g; + for (g=0; g<NUM_MODULES; g++) begin : GEN_RING + dla_debug_network_node + #( + .DATA_WIDTH (DATA_WIDTH), + .ADDR_WIDTH (ADDR_WIDTH), + .ADDR_LOWER (ADDR_LOWER), + .MODULE_ID (g) + ) + dla_debug_network_node_inst + ( + .clk (clk), + .i_sclrn (sclrn), + + //debug network ring, upstream (connection from previous node in the ring) + .i_up_forced_valid (ring_forced_valid[g]), + .i_up_shared_bus (ring_shared_bus [g]), + .i_up_is_addr (ring_is_addr [g]), + + //debug network ring, downstream (connection to next node in the ring) + .o_down_forced_valid (ring_forced_valid[g+1]), + .o_down_shared_bus (ring_shared_bus [g+1]), + .o_down_is_addr (ring_is_addr [g+1]), + + //request to external debug-capable module, AXI-4 lite read address channel + .o_req_valid (o_dbg_arvalid[g]), + .o_req_addr (o_dbg_araddr [g]), + .i_req_ready (i_dbg_arready[g]), + + //response from external debug-capable module, AXI-4 lite read response channel + .i_resp_valid (i_dbg_rvalid[g]), + .i_resp_data (i_dbg_rdata [g]), + .o_resp_ready (o_dbg_rready[g]) + ); + end + + + + // Debug network ring does not support backpressure. Under normal operation, there would only be one outstanding + // transaction at any time. If fault tolernace is needed, the scheme is to clobber the address if a node in the + // debug network ring is already asserting read request valid to its external debug-capable module. + assign o_csr_arready = 1'b1; + + // Start of ring is the address from CSR + assign ring_forced_valid[0] = i_csr_arvalid; + assign ring_shared_bus [0] = i_csr_araddr; + assign ring_is_addr [0] = 1'b1; + + + + // Cache the most recent read response data from the exit of the ring, in case CSR read response is backpressuring + always_ff @(posedge clk) begin + if (ring_forced_valid[NUM_MODULES] & !ring_is_addr[NUM_MODULES]) begin + o_csr_rvalid <= 1'b1; + o_csr_rdata <= ring_shared_bus[NUM_MODULES]; + end + if (o_csr_rvalid & i_csr_rready) begin + o_csr_rvalid <= 1'b0; + end + if (~sclrn) begin + o_csr_rvalid <= 1'b0; + end + end + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_debug_network_node.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_debug_network_node.sv new file mode 100644 index 0000000..2798d5e --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_debug_network_node.sv @@ -0,0 +1,114 @@ +// Copyright 2021 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +// This module implements one node in the ring architecture of the debug network. There is shared bus for address and +// data which is passed from node to node around the ring. If everything behaves properly, there would only be one +// outstanding transaction at a time, so address and data will not collide. + +// The debug network is fault tolerant to external debug-capable modules not accepting a valid or not producing a response. +// A misbehaving external debug-capable module cannot starve another properly behaving external module of addresses or +// responses. To support this, requests are never backpressured by the debug network. If there is already an outstanding +// request to a misbehaving module, then clobber the address being advertised to the misbehaving module. + +// Technically this breaks the AXI-4 spec (data cannot change once valid is asserted), but this only happens if a module +// didn't respond to the read request (either because it never accepted the request or never produced a response). This will +// cause the runtime to treats this as a time out, and it will then move on to issue another read request to some different +// address. If all modules respond within a reasonable amount of time, then the handshaking with the debug network is AXI-4 +// conformant. A reasonable amount of time is defined by the runtime, runtime can query CSR for whether it has yet cached +// read response data, runtime may poll this status register a few times before giving up. + +// The debug network is also fault tolerant to external debug-capable modules producing spurious read responses. A read +// response is only accepted if a prior read request was accepted. + +`resetall +`undefineall +`default_nettype none + +module dla_debug_network_node #( + parameter int DATA_WIDTH, //width of the read response data, typicall 32 + parameter int ADDR_WIDTH, //width of the read request address, typically 32 + parameter int ADDR_LOWER, //how many lower bits of the address are forwarded to external debug-capable module, typically 24 + //the upper ADDR_WIDTH-ADDR_LOWER bits of address are used to identify the module id + parameter int MODULE_ID, //id of this node, if upper addr bits match then forward request to external debug-capable module + + //derived values + localparam int BUS_WIDTH = (ADDR_WIDTH > DATA_WIDTH) ? ADDR_WIDTH : DATA_WIDTH //shared bus for address and data, use the larger width +) ( + input wire clk, + input wire i_sclrn, + + //debug network ring, upstream (connection from previous node in the ring) + input wire i_up_forced_valid, //non-backpressurable valid + input wire [BUS_WIDTH-1:0] i_up_shared_bus, //shared bus for addr/data + input wire i_up_is_addr, + + //debug network ring, downstream (connection to next node in the ring) + output logic o_down_forced_valid, + output logic [BUS_WIDTH-1:0] o_down_shared_bus, + output logic o_down_is_addr, + + //request to external debug-capable module, AXI-4 lite read address channel + output logic o_req_valid, + output logic [ADDR_LOWER-1:0] o_req_addr, + input wire i_req_ready, + + //response from external debug-capable module, AXI-4 lite read response channel + input wire i_resp_valid, + input wire [DATA_WIDTH-1:0] i_resp_data, + output logic o_resp_ready +); + + // Parameter legality checks already performed in dla_debug_network.sv. + + always_ff @(posedge clk) begin + //forward shared bus to the next node in the debug network ring + //response from external debug-capable module overrides this (see below) + o_down_forced_valid <= 1'b0; + if (i_up_forced_valid) begin + o_down_forced_valid <= 1'b1; + o_down_shared_bus <= i_up_shared_bus; + o_down_is_addr <= i_up_is_addr; + end + + //incoming address is for this node, forward it to external debug-capable module + //note if external module did not accept previous request, the address gets clobbered by new request + if (i_up_forced_valid & i_up_is_addr & (i_up_shared_bus[ADDR_WIDTH-1:ADDR_LOWER] == MODULE_ID)) begin + o_req_valid <= 1'b1; + o_req_addr <= i_up_shared_bus[ADDR_LOWER-1:0]; + end + + //o_req_valid is held high until request accepted by external debug-capable module + if (o_req_valid & i_req_ready) begin + o_req_valid <= 1'b0; + o_resp_ready <= 1'b1; //read response is only accepted once read request accepted + end + + //o_resp_ready is held high until response produced by external debug-capable module + //send the response to next node in the debug network ring + //yes this may clobber an address, but only happens if exercising the fault tolerance of debug network + //if everything behaves properly, there would only be one outstanding transaction at a time + if (i_resp_valid & o_resp_ready) begin + o_resp_ready <= 1'b0; + o_down_forced_valid <= 1'b1; + o_down_shared_bus <= i_resp_data; + o_down_is_addr <= 1'b0; + end + + if (~i_sclrn) begin + o_req_valid <= 1'b0; + o_resp_ready <= 1'b0; + o_down_forced_valid <= 1'b0; + end + end + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_delay.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_delay.sv new file mode 100644 index 0000000..661ed11 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_delay.sv @@ -0,0 +1,100 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +xVtypTr6rCj3X+WcaDi9DAx5M58u1peFr+RzS6XqmFnbBjCGZ3zNkUMCSPIGQEBazzvHy8wuAqsB +BGEq7LcNpFpP/vYL7n/vFoRUBuSTj87R5fYD3Yv8uZTTQXc3p67n8x1wYnEWfWXUjZwGJw/5ewLE +cHWUvPwlXRXfFjLCfkQ9a/3jHL8LT/+l0zVGQw12yqojmC7+DPBEzEpTMwbTXBAxq4U2+BOQpQaJ +PJWy2IfXKOxchiLUUyIOzMaxfb0U7t5N09695PmHqO0dgKEnGEPfNmrxLfzG3AGfiYFrqeB6OHob +MzNCmoNBKGtml/D5TyTivuW4aHdjGMMn9T34mQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 4480) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_demux.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_demux.sv new file mode 100644 index 0000000..8191462 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_demux.sv @@ -0,0 +1,135 @@ +// Copyright 2020-2024 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +// Description of functionality: +// This module acts as a simple demux to steer data to either one of two outputs +// the module receives config data, which is the select signal, and based on the value +// of the sel signal, the module steers input data to either first or second output +// This module could be generalized in the future to have 1 to many (instead of 1:2) + +`resetall +`undefineall +`default_nettype none +`include "dla_acl_parameter_assert.svh" + +module dla_demux import dla_common_pkg::*, dla_demux_pkg::*; #( + // DLA (input data) side parameters + parameter int CONFIG_WIDTH = 32, + parameter int DATA_WIDTH = 32 +) ( + input wire clk_dla, + input wire i_aresetn, + + // config input + input wire [CONFIG_WIDTH-1:0] i_config_data, + input wire i_config_valid, + output logic o_config_ready, + + // Input Data + output logic o_ready, // backpressure to upstream + input wire i_valid, // valid from upstream + input wire [DATA_WIDTH-1:0] i_data, // input data from xbar + input wire i_transmitter_done, //upstream done + + // Output 1 Data (select = 0) + input wire i_1_ready, // backpressure from downstream 1 + output wire o_1_valid, // valid to downstream 1 + + // Output 2 Data (select = 1) + input wire i_2_ready, // backpressure from downstream 2 + output wire o_2_valid, // valid to downstream 2 + + // Output Data + output logic [DATA_WIDTH-1:0] o_data // Output data +); + +// Handle Config data + logic [CONFIG_WIDTH-1:0] config_offset; + logic config_done; + demux_sel_config_t cfg; + logic select; // select signal + + localparam int NUM_CONFIG_OFFSETS = divCeil($bits(cfg), CONFIG_WIDTH); + + // For now, ensure size of config is exact multiple of CONFIG_WIDTH + `DLA_ACL_PARAMETER_ASSERT($bits(cfg) == NUM_CONFIG_OFFSETS * CONFIG_WIDTH); + + //reset parameterization + localparam int RESET_USE_SYNCHRONIZER = 1; + localparam int RESET_PIPE_DEPTH = 3; + localparam int RESET_NUM_COPIES = 1; + + logic [RESET_NUM_COPIES-1:0] sclrn; + + ///////////////////////////// + // Reset Synchronization // + ///////////////////////////// + + dla_reset_handler_simple #( + .USE_SYNCHRONIZER (RESET_USE_SYNCHRONIZER), + .PIPE_DEPTH (RESET_PIPE_DEPTH), + .NUM_COPIES (RESET_NUM_COPIES) + ) dla_demux_synchronizer ( + .clk (clk_dla), + .i_resetn (i_aresetn), + .o_sclrn (sclrn) + ); + + assign select = cfg.select[0]; + assign o_config_ready = ~config_done; + + always_ff @(posedge clk_dla) begin + // config state machine + if (i_config_valid & o_config_ready) begin + // update progress in accepting NUM_CONFIG_OFFSETS transactions + if (config_offset == NUM_CONFIG_OFFSETS-1) begin + config_offset <= '0; + config_done <= 1'b1; + end + else begin + config_offset <= config_offset + 1'b1; + end + cfg <= (i_config_data[CONFIG_WIDTH-1:0] << ($bits(cfg) - CONFIG_WIDTH)) | (cfg >> CONFIG_WIDTH); + end else begin + // Back to configure state + if (i_transmitter_done) begin + config_done <= 0; + end + end + // resetn + if (~sclrn[0]) begin + config_done <= 1'b0; + config_offset <= '0; + cfg.select <= '0; + end + end +// steer input data + logic i_ready_comb, intermediate_out_valid; + assign i_ready_comb = config_done ? (select ? i_2_ready : i_1_ready) : 1'b0; + assign o_1_valid = config_done ? (select ? 1'b0 : intermediate_out_valid) : 1'b0; + assign o_2_valid = config_done ? (select ? intermediate_out_valid : 1'b0) : 1'b0; + + dla_st_pipeline_stage #( + .DATA_WIDTH (DATA_WIDTH ) + ) inp_pipe_inst ( + .clock (clk_dla ), + .i_resetn (sclrn[0] ), + .o_ready (o_ready ), + .i_valid (i_valid ), + .i_data (i_data ), + .i_ready (i_ready_comb ), + .o_valid (intermediate_out_valid), + .o_data (o_data ) + ); + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_demux_config.svh b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_demux_config.svh new file mode 100644 index 0000000..ec93039 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_demux_config.svh @@ -0,0 +1,20 @@ +// Copyright 2024 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +/* + This is the shared datatype between C++ compiler config generation and output streamer RTL +*/ + +typedef struct packed { + uint32_t select; // select signal to steer input data to one of two output data +} demux_sel_config_t; diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_demux_pkg.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_demux_pkg.sv new file mode 100644 index 0000000..5218871 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_demux_pkg.sv @@ -0,0 +1,22 @@ +// Copyright 2024 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +// This package keeps all of the arch parameters related to the demux module +// For now it only includes the config struct + +`resetall +`undefineall +package dla_demux_pkg; + import dla_common_pkg::*; + `include "dla_demux_config.svh" +endpackage diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma.sv new file mode 100644 index 0000000..a3a133e --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma.sv @@ -0,0 +1,668 @@ +// Copyright 2020-2022 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + + +// This is the top level module for coreDLA DMA. +// +// This module includes the following: +// - CSR (which contains interrupt generating logic as well as descriptor queue) +// - config reader (which provides input data to config network) +// - filter reader (which provides input data to filter caches) +// - feature reader (which provides input data to stream buffers) +// - DDR arbitration of the readers +// - feature writer (which accepts output data to write to DDR) +// +// The FD and a highly illustrative design review are available at: +// https://sharepoint.amr.ith.intel.com/sites/DLA/Shared%20Documents/Forms/AllItems.aspx?RootFolder=%2Fsites%2FDLA%2FShared%20Documents%2FcoreDLA%2FFDs%5FTest%5FPlans%2FDMA%5FFD +// +// Outside of coreDLA DMA, one still needs to arbitrate DDR between PCIe and DLA. +// All interfaces of coreDLA DMA are AXI, which means if the outside world favors +// AvalonMM then the conversion of interfaces must be done outside of coreDLA. +// The testbench uses AXI BFMs for DDR and PCIe, inside these bus functional models +// are synthesizable code that converts between AXI and Avalon and then uses an +// Avalon BFM. +// +// DMA IP depends on other IP blocks, which are listed below: +// - dla/fpga/hld_lsu/rtl +// - dla/fpga/hld_fifo/rtl +// - dla/fpga/acl_dcfifo/rtl +// - dla/fpga/acl_reset_handler/rtl +// +// Not all AXI ports have been implemented. The following assumptions have been made: +// - id can be assumed to be 0 if not provided (only arid on the ddr interface is provided because there are 3 readers) +// - burst length is limited to 2**DDR_BURST_WIDTH words in a burst even through the signal width is 8 (as per the axi4 spec) +// - lock is not used (no atomic access), encoded as 2'b00 +// - cache is not used, device non-bufferable is encoded as 4'b0000 +// - prot is not used, no need to protect against illegal transactions, encode as 3'b000 +// - qos is not used, encode as 4'b0000 to indicate no participation in any quality of service scheme +// - region is not used, no need for multiple regions, encode as 4'b0000 +// - user sideband signals are not used +// - if wstrb (byte enable) is not provided, assume all bytes are updated during a write, encode as all ones +// - response value is ignored for both reads and writes, status assumed to be okay, encoded as 2'h00 +// - read last (last word in a burst) value is ignored since number of words in each burst is tracked internally +// - low power interface signals are not used +// +// Unrelated to the AXI spec itself, beware of the following restrictions on the AXI interfaces: +// - all addresses are word aligned (required by AvalonMM, not required by AXI) +// - csr is a slave, it expects the master to produce such transactions +// - ddr is a master, this simplification can be exploited by the slave e.g. an AXI to AvalonMM converter +// - bursts will never cross a burst boundary, e.g. if max burst size is 1024 bytes, no burst will ever cross a 1024 byte boundary +// +// This module will internally bias in favour of writes to DDR rather than reads. This is a performance optimization +// for the IP core. The readers in the core will happily continue reading even if the compute engine is stalled due +// to a full output fifo, so it is believed that keeping the (expensive) output fifo empty is more important than +// pre-loading the input buffers (which tend to be large anyways in order to avoid DDR reads entirely). (Limited +// anecdotal evidence supports this hypothesis, as well). +// +// Note that the CoreDLA IP has never been tested without the write-over-read priority. It is not impossible that +// there is a subtle hidden functional requirement for this prioritization (but it seems unlikely except in the +// case of an extreme imbalance against writes). +// + +`resetall +`undefineall +`default_nettype none +`include "dla_acl_parameter_assert.svh" + +module dla_dma import dla_dma_pkg::*; #( + parameter int CSR_ADDR_WIDTH, //width of the byte address signal, determines CSR address space size, e.g. 11 bit address = 2048 bytes, the largest size that uses only 1 M20K + parameter int CSR_DATA_BYTES, //width of the CSR data path, typically 4 bytes + parameter int CONFIG_DATA_BYTES, //data width of the config network output port, typically 4 bytes + parameter int CONFIG_READER_DATA_BYTES, //data width of the config network input port, typically 8 bytes + parameter int FILTER_READER_DATA_BYTES, //data width of the filter reader, typically a whole DDR word (assuming block floating point, C_VECTOR=16 so 4 filter words packed into 1 DDR word) + parameter int FEATURE_READER_DATA_BYTES, //data width of the feature reader, typically half of a DDR word for C_VECTOR=16 (assuming FP16 or smaller) + parameter int FEATURE_WRITER_DATA_BYTES, //data width of the feature writer, typically half of a DDR word for C_VECTOR=16 (assuming FP16 or smaller) + parameter int DDR_ADDR_WIDTH, //width of all byte address signals to global memory, 32 would allow 4 GB of addressable memory + parameter int DDR_BURST_WIDTH, //internal width of the axi burst length signal, typically 4, max number of words in a burst = 2**DDR_BURST_WIDTH + parameter int DDR_DATA_BYTES, //width of the global memory data path, must be a power of 2, typically 64 bytes + parameter int DDR_READ_ID_WIDTH, //width of the AXI ID signal for DDR reads, must be 2 since there are 3 read masters + + parameter bit ENABLE_INPUT_STREAMING, + parameter bit ENABLE_OUTPUT_STREAMING, + + parameter dla_common_pkg::device_family_t DEVICE, //enumerated device value, required for dma writer + parameter dla_lt_pkg::lt_arch_t LT_ARCH = '{default:0}, // the arch for the dedicated layout transform (if it exists) + parameter bit ENABLE_ON_CHIP_PARAMETERS, // Whether configs and filters are on-chip, meaning config reader and filter reader can be disabled + + //derived parameters and constants + localparam int AXI_BURST_LENGTH_WIDTH = 8, //width of the axi burst length signal as per the axi4 spec + localparam int AXI_BURST_SIZE_WIDTH = 3, //width of the axi burst size signal as per the axi4 spec + localparam int AXI_BURST_TYPE_WIDTH = 2 //width of the axi burst type signal as per the axi4 spec +) ( + input wire clk_ddr, + input wire clk_dla, + input wire clk_pcie, + input wire i_resetn_async, //active low reset that has NOT been synchronized to any clock + + //interrupt request, AXI4 stream master without data, runs on pcie clock + output logic o_interrupt_level, + + //dla can report an error to dma csr by asserting this for one clock cycle, runs on ddr clock + input wire i_token_error, + + //CSR can request a reset of the DLA IP by asserting this signal (held until reset), runs on ddr clock + output logic o_request_ip_reset, + + input wire i_stream_started, //indicates that the first word of the input stream is being read this cycle + input wire i_stream_done, //indcates that the output streamer is done writing the output feature + + // Indicates when input feeder received the first word (aka input streamer sent the first word) + // and xbar sent the last word (aka output streamer received the last word) + input wire i_stream_received_first_word, + input wire i_stream_sent_last_word, + + //CSR, AXI4 lite slave, runs on ddr clock + input wire i_csr_arvalid, + input wire [CSR_ADDR_WIDTH-1:0] i_csr_araddr, + output logic o_csr_arready, + output logic o_csr_rvalid, + output logic [8*CSR_DATA_BYTES-1:0] o_csr_rdata, + input wire i_csr_rready, + input wire i_csr_awvalid, + input wire [CSR_ADDR_WIDTH-1:0] i_csr_awaddr, + output logic o_csr_awready, + input wire i_csr_wvalid, + input wire [8*CSR_DATA_BYTES-1:0] i_csr_wdata, + output logic o_csr_wready, + output logic o_csr_bvalid, + input wire i_csr_bready, + + //config reader data, AXI4 stream master, runs on dla clock + output logic o_config_reader_valid, + output logic [8*CONFIG_READER_DATA_BYTES-1:0] o_config_reader_data, + input wire i_config_reader_ready, + + //config for filter reader, AXI4 stream slave, runs on ddr clock + input wire i_config_filter_reader_valid, + input wire [8*CONFIG_DATA_BYTES-1:0] i_config_filter_reader_data, + output logic o_config_filter_reader_ready, + + //filter reader data, AXI4 stream master, runs on dla clock + output logic o_filter_reader_valid, + output logic [8*FILTER_READER_DATA_BYTES-1:0] o_filter_reader_data, + input wire i_filter_reader_ready, + + //config for feature reader, AXI4 stream slave, runs on ddr clock + input wire i_config_feature_reader_valid, + input wire [8*CONFIG_DATA_BYTES-1:0] i_config_feature_reader_data, + output logic o_config_feature_reader_ready, + + //config for layout transform + input wire i_config_lt_reader_valid, + input wire [8*CONFIG_DATA_BYTES-1:0] i_config_lt_reader_data, + output logic o_config_lt_reader_ready, + + //feature reader data, AXI4 stream master, runs on dla clock + output logic o_feature_reader_valid, + output logic [8*FEATURE_READER_DATA_BYTES-1:0] o_feature_reader_data, + input wire i_feature_reader_ready, + + //config for feature writer, AXI4 stream slave, runs on ddr clock + input wire i_config_feature_writer_valid, + input wire [8*CONFIG_DATA_BYTES-1:0] i_config_feature_writer_data, + output logic o_config_feature_writer_ready, + + //feature writer data, AXI4 stream slave, runs on ddr clock + input wire i_feature_writer_valid, + input wire [8*FEATURE_WRITER_DATA_BYTES-1:0] i_feature_writer_data, + output logic o_feature_writer_ready, + + //debug network AXI-4 lite interface, read request and read response channels, runs on dla_clock + output logic o_debug_network_arvalid, + output logic [8*CSR_DATA_BYTES-1:0] o_debug_network_araddr, + input wire i_debug_network_arready, + input wire i_debug_network_rvalid, + input wire [8*CSR_DATA_BYTES-1:0] i_debug_network_rdata, + output logic o_debug_network_rready, + + //global memory, AXI4 master, runs on ddr clock + output logic o_ddr_arvalid, + output logic [DDR_ADDR_WIDTH-1:0] o_ddr_araddr, + output logic [AXI_BURST_LENGTH_WIDTH-1:0] o_ddr_arlen, + output logic [AXI_BURST_SIZE_WIDTH-1:0] o_ddr_arsize, + output logic [AXI_BURST_TYPE_WIDTH-1:0] o_ddr_arburst, + output logic [DDR_READ_ID_WIDTH-1:0] o_ddr_arid, + input wire i_ddr_arready, + input wire i_ddr_rvalid, + input wire [8*DDR_DATA_BYTES-1:0] i_ddr_rdata, + input wire [DDR_READ_ID_WIDTH-1:0] i_ddr_rid, + output logic o_ddr_rready, + output logic o_ddr_awvalid, + output logic [DDR_ADDR_WIDTH-1:0] o_ddr_awaddr, + output logic [AXI_BURST_LENGTH_WIDTH-1:0] o_ddr_awlen, + output logic [AXI_BURST_SIZE_WIDTH-1:0] o_ddr_awsize, + output logic [AXI_BURST_TYPE_WIDTH-1:0] o_ddr_awburst, + input wire i_ddr_awready, + output logic o_ddr_wvalid, + output logic [8*DDR_DATA_BYTES-1:0] o_ddr_wdata, + output logic [DDR_DATA_BYTES-1:0] o_ddr_wstrb, + output logic o_ddr_wlast, + input wire i_ddr_wready, + input wire i_ddr_bvalid, + output logic o_ddr_bready, + output logic o_streaming_active +); + + ///////////////////////////////// + // Parameter legality checks // + ///////////////////////////////// + //do not allow number of words per burst to exceed the axi spec (even through the LSU will behave just fine) + `DLA_ACL_PARAMETER_ASSERT(DDR_BURST_WIDTH <= AXI_BURST_LENGTH_WIDTH) + + //id width on the ddr interface is a parameter instead of localparam only so that if the value changes, + //then it can be changed in one place instead all everywhere the signal width is used + //3 readers requires + `DLA_ACL_PARAMETER_ASSERT(DDR_READ_ID_WIDTH == 2) + + //data width is limited by the axi spec + `DLA_ACL_PARAMETER_ASSERT(DDR_DATA_BYTES >= 1 && DDR_DATA_BYTES <= 128) + + //load-store units require a power of 2 width for the global memory interface + `DLA_ACL_PARAMETER_ASSERT(DDR_DATA_BYTES == 2**$clog2(DDR_DATA_BYTES)) + + + /////////////// + // Signals // + /////////////// + + //reset + logic ddr_sclrn; + + //feature writer reports it is done, goes to csr and feature reader + logic token_done_csr, token_done_reader; + + logic license_flag; + logic writer_error; + + //csr to config reader or to ddrfree config network (langsu: latter is not implemented yet) + logic [8*CONFIG_DATA_BYTES-1:0] csr_config_data; + logic csr_config_valid, csr_config_for_intercept, csr_config_ready; + + //lsu to read arb + logic lsu_ddr_arvalid [NUM_READERS-1:0]; + logic [DDR_ADDR_WIDTH-1:0] lsu_ddr_araddr [NUM_READERS-1:0]; + logic [DDR_BURST_WIDTH-1:0] lsu_ddr_arlen [NUM_READERS-1:0]; + logic lsu_ddr_arready [NUM_READERS-1:0]; + logic lsu_ddr_rvalid [NUM_READERS-1:0]; + logic [8*DDR_DATA_BYTES-1:0] lsu_ddr_rdata [NUM_READERS-1:0]; + logic lsu_ddr_rready [NUM_READERS-1:0]; + + //favor writes over reads for ddr; see the comment block by the + //combinational logic associated with these signals for the explanation + //of their naming. + logic dma_prevcycle_read_not_acknowledged; + logic write_overrides_read; + logic rawp_ddr_awvalid, rawp_ddr_wvalid; + logic rawf_ddr_awready, rawf_ddr_wready; + logic rawp_ddr_arvalid; + logic rawf_ddr_arready; + + //axi spec requires a signal width of 8 for burst length + logic [DDR_BURST_WIDTH-1:0] raw_ddr_arlen; + logic [DDR_BURST_WIDTH-1:0] raw_ddr_awlen; + + //used to backpressure ddrfree config network read + logic streaming_reload; + logic lt_param_error; + + ///////////////////////////// + // Reset Synchronization // + ///////////////////////////// + + dla_reset_handler_simple #( + .USE_SYNCHRONIZER (RESET_USE_SYNCHRONIZER), + .PIPE_DEPTH (RESET_PIPE_DEPTH), + .NUM_COPIES (RESET_NUM_COPIES) + ) + ddr_reset_synchronizer + ( + .clk (clk_ddr), + .i_resetn (i_resetn_async), + .o_sclrn (ddr_sclrn) + ); + + + + /////////// + // CSR // + /////////// + + //includes register interface for host control as well as interrupt + //contains the descriptor queue for providing work to the config reader + + dla_dma_csr #( + .CSR_ADDR_WIDTH (CSR_ADDR_WIDTH), + .CSR_DATA_BYTES (CSR_DATA_BYTES), + .CONFIG_DATA_BYTES (CONFIG_DATA_BYTES), + .CONFIG_READER_DATA_BYTES (CONFIG_READER_DATA_BYTES), + .ENABLE_INPUT_STREAMING (ENABLE_INPUT_STREAMING), + .ENABLE_OUTPUT_STREAMING (ENABLE_OUTPUT_STREAMING), + .ENABLE_ON_CHIP_PARAMETERS (ENABLE_ON_CHIP_PARAMETERS) + ) + csr + ( + .clk_ddr (clk_ddr), + .clk_pcie (clk_pcie), + .clk_dla (clk_dla), + .i_sclrn_ddr (ddr_sclrn), + .i_resetn_async (i_resetn_async), + .i_token_done (token_done_csr | (i_stream_done & ENABLE_OUTPUT_STREAMING)), + .i_token_stream_started (i_stream_started), + .i_token_error (i_token_error | lt_param_error), + .i_stream_received_first_word (i_stream_received_first_word), + .i_stream_sent_last_word (i_stream_sent_last_word), + .i_license_flag (license_flag), + .i_token_out_of_inferences (writer_error), + .i_input_feature_rvalid (lsu_ddr_rvalid[FEATURE_READER_ID]), + .i_input_feature_rready (lsu_ddr_rready[FEATURE_READER_ID]), + .i_input_filter_rvalid (lsu_ddr_rvalid[FILTER_READER_ID]), + .i_input_filter_rready (lsu_ddr_rready[FILTER_READER_ID]), + .i_output_feature_wvalid (rawp_ddr_wvalid), + .i_output_feature_wready (rawf_ddr_wready), + .o_interrupt_level (o_interrupt_level), + .o_config_valid (csr_config_valid), + .o_config_data (csr_config_data), + .o_config_for_intercept (csr_config_for_intercept), + .i_config_ready (csr_config_ready), + .o_debug_network_arvalid (o_debug_network_arvalid), + .o_debug_network_araddr (o_debug_network_araddr), + .i_debug_network_arready (i_debug_network_arready), + .i_debug_network_rvalid (i_debug_network_rvalid), + .i_debug_network_rdata (i_debug_network_rdata), + .o_debug_network_rready (o_debug_network_rready), + .i_csr_arvalid (i_csr_arvalid), + .i_csr_araddr (i_csr_araddr), + .o_csr_arready (o_csr_arready), + .o_csr_rvalid (o_csr_rvalid), + .o_csr_rdata (o_csr_rdata), + .i_csr_rready (i_csr_rready), + .i_csr_awvalid (i_csr_awvalid), + .i_csr_awaddr (i_csr_awaddr), + .o_csr_awready (o_csr_awready), + .i_csr_wvalid (i_csr_wvalid), + .i_csr_wdata (i_csr_wdata), + .o_csr_wready (o_csr_wready), + .o_csr_bvalid (o_csr_bvalid), + .i_csr_bready (i_csr_bready), + .o_request_ip_reset (o_request_ip_reset), + .o_streaming_active (o_streaming_active) + ); + + + + ///////////////////// + // Config reader // + ///////////////////// + + //the config interface of the generic dma reader comes from the descriptor queue inside the csr + //output data interface of the generic dma reader serves as the input for the config network + + if (~ENABLE_ON_CHIP_PARAMETERS) begin + dla_dma_reader #( + .READER_WRITER_SEL (CONFIG_READER_ID), + .IS_CONFIG_READER (1), + .NUM_DIMENSIONS (CONFIG_READER_NUM_DIMENSIONS), + .CONFIG_DATA_BYTES (CONFIG_DATA_BYTES), + .READER_DATA_BYTES (CONFIG_READER_DATA_BYTES), + .DDR_ADDR_WIDTH (DDR_ADDR_WIDTH), + .DDR_DATA_BYTES (DDR_DATA_BYTES), + .DDR_BURST_WIDTH (DDR_BURST_WIDTH), + .LT_ARCH (LT_ARCH) + ) + config_reader + ( + .clk_ddr (clk_ddr), + .clk_dla (clk_dla), + .i_sclrn_ddr (ddr_sclrn), + .i_resetn_async (i_resetn_async), + .i_config_valid (csr_config_valid), + .i_config_data (csr_config_data), + .i_config_for_intercept (csr_config_for_intercept), + .o_config_ready (csr_config_ready), // config reader is ready to receive data from csr + .i_token_can_start (1'b0), //config data is read only, there is no data dependency that would prevent the config reader from starting + .o_reader_valid (o_config_reader_valid), // config data read is valid + .o_reader_data (o_config_reader_data), // config data read from reader + .i_reader_ready (i_config_reader_ready), // config network is ready to receive config data + .o_ddr_arvalid (lsu_ddr_arvalid[CONFIG_READER_ID]), + .o_ddr_araddr (lsu_ddr_araddr [CONFIG_READER_ID]), + .o_ddr_arlen (lsu_ddr_arlen [CONFIG_READER_ID]), + .i_ddr_arready (lsu_ddr_arready[CONFIG_READER_ID]), + .i_ddr_rvalid (lsu_ddr_rvalid [CONFIG_READER_ID]), + .i_ddr_rdata (lsu_ddr_rdata [CONFIG_READER_ID]), + .o_ddr_rready (lsu_ddr_rready [CONFIG_READER_ID]) + ); + end else begin + // Indicate config_reader is ready to receive data, but we don't care. + assign lsu_ddr_rready [CONFIG_READER_ID] = 1'b0; + // we don't care if read addr to arbitar is valid or not + assign lsu_ddr_arvalid[CONFIG_READER_ID] = 1'b0; + // Don't care. config_network doesn't check valid to start ddrfree config read + assign o_config_reader_valid = 1'b0; + // Set to 1 to not stall descriptor_queue + assign csr_config_ready = 1'b1; + end + + + ///////////////////// + // Filter reader // + ///////////////////// + + if (~ENABLE_ON_CHIP_PARAMETERS) begin + dla_dma_reader #( + .READER_WRITER_SEL (FILTER_READER_ID), + .IS_CONFIG_READER (0), + .NUM_DIMENSIONS (FILTER_READER_NUM_DIMENSIONS), + .CONFIG_DATA_BYTES (CONFIG_DATA_BYTES), + .READER_DATA_BYTES (FILTER_READER_DATA_BYTES), + .DDR_ADDR_WIDTH (DDR_ADDR_WIDTH), + .DDR_DATA_BYTES (DDR_DATA_BYTES), + .DDR_BURST_WIDTH (DDR_BURST_WIDTH), + .LT_ARCH (LT_ARCH) + ) + filter_reader + ( + .clk_ddr (clk_ddr), + .clk_dla (clk_dla), + .i_sclrn_ddr (ddr_sclrn), + .i_resetn_async (i_resetn_async), + .i_config_valid (i_config_filter_reader_valid), + .i_config_data (i_config_filter_reader_data), + .i_config_for_intercept (1'b0), //since this is not the config reader, all config data goes to the address generator + .o_config_ready (o_config_filter_reader_ready), // filter reader module is ready to receive config data from config network + .i_token_can_start (1'b0), //filter data is read only, there is no data dependency that would prevent the filter reader from starting + .o_reader_valid (o_filter_reader_valid), + .o_reader_data (o_filter_reader_data), + .i_reader_ready (i_filter_reader_ready), + .o_ddr_arvalid (lsu_ddr_arvalid[FILTER_READER_ID]), + .o_ddr_araddr (lsu_ddr_araddr [FILTER_READER_ID]), + .o_ddr_arlen (lsu_ddr_arlen [FILTER_READER_ID]), + .i_ddr_arready (lsu_ddr_arready[FILTER_READER_ID]), + .i_ddr_rvalid (lsu_ddr_rvalid [FILTER_READER_ID]), + .i_ddr_rdata (lsu_ddr_rdata [FILTER_READER_ID]), + .o_ddr_rready (lsu_ddr_rready [FILTER_READER_ID]) + ); + end else begin + // Indicate filter_reader is ready to receive data, but we don't care. + assign lsu_ddr_rready [FILTER_READER_ID] = 1'b0; + // we don't care if read addr to arbitar is valid or not + assign lsu_ddr_arvalid[FILTER_READER_ID] = 1'b0; + // Don't care. Sequencer ignores this + assign o_filter_reader_valid = 1'b0; + // Indicate filter reader is ready to receive configs, + // so that config network fifo pops filter reader configs out. + // We don't really use them because we don't have any filter_reader + assign o_config_filter_reader_ready = 1'b1; + end + + + ////////////////////// + // Feature reader // + ////////////////////// + + dla_dma_reader #( + .READER_WRITER_SEL (FEATURE_READER_ID), + .IS_CONFIG_READER (0), + .DO_LAYOUT_TRANSFORM (LT_ARCH.ENABLE_LT & ~ENABLE_INPUT_STREAMING), + .NUM_DIMENSIONS (FEATURE_READER_NUM_DIMENSIONS), + .CONFIG_DATA_BYTES (CONFIG_DATA_BYTES), + .READER_DATA_BYTES (FEATURE_READER_DATA_BYTES), + .DDR_ADDR_WIDTH (DDR_ADDR_WIDTH), + .DDR_DATA_BYTES (DDR_DATA_BYTES), + .DDR_BURST_WIDTH (DDR_BURST_WIDTH), + .LT_ARCH (LT_ARCH) + ) + feature_reader + ( + .clk_ddr (clk_ddr), + .clk_dla (clk_dla), + .i_sclrn_ddr (ddr_sclrn), + .i_resetn_async (i_resetn_async), + .i_config_valid (i_config_feature_reader_valid), + .i_config_data (i_config_feature_reader_data), + .i_config_for_intercept (1'b0), //since this is not the config reader, all config data goes to the address generator + .o_config_ready (o_config_feature_reader_ready), + .i_config_lt_valid (i_config_lt_reader_valid), + .i_config_lt_data (i_config_lt_reader_data), + .o_config_lt_ready (o_config_lt_reader_ready), + .i_token_can_start (token_done_reader), + .o_reader_valid (o_feature_reader_valid), + .o_reader_data (o_feature_reader_data), + .i_reader_ready (i_feature_reader_ready), + .o_ddr_arvalid (lsu_ddr_arvalid[FEATURE_READER_ID]), + .o_ddr_araddr (lsu_ddr_araddr [FEATURE_READER_ID]), + .o_ddr_arlen (lsu_ddr_arlen [FEATURE_READER_ID]), + .i_ddr_arready (lsu_ddr_arready[FEATURE_READER_ID]), + .i_ddr_rvalid (lsu_ddr_rvalid [FEATURE_READER_ID]), + .i_ddr_rdata (lsu_ddr_rdata [FEATURE_READER_ID]), + .o_ddr_rready (lsu_ddr_rready [FEATURE_READER_ID]), + .o_param_error (lt_param_error) + ); + + + + /////////////////////////////////////////////////////////////////////////// + // Arbitrate read requests and steer read data for all DLA DMA readers // + /////////////////////////////////////////////////////////////////////////// + + //note there is another DDR arbiter between PCIe and DLA that lives outside of DLA + + dla_dma_read_arb #( + .NUM_PORTS (NUM_READERS), + .DDR_ADDR_WIDTH (DDR_ADDR_WIDTH), + .DDR_BURST_WIDTH (DDR_BURST_WIDTH), + .DDR_DATA_BYTES (DDR_DATA_BYTES) + ) + read_arb + ( + .clk (clk_ddr), + .i_sclrn (ddr_sclrn), + + // Read requests from config, filter, and feature readers + .i_lsu_arvalid (lsu_ddr_arvalid), + .i_lsu_araddr (lsu_ddr_araddr), + .i_lsu_arlen (lsu_ddr_arlen), + .o_lsu_arready (lsu_ddr_arready), + + // Read address to the external world; tagged with an arid + .o_ddr_arvalid (rawp_ddr_arvalid), + .o_ddr_araddr (o_ddr_araddr), + .o_ddr_arlen (raw_ddr_arlen), + .o_ddr_arid (o_ddr_arid), + .i_ddr_arready (rawf_ddr_arready), + + // Read data from external world + .i_ddr_rvalid (i_ddr_rvalid), + .i_ddr_rdata (i_ddr_rdata), + .i_ddr_rid (i_ddr_rid), + .o_ddr_rready (o_ddr_rready), + + // Read data config, filter, and feature readers + .o_lsu_rvalid (lsu_ddr_rvalid), + .o_lsu_rdata (lsu_ddr_rdata), + .i_lsu_rready (lsu_ddr_rready) + ); + + // Prioritize writes over reads; believed to improve performance. + // + // We do a couple things here: + // 1) If the prev cycle was an unacknowledged read (arvalid HIGH *and* arready LOW), then + // we must keep the read request outstanding. In this case, block any writes (by + // forcing awvalid, wvalid, awready, and wready to LOW). + // 2) Otherwise, if there is a write request, then block a read request if a new request + // has been made (do this by forcing arready and arvalid to LOW). (Note that we + // do not touch rready or rvalid, since if data happens to arrive, then there is + // no reason not to accept it if we can). + // 3) Lastly, allow a read request through (if any). + // + // rawp_ -- these are the internal signals prior to our forcing logic. + // rawf_ -- these are the internal signals after our forcing logic. + // + // Where the forcing logic drives directly to the external world, we simply use the + // external signal name. + // + + // 1: Block writes, if necessary. + // + // If the previous cycle was a read (whether an acknowledged read or an unacknowledged read), + // then neither o_ddr_awvalid nor o_ddr_wvalid were HIGH. + // Therefore it is okay to keep them forced to LOW, regardless of rawp_ddr_awvalid/rawp_ddr_wvalid. + assign o_ddr_awvalid = rawp_ddr_awvalid & ~dma_prevcycle_read_not_acknowledged; + assign o_ddr_wvalid = rawp_ddr_wvalid & ~dma_prevcycle_read_not_acknowledged; + assign rawf_ddr_awready = i_ddr_awready & ~dma_prevcycle_read_not_acknowledged; + assign rawf_ddr_wready = i_ddr_wready & ~dma_prevcycle_read_not_acknowledged; + + // 2: Is a write going to over-ride today's read request? + // + // Note that if dma_prevcycle_read_not_acknowledged is HIGH, then both o_ddr_awvalid + // and o_ddr_wvalid will already be forced LOW by the logic above, so + // "write_overrides_read" can never happen if the previous cycle was an unacknowledged + // read. + assign write_overrides_read = o_ddr_awvalid | o_ddr_wvalid; + + assign o_ddr_arvalid = rawp_ddr_arvalid & ~write_overrides_read; + assign rawf_ddr_arready = i_ddr_arready & ~write_overrides_read; + + //axi spec requires a signal width of 8 for burst length + assign o_ddr_arlen = { {(AXI_BURST_LENGTH_WIDTH-DDR_BURST_WIDTH){1'h0}}, raw_ddr_arlen }; + + //tie off constant axi signals + assign o_ddr_arsize = $clog2(DDR_DATA_BYTES); //burst size is always maximal, e.g. all bytes within a word should be transferred + assign o_ddr_arburst = 2'h1; //burst type is incrementing, this value comes from the axi spec + + // If the previous cycle was an unacknowledged read, then we must continue to assert arvalid + // until it is acknowledged by arready. We are not allowed to randomly deassert arvalid. Use + // dma_prevcycle_read_not_acknowledged to track this condition. + always_ff @(posedge clk_ddr) begin + dma_prevcycle_read_not_acknowledged <= o_ddr_arvalid & ~i_ddr_arready; + + if (~ddr_sclrn) begin + // If we are in reset, then o_ddr_arvalid will be LOW since the read_arb + // is in reset as well (forcing rawp_ddr_arvalid to LOW). The read_arb + // shares our reset, namely ddr_sclrn. This means that we can safely + // reset to ~dma_prevcycle_read_not_acknowledged. + // + // We can make no assumption about i_ddr_arready while in reset. + dma_prevcycle_read_not_acknowledged <= 1'b0; + end + end + + ////////////////////// + // Feature writer // + ////////////////////// + + dla_dma_writer #( + .READER_WRITER_SEL (FEATURE_WRITER_ID), + .NUM_DIMENSIONS (FEATURE_WRITER_NUM_DIMENSIONS), + .CONFIG_DATA_BYTES (CONFIG_DATA_BYTES), + .WRITER_DATA_BYTES (FEATURE_WRITER_DATA_BYTES), + .DDR_ADDR_WIDTH (DDR_ADDR_WIDTH), + .DDR_DATA_BYTES (DDR_DATA_BYTES), + .DDR_BURST_WIDTH (DDR_BURST_WIDTH), + .DEVICE (DEVICE) + ) + feature_writer + ( + .clk_ddr (clk_ddr), + .i_sclrn_ddr (ddr_sclrn), + .i_resetn_async (i_resetn_async), + .i_config_valid (i_config_feature_writer_valid), + .i_config_data (i_config_feature_writer_data), + .o_config_ready (o_config_feature_writer_ready), + .o_token_done_csr (token_done_csr), + .o_token_done_reader (token_done_reader), + .o_license_flag (license_flag), + .o_writer_err (writer_error), + .i_writer_valid (i_feature_writer_valid), + .i_writer_data (i_feature_writer_data), + .o_writer_ready (o_feature_writer_ready), + .o_ddr_awvalid (rawp_ddr_awvalid), + .o_ddr_awaddr (o_ddr_awaddr), + .o_ddr_awlen (raw_ddr_awlen), + .i_ddr_awready (rawf_ddr_awready), + .o_ddr_wvalid (rawp_ddr_wvalid), + .o_ddr_wdata (o_ddr_wdata), + .o_ddr_wstrb (o_ddr_wstrb), + .o_ddr_wlast (o_ddr_wlast), + .i_ddr_wready (rawf_ddr_wready), + .i_ddr_bvalid (i_ddr_bvalid), + .o_ddr_bready (o_ddr_bready) + ); + + //axi spec requires a signal width of 8 for burst length + assign o_ddr_awlen = { {(AXI_BURST_LENGTH_WIDTH-DDR_BURST_WIDTH){1'h0}}, raw_ddr_awlen }; + + //tie off constant axi signals, use the same settings as read address channel + assign o_ddr_awsize = o_ddr_arsize; + assign o_ddr_awburst = o_ddr_arburst; + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma_addr_gen.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma_addr_gen.sv new file mode 100644 index 0000000..fd26e00 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma_addr_gen.sv @@ -0,0 +1,376 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +5/hy2bKdZ0RzlcfXqGkarkyCjVWaG9y+MsmWDbUfPRzger0sDdYG9cwsE4/xQi3NqepjDYUwBzc6 +1/ui4fvyNcLdVtLpd4elN+LBBJ5F/M9hEUx+tnVmGMaC0qGKwqPOupBk+ztX7HNL1ZuRXXcs6iEz +DYFBhQbfF/OdTUDWAGGLqfC883Og4osOmKnBuB/FoCTnLxjin5YtZbp2QJq80WpgPsHpjEZeFSlQ +LefAwVF+PXI7XO1rdiKDQQ4rGLXCCsvDZvZ8X1OJnS2Wn3dXhmclRlo+a9BYb3cShWPnjpZnpmYr +M8PQuwuCZVR+BCjwmIIWOlpUp9unJdfs55wj9Q== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 20224) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma_config_feature_reader.svh b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma_config_feature_reader.svh new file mode 100644 index 0000000..07cd834 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma_config_feature_reader.svh @@ -0,0 +1,53 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +434WgsSJ1m9zfD9vQFCmfvEjdc3Y866KOgNoyHWXA787jYDqH1i9tuFM9ZwYoeAznSP2TV9s+/2v +pRHW5LBpe7g81sA3BWHNcseanLwd/DYuWI+o0sP0PcyBxDBK5lBIAr5sB1Nxzwp0MyeUm2Rs4YuL ++CAhFUt9ZaAl19Rki45GRtphPKZMBl7g6R9soqhDSzKGVTmmz6q3CiTGOfC59n5DQC/jDu6zGN8w +Fkt8UcjVG5OuidjVR51w78huHKzna5Mb+8DXVLwh7f4LdAVVqK4lhgjkZbgFO3kwQzccV11OkAIZ +DXYdkyUNIPlZdSXVfof5TGysndFWRa0uEPvXRA== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 1808) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma_config_feature_writer.svh b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma_config_feature_writer.svh new file mode 100644 index 0000000..e2f7523 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma_config_feature_writer.svh @@ -0,0 +1,56 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +4FGkTqCYBeFQyGtUaiTSMYqAJK8nPsxn54/pyUS4VqaU6wC9wI24vvwQbV4N1uu8KH4Mrn4GI+Xt +lImC7jhmRKMiH/9r7IDAPqpDvG+MC/U9jwdXp/tCIeS9i512L170/sV7ATQyK/ij3XOHcExUBiVm +6xnzBOkix1PeSXJcO9SkFnzs3Z7kELaBArY2on1KGubFti7KVbScO2SEQny5p+P+i58IB7v1XjjB +7IXnIG3JbI5CrAt/7Fgo0I52uZwexaSh1T4tY82+HqQyaYJfS4KSOJaPbYW4d7IwHJVSVwLbl2AC +s3a4NsmqGwsBsPSX07gQ2W/mFqdEeL0LpP2zjg== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 1984) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma_config_filter_reader.svh b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma_config_filter_reader.svh new file mode 100644 index 0000000..586713f --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma_config_filter_reader.svh @@ -0,0 +1,51 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +Margj+dzZyr9IakoyG2jM9k94FeXDYRe62vkKK20a2ZErJC6IV7r6eukbONPECcgo1baxfW2SYcm +iwEY6pOCN5Zn02yqNrkrU143T6085C8ZxBR2CAgK8EbgV5na+jQtJoF9zz60CmiJCHP3exgHCGZv +JoE1E7ES5ST7Z7cZzIgzkZu1QX7MYhMTC3uZUNYOs1gWa0hh5w8XFGRIPb7H9qQNpp1nQ2lC5Nf/ +HaOGjS28piW/RrUhGgDARzlXtslQHEAqh90c6gsVNOFLHm4UwFJyArqYGUc4uMnngE+Ey6DnNRaW +WGbu6VjIxAx4FMUOcDWJiqA+sNUg88DrYbJirA== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 1680) +`pragma protect data_block +a3ycDbsiSkq3Lc5WZZtmx9T0NTRHbV/6tAHpUsTR352VGjNv3cVYZpEmRz72F1z1bcnIKcpfJa8z +Uo8u/ftNiTcffrTm3BMUwdrRjalFwBI3gLnOdhtCTTnKPfuegpRXAwDIcdrH659mxcGcCTPhLjHe +u9+nHzMVKB5Wnu+UwsXYT20Crw7yA2620svZw2s0BiYzX1OAbhbd9hbpZvPrBjGGM07ZvvjxAPUo +mOm7QE7EW9fJlZ+S/MQwn2GIjPhXBLJwz9S6aKKTNisF84FnjKpb1rVyzHUd3T/agTICGP0BmaeN +HugavTWOwIkkPFyf2llav+8OXuDyXWo55Kz0GstQjnzG+xdK2DeV+2DfuVnWj3rm4chh59+DKutd +uISUZV2S3QpJ2Spm6npHebkVHbzqaCa4z298f025Q+jJUQhwQFuUxxV6gkXe/PXpJpXupl0apg1J +BeLkCCQgigz8DZJAN4JLB2e4j0jyXqKoSR0qTrWP9F0mmLdbpRFLUE0U6NDPYMKaoh3tWpNfLSkx +Dmb6eWSNj46MpbdIFGo1qW+rsSJJ83BN4zjTACvVTM+2MknXKMJvjs3aPVdlrYZaZeIVSbMXqwSe +aArT0lkCpPBwEqtxASMFUbXpXIIdrZ0SePj0W4SVOGOWW8MCwMFQhGncowT7y2woZLHTUZioEoFl +ubx+Alktw3ZwnTQFXN3EibkwhOLBDo8AxvlvFELGgxECYphS8qGKsD7rsTQy3TkJrr/xLm3gvs/p +/ZdBXMRAix/2Bp9ieUX6hHCzfSSssn/0HN+0jqmQX/oj1r3vf9K1OP1YgMQjGAF1BCelYV17Ek2+ +fh0IX9f0sxTduKKS3EGY+ZBEaxRf0mwsTip4W6dhLIJQllCreIiALoM3g0X82Ej0eJUWhb/4JsVs +Twj8ONcwvE9zdhDtrste4iRZ3qoU59SoikvaoEALyUP3nF2VIY9/CDJyxVfvuNbK6MJTr52BOKV4 +Ey9e13bwKtjU4LgCKc5Zpxfz1fnWnuKFEJmdeucyKZe00L50ZR7qMwRsViF5ccQRHK2HbMqRnq5Q +ZeBE23qbWpDtpfr2f2PysUNtoYYL01lBfnoNeTltk6i+/D/p1LY4Bgesju7lmlmO/en2z4dIjO92 +7nQcE/3QXU+UOetXV40u+VZ/v6ku0OTBvKZLvOXUtJSMpIZ0LH/y1j6x7eHmdUS1EASgztXELMYv ++wSrVGeGGXUhuUtjy60Sqtj6hMBiqp0Iwups9UqYO/i7HFHps9LXNpFOL2D4aBYxB/YbY2WCzOvo +KMMCQ8TVNMV/6ob0FYsGkVcMmEl6MPj6iV871/gvmCldx8Jez1P0PBgklPwmNGA1boE2cM2xTYXW +e7Vy6bTKKrzLsETX0NbfcvFyylGVJnhllW2JtUcvFIR3hqbmcldMI0GyvkvpPh75JX2Sx7kra3Yh +Yq+L+UhGgEk1Hft+2DHk9NcawHobP4gWX94mCr7VzXsdPPprQOk9d9yrmKTJk4DHBrEBYbgPf3Vh +pXOoTyJPZbJmnLT/0S+vnF5W+EPgr3WenO1QKpSVoPpoCmdJ3yqVdNtb6cP2VV5+bpg+106+LYTT +KO+egDVkJWvsu6sZrXiryYzu7apPjNNWoth/ucnmDagEkPzkrKBJMY0Bo2YnusJjJlbxe25gaIcc +hpNuAzrDek2h2EAUSlVLuTMGlHCRIBY6IzXc9o7VgXnZaki8iViQXD/cGhO2KwEzKCqfv2uK2Usp +Az76S5uFEo79TsRhDVoqXO1DqM4AYR27rFk5GiC/mkrSkxmr0ryUeKIsCKfF3YLKIl4LcxcQ3KCG +cnrzGK6/qBp3tPVk28DEHqHnjGdRqVbWZrujp0HOvGwiKkCJfQGkDGKqyh7SWWDBPzN/aDCQyiaK +9cD0TOUbF+dDWkMn883MCcdgw2TOwgPtdgWQkqUXo0DH41HIxGa+bQproE1zi/5kQ1RO/NQSVaQc +iFjw7/8LXC+lsCfhaT016xtGeUeRs6y2nNK+ue5LpPLfwTC0bTevfkYEnOqc/MoRF/CNn33SxnSX +rTCSD5ukF1e+xPjKweA5lLXWMaEr+hur8jwZjaGTwZWMYP6GBYXFRAittjBH3YxZf8/Q3/G+Y29d +sZcT0pEDiggyy+iVBg1zCKrrjIUSS0/SlV9Rqx6F8d+dXZvByw0fzV9VWi2iyD4PsQ2KBz8b2nHL +fC2cCC8Bm4oV6yr16MIr6LILbM719m3dxHax +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma_config_intercept.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma_config_intercept.sv new file mode 100644 index 0000000..d49fb20 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma_config_intercept.sv @@ -0,0 +1,205 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +nwnHkUauV+rSUZ5rrfqaxL//9uDi7Ilzh9wCCRPqunB3MfBUhQbUqLNODAFr4ANKiJRLwq9dvk8B +d0JxQrrtTlvUjLuxlNSU6/CLcZak7CDjA+837FI4iT1EPjJ3ir1h2iUIQK/AGVjmus94sSHGDJsA +UuL5W8srAg8f5h7xCSbNuAHLTmBHp00dOxmQ8J7sohBtzNp1qP6n7VeLn43D9vfk7N6t+ZVdOtJJ +SOv23N7IwAHDjoJMVFvb9TRiMoTKtBdd1Ccc4Shg7jWfvefGtjvPHebBQZ0N2J2+A8dZ/AMO8b/n +SdEFWmuqXqvK+YO6qoCZdnbQKFLV5X0tQRUu6w== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 10448) +`pragma protect data_block +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 +etLf9du/y5Oh9tn56Bo9TNo= +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma_config_reader.svh b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma_config_reader.svh new file mode 100644 index 0000000..b50c3fe --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma_config_reader.svh @@ -0,0 +1,50 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +aBLhxVlMbRJOC4OorMI8Cf/Dqa0FUDwxherrSN/WpZXIEW3iTAf09zQDpr5MAJzSvEDLU6jaDdxF +w5frofhhxlMHoyFISdHGo8srBLvisLaUbR9GtJJSTO7adEXAg7pMRxbGkCoXb2ppYSxBn7JwDQUN +XNDdZ4+z2g6jXceTZb7KaDhwRtGXWjvZCwhdxJS/QwyDO/Q/Yf/ePlQP3VOCOaMx5VY0MqtzYgG2 +nG/x8eRn+taiKBf85wsvI73GYPqF/M1DBwmLI92K6ja5OoEV0klzY2frTVZbSpi9Rr1zszlmK1+g +8LzvL7aEhdDqYzA+87CASa5Zb2QgvLMs0NI1jg== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 1632) +`pragma protect data_block ++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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma_constants.svh b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma_constants.svh new file mode 100644 index 0000000..71fcf60 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma_constants.svh @@ -0,0 +1,96 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +cBoyK61uFVK0ItpyDOspPjc8THdrEIpXCq4vJKavP5m3Ijd2SuENL/CnrTHtJLSFB89PnVmxVwGO +aMEY24b8RMDxX0uy8oQP4HKq6Vmrs9zWeFXblow1kYLJhdC2gpqK8y/NMzrrDdIrp+ZWzzl8O4lU +vqcQyVVIwK3aRsmpmR1HSbuyFrIZFEsHL5ytGTC8lD2sZq8rd8/cg2nSyz/TBf+/EA4pIR9fHLZb +2VpkFkSc4h1i9GfNC5TbkhYkjMrbxQ1x5xbmPTRaC6oqlp8aKYCrT9pgZ7Za/81nH3rAtzZdXq35 +Tjn5ZW8VQ7Vrg66rYRiqFGx6t3YwMMzyHpyGPA== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 4272) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma_counter_64.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma_counter_64.sv new file mode 100644 index 0000000..61b3715 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma_counter_64.sv @@ -0,0 +1,68 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +gsAFF48sFwwe0ITRVBfAjl+EUoAWuUt6sQ9x7cwp03SeR+y6UuzI7DIomBZ1apPEaCqRlll+4qLr +3GOStcn6JoWrB0tcJMjivdYEOIBUJNFkF2SS6qxhKyd3mT5xR0Qvn/C6SYOCR6hLB5cDIFvvQvOb +Aaf+9g+atvovx6SMuBvs2gTOXbPGV5tRYVxyosSPQo5QBsp0KIMD7MvpXoJ/v90aFIYle9dRIL/6 +etfHN3zFNFvkHzs1xLZNwxWM8n20TfbRPMLw68+vAziWzyReLS2Xi/zQ7YsH6yFPQJ58RKH5bQos +fnopOCV+/4o7GSyqxcktSnmBHRUhTZ0kuRNyrw== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 2672) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma_csr.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma_csr.sv new file mode 100644 index 0000000..ae7006c --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma_csr.sv @@ -0,0 +1,841 @@ +// Copyright 2020-2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + + +// This module implements the CSR for DMA. It also includes the descriptor queue +// and interrupt request generator. The CSR is implemented with a RAM. Certain +// values are kept live in registers, such the interrupt control and mask. This +// makes it easier to detect when a change has happened (instead of trying to a +// read-modify-write with the RAM). +// +// The AXI4 lite slave interface is usually going to backpressure PCIe. There is +// a state machine which allows one outstanding read request, or one outstanding +// write request at a time (write requests can be outstanding if the writeack is +// backpressured which AXI allows). There is a register which tracks whether the +// last request was a read or write, this enables round robin arbitration. Each +// request takes a few clock cycles to process, as the address needs to be decoded +// to determine if a write is allowed to commit to the RAM, or if we need to use +// read data from one of the registers instead of the RAM. +// +// Special offsets are defined as localparams below. Writing to DLA_DMA_CSR_OFFSET_INPUT_OUTPUT_BASE_ADDR/4 +// will cause one unit of work to be enqueued in the descriptor queue. Currently +// this involves writing 8 values to a fifo, which are then consumed by the config +// reader. Internal to the config reader, 4 values go to the config reader address +// generator, the other 4 go to the config reader intercept. +// +// Beware the following assumptions about how the host issues requests to this CSR: +// - no bursts (required by AXI4 lite) +// - byte enables are assumed to be all 1 (no partial word access) +// - all addresses must be word aligned (e.g. if CSR_DATA_BYTES=4 then the bottom 2 bits of address must be 0) + +`resetall +`undefineall +`default_nettype none +`include "dla_acl_parameter_assert.svh" + +module dla_dma_csr #( + parameter int CSR_ADDR_WIDTH, //width of the byte address signal, determines CSR address space size, e.g. 11 bit address = 2048 bytes, the largest size that uses only 1 M20K + parameter int CSR_DATA_BYTES, //width of the CSR data path, typically 4 bytes + parameter int CONFIG_DATA_BYTES, //data width of the config network output port, typically 4 bytes, the descriptor queue matches this so that config decode can be reused + parameter int CONFIG_READER_DATA_BYTES, //data width of the config network input port, needed by config reader address generator for loop update + + parameter int ENABLE_INPUT_STREAMING, + parameter int ENABLE_OUTPUT_STREAMING, + parameter int ENABLE_ON_CHIP_PARAMETERS + + ) ( + input wire clk_ddr, + input wire clk_pcie, + input wire clk_dla, + input wire i_sclrn_ddr, //active low reset that has already been synchronized to clk_ddr + input wire i_resetn_async, //active low reset that has NOT been synchronized to any clock, only to be consumed by dcfifo + + //updates for interrupt, runs on ddr clock + input wire i_token_done, //feature writer reports it is done + input wire i_token_stream_started, //input streamer is reading the first word + input wire i_stream_received_first_word, + input wire i_stream_sent_last_word, + input wire i_token_error, //dla has encountered some error, assert high for one clock cycle to report it to host (assuming mask bit is 1) + input wire i_license_flag, + input wire i_token_out_of_inferences, + + //snoop signals for the input feature, output featuer, and filter LSU's core <--> fabric traffic + //run on clk_ddr + input wire i_input_feature_rvalid, + input wire i_input_feature_rready, + input wire i_input_filter_rvalid, + input wire i_input_filter_rready, + input wire i_output_feature_wvalid, + input wire i_output_feature_wready, + + //interrupt request to pcie, runs on pcie clock + output logic o_interrupt_level, //level sensitive interrupt + + //read side of descriptor queue goes to config reader, runs on ddr clock + output logic o_config_valid, + output logic [8*CONFIG_DATA_BYTES-1:0] o_config_data, + output logic o_config_for_intercept, //0 = goes to config reader addr gen, 1 = goes to config reader intercept + input wire i_config_ready, + + //debug network AXI-4 lite interface, read request and read response channels, runs on dla_clock + output logic o_debug_network_arvalid, + output logic [8*CSR_DATA_BYTES-1:0] o_debug_network_araddr, + input wire i_debug_network_arready, + input wire i_debug_network_rvalid, + input wire [8*CSR_DATA_BYTES-1:0] i_debug_network_rdata, + output logic o_debug_network_rready, + + //AXI4-lite slave interface for host control, runs on ddr clock + //no bursts, byte enables are assumed to be all 1, all addresses must be word aligned (e.g. if CSR_DATA_BYTES=4 then the bottom 2 bits of address must be 0) + input wire i_csr_arvalid, + input wire [CSR_ADDR_WIDTH-1:0] i_csr_araddr, + output logic o_csr_arready, + output logic o_csr_rvalid, + output logic [8*CSR_DATA_BYTES-1:0] o_csr_rdata, + input wire i_csr_rready, + input wire i_csr_awvalid, + input wire [CSR_ADDR_WIDTH-1:0] i_csr_awaddr, + output logic o_csr_awready, + input wire i_csr_wvalid, + input wire [8*CSR_DATA_BYTES-1:0] i_csr_wdata, + output logic o_csr_wready, + output logic o_csr_bvalid, + input wire i_csr_bready, + + //reset request for the whole ip, runs on ddr clock + output logic o_request_ip_reset, + + //output bit to start/stop streaming interface + output logic o_streaming_active +); + + + ///////////////////////////////// + // Parameter legality checks // + ///////////////////////////////// + + //signal widths cannot be trivial + `DLA_ACL_PARAMETER_ASSERT(CSR_DATA_BYTES >= 1) + `DLA_ACL_PARAMETER_ASSERT(CONFIG_DATA_BYTES >= 1) + + //csr address space cannot be trivial + `DLA_ACL_PARAMETER_ASSERT(2**CSR_ADDR_WIDTH > CONFIG_DATA_BYTES) + + //offsets must be within address space + localparam int CSR_LO_ADDR = $clog2(CSR_DATA_BYTES); //number of LSBs that must be 0 in order for byte address to be word aligned + localparam int CSR_WORD_ADDR_WIDTH = CSR_ADDR_WIDTH - CSR_LO_ADDR; + + + + ///////////////// + // Constants // + ///////////////// + `include "dla_dma_constants.svh" + //special offsets -- these values are defined in one place and shared between hardware and software + //the constants from the dla_dma_constants.svh header file that CSR cares about are named DLA_DMA_CSR_OFFSET_**** and DLA_DMA_CSR_INTERRUPT_**** + + //state machine + enum { + STATE_IDLE_BIT, + STATE_READ_ACCEPT_BIT, + STATE_READ_ADDR_BIT, + STATE_READ_DATA_BIT, + STATE_WRITE_ACCEPT_BIT, + STATE_WRITE_COMMIT_BIT, + STATE_DESCRIPTOR_BIT, + STATE_AWAIT_RESET_BIT + } index; + + enum logic [index.num()-1:0] { + //1-hot encodings + STATE_IDLE = 1 << STATE_IDLE_BIT, + STATE_READ_ACCEPT = 1 << STATE_READ_ACCEPT_BIT, + STATE_READ_ADDR = 1 << STATE_READ_ADDR_BIT, + STATE_READ_DATA = 1 << STATE_READ_DATA_BIT, + STATE_WRITE_ACCEPT = 1 << STATE_WRITE_ACCEPT_BIT, + STATE_WRITE_COMMIT = 1 << STATE_WRITE_COMMIT_BIT, + STATE_DESCRIPTOR = 1 << STATE_DESCRIPTOR_BIT, + STATE_AWAIT_RESET = 1 << STATE_AWAIT_RESET_BIT, + XXX = 'x + } state; + + localparam int MAX_JOBS_ACTIVE = 64; //upper bounded by how many descriptors the queue can hold + localparam int JOBS_ACTIVE_WIDTH = $clog2(MAX_JOBS_ACTIVE+1); + + + + /////////////// + // Signals // + /////////////// + + //ram + logic ram_wr_en; + logic [CSR_WORD_ADDR_WIDTH-1:0] ram_wr_addr, ram_rd_addr; + logic [8*CSR_DATA_BYTES-1:0] ram_wr_data, ram_rd_data; + + //descriptor queue + logic descriptor_queue_forced_write, descriptor_queue_full, descriptor_diagnostics_almost_full; + logic [8*CONFIG_DATA_BYTES:0] descriptor_queue_data; + logic [2:0] descriptor_words_read; + logic first_word_of_descriptor_being_read, jobs_active_is_nonzero, core_jobs_active_is_nonzero; + logic [JOBS_ACTIVE_WIDTH-1:0] jobs_active, core_jobs_active; + + //Perfomance counters connections + logic [31:0] total_clocks_active_lo, total_clocks_active_hi; + logic [31:0] total_core_clocks_active_lo, total_core_clocks_active_hi; + logic [31:0] total_clocks_for_all_jobs_lo, total_clocks_for_all_jobs_hi; + logic [31:0] number_of_input_feature_reads_lo, number_of_input_feature_reads_hi; + logic [31:0] number_of_input_filter_reads_lo, number_of_input_filter_reads_hi; + logic [31:0] number_of_output_feature_writes_lo, number_of_output_feature_writes_hi; + + //state machine + logic previous_was_write; + logic [3:0] descriptor_count; + + //specific offsets are implemented in registers instead of RAM + logic interrupt_control_error, interrupt_control_done, interrupt_mask_error, interrupt_mask_done; + logic [8*CSR_DATA_BYTES-1:0] completion_count; + logic descriptor_diagnostics_overflow; + + //address decode for specific offsets that are implemented in registers or require some action to be taken + logic write_to_interrupt_control, read_from_interrupt_control, write_to_interrupt_mask, read_from_interrupt_mask; + logic write_to_ram, read_from_desc_diagnostics, read_from_completion_count, enqueue_descriptor; + logic read_from_clocks_active_lo, read_from_clocks_active_hi, read_from_clocks_all_jobs_lo, read_from_clocks_all_jobs_hi; + logic read_from_core_clocks_active_lo, read_from_core_clocks_active_hi; + logic read_from_input_feature_reads_lo, read_from_input_feature_reads_hi; + logic read_from_input_filter_reads_lo, read_from_input_filter_reads_hi; + logic read_from_output_feature_writes_lo, read_from_output_feature_writes_hi; + logic write_to_debug_network_addr, read_from_debug_network_valid, read_from_debug_network_data; + logic read_from_license_flag; + logic read_from_ip_reset, write_to_ip_reset; + + //clock crosser for interrupt + logic ddr_interrupt_level; + + //debug network read request address + logic debug_network_arvalid, not_o_debug_network_arvalid; + logic [8*CSR_DATA_BYTES-1:0] debug_network_araddr; + + //debug network read response data + logic not_o_debug_network_rready, debug_network_dcfifo_empty, debug_network_rvalid, debug_network_rready; + logic [8*CSR_DATA_BYTES-1:0] debug_network_dcfifo_data, debug_network_rdata; + + //streaming states + logic write_ready_streaming_interface; + logic read_ready_streaming_interface; + + logic dla_sclrn; + + //reset parameterization + localparam int RESET_USE_SYNCHRONIZER = 1; + localparam int RESET_PIPE_DEPTH = 3; + localparam int RESET_NUM_COPIES = 1; + dla_reset_handler_simple #( + .USE_SYNCHRONIZER (RESET_USE_SYNCHRONIZER), + .PIPE_DEPTH (RESET_PIPE_DEPTH), + .NUM_COPIES (RESET_NUM_COPIES) + ) + ddr_reset_synchronizer + ( + .clk (clk_dla), + .i_resetn (i_resetn_async), + .o_sclrn (dla_sclrn) + ); + + /////////// + // RAM // + /////////// + + //could use hld_ram, but this simple ram doesn't need the depth stitching or clock enable magic that hld_ram provides + + altera_syncram + #( + .address_aclr_b ("NONE"), + .address_reg_b ("CLOCK0"), + .clock_enable_input_a ("BYPASS"), + .clock_enable_input_b ("BYPASS"), + .clock_enable_output_b ("BYPASS"), + .enable_ecc ("FALSE"), + .init_file ("dla_dma_csr_discovery_rom.mif"), + .intended_device_family ("Arria 10"), //Quartus will fix this automatically + .lpm_type ("altera_syncram"), + .numwords_a (2**CSR_WORD_ADDR_WIDTH), + .numwords_b (2**CSR_WORD_ADDR_WIDTH), + .operation_mode ("DUAL_PORT"), + .outdata_aclr_b ("NONE"), + .outdata_sclr_b ("NONE"), + .outdata_reg_b ("CLOCK0"), + .power_up_uninitialized ("FALSE"), + .ram_block_type ("M20K"), + .read_during_write_mode_mixed_ports ("DONT_CARE"), + .widthad_a (CSR_WORD_ADDR_WIDTH), + .widthad_b (CSR_WORD_ADDR_WIDTH), + .width_a (8*CSR_DATA_BYTES), + .width_b (8*CSR_DATA_BYTES), + .width_byteena_a (1) + ) + csr_ram + ( + .address_a (ram_wr_addr), + .address_b (ram_rd_addr), + .clock0 (clk_ddr), + .data_a (ram_wr_data), + .wren_a (ram_wr_en), + .q_b (ram_rd_data), + .address2_a (1'b1), + .address2_b (1'b1), + .addressstall_a (1'b0), + .addressstall_b (1'b0), + .byteena_a (1'b1), + .byteena_b (1'b1), + .clock1 (1'b1), + .clocken0 (1'b1), + .clocken1 (1'b1), + .clocken2 (1'b1), + .clocken3 (1'b1), + .data_b ({(8*CSR_DATA_BYTES){1'b1}}), + .eccencbypass (1'b0), + .eccencparity (8'b0), + .eccstatus (), + .q_a (), + .rden_a (1'b1), + .rden_b (1'b1), + .wren_b (1'b0) + ); + + + + //////////////////////// + // Descriptor Queue // + //////////////////////// + + //runtime knows how many jobs it has enqueued and how many jobs have finished + //runtime is responsible for not overflowing the descriptor queue, it must limit the number of outstanding jobs queued in hardware + + localparam int DESCRIPTOR_QUEUE_ALMOST_FULL_CUTOFF = DLA_DMA_CSR_DESCRIPTOR_QUEUE_WORDS_PER_JOB; //almost full asserts when queue only has space for 1 more job + + dla_hld_fifo #( + .WIDTH (8*CONFIG_DATA_BYTES + 1), + .DEPTH (DLA_DMA_CSR_DESCRIPTOR_QUEUE_PHYSICAL_SIZE), //this is set to 512 in dla_dma_constants.svh, may as well use up full depth of M20K + .ALMOST_FULL_CUTOFF (DESCRIPTOR_QUEUE_ALMOST_FULL_CUTOFF), + .ASYNC_RESET (0), //consume reset synchronously + .SYNCHRONIZE_RESET (0), //reset is already synchronized + .STYLE ("ms") + ) + descriptor_queue + ( + .clock (clk_ddr), + .resetn (i_sclrn_ddr), + + .i_valid (descriptor_queue_forced_write), + .i_data (descriptor_queue_data), + .o_stall (descriptor_queue_full), //software is responsible for not overflowing this fifo + .o_almost_full (descriptor_diagnostics_almost_full), + + .o_valid (o_config_valid), + .o_data ({o_config_for_intercept, o_config_data}), + .i_stall (~i_config_ready | i_token_out_of_inferences) + ); + + + + //////////////////////////// + // Performance counters // + //////////////////////////// + + //Auxillary logic that controls the jobs active counters + assign first_word_of_descriptor_being_read = o_config_valid & i_config_ready & (descriptor_words_read==3'h0); //desc words read was 0, going to be 1 + always_ff @(posedge clk_ddr) begin + if (o_config_valid & i_config_ready) descriptor_words_read <= descriptor_words_read + 1'b1; + + if (ENABLE_INPUT_STREAMING & ENABLE_OUTPUT_STREAMING & ENABLE_ON_CHIP_PARAMETERS) begin + // In this case, we should only track the cycles between the feature data being read, and + // results being streamed out, since we continually read the on-chip config params + if (i_token_stream_started & ~i_token_done) jobs_active <= jobs_active + 1'b1; + if (~i_token_stream_started & i_token_done) jobs_active <= jobs_active - 1'b1; + end else begin + if (first_word_of_descriptor_being_read & ~i_token_done) jobs_active <= jobs_active + 1'b1; + if (~first_word_of_descriptor_being_read & i_token_done) jobs_active <= jobs_active - 1'b1; + end + + if (~i_sclrn_ddr) begin + descriptor_words_read <= 3'h0; + jobs_active <= '0; + jobs_active_is_nonzero <= 1'b0; + end + end + + logic core_jobs_active_is_nonzero_ddr_clk; + + always_ff @(posedge clk_dla) begin + if (ENABLE_INPUT_STREAMING & ENABLE_OUTPUT_STREAMING & ENABLE_ON_CHIP_PARAMETERS) begin + // In this case, we should only track the cycles between the feature data being read, and + // results being streamed out, since we continually read the on-chip config params + if (i_stream_received_first_word & ~i_stream_sent_last_word) core_jobs_active <= core_jobs_active + 1'b1; + if (~i_stream_received_first_word & i_stream_sent_last_word) core_jobs_active <= core_jobs_active - 1'b1; + core_jobs_active_is_nonzero <= core_jobs_active != 0; + end + if (~dla_sclrn) begin + core_jobs_active <= '0; + core_jobs_active_is_nonzero <= 1'b0; + end + end + + // crossover core_jobs_active_is_nonzero from dla to ddr clk + dla_clock_cross_full_sync dla_to_ddr_clock_cross_sync + ( + .clk_src (clk_dla), + .i_src_async_resetn (1'b1), + .i_src_data (core_jobs_active_is_nonzero), + .o_src_data (), + + .clk_dst (clk_ddr), + .i_dst_async_resetn (1'b1), + .o_dst_data (core_jobs_active_is_nonzero_ddr_clk) + ); + + + //track the number of active jobs + dla_dma_counter_64 count_total_core_clocks_active ( + .i_clk (clk_ddr), + .i_sclrn (i_sclrn_ddr), + .i_increment_en (core_jobs_active_is_nonzero_ddr_clk), + .i_increment_val (32'b1), + .i_read_counter_low_bits (read_from_core_clocks_active_lo), + .o_counter_low_bits (total_core_clocks_active_lo), + .o_counter_high_bits_latch (total_core_clocks_active_hi) + ); + //a job is active once the first word of its descriptor is read from the queue + //a job is finished once the feature writer sends a done token + dla_dma_counter_64 count_total_clocks_active ( + .i_clk (clk_ddr), + .i_sclrn (i_sclrn_ddr), + .i_increment_en (jobs_active != 0), + .i_increment_val (32'b1), + .i_read_counter_low_bits (read_from_clocks_active_lo), + .o_counter_low_bits (total_clocks_active_lo), + .o_counter_high_bits_latch (total_clocks_active_hi) + ); + + dla_dma_counter_64 count_total_clocks_for_all_jobs ( + .i_clk (clk_ddr), + .i_sclrn (i_sclrn_ddr), + .i_increment_en (1'b1), + .i_increment_val (jobs_active), + .i_read_counter_low_bits (read_from_clocks_all_jobs_lo), + .o_counter_low_bits (total_clocks_for_all_jobs_lo), + .o_counter_high_bits_latch (total_clocks_for_all_jobs_hi) + ); + + //tracks the number of input feature reads in terms of memory words transfers. + dla_dma_counter_64 count_input_feature_reads ( + .i_clk (clk_ddr), + .i_sclrn (i_sclrn_ddr), + .i_increment_en (i_input_feature_rready & i_input_feature_rvalid), + .i_increment_val (32'b1), + .i_read_counter_low_bits (read_from_input_feature_reads_lo), + .o_counter_low_bits (number_of_input_feature_reads_lo), + .o_counter_high_bits_latch (number_of_input_feature_reads_hi) + ); + + //tracks the number of output feature writes in terms of memory words transfers. + dla_dma_counter_64 count_output_feature_writes ( + .i_clk (clk_ddr), + .i_sclrn (i_sclrn_ddr), + .i_increment_en (i_output_feature_wready & i_output_feature_wvalid), + .i_increment_val (32'b1), + .i_read_counter_low_bits (read_from_output_feature_writes_lo), + .o_counter_low_bits (number_of_output_feature_writes_lo), + .o_counter_high_bits_latch (number_of_output_feature_writes_hi) + ); + + //tracks the number of input filter reads in terms of memory words transfers. + dla_dma_counter_64 count_input_filter_reads ( + .i_clk (clk_ddr), + .i_sclrn (i_sclrn_ddr), + .i_increment_en (i_input_filter_rready & i_input_filter_rvalid), + .i_increment_val (32'b1), + .i_read_counter_low_bits (read_from_input_filter_reads_lo), + .o_counter_low_bits (number_of_input_filter_reads_lo), + .o_counter_high_bits_latch (number_of_input_filter_reads_hi) + ); + + + ////////////////////// + // Address decode // + ////////////////////// + + always_ff @(posedge clk_ddr) begin + //the csr address space is mostly read only, except for a few specific offsets listed below + write_to_ram <= 1'b0; + if (ram_wr_addr == DLA_DMA_CSR_OFFSET_CONFIG_BASE_ADDR/4) write_to_ram <= 1'b1; + if (ram_wr_addr == DLA_DMA_CSR_OFFSET_CONFIG_RANGE_MINUS_TWO/4) write_to_ram <= 1'b1; + if (ram_wr_addr == DLA_DMA_CSR_OFFSET_INPUT_OUTPUT_BASE_ADDR/4) write_to_ram <= 1'b1; + if (ram_wr_addr == DLA_DMA_CSR_OFFSET_INTERMEDIATE_BASE_ADDR/4) write_to_ram <= 1'b1; + if (ram_wr_addr == DLA_DMA_CSR_OFFSET_DEBUG_NETWORK_ADDR/4) write_to_ram <= 1'b1; + if (ram_wr_addr == DLA_CSR_OFFSET_READY_STREAMING_IFACE/4) write_to_ram <= 1'b1; + + //decode specific addresses in which the storage lives in registers + write_to_interrupt_control <= (ram_wr_addr == DLA_DMA_CSR_OFFSET_INTERRUPT_CONTROL/4); + read_from_interrupt_control <= (ram_rd_addr == DLA_DMA_CSR_OFFSET_INTERRUPT_CONTROL/4); + write_to_interrupt_mask <= (ram_wr_addr == DLA_DMA_CSR_OFFSET_INTERRUPT_MASK/4); + read_from_interrupt_mask <= (ram_rd_addr == DLA_DMA_CSR_OFFSET_INTERRUPT_MASK/4); + read_from_desc_diagnostics <= (ram_rd_addr == DLA_DMA_CSR_OFFSET_DESC_DIAGNOSTICS/4); + read_from_completion_count <= (ram_rd_addr == DLA_DMA_CSR_OFFSET_COMPLETION_COUNT/4); + read_from_clocks_active_lo <= (ram_rd_addr == DLA_DMA_CSR_OFFSET_CLOCKS_ACTIVE_LO/4); + read_from_clocks_active_hi <= (ram_rd_addr == DLA_DMA_CSR_OFFSET_CLOCKS_ACTIVE_HI/4); + read_from_core_clocks_active_lo <= (ram_rd_addr == DLA_DMA_CSR_OFFSET_CORE_CLOCKS_ACTIVE_LO/4); + read_from_core_clocks_active_hi <= (ram_rd_addr == DLA_DMA_CSR_OFFSET_CORE_CLOCKS_ACTIVE_HI/4); + read_from_clocks_all_jobs_lo <= (ram_rd_addr == DLA_DMA_CSR_OFFSET_CLOCKS_ALL_JOBS_LO/4); + read_from_clocks_all_jobs_hi <= (ram_rd_addr == DLA_DMA_CSR_OFFSET_CLOCKS_ALL_JOBS_HI/4); + write_to_debug_network_addr <= (ram_wr_addr == DLA_DMA_CSR_OFFSET_DEBUG_NETWORK_ADDR/4); + read_from_debug_network_valid <= (ram_rd_addr == DLA_DMA_CSR_OFFSET_DEBUG_NETWORK_VALID/4); + read_from_debug_network_data <= (ram_rd_addr == DLA_DMA_CSR_OFFSET_DEBUG_NETWORK_DATA/4); + read_from_license_flag <= (ram_rd_addr == DLA_DMA_CSR_OFFSET_LICENSE_FLAG /4); + read_from_ip_reset <= (ram_rd_addr == DLA_DMA_CSR_OFFSET_IP_RESET/4); + read_from_input_filter_reads_lo <= (ram_rd_addr == DLA_DMA_CSR_OFFSET_INPUT_FILTER_READ_COUNT_LO/4); + read_from_input_filter_reads_hi <= (ram_rd_addr == DLA_DMA_CSR_OFFSET_INPUT_FILTER_READ_COUNT_HI/4); + read_from_input_feature_reads_lo <= (ram_rd_addr == DLA_DMA_CSR_OFFSET_INPUT_FEATURE_READ_COUNT_LO/4); + read_from_input_feature_reads_hi <= (ram_rd_addr == DLA_DMA_CSR_OFFSET_INPUT_FEATURE_READ_COUNT_HI/4); + read_from_output_feature_writes_lo <= (ram_rd_addr == DLA_DMA_CSR_OFFSET_OUTPUT_FEATURE_WRITE_COUNT_LO/4); + read_from_output_feature_writes_hi <= (ram_rd_addr == DLA_DMA_CSR_OFFSET_OUTPUT_FEATURE_WRITE_COUNT_HI/4); + read_ready_streaming_interface<= (ram_rd_addr == DLA_CSR_OFFSET_READY_STREAMING_IFACE/4); + + //decode specific addresses in which an action must be taken + enqueue_descriptor <= (ram_wr_addr == DLA_DMA_CSR_OFFSET_INPUT_OUTPUT_BASE_ADDR/4); + write_to_ip_reset <= (ram_wr_addr == DLA_DMA_CSR_OFFSET_IP_RESET/4); + if (ENABLE_INPUT_STREAMING) begin + write_ready_streaming_interface <= (ram_wr_addr == DLA_CSR_OFFSET_READY_STREAMING_IFACE/4); + end + end + + + + ///////////////////// + // State machine // + ///////////////////// + + always_ff @(posedge clk_ddr) begin + //default behavior + o_csr_arready <= 1'b0; + o_csr_rvalid <= 1'b0; + o_csr_awready <= 1'b0; + o_csr_wready <= 1'b0; + o_csr_bvalid <= 1'b0; + ram_wr_en <= 1'b0; + descriptor_queue_forced_write <= 1'b0; + descriptor_queue_data <= 'x; + debug_network_arvalid <= 1'b0; + debug_network_rready <= 1'b0; + o_request_ip_reset <= 1'b0; + o_streaming_active <= o_streaming_active; + + unique case (1'b1) + state[STATE_IDLE_BIT]: begin + if (i_csr_arvalid && (previous_was_write || ~(i_csr_awvalid && i_csr_wvalid))) begin + o_csr_arready <= 1'b1; + state <= STATE_READ_ACCEPT; + ram_rd_addr <= i_csr_araddr[CSR_ADDR_WIDTH-1:CSR_LO_ADDR]; + end + if (i_csr_awvalid && i_csr_wvalid && (~previous_was_write || ~i_csr_arvalid)) begin + o_csr_awready <= 1'b1; + o_csr_wready <= 1'b1; + state <= STATE_WRITE_ACCEPT; + ram_wr_addr <= i_csr_awaddr[CSR_ADDR_WIDTH-1:CSR_LO_ADDR]; + ram_wr_data <= i_csr_wdata; + end + end + + state[STATE_READ_ACCEPT_BIT]: begin + //o_csr_arready is asserted now, indicates csr has accepted a read + //ram_rd_addr valid now + state <= STATE_READ_ADDR; + previous_was_write <= 1'b0; + end + state[STATE_READ_ADDR_BIT]: begin + //hardened input register inside m20k valid now + state <= STATE_READ_DATA; + end + state[STATE_READ_DATA_BIT]: begin + //hardened output register inside m20k valid now + o_csr_rvalid <= 1'b1; + o_csr_rdata <= ram_rd_data; + if (read_from_interrupt_control) begin + o_csr_rdata <= '0; + o_csr_rdata[DLA_DMA_CSR_INTERRUPT_ERROR_BIT] <= interrupt_control_error; + o_csr_rdata[DLA_DMA_CSR_INTERRUPT_DONE_BIT] <= interrupt_control_done; + end + if (read_from_interrupt_mask) begin + o_csr_rdata <= '0; + o_csr_rdata[DLA_DMA_CSR_INTERRUPT_ERROR_BIT] <= interrupt_mask_error; + o_csr_rdata[DLA_DMA_CSR_INTERRUPT_DONE_BIT] <= interrupt_mask_done; + end + if (read_from_desc_diagnostics) begin + o_csr_rdata <= '0; + o_csr_rdata[DLA_DMA_CSR_DESC_DIAGNOSTICS_OVERFLOW_BIT] <= descriptor_diagnostics_overflow; + o_csr_rdata[DLA_DMA_CSR_DESC_DIAGNOSTICS_ALMOST_FULL_BIT] <= descriptor_diagnostics_almost_full; + o_csr_rdata[DLA_DMA_CSR_DESC_DIAGNOSTICS_OUT_OF_INFERENCES_BIT] <= i_token_out_of_inferences; + end + if (read_from_completion_count) o_csr_rdata <= completion_count; + if (read_from_clocks_active_lo) o_csr_rdata <= total_clocks_active_lo; + if (read_from_clocks_active_hi) o_csr_rdata <= total_clocks_active_hi; + if (read_from_core_clocks_active_lo) o_csr_rdata <= total_core_clocks_active_lo; + if (read_from_core_clocks_active_hi) o_csr_rdata <= total_core_clocks_active_hi; + if (read_from_clocks_all_jobs_lo) o_csr_rdata <= total_clocks_for_all_jobs_lo; + if (read_from_clocks_all_jobs_hi) o_csr_rdata <= total_clocks_for_all_jobs_hi; + if (read_from_input_feature_reads_lo) o_csr_rdata <= number_of_input_feature_reads_lo; + if (read_from_input_feature_reads_hi) o_csr_rdata <= number_of_input_feature_reads_hi; + if (read_from_input_filter_reads_lo) o_csr_rdata <= number_of_input_filter_reads_lo; + if (read_from_input_filter_reads_hi) o_csr_rdata <= number_of_input_filter_reads_hi; + if (read_from_output_feature_writes_lo) o_csr_rdata <= number_of_output_feature_writes_lo; + if (read_from_output_feature_writes_hi) o_csr_rdata <= number_of_output_feature_writes_hi; + if (read_from_debug_network_valid) o_csr_rdata <= debug_network_rvalid; //read prefetch after dcfifo has valid data + if (read_from_debug_network_data) begin + o_csr_rdata <= debug_network_rdata; //read prefetch after dcfifo + debug_network_rready <= 1'b1; //rdack the read prefetch + end + if (read_from_license_flag) o_csr_rdata <= i_license_flag; + if (read_from_ip_reset) o_csr_rdata <= '0; //this read will always return 0 + if (read_ready_streaming_interface) o_csr_rdata <= o_streaming_active; + + if (o_csr_rvalid && i_csr_rready) begin + o_csr_rvalid <= 1'b0; + state <= STATE_IDLE; + end + end + + state[STATE_WRITE_ACCEPT_BIT]: begin + //o_csr_awready and o_csr_wready are asserted now, indicates csr has accepted a write + //ram_wr_addr valid now + previous_was_write <= 1'b1; + state <= STATE_WRITE_COMMIT; + end + state[STATE_WRITE_COMMIT_BIT]: begin + //write_to_ram valid now + ram_wr_en <= write_to_ram; + if (write_to_interrupt_control) begin //write 1 to clear + if (ram_wr_data[DLA_DMA_CSR_INTERRUPT_ERROR_BIT]) interrupt_control_error <= 1'b0; + if (ram_wr_data[DLA_DMA_CSR_INTERRUPT_DONE_BIT]) interrupt_control_done <= 1'b0; + end + if (write_to_interrupt_mask) begin + interrupt_mask_error <= ram_wr_data[DLA_DMA_CSR_INTERRUPT_ERROR_BIT]; + interrupt_mask_done <= ram_wr_data[DLA_DMA_CSR_INTERRUPT_DONE_BIT]; + end + if (write_to_debug_network_addr) begin + //don't care if dcfifo is full, handshaking scheme is already tolerant to debug network not responding to requests + debug_network_arvalid <= 1'b1; + debug_network_araddr <= ram_wr_data; + end + o_csr_bvalid <= 1'b1; + if (o_csr_bvalid && i_csr_bready) begin + o_csr_bvalid <= 1'b0; + if (enqueue_descriptor) state <= STATE_DESCRIPTOR; + else if (write_to_ip_reset) state <= (ram_wr_data != '0) ? STATE_AWAIT_RESET : STATE_IDLE; + else if (write_ready_streaming_interface) begin + if (ram_wr_data == 1) begin + state <= STATE_IDLE; + if (~ENABLE_ON_CHIP_PARAMETERS) state <= STATE_DESCRIPTOR; + o_streaming_active <= 1'b1; + end else begin + state <= STATE_IDLE; + o_streaming_active <= 1'b0; + end + end + else state <= STATE_IDLE; + end + descriptor_count <= 0; + end + + state[STATE_DESCRIPTOR_BIT]: begin + descriptor_count <= descriptor_count + 1'b1; + case (descriptor_count) + 4'h0: ram_rd_addr <= DLA_DMA_CSR_OFFSET_CONFIG_BASE_ADDR/4; //addr gen 0: config reader base addr + 4'h1: ram_rd_addr <= 'x; //addr gen 1: token + 4'h2: ram_rd_addr <= DLA_DMA_CSR_OFFSET_CONFIG_RANGE_MINUS_TWO/4; //addr gen 2: config reader num words minus two + 4'h3: ram_rd_addr <= 'x; //addr gen 3: addr update + 4'h4: ram_rd_addr <= DLA_DMA_CSR_OFFSET_CONFIG_RANGE_MINUS_TWO/4; //intercept 0: config reader num words minus two + 4'h5: ram_rd_addr <= DLA_DMA_CSR_OFFSET_CONFIG_BASE_ADDR/4; //intercept 1: filter reader offset correction + 4'h6: ram_rd_addr <= DLA_DMA_CSR_OFFSET_INPUT_OUTPUT_BASE_ADDR/4; //intercept 2: feature input/output offset + 4'h7: ram_rd_addr <= DLA_DMA_CSR_OFFSET_INTERMEDIATE_BASE_ADDR/4; //intercept 3: feature intermediate offset + default: ram_rd_addr <= 'x; + endcase + + //there are 3 clocks of latency from the time ram_rd_addr is set until ram_rd_data is valid + //This is why the config_reader struct in the dma/dual_inc folder has to be laid out in that order + case (descriptor_count) + 4'h3: descriptor_queue_data <= {1'b0, ram_rd_data}; //addr gen 0: config reader base addr + 4'h4: descriptor_queue_data <= '0; //addr gen 1: token + 4'h5: descriptor_queue_data <= {1'b0, ram_rd_data}; //addr gen 2: config reader num words minus two + 4'h6: descriptor_queue_data <= CONFIG_READER_DATA_BYTES; //addr gen 3: addr update + 4'h7: descriptor_queue_data <= {1'b1, ram_rd_data}; //intercept 0: config reader num words minus two + 4'h8: descriptor_queue_data <= {1'b1, ram_rd_data}; //intercept 1: filter reader offset correction + 4'h9: descriptor_queue_data <= {1'b1, ram_rd_data}; //intercept 2: feature input/output offset + 4'ha: descriptor_queue_data <= {1'b1, ram_rd_data}; //intercept 3: feature intermediate offset + default: descriptor_queue_data <= 'x; + endcase + + descriptor_queue_forced_write <= (descriptor_count >= 4'h3); + if (descriptor_count == 4'ha) state <= STATE_IDLE; + end + + state[STATE_AWAIT_RESET_BIT]: begin + //reset request was triggered by a CSR write + // -we completed the axi4-lite write response handshake in STATE_WRITE_COMMIT + // -we don't want to return to STATE_IDLE, since a new transaction might get initiated and then interrupted when reset hits + // -we should assert o_request_ip_reset for multiple cycles to ensure the async signal is synchronized into all clock domains + //so, just hang out here and wait for reset + o_request_ip_reset <= 1'b1; + state <= STATE_AWAIT_RESET; + end + + default: begin + state <= STATE_IDLE; + end + endcase + + //completion tracking + completion_count <= completion_count + i_token_done; + + //interrupt tracking + if (i_token_error) interrupt_control_error <= 1'b1; + if (i_token_done) interrupt_control_done <= 1'b1; + + //sticky bit for detecting if descriptor queue has overflowed + if (descriptor_queue_forced_write & descriptor_queue_full) descriptor_diagnostics_overflow <= 1'b1; + + if (~i_sclrn_ddr) begin + //state + state <= STATE_IDLE; + previous_was_write <= 1'b0; + + //AXI4-lite outputs to host control + o_csr_arready <= 1'b0; + o_csr_rvalid <= 1'b0; + o_csr_awready <= 1'b0; + o_csr_wready <= 1'b0; + o_csr_bvalid <= 1'b0; + + //ram + ram_wr_en <= 1'b0; + + //specific offsets implemented in registers + interrupt_control_error <= 1'b0; + interrupt_control_done <= 1'b0; + interrupt_mask_error <= 1'b0; + interrupt_mask_done <= 1'b0; + completion_count <= '0; + descriptor_diagnostics_overflow <= 1'b0; + + //descriptor queue + descriptor_queue_forced_write <= 1'b0; + + //debug network + debug_network_arvalid <= 1'b0; + debug_network_rready <= 1'b0; + + // stops streaming reload + o_streaming_active <= 1'b0; + end + end + + + + ////////////////////////////////////////////////////////// + // Bring the level interrupt to the host clock domain // + ////////////////////////////////////////////////////////// + + always_ff @(posedge clk_ddr) begin + ddr_interrupt_level <= 1'b0; + if (interrupt_mask_error & interrupt_control_error) ddr_interrupt_level <= 1'b1; + if (interrupt_mask_done & interrupt_control_done ) ddr_interrupt_level <= 1'b1; + end + + //this is a 3-stage register-based synchonizer + dla_clock_cross_full_sync dla_clock_cross_sync + ( + .clk_src (clk_ddr), + .i_src_async_resetn (1'b1), + .i_src_data (ddr_interrupt_level), + .o_src_data (), + + .clk_dst (clk_pcie), + .i_dst_async_resetn (1'b1), + .o_dst_data (o_interrupt_level) + ); + + + + /////////////////////////// + // Clock crossing FIFOS // + /////////////////////////// + + localparam int DCFIFO_DEPTH = 32; //dcfifo is RAM-based, may as well use an entire MLAB + + dla_acl_dcfifo #( + .WIDTH (8*CSR_DATA_BYTES), + .DEPTH (DCFIFO_DEPTH) + ) + clock_cross_debug_network_request + ( + .async_resetn (i_resetn_async), //reset synchronization is handled internally + + //write side -- write is ignored if fifo is full, this is okay since debug network handshaking is fault tolerant + .wr_clock (clk_ddr), + .wr_req (debug_network_arvalid), + .wr_data (debug_network_araddr), + + //read side + .rd_clock (clk_dla), + .rd_empty (not_o_debug_network_arvalid), + .rd_data (o_debug_network_araddr), + .rd_ack (i_debug_network_arready) + ); + assign o_debug_network_arvalid = ~not_o_debug_network_arvalid; + + dla_acl_dcfifo #( + .WIDTH (8*CSR_DATA_BYTES), + .DEPTH (DCFIFO_DEPTH) + ) + clock_cross_debug_network_response + ( + .async_resetn (i_resetn_async), //reset synchronization is handled internally + + //write side + .wr_clock (clk_dla), + .wr_req (i_debug_network_rvalid), + .wr_data (i_debug_network_rdata), + .wr_full (not_o_debug_network_rready), + + //read side + .rd_clock (clk_ddr), + .rd_empty (debug_network_dcfifo_empty), + .rd_data (debug_network_dcfifo_data), + .rd_ack (~debug_network_dcfifo_empty) //consume read data immediately, cached in a read prefetch + ); + assign o_debug_network_rready = ~not_o_debug_network_rready; + + //cache the most recent value returned from the debug network + always_ff @(posedge clk_ddr) begin + if (~debug_network_dcfifo_empty) begin + debug_network_rdata <= debug_network_dcfifo_data; + debug_network_rvalid <= 1'b1; + end + if (debug_network_rready) begin + debug_network_rvalid <= 1'b0; + end + if (~i_sclrn_ddr) begin + debug_network_rvalid <= 1'b0; + end + end + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma_pkg.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma_pkg.sv new file mode 100644 index 0000000..337e92d --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma_pkg.sv @@ -0,0 +1,79 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +KBINBWwFBioHCz7xwhGHfDQEiKbgIL+MunYm7yA1PGFWyRuI+H0eKMGc2G2w4RtCehu0OoYlrHFZ +aTSVvsJMBEESjX7gOheQguKq4jQ86zx1WEK6sIdjACLHZWXl1XmWRTOjALxzYRpzkNUYVFtzYwqa +o/KadhVWUOY6uSjlYWJ2TXMYBW5bz2h35h6pb4zc7PPQfwwUil8WkrekdEdedfPLBi/WYmnUdxWs +g25Ta4Y1Ljjse9Ayib/RasrG5X+54k/2A5Izcq66yb/eoIXborwMHG5kpIyk6POY3D1BOoFb13Ey +4quKHBPlMnqydz+gy/Cdi+MB7p5qgq11VFL5Ew== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 3296) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma_read_arb.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma_read_arb.sv new file mode 100644 index 0000000..5dd98f5 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma_read_arb.sv @@ -0,0 +1,161 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +3xcDGfaGdT5ZFsDvy1vC4I4E33kT1YnOlDVq6KC8MBFMnIKZHaZe5vG4bjGGkNhpgruVC+ccnlJb +EaLjNVErMT+7xPQygn5cJ3ciT3/bBsCXxyIXJh4pS8aN/155Jb8OIe04rwpyUx1nPF+oxth3u0O9 +xxeiLEVr6U3ydC4zZ/6GYzAA5pklPX9P/Ov9DZM7iFZfbxdLcVxBI0QsHg3U0QGWpDzi5gH0MyA1 +79jqksrT4gbTUz8i8NTZRmvZuiqK714hTMYHhPt2ZVLMri9DXS8Iwnmj9RbKn2EYY+a5U4vCaAms +1WqviFW5CHKdOgvdjAM3MK3E9IJ+UsHERGI3fA== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 7952) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma_reader.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma_reader.sv new file mode 100644 index 0000000..9ee092a --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma_reader.sv @@ -0,0 +1,469 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +yGHOiKK4CjPSpMcbKiQ9qD+Iebjcm1ehbl9KUxd5/vlfk48Qug6gQp9knRm3it5WPpVZJ+4zv/Ex +kAIaaGlLh4p0LhLGljIWrcwe+yEbUNK9uMaj5l7u5dj1if2Jt5LaNT5yt7jlwYZ5BlNcQYwCtjy4 +EH3N9lsJsTgBDqJjNEyqxYP0CZPgcHyKyFVR3ZhLAbXpRpEsrNhlTl1C+noYt8wLYx2xgsv03Oac +qcZhfTtM5Il0JttNpFZHnBKBPS8er34ChbfunpmMS8hW43qvhnCHEM8fjJtb4g7lc121BFMBYk5C +dwoOwdm/hlwCkVcKoSebxU7qidnK+XtgceS1jA== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 25488) +`pragma protect data_block +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 +NUS3Ex2BzItq +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma_writer.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma_writer.sv new file mode 100644 index 0000000..e6d0f38 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dma_writer.sv @@ -0,0 +1,414 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +kN5f+/vmI23Y32VITtd2wNqGgLCIGk4bk+7VdWrodA8ZDGoKbAhKRmx0syudqMSSglZzvlNm90XZ +tbPkZcrs757xsdB+kMW31ELHJdgLFmvpEBApfH9KYbXYZ9NbrtxDIZ4MzB74vtG1WX7uKNBWk/u4 +Enum16VYOEZiJbWLlCqO4NhanEnogd6ZbTZJz4Kqvxe3QYG4Oe/8wFA4oFobRU2bPnSc2iBX0/jG +JKqQmROV+96GHtDdNkijzBvp8vaH6SjWqBQZn6ztsCWy/5R6VRDhVdit6vssH9l2c17Nb2+gPBTC +o9dEJ7tV7h3yjrNdrYQIGVT6RdNBYodhZ+jPcQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 22400) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot.sv new file mode 100644 index 0000000..9cd9c63 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot.sv @@ -0,0 +1,238 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +kAm5fFo7+pBTXJ9xhb1QNMdcE74A74cZu1fwPJhrG7Pgjd99FO4pPbyobk0lLmYjPy7BalTFcC/P +yjQzQ4wVVZbLSEM9nHuQBYB7oxIhUNpj+VmF21z6xGBf7q9w8rAW8l0z1j5gnz7GktXH1ZCgAm9g +s4B43AyC4mxSMKo42IcFDjQL60450kfjmC6todLlo1aluiO1xw6aB3yvG4JfYRLX3qoSpDYGJRfq +kZ9aIi/iX0usOn0kIyILicY4OKLflIGpP6L1u7UcOi45LHnuhzDYWCF5cTNH6tcpQPonLm6tDpeV +RKFyeVg3jfzGGs1+vQbAmEttqjkG7EBMd9FzQg== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 12352) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_2s_alm_s10.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_2s_alm_s10.sv new file mode 100644 index 0000000..a1c58c8 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_2s_alm_s10.sv @@ -0,0 +1,74 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +6ny20rs0BRm3ZOPr2Tcz5zPgB3lDmJLzxKhDuSl9TU094CeDZJ5lJEOtqj/dM+fpqRkn9D6D3rgY +eLPnCPUpfhNly5n29wSVjXwGnVlxuY4kv0vfcgl0KYyJeS0+JOKaMDQUm0iWoSjoS3XDewbZFy8L +0/NWeoUTH/Yhl0PorinlQqFvKdZUFIlS0LoLjKkrx860le1NxqJc5GQwjMfA0jBNqTnnoRM0Xba3 +XHYQr+gW35B7PSOlZQ/94kUabtnbpj96TDYXWYIXRYX/8oWKCLwBDHMgWzbR5lmdmrfnXZ5xfVgZ +TR3uEgHx7KifkjryNmmrBz8YwC7qMhBxj3/fDQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 2976) +`pragma protect data_block +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 +Hk3WnWmmegPLtGDH +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_adder_tree.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_adder_tree.sv new file mode 100644 index 0000000..2348c31 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_adder_tree.sv @@ -0,0 +1,143 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +nKx6cuD09T+CnJtw608gyiHolqkzduVb5fCSX++l9w4uEp9TlIIOZn8/gATDr3Ie8y7gRqper5cq +x89Yh81kWBzU9insdX9pfQzjYad5pvrLjWdI/K6PV4xqQ3aymxdMGhpf4rXehTHt78bup2wa/+yL +qV0qpAXhuIAib5BDPiCrmqEqZTc/Frp/slNDd217oO+zOJqFdbWpSeVJ4MyMJ0dQgHgBkBtqYKUz +byvhXvbSkUHm2RvYYsoHWz/SzogzCwBInTVbhCP0FJ04wrgz5+8oJyQmqfFW6Ajb+/lByF0IPDFg +jJ3YF9jpo/ME94kwQ7CbpmgfLY+6lzrRFGLTPA== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 6928) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_alm.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_alm.sv new file mode 100644 index 0000000..85ee920 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_alm.sv @@ -0,0 +1,69 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +UdcGZOC5r3t82DEd1q3AyAE4ldD60liPzN15d2MIVslY2+AfDiMF8bS9FnF2sPwCZN9/TkZlqwAx +NwnQ80I+ENMdKgWaJJuxB8nFxbkslOZMU8/pe7YExr/GhYXaCatftxPfEzgKB2maR5qEJf2LDyS4 +ZKb2DkH8HDEzfjPl9/aRlg/8bUdCtW0lH62QKwQJQqp2i6P2BDDyPRlJh8sg8Rbw+s+ubnGnMPsU +WjznkAfU3fhNH7HcsGn0jH6oNbfc6Xe+4DM1sbhBRhzZVwkyiwZzviwQU9jz7wsZEU4HHN8TYEUl +pmaQS4z4WPGKsx54gtO8RM8Cj9A7p2L3BFFLgg== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 2704) +`pragma protect data_block +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 +KWzezqniPfpp12aI1C7r9LId/tWMhurDyg== +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_alm_a10_c10.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_alm_a10_c10.sv new file mode 100644 index 0000000..c82f5a5 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_alm_a10_c10.sv @@ -0,0 +1,77 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +kUUeGiPtRRqimm8xaShbQKIwx7vxqYue1jObgckU2cQ82XMmJWe30ZD8yON38NUevAcZIv6gyDw3 +BaZgc6r5rntk7o1LWRuPdYGmuVAQ05U9IZIrgzc+Jfh/plDq0rcV/vy5NX0KJY6OT0AcLoPBFvhu +iGH6PomcMAuUT1YchQNsH5NLKQE6PfMlQqNqBfoWz9e3KRvzdfbJxBnfEcbAm0KVKvx0N7WQogBY +BoJbj7318reJbyH8tPwz2WSOWZuzagNu7HEALJV6WdM0d0H4x8UD9PLJ9rEx53qO3bp9/bv0v56m +Jn6PoxLe528vt8w77hLY/j/kEp6gXSKuC1MB6A== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 3152) +`pragma protect data_block +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 +iyn6fXYj6N3y7sjJepAXz7Y= +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_alm_s10.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_alm_s10.sv new file mode 100644 index 0000000..1eff42b --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_alm_s10.sv @@ -0,0 +1,66 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +oRBn5ArhY++7vp2ERP6EH/9YUwiQNfxoyv0e34OvLy7r22dqb+v6CXoI+gfVfjR0vMOwCEJZbmFR +7pNznPseX8tI3iHMjKymulvyMHTGIc1pfPxjxtyeUjft7NrOUyID1xich3efoUkDYJ+o4rx2ouJx +XA+aDLIIqnNAFmekBXV9KGB3NJpphFvsmLmfMvJ4tHsZH5a1GWruD9nY/WBS0XPDXe8t2AP80DFG +MHYbrZnsSmrYXUJlfR/RR4asrQKgZeDvKjVelkrSEl/v9kFHNS/rsVXuRKFg9hvJEqvynkb0G2PA +bMHemfNgWw62yC6jK4yPhwvcvU5XBr3qhiu6iQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 2560) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_and_convert.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_and_convert.sv new file mode 100644 index 0000000..7742927 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_and_convert.sv @@ -0,0 +1,158 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +JiFJ7S0EdpV0fkKaJURSHVCh5aUDtWzT69RuPFHpmjHK04qneCAk4TbeWq0+OHDNd3Jod/bXrtNZ +vNbeYJH9vBVJGUQN6cAVeO5j5L3Ae4HKU01fXsmsu+R/ysfPAVrave06+vfA1fjolFjPjFAhUGXZ +GmBn6+EwlQ8ctB1rdmwT2aNjO3K+I1tX8u0dUbpY7ha43Bgg1NjZI+nQosXHUaSRskUDR5TeEI29 +/FYtREr2T25bmZ4WBB0NDTlckSB1t+ZsxTrGah2/OFaVMP4c5I5HJmXLnt/1oO40U2si6jkgYMGD +iJhq6laqc/NL9XcvdEAuCjchjJbv8/MB28ZcDQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 7760) +`pragma protect data_block +4mQlySuS2GlmSg4Qv6Sx/1JzWSmIlmrC/2+zaUEXvIoWJcsjiHPEU1FCzVH/IC6agdaPKEn8XgU7 +9ahtqy2Gq3itrFo/VLUTpC543FWe6/3jkDCyt0bjnVAzA8nKM5hDeL6Jb7tNhYvsCYxlhuT5RI1k +JasCTdF6D5T+cZWfSAplcrVs9p3LWF6+j6TFB7O9ayd50xWVX+O2gIqIGUq3OsC1UV/8knt88ED5 +IIBIGwtR0J2yDknW06qbBiflfYjM+F3JZJiYD+57Qm0srOhUa1RkaodJEgFvdlCfC3EfcPpmvR5C ++aHpPZT5xG23Di7F209b1LRmo3NCpodd4Bhd5meUcwD0ELKXOJ0X4QWX8PexSrnQPGS2z7P65+Es +yWykqp96ax1Z6mOTSQPqWNXZluKqt17Lu3Ln00FM1EFPHgw3vQ1S/L6TfMRfC/TKXX2txcwdDe/r +OrJx03bdmD01ZMRJNi7gvIXXWY3I0SWnL3WG7F7OjVYCQmGQlsoXvYt4UZUsjFTb2zXVbNZpfIxz +FiBl643wKpNYxpoff/CJZzJM9QVCddQ9mqJn9LvFWc4D0qZHNLFYVBxihIbcq9q4Lc/dpM3/F/VW +EWMhTKOgzxv2FDcSaWg5VK1dg3tvU4K7X1n/SBM4+px+BKJbdMfhZwN/TJKLymYVe/EvUmLKParR +qauyPiUkmJW0ORP+0uvrDZp11LMnw21n9q1lDExZDtSWpk3AAbprS26xtsLwKzKOPhKa+p2oCtwo +V0T4gMzreTMzojE3uNR0IoAVPVvbCHYM6NPC8edaMA8JYpi0GIEhfXh9l7E6AhL7a4TZASm4BZ3g +XjZ0BrTvLK5u9+LpaQ0F6DE8s44qGSh8urTT2nuIB9uvzHo4hsto9D4GxRy5e6Csckx8RB2OlDhA +bNeY+PlD8TgPljTkLquPSTpQ4mHWA3mvBbuiKfUENOaqNxsZnAr3nwekhgEVMIqIbRIr4ppIkb23 +2H1ta2nPAXE7wzH8AwJkV2O9H78Fw329+Rsc43/GXvcQGa9qN/agh5eIuOiNgE8Aph0/3Os1Cbkn +yFvWGZiQ0L1COcpS23SmwasoKqYmSHMKBxDztQ1/e0u1F7nW49t8Xn7LvGC876mdMT/iRuGUl4w2 +FDHYVYgMEek96faIG1s5GlqR3XUI65VwMj2ixVISkBuTbVV8pa0FHwf1Cc9dA2+uxvqWNs+8DCBX +Zm/rsPmhi6vER5CSUl016zwhIqmR9ktSUQOco+U2umF+GUofpupBm+C4DIJzC9fCnZYBxBkhxl31 +rZ/Yz32J/7/0hunAuU7V2MDMCufrtytDHlfrzhiW5lu24rMlDxEQuYEMd+wlNaJmEYB0qIXp/J2B +HyWmPB/+J4yKDmAsS8t/PGDxdXMb7Ea4vXbDMB8rzdcix5u1zI9jN8DZcn8GB11nSUkjBzs7nmdB +LQaE6mkEc1F4EX+L9zPkqqk5Xs2lpEfh7u8l8LdUPqoE9YVD1t3dsnRuJfLHVIjMAjyUUNYvJdgz +JDwDOXDRvHW0DjJMYhn8fsNPrr8Q1MhorWD9qYO4cBr6b7vyfirVUCsZx4VAlwIp1Bwmwry2vnZk +3EjlPf6wbSnP237vf+U49JH21cH7hgfagi8zxW2otChnn+pL8vBedBYXlOrr1UbfKVCKb4oQgrEg +xV1U717rveEntztk/71Hqdt8Wq33F7u1RgI0KnvpjuNhHf1X1E9uk1Kbgfx8E65kEi0jLBG6kPYF +iDQkyZDBo+Cpm2XJBhZSVD2EPkQ/C8MZqwnRI/5EmXZ3J9wuREMTdm3e8MyS5EvOL0N/jvxiKcHJ +yosW5OK3uNUJcWcycqzaph1HIhoKVq6U0Qoi5+uHVYazjz7R9u22RqAehdFSbQ0idQ/yvuOzr5vU +IV96qwH3FC/ZtdTBhWfAs7GcEbfxA1RmiLGnkPP6Gxe48Ux6U0Jsj7QJ3c52+8CtAm73jSBpn4ne +OnUPjBgjnwzH1ECo+kIkesaw4rUDQWFAaJJD6ZcDFuZOtcJnK64Q1h3GGk7FYq0dOabrQFQbaWp3 +6iC6U3vO0W7MyimJeAEjmKWZP8TAeqifMVINMNOgUv4l51fBroCutuA6GCShEEX9Q5kc2vHV7lpj +BMljozYecmt2VNfouWiWClLGIWQvNASn+88M01cGOA7SEuAdYftPc26FKBShJGmsYvpSIlmvUZOU +Sd4w/ZVnWb7O+SCWOTBXxuT9ImsZVrYyPD6lcniZOUNEa9NS1lA/1y7wtLF9a7fm3W1ZxNECdhsi +ZBWhZbmRg4d0MLfRu0RBFtuqI2HHrp1MdD2x4goNLUVhCCjgRBdU7JcXpUu5g21QFHcGvvo3bndi +YiO1jQ7z8K3JktlHDWY3cu1s8JAbyVLuhAMStgjUdDKEHPJBu+6I757FLw8Wunfkh9TV9z1lIjWH +karaQkVAhvE3Ck4SdvjjNeHQnJYpsp9U5x3pmo4xpj8pBB9+5p0Aul9wEqUBI9kxSfvjATLM+C99 +DC8pl7R7Cwiu5WUwQsAVwvdA5req7kBa/b5JlqBzSvuTQTq8nYq5031+RtNuXabEuTDS4W5JBIZl +xUrIEp7tjVwlVBOZFOjoT1D5hafcNgILqJu1AVNygGNib8VxCV/BbzxV1P/OMPDqUAEGX7ZwniWg +THZTTWnwkNQ7D/7O+rBP0EIDKslxAByjvC7/id+RbPuziwm1OnwI9JdXLYwsLZlfANahRXZdyRYX +eE7ONK40LP3w6yRsuQFvYOYi5erxDuaDlAcGj8cHtR4j1sOG6NP62vdxb5gyGFsVx75iLOGQiUrD +rJzaIEAt42snuCtvb3CZO6kDeqTz/m496GtIL9YAddunoHUC8zPHShrB9WLbgcGEaZ/7zZLD9hqz +KwgAJVKSon0Z1mlXw2kDhti0L483rGoF2DrqrQyP+hquDpbs5cFFIxLnu73Yb2U9zLbQAHaHXsGG +xzFWjYKsOJ+6SeEeg8RDysHxhu5Dlmq7ipIA8JUxd4JcRXtWK4c/oQhAtFRBpvIDphf8Anr5LEwR +COBH1H/MRGpQGYOOm+elT15fmhTMVhJaLHGPITzFanCyMvCBDT0CBXUkr27xglZzKqGOEDPau62c +RFXaXpiCmmXPISvhPN85/aA5LhiPXdjAo3xzkC4+srwktWFHz4HgV0k0LUqgL06Ld8x8C7L61P+N +fGiUfIz/96SyHAB5rRS41wY9f6nLUlKGE4vnsYAM0F/mfZfXY0+MvZqp9T2nySmrR1HmatiNyTy6 +BShnYS3ViKxzYZd3o9X2/ePvLyhbA7JzwauMMewoaRTsBe5Zd58OkAlM4qj6i0ClQeysi9/IMBRD +VPADZhbiVhyGU1jFiBZAVXcaUvnHMh+x1SA+Bt1Xj2ZVcliAe05VSepXD3tUSUxJM4eat3uDYWDT +aZTMD/AxMsRrkzcjShwXCFSEM0gS5gYgU/rFnowaf9Jfto0M7KsZrG9ziple8WA4QuFzJdtVuesN +TtDAE3yae0923EqQTIpQmZ4RbzvVle3AwAtI16l6NwcRuvNx7mP7Xu2fd6Cmgv8UynS6HQAnZNbL +StPEdqQL3nVkfsY2s2WQhEhedrXTpONCzUBCDiSmMN9SuG78kor7A6hmkP0KSMdK+2dhV8vgJbYo +LX6RUaj1TjeIM4bAU9FfYFco8e4sgUHC2Q7Zq8nkujfzfF5Wosi4kutvO7m5IIipY+Y00QVDtXKg +Q+vmITxWvKmi2VBv0mEJwfYrpA3Cd5Tjvg7TcPoSmTRzVoc4SbRVoLXtWjdrJZruv7rHpseOkXay +qJerDTJ1azJredt9Bme5hHt01rlL/3DxAeD9nvXQP5Se3rQcAatQDlq5OAV1qAp0P/UtLmqNo3bA +ZVtS/HOsPq0xra6+ep9K0sxUiVrFpRlGRsg9BA7RRc5F+7EWDAxXGTuaGpFImcv0OR4e9HvEopuS +so4bEuYIyxZ3BkfslhS/4h2rSxEsXeWQ0Sjc68E4/cFAyXDbWvD8DwJa9f5aetm2rJjpGehaGmoQ +HL3gnoI2V/5y0PwspCS3j8M+GdMcg+FYJr7cMSVyWVQYllDNnHeNDB0uUcCvUZitcovg6WXrm5pP +BlK2+X4KTh1CN1784bgpiyGIyyBF7FKx8ZHcbe1EwBWDLrv1axAXVAJCqiROgFxPKVCcbafAtiy3 +QAPe5HE3r0Uno/BEQu9zrFJAzOJqldRmACEFOgNCgFjPvn34or6dj8Gio064LMOhKIfV6u7u1cbo +33MV1NGQ3nE8+PH9XfeeLF33nQs7WYk1+ICA/NZoBUJcq4l9quuZM/VjJDnyt5Mp9Pr4C0UAvNgu +A9TYdYyQs2uTWINtkfpLeRk0B4codTbav2k2fK4C2GnXwVZ9V9GY/uy5uEn7pbDFYyB/Vut4GUt6 +y6d9GP1BDIFxImCqG9wjhwnY2pU8GMN0WamJVmBLur0RabeBMnHOCyyEtFu6hhHUoPGFGvYCm0eV +99y2dbPtbZKlUVTMZc0P9u+cFT5Vh8CIsg/Y61rCWFm6xGiMVo43DZMVDf17AojdyyaqYW0p40OB +kO1uOjH/BZF0McIQ8lmiyRza8R/OcLz5gmd0f4DoJdu6R9i4hLXt8IhhyV3+fnvNDNx3BBAUsB9w +KSFh0318Mc2vlgCspjpUq+ATmignHXtfSRce1uGf9vazvVSyd/PuxATvCiIXYir0eyKzLJwCptTY +N5ctWz1Az2nZfhzMu0HmdQ4x+k/4emmzOQhIQ3FrqlvwnWQn3uNVRqLpXRuNSqqv+uOhwJbhCICc +lXxYdcgfw3enoQwNMFR3jarh8WmlFmlAWjMxl0QplJgeuSOIUEW0a3dl2S3lH3WSQcO+r+qXTztU +Xt/oA0MA/VzMHSv6/1STF/tz7Nneh3eHP0hVpBHpVN/Y99GY5Ajmlup4i4aw/pijoW/Hkw9emPiE +haeDN8Wx+/Z2R/B+scEk4yPEuwvuiH3at4w9oGvCslokGLxqWQcoIG68aemH/ez6pUkN1UOAXvc9 +JGx9YC52UtXYsw7cOjx+QBOWC+t480Xe4MzvkU3f0sTyvStQ5QnGl99m/xfccbzvjH1E4z8amN1U +Spe5Dz2WAiENAVYFzx/1wmDOErAHrrRs3OFFtt41x0KHuNvPN1WLwAwu8wIIVvhgZT2a2U+24fIO +DJPD/k1id5V0kAssYmW2FYZn6FNFYg6uhIh+yrokw/0rVA/UvumI8nioJE5sdhQw5B1II+xO18Ns +Ip2HbVW2Kyg5A+qSmrz8YJUwCZEfrm1iEB4i8ZPof1qSe8UFhHuZoHXybQvsOooeWm0pzf4AMomx +Wk9sNxoPYQVTzPkt50w0m0tux4m5Ojvoy9LN5cLjUZWWTWwf0igIKS+k1Fr8ctg3PjODTKdWvFnq +XduYGXrpJXWe77ZfwGAP7HmF4pRllsVW7q+gZWAA4CXAUzv9IKbaZPh9rHN3NJ9FkOamRpscsM1W +C16wNPg/K35xrR5rrlEQRrty3Ve1JahSYfZL56Y9oGQcl45Mmxl6vFddvpGgeKXGShf4AcUx7uUW +mjKPmt0ynkNdWP5I5TLBfdikiTzLap+R9cYub/8wqeW0k+O7Dx5W4YBvaoVdVOscK+QREGFdsTkj +QtS5uiIyIJcFl+0IDnTi6RVDbtP5HebtO+T3hknJbr2pSzoxl4qb4UIZ4Z7VGLQlmPV4jqOQ03CM +lVkg8HqKAMcVIcCxLHEMZodqI6fh2PTV7C9DAtpX4QlIV6T8ANQf39XWvTWAm5FsMG8rfxW25Swv +/JkGGZ4A6hyZfjppAkvuqwLgEgyxzvxg/3n2yL2cH0EuSQSp38WETebgGYSWSI2lYWc5ClKdJ7fc +7HLRx6b1vM+LOFfMSE2un6pZi5Mj7HKIAfIGj/zYsUb/qDK6fdKeYwkgn2dHHceheDDulVaNze2a +A4pIrUpg+v/D996dTmQqSMhiH0hfww9vIoahYCxsRYR2W06Pl55KpDchVs/rAeIlZY9hDiiNgTw5 +VOd8zjINTcYw5pZTkyfDTp6az3DxOkZ3OFgIYb6bw7GX8Ql4PSAX0lsWVkA5gqd1ZGNfqYeIvshs +u7In45g7WrrsJPj+eCvVj69Ro05BXX+VQtEXCE2baHGbNVmbannYUu3gdm2s+ziha4lAACoPgnoz +E3xiWXscpeNgTRaw5lI3ofUHzuKu4k4S1eHzzEe3Xid5R3TeLzCmcD4BT9ir/Su1z5jciZVixdm7 +eUSezRa+MLcgqAAtEjEtujND/dY1MKdWAR+DVC4ZnuwzHNC06b21T+qHIC6KI3AhfSEPF/E+CrxA +Z5+jpBTnyMKWvs3+qShp8UmcT6gyKypXg6IpJn2kE6rtJRPcORMX92q1sEWO7ucjOhcYc4G9J/ap +zT2Y/Uv83rYO9kpJoI8Wmv8RpVnL5+rbvzo829dDCn7+jzyhTQoyWW5XmhfmaQTQmjUYzZ4sSfyV +hXiNlBOXdaOL1Mt+u5eArYcnXfco0uk9qdHbdLyTNA0Nivk8YxBH5jpshgO0RKKv8w94uvVJMPpm +GGVCcGKWfxIR2Z8I5OhngfwBvzJGpNDjBoJzrxP4nOBN9kv42HJWNqbRBP8dqUjlHrgBI7CYc2dX +dsplyZKXNP4SaVvLh6W0lebDPQhyHuqiQ5uspEmdAtLliBSzf5RetF0YBncDX6wxso4GOLYulUp6 +3ij/ljI7lBNveqIC+HpWLJGTUIW14BwbU+MlF8YhXymDd3wStOpgu3uB1qzcFTcsQ3m3QNJ4ORfP +KL/X/e8ajwlVi7KU3vC7UElENsoKAiLBXTXtBGBHiQbCZPwkEpnPCpDpK0FqYMTxhh050KHnPIfh +w963vUZ6qvwNt8lacRy3tIlN2AN8BlOM2OVgUNCsUTIqCpQluierZj0Ua5tjJgwyRGAHfzFKz5gt +A4nimJFSjjyUgyUp7K54fnbzCLWQw+YTr4YnzIOzhUzYWwgbPTXCOLRvXYtaXBDssSPmMeQ9TME0 +BNdz45PrY4CqFJy7mGIb0EH8HOMhi+8Gl863xJNdHQ95GawzM7bMmtBm4XFacLZemuOVZc0IBunC +PJkfUQxqfFrpxizz3qTfIjlq6P5mJvCF6rTF4LLa9ynxgev38oBLGEr5cWU69yrsekcr7sq/1whC +2tQbABdALD7lCr3r2iI4OtpzeB89QALedbVpiXYqF1+cPEg15GD9NCZ+Ov+40M4bYXWTVgh/pItF +EimhYNQDX/zm6ipTGFpGbRQDSxiI+Bki3DETr8XBYEVvBSfHPL8Q8Z5SW4xPFaiHeDVvPRyDCiQh +kOb5ttNoK9LULwGksu/exDxgyNXFCtCa+QgBt3AZPFT6yCYJ/7/pHIV2UpgHCEHkRolX6fI8e3fZ +Cyx7NVcm2ndYnsyEwkEqg2SSVUZNIKuf24YyQKipklUcCMDq1jD2eI40viurrRpt1dLg9wNKwuYy +9PpbCMnjEFA0gw0o54PQ/RGifGyPQuWow3mQkIyv3g79bt01W4ITPcbedx2bohBVQhtOn9HsDfNY +5Pxu0hrvFnSH8XpkT9HJd2psKmqMhFa4OoohUO6JSgrezVD4dcSg8N1W1qT7N4kJCyPXrW33xPbP +YocFEhyq7RnMKrncnXapVCaU6NRbN4mprOv2FABZ4ZS/3JUnp5jaxnKlraW2bQSZi8tySvRZ+8Qs +NwtGmQlfplRvXT/oc18RLNLCW8jMjvJwMs08YyQZ/WZDQ29/8KCtAmHUen/PhBcgAaeMqOcLvTg6 ++WmZZkui478NipMkfmymiM4KdkWS7uzTEqpo8VkH7HrSWjxGv3soMMHtgFME+cTDI/wKzWqxhH4a +xQykRBi/TB7qZMYOD16AXH2Mo9swEr5eGfGjpJ0u87haqHx8IFkF9V4s8FPubel4pXDkTR03CNNh +KcutBiyPOA5yu1ueQfMEFIjjRsA6eQ+0ZuD0BwJG52EMLO3+j8Fsr64d3OppM/mQXgX7nz0RxfVQ +RRwpV/pFGNZdpktP2XNtfWpSp9qZ4PSV/Jgj00dJOY82FGUJkKmiTYV3vTZL7oP3yrl53y2DsbWW +YR1/k5QRH4R526y8BO8D0jpgrqs+DVzhvJxq3Q9eVJAFLH+qjJXN+Ji7h+8VPTrkAVVrKTAyTYRk +nCcrDZoco470uZxcS0cJgmin6JjE4J4k7usHA2ijdUm2S8lIqdb+iDa+aSjfWj/QKYPaATEQFese +i8GlBlLEKGcLlSKoTc6gB7IxSlRneb8mSjbqX+KoqCv5vChgdaAZZy5SLfNsTSd8u6o9XRspr8WW +9A2rurQaXDGsIx+J2JO0XZBDwr1SzDaXTHsLMWhjMU8HzdZoXhCIEeYfT/Yk/fYZpZ5BmO0Lg4Uh +dxIVAp72XZYiBUMZW2EOxM0Q4zh2frvg/+JjPbVfRAzYOnGVBtXrLxq6kIVIinoxHmM7xNPRsdaS +2la3Qc18zQw5+KfKG0ppTfi9XGSfWDzgh3YoaTTluY+VePyrOU5C2US4AmDhefFfPQ8fqZs5h17/ +KjXTFZFIynFI6zyqyc2kqxxqyUg2xNy1/cLmkIPvD1tNBS+gAkzlhw+qjVGAAWHOPGMK7+LMjfsB +HUHJa7dH5XNNLxe/vxVhu77uYUz40WxCjLpR+mhx5JVCxbNhW1oR+1CEKrytU06qdkGm5QnA2ZWM +0GMXTjbJ4DHpO+5R5X3eWdiTfbBOlii9vmqpmc/hB0Qz9+nOwyM11whfn+Y3kGVIf5q/h7wCuCqO +Ms5If+9psX3BXKdhDMjiKWZTPTeAsrUL8DIUhkOEY9y9j9I643KJh4MnqIRqlZo83OwkOcvQsZWQ +2A/si6bs4WhvHdyv8q9WyvQ/F8xrzypSgdIB4RGpE614D4K2o2sQLGJs+aF6PFoUOO7jF4nVgpAn +9pt9f9pp+NvXMO37yaV/mpS9t4cQGJIhenswBo3Uo9uKA0kkHjoBuVlNqLiubLf6H4cYSNO8uwME +x6hugHU+xrwE282GRs5ChQ9qpjTwJPmA6b7MGr527YoT5q5FB0Ef+aM7ZQqHAIi1073sIM0hjR7C +ivGDeKU8WM1DCbJLxx5+/Yfj1wZhc5U5u4322CaBEr5uaHqh0FOZU76217f8uuupzgUa82PuB279 +B3sjWB7CbCkCFyY0rAvtX4ALYqQamE3t7WlGOWZXB06Mh5PixHLF3bA2csRrD4tkKdBpPPjTw8Gi +UTtKobzNFZ7bR7uZWwSvwMJ6FoLUdd/T83ONFbQPiTmSdPgrTr2Xleh0qE+htGLmo0HSYPEHDaJ3 +MWkxqRmhWJsF6iuPTA+9SYZpkfU16lNfBS1yIxGbXuEYqxYw+FeaSftPAl4qyXoI4q7YGxX8pqLi +kollJmGFtWX37Q4utQYv/68qtZ9I2ciP/muvYMFtOaYdIQEaWxwr4pgUQiNdCKqNp/BjXShX5Tbm +BhyYZ7MA9e//QTJfPQ2WK1DtPJYJKfTNYLmy/BGr16M/hTIOOIcMF/2icOl2IxmMCANNDXjGM/3F +foV3Z4Ofq0md1uqkunIkFVsTHCv8waGMF1Ns3AZwilXNX9jfjTxnlFtfVMBqJsArEiS+zZUcuL6t +yV9/kaLvpkCK0O3lsntDxXb31Hwoj4VlnsyLvA5JkxTmWV5ooag3/isNCDiFL+aaFs7aXYyV3JLl +8kV8tISUNVqrBSZctqEewpIS5GphVCdQ2V2vKQpxWypXQs5KVAZhK5BHo5GDgW2ggWxN5AtQcdCA +l9fjdj35zZ43xsoKC1EYDRIZYhuuXTyGCjPyTdENuWIgJSB5dKt6GtQOqgRMU/vTKzLJo5mklr1B +mfSmA1OHIQNZ/pElXk6V4MBEyoRbNJ8GR+ulF3gBPGNnomKWiuPirKyu53q7Gbbaek5QQsfaI87A +S2CUsKn6NnByFgANcA+wiO/UD7RSR0w6D1yB+PEaKwKJxU+WgVG79x6PopBjFuR1mNx8IrA91FYK +QK6Nah+o7iA7CPtDUYwTdJZZFH96tyj5EiYmdPrAP/7C+stYe0UHBtxKGiyCdxPALBEYfBHZ4/Z1 +XZbos2+1/DyeOHG0z72lRBdAXiztPmKGWszKM85Oq5o2DfpC9pl6NCF/1ExI7yOAQllXf6K24YYM +XkPGDgQA471MBSR7GAW/6Uj3rxb24BVtGhumErIAMzJPQgpFK/0T1vUWCO0MnPZ/x3UX4Wxfmp0P +GxxsXaqNEnFE+kM/km7rGAW+Mh3RY+z7SLpVW6lyE1sPc+coE305KxTRQz98BMse8TDqef+EpcS+ ++FuqHFGLbG7Bmlb5kMx86FLPfqkpJiJfUYxeGdA0P77XMzET465K+O+61yrsDyx2YWNOzi+LUnoJ +zh2O9aYYWwI= +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_checker.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_checker.sv new file mode 100644 index 0000000..adb49a3 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_checker.sv @@ -0,0 +1,118 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +OT7fJ3xuvFgWVzV6/V/yBxVcdHocMdQaZSmNu16T3nLfmjrbTITMKz22rTrxDmayq1ouHY27BkdC +sloDXy15UeK9vlBFB5qOC0H1hyxdH51p8sBgcivI/1uxfZ0OyXLQq38ruags1mplAl64IcavKoku +LnkR8dWZ5HWVYR4FT7pWMw7mwwYU+gT2oxzHLrfuQ3N8WLPH8UeqFzBfHvwKRn78R9vUXh4RMMoq +ZOXg8vxshi/2rMi0J7z0NM6PT15CbrBrucvRzoe1BDqQrjeKDk0ty28EGx+ZX4NjOGQCWzIqfQuq +q6dJ36MfS8Ich7R7ZF5D8W+YzABPequwoa5GcA== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 5488) +`pragma protect data_block +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 +6nGjrNLOq6zgp1lE6nD5fw== +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_pack1x1_mult18.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_pack1x1_mult18.sv new file mode 100644 index 0000000..cd5843f --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_pack1x1_mult18.sv @@ -0,0 +1,89 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +QeKhJIxwkoJkSJ9fI84YeXbXUn35Flb5lgqDAKB+eFDP84jFpLFGj/WvqdihEBfbBJnZSH2WVMMG +X07heUUsS5c6jDVrhfHWwOqIP8w48RkaQ0OEy/7ZD262jsCzyJVJKMUXrjGF6x6xvN9173I9FYm8 +lnpNrX3nt1ke/1bhSRL0/uehrtrjCZaBitXz2iLDW8U86ki/gKneYNRTteF6yx7HZ0f3g5DHlkVJ +E8G3ajzAWO31lc/Cn41RXAdBBDcaI/+AkLMqojZaXVqCnUi8EiBvSEUiGFX9Vg82s+MQdW+YRBc4 +ZHscTTFmHiRq9GL4L8vqFmwh+ubUDoeH4uiflA== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 3856) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_pack1x1_mult9.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_pack1x1_mult9.sv new file mode 100644 index 0000000..849de96 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_pack1x1_mult9.sv @@ -0,0 +1,99 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +1uAC8TRJlcIY9WQYVXosQggV0CXAJtfDAgf84ahKW3TCCDfJeNIk18TBtZ45vt+rknVVEr6l46um +mVFzzPmU+0AUAe9gJdzvu2HVOuBjERPlhTPbzQDh2d+097Ue98qUc2hIQa8P/SCl4hKg+vn4zgIL +lkaRcIbBPEXI4BshlhgzlzjUdbFSsYr686MlZLiOZ4drF1wZSRXEN869qbQa/C0iF9rcLLivkGN0 +fqgOX0ryR7RarzKUrJNxw3cO0LwQL6yN8jK+f1r568sdc6S9eNlbkM6NrZco9ba6HMe8zAP/MWgK +u0eROCkaPx/5eUH/oiNAmYjMe4gmOjJZKv0T3w== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 4416) +`pragma protect data_block +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 +XAyCGnPrgHAIUtCX0uDhYJLyPv9ZyVDGcdfn +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_pack1x1_mult9_adder_tree.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_pack1x1_mult9_adder_tree.sv new file mode 100644 index 0000000..e378818 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_pack1x1_mult9_adder_tree.sv @@ -0,0 +1,97 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +hzteNvrYxRd2P9TcI3RHb/avP6T3Z0D2JuXn7iOkqfQkKGJhF5xdnl6KPUylRgwj0p8h46LOvpKV +1OMir/k4mDceTeFSGhV+s6zGnSDjalsKtlToaWaek5o3hqI+aV3+/ZBh3azBvm+eK4okkY0P+I65 +3DsWMk94jSHyZuB6592CABE/+dm9/bwAwfe6GOJmdK5tVLdITGSOvSHMoW4mIRymOLKojCVoEWF6 +IG95end7BIOWOVC4URdHHrZiRg4eUL6RQXURlZcOrwxk/dWtK99b2pdGdFDn9NBFi7yH2JhLQs9b +XkbBIQeBuWHa80OciGpVzZyTlzaeIAQnFDgrvg== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 4304) +`pragma protect data_block +imCSmpwiiIHCRAO8hNPaE4HM12n5phZ9dnvQYkMaKnDsWBPocjAIyxd4wWMhzsXvPzSAImdep9/8 +KYwVmo8jFvftg4DjI36XHJetsxBfEX6jCSJ2ZFqjoSq9w4gjIMW1FwL0DoxDoR5QJwjTtVSrRyM9 +YoG/0xGhBXJ8DauhxQdb4O+qUsQs5GTVPhqJOdTuebTvX4ZocG2Xyv6Yh+42rHtbdhd6qey5DA/R +VWUGfKTlKqoLJ7h2DHKT4WJtY6pauEdU3fJgZokjmxfzcFjmu4Vd9kSxAvuorUPHqo2/AciXs4zG +4UjZUQ/htfuXGJJMRuixAUINto0QMqR4xp5xrkQZqyb73TqZnEl7qS8IZK31j1VXV0F5Z5neWWOm +opWGtLkQhwDFpZSTBMQfjP16u6Ajl9C1rYVn3K2WwyLXC9OSYh0r+L8I3AET8Akze/NlP0So4hL/ +8NIHYCkHLCDtQTrNR+br/cTDECDAqPIvGmnqBazEnwyIHZkEztqjcOmG6tQSGbGX2AhriK0Unvf6 +eMV9REP9QQf1bLBhMTbFqT7z4nlm92d5HMnweMIPbesD9+J9eKkwEaMk0DpatX1WJueRxzvZXGcc +4jgaDfVKK8+Wnk0s9KOYhWToZe3boMussyVA2H/76oKRdcHckG3rocYKrSSxlEaMlTP2gtdRxTcY +7QBGCJ5xgjL9nmuuiaeLXVpw0tjMch026t1D/zs0DRHa1yhFFIyMmzmqWSAWbimH2kqq3FuOyNrZ +OAbVzfw1GqsZjuBNalywKEqJwDy2G+KGz4oTU6BuMPOgyJfRAvuy5nZPckRRQQXMep7MDziiG/fD +Tay/StkGxPrVTypDK9NRUhMdNxcKYgNGuswsFCvsuYPCevEAtgNIsczXCI0W/B5VUxX/B//7Xfv4 +iv4GDuImFr0vDW0S9swwzaCcAZZBp1kymOq2yL19wLc1oEgN5bkJcA3huWyDciN03Qrx0DrQxre0 +dw0NNDNUxCoo7MHQTuE3Cm97mBJ4yJ+drLo+OzxcTGyn3rubSJsAi6DxuPIQQyWutkswhcpptg8/ +oOgy8Ode65dG25DZwnrTZ032iuLw6UzfGAoWQYrLog8PcxQiTZFi/RCwx3J31Kt2eLKllxXcpsMI +cC/RKr53+sOqHIqwMo7FffQw2cO2Mk0AgyephhemZkXfP5t5grjCKSux0Hju4YyiXlaEtLjufgwx +ioU/6bWfnAAdYWHgZapCLDxxIetZueQLZikip8HBNyS9dFPZHdwjwX1mAoEZ3y79BNRdBJ7rFchD +j2QcdVE6ANZXf7ArMKz7qDEFo6+LEXAUKgBeMim67i1qPV/R1KzvsDREWl4CmVVlrjIU/eGaIsDM +0x24FMR5pel+n5fft/s8/GvJXRBaRCFMZCdbOxN0wNjkXb0qXaNWCI2TwYZvBUq3Tf1PjxLlw2kq +O5QwFAEJINk2ELZ6Y+0dp3PCn619lU2PCMCgQ4odZfd8yzqZiY5py6CAtMhCzILSwSROunQFEPZi +LwQ9B7HcRL980po3SjYnS68/sMs2744QdS/of0aK3T1bPjAfzr0HNyLpKEFD3Bl96FAu26xNHTpy +FAJIuBigEyQsjXzlacj2MJ8HiyOdj3jNgvtICx/ZU2TiRxBlSsLI+PnnDA0HEFhDSSM/Gdx8y48l +8MZFCTVy5Q7v7OXiuRnXwaEjHGuBkIM8C5apAX0Qg2rs9UuMKFzXuk9h/AykC5HWTX7AksGcZsMb +ISlDAmnokmAi/RanvTZ/s56OaOudvYZRt+9qB7veHD6Wnx4t2Ah1/fuQTHzE20x+m7VXNluKzTNc +I8YrPEq51D+Y/FGX0TcGE51tUxM+6gsi5r4aLSvE08YeSu9uuiJby7ywMTYnu1aUDnm/cuEouSbL +L8JghscVQHh46ODgh8IMvvOvkqc5TkWsYqV69GFyggPIVJc1SNavGeYNpAVAIFkV9FKcZ+8jPuCG +DPGMBMlrxX9E+ML3ll3u7JPxJcC5JwRxLWa/JSCi9bBD4iMovW6eGouS1veWMWGAKeugncpFWiAx +p5Km7ocCC/7ZxnbPTBtSMugpdMZtBuUJOfx5O8RbOop6+CigDdpoQL1j5wUBzPQbBH5D7Tiqi8Kc +gEv8SwbYnyo81KGe0z+q2yvWHkIMjmfom/L1go5P8/D9xaT4/WuRAa1OT7soasQFf3X+4BQpP/9r +V/g/duRb4zZySLIfclTRdjWCprFQtJ3jFxGVkn2ytqg95JykodGO4crYL0JtRkeJvNJSoeQxLUS7 +Dns/HKay/QdlCCn2cUQwSCNTxLHWpubXztlfmyLalOdwcfVzITiweUccO3JGKL8ZsutWTQgxkyoy +i+bCc3ZyH+lUsLKdpddi5GDyxP+mE+AlTE7uw2yk10Yuj2JOQ4B0FGGjiO6DkW5cV7RQ2wz03w4R +czugFnYG5dWDXedaY/naSi769e+vkwIlKD4YNI3Xv4MEypHUdJwp2omvgPDEJnU66zdRqjlShrKS +30qHB9kWPAgtr0u+ioO0G9V6n5ika4aD/HC460A03fn2NchZdSUE5W+mMF22/PvbQ+vhOuDNGnTa +6B+mJDxxLunh9XBOwooHFBrrOzBuum/TqqXfgAAIWgT3Xn3idIPau40r4K69d9Z0ylipxsarNzUF +6LRZJyl5zn+NwSPSbf17lEIKK8KTfESNITKYiVcFg6b+I8OR4Pxo9oOVBm4TNY71+Z9U5INGZEge +KHpf86FgxYpsONC5KhB3LIsDcv1eUcyeu4PwVsDGmOZ8vHxh3pxNO/jdFZezKLTrMtnNfXR8OGoH +1T9gRWmypUqTHW/7ZY5URED9g2c0fCOc0c8PeL343Z91D2QKIDQZe8XMwRZDE3eHMjaSBBJWnxna +c61JO3Es3eMwI4INL7AOvThrqVDHGpMzTTbO0xEWmq9nZ0dr8QQsXd8npQjiDdnoxoQc5WhMghSk +mHSA/HZGuHXbkGN4CkIEuYR8ChmjKbTlmLXTf2zwR6pxM7wfi3ENs9CLCt0qyfch/NnrPPC98XD0 +EDyXDvRA7Frx3VeD6whjANZoaCF//7ju9PeHapa2mmRzI+dyrijvXFKmHO22kiueUNCJXXfbo1EI +Wg6N0exfpr6FXmyaAhOLbLkUghSStydKzsuJyJmb7aNnjODJoAOJyBrSVLLOJcSpSSRH8r0xICMO +KToy69cywIDwIKzRRMRtaKwxTrzqANB1+OiC9uyOucXqV0fraatdcEYeR0qM2AvUzUdgx55vmd/h +5K2r7b5ZQwDhSiBdfLeHLf/sTbcdxTlzbwN1uDIOfXBXJm3PLJJftv2lOUErxsCet5GDde2nQguQ +j8AvtwqgyWtmF848eQgcDvlEuDCB8bydTop78xQuAt8ZjFAlxiMqMNJtrud3Sc0N2TjKQUXxhQNv +S1B92AVVRTkKDbgDx+Cfsm27AfrzX8zvl9Z2WEChhQ1vT6qR5/WAMSSLaCGuSd0uFYU4a6OQH5eS +XdsaNwxVeNcOeYVicM/k+AzQJL2SCHGJytP9n74aFB3Ijvu4/mXzfH8z4DFG54Vip1vwTPUBKrrQ +aFq/8Is5GsqMmFfqmr9/rB1qgwxgEtbnyfdz7rgCfF3ZiJIkKO9cdMTGh75jxxGRI/Ka13TYbTVp +O0Vl2VNg/DE9wIkG6L8goLw/IAlESVwnHdkTJDO7si8BLRPmetIRSYC0du60AknjSxJt1nTPaOj+ +z9J2L+WLJ8KNGyy17UKGx7DxzaafP3BClqxOngHHJXcosboI3PU0TdzQpbf5+numJN9vcQC3Vq8k +GhrMW68TvxD04ENh1pWFV/tGnvIIp1jwzogV744xqEZ8W428U3pSjWlDaysHo/iRhY+xqYl6h5rH +Shxji3WB2af88bLel/0dgDZaJjfT9lxo8yyUaXDH9briUmetGapqdK9G7vHYTrFmeXk3VzWY1eoQ +o4VREajT9V+uCEcpGGGE/DunlUp+JOe8ziurplthBdwC1C+ufOEG1Su+C85xmLyy1xwoljQJTvuy +CdrsKSojG9PdWQxjUcOrod44mwmJSICtFnn72wzVBNy78MnoE4Y6YaTj0kMoTM5UW09nnPleu0hF +xOeGXhT1rThi5QVk5vPJuKAZYVvAKRva33yBcbbomO+bD28lfOrdb67wZs8r+otGGt/K9VfdeXS1 +YaKwCwkdkq9FprpArj6j0cWLwGC0NX7CIoBtorQUP/giGci4m1rqK+ZselPNIdqmUAJ+qaa+g0UA +JoGdAliCubcgtChejdxCFAKpJeEOsV+ORCon8kTbTQByznXgZee7gQ30DvGW/lFLvhglh8D8ySed +wYLODxXZYkuYPGAEelruX2jDDqA1axx2EyrKCYUK3+YDmW5cr0FyP1hTYGk4MCA/mcCkLbr8Zp+9 +B1qsU6bZ6WRLkMz0qY+nI4844pUvFccMfDCxYsSp+NpvvcaRYe6Gl2AfiVpOXGGsqXGR3vDr27SS +hVmhtYS9Mbrz5WoWesYc7AkPp72simNr6D5YX9b7XHwVgrTlYX+lt171/kluHTG3va5+ShI9uwhn +1SijvNHwnncCLLwr3qOveklO26a/pFn9I8iaM0RIs3GyhvY/jVaXnoPxXmJHuuzru8kTx9nAeyWP +h1GcVm7+s97nW2eYu0pxvbEtnndtsOQn8o4lqCFFMmsGU41jyxo2CdgkYs8ZzDeNPWuEeDsvmWn9 +TXXQm1JDpWjjSe/iT6cGYbyrIjtreQbUg3/aYhePf5ST2aBn4sF+Up2OjK+8h7urdXgD4z4RcQu0 +TKXR2iJfHJvMo73LaXY3c88gYcuKIvpbPUD33OrtofDxseXt/F/DUkQGRM46O6GIcTVtSI+09X4n +fX+WYHKD/5abjCfuR5qFqOY8WQxOk8IEpDItvv8G019pTgF8SDElXs88kHr1fnCzwgkACLVEjjWS +Qb68w/0mStJ8QJR0US2tr+k6qhFk4pezzvN0MqmTHelqHZOFel8arNydT1f+UbiCz/3Fv/XR86ng +323A89rg9U9hJg/keJpObKEvkS7k7NQ2US3hlKIayOnDARVvmGsmJTyGQewdPNZHF/jLAv17Uq8F +HDJsvNLqyBoptxRtb/ZvdbuxIcdXTHXQNQJRDQk6LIJbQ2kNY7jOcYdpGasmjS5658iGvUHEqohE +iwpm6q30/f7Fa54Ee5UFfLHZR9r4CUwzTDMtVay4+EXopFMacRYCaYlyv0qWunvWWCdzafmLAgeX +A6WG3QEDgLndWa45SlXunEv+Hp85Xb+2PtZtS/ELup69OmHEf3I68dIDwWJVSQ45d5+to8lgVN/h +peesTh4XTsU8i0weeeblaGppaTJZc1xhy3l2+u3FLRApDZH6i4UKRhIfrPYsJZ8R9ytAzZgGDYMx +FRdqv7ZDOMo5Dxp40BUOzLuU2+TXM3hz4EHF4SvolX4MFB3D7ufUtr2VW4kK3dBsriHRhODlkflY +htPpxwYmQDdW+fgNBM/BAPdC1GhQ6ZVEaCDKfFaA9Cy9yMuwChSiQDLTlgzkMIB+griuUSKhZ5Dw +1jaoNX4sIiqoMf2u2LfKDDnSLMviY/T2hmSTjTEtmiSWfMD0yi3NqH6p/ydc7EOrsY4lcit+bjt5 +qpe6rYzwHputqQxJWy1kASGxrAay4oqcSLQZQyjrL8Di9zAluYKqWtkC22ByBFiORo+u8GRaIDwl +9g3fL7yUH8E375CUxgg9zI0Q/gWDIDS+5aYyXjM= +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_pack1x1_mult9_chain_add.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_pack1x1_mult9_chain_add.sv new file mode 100644 index 0000000..df3458e --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_pack1x1_mult9_chain_add.sv @@ -0,0 +1,116 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +hJZIoAwPHJ9nEHnfRB/hqcCgHKr3fT3pTzNO+LiBenLqvkac5Ld3+3kA9ZH2CMMOolrShFYcASiW +ra47JPiKw0HktPMuZWZvPTxdS4nCQZcMNWbyU9K8bbpqu2sNtsqbDoIMFmmoSkY7Hp7Ogh4vqrK6 +xFd8empoTKJpOxDtjWR5W7DnhcG90LfPujGccecZZwz3JcQHYQotx35oPzfVp23UXD1O7hfDlF8Y +h8L+zdWD27huRy5qtEkr9Bdt0D3wOP+DkKkauOUaGyneBmd/HW1aZQx5oa2q+XVQpa3vRcUzAutI +nwCEFegO4H5DRiOQNdRLNQ8Onf7ayy2uOvDTJw== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 5376) +`pragma protect data_block +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 +5La9nf6s2yFCjVxSQGTsQYO3 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_pack1x1_mult_fp16.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_pack1x1_mult_fp16.sv new file mode 100644 index 0000000..4b61b6a --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_pack1x1_mult_fp16.sv @@ -0,0 +1,49 @@ +// Copyright 2020-2023 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +`undefineall +`resetall +`default_nettype none + +// -------------------------------------------------------------------------- // +// This module instantiates a PE using Agilex's DSPs in FP16 mode +// The adder portion of the PE is partially handled by the hardened adder +// trees in the DSPs (4:1) and either by the hardened chain adders in the DSPs +// or by an external soft logic adder tree. The reason the latter is used is +// the regquirement to delay the incoming data when using the hard chain addders +// -------------------------------------------------------------------------- // + +module dla_dot_dsp_pack1x1_mult_fp16 import dla_common_pkg::*, dla_aux_depthwise_pkg::*; #( + vector_dot_arch_t arch, + int DOT_OUTPUT_WIDTH, + aux_depthwise_arch_params_t ARCH +) ( + input wire clk, + input wire [arch.DOT_SIZE-1:0][arch.FEATURE_WIDTH-1:0] i_feature, + input wire [arch.DOT_SIZE-1:0][arch.FILTER_WIDTH-1:0] i_filter, + input wire [arch.BIAS_WIDTH-1:0] i_bias, + output wire signed [DOT_OUTPUT_WIDTH-1:0] o_dot_result +); + + dla_dot_dsp_pack1x1_mult_fp16_chain_add #( + .arch(arch), + .DOT_OUTPUT_WIDTH(DOT_OUTPUT_WIDTH), + .ARCH(ARCH) + ) u_dla_dot_dsp_pack1x1_mult_fp16_chain_add ( + .clk(clk), + .i_feature(i_feature), + .i_filter(i_filter), + .i_bias(i_bias), + .o_dot_result(o_dot_result) + ); +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_pack1x1_mult_fp16_adder_tree.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_pack1x1_mult_fp16_adder_tree.sv new file mode 100644 index 0000000..f6bcdaa --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_pack1x1_mult_fp16_adder_tree.sv @@ -0,0 +1,96 @@ +// Copyright 2020-2023 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +`undefineall +`resetall +`default_nettype none +// -------------------------------------------------------------------------- // +// This module uses the Agilex DSPs in FP16 mode with an ALM adder tree to +// add the results together +// -------------------------------------------------------------------------- // + +module dla_dot_dsp_pack1x1_mult_fp16_adder_tree import dla_common_pkg::*, dla_aux_depthwise_pkg::*; #( + vector_dot_arch_t arch, + int DOT_OUTPUT_WIDTH +) ( + input wire clk, + input wire [arch.DOT_SIZE-1:0][arch.FEATURE_WIDTH-1:0] i_feature, + input wire [arch.DOT_SIZE-1:0][arch.FILTER_WIDTH-1:0] i_filter, + output wire signed [DOT_OUTPUT_WIDTH-1:0] o_dot_result +); + + localparam int NUM_DSP_MULTS = 2; + localparam int CHAIN_WIDTH = 32; + + localparam int NUM_DSP = arch.DOT_SIZE/NUM_DSP_MULTS; + + + initial begin + if (arch.DOT_SIZE % NUM_DSP_MULTS != 0) begin + $fatal(1, "DSP dot products require DOT_SIZE to be a multiple of 2"); + end + + if (arch.FEATURE_WIDTH > 16 || arch.FILTER_WIDTH > 16) begin + $fatal(1, "This module doesn't support inputs wider than 16 bits"); + end + end + + localparam MULT_WIDTH = 32; + logic [DOT_OUTPUT_WIDTH-1:0] dsp_results [NUM_DSP]; + + // First stage is FP16 mode DSPs, we only use the hardened multipliers and adder trees + for (genvar dsp_idx = 0; dsp_idx < NUM_DSP; dsp_idx++) begin : GEN_DSP + localparam DSP_X_WIDTH = arch.FEATURE_WIDTH; + localparam DSP_Y_WIDTH = arch.FILTER_WIDTH; + + logic [DSP_X_WIDTH-1:0] dsp_x [NUM_DSP_MULTS]; + logic [DSP_Y_WIDTH-1:0] dsp_y [NUM_DSP_MULTS]; + + for (genvar dsp_mult_idx = 0; dsp_mult_idx < NUM_DSP_MULTS; dsp_mult_idx++) begin : GEN_DSP_MULT + localparam DOT_VALUE_IDX = dsp_idx*NUM_DSP_MULTS + dsp_mult_idx; + assign dsp_x[dsp_mult_idx] = i_feature[DOT_VALUE_IDX]; + assign dsp_y[dsp_mult_idx] = i_filter[DOT_VALUE_IDX]; + end + + dla_dsp_fp16_mult_sum #( + .DEVICE(arch.DEVICE), + .B1_WIDTH(DSP_X_WIDTH), + .B2_WIDTH(DSP_Y_WIDTH), + .T1_WIDTH(DSP_X_WIDTH), + .T2_WIDTH(DSP_Y_WIDTH), + .USE_CHAINADDER("false"), + .USE_FP32_ADDER("false"), + .USE_ACCUMULATE("false"), + .RESULTA_WIDTH(MULT_WIDTH) + ) dsp ( + .clk(clk), + .i_b1(dsp_x[0]), + .i_b2(dsp_y[0]), + .i_t1(dsp_x[1]), + .i_t2(dsp_y[1]), + .o_result(dsp_results[dsp_idx]) + ); + end // block: GEN_DSP + + // CHECKME: we can't use this adder tree because the addition needs to be in FP32 + // Second stage is ALM Adder tree + dla_s10_adder_tree #( + .SIZE(MULT_WIDTH), + .NUM(NUM_DSP) + ) u_dla_s10_adder_tree ( + .clk(clk), + .i_din(dsp_results), + .o_dout(o_dot_result) + ); + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_pack1x1_mult_fp16_chain_add.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_pack1x1_mult_fp16_chain_add.sv new file mode 100644 index 0000000..8a6648c --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_pack1x1_mult_fp16_chain_add.sv @@ -0,0 +1,146 @@ +// Copyright 2020-2023 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +`undefineall +`resetall +`default_nettype none +// -------------------------------------------------------------------------- // +// This module uses a chain adder hardened in the DSPs, meaning the inputs +// must be delayed in order to line up the chainout from a DSP to the inputs +// of the chain adder in the DSP below. This module assumes the delays are +// handled externally (before the data reached this block) +// -------------------------------------------------------------------------- // + +module dla_dot_dsp_pack1x1_mult_fp16_chain_add import dla_common_pkg::*, dla_aux_depthwise_pkg::*; #( + vector_dot_arch_t arch, + int DOT_OUTPUT_WIDTH, + aux_depthwise_arch_params_t ARCH, + localparam vector_dot_arch_info_t arch_info = get_arch_info(arch) + // CHECKME: should we have the filter dimensions as HW or dot size +) ( + input wire clk, + input wire [arch.DOT_SIZE-1:0][arch.FEATURE_WIDTH-1:0] i_feature, + input wire [arch.DOT_SIZE-1:0][arch.FILTER_WIDTH-1:0] i_filter, + input wire [arch.BIAS_WIDTH-1:0] i_bias, + output wire signed [DOT_OUTPUT_WIDTH-1:0] o_dot_result +); + + localparam int NUM_DSP_MULTS = 2; + localparam int CHAIN_WIDTH = 32; + localparam int CHAIN_LEN = arch_info.DSP_CHAIN_LEN; + + localparam int NUM_DSP = arch.DOT_SIZE/NUM_DSP_MULTS; + localparam MAX_WINDOW_HEIGHT = ARCH.AUX_SPECIAL_PARAMS.MAX_WINDOW_HEIGHT; + localparam MAX_WINDOW_WIDTH = ARCH.AUX_SPECIAL_PARAMS.MAX_WINDOW_WIDTH ; + localparam ELEMENT_BITS = ARCH.AUX_DATA_PACK_PARAMS.ELEMENT_BITS; + localparam VECTOR_SIZE = ARCH.AUX_DATA_PACK_PARAMS.VECTOR_SIZE; + + initial begin + if (arch.DOT_SIZE % NUM_DSP_MULTS != 0) begin + $fatal(1, "DSP dot products require DOT_SIZE to be a multiple of 2"); + end + + if (NUM_DSP < CHAIN_LEN) begin + $fatal(1, "Cannot have chain length smaller than the number of DSPs"); + end + + if (arch.FEATURE_WIDTH > 16 || arch.FILTER_WIDTH > 16) begin + $fatal(1, "This module doesn't support inputs wider than 16 bits"); + end + end + + logic [CHAIN_WIDTH-1:0] dsp_chain [NUM_DSP+1]; + + localparam MULT_WIDTH = 32; + logic [DOT_OUTPUT_WIDTH-1:0] dsp_results [NUM_DSP]; + logic [DOT_OUTPUT_WIDTH-1:0] dsp_results_per_chain[NUM_DSP/CHAIN_LEN]; + + for (genvar dsp_idx = 0; dsp_idx < NUM_DSP; dsp_idx++) begin : GEN_DSP + localparam DSP_X_WIDTH = arch.FEATURE_WIDTH; + localparam DSP_Y_WIDTH = arch.FILTER_WIDTH; + localparam string USE_CHAIN_ADDER = dsp_idx % CHAIN_LEN== 0 ? "false" : "true"; + + logic [DSP_X_WIDTH-1:0] dsp_x [NUM_DSP_MULTS]; + logic [DSP_Y_WIDTH-1:0] dsp_y [NUM_DSP_MULTS]; + + for (genvar dsp_mult_idx = 0; dsp_mult_idx < NUM_DSP_MULTS; dsp_mult_idx++) begin : GEN_DSP_MULT + localparam DOT_VALUE_IDX = dsp_idx*NUM_DSP_MULTS + dsp_mult_idx; + assign dsp_x[dsp_mult_idx] = i_feature[DOT_VALUE_IDX]; + assign dsp_y[dsp_mult_idx] = i_filter[DOT_VALUE_IDX]; + end + if (dsp_idx == 0) begin + dla_dsp_fp16_mult_sum #( + .DEVICE(arch.DEVICE), + .B1_WIDTH(DSP_X_WIDTH), + .B2_WIDTH(DSP_Y_WIDTH), + .T1_WIDTH(DSP_X_WIDTH), + .T2_WIDTH(DSP_Y_WIDTH), + .USE_CHAINADDER("false"), + .USE_FP32_ADDER("true"), + .USE_ACCUMULATE("false"), + .RESULTA_WIDTH(MULT_WIDTH) + ) dsp ( + .clk(clk), + .i_b1(dsp_x[0]), + .i_b2(dsp_y[0]), + .i_t1(dsp_x[1]), + .i_t2(dsp_y[1]), + .i_fp32_adder(i_bias), + .o_chainout(dsp_chain[dsp_idx+1]), + .o_result(dsp_results[dsp_idx]) + ); + end else begin + dla_dsp_fp16_mult_sum #( + .DEVICE(arch.DEVICE), + .B1_WIDTH(DSP_X_WIDTH), + .B2_WIDTH(DSP_Y_WIDTH), + .T1_WIDTH(DSP_X_WIDTH), + .T2_WIDTH(DSP_Y_WIDTH), + .USE_CHAINADDER(USE_CHAIN_ADDER), + .USE_FP32_ADDER("false"), + .USE_ACCUMULATE("false"), + .RESULTA_WIDTH(MULT_WIDTH) + ) dsp ( + .clk(clk), + .i_b1(dsp_x[0]), + .i_b2(dsp_y[0]), + .i_t1(dsp_x[1]), + .i_t2(dsp_y[1]), + .i_chainin(dsp_chain[dsp_idx]), + .o_chainout(dsp_chain[dsp_idx+1]), + .o_result(dsp_results[dsp_idx]) + ); + end + end // block: GEN_DSP + + for (genvar dsp_chain_idx = 0; dsp_chain_idx < NUM_DSP/CHAIN_LEN; dsp_chain_idx++) begin : DSP_CHAIN_OUTPUT_WIRE + localparam DSP_IDX = dsp_chain_idx*CHAIN_LEN + CHAIN_LEN - 1; // last of the group + assign dsp_results_per_chain[dsp_chain_idx] = dsp_results[DSP_IDX]; + end + + // Second stage is ALM Adder tree + // NUM_RESULTS should be not be < 1 with check above but synthesis will error out + // CHECKME: we can't use this adder tree because the addition needs to be in FP32 + // so we will just keep this for reference until we have an FP32 adder tree + // and for our case, we wouldn't probably need to have an adder tree for the chain case + localparam NUM_RESULTS = NUM_DSP/CHAIN_LEN < 1? 1 : NUM_DSP/CHAIN_LEN; + dla_s10_adder_tree #( + .SIZE(MULT_WIDTH), + .NUM(NUM_RESULTS) + ) u_dla_s10_adder_tree ( + .clk(clk), + .i_din(dsp_results_per_chain), + .o_dout(o_dot_result) + ); + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_pack2x1_mult7.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_pack2x1_mult7.sv new file mode 100644 index 0000000..c1ba683 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_pack2x1_mult7.sv @@ -0,0 +1,100 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +PwM+hw4z9QQZmQR0sLjhDLbHz+H0NITv1p39SzbFb24kzMtv58L6xk4VR7v3GZQ1UUhVfzeJHVvr +0TMJYHipOzaKTeo9gDGLvsaJaCRqbdnGn+/KVtGoGuos6m25naHUHjdIvFej3pHG8q36E05DMI1M +KIKwO+UYK0WZVWOpf/x/cQwqGLFbp1IooOe88arw6L4qbxhdiXnRJTMbY6yYslI6NQe6F3s+vw8v +L6wrZ+4IgkDTAdii4pNWr6IUnZQuwkIQ5vtQnutCW5m/mkiOgcovpkrJZY+YfZoSHVZQwyD1jquZ +MRVQ1X7/M+cJJzisygfc+Y8P1BI9vlxXB2vEkg== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 4480) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_pack2x2_mult4.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_pack2x2_mult4.sv new file mode 100644 index 0000000..5b014e4 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_pack2x2_mult4.sv @@ -0,0 +1,113 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +ZU1ZAHjYAGHbALHtVBUS9unkrvca537ahe1rAOaZxqhyfG4arvID2ygUvSs4cMLS/mkgElK67HFc +bQxBC2/HF8TMWosyOm6kKzMzTmBYNLzdz9poEeiBo9WSbg67YCIn8+nJv4tU8pHd44efAcwTYz3M +yxrc2dHo0dwTdPd/pw8KZJaXKwnoyqUqKRMzF7oHVgwpt3gu/sag6AxKA2gvyroum+xi74aZsjRS +LPczi0et1GU/KD1+iWhPo9zvGICQH3tHbxJiT0Vz75h9QA6ZVJrPy1UmDKzt5+/0G/nkgWFZ5cwL +2yJ3HiPtqEiEOd/2z1S1WQnveXkxM2AdXvB2xA== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 5216) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_pack2x2_mult5.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_pack2x2_mult5.sv new file mode 100644 index 0000000..386d032 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_pack2x2_mult5.sv @@ -0,0 +1,127 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +mYjfGXkwqy9o1/yjrXvP7g9I0XwP0IflycZtcDAKEDdKScFR4/+XNBRjEZvURqohzQ1IZmbwmMGT +Cf29FoLT4ILRTsa6IR6LHWwlQKIWEZNwJUfI48HIBfrEAwGWH9almMbSZp2m69FotYm4qLfupKFw +8v93ZvJSabaD346kmvFf+fqCbZ1lJQbjKIeUZTl6CYHtWIo//kcVyx5mfk07A1Akf8/DUPMuZUn0 +PEsKZFjx4gvzw2Pv68+cY6Cxyvg4yyoHk5FCIdCSCmc2e6JqKGPBrpUwhgDyyUIBsupX5Ui0lENk +SHWCPSm7DeS+qjB2AmCXue/zm3iYYHA+ahHJSQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 6000) +`pragma protect data_block +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 +F3u/Rlk49g3gHVnkeo03 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_pack2x2_mult5x4.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_pack2x2_mult5x4.sv new file mode 100644 index 0000000..dc173cd --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_pack2x2_mult5x4.sv @@ -0,0 +1,110 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +htot3V1y2MpqXKj5cpzQoX/7rmpFT6UsflHiSoTUk0jKuWm4mQach+by9YgIsqImbWnwq0GIYXJR +xUwRwpurYN4pDQt5PLay68rwQcbRbU+pRSByWI6GjiViz9LXpD6wWPDsV+q5GCnFxpAaXSPin63P +/FxHVi44yGqxJRSAqIkBMDDbsFArimSwXsTZe6WHNe+tDpPlFSJMhMQcW3Or8+eeeCU3ZVKfLPvr +mjE/z0/w2TvkuY82YAsBqOVViWTJvRpwJPi48+aF5XdeUZI9XH3LcMtubW8aNj8cSlqJ7A5eXJ8G +m81Vmx8cjj4AstaoTBq6Wl9XN4hxF2lE2NjzLw== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 5024) +`pragma protect data_block +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 +H0OwFkNv6KU= +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_pack2x2_mult6x4.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_pack2x2_mult6x4.sv new file mode 100644 index 0000000..91c2c2b --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_pack2x2_mult6x4.sv @@ -0,0 +1,122 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +pLQj8IXT7st+G27Y78MMA/SxquqzmOh8bQJoGFF1NLuK08Tslszfyfj47egwM2flA+WN7cMUCGvZ +dMliff7uFaZ3LnnylOkbmnIUFmdgXoWEj9kPG3x+ppRT8EHuWrM3A+XMM3sZ+5zQf+pfepyZfEYg +0uyv2OzpfLRUz0jY5E+5u+I4O9xWg/74f7vsKm22o6hV0KeM1dzrBB4DdyTDyzH2gKNF05n6iJ/b +kESg0hQ171ExWWZPU5ug6D+LEVF1bZ9VbTgGpAD6fbH8jXwuxVDloXhqgnkIJpk9byrdU+U4c78i +xqIIiccMBsKfvcnw+3FYMWOVbUJ4jTCbqv1nfA== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 5712) +`pragma protect data_block +PF5bRHjT9sflaBWHPOfWd33r/Hhtim1kYGRvPhIGDYVq13Fa/PndAI9z36Ts47jXWlm8yls7B3ff +qkwr0OGg4JF9chWcZXwLUMWfgpWHtwLUbIXC5YZolWhdgiiz+6HyaqdSCyKq3z5POamdOqYBMxod +T1RbctvCNxub+YcHl5zGTxXoUKMz7CSf6KIvMt2UGFRz3q4nKrUz/gC+Ur35C3bwmBUus4LQd/kM +ufgVjh1mekhgYXesHMNAjn0J/G8irRjN7G17k5/OdU8HZv73JZ1LbdjCzqlYvt1ZvyaO5HPUndHp +aDf0xl/743ywYPXM7d7r9cQDVyfYPC5+uqNyWB/Fm/4x8QVxiF3dk/LcoMtIU04fEht9wZJg4XnJ +ONrJXSEhDt3PoRLSRCmFc3TEWZ8GfO0OU/bi4gY9rlPwyQp6HoK7KfMDwEdeN0QNPss1e0+5iLbq +WwS6AU/T4ULXWTINOlJLhEgatePKCcMU83L0aD9Ij1jMbXM2izuoP4o5nSJOdqBxLPIocTFJvd0j ++ZFiIV7+cQmvXX7ZN41vuzeNGDCv9d2e46rRFkgLxUf6DNIfAHL0iPEvrTvuT5TjqEzON4BTXpgv +7JDGUJ4F1gfKJwoRrvzAfdy2VvKcqYwxXIce5rzxkKcqEM5GB6Px6ELjohODA9KeUiQdog1HeUpd +NCJJPyuZYCoiOrGmM/LpX9GZf5s4FTDl3pn2mn2ba9DjBWFu9eO565Wf4U8yfSZTMOZY7UKlZvyz +/gSoWKdi5CJJoqNf9YXh7WwW2EXXAa59Gkmf4qf1wC39RqVKPGg9OzxuXsWQPItGLTikUghzmYPs +lYG+LOLFr0OPqPb3YlXA4HWIRFTeRmq1hzcESaA+SfdHJek0lbYC51zeiP4/1zDG4FnD+EArNIIi +n0Foksvv+etlKbmPgC1W6BSzQonmCUZKiygt0atMQcaHNHRUJnScb3H7mKO/c/cAes8Yh8ulaRtK +KXdgWC+r8wh9sMHtnhneWmi35BbDDW+vzM+26B4jLiLEAO5TE4QkHSuzHNaprtq8g5X5Xhd9DgQ8 +FXpq6wst8OYxejKcNPmaYM7Zgf0/2rmX+tKTwwRxmhTmzvHWo9Ln8Yo+/mMMMlw8VHmtUoPguZ1r ++D4oi4YXw2JGh9KtB5MIVxQOLhi2IkjxGlQCrQ8SWyjMVyMCgfwUzeP8mmcwKvb0E2umugtvwlQR +T38lnLW4NSaLXbGE63qt6Gl2Ag1qcWgnqh4tR3+cjYp1uO8NLtO+ZxJiyrvAstKo6La7VPvzKQbo +2235oX71odfsjLSDnf0GTFIDRZo2jhqiKCY/d+XRmcqqC0jrkWs3/IUyntNuDmdno61yKsurPPRP +YSIt1cFnLFWVjP40cbj+1snc1cMjBi3uUgjThWOjxcuBHTbwo+MyZYv6ySYn1pAWC0i9HqBr8XhD +jplbGN0DGgaM8Emi0Lsz7Bkh5Q3k6bubgKy7C/c68tipx5ZLwcegCx4j4aRPaSaPvjAHnjWgZnGg +jMYm/UNg/jirKZeOHjMiW2LHGqwCKOVc5hw8GDoyh4tVKX0VKlPj3Tca3TXNYl1yYztNuob0QWPI +tWJA3DPW37acYw5+efKKEp4duJVJIRNjLWkZmk9mJ1jUXJxUR/uJ85jroqw6WiLWX7tuo/Q/SOmi +RpW05VcD30ud3dnVKxJIbT8QSrgvEab0hjcb0SOeKqbJSMEqaAYHwKcQXC6XgtlNxtgoG4oGa1RI +EvRhYrKxVTiLHWlSV7+XhIwm6a3tmXHtvs25IoGkYlWwEuu6vUy+M6cUQW4rhgFQaYpWkP9YZMWV +EgHrwOTtRutqUPZ7MJUMbyGniuVUMfEjoWqCPxNHMpc79EbprBAcukAHg4FtbXnIzC89BcyY56Wx +fJjSY4taUAytaXWdQE5dKX1/wsSLQZELhYgLfQlF1VFhcwV7AdF1gt5aS245vKwChp2sPiZPo+ot ++iiytBPELmDewl3ERZtd2ZQPRoDCgSmmUta3UudK1T4l/tAW3ZpiglM69HaWbRr8XVkgdNae460r +vqBWXG0F+L/uathWFc2IcM8TTn2FBCUvLGlH+avF9ZFw0qcQCqLDv/gfQouR6jVJhP8DpC9ezqhc +vAnFzpJ1kLpZsq9h6tClbz4ih0S2ErxNSmUGxFajzI3M+DgklLTbpOmNABxGlk/MekoLGs42wCxQ +NKA/Z/ZruPNyJ+3JadPBqBEICvIXIcjMSPQAovRQCLVK0ex8m4QSOSOdaqRzH6pt1HJOqG3rGwpR +sxhQTzRtZgd+uOVuRrNRymfl7UA6eDgn+qjuakJuuo2Pk4CmRcV4nBqrlsUnnj1rkNQK3LJ6KXek +8VoVewP9R/nZlI9FoRCxFQ7n4pWv1375WK94FeKAZ/xfjKw2Ek5h2RVKVY8jQGF3U7Y3MbebtK// +q5TYhXK8c8NePuoNVJ3L6TtZglnJ3t8HOFKCjG6o2x4hApacATASl5JifThEVdakPhuf3IXwoiXp +JFwrwmhPTrLQPSEi0jxm/94CrcLdIwVFKitx7a26cTa+sfEF1/hWFt18lSHkeyseFMWa409D6WnA +M5Rrz7z4xmsf5YD098BCaLyItYXA0CwvNnyszKQ4dxGhQh65NBgOEwq8u0//z7iu7yUZFJm5oGdc +WvCDW4TMRYwKObRHVh/srk+y9J06u8d1D3U5N61zGP67xikrVeILlkYBoMQxr4wZEoOL543FLY7a +MwPMVKi6tq6bNmMreTEajeVgPByF8/zEs2pa30vCrGdik3O8eJ3cZsk0lKapHzVRqnTVq8GHtKPE +OvJBJrKKgQuluNsqKPFpkXl1BbmtoGURBZo+ffmPE5llcEtEGGyiU8VHet9MDF8hMIBnaCWI+0FY +kb1yJuZA531wy4UH7CKaGFVC63p6qLaP01Nflq1oqSVV4vanWV3UfhIDChBABpW0kod5Z/bTzj4j +rUw8eVKfarR9e3LPUWgf7LFgs0HxxqYC0zURXJB8QEUueFNZdYEWkjNsiVR0y1LW+z0vDLnT+0Mi +p0BLqwxNXCJJbBTYJ3oFqpKgzdwXY+yW4b7B80PoY1hyfCUOiBXOun8kIgAS+RIk9GfPxoNFvFsB +KmCG7pooBIQSH+WIkUuJWGbLGs+5vhx2E9lDPPAs/u01ncH2ZMWFk9RrUlqF22g4EXvLeGQyqB9P +PHZ1p2cgsCqav2q1KD5Cv8GoCCDnFJBFUUT3XxAB6hmPdF0E66tY9vMU11asNkdXNxJanlSKqDSn +1dlhDXeEmtEib+tL16hBFbBD3FQ0Wy775Us1IV4+GPc3A1xQFs/pbhIiKoTKtcBy3+kSveRAIWQZ +n0eNQdBgZMOro4a+NnOZBf2iop8coOFcLSCH4u5M6EuC8eXTC3vnUsB2zNe5XK84QgyLMrXxcKC8 +Cz8vr+rmi90CqsWn9QjEHWKyCibMf2Nf/S0yHbsGxBUKrBUkFA8AvyvdMm3zZ2BH094h3AlJP0iH +XU6xT9KtObw249+88GnfxtXCUmfq3vTn9LeILt4glfq/ND8IWIch1FN/XX0TX27U2KmCNqzLkPO1 +yKZMrEOObL0glQC/WTxcZ+rXHuKoDRGjCZvSXAnG2yQm2HlJR5/IdjSh7fiZanvmhjpF6s0NqtSg +Yxm3MDMhCr4djH2uOcf53UsI4WsatzgKYGYVfF6/E+muRZEQqHRNa6wz9wOgEUlJAa0Z4LgGvCj5 +4nYTiPFgBAEhLu4KAErooAgRgJxvCph72ZR3wrqyw9cg5nBtcr+dklxCCkRS9rnEnmjDuu9Ol84R +QdJVbOq7ce+aROSIW4+g/QUwMDwwhhmsfAtXzY0klL/8yNPKu9JYXOBIt/ZPL5B9FV71lTGtWgyr +Lyb+tsJ2/E4XNPbDDFsLKR/3irrffsc2psfVhSdDv1APK7pXjRUYX2dGa9NDcz34pW2XBRPUxMeN +KmxrOHMXo/NZTwTVEup2QZckfW6UgeFutd0hIRON0CAwlSRGgUEadu0WpUfbLBjc67lBIYT6lO5A +2mM+rJFYZ/etpwmeED4Dn9O8e3KR297DuRYX1x2xunLVI97gjWza5kOdfpD1FxqbXOH0Br5RvRAi +UyXbPkWipQZTdpnJVc1xOKmnQ0MyvOxxRJpnohVeRISOwGNIiyE9npQexb1oSjqtcZnrkVD1iZF2 +7XzePGL62p0lBMOh/2pCNVdXjDuanwpVpYF0mikhKAlg2iBl+26nz1lQJrh+pdfRhArAxhj/Hvdh +ZO+hMqOnHIw6Hp3xoyFeJ5ibIBs0KZFSbHj9bVi5NYVL+h9W89DsljeAKKLgzf291l8CqUinGmYE +TpvZJE7WZJ7YOqLLZyoKqtkwwnCktz+LzDbU426sjR6GFUcMPLaKHW6KnSKLb5eLYpDzg7xsA7yX ++kqsMeRRsvwyTxiL9Y25YSMtznG9NKLr8hCJhNcNL3TJ9V9QtYcDGfoLVH/VneXIm1Z+FkgTL8xE +Kt/Pjx4IZ33s6QWQD4p8vqSmgZV9p7msuPy5G65hCNMuj7XQCoUs+rl7VezXTjnoFthiu4nM5q3S +8WYIMBdMCpx19BOTwhaFyvpl8H2IWLC9+pRZNTJAzDVMbVes9QrIxKHyu0z6u37iy/CMQq1C/fd4 +GygtktFWsCbU6AhpDVNEPRZMt1F9Uwtq6/oiX836Y6+kF6VJfCBUMEtwlvBYR7XM7gnEQG2K+W4n +jN4NycNe8CVM26nfi55pOiuWcPHUZk3faUUNupFeCxbI5ANqcyZc6gxP37hvoYIOqhLNKdTG60tM +semujNZDPBHUL3YdZn3yYZJsFp4qat/ei2alYbjWfaePCIU738Ao5ndSYIQO3L6HxGvY/n7DFfmQ +xVB2Zio2DXY2MTzdrP0fwKm99Bmr/ll//oqlmxUmEpRI68TvavPxoUobVz7+7CFPJik7sVampRvI +vwVAHZi/x5j+nGDbcLHYx464O2wUAyACwKIYPp4qVb8X2bUaxHpqN6knT5RXFaylU2qVMyfY/wC9 +3ZNzWzTeJVeFZZcbRR/q+diefR80L1IQ3menG4C/WcumUYa7vNj5alJI4oB+tglLfP0wZefkO83F +btDC63POQ9XealtpVk+teTUey3TLdhVs8Fgomtbjy3kDwImlLq594dvlSbasFofNFL6tkaebD8+M +yHjYt6wvC2rIEsxM1iRnjXHG0wOKsoustmTmwR3D9KKLVzwGTQnJpAPLgCIhKtZfxRXATESq/G16 +gLivkZeA5jP3nRhBLxff67EDVVvK9afj0q8XowCHDQ2zXatZbHcfHHzS1/s6V9fO9E9IkuTA3BWg +O0V5t+i4HzyoUaWM30Oxu1ltu+zGw/B0JDomer62xonkWjkNIbjqGbF2cnK0o2LShm5dwFgAphsT +1YubRIVnJXa7EgnJKHd8Apg6TOquUna9H5mNPhozk/0OfIiN7PP1hE1IdHiUKQlBrzB5inepI8YH +SV4QI4ZZMpbimL6gDbGbSMqG+7Y37X5o/Mi+koE9og2tADN3dpnwfpu4iUiNy7aLSt513CfocbNv +vowejVTLgQYyjmoe7DaTyNg8jnM0W8UKUOA3pi4XmQogUr2n8kWZ/flvCGEXYk8eZTXXcD/Zc2bu +pUbAP52Y2gKzKOg4TllNX8y7yQqjp5VgmMiGI6weiEV3cL6qPIRb4uYSSUZXV+zQ4f0DpM+9FiEw +VsFKH61EczM/e6J5sMi79dtc2wfU2BEPpMaRMDD8C/a7NJJtKd4LjRSDfTbUy7SevL2zLMfczNVg +ydyVNMlpdUYTZuyoX34XkVliAei9cO9bnHJaIwPXUFN8BnjUq5gVNZvD/D+UyIJj2xuZqTCeW/bK +GF+918A/gQ7Z1LsK7xxcOnQSGPOCi66wEMvh5cxZJnSw3+WNk/VXlqOgOr0nDNLsI0ZqwGDy73Hq +bQiRM2CiVecOJ5LYwPC/T3JI19BfM3JZOoIjUsWteOUScevKRiOOKQcJCnU3m3KFTmk9VSTiBPVQ +/5nBDGET5Nxi4oy3NvKasG857KExAQljoRtjbrTETNoTezBXjdKWnm69Fl+yScUr+6DlDuiJK4vE +4F3z+dnA54wH330QsOPES8Ay6gL7aazxAESY/y05SvjmwgPiaUsle36OqvaJCvlK4ePmwysVIE6/ +NUOsYFWEQQJ4K2j0cjxRDAEi+M+/Ckrb1Py0IwQgwS8f/LfUI+xZ8doJjbsgRc3YHkDrkX9GsIvl +a0o1dW8j/+GwoC7vdptGpoX/Y+GJGc8lWdKIxvnBDNkT26de3wuLbbPG2oLvt1B3IxoQb950fLDE +csD7VH95T+p6WtdTUccpXZAzH/g+wKFQwlby9cut3J0Ha3OMnW04pc7kyZfzk6gZOC6MA3Z12+4I +0wSP5Utuyg71wN02dfBDQj5fElxGEA5NQSKVagYUYArEvEa9CKKkHon6K6bLTAsVwalO+gXK22W8 +FbimED7yC3WUstme3Sm04tqD+dkknyxZ2/gPgupA5BjzegLZlLQlt70+eKRRXY770TxMNgoRBp5x +Re95JbJgITSEVA9zKO8WUT0IeVNIaOp+MuOyeISK1b+WbLb5zH4d1ftLWcYO6U2U6TWUaS5v2DLU +5DG9vZr+jAmQ58gqQtwzspGqMvzdonsjXConDl+4Ys1wssjfem/BhENrmAioxag14AuG0CmfwThD +ibYwHJSQIAle/Qz9g86nLcORfESVnMTYBuNBQAHROJaYlpPgZNFhABcEXi01eGw5tkbOrtU0y14+ +F5nsLK9yCD8zyXnUAuENp4oDBLHLoccyeJobsIVRr07IF6BWEiQoz60mpnEBWZJltjeOPR/sJ27z +/lOwOO5GZYIwViPoy6Gy7iw+bFJOOwktoC5nteCLcXLeJtVJyXQLDEx132NFu6DZmvsp0V83H2RQ +qTAdCsMqrWCTWxt52TBnefAdar4lDPUIoYQ3wDjBGJcTIpKoUclzAya5bx4nP/BnISBVTIL0nCT4 +kCxpnw0etQ/RMeMBZGSS1k7cABs4ZECnDySlWFRBYSuI/yjLR6cCeJftnad2640KEICdTjd3HKhm +Tyso6E+22NQOm/nvxuoT3oUgOy+qM06kk3D/v3jSiFhHjwnfI3wXsbjJ8doEIVRUe0EH7MrtE8L3 +09KptyROEqo4i6fQ+s1Dveraqs3V7VtVs4cLTVzojvLBm52Zc9GYvcGdX9a1x6m/IjvHB87SKDE1 +ue/9HUS53TPVUKAiOW5qMO89OEr0aqH+FIU9v9e9TJGrE1StdbiCYBMekEwaJZxHWgamddFtW/nf +NK4vBXkqu1sFG9pNJKfV/kjTCBm0Uypn68Zf9E18l/ehV3JVeeKaL0kuFCrlmDMzYM9ZT4cn2uq6 +96WdCnbNHTtSwxLmrLXZA7jNGvd8sQlsY7Hvb79SlKQ91xOwgJNetH2H4KzzuJNmPRwi07yeH8YN +IZyB5ghFVAhSljg3soSHKxkxZCPTmSa+I7VXWutxk/q/4PjxcjjPbLl47HyjjB+TlnzMNEZsq408 +ALmGF55yEaJVCmWRiGokjOLQNAbB5FIyrWdTlJ/IhBeKYZulH3h3gkRXJEyqbjWfRUvarIrki2ds +HNWSUAOSY+UxpIHq +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_pack2x2_mult7.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_pack2x2_mult7.sv new file mode 100644 index 0000000..0f44de7 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_pack2x2_mult7.sv @@ -0,0 +1,158 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +fAR6XbWmqcXKODfZrg+vergz4FNWBqtjqMTuk+V2Z/xDBjgsBeVlNTY+seHBcZv8fyKzn5Wiwn9u +Gii1MsqEfdJWozEDaSQ9F9Wca2sqU1dOt21RJlSRL16Jf5Pk0oFR8MdqRV5CksXs8DY6BQNBxtLe +T+sHLLbWvG18+ZMjbQyP9EwmZC7O6xJe6NHeLkDi7t8wZxD3dCKPMrqOXAHESnbFWhCiHCYVmOOk +EKHPafM4pcKkSKBmZeTaWsz7pEzPUgKID4iILoZZPnruyUvF255WxMRtURZRXAAIVU1ljlMUeBge +fLD4LUrFgVvzHI9pRSPV9QYXozzhFP9IvMAoDg== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 7808) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_tensor1x2_mult10_hidden_sideload.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_tensor1x2_mult10_hidden_sideload.sv new file mode 100644 index 0000000..51dd38d --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_dsp_tensor1x2_mult10_hidden_sideload.sv @@ -0,0 +1,222 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +gm/siRq7qBA6CToYt5kZSWASl9EtjB7lW2NGPm6D4AJic5LLAfWveXIC2npIJmnjnmrjOtGzO/WU +mKxCZ7JR+SUBu4RjAgwLPTbmhlNOpjyi01tKdgfvSfl1Cpm7EE/KTWMaVsysaqijEp6kHgdB5T7T +bT5EMYS2Rqm/7oJ8pRs5uS1IMBBEyFxmwpLN1VAVIdWX7zoPorgBWGLhm+i6Wy3jG/dSsbIMQVyj +7fzZTx2n3wZ01I20EuhQ5JKDWZUG2/YQ2kifSROvX9eNrrMeqhbyoJu18Sg8D9qY0xc8+31Ys5E/ +BjAYwgLNu/8ajucuGNGfoELpaiQj+FgOxr5HAQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 11440) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_sm_alm_s10.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_sm_alm_s10.sv new file mode 100644 index 0000000..af3f424 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dot_sm_alm_s10.sv @@ -0,0 +1,74 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +yVtaQN2rNhu4L+qjndajq2hehjIB6lnBBLHS9hjwxGd1cAqPnoiQXWb2uBY9z9pvQoQYnygrh1Py +5HISoAWrpJSWTWm52nnJIsUX5E6OzDs/h7r9YmuF/WGQdYNxd5od0aX9V4WODIttDL2+G9aGUa9N +1bBwc/TqpE9djam3m8zeUjJCS7dckC9pyEX6JAfiGdLgNkhlA35h2SJOixQYZb3FjyJxSN3r9+ia +q0Y0n/eYkFmQ7/zFGw+LJQiBeg1vNM7ru7iaex0Xf+zWBCEGXTctkLit/GZ77LcQ8h+G0KTcH+3n +JVBYkRpaJyRLq4GW3hXD2V40dbxOUXsuHJgUPA== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 2976) +`pragma protect data_block +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 +gjSoY2qgc+0uF2IN +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dsp_fp16_mult_sum.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dsp_fp16_mult_sum.sv new file mode 100644 index 0000000..94dbe4e --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dsp_fp16_mult_sum.sv @@ -0,0 +1,230 @@ +// Copyright 2015-2022 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +`undefineall +`resetall +`default_nettype none +`include "dla_acl_parameter_assert.svh" + +// --- dla_dsp_fp16_mult_sum --- +// This module provides a wrapper with a clean interface for a DSP in +// fp16_sumof2mult mode. This mode provides the ability to perform two FP16 +// multiplications and add their results. The module contains +// For now, this mode is only supported in Agilex 7 Devices +// with the current config, o_result comes out after 5 clock cycles +// there are three modes: "fp16_sumof2mult", "fp16_sumof2mult_add_fp32", "fp16_sumof2mult_acc" +// 1) Sum of Two FP16 Multiplication Mode Signals where we do straightforward +// two FP16 multiplicatins and the FP32 result is produced (no extra adder) +// Note: if you use usechainin, you can use the chainin and chainout signals +// 2) Sum of Two FP16 Multiplication with FP32 Addition Mode Signals, where we do #1 +// plus we have an extra fp32_adder signal and chainin and chainout signals +// where only one of these signals can be used depending on the use_chainin parameter +// 3) accumulation mode, where you need to provide an accumulate signal to get +// result(t) = result(t-1) + a*b + c*d, and chainin and fp32_adder_a are ignored + + + + +module dla_dsp_fp16_mult_sum import dla_common_pkg::*; #( + string USE_CHAINADDER = "false", + string USE_FP32_ADDER = "false", + string USE_ACCUMULATE = "false", + + int B1_WIDTH = 16, + int B2_WIDTH = 16, + int T1_WIDTH = 16, + int T2_WIDTH = 16, + + int CHAIN_WIDTH = 32, + int RESULTA_WIDTH = 32, + device_family_t DEVICE +)( + input wire clk, + input wire [B1_WIDTH-1:0] i_b1, + input wire [B2_WIDTH-1:0] i_b2, + input wire [T1_WIDTH-1:0] i_t1, + input wire [T2_WIDTH-1:0] i_t2, + + input wire [31:0] i_fp32_adder, // Input data bus to the FP32 adder. + input wire i_accumulate, // only used in fp16_sumof2mult_acc mode (not used for now) + input wire [CHAIN_WIDTH-1:0] i_chainin, + output logic [CHAIN_WIDTH-1:0] o_chainout, + output logic [RESULTA_WIDTH-1:0] o_result +); + + + if (B1_WIDTH > 16) $fatal(1, " B1_WIDTH must be <= 16"); + if (B2_WIDTH > 16) $fatal(1, " B2_WIDTH must be <= 16"); + if (T1_WIDTH > 16) $fatal(1, " T1_WIDTH must be <= 16"); + if (T2_WIDTH > 16) $fatal(1, " T2_WIDTH must be <= 16"); + + if (USE_CHAINADDER == "true" && USE_FP32_ADDER == "true" || + USE_FP32_ADDER == "true" && USE_ACCUMULATE == "true" || + USE_CHAINADDER == "true" && USE_ACCUMULATE == "true") + $fatal(1, " Only one of USE_CHAINADDER, USE_FP32_ADDER or USE_ACCUMULATE can be set to true"); + +// CHECKME: looks like the AGX 5 should have the same modes, need to check +if (DEVICE == DEVICE_AGX7 || DEVICE == DEVICE_AGX5) begin : GEN_TENNM + // See port list in /nfs/site/disks/swbld_archive_3/acdskit/21.4/67/linux64/quartus/eda/sim_lib/tennm_atoms.sv + // in this mode, we assume input registers are not used, output resiters and all pipeline registers are used + // https://www.intel.com/content/www/us/en/docs/programmable/683037/21-2/floating-point-arithmetic-52200.html + if (USE_CHAINADDER == "true") begin : GEN_DSP_CHAIN + tennm_fp_mac #( + .operation_mode("fp16_sumof2mult_add_fp32"), + .fp16_mode("extended"), + .fp16_adder_subtract("false"), + .fp16_mult_input_clken("1"), + .fp16_input_width(16), + .adder_pl_clken("1"), + .fp32_adder_a_clken("NO_REG"), + .fp32_adder_b_clken("NO_REG"), + .fp32_mult_a_clken("NO_REG"), + .fp32_mult_b_clken("NO_REG"), + .accumulate_clken("NO_REG"), + .accum_pipeline_clken("NO_REG"), + .fp32_adder_a_chainin_pl_clken("1"), + .mult_pipeline_clken("1"), + .accum_2nd_pipeline_clken("NO_REG"), + .fp32_adder_a_chainin_2nd_pl_clken("1"), + .mult_2nd_pipeline_clken("1"), + .accum_adder_clken("NO_REG"), + .adder_input_clken("1"), + .output_clken("1"), + .clear_type("NONE"), + .use_chainin("true"), + .fp32_adder_subtract("false") + ) fp16_dsp_chain ( + .clk (clk), + .ena ({1'b1,1'b1,1'b1}), + .fp32_chainin (i_chainin), + .fp16_mult_bot_a (i_b1), + .fp16_mult_bot_b (i_b2), + .fp16_mult_top_a (i_t1), + .fp16_mult_top_b (i_t2), + .fp32_chainout(o_chainout), + .fp32_result (o_result)); + end else if (USE_FP32_ADDER == "true") begin : GEN_DSP_FP32_ADDER + tennm_fp_mac #( + .operation_mode("fp16_sumof2mult_add_fp32"), + .fp16_mode("extended"), + .fp16_adder_subtract("false"), + .fp16_mult_input_clken("1"), + .fp16_input_width(16), + .adder_pl_clken("1"), + .fp32_adder_a_clken("1"), + .fp32_adder_b_clken("NO_REG"), + .fp32_mult_a_clken("NO_REG"), + .fp32_mult_b_clken("NO_REG"), + .accumulate_clken("NO_REG"), + .accum_pipeline_clken("NO_REG"), + .fp32_adder_a_chainin_pl_clken("1"), + .mult_pipeline_clken("1"), + .accum_2nd_pipeline_clken("NO_REG"), + .fp32_adder_a_chainin_2nd_pl_clken("1"), + .mult_2nd_pipeline_clken("1"), + .accum_adder_clken("NO_REG"), + .adder_input_clken("1"), + .output_clken("1"), + .clear_type("NONE"), + .use_chainin("false"), + .fp32_adder_subtract("false") + ) fp16_dsp_adder ( + .clk (clk), + .ena ({1'b1,1'b1,1'b1}), + .fp32_adder_a (i_fp32_adder), + .fp16_mult_bot_a (i_b1), + .fp16_mult_bot_b (i_b2), + .fp16_mult_top_a (i_t1), + .fp16_mult_top_b (i_t2), + .fp32_chainout(o_chainout), + .fp32_result (o_result)); + end else if (USE_ACCUMULATE == "true") begin : GEN_DSP_FP32_ADDER + tennm_fp_mac #( + .operation_mode("fp16_sumof2mult_acc"), + .fp16_mode("extended"), + .fp16_adder_subtract("false"), + .fp16_mult_input_clken("1"), + .fp16_input_width(16), + .adder_pl_clken("1"), + .fp32_adder_a_clken("NO_REG"), + .fp32_adder_b_clken("NO_REG"), + .fp32_mult_a_clken("NO_REG"), + .fp32_mult_b_clken("NO_REG"), + .accumulate_clken("NO_REG"), + .accum_pipeline_clken("NO_REG"), + .fp32_adder_a_chainin_pl_clken("NO_REG"), + .mult_pipeline_clken("1"), + .accum_2nd_pipeline_clken("NO_REG"), + .fp32_adder_a_chainin_2nd_pl_clken("NO_REG"), + .mult_2nd_pipeline_clken("1"), + .accum_adder_clken("NO_REG"), + .adder_input_clken("1"), + .output_clken("1"), + .clear_type("NONE"), + .use_chainin("false"), + .fp32_adder_subtract("false") + ) fp16_dsp_accumulator ( + .clk (clk), + .ena ({1'b1,1'b1,1'b1}), + .fp32_adder_a (i_fp32_adder), + .fp16_mult_bot_a (i_b1), + .fp16_mult_bot_b (i_b2), + .fp16_mult_top_a (i_t1), + .fp16_mult_top_b (i_t2), + .accumulate (i_accumulate), + .fp32_chainout(o_chainout), + .fp32_result (o_result)); + end else begin : GEN_DSP_ + tennm_fp_mac #( + .operation_mode("fp16_sumof2mult"), + .fp16_mode("extended"), + .fp16_adder_subtract("false"), + .fp16_mult_input_clken("1"), + .fp16_input_width(16), + .adder_pl_clken("1"), + .fp32_adder_a_clken("NO_REG"), + .fp32_adder_b_clken("NO_REG"), + .fp32_mult_a_clken("NO_REG"), + .fp32_mult_b_clken("NO_REG"), + .accumulate_clken("NO_REG"), + .accum_pipeline_clken("NO_REG"), + .fp32_adder_a_chainin_pl_clken("NO_REG"), + .mult_pipeline_clken("1"), + .accum_2nd_pipeline_clken("NO_REG"), + .fp32_adder_a_chainin_2nd_pl_clken("NO_REG"), + .mult_2nd_pipeline_clken("1"), + .accum_adder_clken("NO_REG"), + .adder_input_clken("1"), + .output_clken("1"), + .clear_type("NONE"), + .fp32_adder_subtract("false") + ) fp16_dsp_mult ( + .clk (clk), + .ena ({1'b1,1'b1,1'b1}), + .fp16_mult_bot_a (i_b1), + .fp16_mult_bot_b (i_b2), + .fp16_mult_top_a (i_t1), + .fp16_mult_top_b (i_t2), + .fp32_chainout(o_chainout), + .fp32_result (o_result)); + end + +end // block: GEN_AGX7 +else if (DEVICE == DEVICE_A10 || DEVICE == DEVICE_C10 || DEVICE == DEVICE_S10) begin : GEN_NON_AGX7 + $fatal(1, "sum of two FP16 DSP mode is only supported on Agilex 7 and Agilex 5 families"); +end +else begin + $fatal(1, "Unknown device family"); +end + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dsp_fp32_add_sub.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dsp_fp32_add_sub.sv new file mode 100644 index 0000000..b36b744 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dsp_fp32_add_sub.sv @@ -0,0 +1,86 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +rCWvYR9Q0KlWMfJjpIItiTBAmn2KYBh5MH3K0aOZcmpsfQaHJSXgeqR0DZK9dyOG8ozkbkxBZqzP +TAKmltvM/JN4F6dNSBR6iAlBgi/Ir2rh+DPi7RtIhd9FOY5VvvWus+OJWMCefNOGtJ+Vc+jBF72g +06xtoseOOcZBSK5erjk4LfOLMBD5T76Ds1b7IXwFjjSEw4j+qWQkLnVWCPLdYmTBQZiixaxT7obT +LU6utkvFvIChEaREB2pL00id/B+NgjrIlSYASVMTXntZvCcranVlGWOBj6NbBqbjDZpVSzV0KdDe +pumurTmyiNx933AjetFJeVOb/N4GFgBnOqW3yg== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 3664) +`pragma protect data_block +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 +FN+KYLfxQal3gg1XbLkLDQ== +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dsp_fp32_mult_acc.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dsp_fp32_mult_acc.sv new file mode 100644 index 0000000..1741473 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dsp_fp32_mult_acc.sv @@ -0,0 +1,116 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +laqG4eQepx69amoRQ6BEmbUwqjlg3p+rlJkS1UNodLzNRX6OWmd7kOmm2/MNre20clQLFj6za0H/ +rtA7/7Un9VcYlvczVDkArvodtEzBzRbmuK9OhqFjxuAzjtAzdv5tvCWc0oHSEUQV6WuR+805h3/3 +aIGU2R1mFMDObwZ7zHI5JoWv3nWTN36MQboZ8Utz5Z5V4Ue0D1s3If3dGpp9i7jVPixrwIsmgrV4 +ybIMivDKh5PM+7jV8zUB7CTaL5DHY6PdulQmiTxCJXozIkTSP+dvoFt3TO+3YN+8y8wsYP7mlHJr +Ase/UyosR7CzLFjRs83+IfMfFLy6uE1lt17Bdw== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 5360) +`pragma protect data_block +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 +fBU= +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dsp_fp32_mult_add.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dsp_fp32_mult_add.sv new file mode 100644 index 0000000..2cb6531 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dsp_fp32_mult_add.sv @@ -0,0 +1,122 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +ZbrKL1GtHlAAxFgS0zMNe9544QHnBwMV/9pzs4Y1RqTtDKx5C0njrMfcpgq4pgH5L+oZSxaMdXW+ +NuI17ob7NhE2PkkqebQQf2x8zBJ+cQ+/pofh/+Xmpy2PeOzgYaOfz/XpGPg2aGBDxqxV7IDjz4je +DCvwRXcFd9ugW0iI4SyQANI8PLffo9ta5bXD/3CH8UxexjIks+EXF5jFbmvKojK+uzc9ynMKvHYr +/OMGW2s0jeCoZ+MKbo+MxOD1tbbofh1GROblaAbySsCfWkEVlgHRyIenIN5fXDP5Ac1gdO1gkl2r +19sMSnorlKFBbRgzghkGaG6oMJK5XtxNCShTKw== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 5744) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dsp_m18x18_full.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dsp_m18x18_full.sv new file mode 100644 index 0000000..8a96de8 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dsp_m18x18_full.sv @@ -0,0 +1,223 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +lNIz+eOveOBliYkF91EwdRIGCQnxYyz0KE1oEP0NGlqv+A3xBxW16bzUVMVzS+J4JmeQRdW4Om0w +9Yni65X0PbcQ/5ysINJer1VfRcKLYvE1YlvlM/ZNG3uLW/lPVSheKTc+ubhXyH0ecpu5lNZL6gAA +8z34LKVC1vmpu9lrhqUEFBYvWfqLI+0TuGpiXgDWruB2e2A7TIPPU9YWg5ZCYxxkei4eXWGcXzX7 +eP7tpRnpJENiH05/2VF2Fy/1AoAoFm6ln7j9nMiJN6Xmr206mrdQ0InfjRanWRCoINdiH/1MHAJD +f5sjBOL8ctr3N//u3MQ8XEqIBmzr0St/tau4KA== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 11472) +`pragma protect data_block +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 +4X1/XR6o5fdQA0Neihk5 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dsp_m9x9_sumof4.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dsp_m9x9_sumof4.sv new file mode 100644 index 0000000..346d7ec --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dsp_m9x9_sumof4.sv @@ -0,0 +1,182 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +E1OSuYzZiu5QNJnz42WWpgbyKHBoQ2IPfihmHoo7yG9BZaH44jnMcnNHwz7FZ/ZpEGA/Qrn7pxWo +qT6+qiBj253wwKGnSHPJmSd2ZU+0wSrMur+SFGfKYQa9RBJa4+MWDwyJxxauMN+cMWYCIo7XSwY6 +2ACvYV0PfmOKYJKEL1ox9O2vlYmD2ttJKWD/h4Cq0lURCOSoDnYgrn62136FIogxOgcv7DRt4M6N +i523vkfniimt2yh+8UDDoX0XyDArMs8MtM+kGqy0MOVWun8RoVOmp/C7wsdb92HvM7IDPB1j2V+F +WiEMGQDpHknESqgp/HisIcEhhbmuDPZSSWaY8Q== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 9168) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dsp_prime_tensor_accumulation.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dsp_prime_tensor_accumulation.sv new file mode 100644 index 0000000..32dfb2f --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dsp_prime_tensor_accumulation.sv @@ -0,0 +1,77 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +Ck1cbMF+//4PQVr3VUZiNRW9qo4nageaMu7y3VktHiGK/5a+mzrQNtdt3sk+hwU3HIlMt87NEKRf +a7lkPGpVZ6mqwstRpiXHA84Vv8sT1JpT2BdZKCl7Cbv+3CRQ3gIJG683bGEr+9HV3biwEW3BnAer +G89KQtYFOuFKA/RRaMbSjMABV+vW1KOCsIvEK/TxpC7kxjchp3QZjhifhkXd77m0wV7gVK0pjnos +JxvC8j972k70FRWRyOh/IDjUoYuw0qcb6YkOoL0C1Vrwf1+FHBd7dJ9dVU61y8UP/UT3YtqXgvjp +YlG3hlueTWI05zjsZSGpoHmNyNVdKyESufNbFw== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 3184) +`pragma protect data_block +JZlLCzD2oEETXS/Bp+tuYTnKBelnAstvyXM7xTD8t4y+kcKbLcixpwebxrrweJlqPzDSw4nreMzx +veGiJoLRV63OwQmVUCIiUrb6iXHe6KebsDLtIcwg3zSMUhMwX+FGl7IMwxCSEAYj0ZYnPWP5ao3n +jpJ51sl46ugiwFUn2c/Ec0j+XP8MEpQryrwctkf6hf+z9LU/X0258rJLH2Cj8EIC0SA7B1QVCK5d +rdB7FVDXtBchF/4Pnn5OKDdxwf4vtrEUCP4fQJNkjBoliJcJPDW+nOQI6/oUXRU53ySpXpH2w7k1 +x5c+qYiXyt4yK+JuUBj4vwouCMxNzqTaIrc88vquIpREjfkQB+QeJLJ5UZx3V2AbuutTC+ZK7if7 +qd3c3uQblOGaFHp3I5pXahq7As0DKe4DH+F3Eh9xvs6L7U31F4W4yhhGqmvORHiVYh1ZnghjF0+Y +yr19OP49jX9zyzPYSQ/YKukz5tWZc/MLnKJMBA2gKFH+ipERaqgO9IXU6nUtJmAqxidyR9feSSn1 +5F+SKqpDB4rmYQbYuC6t72TUZcGTlzwCpHzYVZwWyHDolpt8NE+omckl4XOGUzSsi0X93xfrgrKQ +HEW5zR87qsFYcIUUXRkvHD1qWkWu+NItgpE5hg6GGAuSEQIFvpNHI9TrS1TpcZecsG8sMHGiJE39 +WH7lasfZyQ4hEYIy/gftA1oAQ9Ol+Rl/GXdopqg4/F2D0fEive03SxOGisu9U+IMSrvUFukpIA95 +/9dHzhuM4E70hUK1jEY4tGrHuncuzE+cyEClY1pPGMmW2F8ZLpeTNZQxXcVycjSCIS6ZEitxJ3qf +Z/joYQIu7Q4GInof6JNG4N9EpYNOjpYXuRu5altilo91HAEbLWlaKDsZkcBKtZtqvKKPYDycJW3H +WNoCt1QsX5eKNu9y6xYUNw72pD8/dk604dryoY+uk0VRAzbYSwgWyHhWu1fJv34FFgweIYhESsgx +k8n6tifKmTP/AIBzAb1KS+NDQrJdml9oJxluR/RX3Gbfe5xqXWAa6G50nKRcqw+A+tltMRKAmcJH +NweFdPZJRRI9HbwkjgEudDwEwSfWAeTp79oZpN3wYS1+B0Bq3yaFR2eTW9aZLUkv+LdvlNPXG1qW +jB6G2XnWSvUzaLmEfKkc/Kdjs4c4ZsRnlVu0zdJVnVhir6r1oRrN7vpaQdp348blJoCY5xezBaZt +IIcmYdCxkL4CplnRwj3kq4N8MQupcO2DVS2asWJRgV4Dtdm6ZJQ1/kfeQUcUvFY5hn/qNiqQ1Np4 +ZJdMJTFlYC6WMmTVXLRt0SjxoVSnaIFSABq4h5OQvP2PlwAF1Ld/YkqFaNi/6affqwd0qmt3lUiE +7XI2dV+vfCFVikuQWKWo5TfRY+oLcx1Ic0Ju61cjDLpADRcz0r4uThDvH8/hi8LwMpwqY6gE4fZS +vBS2+RHzrIa+F3KBKd0zLRY5VoE/CKSlq8cdCRZ9nRynJ61lSc6h95WIGmO4ahXXaIuOya4yr1Zl +unxqmAuOFCu8Q47J4vzrDFWWiPeevl1gS+NOrSHrFXUD7e+5qnAsCLzwJeGs8BrPLHzZAbT3jFiv +3Y5w4M6qV68U2ySi07eZUIbVu53B0cnJ2Iuqjp3Ga0w5xJ/R7bnABH0WobFVcTw/QcNJzrcEZmPQ +OdvvCAPaAD0Ul5FUEe/KGZiujqbouOpTWtVGo+JaX4wMB9nCpInbvhJd+3yEayefDDY7gY9HeewB +kiXTJ4o+cuZhtSjaz+HQuigF6tf3eM1HRlqWF82N87ylr7e3RVDONqp/0zb5DlLtz8Yni8qzazg8 +6DCg5poUqvhpZhHWys60Eydporqks8r/ym/D5qxLRjndswNxx1IYQN+zCujxYWY+kjbcQ3WSA/ww +1QGwfqZQFu03D+/JZtpdezbYyE8n57nb1vK9hnjRZj9Ewi9p72iHcdzFhY2bH/lAJAlIqZoiGI7R +BE6HlrBM6914wJJxSqcYuzF/4TWm8WvaFB34f+3GsUWCsbbCzMxwocU6M9pNilMVQ8wdkwRUOCzn +zw+CRLO6GfFLrFLyF2aOe/tUWaNVfygDW6Wgzj+gjkNxyUbobTV5DQvPu5ulhTBvAdhAYXSGVL40 +ba52CDOxCZA6m+10GMHj8fRiBpuS5p2Ke5IxKgG7z17vunwnjnnU4Rqpt22/Qce7Y8ha9VJO196D +MLZuqA9h7HCClJT1e8rz7DxS47PAzsaUbIYz4HkPDtBSCcKf5MeqM6XqGkQgoRtbz2LNOVEfe61P +Fr28prHFdiKZug22JdZlglJ3Zt4k9IVLjHaUqiME1t5af44QgVXTgkS1Oo2Gkpu/iqnYSIXd5qGS +kTpr59hhGHRdReiHZWeJYBeTKRFjBlzL/DbGqfJf647gH0lYhzxO1+f5HmRSdHfsTPFMrrn5hgLe ++GEKRI+N2JRi7dt/JY7fWjtBYtJTpjHuJKvCHCo7xUW9S05PPckK1deaVwNZeqgnl2OGNMoFv5OC +poBOvDHsA+r9BfSblHQ9FqrJVjeHuS9LYBkLnMt/okGnO7KMtY1OgMtv5zq+yoxxC79P9sridoWa +n/k0FyvOUL2AsIZDsgdOEh2sbciBa9TxF8zlYCCGmQjYAiFdwUs1DVGECSFsP69MTCa2NnWolsni +qWJaqSVFY0a4cTGTw2W6tcp0Sn3Jb0J6jOUuKLVUC5ukdebhXEoFlUDZ+CkLVYDTH6HX8Osoes5p +onc9k7o5QuUFuDpWxb2vWbdaIl4EBf03xILV64KaePZ2HG/sqnoM+zjZjOFVhAAanY202cuTqNop +EBOWBpw/NT2ZAcXbTbtkL45892gYGO6t5EmVTgC8ciPIqgRMSyMEDL/wwT7dU7HEvtH4Jp3xYeCe +HqDyMZvn3mJtEKuS/yLt5bYgQsTx9EaOzshjOd4xsSGhvomxCZtKAHWi6pRwDKO/iHkj6H+ia6cu +Uu+bQvkIdvplen3d0jc8uPW527E6yaEj54gsud+5HoWANgXuRxgOL4XK/slHlIc9P/dr33W7+V/g +/g9Zb5H38TUPuH0zGdiPdY3GkRVpnqj3O5TmY7TWTevsvXQXE2B9Bl23N4uFWQ1fjf34DETOXBWm +L+8VDw/F6Vj8qTHl0cD6mNcGzYUGBOTbHIpbHNsKyiESXA0qaYo03OhwHfB4vqAfiatEfkNq6wxY +atwzmDUIjDFOScE7hFAq7ielB/kexVi0kjvV44qNNlxj4RlYu2nSuOmIGvqVSyC3quBD8t6BxUoW +PmFGIf5/pjDIB/w3ZSGhz2K2G/X2LhbEsG2ODfegKCHBGw/Do2v1zGOMwRPSq5cFB+D/yAXguw7I +gkmcu5no2iGXKmhYR5VDr/Ttxi00ZqmIf3kjfSzaeWpfS+zF3l1I+NS3dG/JuZXJAmMBPO60SAFe +nlPLD9Pkpg1zzqf71K/wWwnD1g58qYCm6NC7QhyZltqtkEJNaUVRAUMQXQCkW7SlHUf0LKa+IbBP +S7tN7jYPLWxnzVSk3tPgAzLcuDlGQncKdaoqeeRLS8FHkdQAhnyrMhRPHztFaeT7RUAGazmClTc1 +74tQfmxGyvrVmTq4Qn16gCeb5wCD2tRsYvzoX0ds/brSJUXsbJhDRg9mHSHMg9csjHEhTJ60VIxh +xCOGZuYSnFXvT/eIcoGZhuADgJSSp/0AICAMHYHY1394RclcNC5wJtwEATKLIgen38CSOqBCZRUp +Cxi/kqrHUpHhRntV9D0aJrJeettMH9xkfL16L/z4E895YjBfz5ZDEkytrJ4Ie/i6RPEAahzreDZU +6EvIDrM0eO+t1iiEv3R1Zqf/48GLdiNamOgcT7mwnc6O0d/aAxoHN5RcWkrfF3ji6iTejWyIIyuY +WQdUCXr40LNt25ddeTxPwR2zmisb1b9x1PikNM9gOk5W74E3Uea3vxvBpqX6MaT378tfpauf40IK +YfHdlKaLN41cEui9J4CMdHU9DU6fSaDRGJmS9hLi+g+Yk68aXeeM19NnmgcyTefBPKw6d98Y/L+C +kunCc9j+c8IQyehs5CEydH0T/mBto4jCti3RMvpj2smwuNTbnATfCmt0JPiuZHiuDsyeN4TH4F4g +QbKiQ8+1lmmjSacQsYfGHSP9Ea9HtcZzDtfgMRxnBx/RZ0GFaIeshr2EyeAZM9iLmy4mQGR+OEbw +dX+4C19Xui99jnfowWw8xqeV1mrAbuVABMQBtHqv5UMz7HUDNcSTvIo7KtP8jkDbyQ== +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dsp_prime_tensor_dot_sidefeed.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dsp_prime_tensor_dot_sidefeed.sv new file mode 100644 index 0000000..e44dee0 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_dsp_prime_tensor_dot_sidefeed.sv @@ -0,0 +1,97 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +gVOmrewqEzEo84Lz0XrzNBB04kV+SZzwB5ZCHORoZiH4RXpnKejO2JaZbZzpW4XuAipMftVXS8KO +rnMeuvjEiZE87EPokqZF6Kr6euKTpX/LKct8Hgau57SxugO7NMr+QDoQ26j8WJeVJLceXnIjQaJz +ZNKG3D997gfMo2tA09vqtxHuNpDNpg730X8zPW8YAf5ZCK/gDg6fkd7LTmDoBYQPn03Kni1kK0Jv +iXBpgVD1gQvfKI8aSG8HVNsLDTURvJUEm8uABTKBFdvDvpRZpXg7YUT9eLNPnLiEi+wwIwBWn/WJ +wUrYQSt3ogD1CQ7d/Tffqw0CkagZO3nMi2slAA== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 4288) +`pragma protect data_block +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 +Rk9bdfUpwpoGrfXDWg== +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_exit_fifo.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_exit_fifo.sv new file mode 100644 index 0000000..eb2d23b --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_exit_fifo.sv @@ -0,0 +1,120 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +PZhRT1O6S7Z6fbB1qIPB21dBqbWhI/qvbVSGMTrZc/AgJnNCknbdOEcxE2jNTQMWU6M6svh5nOOi +qPzcmekLjPvKwV+U4idbXZ8h4G4c0520bVpiF78k+cqn3q4WQq1O/9udaWaKNBZLA95+mUvlRPjX +9w/23xyYrcE8x0aVG/yjskb8x/aijbbYRD/EJtIqNuBxW85FA++HNTElrofvcAnIQN/C/+pOYDre +PO2CANiQUuDr3h71VHjckSOZinrIuZqXuH5JApIjadI4jXDIjQp3spUsYchR9UkF6XAoI35aw1du +vhmXDD8r4drIrKYlzdJz/BBRuZRov4QF7WMhOA== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 5616) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_exit_fifo_pkg.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_exit_fifo_pkg.sv new file mode 100644 index 0000000..e916004 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_exit_fifo_pkg.sv @@ -0,0 +1,68 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +fAqIsxbjlGk6zf5tRAIk+mjojPLszawGdtjvd6yz+58wVgNdqG/nqlC2SWQ3AbYoj8364fHz/T61 +3XEsL7Wxw5wuV6ms7wNa0uYgIp5YO6HvI92X3/6hYfIp+bvH7AuLvq+4AJ/kul3+6TmvpkXiM3eo +uSNyikbz3XXNloIS2mMsj9a2y/hAHWiyAQVW5FhpW562ilImXax7yV9rNma3hf5aCEIdgpUbJoMJ +TI0UPyYJLt96Z9vaq1Eq2JOJV2e/hcbpM4qJdtPBzUvCQa2COexo4KW6X1rtM0EFL4UzSAryU36P +Zd2tJRNKYr9L1rrYS299IpJHJtMrZh+V9aUk/g== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 2624) +`pragma protect data_block +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 +ffo= +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_filter_bias_scale_scratchpad.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_filter_bias_scale_scratchpad.sv new file mode 100644 index 0000000..eaf8490 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_filter_bias_scale_scratchpad.sv @@ -0,0 +1,506 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +sWXHn/hu6Mq3/ZVbc1sY4uszSUxQ4FlbYYc1GIF5P1Ah0i5cjFpMbDimCQXRFI5pKepTBtWN71TP +T2K2xS7VtjrZZjBIkOhqnkYqDU2V1eejkcw7OwydkNrDBARtHSDGpAfOmivMeqt3/L96pHzR7tWk +W74mewJcgwIxVEuivFGFLgnda2aRzY6HH0iwgOtrtxz7IReWQRP5uCd2qZFUMyhAfbcbgjU3iKbW +BcbzNPPR/cAzSqsM0geFKfITfHoC95kPzWGV9GOjwSu/bbQCRsM6qimKy9cLwli2nOnr3Gu0laBx +UEMgGnM2hpoH4f5HpUEndy2fTVtaGokm/O2QYQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 27616) +`pragma protect data_block +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 +eVChEv3cyKHKKGQNcEdPm9DYtTnQ5YtGAn9oyw== +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_filter_bias_scale_scratchpad_arch_info.svh b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_filter_bias_scale_scratchpad_arch_info.svh new file mode 100644 index 0000000..6855e51 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_filter_bias_scale_scratchpad_arch_info.svh @@ -0,0 +1,107 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +qPnuXdNLaWAaTKCgE+cpmn0v/PWLWHHHjLRFlSMWm+idVNg34qEexdxlgqFog8X8sSjqSDf9bd8D +gc8tC6MiH84/f8RU4zgs4GstoY5RKHzIcZt7+1WolXfD0VF+G2dQLYAx54nZLF4TimDrlRGM6+53 +JoeK5g+tQh1NalmLvcG/BsRfHaYRdbDFSwxZPLwTA3LZgNLlhW2yPqIGkZlDkxXZCv71olwRuG97 +cGdPruC7SGLB4RngTVIRGZQuNmsawQRZEWA/7lCmStvcnmfKcSWAd/GPmFjd6/aIoWNTx9DYLL6v +7rYEQ+/JeCy2BFMQ2tbIP7RVPzDRpfsGpJqNDg== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 4880) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_filter_bias_scale_scratchpad_if.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_filter_bias_scale_scratchpad_if.sv new file mode 100644 index 0000000..bf4f6c0 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_filter_bias_scale_scratchpad_if.sv @@ -0,0 +1,50 @@ +// Copyright 2021-2021 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +`include "dla_common_types.svh" + +interface scratchpad_write_data_if #( + dla_filter_bias_scale_scratchpad_pkg::filter_bias_scale_scratchpad_arch_t arch +); + localparam MAX_DATA_WIDTH = dla_filter_bias_scale_scratchpad_pkg::calc_max_data_width( + .NUM_FILTER_PORTS(arch.NUM_FILTER_PORTS), + .NUM_FILTER_BLOCKS_PER_MEGABLOCK(arch.NUM_FILTER_BLOCKS_PER_MEGABLOCK), + .NUM_BIAS_SCALE_PORTS(arch.NUM_BIAS_SCALE_PORTS), + .NUM_BIAS_SCALE_BLOCKS_PER_MEGABLOCK(arch.NUM_BIAS_SCALE_BLOCKS_PER_MEGABLOCK), + .MEGABLOCK_WIDTH(arch.MEGABLOCK_WIDTH)); + typedef struct packed { + logic is_filter; // indicates whether the write data is filter data or bias data + logic [MAX_DATA_WIDTH-1:0] data; + } Type; + Type data; + modport sender (output data); + modport receiver (input data); +endinterface + +interface scratchpad_read_data_if #( + dla_filter_bias_scale_scratchpad_pkg::filter_bias_scale_scratchpad_arch_t arch +); + `BLOCK_TYPE(arch.BLOCK_SIZE, arch.FILTER_WIDTH, arch.FILTER_EXPONENT_WIDTH); + typedef struct packed { + struct packed { + logic valid; + block_t filter; + + logic [arch.BIAS_WIDTH-1:0] bias; + logic [arch.SCALE_WIDTH-1:0] scale; + } [arch.NUM_PE_PORTS-1:0] ports; + } Type; + Type data; + modport sender (output data); + modport receiver (input data); +endinterface diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_filter_bias_scale_scratchpad_pkg.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_filter_bias_scale_scratchpad_pkg.sv new file mode 100644 index 0000000..7d1a726 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_filter_bias_scale_scratchpad_pkg.sv @@ -0,0 +1,197 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +tmqr+j5axayoQhQKinkZkP1IwRczH6lZWnwOOhKWiVZ9AEVb+QSIbJuamyrAYrhtFaJs+14gwqjz +boKBKdB78Yvocelc+ZRsNSmrOnNWIdoSPe+q6z2vfNFWfN1ZQH4nhjJUFFPvXNU2pHTqhFq0pBWT +A/ZDBr4wqeFsIOBxVuZag7ciu3yy7mhTQ7eP41l7jmBpcd5hzc7O0kQ9a112DdB1zNdZU5QRN6IB +3pmR0IXNgU/TOq7FpQi8cJO4Jmjse2xMMVXFlrpSVTFfNrHGH3MtxDJldcWD7xqJ72BFFvNjd1Vr +kW1Vb8F9eNpEUwhLVYUfYYmNDyBIomWl9sqsBg== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 10016) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_filter_ddr_unpack.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_filter_ddr_unpack.sv new file mode 100644 index 0000000..1a46782 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_filter_ddr_unpack.sv @@ -0,0 +1,64 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +LMMptCPlLpafoJ0rW4GOjWKQUrrgrD4O4PdDwj+mpV4P3mEJwETaoh8CW5mdBGvOi1rncOX5XKTN +O+7lnETuLYfAdPlDJG5R44873FiBbBdTgmdunX2SXxVNI+afK4y0IlT3ehuwKd5rF+5nLludhPTI +qSbn3NZtB8bF/NWPlLHi4vINyQnQUCcOoOhncFf+YVGg1g2jeL/8k0UkqSMaMKlHtEAFTCEY2e4c +E1zXLta56Xzz9WUilAuU1666yeLzI0ptyumPTx45RzbNUrQVQV2N49pZIo7ugMBVdvoBsGA/8hUX +L/ilr1KgrnF/gdgUsSpKZfR/lM9bvYy5+QKM6A== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 2448) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_fp32_from_fpx_convert.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_fp32_from_fpx_convert.sv new file mode 100644 index 0000000..90d3ef3 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_fp32_from_fpx_convert.sv @@ -0,0 +1,73 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +t1ROFmbkaHEwb0Qz0Vt7xk8/CFzdZmqBMvSgHHFV82OT0GgNjwLEyfCcGqh+8Nkd405j+VOLTmxR +1cEp1lmauKJOOfykhvfxFyjMtYkQx/dv/K7FTv7mhxUXn/R8WW9ljlnamLQBPFAeQCnqP/bEfSFg +CaiuSybk/AzKazgLJA1fG/xelAQqZxQ67m90/2PSwjSHc0K6N5Z2+IbQiYYvAIsjiaQhEqBtxEff +hRC4WO4Rzldeqd+Sqt5J4p0R3l8pTWumpGKbf6KV46lPUKy0AYM1+yiOCj0cFFpB1jrlkipFUMip +skWUXWHXD4EZx0mJi5uZHMwqAMz25dg5/y+UUg== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 2960) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_fp32_to_fpx_convert.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_fp32_to_fpx_convert.sv new file mode 100644 index 0000000..74a96ac --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_fp32_to_fpx_convert.sv @@ -0,0 +1,78 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +G9hMxX9VtVQSgOM0qbZCmUq1qQ2xrSj8iMQ2QMn5IKQUbAHOrxjYGbfAaKXNbRJ0vOIr8froIQST +j7nolnwbmVBIRRgXvtrc/7B604+Zne4nfgJ5SNTBFps5uELJ/fb1BX1zEmfYvTXBlRL2crpkpQ7P +bucJLqfmGIXOgtqvP0jv14ILiOEkUWIJKvwQs0dLvzyWrrwgRhiXpZMxLn0emI999NBZ/35a07wu +iliZmCHafUcJyE2H5qm4/t0xwuvgGVLtZ0TOzLl2AME52z1f9mJY3/spzo2kgvy9Sl3c3gnTA+3e +m0pXvFteCjst86Qq3V8QBdtFaMeHU2eJ9DNVEQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 3248) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_fifo.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_fifo.sv new file mode 100644 index 0000000..4dd6840 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_fifo.sv @@ -0,0 +1,944 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// // +// HLD (High Level Design) FIFO // +// Designed and optimized by: Jason Thong // +// // +// DESCRIPTION // +// =========== // +// Wrapper utility that selects which S10-optimized FIFO to use based on STYLE parameter. One can select whether to use the legacy stall/valid interface or the new stall latency // +// interface, separate selection for upstream and downstream interfaces. // +// // +// REQUIRED FILES // +// ============== // +// - dla_hld_fifo.sv // +// - dla_acl_reset_handler.sv // +// - dla_acl_zero_latency_fifo.sv // +// - dla_acl_low_latency_fifo.sv // +// - dla_acl_high_speed_fifo.sv // +// - dla_acl_lfsr.sv // +// - dla_acl_tessellated_incr_decr_threshold.sv // +// - dla_acl_tessellated_incr_lookahead.sv // +// - dla_acl_mid_speed_fifo.sv // +// - dla_acl_latency_one_ram_fifo.sv // +// - dla_acl_latency_zero_ram_fifo.sv // +// // +// WRITE TO READ LATENCY // +// ===================== // +// FIFOs are fundamentally designed differently if one wants storage in memory versus in registers. Registers provide simple way to achieve low write to read latency. Adding // +// bypass logic to the prefetch of a memory-based FIFO hurts area and fmax. Conceptually, a FIFO will track two types of occupancy: // +// 1. write_used_words: // +// - tracks how many words have been written into the FIFO // +// - increments one clock after write (on the next clock edge when write is asserted), decrements one clock after read ack // +// - backpressure to upstream (o_stall and o_almost_full) are based on this value // +// 2. read_used_words: // +// - tracks how many words are readable from the FIFO // +// - increments WRITE_TO_READ_LATENCY clocks after write, decrements one clock after read ack // +// - data availability to downstream (valid_out and almost_empty) are based on this value // +// If WRITE_TO_READ_LATENCY >= 2 then write_used_words increments before read_used_words. The interpretation is that something written into the FIFO takes some time before that // +// same item is readable. If WRITE_TO_READ_LATENCY == 1 then write_used_words is the same as read_used_words. If WRITE_TO_READ_LATENCY == 0 then read_used_words increments // +// *BEFORE* write_used_words. It may sound like something is readable before it has been written to the FIFO, but the correct interpretation is that data can bypass the storage // +// associated with a FIFO. This happens when an empty FIFO is written to and read from on the same clock. // +// // +// SUPPORTED FIFO IMPLEMENTATIONS // +// ============================== // +// Set the STYLE parameter to choose which underlying FIFO to use. Earliness is discussed below. // +// // +// STYLE | Implementation | Write to | Storage | Maximum useful | Maximum useful | Intended // +// | | read latency | | STALL_IN_EARLINESS | VALID_IN_EARLINESS | usage // +// --------+---------------------------+--------------+--------------+--------------------+--------------------+------------------------------------ // +// "hs" | dla_acl_high_speed_fifo | 5 | M20K or MLAB | 3 | 0 | Highest fmax // +// "llreg" | dla_acl_low_latency_fifo | 1 | Registers | 1 | 1 | Shallow fifo if low latency needed // +// "zlreg" | dla_acl_zero_latency_fifo | 0 | Registers | 1 | 1 | Shallow fifo if zero latency needed // +// "ms" | dla_acl_mid_speed_fifo | 3 | M20K or MLAB | 2 | 1 | Lowest area // +// "llram" | dla_acl_latency_one_ram_fifo | 1 | M20K or MLAB | 1 | 1 | Deep fifo if low latency needed // +// "zlram" | dla_acl_latency_zero_ram_fifo | 0 | M20K or MLAB | 1 | 1 | Deep fifo if zero latency needed // +// // +// STYLE can also be set to "ll" in which case dla_hld_fifo will make a decision on whether to use "llreg" or "llram" based on the WIDTH and DEPTH in order to minimize area. This is // +// the recommended way to ask for a latency one fifo. If you explicitly ask for "llram" or "llreg" you will get what you ask for. Same applies to zero latency with STYLE = "zl". // +// // +// LATENCY SPECIFICATION OF ALL FIFO IMPLEMENTATIONS // +// ================================================= // +// Category | Latency | Example signals | In plain English // +// ----------------+-----------------------+--------------------+---------------------------------------------------------------- // +// write -> write | 1 | i_valid to o_stall | Number of clocks it takes for write request to affect fifo full status // +// write -> read | WRITE_TO_READ_LATENCY | i_valid to o_valid | Number of clocks it takes for write request to affect fifo empty status // +// read -> write | 1 | i_stall to o_stall | Number of clocks it takes for read request to affect fifo full status // +// read -> read | 1 | i_stall to o_valid | Number of clocks it takes for read request to affect fifo empty status // +// // +// ALMOST FULL AND ALMOST EMPTY // +// ============================ // +// The ALMOST_***_CUTOFF parameters refer to how much dead space would be in the fifo if one were to use almost_full as same clock cycle backpressure (dead space in not being // +// able to completely fill the fifo), or if one were to almost_empty as same clock cycle underflow prevention (dead space in not being able to empty the fifo). See chart below // +// for interpretation of values: // +// // +// Scfifo parameter | Our parameter | Interpretation // +// ------------------------------------+---------------------------+--------------------------------------------------------------- // +// almost_empty_value = 1 | ALMOST_EMPTY_CUTOFF = 0 | almost_empty behaves the same way as empty // +// almost_empty_value = 2 | ALMOST_EMPTY_CUTOFF = 1 | almost_empty asserts when read_used_words is 1 or less // +// ------------------------------------+---------------------------+--------------------------------------------------------------- // +// almost_full_value = lpm_numwords | ALMOST_FULL_CUTOFF = 0 | almost_full behaves the same way as full // +// almost_full_value = lpm_numwords-1 | ALMOST_FULL_CUTOFF = 1 | almost_full asserts when write_used_words is DEPTH-1 or higher // +// // +// INITIAL OCCUPANCY // +// ================= // +// The parameter INITIAL_OCCUPANCY describes the number of words of garbage data in the fifo as it exits from reset. Typically this is 0, e.g. we have to write into the fifo // +// before anything is readable. If INITIAL_OCCUPANCY > 0, then valid_out is 0 during reset, and when it eventually asserts it is then safe for downstream to transact reads from // +// the fifo. Exit from reset should be handled separately for upstream and downstream. In particular, the assertion of valid_out (to downstream) and the deassertion of stall_out // +// (to upstream) may not happen on the same clock cycle. If INITIAL_OCCUPANCY == DEPTH, one cannot use stall_out to observe reset exit, only when at least one item has been read // +// from the fifo will stall_out then deasert. // +// // +// OPTIMIZATION STRATEGIES // +// ======================= // +// To improve fmax and reduce area, one should provide control signals earlier than the corresponding data. This is controlled by the following parameters: // +// STALL_IN_EARLINESS: // +// - how many clock cycles ahead of time does downstream indicate it cannot accept data // +// - if downstream has capacity, then almost full from downstream can drive the stall port of the fifo // +// VALID_IN_EARLINESS: // +// - how many clock cycles ahead of time does upstream indicate it can provide data // +// - decide on whether to accept data into the fifo ahead of time, then the data arrives later e.g. could hide the latency of upstream reading that data out of a memory // +// // +// One can set arbitrarily large values for earliness in dla_hld_fifo, anything in excess of what the underlying fifo can use will be absorbed in pipeline registers inside dla_hld_fifo. // +// There is little to be gained beyond the maximum earliness supported by the underlying fifo unless the fifo is extremely wide (thousands of bits in which case excess earliness // +// can potentally be retimed into the fifo). See above chart for the maximum useful earliness. // +// // +// RESET CONFIGURATION // +// =================== // +// One may consume the reset asynchronously (ASYNC_RESET=1) or synchronously (ASYNC_RESET=0), but not both at the same time. Reset *CONSUMPTION* is separate from *DISTRIBUTION*. // +// For example, we could consume reset synchronously but distribute it asynchronously e.g. using a global clock line. Local synchronizers are used before reset is consumed if // +// SYNCHRONIZE_RESET=1, otherwise we assume one has externally managed the synchronous release of reset. RESET_EVERYTHING does as the name implies and is intended for partial // +// reconfiguration debug. Finally, typically in a pipeline of valids only the first and last are reset, so reset must be held to flush the pipeline. A reset pulse stretcher is // +// used, unless RESET_EXTERNALLY_HELD=1 in which case we assume reset will be held for sufficiently long (5 clocks for this module). // +// // +// RECOMMENDED RESET SETTINGS // +// ========================== // +// General usage is intended for when one is unsure about the reset. The HLD platform has specific reset properties so that we can e.g. remove the reset pulse stretcher. // +// Parameter | General usage A10 | General usage S10 | HLD A10 | HLD S10 // +// ----------------------+-------------------+-------------------+-------------+------------- // +// ASYNC_RESET | 1 | 0 | 1 | 0 // +// SYNCHRONIZE_RESET | 1 | 1 | 0 | 1 // +// RESET_EVERYTHING | 0 | 0 | 0 | 0 // +// RESET_EXTERNALLY_HELD | 0 | 0 | 1 | 1 // +// // +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +`default_nettype none +`include "dla_acl_parameter_assert.svh" + +module dla_hld_fifo #( + //basic fifo configuration + parameter int WIDTH, // width of data path, at least 0 + parameter int DEPTH, // capacity of the fifo, at least 1 + + //occupancy + parameter int ALMOST_EMPTY_CUTOFF = 0, // o_almost_empty asserts if read_used_words <= ALMOST_EMPTY_CUTOFF + parameter int ALMOST_FULL_CUTOFF = 0, // o_almost_full/o_stall asserts if write_used_words >= (DEPTH-ALMOST_FULL_CUTOFF), applies to o_almost_full if USE_STALL_LATENCY_UPSTREAM = 0, otherwise applies to o_stall + parameter int INITIAL_OCCUPANCY = 0, // number of words in the fifo (write side occupancy) when it comes out of reset, note it still takes WRITE_TO_READ_LATENCY clocks for this to become visible on the read side + + //reset configuration + parameter bit ASYNC_RESET = 0, // how do we use reset: 1 means registers are reset asynchronously, 0 means registers are reset synchronously + parameter bit SYNCHRONIZE_RESET = 1, // based on how reset gets to us, what do we need to do: 1 means synchronize reset before consumption (if reset arrives asynchronously), 0 means passthrough (managed externally) + parameter bit RESET_EVERYTHING = 0, // intended for partial reconfig debug, set to 1 to reset every register (normally async reset excludes data path and sync reset additionally excludes some control signals) + parameter bit RESET_EXTERNALLY_HELD = 1, // set to 1 if resetn will be held for at least FIVE clock cycles, otherwise we will internally pulse stretch reset before consumption + + //special configurations for higher fmax / lower area + parameter int STALL_IN_EARLINESS = 0, // how many clock cycles ahead i_stall is, enables internal manual retiming + parameter int VALID_IN_EARLINESS = 0, // how many clock cycles ahead i_valid is, enables internal manual retiming + parameter int STALL_IN_OUTSIDE_REGS = 0, // number of registers on the stall-in path external to this module that will delay the propagation of x values on reset + parameter int VALID_IN_OUTSIDE_REGS = 0, // number of registers on the valid-in path external to this module that will delay the propagation of x values on reset + parameter int REGISTERED_DATA_OUT_COUNT = 0,// how many lower bits of o_data are registered (upper bits are unregistered) + parameter bit NEVER_OVERFLOWS = 0, // set to 1 to disable fifo's internal overflow protection, area savings for hs by removing one incr/decr/thresh, stall_out still asserts during reset but won't mask valid_in + parameter int MAX_SLICE_WIDTH = 0, // 0 means no slicing, anything higher specifies the maximum width of the sub-FIFOs into which this FIFO will be split, and which will be width-stitched together + // to create the FIFO of the width specified above. Width slicing registers stall-in and valid-in signals to each sub-FIFO to mitigate fanout impact if WIDTH is large + + //special features that typically have an fmax penalty + parameter bit HOLD_DATA_OUT_WHEN_EMPTY = 0, // 0 means o_data can be x when fifo is empty, 1 means o_data will hold last value when fifo is empty (scfifo behavior, has fmax penalty) + parameter bit WRITE_AND_READ_DURING_FULL = 0, //set to 1 to allow writing and reading while the fifo is full, this may have an fmax penalty, to compensate it is recommended to use this with NEVER_OVERFLOWS = 1 + + //interface selection + parameter bit USE_STALL_LATENCY_UPSTREAM = 0, // 0 means use legacy stall/valid, 1 means use new stall latency, applies to upstream interface: i_valid, i_data, o_stall, o_almost_full + parameter bit USE_STALL_LATENCY_DOWNSTREAM = 0, // 0 means use legacy stall/valid, 1 means use new stall latency, applies to downstream interface: o_valid, o_data, i_stall, o_almost_empty, o_empty + + //ram implementation for fifos that use ram for data storage + parameter string RAM_BLOCK_TYPE = "FIFO_TO_CHOOSE", // "MLAB" | "M20K" | "AUTO" | "FIFO_TO_CHOOSE" -> ram_block_type parameter of altera_syncram, if MLAB or M20K you will get what you ask for, AUTO means Quartus chooses, + // FIFO_TO_CHOOSE means we choose a value and then tell Quartus (typically based on depth of fifo) + + //fifo selection + parameter string STYLE = "hs", // see above table, legal values are "hs", "ms", "ll", "llreg", "llram", "zl", "zlreg", "zlram" + parameter enable_ecc = "FALSE" // Enable error correction coding + +) +( + input wire clock, + input wire resetn, // reset is ACTIVE LOW, see description above for different reset modes + + // Legacy stall/valid behavior | New stall latency behavior | Reset value + //upstream interface // -----------------------------------------------------------------------------+----------------------------------------------------------------+------------ + input wire i_valid, // upstream has data, fifo IS ALLOWED to consume it | upstream has data, fifo MUST consume it or data will be lost | N/A + input wire [WIDTH-1:0] i_data, // data from upstream, synced with i_valid delayed by VALID_IN_EARLINESS clocks | <-- same behavior | N/A + output logic o_stall, // backpressure to upstream, fifo is full | backpressure to upstream, fifo is almost full | 1 + output logic o_almost_full, // fifo is almost full, hint to upstream of potential future backpressure | NOT USED, do not consume this output signal | 1 + // | | + //downstream interface // -----------------------------------------------------------------------------+----------------------------------------------------------------+------------ + output logic o_valid, // fifo has data, downstream IS ALLOWED to consume it | fifo has data, downstream MUST consume it or data will be lost | 0 + output logic [WIDTH-1:0] o_data, // data to downstream, synced with o_valid | <-- same behavior | x + input wire i_stall, // backpressure from downstream STALL_IN_EARLINESS clocks ahead of time | <-- same behavior | N/A + output logic o_almost_empty, // fifo is almost empty, hint to downstream of potential future fifo emptiness | <-- same behavior | 1 + output logic o_empty, // fifo is empty right now | <-- same behavior | 1 + + //other + output logic [1:0] ecc_err_status +); + + + ////////////////////////////////////// + // // + // Sanity check on the parameters // + // // + ////////////////////////////////////// + + // each underlying fifo enforces a limit on the maximum earliness in order to limit the delay of exiting from reset "safe state" + // the checks are done in Quartus pro and Modelsim, it is disabled in Quartus standard because it results in a syntax error (parser is based on an older systemverilog standard) + // the workaround is to use synthesis translate to hide this from Quartus standard, ALTERA_RESERVED_QHD is only defined in Quartus pro, and Modelsim ignores the synthesis comment + `ifdef ALTERA_RESERVED_QHD + `else + //synthesis translate_off + `endif + + generate + `DLA_ACL_PARAMETER_ASSERT_MESSAGE((STYLE == "hs" || STYLE == "ms" || STYLE == "ll" || STYLE == "llreg" || STYLE == "llram" || STYLE == "zl" || STYLE == "zlreg" || STYLE == "zlram"), $sformatf("dla_hld_fifo: illegal value of STYLE = %s, legal values are \"hs\", \"ms\", \"ll\", \"llreg\", \"llram\", \"zl\", \"zlreg\", or \"zlram\"\n", STYLE)) + `DLA_ACL_PARAMETER_ASSERT_MESSAGE((MAX_SLICE_WIDTH <= 0) || (VALID_IN_OUTSIDE_REGS <= 0 && STALL_IN_OUTSIDE_REGS <= 0), $sformatf("dla_hld_fifo: did not expect outside stall/valid regs to be present if width-slicing is enabled")) + endgenerate + + + `ifdef ALTERA_RESERVED_QHD + `else + //synthesis translate_on + `endif + + + + // for simulation testbench only, these are properties of the fifo which are consumed by the testbench + // synthesis translate_off + logic fifo_in_reset; + int WRITE_TO_READ_LATENCY; + int RESET_EXT_HELD_LENGTH; + int MAX_CLOCKS_TO_ENTER_SAFE_STATE; + int MAX_CLOCKS_TO_EXIT_SAFE_STATE; + // synthesis translate_on + + + + // to assist in debug of surrounding logic outside of hld_fifo -- signals of interest are named sim_only_debug_*** + // technically this is synthesizable logic, but it would degrade fmax and it is not hooked up to anything + // synthesis translate_off + localparam bit SIM_ONLY_DEBUG_ENABLE_ALL = 1; //helper to turn on all debug features + localparam bit SIM_ONLY_DEBUG_TRACK_STATS = 0; //set to 1 to enable tracking of total writes, total reads, occupancy (write used words), and max occupancy + localparam bit SIM_ONLY_DEBUG_ERROR_ON_X_INPUT = 0; //set to 1 to cause simulation to error if i_valid or i_stall is x or z, not allowed once reset has been deasserted + localparam bit SIM_ONLY_DEBUG_ERROR_ON_OVERFLOW = 0; //set to 1 to cause simulation to error if overflow happens, which can only happen if NEVER_OVERFLOWS=1 + generate + if (SIM_ONLY_DEBUG_ENABLE_ALL || SIM_ONLY_DEBUG_TRACK_STATS || SIM_ONLY_DEBUG_ERROR_ON_OVERFLOW) begin + int sim_only_debug_total_writes, sim_only_debug_total_reads, sim_only_debug_occupancy, sim_only_debug_max_occupancy; + logic sim_only_debug_write_into_fifo, sim_only_debug_read_from_fifo; + + genvar g; + logic [STALL_IN_EARLINESS:0] pipe_i_stall; + logic [VALID_IN_EARLINESS:0] pipe_i_valid; + logic correct_timing_i_stall, correct_timing_i_valid; + always_comb begin + pipe_i_stall[0] = i_stall; + pipe_i_valid[0] = i_valid; + end + for (g=1; g<=STALL_IN_EARLINESS; g++) begin + always_ff @(posedge clock) begin + pipe_i_stall[g] <= pipe_i_stall[g-1]; + end + end + for (g=1; g<=VALID_IN_EARLINESS; g++) begin + always_ff @(posedge clock) begin + pipe_i_valid[g] <= pipe_i_valid[g-1]; + end + end + assign correct_timing_i_stall = pipe_i_stall[STALL_IN_EARLINESS]; + assign correct_timing_i_valid = pipe_i_valid[VALID_IN_EARLINESS]; + + //tracks whether a fifo write or read is currently happening + assign sim_only_debug_write_into_fifo = (USE_STALL_LATENCY_UPSTREAM) ? correct_timing_i_valid : correct_timing_i_valid & ~o_stall; + assign sim_only_debug_read_from_fifo = ~o_empty & ~correct_timing_i_stall; + + //keep track of how many writes and reads have happened since reset + always_ff @(posedge clock or negedge resetn) begin + if (~resetn) begin + sim_only_debug_total_writes <= INITIAL_OCCUPANCY; + sim_only_debug_total_reads <= '0; + sim_only_debug_max_occupancy <= '0; + end + else begin + sim_only_debug_total_writes <= sim_only_debug_total_writes + sim_only_debug_write_into_fifo; + sim_only_debug_total_reads <= sim_only_debug_total_reads + sim_only_debug_read_from_fifo; + if (sim_only_debug_occupancy > sim_only_debug_max_occupancy) sim_only_debug_max_occupancy <= sim_only_debug_occupancy; + end + end + + //how many words have been written to but have no yet been read from the fifo -- this is equivalent to write used words + assign sim_only_debug_occupancy = sim_only_debug_total_writes - sim_only_debug_total_reads; + + if (SIM_ONLY_DEBUG_ENABLE_ALL || SIM_ONLY_DEBUG_ERROR_ON_OVERFLOW) begin + always_ff @(posedge clock) begin + if (sim_only_debug_occupancy > DEPTH) begin + $fatal(1, "dla_hld_fifo instance %m : overflow, write used words is %d\n", sim_only_debug_occupancy); + end + end + end + end + if (SIM_ONLY_DEBUG_ENABLE_ALL || SIM_ONLY_DEBUG_ERROR_ON_X_INPUT) begin + logic sim_only_debug_seen_resetn_is_zero; + initial begin + sim_only_debug_seen_resetn_is_zero = 1'b0; + wait (resetn === 1'b0); + sim_only_debug_seen_resetn_is_zero = 1'b1; + end + always_ff @(posedge clock) begin + if (sim_only_debug_seen_resetn_is_zero && (resetn === 1'b1) && ((i_valid === 1'bx) || (i_valid === 1'hz))) begin + $fatal(1, "dla_hld_fifo instance %m : i_valid is %x\n", i_valid); + end + //technically i_stall=x should be illegal once out of reset, but fifo always protects itself from underflow, so ignore if fifo is empty + if (sim_only_debug_seen_resetn_is_zero && (resetn === 1'b1) && (~o_empty) && ((i_stall === 1'bx) || (i_stall === 1'hz))) begin + $fatal(1, "dla_hld_fifo instance %m : i_stall is %x\n", i_stall); + end + end + end + endgenerate + // synthesis translate_on + + + + //////////////////////////////////////////////////////////////////////////////////////////////////////////// + // // + // Implement width slicing, if enabled. Otherwise instantiate one FIFO of the style and width requested // + // // + //////////////////////////////////////////////////////////////////////////////////////////////////////////// + + genvar z; + generate + + //Width slicing is only enabled if MAX_SLICE_WIDTH > 0. But we also want to avoid slicing if we only get one slice + //(in which case registers on valid/stall will steal earliness from the underlying module for no reason). + localparam int SLICE_WIDTH = get_slice_width(MAX_SLICE_WIDTH); + localparam int NUM_SLICES = (MAX_SLICE_WIDTH > 0) ? ((WIDTH-1)/SLICE_WIDTH)+1 : 1; + if (NUM_SLICES > 1) begin + //width-slicing enabled -- break up this FIFO into multiple sub-FIFOs + localparam int MIN_USEFUL_SLICE_WIDTH = 256; //TODO make this less arbitrary + + initial begin + if (MAX_SLICE_WIDTH < MIN_USEFUL_SLICE_WIDTH) begin + $warning("Specified MAX_SLICE_WIDTH %d, which is smaller than min useful slice width %d.", MAX_SLICE_WIDTH, MIN_USEFUL_SLICE_WIDTH); + end + end + + //set number of slices + localparam int SLICE_REMAINDER = WIDTH % SLICE_WIDTH; + //slice REGISTERED_DATA_OUT_COUNT as well (lower sub-FIFOs receive registered bits, higher sub-FIFOs do not) + localparam int NUM_REGDATAOUT_SLICES = ((REGISTERED_DATA_OUT_COUNT-1)/SLICE_WIDTH)+1; + localparam int REGDATAOUT_REMAINDER = REGISTERED_DATA_OUT_COUNT % SLICE_WIDTH; + + //handle signal assignment + logic [NUM_SLICES-1:0] i_valid_dups; /* synthesis dont_merge */ + logic [NUM_SLICES-1:0] o_stall_dups; + logic [NUM_SLICES-1:0] o_almost_full_dups; + logic [NUM_SLICES-1:0] o_valid_dups; + logic [NUM_SLICES-1:0] i_stall_dups; /* synthesis dont_merge */ + logic [NUM_SLICES-1:0] o_almost_empty_dups; + logic [NUM_SLICES-1:0] o_empty_dups; + logic [NUM_SLICES-1:0] ecc_err_status_dups [1:0]; + + assign o_stall = o_stall_dups[0]; + assign o_almost_full = o_almost_full_dups[0]; + assign o_valid = o_valid_dups[0]; + assign o_almost_empty = o_almost_empty_dups[0]; + assign o_empty = o_empty_dups[0]; + assign ecc_err_status = {|ecc_err_status_dups[1], |ecc_err_status_dups[0]}; + + //instantiate and stitch dla_hld_fifo's with reduced width and slicing disabled. last sub-FIFO may not have the full SLICE_WIDTH of data, in which case remainder is used + for (z = 0; z < NUM_SLICES; z++) begin : gen_slices + localparam SLICE_WIDTH_LOCAL = ((z == NUM_SLICES-1) && (SLICE_REMAINDER !=0)) ? SLICE_REMAINDER : SLICE_WIDTH; + localparam REG_DATA_OUT_COUNT_LOCAL = (z == NUM_REGDATAOUT_SLICES-1 && REGDATAOUT_REMAINDER != 0) ? REGDATAOUT_REMAINDER : (z < NUM_REGDATAOUT_SLICES) ? SLICE_WIDTH : 0; + localparam TOT_STALL_IN_OUTSIDE_REGS = STALL_IN_OUTSIDE_REGS + ((STALL_IN_EARLINESS > 0) ? 1 : 0); + localparam TOT_VALID_IN_OUTSIDE_REGS = VALID_IN_OUTSIDE_REGS + ((VALID_IN_EARLINESS > 0) ? 1 : 0); + + //registering valid/stall mitigates fanout to different slices but decrements earliness + if (VALID_IN_EARLINESS > 0) begin + always @(posedge clock) begin + i_valid_dups[z] <= i_valid; + end + end else begin + assign i_valid_dups[z] = i_valid; + end + if (STALL_IN_EARLINESS > 0) begin + always @(posedge clock) begin + i_stall_dups[z] <= i_stall; + end + end else begin + assign i_stall_dups[z] = i_stall; + end + + dla_hld_fifo + #( + .WIDTH (SLICE_WIDTH_LOCAL), + .DEPTH (DEPTH), + + //occupancy + .ALMOST_EMPTY_CUTOFF (ALMOST_EMPTY_CUTOFF), + .ALMOST_FULL_CUTOFF (ALMOST_FULL_CUTOFF), + .INITIAL_OCCUPANCY (INITIAL_OCCUPANCY), + + //reset configuration + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (SYNCHRONIZE_RESET), + .RESET_EVERYTHING (RESET_EVERYTHING), + .RESET_EXTERNALLY_HELD (RESET_EXTERNALLY_HELD), + + //special configurations for higher fmax / lower area + .STALL_IN_EARLINESS (STALL_IN_EARLINESS - TOT_STALL_IN_OUTSIDE_REGS), + .VALID_IN_EARLINESS (VALID_IN_EARLINESS - TOT_VALID_IN_OUTSIDE_REGS), + .STALL_IN_OUTSIDE_REGS (TOT_STALL_IN_OUTSIDE_REGS), + .VALID_IN_OUTSIDE_REGS (TOT_VALID_IN_OUTSIDE_REGS), + .REGISTERED_DATA_OUT_COUNT (REG_DATA_OUT_COUNT_LOCAL), + .NEVER_OVERFLOWS (NEVER_OVERFLOWS), + .MAX_SLICE_WIDTH (0), //disable slicing for sub-FIFOs + + //special features that typically have an fmax penalty + .HOLD_DATA_OUT_WHEN_EMPTY (HOLD_DATA_OUT_WHEN_EMPTY), + .WRITE_AND_READ_DURING_FULL (WRITE_AND_READ_DURING_FULL), + + //interface selection + .USE_STALL_LATENCY_UPSTREAM (USE_STALL_LATENCY_UPSTREAM), + .USE_STALL_LATENCY_DOWNSTREAM (USE_STALL_LATENCY_DOWNSTREAM), + + //ram implementation for fifos that use ram for data storage + .RAM_BLOCK_TYPE (RAM_BLOCK_TYPE), + + //fifo selection + .STYLE (STYLE), + .enable_ecc (enable_ecc) + ) + dla_hld_fifo_inst + ( + .clock (clock), + .resetn (resetn), + + //upstream interface + .i_valid (i_valid_dups[z]), + .i_data (i_data[z*SLICE_WIDTH +: SLICE_WIDTH_LOCAL]), + .o_stall (o_stall_dups[z]), + .o_almost_full (o_almost_full_dups[z]), + + //downstream interface + .o_valid (o_valid_dups[z]), + .o_data (o_data[z*SLICE_WIDTH +: SLICE_WIDTH_LOCAL]), + .i_stall (i_stall_dups[z]), + .o_almost_empty (o_almost_empty_dups[z]), + .o_empty (o_empty_dups[z]), + + //other + .ecc_err_status ({ecc_err_status_dups[1][z], ecc_err_status_dups[0][z]}) + ); + end + + //for simulation testbench only + // synthesis translate_off + assign fifo_in_reset = gen_slices[0].dla_hld_fifo_inst.fifo_in_reset; + assign WRITE_TO_READ_LATENCY = gen_slices[0].dla_hld_fifo_inst.WRITE_TO_READ_LATENCY; + assign RESET_EXT_HELD_LENGTH = gen_slices[0].dla_hld_fifo_inst.RESET_EXT_HELD_LENGTH; + assign MAX_CLOCKS_TO_ENTER_SAFE_STATE = gen_slices[0].dla_hld_fifo_inst.MAX_CLOCKS_TO_ENTER_SAFE_STATE; + assign MAX_CLOCKS_TO_EXIT_SAFE_STATE = gen_slices[0].dla_hld_fifo_inst.MAX_CLOCKS_TO_EXIT_SAFE_STATE; + // synthesis translate_on + + end else begin + //width-slicing disabled -- instantiate one FIFO of requested type and width + + ///////////////////////////////////////////////////////////////////////////////////////// + // // + // Decide whether to use memory or register implementation for low/zero latency fifo // + // // + ///////////////////////////////////////////////////////////////////////////////////////// + + // this is based on ALM usage from standalone compiles, if one wants a better method then implement in the compiler by explicitly asking for reg or ram + // as the fifo gets wider, less depth is needed for it to be favorable to use a ram fifo + // if (width <= 1) use_ram_fifo if depth >= 24 + // else if (width <= 2) use_ram_fifo if depth >= 12 + // else if (width <= 4) use_ram_fifo if depth >= 10 + // and so on... + // note that at depth up to 4 we always use reg fifo + localparam int W = WIDTH; + localparam int D = DEPTH; + localparam bit USE_RAM_FIFO = (W<=1) ? (D>=24) : (W<=2) ? (D>=12) : (W<=4) ? (D>=10) : (W<=8) ? (D>=9) : (W<=12) ? (D>=8) : (W<=16) ? (D>=7) : (W<=32) ? (D>=6) : (D>=5); + + + + ///////////////////////////////////// + // // + // Convert to/from stall latency // + // // + ///////////////////////////////////// + + // the underlying fifos are implemented with legacy stall/valid semantics, may need to convert to/from stall latency + // naming convention: "i_" or "o_" can be stall latency or stall valid, "_in" or "_out" must only be stall valid + logic valid_in, stall_out, almost_full; + logic [WIDTH-1:0] data_in, data_out; + logic valid_out, stall_in, almost_empty, forced_read_out; + logic fifo_almost_empty, fifo_almost_full; + + //upstream interface + assign valid_in = i_valid; + assign data_in = i_data; + assign o_stall = (USE_STALL_LATENCY_UPSTREAM) ? almost_full : stall_out; + assign o_almost_full = (USE_STALL_LATENCY_UPSTREAM) ? 1'hx : almost_full; + + //downstream interface + assign o_valid = (USE_STALL_LATENCY_DOWNSTREAM) ? forced_read_out : valid_out; + assign o_data = data_out; + assign stall_in = i_stall; + assign o_almost_empty = almost_empty; + assign o_empty = ~valid_out; + + + + ///////////////////////////////////////////////////////////// + // // + // Special behavior for out-of-bounds occupancy tracking // + // // + ///////////////////////////////////////////////////////////// + + // in stall latency the almost empty cutoff is set based on round-trip latency starting at an upstream fifo almost empty, through sync (slow read/fast read), and back to that fifo's stall + // it is legal for this latency to be larger than the upstream fifo's capacity, in which case the sync will always operate in slow read mode + // the underlying fifos do not allow this (the almost empty threshold would be a negative value), so legalize the ALMOST_EMPTY_CUTOFF parameter to the underlying fifos and assign o_almost_empty = 1 + // likewise this behavior extends to almost full in case we ever need a slow write mode for desync + + localparam FIFO_ALMOST_EMPTY_CUTOFF = (ALMOST_EMPTY_CUTOFF > DEPTH) ? 0 : ALMOST_EMPTY_CUTOFF; + assign almost_empty = (ALMOST_EMPTY_CUTOFF > DEPTH) ? 1'b1 : fifo_almost_empty; + + localparam FIFO_ALMOST_FULL_CUTOFF = (ALMOST_FULL_CUTOFF > DEPTH) ? 0 : ALMOST_FULL_CUTOFF; + assign almost_full = (ALMOST_FULL_CUTOFF > DEPTH) ? 1'b1 : fifo_almost_full; + + + + if (((STYLE == "zl") && !USE_RAM_FIFO) || (STYLE == "zlreg")) begin : zlreg + + dla_acl_zero_latency_fifo + #( + //basic config + .WIDTH (WIDTH), + .DEPTH (DEPTH), + + //occupancy + .ALMOST_EMPTY_CUTOFF (FIFO_ALMOST_EMPTY_CUTOFF), + .ALMOST_FULL_CUTOFF (FIFO_ALMOST_FULL_CUTOFF), + .INITIAL_OCCUPANCY (INITIAL_OCCUPANCY), + + //reset + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (SYNCHRONIZE_RESET), + .RESET_EVERYTHING (RESET_EVERYTHING), + .RESET_EXTERNALLY_HELD (RESET_EXTERNALLY_HELD), + + //special config for high fmax / lower area + .STALL_IN_EARLINESS (STALL_IN_EARLINESS), + .VALID_IN_EARLINESS (VALID_IN_EARLINESS), + .REGISTERED_DATA_OUT_COUNT (REGISTERED_DATA_OUT_COUNT), + .NEVER_OVERFLOWS (NEVER_OVERFLOWS), + .STALL_IN_OUTSIDE_REGS (STALL_IN_OUTSIDE_REGS), + .VALID_IN_OUTSIDE_REGS (VALID_IN_OUTSIDE_REGS), + + //special features with fmax penalty + .HOLD_DATA_OUT_WHEN_EMPTY (HOLD_DATA_OUT_WHEN_EMPTY), + .WRITE_AND_READ_DURING_FULL (WRITE_AND_READ_DURING_FULL) + ) + dla_acl_zero_latency_fifo_inst + ( + .clock (clock), + .resetn (resetn), + + //write interface + .valid_in (valid_in), + .data_in (data_in), + .stall_out (stall_out), + .almost_full (fifo_almost_full), + + //read interface + .valid_out (valid_out), + .data_out (data_out), + .stall_in (stall_in), + .almost_empty (fifo_almost_empty), + .forced_read_out (forced_read_out) + ); + assign ecc_err_status = 2'h0; + + //for simulation testbench only + // synthesis translate_off + assign fifo_in_reset = dla_acl_zero_latency_fifo_inst.fifo_in_reset; + assign WRITE_TO_READ_LATENCY = dla_acl_zero_latency_fifo_inst.WRITE_TO_READ_LATENCY; + assign RESET_EXT_HELD_LENGTH = dla_acl_zero_latency_fifo_inst.RESET_EXT_HELD_LENGTH; + assign MAX_CLOCKS_TO_ENTER_SAFE_STATE = dla_acl_zero_latency_fifo_inst.MAX_CLOCKS_TO_ENTER_SAFE_STATE; + assign MAX_CLOCKS_TO_EXIT_SAFE_STATE = dla_acl_zero_latency_fifo_inst.MAX_CLOCKS_TO_EXIT_SAFE_STATE; + // synthesis translate_on + + end + if (((STYLE == "ll") && !USE_RAM_FIFO) || (STYLE == "llreg")) begin : llreg + + dla_acl_low_latency_fifo + #( + //basic config + .WIDTH (WIDTH), + .DEPTH (DEPTH), + + //occupancy + .ALMOST_EMPTY_CUTOFF (FIFO_ALMOST_EMPTY_CUTOFF), + .ALMOST_FULL_CUTOFF (FIFO_ALMOST_FULL_CUTOFF), + .INITIAL_OCCUPANCY (INITIAL_OCCUPANCY), + + //reset + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (SYNCHRONIZE_RESET), + .RESET_EVERYTHING (RESET_EVERYTHING), + .RESET_EXTERNALLY_HELD (RESET_EXTERNALLY_HELD), + + //special config for high fmax / lower area + .STALL_IN_EARLINESS (STALL_IN_EARLINESS), + .VALID_IN_EARLINESS (VALID_IN_EARLINESS), + .REGISTERED_DATA_OUT_COUNT (REGISTERED_DATA_OUT_COUNT), + .NEVER_OVERFLOWS (NEVER_OVERFLOWS), + .STALL_IN_OUTSIDE_REGS (STALL_IN_OUTSIDE_REGS), + .VALID_IN_OUTSIDE_REGS (VALID_IN_OUTSIDE_REGS), + + //special features with fmax penalty + .HOLD_DATA_OUT_WHEN_EMPTY (HOLD_DATA_OUT_WHEN_EMPTY), + .WRITE_AND_READ_DURING_FULL (WRITE_AND_READ_DURING_FULL) + ) + dla_acl_low_latency_fifo_inst + ( + .clock (clock), + .resetn (resetn), + + //write interface + .valid_in (valid_in), + .data_in (data_in), + .stall_out (stall_out), + .almost_full (fifo_almost_full), + + //read interface + .valid_out (valid_out), + .data_out (data_out), + .stall_in (stall_in), + .almost_empty (fifo_almost_empty), + .forced_read_out (forced_read_out), + + //occupancy + .occ (), + .occ_low_reset (), + .occ_high_reset () + ); + assign ecc_err_status = 2'h0; + + //for simulation testbench only + // synthesis translate_off + assign fifo_in_reset = dla_acl_low_latency_fifo_inst.fifo_in_reset; + assign WRITE_TO_READ_LATENCY = dla_acl_low_latency_fifo_inst.WRITE_TO_READ_LATENCY; + assign RESET_EXT_HELD_LENGTH = dla_acl_low_latency_fifo_inst.RESET_EXT_HELD_LENGTH; + assign MAX_CLOCKS_TO_ENTER_SAFE_STATE = dla_acl_low_latency_fifo_inst.MAX_CLOCKS_TO_ENTER_SAFE_STATE; + assign MAX_CLOCKS_TO_EXIT_SAFE_STATE = dla_acl_low_latency_fifo_inst.MAX_CLOCKS_TO_EXIT_SAFE_STATE; + // synthesis translate_on + + end + if (((STYLE == "zl") && USE_RAM_FIFO) || (STYLE == "zlram")) begin : zlram + + dla_acl_latency_zero_ram_fifo + #( + //basic config + .WIDTH (WIDTH), + .DEPTH (DEPTH), + + //occupancy + .ALMOST_EMPTY_CUTOFF (FIFO_ALMOST_EMPTY_CUTOFF), + .ALMOST_FULL_CUTOFF (FIFO_ALMOST_FULL_CUTOFF), + .INITIAL_OCCUPANCY (INITIAL_OCCUPANCY), + + //reset + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (SYNCHRONIZE_RESET), + .RESET_EVERYTHING (RESET_EVERYTHING), + .RESET_EXTERNALLY_HELD (RESET_EXTERNALLY_HELD), + + //special config for high fmax / lower area + .STALL_IN_EARLINESS (STALL_IN_EARLINESS), + .VALID_IN_EARLINESS (VALID_IN_EARLINESS), + .REGISTERED_DATA_OUT_COUNT (REGISTERED_DATA_OUT_COUNT), + .NEVER_OVERFLOWS (NEVER_OVERFLOWS), + .STALL_IN_OUTSIDE_REGS (STALL_IN_OUTSIDE_REGS), + .VALID_IN_OUTSIDE_REGS (VALID_IN_OUTSIDE_REGS), + + //special features with fmax penalty + .HOLD_DATA_OUT_WHEN_EMPTY (HOLD_DATA_OUT_WHEN_EMPTY), + .WRITE_AND_READ_DURING_FULL (WRITE_AND_READ_DURING_FULL), + + //ram implementation + .RAM_BLOCK_TYPE (RAM_BLOCK_TYPE), + + //error correction code + .enable_ecc (enable_ecc) + ) + dla_acl_latency_zero_ram_fifo_inst + ( + .clock (clock), + .resetn (resetn), + + //write interface + .valid_in (valid_in), + .data_in (data_in), + .stall_out (stall_out), + .almost_full (fifo_almost_full), + + //read interface + .valid_out (valid_out), + .data_out (data_out), + .stall_in (stall_in), + .almost_empty (fifo_almost_empty), + .forced_read_out (forced_read_out), + .ecc_err_status (ecc_err_status) + ); + + //for simulation testbench only + // synthesis translate_off + assign fifo_in_reset = dla_acl_latency_zero_ram_fifo_inst.fifo_in_reset; + assign WRITE_TO_READ_LATENCY = dla_acl_latency_zero_ram_fifo_inst.WRITE_TO_READ_LATENCY; + assign RESET_EXT_HELD_LENGTH = dla_acl_latency_zero_ram_fifo_inst.RESET_EXT_HELD_LENGTH; + assign MAX_CLOCKS_TO_ENTER_SAFE_STATE = dla_acl_latency_zero_ram_fifo_inst.MAX_CLOCKS_TO_ENTER_SAFE_STATE; + assign MAX_CLOCKS_TO_EXIT_SAFE_STATE = dla_acl_latency_zero_ram_fifo_inst.MAX_CLOCKS_TO_EXIT_SAFE_STATE; + // synthesis translate_on + + end + if (((STYLE == "ll") && USE_RAM_FIFO) || (STYLE == "llram")) begin : llram + + dla_acl_latency_one_ram_fifo + #( + //basic config + .WIDTH (WIDTH), + .DEPTH (DEPTH), + + //occupancy + .ALMOST_EMPTY_CUTOFF (FIFO_ALMOST_EMPTY_CUTOFF), + .ALMOST_FULL_CUTOFF (FIFO_ALMOST_FULL_CUTOFF), + .INITIAL_OCCUPANCY (INITIAL_OCCUPANCY), + + //reset + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (SYNCHRONIZE_RESET), + .RESET_EVERYTHING (RESET_EVERYTHING), + .RESET_EXTERNALLY_HELD (RESET_EXTERNALLY_HELD), + + //special config for high fmax / lower area + .STALL_IN_EARLINESS (STALL_IN_EARLINESS), + .VALID_IN_EARLINESS (VALID_IN_EARLINESS), + .REGISTERED_DATA_OUT_COUNT (REGISTERED_DATA_OUT_COUNT), + .NEVER_OVERFLOWS (NEVER_OVERFLOWS), + .STALL_IN_OUTSIDE_REGS (STALL_IN_OUTSIDE_REGS), + .VALID_IN_OUTSIDE_REGS (VALID_IN_OUTSIDE_REGS), + + //special features with fmax penalty + .HOLD_DATA_OUT_WHEN_EMPTY (HOLD_DATA_OUT_WHEN_EMPTY), + .WRITE_AND_READ_DURING_FULL (WRITE_AND_READ_DURING_FULL), + + //ram implementation + .RAM_BLOCK_TYPE (RAM_BLOCK_TYPE), + + //error correction code + .enable_ecc (enable_ecc) + ) + dla_acl_latency_one_ram_fifo_inst + ( + .clock (clock), + .resetn (resetn), + + //write interface + .valid_in (valid_in), + .data_in (data_in), + .stall_out (stall_out), + .almost_full (fifo_almost_full), + + //read interface + .valid_out (valid_out), + .data_out (data_out), + .stall_in (stall_in), + .almost_empty (fifo_almost_empty), + .forced_read_out (forced_read_out), + .ecc_err_status (ecc_err_status) + ); + + //for simulation testbench only + // synthesis translate_off + assign fifo_in_reset = dla_acl_latency_one_ram_fifo_inst.fifo_in_reset; + assign WRITE_TO_READ_LATENCY = dla_acl_latency_one_ram_fifo_inst.WRITE_TO_READ_LATENCY; + assign RESET_EXT_HELD_LENGTH = dla_acl_latency_one_ram_fifo_inst.RESET_EXT_HELD_LENGTH; + assign MAX_CLOCKS_TO_ENTER_SAFE_STATE = dla_acl_latency_one_ram_fifo_inst.MAX_CLOCKS_TO_ENTER_SAFE_STATE; + assign MAX_CLOCKS_TO_EXIT_SAFE_STATE = dla_acl_latency_one_ram_fifo_inst.MAX_CLOCKS_TO_EXIT_SAFE_STATE; + // synthesis translate_on + + end + if (STYLE == "ms") begin : ms + + dla_acl_mid_speed_fifo + #( + //basic config + .WIDTH (WIDTH), + .DEPTH (DEPTH), + + //occupancy + .ALMOST_EMPTY_CUTOFF (FIFO_ALMOST_EMPTY_CUTOFF), + .ALMOST_FULL_CUTOFF (FIFO_ALMOST_FULL_CUTOFF), + .INITIAL_OCCUPANCY (INITIAL_OCCUPANCY), + + //reset + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (SYNCHRONIZE_RESET), + .RESET_EVERYTHING (RESET_EVERYTHING), + .RESET_EXTERNALLY_HELD (RESET_EXTERNALLY_HELD), + + //special config for high fmax / lower area + .STALL_IN_EARLINESS (STALL_IN_EARLINESS), + .VALID_IN_EARLINESS (VALID_IN_EARLINESS), + .NEVER_OVERFLOWS (NEVER_OVERFLOWS), + .STALL_IN_OUTSIDE_REGS (STALL_IN_OUTSIDE_REGS), + .VALID_IN_OUTSIDE_REGS (VALID_IN_OUTSIDE_REGS), + + //special features with fmax penalty + .HOLD_DATA_OUT_WHEN_EMPTY (HOLD_DATA_OUT_WHEN_EMPTY), + .WRITE_AND_READ_DURING_FULL (WRITE_AND_READ_DURING_FULL), + + //ram implementation + .RAM_BLOCK_TYPE (RAM_BLOCK_TYPE), + + //error correction code + .enable_ecc (enable_ecc) + ) + dla_acl_mid_speed_fifo_inst + ( + .clock (clock), + .resetn (resetn), + + //write interface + .valid_in (valid_in), + .data_in (data_in), + .stall_out (stall_out), + .almost_full (fifo_almost_full), + + //read interface + .valid_out (valid_out), + .data_out (data_out), + .stall_in (stall_in), + .almost_empty (fifo_almost_empty), + .forced_read_out (forced_read_out), + .ecc_err_status (ecc_err_status) + ); + + //for simulation testbench only + // synthesis translate_off + assign fifo_in_reset = dla_acl_mid_speed_fifo_inst.fifo_in_reset; + assign WRITE_TO_READ_LATENCY = dla_acl_mid_speed_fifo_inst.WRITE_TO_READ_LATENCY; + assign RESET_EXT_HELD_LENGTH = dla_acl_mid_speed_fifo_inst.RESET_EXT_HELD_LENGTH; + assign MAX_CLOCKS_TO_ENTER_SAFE_STATE = dla_acl_mid_speed_fifo_inst.MAX_CLOCKS_TO_ENTER_SAFE_STATE; + assign MAX_CLOCKS_TO_EXIT_SAFE_STATE = dla_acl_mid_speed_fifo_inst.MAX_CLOCKS_TO_EXIT_SAFE_STATE; + // synthesis translate_on + + end + if (STYLE == "hs") begin : hs + + dla_acl_high_speed_fifo + #( + //basic config + .WIDTH (WIDTH), + .DEPTH (DEPTH), + + //occupancy + .ALMOST_EMPTY_CUTOFF (FIFO_ALMOST_EMPTY_CUTOFF), + .ALMOST_FULL_CUTOFF (FIFO_ALMOST_FULL_CUTOFF), + .INITIAL_OCCUPANCY (INITIAL_OCCUPANCY), + + //reset + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (SYNCHRONIZE_RESET), + .RESET_EVERYTHING (RESET_EVERYTHING), + .RESET_EXTERNALLY_HELD (RESET_EXTERNALLY_HELD), + + //special config for high fmax / lower area + .STALL_IN_EARLINESS (STALL_IN_EARLINESS), + .VALID_IN_EARLINESS (VALID_IN_EARLINESS), + .REGISTERED_DATA_OUT_COUNT (REGISTERED_DATA_OUT_COUNT), + .NEVER_OVERFLOWS (NEVER_OVERFLOWS), + .STALL_IN_OUTSIDE_REGS (STALL_IN_OUTSIDE_REGS), + .VALID_IN_OUTSIDE_REGS (VALID_IN_OUTSIDE_REGS), + + //special features with fmax penalty + .HOLD_DATA_OUT_WHEN_EMPTY (HOLD_DATA_OUT_WHEN_EMPTY), + .WRITE_AND_READ_DURING_FULL (WRITE_AND_READ_DURING_FULL), + + //ram implementation + .RAM_BLOCK_TYPE (RAM_BLOCK_TYPE), + + .enable_ecc(enable_ecc) + ) + dla_acl_high_speed_fifo_inst + ( + .clock (clock), + .resetn (resetn), + + //write interface + .valid_in (valid_in), + .data_in (data_in), + .stall_out (stall_out), + .almost_full (fifo_almost_full), + + //read interface + .valid_out (valid_out), + .data_out (data_out), + .stall_in (stall_in), + .almost_empty (fifo_almost_empty), + .forced_read_out (forced_read_out), + .ecc_err_status (ecc_err_status) + ); + + //for simulation testbench only + // synthesis translate_off + assign fifo_in_reset = dla_acl_high_speed_fifo_inst.fifo_in_reset; + assign WRITE_TO_READ_LATENCY = dla_acl_high_speed_fifo_inst.WRITE_TO_READ_LATENCY; + assign RESET_EXT_HELD_LENGTH = dla_acl_high_speed_fifo_inst.RESET_EXT_HELD_LENGTH; + assign MAX_CLOCKS_TO_ENTER_SAFE_STATE = dla_acl_high_speed_fifo_inst.MAX_CLOCKS_TO_ENTER_SAFE_STATE; + assign MAX_CLOCKS_TO_EXIT_SAFE_STATE = dla_acl_high_speed_fifo_inst.MAX_CLOCKS_TO_EXIT_SAFE_STATE; + // synthesis translate_on + + end + end + endgenerate + + //get width of each individual slice if width-slicing is used + //TODO: need to determine slice width to reflect device BRAMs, but for now just use max_slice_width + //tracked by Case:578435 + function int get_slice_width(int max_slice_width); + automatic int slice_width = max_slice_width; + return slice_width; + endfunction + +endmodule + +`default_nettype wire diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_fifo_zero_width.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_fifo_zero_width.sv new file mode 100644 index 0000000..88f05fa --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_fifo_zero_width.sv @@ -0,0 +1,113 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +// this is a wrapper around dla_hld_fifo using WIDTH=0 and without i_data and o_data ports so that backend doesn't complain about unused ports
+// for a description of the parameters and ports, refer to dla_hld_fifo.sv
+// beware if this is used for occupancy tracking with STYLE = "ll" or "zl", occupancy tracking is 1-hot, not ideal for large DEPTH
+// setting the STYLE parameter will affect write-to-read latency, and this affects e.g. how soon almost empty deasserts due to a write
+
+
+`default_nettype none
+
+module dla_hld_fifo_zero_width #(
+ parameter int DEPTH,
+ parameter int ALMOST_EMPTY_CUTOFF = 0,
+ parameter int ALMOST_FULL_CUTOFF = 0,
+ parameter int INITIAL_OCCUPANCY = 0,
+ parameter bit ASYNC_RESET = 0,
+ parameter bit SYNCHRONIZE_RESET = 1,
+ parameter bit RESET_EVERYTHING = 0,
+ parameter bit RESET_EXTERNALLY_HELD = 1,
+ parameter int STALL_IN_EARLINESS = 0,
+ parameter int VALID_IN_EARLINESS = 0,
+ parameter int REGISTERED_DATA_OUT_COUNT = 0,
+ parameter bit NEVER_OVERFLOWS = 0,
+ parameter bit HOLD_DATA_OUT_WHEN_EMPTY = 0,
+ parameter bit WRITE_AND_READ_DURING_FULL = 0,
+ parameter bit USE_STALL_LATENCY_UPSTREAM = 0,
+ parameter bit USE_STALL_LATENCY_DOWNSTREAM = 0,
+ parameter string RAM_BLOCK_TYPE = "AUTO",
+ parameter string STYLE = "hs",
+ // Enable error correction coding. This module doesn't really have storage, so it doesn't
+ // really need ecc, but to avoid the coverage tests to flag it, ecc param and port is added.
+ parameter enable_ecc = "FALSE"
+)
+(
+ input wire clock,
+ input wire resetn,
+ input wire i_valid,
+ output logic o_stall,
+ output logic o_almost_full,
+ output logic o_valid,
+ input wire i_stall,
+ output logic o_almost_empty,
+ output logic o_empty,
+ output logic [1:0] ecc_err_status // ecc status signals
+);
+
+ // for simulation testbench only, these are properties of the fifo which are consumed by the testbench
+ // synthesis translate_off
+ logic fifo_in_reset;
+ int WRITE_TO_READ_LATENCY;
+ int RESET_EXT_HELD_LENGTH;
+ int MAX_CLOCKS_TO_ENTER_SAFE_STATE;
+ int MAX_CLOCKS_TO_EXIT_SAFE_STATE;
+ assign fifo_in_reset = dla_hld_fifo_inst.fifo_in_reset;
+ assign WRITE_TO_READ_LATENCY = dla_hld_fifo_inst.WRITE_TO_READ_LATENCY;
+ assign RESET_EXT_HELD_LENGTH = dla_hld_fifo_inst.RESET_EXT_HELD_LENGTH;
+ assign MAX_CLOCKS_TO_ENTER_SAFE_STATE = dla_hld_fifo_inst.MAX_CLOCKS_TO_ENTER_SAFE_STATE;
+ assign MAX_CLOCKS_TO_EXIT_SAFE_STATE = dla_hld_fifo_inst.MAX_CLOCKS_TO_EXIT_SAFE_STATE;
+ // synthesis translate_on
+
+ dla_hld_fifo
+ #(
+ .WIDTH (0),
+ .DEPTH (DEPTH),
+ .ALMOST_EMPTY_CUTOFF (ALMOST_EMPTY_CUTOFF),
+ .ALMOST_FULL_CUTOFF (ALMOST_FULL_CUTOFF),
+ .INITIAL_OCCUPANCY (INITIAL_OCCUPANCY),
+ .ASYNC_RESET (ASYNC_RESET),
+ .SYNCHRONIZE_RESET (SYNCHRONIZE_RESET),
+ .RESET_EVERYTHING (RESET_EVERYTHING),
+ .RESET_EXTERNALLY_HELD (RESET_EXTERNALLY_HELD),
+ .REGISTERED_DATA_OUT_COUNT (REGISTERED_DATA_OUT_COUNT),
+ .NEVER_OVERFLOWS (NEVER_OVERFLOWS),
+ .STALL_IN_EARLINESS (STALL_IN_EARLINESS),
+ .VALID_IN_EARLINESS (VALID_IN_EARLINESS),
+ .HOLD_DATA_OUT_WHEN_EMPTY (HOLD_DATA_OUT_WHEN_EMPTY),
+ .WRITE_AND_READ_DURING_FULL (WRITE_AND_READ_DURING_FULL),
+ .USE_STALL_LATENCY_UPSTREAM (USE_STALL_LATENCY_UPSTREAM),
+ .USE_STALL_LATENCY_DOWNSTREAM (USE_STALL_LATENCY_DOWNSTREAM),
+ .RAM_BLOCK_TYPE (RAM_BLOCK_TYPE),
+ .STYLE (STYLE),
+ .enable_ecc (enable_ecc)
+ )
+ dla_hld_fifo_inst
+ (
+ .clock (clock),
+ .resetn (resetn),
+ .i_valid (i_valid),
+ .i_data (), //unused
+ .o_stall (o_stall),
+ .o_almost_full (o_almost_full),
+ .o_valid (o_valid),
+ .o_data (), //unused
+ .i_stall (i_stall),
+ .o_almost_empty (o_almost_empty),
+ .o_empty (o_empty),
+ .ecc_err_status (ecc_err_status)
+ );
+
+endmodule
+
+`default_nettype wire
diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_global_load_store.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_global_load_store.sv new file mode 100644 index 0000000..85de25b --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_global_load_store.sv @@ -0,0 +1,960 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// // +// HLD GLOBAL LOAD STORE // +// Architected and implemented by: Jason Thong // +// // +// This is the top-level module for the feature-based LSU (load store unit). Unlike previous LSU implementations in which the implementation defined the features and // +// the compiler had to choose the best implementation for the desired features, this LSU allows one to select the features and the implementation just deals with it. // +// // +// This LSU was optimized for high latency stallable memory access. It will function properly with low latency and/or non-stallable memory, however there are other // +// implementations which use significantly less area for that use case. // +// // +// This module is a wrapper around the core LSU itself, and the following features are provided in this wrapper: // +// 1. Optional width adaption between the kernel data path width and the core LSU's kernel data width // +// - this enables the kernel width to be arbitrarily larger than the memory width, this feature is necessary if kernel width > 2 * memory width since the core // +// LSU can only handle one kernel word spanning up to 3 memory words // +// - even if kernel width is not that wide, may still want this feature to save area at the expense of throughput // +// 2. Optional width adaption between the memory data path width and the core LSU's memory data width // +// - one can save lots of area by narrowing the typically wide fifos at the memory interface, this may result in some throughput loss although it should be small // +// if the kernel width is significantly smaller than the memory width, beware that // +// - burst coalescing will be disabled if memory width adaption is used, supporting both burst coalescing and memory width adaption requires the wide fifos that // +// we were trying to remove in the first place by using width adaption // +// - memory width adaption results in inefficient use of memory bandwidth, e.g. if the core LSU readdata is one quarter the width of the memory readdata, then // +// three quarters of the data read is discarded and only one quarter of the readdata is returned to the core LSU // +// 3. Optional cache, only for read LSU // +// - this is a bump-in-the-wire between the core LSU memory interface and the actual memory interface, there must be a positive edge on the i_flush_cache signal // +// every time the contents of memory can change, typically this is every time a kernel starts // +// - the cache data width is a memory word, if memory width adaption is used then the cache shares the same memory width as the core LSU // +// - cache is most beneficial when the access pattern reuses data that was read recently, cache hits mean less demand on global memory bandwidth (free it up for // +// other LSUs in the system) and the kernel data path will have lower latency (possibly useful if the nature of the design prevents lots of outstanding // +// transactions to global memory), obviously this comes at an expense of increased area, both registers and M20K // +// 4. Allow valids to be released to kernel downstream before the corresponding writeack // +// - this has no effect on o_active (which must deassert before declaring the kernel is done) and has no effect on the core LSU // +// - this feature is implemented for legacy reasons, if there is no dependency on the data written then the compiler should connect stall/valid (or stall latency) // +// around the LSU instead of through the LSU, e.g the LSU's kernel downstream interface should be dangling with i_stall=0 and o_vaild ignored, unfortunately // +// there are cases where the compiler is still wiring the stall/valid handshaking through the LSU, so this wrapper implements the shortcut // +// // +// The features of the core LSU itself are described the comments at the beginning of dla_hld_lsu.sv. // +// // +// Required files: // +// - LSU: dla_hld_global_load_store.sv dla_hld_lsu_pkg.sv dla_hld_lsu.sv dla_hld_lsu_burst_coalescer.sv dla_hld_lsu_coalescer_dynamic_timeout.sv // +// dla_hld_lsu_data_aligner.sv dla_hld_lsu_read_cache.sv dla_hld_lsu_read_data_alignment.sv dla_hld_lsu_unaligned_controller.sv dla_hld_lsu_word_coalescer.sv // +// dla_hld_lsu_write_data_alignment.sv dla_hld_lsu_write_kernel_downstream.sv // +// - fifo: dla_hld_fifo.sv dla_acl_low_latency_fifo.sv dla_acl_mid_speed_fifo.sv dla_acl_lfsr.sv dla_acl_tessellated_incr_decr_threshold.sv // +// - other: dla_acl_parameter_assert.svh dla_acl_reset_handler.sv dla_acl_burst_splitter.sv dla_acl_shift_register_no_reset.sv // +// // +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +`default_nettype none +`include "dla_acl_parameter_assert.svh" + +module dla_hld_global_load_store +import dla_hld_lsu_pkg::*; +#( + //LSU type + parameter bit READ, //0 = write lsu, 1 = read lsu + + //reset configuration, the reset is always synchronized before consumption (no option to disable this), but once synchronized one may choose how registers consume that synchronized reset + parameter bit ASYNC_RESET, //0 = registers consume reset synchronously, 1 = registers consume reset asynchronously + + //address configuration is the same for kernel interface and memory interface + parameter int ADDR_WIDTH, //width of address bus, for addresses that are byte addresses + parameter int ADDR_ALIGNMENT_BITS, //indicates how many least significant bits of i_address are known to be 0, e.g. set this parameter to 3 if kernel accesses are 8-byte aligned + + //kernel interface + parameter int KER_DATA_BYTES, //width of kernel data path in bytes, does not need to be a power of 2 + parameter int KER_DATA_BYTES_INTERNAL, //width adaptation can be done between kernel data path and core LSU kernel interface, this is the core LSU's kernel data width in bytes, need not be a power of 2 + + //memory interface + parameter int MEM_DATA_BYTES, //width of memory data path in bytes, must be a power of 2 + parameter int MEM_DATA_BYTES_INTERNAL, //width adaptation can be done between memory data path and core LSU memory interface, this is the core LSU's memory data width in bytes, must be a power of 2 + parameter int BURSTCOUNT_WIDTH, //width of avalon burst count signal, max burst size is 2**(BURSTCOUNT_WIDTH-1) + parameter bit USE_AXI, //0 = use AvalonMM, 1 = use AXI + parameter int MEM_READDATA_PIPELINING, //how many pipelining stages to add to read response data, read LSU only + + //stall latency can be configured independently for kernel upstream and kernel downstream, there is no stall latency available for memory interface + //there is no support for stall in earliness, mid speed fifo doesn't get any smaller registering i_stall outside of the fifo will give a similar fmax boost anyways + parameter int KER_UP_STALL_LATENCY, //0 = use stall/valid, 1 or larger = use stall latency and the value indicates the upstream roundtrip latency (from o_stall to i_valid) + parameter int KER_DOWN_STALL_LATENCY, //0 = use stall/valid, 1 or larger = use stall latency and the value indicates the downstream roundtrip latency (from i_stall to o_valid) + + //amount of pipelining in data aligner + parameter int DATA_ALIGNER_MUX_PER_PIPE, //0 = use comb logic for data alignment mux, 1 or more = max number of 2:1 muxes before a pipeline stage is added, e.g. 2 means up to 4:1 mux between reg + + //coalescing -- there is no option to set the timeout because it is dynamic, timeout increases if could have coalesced but timed out, timeout decreases if access pattern looks like random access + parameter bit ENABLE_WORD_COALESCE, //whether to coalesce kernel words together within the same memory word + parameter bit ENABLE_BURST_COALESCE, //whether to coalesce sequential memory words together to make a burst, feature will be disabled (parameter value ignored) if width adaption on the memory interface is used + + //reduce area if certain functionality is not needed + parameter bit USE_PREDICATE, //set to 0 if i_predicate is always 0, this will save some area + parameter bit USE_BYTE_ENABLE, //set to 0 if i_byteenable is always all ones, this will save some area, only write LSU consumes this parameter + + //legacy support + parameter bit USE_WRITE_ACK, //only affects write LSU, 0 means valids can be released to kernel downstream before that thread's data commits to memory, this bypass has no influence on the core LSU + + //throughput features + parameter bit HIGH_THROUGHPUT_MODE, //0 = use N clock cycles to process a kernel word that spans N memory words, 1 = use minimum amount of time to process kernel words, only matters if N >= 2 + parameter int CACHE_SIZE_BYTES //0 = no cache, otherwise this specifies the cache size in bytes which must be a power of 2, this can only be used with the read LSU +) ( + input wire clock, + input wire resetn, + + //side-band signals + input wire i_flush_cache, //if using read cache, must provide a positive edge on this signal any time the contents of memory could have changed, typically this is when a kernel starts + output logic o_active, //indicates that the LSU has accepted some threads from kernel upstream but not yet released them to kernel downstream + + //kernel upstream + input wire i_valid, //kernel upstream has a transaction available, LSU can but does not need to accept it if using stall valid, must accept it if using stall latency + output logic o_stall, //backpressure to kernel upstream + input wire [ADDR_WIDTH-1:0] i_address, //byte address, where should data be written to or read from in memory + input wire [8*KER_DATA_BYTES-1:0] i_writedata, //data to write to memory, only used by write LSU + input wire [KER_DATA_BYTES-1:0] i_byteenable, //byte enable for the write data, only used by write LSU + input wire i_predicate, //if 1 then don't perform the read or write, but still need to release this thread later on o_valid + + //kernel downstream + output logic o_valid, //LSU has a transaction available, kernel downstream can but does not need to accept it if using stall valid, must accept it if using stall latency + input wire i_stall, //backpressure from kernel downstream + output logic [8*KER_DATA_BYTES-1:0] o_readdata, //data read from memory, only used by read LSU + output logic o_empty, //LSU does not have a transaction available for kernel downstream, meant to be used with stall latency + output logic o_almost_empty, //LSU downstream interface does not have at least KER_DOWN_STALL_LATENCY transactions ready to be released + + //memory interface if USE_AXI = 0 + output logic avm_write, //avalon write request, accepted only if ~avm_waitrequest + output logic avm_read, //avalon read request, accepted only if ~avm_waitrequest + output logic [ADDR_WIDTH-1:0] avm_address, //byte address, avalon spec says this must be word aligned (the bottom bits for within a memory word must be 0) + output logic [BURSTCOUNT_WIDTH-1:0] avm_burstcount, //how large is the burst, tied to 1 if burst coalescing is not used + output logic [8*MEM_DATA_BYTES-1:0] avm_writedata, //data to write to memory, only used by write LSU + output logic [MEM_DATA_BYTES-1:0] avm_byteenable, //byte enable for the write data, only used by write LSU + input wire avm_waitrequest, //avalon backpressure + input wire avm_writeack, //write has commited to memory, this must assert once per memory word (not one per burst like the avalon spec), only used by write LSU + input wire avm_readdatavalid, //read data is being returned now, must accept it or it will be lost, only used by read LSU + input wire [8*MEM_DATA_BYTES-1:0] avm_readdata, //data read from memory, only used by read LSU + + //memory interface if USE_AXI = 1 + output logic axi_arvalid, //axi read request, accepted only if axi_arready + output logic [ADDR_WIDTH-1:0] axi_araddr, //byte address, axi spec does not require word alignment but this will be word aligned since avalon requires it + output logic [BURSTCOUNT_WIDTH-2:0] axi_arlen, //how many words is the burst = axi_arlen+1, tied to 0 if burst coalescing is not used + input wire axi_arready, //axi read request can be accepted + input wire axi_rvalid, //axi read response, accepted only if axi_rready + input wire [8*MEM_DATA_BYTES-1:0] axi_rdata, //data read from memory, only used by read LSU + output logic axi_rready, //axi read response can be accepted -- this signal is tied to 1'b1 since avalon cannot backpressure read data + output logic axi_awvalid, //axi write address request, accepted only if axi_awready, only 1 per burst + output logic [ADDR_WIDTH-1:0] axi_awaddr, //byte address, axi spec does not require word alignment but this will be word aligned since avalon requires it + output logic [BURSTCOUNT_WIDTH-2:0] axi_awlen, //how many words is the burst = axi_awlen+1, tied to 0 if burst coalescing is not used + input wire axi_awready, //axi write address request can be accepted + output logic axi_wvalid, //axi write data request, asserted N times for each of the N words within one burst + output logic [8*MEM_DATA_BYTES-1:0] axi_wdata, //data to write to memory, only used by write LSU + output logic [MEM_DATA_BYTES-1:0] axi_wstrb, //byte enable for the write data, only used by write LSU + output logic axi_wlast, //indicates the last word in a burst + input wire axi_wready, //axi write data request can be accepted + input wire axi_bvalid, //axi write response, accepted only if axi_bready + output logic axi_bready //axi write response can be accepted -- this signal is tied to 1'b1 since avalon cannot backpressure writeack +); + + + ///////////////////////////////// + // Parameter Legality Checks // + ///////////////////////////////// + generate + //memory width needs to be a power of 2, LSU memory data width cannot be larger than actual memory data width + //also didn't want to deal with case of address bits within a memory word being 0, there is no real use case for this + `DLA_ACL_PARAMETER_ASSERT(MEM_DATA_BYTES == 2**$clog2(MEM_DATA_BYTES)) + `DLA_ACL_PARAMETER_ASSERT(MEM_DATA_BYTES_INTERNAL == 2**$clog2(MEM_DATA_BYTES_INTERNAL)) + `DLA_ACL_PARAMETER_ASSERT(MEM_DATA_BYTES >= MEM_DATA_BYTES_INTERNAL) + `DLA_ACL_PARAMETER_ASSERT(MEM_DATA_BYTES >= 2) + `DLA_ACL_PARAMETER_ASSERT(MEM_DATA_BYTES_INTERNAL >= 2) + + //avalon spec requires burst count width be at least 1 + `DLA_ACL_PARAMETER_ASSERT(BURSTCOUNT_WIDTH >= 1) + + //LSU kernel data width cannot be larger than actual kernel data width + `DLA_ACL_PARAMETER_ASSERT(KER_DATA_BYTES >= 1) + `DLA_ACL_PARAMETER_ASSERT(KER_DATA_BYTES_INTERNAL >= 1) + `DLA_ACL_PARAMETER_ASSERT(KER_DATA_BYTES >= KER_DATA_BYTES_INTERNAL) + + //core LSU only allows a kernel word to span 3 memory words, this can be enforced by not letting the kernel width be more than twice the memory width + `DLA_ACL_PARAMETER_ASSERT(KER_DATA_BYTES_INTERNAL <= 2*MEM_DATA_BYTES_INTERNAL) + + //ensure the address space size isn't something trivial + `DLA_ACL_PARAMETER_ASSERT(ADDR_WIDTH >= $clog2(MEM_DATA_BYTES + BURSTCOUNT_WIDTH-1)) + `DLA_ACL_PARAMETER_ASSERT(ADDR_WIDTH >= $clog2(KER_DATA_BYTES)) + + //cache can only be used with the read LSU, size must be a power of 2 + //also didn't want to deal with cache being the entire memory size, and supporting only 1 cache line, there is no real use case for either of these + `DLA_ACL_PARAMETER_ASSERT(CACHE_SIZE_BYTES == 0 || READ == 1) + `DLA_ACL_PARAMETER_ASSERT(CACHE_SIZE_BYTES == 0 || CACHE_SIZE_BYTES == 2**$clog2(CACHE_SIZE_BYTES)) + `DLA_ACL_PARAMETER_ASSERT(CACHE_SIZE_BYTES == 0 || CACHE_SIZE_BYTES >= 2*MEM_DATA_BYTES_INTERNAL) + `DLA_ACL_PARAMETER_ASSERT(CACHE_SIZE_BYTES == 0 || $clog2(CACHE_SIZE_BYTES) < ADDR_WIDTH) + endgenerate + + + + ///////////////////////// + // Special Constants // + ///////////////////////// + + //these constants are deliberately NOT exposed to the compiler because it is extremely unlikely the compiler can do anything smarter + + //special constants that maximize usage of the hardened resources inside the FPGA + localparam int MLAB_FIFO_DEPTH = 32; //use a shallow fifo if handshaking is expected to take a few clocks (or if capacity can be borrowed from a nearby deep fifo), if we need an MLAB may as well use all of it + localparam int M20K_WIDE_FIFO_DEPTH = 512; //use a deep fifo if handshaking is expected to take hundreds of clocks e.g. going off chip, for wide data path use M20K in shallowest mode, but may as well use all depth available + localparam int M20K_NARROW_FIFO_DEPTH = 2048; //if we need a deep fifo but the data path is narrow e.g. up to 10 bits which is the narrowest M20K on S10, can get additional depth for without needing more M20K + localparam int TOTAL_OCC_LIMIT = 4096; //loose upper bound on the maximum number of threads allowed inside the LSU at any time, this bounds the counter width for o_active + localparam int WRITEACK_WIDTH = 10; //writeack fifo indicate how many valids to release upon writeack, it uses narrow m20k, word coalescer stops to ensure value doesn't overflow narrow m20k width + + //special constants for hard limits dynamic timeout of coalescer, limit how large the dynamic timeout threshold can get so that we only need so many bits + //for large enough N, if one has to wait more than N clocks for the next thread to arrive, memory access is so infrequent that coalescing will not help + //here we have chosen N = 256 to limit the threshold implementation to 8 bits + localparam int WORD_COAL_MAX_TIMEOUT_BIT = 8; //limit how large the dynamic timeout threshold can get inside word coalescer + localparam int BURST_COAL_MAX_TIMEOUT_BIT = 8; //limit how large the dynamic timeout threshold can get inside burst coalescer + + + + ////////////////////////// + // Derived Parameters // + ////////////////////////// + + //if using width adaption, figure out how many slices we have + localparam int NUM_MEM_SLICES = MEM_DATA_BYTES / MEM_DATA_BYTES_INTERNAL; //both must be powers of 2, therefore this will divide evenly and NUM_MEM_SLICES will also be a power of 2 + localparam int NUM_KERNEL_SLICES = (KER_DATA_BYTES+KER_DATA_BYTES_INTERNAL-1) / KER_DATA_BYTES_INTERNAL; + localparam int KER_DATA_BYTES_LAST = KER_DATA_BYTES - ((NUM_KERNEL_SLICES-1)*KER_DATA_BYTES_INTERNAL); //if MEM_DATA_BYTES does not evenly divide NUM_KERNEL_SLICES, the last slice will be smaller + + //byte address can be decomposed into the upper bits which specify the memory word and the lower bits which indicate position within that memory word + localparam int INTRA_ADDR_WIDTH = $clog2(MEM_DATA_BYTES_INTERNAL); //how many lower bits of the byte address are meant for indicating the position within a memory word + localparam int WORD_ADDR_WIDTH = ADDR_WIDTH - INTRA_ADDR_WIDTH; //how many upper bits of the byte address are meant for indicating which memory word to access + + //no point wasting logic for burst coal if the max burst size is 1, if doing width adaption at avalon interface then must shut off burst coal, if cache is doing burst coal then lsu doesn't need to + localparam bit CACHE_ENABLE_BURST_COALESCE = ENABLE_BURST_COALESCE & (BURSTCOUNT_WIDTH >= 2) & (MEM_DATA_BYTES_INTERNAL==MEM_DATA_BYTES); + localparam bit LSU_ENABLE_BURST_COALESCE = CACHE_ENABLE_BURST_COALESCE & (CACHE_SIZE_BYTES == 0); + + //can't take advantage of alignment more than memory width or kernel width as seen by the core LSU + //get_max_alignment is defined in dla_hld_lsu_pkg.sv + localparam int ALIGNMENT_BITS_MEM = (ADDR_ALIGNMENT_BITS < get_max_alignment(MEM_DATA_BYTES_INTERNAL)) ? ADDR_ALIGNMENT_BITS : get_max_alignment(MEM_DATA_BYTES_INTERNAL); + localparam int ALIGNMENT_BITS_KER_FIRST = (ADDR_ALIGNMENT_BITS < get_max_alignment(KER_DATA_BYTES_INTERNAL)) ? ADDR_ALIGNMENT_BITS : get_max_alignment(KER_DATA_BYTES_INTERNAL); + localparam int ALIGNMENT_BITS_KER_LAST = (ADDR_ALIGNMENT_BITS < get_max_alignment(KER_DATA_BYTES_LAST)) ? ADDR_ALIGNMENT_BITS : get_max_alignment(KER_DATA_BYTES_LAST); + localparam int ALIGNMENT_BITS_KER = (ALIGNMENT_BITS_KER_FIRST < ALIGNMENT_BITS_KER_LAST) ? ALIGNMENT_BITS_KER_FIRST : ALIGNMENT_BITS_KER_LAST; + localparam int LSU_ADDR_ALIGNMENT_BITS = (ALIGNMENT_BITS_MEM < ALIGNMENT_BITS_KER) ? ALIGNMENT_BITS_MEM : ALIGNMENT_BITS_KER; + + //statically determine how many memory words a kernel word can touch, this applies to the underlying LSU after wide data serialization + //it is possible for the outer LSU to unaligned, e.g. kernel width = 8 but only 4 byte aligned, but after slicing kernel data 2 ways, the underlying LSU is aligned + localparam int MAX_MEM_WORDS_PER_KER_WORD = (2**LSU_ADDR_ALIGNMENT_BITS == KER_DATA_BYTES_INTERNAL) ? 1 : (KER_DATA_BYTES_INTERNAL <= MEM_DATA_BYTES_INTERNAL + (2**LSU_ADDR_ALIGNMENT_BITS)) ? 2 : 3; + + //width adaption on the global memory interface + localparam int WIDE_INTRA_ADDR_WIDTH = $clog2(MEM_DATA_BYTES); //how many lower bits of the byte address are meant for indicating the position within a memory word + localparam int ADDR_ADAPT_WIDTH = WIDE_INTRA_ADDR_WIDTH - INTRA_ADDR_WIDTH; //number of address bits needed for width adaption + + + + /////////////// + // Signals // + /////////////// + + //reset + logic aclrn, sclrn, resetn_synchronized; + + //o_active + logic active_incr, active_decr, nwa_decr; + + //kernel upstream width adaption + logic time_share_stall, lsu_i_valid, lsu_o_stall; + logic [ADDR_WIDTH-1:0] lsu_i_address; + logic [8*KER_DATA_BYTES_INTERNAL-1:0] lsu_i_writedata; + logic [KER_DATA_BYTES_INTERNAL-1:0] lsu_i_byteenable; + logic lsu_i_predicate, lsu_i_more_wide_sections; + + //kernel downstream width adaption + logic lsu_o_valid, lsu_o_empty, lsu_o_almost_empty, lsu_i_stall; + logic [8*KER_DATA_BYTES_INTERNAL-1:0] lsu_o_readdata; + + //no write ack shortcut + logic nwa_o_valid, nwa_o_empty, nwa_o_almost_empty, nwa_i_stall; + logic [8*KER_DATA_BYTES-1:0] nwa_o_readdata; + + //read cache + logic cache_avm_write, cache_avm_read; + logic [ADDR_WIDTH-1:0] cache_avm_address; + logic [BURSTCOUNT_WIDTH-1:0] cache_avm_burstcount; + logic [8*MEM_DATA_BYTES_INTERNAL-1:0] cache_avm_writedata; + logic [MEM_DATA_BYTES_INTERNAL-1:0] cache_avm_byteenable; + logic cache_avm_waitrequest, cache_avm_writeack, cache_avm_readdatavalid; + logic [8*MEM_DATA_BYTES_INTERNAL-1:0] cache_avm_readdata; + logic cache_axi_awvalid, cache_axi_awready; + logic [ADDR_ADAPT_WIDTH:0] cache_axi_last; + + //avalon width adaption + logic lsu_avm_write, lsu_avm_read; + logic [ADDR_WIDTH-1:0] lsu_avm_address; + logic [BURSTCOUNT_WIDTH-1:0] lsu_avm_burstcount; + logic [8*MEM_DATA_BYTES_INTERNAL-1:0] lsu_avm_writedata; + logic [MEM_DATA_BYTES_INTERNAL-1:0] lsu_avm_byteenable; + logic lsu_avm_waitrequest, lsu_avm_writeack, lsu_avm_readdatavalid; + logic [8*MEM_DATA_BYTES_INTERNAL-1:0] lsu_avm_readdata; + logic lsu_avm_readdata_accepted; + logic lsu_axi_awvalid, lsu_axi_awready; + logic [ADDR_ADAPT_WIDTH:0] lsu_axi_last; + + //avalon/axi selection + logic mem_avm_write, mem_avm_read; + logic [ADDR_WIDTH-1:0] mem_avm_address; + logic [BURSTCOUNT_WIDTH-1:0] mem_avm_burstcount; + logic [8*MEM_DATA_BYTES-1:0] mem_avm_writedata; + logic [MEM_DATA_BYTES-1:0] mem_avm_byteenable; + logic mem_avm_waitrequest, mem_avm_writeack, mem_avm_readdatavalid; + logic [8*MEM_DATA_BYTES-1:0] mem_avm_readdata; + logic mem_avm_readdata_accepted; + logic mem_axi_awvalid, mem_axi_awready; + logic mem_axi_last; + + + + ///////////// + // Reset // + ///////////// + + // reset must be held for at least 10 clock cycles before being released + // reset is synchronized before consumption, one reset synchronizer for the entire lsu (there is no option to disable this) + // one can choose whether registers consume this reset asynchronously or synchronously + + dla_acl_reset_handler + #( + .ASYNC_RESET (ASYNC_RESET), + .USE_SYNCHRONIZER (1), + .SYNCHRONIZE_ACLRN (1), + .PIPE_DEPTH (3), + .NUM_COPIES (1) + ) + dla_acl_reset_handler_inst + ( + .clk (clock), + .i_resetn (resetn), + .o_aclrn (aclrn), + .o_resetn_synchronized (), //this is immediately after synchronizing the reset, no pipelining for retiming added + .o_sclrn (sclrn) //this has PIPE_DEPTH pipeline registers added after o_resetn_synchronized + ); + //slightly non-standard way of using reset handler to avoid replicated reset pipelining + //normally resetn_synchronized should come from the reset handler's o_resetn_synchronized and each submodule should set PIPE_DEPTH > 0 in its own reset handler + //the pipelining on sclrn is declared as don't merge, so there would be separate reset pipelining for this module's sclrn vs any submodule's sclrn + //this is overkill, quartus has since gotten better at dealing with reset fanout management compared to when dla_acl_reset_handler was developed + assign resetn_synchronized = (ASYNC_RESET) ? aclrn : sclrn; + + + + //////////////// + // Core LSU // + //////////////// + + dla_hld_lsu #( + .READ (READ), + .ASYNC_RESET (ASYNC_RESET), + .ADDR_WIDTH (ADDR_WIDTH), + .ADDR_ALIGNMENT_BITS (LSU_ADDR_ALIGNMENT_BITS), + .INTRA_ADDR_WIDTH (INTRA_ADDR_WIDTH), + .WORD_ADDR_WIDTH (WORD_ADDR_WIDTH), + .KER_DATA_BYTES (KER_DATA_BYTES_INTERNAL), + .KER_DATA_BYTES_LAST (KER_DATA_BYTES_LAST), + .MEM_DATA_BYTES (MEM_DATA_BYTES_INTERNAL), + .BURSTCOUNT_WIDTH (BURSTCOUNT_WIDTH), + .KER_UP_STALL_LATENCY (NUM_KERNEL_SLICES + KER_UP_STALL_LATENCY + 2), + .KER_DOWN_STALL_LATENCY (KER_DOWN_STALL_LATENCY), + .DATA_ALIGNER_MUX_PER_PIPE (DATA_ALIGNER_MUX_PER_PIPE), + .ENABLE_WORD_COALESCE (ENABLE_WORD_COALESCE), + .ENABLE_BURST_COALESCE (LSU_ENABLE_BURST_COALESCE), + .USE_PREDICATE (USE_PREDICATE), + .USE_BYTE_ENABLE (USE_BYTE_ENABLE), + .HIGH_THROUGHPUT_MODE (HIGH_THROUGHPUT_MODE), + .CACHE_SIZE_BYTES (CACHE_SIZE_BYTES), + .USE_AXI (USE_AXI), + .ADDR_ADAPT_WIDTH (ADDR_ADAPT_WIDTH), + .MAX_MEM_WORDS_PER_KER_WORD (MAX_MEM_WORDS_PER_KER_WORD), + .MLAB_FIFO_DEPTH (MLAB_FIFO_DEPTH), + .M20K_WIDE_FIFO_DEPTH (M20K_WIDE_FIFO_DEPTH), + .M20K_NARROW_FIFO_DEPTH (M20K_NARROW_FIFO_DEPTH), + .TOTAL_OCC_LIMIT (TOTAL_OCC_LIMIT), + .WRITEACK_WIDTH (WRITEACK_WIDTH), + .BURST_COAL_MAX_TIMEOUT_BIT (BURST_COAL_MAX_TIMEOUT_BIT), + .WORD_COAL_MAX_TIMEOUT_BIT (WORD_COAL_MAX_TIMEOUT_BIT) + ) + dla_hld_lsu_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + .i_valid (lsu_i_valid), + .o_stall (lsu_o_stall), + .i_address (lsu_i_address), + .i_writedata (lsu_i_writedata), + .i_byteenable (lsu_i_byteenable), + .i_predicate (lsu_i_predicate), + .i_more_wide_sections (lsu_i_more_wide_sections), + .o_readdata (lsu_o_readdata), + .o_valid (lsu_o_valid), + .o_empty (lsu_o_empty), + .o_almost_empty (lsu_o_almost_empty), + .i_stall (lsu_i_stall), + .avm_write (lsu_avm_write), + .avm_read (lsu_avm_read), + .avm_waitrequest (lsu_avm_waitrequest), + .avm_address (lsu_avm_address), + .avm_writedata (lsu_avm_writedata), + .avm_byteenable (lsu_avm_byteenable), + .avm_burstcount (lsu_avm_burstcount), + .avm_writeack (lsu_avm_writeack), + .avm_readdatavalid (lsu_avm_readdatavalid), + .avm_readdata (lsu_avm_readdata), + .avm_readdata_accepted (lsu_avm_readdata_accepted), + .axi_awvalid (lsu_axi_awvalid), + .axi_awready (lsu_axi_awready), + .axi_last (lsu_axi_last) + ); + + + + ////////////////// + // LSU Active // + ////////////////// + + //track how many items are inside of the LSU + //every kernel transaction goes through the predicate fifo (or an occ tracker if predication isn't used), and then through the output data fifo in the read LSU (write LSU has an corresponding occ tracker) + //therefore the total LSU occupancy is bounded by the capacity of the predicate fifo (M20K_NARROW_FIFO_DEPTH) plus the capacity of the output data fifo or occ tracker (MLAB_FIFO_DEPTH) + //this limits the bit width of any counter that tracks all threads inside the LSU + assign active_incr = i_valid & ((KER_UP_STALL_LATENCY) ? 1'b1 : ~o_stall); //asserts when a thread is accepted by dla_hld_global_load_store + assign active_decr = o_valid & ((KER_DOWN_STALL_LATENCY) ? 1'b1 : ~i_stall); //asserts when a thread is released by dla_hld_global_load_store, can happen before the write commits to memory if USE_WRITE_ACK=0 + assign nwa_decr = nwa_o_valid & ((KER_DOWN_STALL_LATENCY) ? 1'b1 : ~nwa_i_stall); //asserts when a thread is released by dla_hld_lsu and gone through width adaption in dla_hld_global_load_store + + dla_acl_tessellated_incr_decr_threshold #( + .CAPACITY (TOTAL_OCC_LIMIT), + .THRESHOLD (1), + .INITIAL_OCCUPANCY (0), + .THRESHOLD_REACHED_AT_RESET (0), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0) + ) + o_active_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + .incr_no_overflow (active_incr), + .incr_raw (active_incr), //without stall latency do not use unguarded incr, with valid_in = 1 during reset, threshold_reached will assert 1 clock too soon coming out of reset + .decr_no_underflow (nwa_decr), + .decr_raw (nwa_decr), //without stall latency do not use unguarded decr, may take more than 1 clock cycle to produce each valid, i_stall at that time leads to a false o_active=0 + .threshold_reached (o_active) + ); + + + + //////////////////////////////////////// + // Kernel Upstream Width Adaptation // + //////////////////////////////////////// + + // suppose we want to serialize wide data from kernel upstream before it reaches the core LSU by slicing it into NUM_KERNEL_SLICES sections + // backpressure to kernel upstream only deasserts once every NUM_KERNEL_SLICES clocks, so the width adapter only needs to sample new data once every NUM_KERNEL_SLICES clocks + // over the next NUM_KERNEL_SLICES clocks, the captured data is transferred to the core LSU by shifting the write data and byte enable, and adding to the address + + generate + if (NUM_KERNEL_SLICES == 1) begin : NO_KER_UP_WIDTH_ADAPT + assign time_share_stall = 1'b0; + assign lsu_i_valid = (KER_UP_STALL_LATENCY) ? i_valid : i_valid & ~o_stall; + assign lsu_i_address = {i_address[ADDR_WIDTH-1:LSU_ADDR_ALIGNMENT_BITS], {LSU_ADDR_ALIGNMENT_BITS{1'h0}}}; + assign lsu_i_writedata = i_writedata; + assign lsu_i_byteenable = (USE_BYTE_ENABLE) ? i_byteenable : '1; + assign lsu_i_predicate = (USE_PREDICATE) ? i_predicate : 1'b0; + assign lsu_i_more_wide_sections = 1'b0; + end + else begin : GEN_KER_UP_WIDTH_ADAPT + //generate a stall signal that deasserts only once every NUM_KERNEL_SLICES clock cycles, this ensure the shift reg buffer below can fully drain before accepting another wide input + //counter goes from NUM_KERNEL_SLICES-2 down to -1 inclusive, msb is the sign bit so it only asserts when value is -1, which means we can accept input on this clock cycle + localparam COUNTER_BITS = $clog2(NUM_KERNEL_SLICES-1)+1; + logic [COUNTER_BITS-1:0] counter; + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) counter <= '0; + else begin + counter <= (counter[COUNTER_BITS-1]) ? NUM_KERNEL_SLICES-2 : counter-1; + if (~sclrn) counter <= '0; + end + end + assign time_share_stall = ~counter[COUNTER_BITS-1]; + + //shift reg buffer + logic [$clog2(NUM_KERNEL_SLICES)-1:0] wide_adapter_section; + logic input_more_wide_sections; + logic [ADDR_WIDTH-1:0] i_address_add; + logic [8*KER_DATA_BYTES-1:0] i_writedata_buffer; + logic [KER_DATA_BYTES-1:0] i_byteenable_buffer; + logic i_predicate_capture; + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) input_more_wide_sections <= 1'b0; + else begin + if (i_valid & ((KER_UP_STALL_LATENCY) ? 1'b1 : ~o_stall)) input_more_wide_sections <= 1'b1; + else if (input_more_wide_sections) input_more_wide_sections <= (wide_adapter_section != 0); //wide_adapter_section is not reset, but its value gets set when input_more_wide_sections goes to 1 + if (~sclrn) input_more_wide_sections <= 1'b0; + end + end + always_ff @(posedge clock) begin + lsu_i_valid <= 1'b0; + if (i_valid & ((KER_UP_STALL_LATENCY) ? 1'b1 : ~o_stall)) begin + lsu_i_valid <= 1'b1; + wide_adapter_section <= NUM_KERNEL_SLICES-2; + i_address_add <= i_address; + i_writedata_buffer <= i_writedata; + i_byteenable_buffer <= i_byteenable; + i_predicate_capture <= i_predicate; + end + else if (input_more_wide_sections) begin + lsu_i_valid <= 1'b1; + wide_adapter_section <= wide_adapter_section - 1; + i_address_add <= i_address_add + KER_DATA_BYTES_INTERNAL; + i_writedata_buffer <= i_writedata_buffer >> (8*KER_DATA_BYTES_INTERNAL); + i_byteenable_buffer <= i_byteenable_buffer >> KER_DATA_BYTES_INTERNAL; + end + end + assign lsu_i_more_wide_sections = (KER_DATA_BYTES_INTERNAL != KER_DATA_BYTES_LAST) ? input_more_wide_sections : 1'b0; + assign lsu_i_address = {i_address_add[ADDR_WIDTH-1:LSU_ADDR_ALIGNMENT_BITS], {LSU_ADDR_ALIGNMENT_BITS{1'h0}}}; + assign lsu_i_writedata = i_writedata_buffer[8*KER_DATA_BYTES_INTERNAL-1:0]; //i_writedata_buffer is a shift register, eventually all input bits will have their turn to land in the lowest bits + assign lsu_i_byteenable = (USE_BYTE_ENABLE) ? i_byteenable_buffer[KER_DATA_BYTES_INTERNAL-1:0] : '1; + assign lsu_i_predicate = (USE_PREDICATE) ? i_predicate_capture : 1'b0; + end + endgenerate + + //register the output stall signal to kernel upstream + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) o_stall <= 1'b1; + else begin + o_stall <= lsu_o_stall | time_share_stall; + if (~sclrn) o_stall <= 1'b1; + end + end + + + + ////////////////////////////////////////// + // Kernel Downstream Width Adaptation // + ////////////////////////////////////////// + + // this is simply the reverse of width adaption on kernel upstream - the width adapter receives NUM_KERNEL_SLICES narrow kernel words from the core LSU, and it has to assemble this into one wide kernel word + + generate + if (NUM_KERNEL_SLICES == 1) begin : NO_KER_DOWN_WIDTH_ADAPT + assign nwa_o_valid = lsu_o_valid; + assign nwa_o_empty = lsu_o_empty; + assign nwa_o_almost_empty = lsu_o_almost_empty; + assign nwa_o_readdata = lsu_o_readdata; + assign lsu_i_stall = nwa_i_stall; + end + else begin : GEN_KER_DOWN_WIDTH_ADAPT + logic [$clog2(NUM_KERNEL_SLICES)-1:0] loading_position; + logic [NUM_KERNEL_SLICES*8*KER_DATA_BYTES_INTERNAL-1:0] readdata_wide; + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) begin + loading_position <= '0; + nwa_o_empty <= 1'b1; + end + else begin + if (~lsu_i_stall) begin + readdata_wide[8*KER_DATA_BYTES_INTERNAL*loading_position +: 8*KER_DATA_BYTES_INTERNAL] <= lsu_o_readdata; + if (loading_position == (NUM_KERNEL_SLICES-1)) begin + loading_position <= 0; + nwa_o_empty <= 1'b0; + end + else begin + loading_position <= loading_position + 1; + end + end + if (~nwa_o_empty & ~nwa_i_stall) nwa_o_empty <= 1'b1; + if (~sclrn) begin + loading_position <= '0; + nwa_o_empty <= 1'b1; + end + end + end + assign nwa_o_readdata = readdata_wide[8*KER_DATA_BYTES-1:0]; + assign lsu_i_stall = ~(~lsu_o_empty & (nwa_o_empty | ~nwa_i_stall)); + + assign nwa_o_valid = (KER_DOWN_STALL_LATENCY) ? (~nwa_o_empty & ~nwa_i_stall) : ~nwa_o_empty; + assign nwa_o_almost_empty = 1'b1; //if downstream of here is a stall latency sync node it will always be stuck in slow read mode, we could add a wide fifo here to fix that (not implemented) + end + endgenerate + + + + //////////////////////////// + // No writeack shortcut // + //////////////////////////// + + // Note: this is only implemented for legacy reasons + // When there is no dependency on the data being written, can release the valid to kernel downstream before the corresponding data commits to memory + // This does not affect the o_active signal, which tracks whether all writes have commited and no threads are still inside the LSU + // When one wants the functionality of USE_WRITE_ACK = 0, there should be nothing tied to the kernel downstream stall valid (or stall latency) interface, e.g. i_stall = 0 and o_valid ignored + // Unfortunately at the time of creating this LSU, there are still some cases where the compiler is wiring up the kernel downstream interface + // Implement the bypass here by tracking how many valids have been released to kernel downstream but not yet consumed from the core LSU + // Notice that the core LSU does not have any option to bypass write ack, it will only assert o_valid when the write has committed + + generate + if (USE_WRITE_ACK || READ) begin : GEN_USE_WRITE_ACK //using writeack is the normal behavior of the core LSU, ignore USE_WRITE_ACK if read LSU + assign o_valid = nwa_o_valid; + assign o_empty = nwa_o_empty; + assign o_almost_empty = nwa_o_almost_empty; + assign o_readdata = nwa_o_readdata; + assign nwa_i_stall = i_stall; + end + else begin : NO_USE_WRITE_ACK //can release a thread to kernel downstream before getting o_valid from the core LSU + //active_incr asserts when a thread enters dla_hld_global_store, active_decr asserts when a thread exits dla_hld_global_store, active_decr can assert before the write commits to memory if USE_WRITE_ACK=0 + //nwa_decr asserts when a thread exits dla_hld_lsu and has gone through width adaption in dla_hld_global_load_store + logic not_o_empty; + logic not_o_almost_empty; + + dla_acl_tessellated_incr_decr_threshold #( + .CAPACITY (TOTAL_OCC_LIMIT), + .THRESHOLD (1), + .INITIAL_OCCUPANCY (0), + .THRESHOLD_REACHED_AT_RESET (0), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0) + ) + o_empty_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + .incr_no_overflow (active_incr), + .incr_raw (active_incr), + .decr_no_underflow (active_decr), + .decr_raw (active_decr), + .threshold_reached (not_o_empty) + ); + + dla_acl_tessellated_incr_decr_threshold #( + .CAPACITY (TOTAL_OCC_LIMIT), + .THRESHOLD (KER_DOWN_STALL_LATENCY+1), //convert from cutoff to threshold semantics + .INITIAL_OCCUPANCY (0), + .THRESHOLD_REACHED_AT_RESET (0), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0) + ) + o_almost_empty_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + .incr_no_overflow (active_incr), + .incr_raw (active_incr), + .decr_no_underflow (active_decr), + .decr_raw (active_decr), + .threshold_reached (not_o_almost_empty) + ); + + //drive the kernel downstream outputs + assign o_empty = ~not_o_empty; + assign o_almost_empty = ~not_o_almost_empty; + assign o_valid = (KER_DOWN_STALL_LATENCY) ? (~o_empty & ~i_stall) : ~o_empty; + assign o_readdata = 'x; //read data is not used by write lsu + + //keep track of how many threads have been released from dla_hld_global_load_store but not yet from dla_hld_lsu (after kernel downstream width adaption in dla_hld_global_load_store) + //if this count is nonzero, then we release backpressure to dla_hld_lsu (after width adaption in dla_hld_global_load_store) + logic not_nwa_i_stall; + dla_acl_tessellated_incr_decr_threshold #( + .CAPACITY (TOTAL_OCC_LIMIT), + .THRESHOLD (1), + .INITIAL_OCCUPANCY (0), + .THRESHOLD_REACHED_AT_RESET (0), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0) + ) + nwa_i_stall_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + .incr_no_overflow (active_decr), //thread has been released from dla_hld_global_load_store, increase the count of corresponding threads that have not yet been released by dla_hld_lsu + .incr_raw (active_decr), + .decr_no_underflow (nwa_decr), //thread has been released from dla_hld_lsu (after width adaption in dla_hld_global_load_store), decrease the count of corrresponding threads not yet released + .decr_raw (nwa_decr), + .threshold_reached (not_nwa_i_stall) + ); + assign nwa_i_stall = ~not_nwa_i_stall; + end + endgenerate + + + + ////////////////// + // Read Cache // + ////////////////// + + assign cache_avm_write = lsu_avm_write; + assign cache_avm_writedata = lsu_avm_writedata; + assign cache_avm_byteenable = lsu_avm_byteenable; + assign cache_axi_awvalid = lsu_axi_awvalid; + assign cache_axi_last = lsu_axi_last; + assign lsu_avm_writeack = cache_avm_writeack; + assign lsu_axi_awready = cache_axi_awready; + + generate + if (CACHE_SIZE_BYTES) begin : GEN_CACHE + dla_hld_lsu_read_cache #( + .ASYNC_RESET (ASYNC_RESET), + .BURST_COAL_MAX_TIMEOUT_BIT (BURST_COAL_MAX_TIMEOUT_BIT), + .CACHE_SIZE_BYTES (CACHE_SIZE_BYTES), + .ADDR_WIDTH (ADDR_WIDTH), + .INTRA_ADDR_WIDTH (INTRA_ADDR_WIDTH), + .WORD_ADDR_WIDTH (WORD_ADDR_WIDTH), + .BURSTCOUNT_WIDTH (BURSTCOUNT_WIDTH), + .MEM_DATA_BYTES (MEM_DATA_BYTES_INTERNAL), + .MLAB_FIFO_DEPTH (MLAB_FIFO_DEPTH), + .M20K_WIDE_FIFO_DEPTH (M20K_WIDE_FIFO_DEPTH), + .M20K_NARROW_FIFO_DEPTH (M20K_NARROW_FIFO_DEPTH), + .ENABLE_BURST_COALESCE (CACHE_ENABLE_BURST_COALESCE), + .BYPASS_BURST_SPLITTER (1), //if cache is used and we want burst coalescing, lsu will disable burst coalescing and cache will enable burst coalescing + .CACHE_NEVER_OVERFLOWS (1), //cache capacity is no less the lsu throttle logic threshold and lsu will never produce bursts, therefore cache will never backpressure lsu + .BYPASS_LSU_DATA_FIFO (1), //by having to mux between hit and miss, readdata is now stallable, don't need avm_rd_data_fifo + .PIPELINE_UPDATE_TO_CACHE (1), //add a pipeline stage before updating the cache, allows more time for routing between rsp fifo and cache + .PIPELINE_READ_FROM_CACHE (1), //add a pipeline stage after reading from the cache, allows more time for routing from cache to order fifo, hit fifo, and burst coalescer + .USE_AXI (USE_AXI) + ) + dla_hld_lsu_read_cache + ( + .clock (clock), + .i_flush_cache (i_flush_cache), + .resetn (resetn_synchronized), + .k_read (lsu_avm_read), + .k_address (lsu_avm_address), + .k_burstcount (lsu_avm_burstcount), + .k_waitrequest (), + .k_readdatavalid (lsu_avm_readdatavalid), + .k_readdata (lsu_avm_readdata), + .k_readdata_accepted (lsu_avm_readdata_accepted), + .m_read (cache_avm_read), + .m_address (cache_avm_address), + .m_burstcount (cache_avm_burstcount), + .m_waitrequest (cache_avm_waitrequest), + .m_readdatavalid (cache_avm_readdatavalid), + .m_readdata (cache_avm_readdata) + ); + assign lsu_avm_waitrequest = 1'b0; //cache will never backpressure lsu + end + else begin : NO_CACHE + assign cache_avm_read = lsu_avm_read; + assign cache_avm_address = lsu_avm_address; + assign cache_avm_burstcount = lsu_avm_burstcount; + assign lsu_avm_waitrequest = cache_avm_waitrequest; + assign lsu_avm_readdatavalid = cache_avm_readdatavalid; + assign lsu_avm_readdata = cache_avm_readdata; + end + endgenerate + + + + /////////////////////////////// + // Avalon Width Adaptation // + /////////////////////////////// + + // if the core LSU memory width is less than the actual memory width, avalon requests need to be widened and responses need to be narrowed + // since this is done without fifos, burst coalescing must be disabled if memory width adaption is used + // as an example, suppose the actual memory width is 64 bytes but the core LSU memory width is 16 bytes + // no adaption needs to be done to the address since it is a byte address + // for the write lsu, mask off the byteenables for the address ranges not used, in this example addr[5:4] determines which quarter of the byteenables should not be masked, write data can simply be replicated + // for the read lsu, track addr[5:4] in a fifo, when avalon read data arrives this info determines which quarter of the read data should be supplied to the core LSU (or cache if used) + + generate + if (NUM_MEM_SLICES == 1) begin : NO_MEM_WIDTH_ADAPT + assign mem_avm_write = cache_avm_write; + assign mem_avm_read = cache_avm_read; + assign mem_avm_address = cache_avm_address; + assign mem_avm_burstcount = cache_avm_burstcount; + assign mem_avm_writedata = cache_avm_writedata; + assign mem_avm_byteenable = cache_avm_byteenable; + assign mem_axi_awvalid = cache_axi_awvalid; + assign mem_axi_last = cache_axi_last[0]; + assign cache_avm_waitrequest = mem_avm_waitrequest; + assign cache_avm_writeack = mem_avm_writeack; + assign cache_avm_readdatavalid = mem_avm_readdatavalid; + assign cache_avm_readdata = mem_avm_readdata; + assign cache_axi_awready = mem_axi_awready; + end + else begin : GEN_MEM_WIDTH_ADAPT + logic [ADDR_ADAPT_WIDTH-1:0] addr_adapt; + if (USE_AXI && !READ) begin + assign addr_adapt = cache_axi_last[ADDR_ADAPT_WIDTH:1]; + end + else begin + assign addr_adapt = cache_avm_address[INTRA_ADDR_WIDTH +: ADDR_ADAPT_WIDTH]; + end + + assign mem_avm_write = cache_avm_write; + assign mem_avm_read = cache_avm_read; + assign mem_avm_address = {cache_avm_address[ADDR_WIDTH-1:WIDE_INTRA_ADDR_WIDTH], {WIDE_INTRA_ADDR_WIDTH{1'h0}} }; + assign mem_avm_burstcount = (USE_AXI) ? 0 : 1; //burst coalescing must be disabled + assign mem_axi_last = 1'b1; //without burst coalescing, all bursts have one word, so every word is the last in a burst + assign mem_axi_awvalid = cache_axi_awvalid; + assign cache_avm_waitrequest = mem_avm_waitrequest; + assign cache_avm_writeack = mem_avm_writeack; + assign cache_axi_awready = mem_axi_awready; + + always_ff @(posedge clock) begin + cache_avm_readdatavalid <= mem_avm_readdatavalid; + end + + if (READ) begin : READ_MEM_WIDTH_ADAPT + logic [ADDR_ADAPT_WIDTH-1:0] addr_adapt_read_data; + + //IMPORANT ASSUMPTION: read request will not be serviced faster than the write-to-read latency through addr_adapt_fifo, which is 3 for mid speed fifo + dla_hld_fifo #( + .WIDTH (ADDR_ADAPT_WIDTH), + .DEPTH (M20K_WIDE_FIFO_DEPTH), //same depth as avm_rd_data_fifo, which has throttle logic to ensure lsu doesn't request more reads than there is space for + .NEVER_OVERFLOWS (1), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0), + .STYLE ("ms") + ) + addr_adapt_fifo + ( + .clock (clock), + .resetn (resetn_synchronized), + .i_valid (mem_avm_read & ~mem_avm_waitrequest), + .i_data (addr_adapt), + .o_stall (), + .o_almost_full (), + .o_valid (), + .o_data (addr_adapt_read_data), + .i_stall (~mem_avm_readdatavalid), + .o_almost_empty (), + .o_empty (), + .ecc_err_status () + ); + + //this is a NUM_MEM_SLICES:1 mux, arbitrary amount of pipelining could be added here since readdatavalid can't be backpressured + always_ff @(posedge clock) begin + cache_avm_readdata <= 'x; + for (int i=0; i<NUM_MEM_SLICES; i++) begin + if (i == addr_adapt_read_data) cache_avm_readdata <= mem_avm_readdata[i*8*MEM_DATA_BYTES_INTERNAL +: 8*MEM_DATA_BYTES_INTERNAL]; + end + end + + assign mem_avm_byteenable = '1; + end + else begin : WRITE_MEM_WIDTH_ADAPT + assign mem_avm_writedata = {NUM_MEM_SLICES{cache_avm_writedata}}; + always_comb begin + for (int i=0; i<NUM_MEM_SLICES; i++) begin + mem_avm_byteenable[i*MEM_DATA_BYTES_INTERNAL +: MEM_DATA_BYTES_INTERNAL] = (i == addr_adapt) ? cache_avm_byteenable : '0; + end + end + end + end + endgenerate + + + + ////////////////////////////////////////// + // AvalonMM / AXI Interface Selection // + ////////////////////////////////////////// + + generate + if (USE_AXI) begin + if (READ) begin + //read address channel + assign axi_arvalid = mem_avm_read; + assign axi_araddr = mem_avm_address; + assign axi_arlen = mem_avm_burstcount[BURSTCOUNT_WIDTH-2:0]; + assign mem_avm_waitrequest = ~axi_arready; + //read data channel + dla_acl_shift_register_no_reset #( + .WIDTH (8*MEM_DATA_BYTES + 1), + .STAGES (MEM_READDATA_PIPELINING) + ) + readdata_pipe + ( + .clock (clock), + .D ({axi_rdata, axi_rvalid}), + .Q ({mem_avm_readdata, mem_avm_readdatavalid}) + ); + assign axi_rready = 1'b1; + + //tie off write channels + assign axi_awvalid = 1'b0; + assign axi_awaddr = '0; + assign axi_awlen = '0; + assign axi_wvalid = 1'b0; + assign axi_wdata = '0; + assign axi_wstrb = '0; + assign axi_wlast = '0; + assign axi_bready = 1'b1; + end + else begin + //write address channel + assign axi_awvalid = mem_axi_awvalid; + assign axi_awaddr = mem_avm_address; + assign axi_awlen = mem_avm_burstcount[BURSTCOUNT_WIDTH-2:0]; + assign mem_axi_awready = axi_awready; + //write data channel + assign axi_wvalid = mem_avm_write; + assign axi_wdata = mem_avm_writedata; + assign axi_wstrb = mem_avm_byteenable; + assign axi_wlast = mem_axi_last; + assign mem_avm_waitrequest = ~axi_wready; + //write response channel + assign mem_avm_writeack = axi_bvalid; + assign axi_bready = 1'b1; + + //tie off read channels + assign axi_arvalid = 1'b0; + assign axi_araddr = '0; + assign axi_arlen = '0; + assign axi_rready = 1'b1; + end + + //tie off avalon + assign avm_write = 1'b0; + assign avm_read = 1'b0; + assign avm_address = '0; + assign avm_burstcount = '0; + assign avm_writedata = '0; + assign avm_byteenable = '0; + end + else begin + assign avm_write = mem_avm_write; + assign avm_read = mem_avm_read; + assign avm_address = mem_avm_address; + assign avm_burstcount = mem_avm_burstcount; + assign avm_writedata = mem_avm_writedata; + assign avm_byteenable = mem_avm_byteenable; + assign mem_avm_waitrequest = avm_waitrequest; + assign mem_avm_writeack = avm_writeack; + + dla_acl_shift_register_no_reset #( + .WIDTH (8*MEM_DATA_BYTES + 1), + .STAGES (MEM_READDATA_PIPELINING) + ) + readdata_pipe + ( + .clock (clock), + .D ({avm_readdata, avm_readdatavalid}), + .Q ({mem_avm_readdata, mem_avm_readdatavalid}) + ); + + //tie off axi + assign axi_awvalid = 1'b0; + assign axi_awaddr = '0; + assign axi_awlen = '0; + assign axi_wvalid = 1'b0; + assign axi_wdata = '0; + assign axi_wstrb = '0; + assign axi_wlast = '0; + assign axi_bready = 1'b1; + assign axi_arvalid = 1'b0; + assign axi_araddr = '0; + assign axi_arlen = '0; + assign axi_rready = 1'b1; + end + endgenerate + +endmodule + +`default_nettype wire diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_lsu.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_lsu.sv new file mode 100644 index 0000000..6bf7dd3 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_lsu.sv @@ -0,0 +1,842 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// // +// HLD LSU // +// Architected and implemented by: Jason Thong // +// // +// This is the top-level module for the core LSU. While dla_hld_global_load_store is a wrapper that deals with width adaption and cache, dla_hld_lsu implements the core LSU // +// itself. There is almost no logic in this module, the LSU has been split up into components and dla_hld_lsu must just connects those components together. // +// // +// A brief descrption of the major components: // +// // +// Input fifo: // +// - kernel upstream data (including address, byte enable, etc.) is store here until we can figure out how this will get converted into avalon // +// - there are separate fifos for word address (which feeds the burst coalescer), data and byte enable (these two feed the write data alignment) // +// Word coalescer: // +// - looks at the bottom bits of the kernel upstream address to determine if coalescing within a memory word can happen // +// - also determines a bunch of information like how many memory words each kernel word spans, this feeds the unaligned controller // +// - can optionally be bypassed, e.g. to save area if one knows the access pattern is going to be random access // +// Unaligned controller: // +// - given info from the word coalescer, report which section of the kernel word is being processed, among other state information // +// Burst coaleser: // +// - after the unaligned controller but before the avalon memory interface, look for consecutive word addresses and form a burst // +// - can optionally be bypassed // +// Write data aligner (write LSU only): // +// - the unaligned controller indicates how to transform kernel upstream data into avalon write data, apply this to the data path in a pipelined manner // +// - one can adjust the amount of pipelining in the barrel shifter for data alignment // +// Write kernel downstream (write LSU only): // +// - for each writeack that arrives, determine how many valids can be released to kernel downstream // +// Read data alignment (read LSU only): // +// - the output from the word coalescer is put into a fifo so that when a memory arrives, we will know how to transform it into kernel downstream data // +// - one kernel word may span multiple memory words, so another instance of the unaligned controller is used to track the progress of assembling one kernel word // +// // +// Key features of the LSU: // +// // +// Support for arbitrary alignment when accessing memory: // +// - the core LSU allows up one kernel word to span up to 3 memory words, this is enforced by ensuring the kernel width is no more than twice the memory width, // +// beyond this one must use kernel width adaption in the wrapper (note that kernel width adaption can be used at any width, even narrow widths) // +// - based on kernel width, memory width, and address alignment, there is some static analysis to determine the max number of memory words that a kernel word can // +// span, some logic is trimmed away if we are guaranteed that a kernel word can only span 1 or 2 memory words // +// Configurable amount of pipelining in data aligner barrel shifter // +// - controlled by the DATA_ALIGNER_MUX_PER_PIPE parameter, if this is 0 then use combinational logic // +// - otherwise this indicates how many 2:1 muxes per pipeline stage, e.g. if the value is 3 then will have up to 8:1 mux between pipeline registers // +// - the amount of shifting is based on the kernel width, memory width, and address alignment, it is not exposed to since the LSU was designed for arbitrary delay // +// through the data aligner, one can only control how often to pipeline, but not the total amount of pipelining // +// Optional coalescing with dynamic timeout: // +// - word coalescing and burst coalescing are two independent and optional features // +// - when used, each coalescer has its own timeout, cannot wait forever for the next transaction in the hope that it will coalesce with the current transaction // +// - the timeout threshold is dynamic, it increases if coalescing could have happened but timed out, it decreases if lots of random access // +// High throughput mode: // +// - if a kernel word spans N memory words where N >= 2, the kernel word can be processed over N clock cycles (low throughput mode) or the minimum number of clock // +// cycles (high throughput mode), note that high throughput mode uses more area because it has to keep more data live in registers // +// - this feature only matters if a kernel word uses unaligned access, the LSU will never waste time if a kernel word happens to fit inside one memory word // +// - as an example to illustrate the performance of high throughput mode, suppose the kernel width and memory width are the same but there is an address offset, even // +// for sequential access low throughput mode will take 2 clocks per kernel word, but high throughput mode will take M+1 clocks for a total of M words // +// - if kernel width is significantly smaller than memory width, probably best to use low throughput mode since few kernel words will span many memory words // +// // +// Non-configurable properties: // +// - for write LSU, writeack support is forced on in the core LSU, but there is a no writeack shortcut in the wrapper dla_hld_global_load_store.sv for legacy support // +// - capacity of the LSU is fixed, compiler cannot choose fifo depths, usually obvious whether a fifo should be MLAB or M20K, may as well use all the memory // +// // +// Not yet implemented: // +// - ECC memory (fifos and cache) // +// - profiler // +// // +// Required files: // +// - LSU: dla_hld_global_load_store.sv dla_hld_lsu.sv dla_hld_lsu_burst_coalescer.sv dla_hld_lsu_coalescer_dynamic_timeout.sv dla_hld_lsu_data_aligner.sv dla_hld_lsu_read_cache.sv // +// dla_hld_lsu_read_data_alignment.sv dla_hld_lsu_unaligned_controller.sv dla_hld_lsu_word_coalescer.sv dla_hld_lsu_write_data_alignment.sv dla_hld_lsu_write_kernel_downstream.sv // +// - fifo: dla_hld_fifo.sv dla_acl_low_latency_fifo.sv dla_acl_mid_speed_fifo.sv dla_acl_lfsr.sv dla_acl_tessellated_incr_decr_threshold.sv // +// - other: dla_acl_parameter_assert.svh dla_acl_reset_handler.sv dla_acl_burst_splitter.sv dla_acl_shift_register_no_reset.sv // +// // +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +`default_nettype none + +module dla_hld_lsu #( + //LSU type + parameter bit READ, //0 = write lsu, 1 = read lsu + + //reset configuration, the reset is always synchronized before consumption (no option to disable this), but once synchronized one may choose how registers consume that synchronized reset + parameter bit ASYNC_RESET, //0 = registers consume reset synchronously, 1 = registers consume reset asynchronously + + //address, shared between kernel interface and memory interface + parameter int ADDR_WIDTH, //width of address bus, for addresses that are byte addresses + parameter int ADDR_ALIGNMENT_BITS, //indicates how many least significant bits of i_address are known to be 0, e.g. set this parameter to 3 if kernel accesses are 8-byte aligned + parameter int INTRA_ADDR_WIDTH, //how many least significant bits of the byte address represent the location inside a memory word + parameter int WORD_ADDR_WIDTH, //how many most significant bits of the byte address represent which memory word is being accessed + + //kernel interface + parameter int KER_DATA_BYTES, //width of kernel data path in bytes, does not need to be a power of 2 + parameter int KER_DATA_BYTES_LAST, //in case width adaption is used in dla_hld_global_load_store, the last slice of the kernel data path may be smaller + + //memory interface + parameter int MEM_DATA_BYTES, //width of memory data path in bytes, must be a power of 2 + parameter int BURSTCOUNT_WIDTH, //width of avalon burst count signal, max burst size is 2**(BURSTCOUNT_WIDTH-1) + + //stall latency + parameter int KER_UP_STALL_LATENCY, //0 = use stall/valid, 1 or larger = use stall latency and the value indicates the upstream roundtrip latency (from o_stall to i_valid) + parameter int KER_DOWN_STALL_LATENCY, //0 = use stall/valid, 1 or larger = use stall latency and the value indicates the downstream roundtrip latency (from i_stall to o_valid) + + //amount of pipelining in data aligner + parameter int DATA_ALIGNER_MUX_PER_PIPE, //0 = use comb logic for data alignment mux, 1 or more = max number of 2:1 muxes before a pipeline stage is added, e.g. 2 means up to 4:1 mux between reg + + //coalescing + parameter bit ENABLE_WORD_COALESCE, //whether to coalesce kernel words together within the same memory word + parameter bit ENABLE_BURST_COALESCE, //whether to coalesce sequential memory words together to make a burst, feature will be disabled (parameter value ignored) if width adaption on the memory interface is used + + //reduce area if certain functionality is not needed + parameter bit USE_PREDICATE, //set to 0 if i_predicate is always 0, this will save some area + parameter bit USE_BYTE_ENABLE, //set to 0 if i_byteenable is always all ones, this will save some area, only write LSU consumes this parameter + + //throughput features + parameter bit HIGH_THROUGHPUT_MODE, //0 = use N clock cycles to process a kernel word that spans N memory words, 1 = use minimum amount of time to process kernel words, only matters if N >= 2 + parameter int CACHE_SIZE_BYTES, //0 = no cache, otherwise this specifies the cache size in bytes which must be a power of 2, this can only be used with the read LSU + + //global memory interface selection + parameter bit USE_AXI, //0 = use AvalonMM, 1 = use AXI + parameter int ADDR_ADAPT_WIDTH, //if width adaption is done on the global memory interface, how many word address LSBs are needed in AXI write data channel to indicate how to width adapt + + //static analysis from dla_hld_global_load_store + parameter int MAX_MEM_WORDS_PER_KER_WORD, //trim some logic if it is guaranteed that each kernel word can only span 1 or 2 memory words + + //special constants -- these are chosen in dla_hld_global_load_store.sv + parameter int MLAB_FIFO_DEPTH, //use a shallow fifo if handshaking is expected to take a few clocks (or if capacity can be borrowed from a nearby deep fifo), if we need an MLAB may as well use all of it + parameter int M20K_WIDE_FIFO_DEPTH, //use a deep fifo if handshaking is expected to take hundreds of clocks e.g. going off chip, for wide data path use M20K in shallowest mode, but may as well use all depth available + parameter int M20K_NARROW_FIFO_DEPTH, //if we need a deep fifo but the data path is narrow e.g. up to 10 bits which is the narrowest M20K on S10, can get additional depth for without needing more M20K + parameter int TOTAL_OCC_LIMIT, //loose upper bound on the maximum number of threads allowed inside the LSU at any time, this bounds the counter width for o_active + parameter int WRITEACK_WIDTH, //writeack fifo indicate how many valids to release upon writeack, it uses narrow m20k, word coalescer stops to ensure value doesn't overflow narrow m20k width + parameter int WORD_COAL_MAX_TIMEOUT_BIT, //limit how large the dynamic timeout threshold can get inside word coalescer + parameter int BURST_COAL_MAX_TIMEOUT_BIT //limit how large the dynamic timeout threshold can get inside burst coalescer +) ( + input wire clock, + input wire resetn, + + //o_active and i_flush_cache are handled by dla_hld_global_load_store + + //kernel upstream + input wire i_valid, //kernel upstream has a transaction available, LSU can but does not need to accept it if using stall valid, must accept it if using stall latency + output logic o_stall, //backpressure to kernel upstream + input wire [ADDR_WIDTH-1:0] i_address, //byte address, where should data be written to or read from in memory + input wire [8*KER_DATA_BYTES-1:0] i_writedata, //data to write to memory, only used by write LSU + input wire [KER_DATA_BYTES-1:0] i_byteenable, //byte enable for the write data, only used by write LSU + input wire i_predicate, //if 1 then don't perform the read or write, but still need to release this thread later on o_valid + input wire i_more_wide_sections, //if using kernel width adaptation, this indicates there are more sections of the same kernel word still to come + + //kernel downstream + output logic o_valid, //LSU has a transaction available, kernel downstream can but does not need to accept it if using stall valid, must accept it if using stall latency + input wire i_stall, //backpressure from kernel downstream + output logic [8*KER_DATA_BYTES-1:0] o_readdata, //data read from memory, only used by read LSU + output logic o_empty, //LSU does not have a transaction available for kernel downstream, meant to be used with stall latency + output logic o_almost_empty, //LSU downstream interface does not have at least KER_DOWN_STALL_LATENCY transactions ready to be released + + //memory interface, shared with axi and avalon + //for read LSU, axi and avalon have a natural mapping + //for write LSU, avalon only has a single stall/valid control flow which maps to the axi write data channel, the axi write address channel control flow uses the other set of signals in the group below + output logic avm_write, //avalon write request, accepted only if ~avm_waitrequest + output logic avm_read, //avalon read request, accepted only if ~avm_waitrequest + output logic [ADDR_WIDTH-1:0] avm_address, //byte address, avalon spec says this must be word aligned (the bottom bits for within a memory word must be 0) + output logic [BURSTCOUNT_WIDTH-1:0] avm_burstcount, //how large is the burst, tied to 1 if burst coalescing is not used + output logic [8*MEM_DATA_BYTES-1:0] avm_writedata, //data to write to memory, only used by write LSU + output logic [MEM_DATA_BYTES-1:0] avm_byteenable, //byte enable for the write data, only used by write LSU + input wire avm_waitrequest, //avalon backpressure + input wire avm_writeack, //write has commited to memory, this must assert once per memory word (not one per burst like the avalon spec), only used by write LSU + input wire avm_readdatavalid, //if using read cache LSU can backpressure the read data so this means cache has data available, else not using read cache so LSU must accept read data + input wire [8*MEM_DATA_BYTES-1:0] avm_readdata, //data read from memory, only used by read LSU + output logic avm_readdata_accepted, //if using read cache, this is how the LSU indicates to the cache that it consumed the read data + + //additional signals needed for write LSU using AXI, need control flow for axi write address channel, also need the axi last signal + output logic axi_awvalid, //write request for the axi write address channel + input wire axi_awready, //no backpressure for the axi write address channel + output logic [ADDR_ADAPT_WIDTH:0] axi_last //MSBs = some bits of address for width adaptation, LSB = axi last which indicates this word is the last in a burst +); + + + /////////////// + // Signals // + /////////////// + + //reset + logic aclrn, sclrn, resetn_synchronized; + + //predication + logic valid_in_not_predicated; + logic predicate_fifo_wr_req, predicate_fifo_almost_full, predicate_fifo_empty, predicate_fifo_rd_ack; + logic predicate_fifo_wr_data, predicate_fifo_rd_data; + + //input fifos + logic input_wordaddr_fifo_almost_full, input_writedata_fifo_almost_full, input_fifo_almost_full; + logic input_wordaddr_fifo_rd_ack, input_writedata_fifo_rd_ack, input_byteenable_fifo_rd_ack; + logic [8*KER_DATA_BYTES-1:0] input_writedata_fifo_rd_data; + logic [KER_DATA_BYTES-1:0] input_byteenable_fifo_rd_data; + logic [WORD_ADDR_WIDTH-1:0] input_wordaddr_fifo_rd_data; + + //word coalescer + logic cmd_fifo_empty; + logic cmd_more_wide_sections, cmd_needs_second_cycle, cmd_needs_third_cycle, cmd_spans_two, cmd_spans_three, cmd_can_coalesce; + logic [INTRA_ADDR_WIDTH-1:0] cmd_addr, cmd_addr_modulo; + + //unaligned controller + logic downstream_of_cmd_almost_full, can_read_cmd_fifo, cmd_fifo_rd_ack; + logic cmd_at_second_cycle, cmd_at_third_cycle, cmd_is_coalescing, cmd_first_access_in_word; + + //burst coalescer + logic burstcoal_valid; + logic [1:0] burstcoal_add_to_base_addr; + logic [WORD_ADDR_WIDTH-1:0] burstcoal_word_addr; + logic burstcoal_almost_full, disable_coalescer_timeout; + logic avm_ctrl_fifo_empty, avm_ctrl_fifo_rd_ack; + logic [WORD_ADDR_WIDTH-1:0] avm_word_address; + logic burstcoal_snoop_valid; + logic [BURSTCOUNT_WIDTH-1:0] burstcoal_snoop_burstsize; + logic axi_last_fifo_empty, axi_last_fifo_rd_ack; + logic [ADDR_ADAPT_WIDTH:0] axi_last_fifo_rd_data; + + //avm request interface + logic avm_wr_data_fifo_almost_full, avm_wr_data_fifo_empty, avm_wr_data_fifo_rd_ack; + + //avm response interface + logic writeack_fifo_almost_full, avm_rd_data_fifo_almost_full, rsp_fifo_almost_full; + + + + ///////////// + // Reset // + ///////////// + + dla_acl_reset_handler + #( + .ASYNC_RESET (ASYNC_RESET), + .USE_SYNCHRONIZER (0), + .SYNCHRONIZE_ACLRN (0), + .PIPE_DEPTH (0), + .NUM_COPIES (1) + ) + dla_acl_reset_handler_inst + ( + .clk (clock), + .i_resetn (resetn), + .o_aclrn (aclrn), + .o_resetn_synchronized (resetn_synchronized), + .o_sclrn (sclrn) + ); + + + + /////////////////// + // Predicattion // + /////////////////// + + // predicated transactions bypass the word coalescer and the input fifos (and therefore will never make it to the memory interface) + // for the write LSU, predication is added back in after writeack and just before the kernel downstream interface, look inside dla_hld_lsu_write_kernel_downstream + // for the read LSU, predication is added back after the avm_rd_data_fifo but before the output fifo (garbage data is written into the output fifo for a predicated transaction) + + assign valid_in_not_predicated = i_valid & ~i_predicate; + assign predicate_fifo_wr_req = i_valid; + assign predicate_fifo_wr_data = i_predicate; + + assign o_stall = input_fifo_almost_full | predicate_fifo_almost_full; + + generate + if (USE_PREDICATE) begin : GEN_PREDICATE + logic temp_data, temp_valid, temp_stall; + + dla_hld_fifo #( + .WIDTH (1), + .DEPTH (M20K_NARROW_FIFO_DEPTH), + .NEVER_OVERFLOWS (1), + .ALMOST_FULL_CUTOFF (KER_UP_STALL_LATENCY), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0), + .STYLE ("ms") + ) + predicate_fifo_ms_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + .i_valid (predicate_fifo_wr_req), + .i_data (predicate_fifo_wr_data), + .o_stall (), + .o_almost_full (predicate_fifo_almost_full), + .o_valid (temp_valid), + .o_data (temp_data), + .i_stall (temp_stall), + .o_almost_empty (), + .o_empty (), + .ecc_err_status () + ); + + //prefetch into a 2-deep register based fifo, this eases placement since data now comes from an ALM register rather than M20K hardened read data register + //also the rd ack going to the m20k based fifo will be registered since it is now driven by o_stall of the llreg fifo + dla_hld_fifo #( + .REGISTERED_DATA_OUT_COUNT (1), + .WIDTH (1), + .DEPTH (2), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0), + .STYLE ("llreg") + ) + predicate_fifo_ll_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + .i_valid (temp_valid), + .i_data (temp_data), + .o_stall (temp_stall), + .o_almost_full (), + .o_valid (), + .o_data (predicate_fifo_rd_data), + .i_stall (~predicate_fifo_rd_ack), + .o_almost_empty (), + .o_empty (predicate_fifo_empty), + .ecc_err_status () + ); + end + else begin : NO_PREDICATE + //this is necessary to limit the total occupancy through the lsu so that the counter for o_active doesn't overflow + dla_acl_tessellated_incr_decr_threshold #( + .CAPACITY (M20K_NARROW_FIFO_DEPTH), + .THRESHOLD (M20K_NARROW_FIFO_DEPTH-KER_UP_STALL_LATENCY), + .INITIAL_OCCUPANCY (0), + .THRESHOLD_REACHED_AT_RESET (1), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0) + ) + predicate_fifo_almost_full_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + .incr_no_overflow (predicate_fifo_wr_req), + .incr_raw (predicate_fifo_wr_req), + .decr_no_underflow (predicate_fifo_rd_ack), + .decr_raw (predicate_fifo_rd_ack), + .threshold_reached (predicate_fifo_almost_full) + ); + + //downstream doesn't try to read from predicate fifo unless there is also stuff in the writeack or rsp fifo + //guaranteed that the corresponding thread will be readable from the predicate fifo before being readable from write or rsp fifo + assign predicate_fifo_empty = 1'b0; + assign predicate_fifo_rd_data = 1'b0; + end + endgenerate + + + + /////////////////// + // Input FIFOs // + /////////////////// + + //this is temporary storage while we figure out which kernel words can coalesce into the same memory word + //these exist as separate fifos because they are read at different times, minimize area by minimizing the number of pipeline stages that data needs to be kept live + + dla_hld_fifo #( + .WIDTH (WORD_ADDR_WIDTH), + .DEPTH (MLAB_FIFO_DEPTH), + .NEVER_OVERFLOWS (1), + .ALMOST_FULL_CUTOFF (KER_UP_STALL_LATENCY), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0), + .STYLE ("ms") + ) + input_wordaddr_fifo_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + .i_valid (valid_in_not_predicated), + .i_data (i_address[ADDR_WIDTH-1:INTRA_ADDR_WIDTH]), + .o_stall (), + .o_almost_full (input_wordaddr_fifo_almost_full), + .o_valid (), + .o_data (input_wordaddr_fifo_rd_data), + .i_stall (~input_wordaddr_fifo_rd_ack), + .o_almost_empty (), + .o_empty (), + .ecc_err_status () + ); + + //the inputs fifos are all written to at the same time, the last fifo that is read will upper bound the occupancy of all the fifos, so almost full comes from this one + //for the read LSU, there is only the wordaddr input fifo + //for the write LSU, the data input fifo is read last + assign input_fifo_almost_full = (READ) ? input_wordaddr_fifo_almost_full : input_writedata_fifo_almost_full; + + generate + if (READ == 0) begin : GEN_INPUT_WRITEDATA_FIFO + dla_hld_fifo #( + .STALL_IN_EARLINESS (1), + .WIDTH (8*KER_DATA_BYTES), + .DEPTH (MLAB_FIFO_DEPTH), + .NEVER_OVERFLOWS (1), + .ALMOST_FULL_CUTOFF (KER_UP_STALL_LATENCY), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0), + .STYLE ("ms") + ) + input_writedata_fifo_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + .i_valid (valid_in_not_predicated), + .i_data (i_writedata), + .o_stall (), + .o_almost_full (input_writedata_fifo_almost_full), + .o_valid (), + .o_data (input_writedata_fifo_rd_data), + .i_stall (~input_writedata_fifo_rd_ack), + .o_almost_empty (), + .o_empty (), + .ecc_err_status () + ); + + if (USE_BYTE_ENABLE) begin : GEN_INPUT_BYTEENABLE_FIFO + dla_hld_fifo #( + .WIDTH (KER_DATA_BYTES), + .DEPTH (MLAB_FIFO_DEPTH), + .NEVER_OVERFLOWS (1), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0), + .STYLE ("ms") + ) + input_byteenable_fifo_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + .i_valid (valid_in_not_predicated), + .i_data (i_byteenable), + .o_stall (), + .o_almost_full (), + .o_valid (), + .o_data (input_byteenable_fifo_rd_data), + .i_stall (~input_byteenable_fifo_rd_ack), + .o_almost_empty (), + .o_empty (), + .ecc_err_status () + ); + end + end + endgenerate + + + + ////////////////////// + // Word Coalescer // + ////////////////////// + + // determine if many kernel words can coalesce within the same memory word + // produce the information needed by the unaligned controller, e.g. how many memory words does each kernel word span + + dla_hld_lsu_word_coalescer #( + .ASYNC_RESET (ASYNC_RESET), + .ADDR_WIDTH (ADDR_WIDTH), + .ADDR_ALIGNMENT_BITS (ADDR_ALIGNMENT_BITS), + .INTRA_ADDR_WIDTH (INTRA_ADDR_WIDTH), + .KER_DATA_BYTES (KER_DATA_BYTES), + .KER_DATA_BYTES_LAST (KER_DATA_BYTES_LAST), + .ENABLE_WORD_COALESCE (ENABLE_WORD_COALESCE), + .HIGH_THROUGHPUT_MODE (HIGH_THROUGHPUT_MODE), + .MAX_MEM_WORDS_PER_KER_WORD (MAX_MEM_WORDS_PER_KER_WORD), + .MLAB_FIFO_DEPTH (MLAB_FIFO_DEPTH), + .WRITEACK_WIDTH (WRITEACK_WIDTH), + .WORD_COAL_MAX_TIMEOUT_BIT (WORD_COAL_MAX_TIMEOUT_BIT) + ) + dla_hld_lsu_word_coalescer_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + + //kernel upstream + .i_valid (valid_in_not_predicated), + .i_more_wide_sections (i_more_wide_sections), + .i_addr (i_address), + + //disable timeout on coalescing if there is enough backlog + .i_disable_coalescer_timeout (disable_coalescer_timeout), + + //read side of cmd fifo -- this provides information about the kernel word, unaligned controller uses this info to walk through the many states of processing each kernel work + .i_cmd_fifo_rd_ack (cmd_fifo_rd_ack), + .o_cmd_fifo_empty (cmd_fifo_empty), + .o_cmd_can_coalesce (cmd_can_coalesce), + .o_cmd_spans_two (cmd_spans_two), + .o_cmd_spans_three (cmd_spans_three), + .o_cmd_needs_second_cycle (cmd_needs_second_cycle), + .o_cmd_needs_third_cycle (cmd_needs_third_cycle), + .o_cmd_more_wide_sections (cmd_more_wide_sections), + .o_cmd_addr (cmd_addr), + .o_cmd_addr_modulo (cmd_addr_modulo) + ); + + + + //////////////////////////// + // Unaligned Controller // + //////////////////////////// + + // based on how many memory words a kernel word spans and other info, track the progress of processing one kernel word + + always_ff @(posedge clock) begin + //some of these almost full signals are tied off to 0 if they are needed for write LSU only or for read LSU only + downstream_of_cmd_almost_full <= burstcoal_almost_full | avm_wr_data_fifo_almost_full | avm_rd_data_fifo_almost_full | rsp_fifo_almost_full | writeack_fifo_almost_full; + end + assign can_read_cmd_fifo = ~cmd_fifo_empty & ~downstream_of_cmd_almost_full; + + dla_hld_lsu_unaligned_controller #( + .ASYNC_RESET (ASYNC_RESET), + .MAX_MEM_WORDS_PER_KER_WORD (MAX_MEM_WORDS_PER_KER_WORD), + .HIGH_THROUGHPUT_MODE (HIGH_THROUGHPUT_MODE) + ) + dla_hld_lsu_unaligned_controller_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + + //handshaking + .i_can_read_fifo (can_read_cmd_fifo), + .o_fifo_rd_ack (cmd_fifo_rd_ack), + + //information about the kernel word + .i_spans_two (cmd_spans_two), + .i_spans_three (cmd_spans_three), + .i_needs_second_cycle (cmd_needs_second_cycle), + .i_needs_third_cycle (cmd_needs_third_cycle), + .i_can_coalesce (cmd_can_coalesce), + + //state of processing within kernel word + .o_at_second_cycle (cmd_at_second_cycle), + .o_at_third_cycle (cmd_at_third_cycle), + .o_is_coalescing (cmd_is_coalescing), + .o_first_access_in_word (cmd_first_access_in_word) + ); + + + + /////////////////////// + // Burst Coalescer // + /////////////////////// + + //localparams from dla_hld_lsu_write_data_alignment.sv -- this models how much latency the data aligner itself takes + localparam int RAW_SHIFT_TO_ALIGN_WIDTH = (HIGH_THROUGHPUT_MODE) ? (($clog2(KER_DATA_BYTES) > INTRA_ADDR_WIDTH) ? INTRA_ADDR_WIDTH : $clog2(KER_DATA_BYTES)) : $clog2(KER_DATA_BYTES); + localparam int SHIFT_TO_ALIGN_WIDTH = RAW_SHIFT_TO_ALIGN_WIDTH - ADDR_ALIGNMENT_BITS; + localparam int DATA_ALIGNER_LATENCY = (DATA_ALIGNER_MUX_PER_PIPE == 0) ? 0 : ((SHIFT_TO_ALIGN_WIDTH + DATA_ALIGNER_MUX_PER_PIPE - 1) / DATA_ALIGNER_MUX_PER_PIPE); + + //compute the total latency of the write data alignment + localparam int CMD_FIFO_TO_INPUT_FIFO_DATA_LATENCY = 2; //1 pipeline stage on read ack, stall in earliness = 1 + localparam int ALIGNER_TO_AVM_DATA_FIFO_LATENCY = 1; //1 pipeline stage, a register is needed to accumulate write data + localparam int AVM_DATA_FIFO_WRITE_TO_READ_LATENCY = 3; //assuming dla_acl_mid_speed_fifo + localparam int TOTAL_WRITE_ALIGNMENT_LATENCY = CMD_FIFO_TO_INPUT_FIFO_DATA_LATENCY + DATA_ALIGNER_LATENCY + ALIGNER_TO_AVM_DATA_FIFO_LATENCY + AVM_DATA_FIFO_WRITE_TO_READ_LATENCY; + + //compute the minimum total latency of the burst coalescer + localparam int CMD_FIFO_TO_BURST_COAL_INPUT_LATENCY = 1; //1 pipeline stage for burstcoal_valid + localparam int BURST_COAL_INPUT_TO_REPEAT_FIFO_LATENCY = 4; //inside burst coal: i_valid -> input_valid -> late_captured_done_with_word -> coal_done_with_word -> repeat_fifo_wr_req + localparam int REPEAT_FIFO_WRITE_TO_READ_LATENCY = 3; //assuming dla_acl_mid_speed_fifo + localparam int REPEATER_LATENCY = 0; //same clock cycle handshaking + localparam int AVM_CTRL_FIFO_WRITE_TO_READ_LATENCY = 3; //assuming dla_acl_mid_speed_fifo + localparam int TOTAL_BURST_COALESCER_LATENCY = CMD_FIFO_TO_BURST_COAL_INPUT_LATENCY + BURST_COAL_INPUT_TO_REPEAT_FIFO_LATENCY + REPEAT_FIFO_WRITE_TO_READ_LATENCY + REPEATER_LATENCY + AVM_CTRL_FIFO_WRITE_TO_READ_LATENCY; + + //to prevent avm_write from deasserting partway through a burst, ensure the burst coalescer has the longer latency, this is implemented with a separate occ tracker for repeat fifo empty inside burst coal to add latency + localparam int BURST_COAL_EXTRA_WRITE_LATENCY = (TOTAL_WRITE_ALIGNMENT_LATENCY > TOTAL_BURST_COALESCER_LATENCY) ? (TOTAL_WRITE_ALIGNMENT_LATENCY - TOTAL_BURST_COALESCER_LATENCY) : 0; + + generate + if (READ || !ENABLE_BURST_COALESCE) begin : BURST_COAL_EARLY_AS_POSSIBLE + //for the read lsu, send a memory word to the burst coalescer the first time that this memory word accessed + //even for the write lsu, avm_write deasserting partway through a burst cannot happen if the maximum burst length is 1 + always_ff @(posedge clock) begin + burstcoal_valid <= can_read_cmd_fifo & cmd_first_access_in_word; + end + end + else begin : BURST_COAL_LATE_AS_POSSIBLE + //for the write lsu, send a memory word to the burst coalescer the last time that this memory word accessed + //the ring global interconnect requires that one cannot deassert avm_write partway through a burst + //avm_write deassertion partway through the burst can happen if the burst coalescer sees this address and then times out before the word coalescer is done assembling the corresponding memory word + //having the data ready before the corresponding address is released to the burst coalescer ensures the word coalescer finishes first, any burst up to this memory word cannot stall partway through + always_ff @(posedge clock) begin + burstcoal_valid <= can_read_cmd_fifo & ~cmd_is_coalescing; + end + end + endgenerate + + always_ff @(posedge clock) begin + burstcoal_add_to_base_addr <= {cmd_at_third_cycle, cmd_at_second_cycle}; + input_wordaddr_fifo_rd_ack <= cmd_fifo_rd_ack; + end + + dla_hld_lsu_burst_coalescer + #( + .ASYNC_RESET (ASYNC_RESET), + .ENABLE_BURST_COALESCE (ENABLE_BURST_COALESCE), + .USE_REPEATER ((READ) ? 0 : 1), //read burst is just one word for the request, write burst has to send data over burstcount clocks and therefore takes burstcount words + .WORD_ADDR_WIDTH (WORD_ADDR_WIDTH), + .BURSTCOUNT_WIDTH (BURSTCOUNT_WIDTH), + .UPSTREAM_STALL_LATENCY (2), //latency from burstcoal_almost_full to burstcoal_valid + .MLAB_FIFO_DEPTH (MLAB_FIFO_DEPTH), + .M20K_WIDE_FIFO_DEPTH (M20K_WIDE_FIFO_DEPTH), + .M20K_NARROW_FIFO_DEPTH (M20K_NARROW_FIFO_DEPTH), + .NO_AVM_WAITREQUEST ((CACHE_SIZE_BYTES==0) ? 0 : 1), //if read cache is being used, guaranteed that cache can accept the transaction immediately since cache capacity is larger than throttle threshold + .BURST_COAL_MAX_TIMEOUT_BIT (BURST_COAL_MAX_TIMEOUT_BIT), + .ADD_TO_ADDR_IS_ZERO ((MAX_MEM_WORDS_PER_KER_WORD==1) ? 1 : 0), //if lsu is aligned then burstcoal_add_to_base_addr will be 0, don't need adder inside burstcoal so some pipeline stages can be removed + .EXTRA_WRITE_LATENCY (BURST_COAL_EXTRA_WRITE_LATENCY), + .USE_AXI (USE_AXI), + .ADDR_ADAPT_WIDTH (ADDR_ADAPT_WIDTH) + ) + dla_hld_lsu_burst_coalescer_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + + //input to burst coalescing + .i_valid (burstcoal_valid), + .i_base_addr (input_wordaddr_fifo_rd_data), + .i_add_to_base_addr (burstcoal_add_to_base_addr), + .o_almost_full (burstcoal_almost_full), + .o_disable_coalescer_timeout (disable_coalescer_timeout), + + //for writeack + .o_burstcoal_snoop_valid (burstcoal_snoop_valid), + .o_burstcoal_snoop_burstsize (burstcoal_snoop_burstsize), + + //axi last fifo + .o_axi_last_fifo_rd_data (axi_last_fifo_rd_data), + .i_axi_last_fifo_rd_ack (axi_last_fifo_rd_ack), + .o_axi_last_fifo_empty (axi_last_fifo_empty), + + //output to avm addr and burstcount + .o_avm_ctrl_fifo_empty (avm_ctrl_fifo_empty), + .i_avm_ctrl_fifo_rd_ack (avm_ctrl_fifo_rd_ack), + .o_avm_word_address (avm_word_address), + .o_avm_burstcount (avm_burstcount) + ); + assign avm_address = {avm_word_address, {INTRA_ADDR_WIDTH{1'h0}}}; + + + + ///////////////////////////// + // AVM Request Interface // + ///////////////////////////// + + generate + if (READ == 0) begin : GEN_WRITE_DATA_ALIGNMENT + dla_hld_lsu_write_data_alignment #( + .INTRA_ADDR_WIDTH (INTRA_ADDR_WIDTH), + .MAX_MEM_WORDS_PER_KER_WORD (MAX_MEM_WORDS_PER_KER_WORD), + .ASYNC_RESET (ASYNC_RESET), + .ADDR_ALIGNMENT_BITS (ADDR_ALIGNMENT_BITS), + .USE_BYTE_ENABLE (USE_BYTE_ENABLE), + .HIGH_THROUGHPUT_MODE (HIGH_THROUGHPUT_MODE), + .MEM_DATA_BYTES (MEM_DATA_BYTES), + .KER_DATA_BYTES (KER_DATA_BYTES), + .KER_DATA_BYTES_LAST (KER_DATA_BYTES_LAST), + .DATA_ALIGNER_MUX_PER_PIPE (DATA_ALIGNER_MUX_PER_PIPE), + .M20K_WIDE_FIFO_DEPTH (M20K_WIDE_FIFO_DEPTH) + ) + dla_hld_lsu_write_data_alignment_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + + //cmd fifo kernel word info + .i_cmd_more_wide_sections (cmd_more_wide_sections), + .i_cmd_spans_two (cmd_spans_two), + .i_cmd_spans_three (cmd_spans_three), + .i_cmd_addr_modulo (cmd_addr_modulo), + .i_cmd_addr (cmd_addr), + + //cmd fifo read control + .i_can_read_cmd_fifo (can_read_cmd_fifo), + .i_cmd_fifo_rd_ack (cmd_fifo_rd_ack), + .i_cmd_at_second_cycle (cmd_at_second_cycle), + .i_cmd_at_third_cycle (cmd_at_third_cycle), + .i_cmd_is_coalescing (cmd_is_coalescing), + .i_cmd_first_access_in_word (cmd_first_access_in_word), + + //input fifos + .i_input_byteenable_fifo_rd_data(input_byteenable_fifo_rd_data), + .o_input_byteenable_fifo_rd_ack (input_byteenable_fifo_rd_ack), + .i_input_writedata_fifo_rd_data (input_writedata_fifo_rd_data), + .o_input_writedata_fifo_rd_ack (input_writedata_fifo_rd_ack), + + //avm data fifo + .o_avm_wr_data_fifo_almost_full (avm_wr_data_fifo_almost_full), + .o_avm_wr_data_fifo_empty (avm_wr_data_fifo_empty), + .i_avm_wr_data_fifo_rd_ack (avm_wr_data_fifo_rd_ack), + .o_avm_writedata (avm_writedata), + .o_avm_byteenable (avm_byteenable) + ); + + assign avm_read = 1'b0; + if (USE_AXI) begin + //maps to axi write address channel + assign axi_awvalid = ~avm_ctrl_fifo_empty; + assign avm_ctrl_fifo_rd_ack = axi_awvalid & axi_awready; + + //maps to axi write data channel + assign avm_write = ~axi_last_fifo_empty & ~avm_wr_data_fifo_empty; + assign axi_last = axi_last_fifo_rd_data; + assign avm_wr_data_fifo_rd_ack = avm_write & ~avm_waitrequest; + assign axi_last_fifo_rd_ack = avm_write & ~avm_waitrequest; + end + else begin + assign avm_write = ~avm_ctrl_fifo_empty & ~avm_wr_data_fifo_empty; + assign avm_ctrl_fifo_rd_ack = ~avm_waitrequest & avm_write; + assign avm_wr_data_fifo_rd_ack = avm_ctrl_fifo_rd_ack; + + //avalon does not use these write signals + assign axi_awvalid = 1'b0; + assign axi_last = '0; + end + end + else begin : NO_WRITE_DATA_ALIGNMENT + assign avm_wr_data_fifo_almost_full = 1'b0; + assign avm_write = 1'b0; + assign avm_read = ~avm_ctrl_fifo_empty; + assign avm_byteenable = '1; + assign avm_ctrl_fifo_rd_ack = ~avm_waitrequest & avm_read; + assign axi_awvalid = 1'b0; + assign axi_last = '0; + end + endgenerate + + + + ////////////////////////////// + // AVM Response Interface // + ////////////////////////////// + + generate + if (READ == 0) begin : GEN_WRITE_DOWNSTREAM + dla_hld_lsu_write_kernel_downstream #( + .ASYNC_RESET (ASYNC_RESET), + .HIGH_THROUGHPUT_MODE (HIGH_THROUGHPUT_MODE), + .MAX_MEM_WORDS_PER_KER_WORD (MAX_MEM_WORDS_PER_KER_WORD), + .MLAB_FIFO_DEPTH (MLAB_FIFO_DEPTH), + .M20K_NARROW_FIFO_DEPTH (M20K_NARROW_FIFO_DEPTH), + .WRITEACK_WIDTH (WRITEACK_WIDTH), + .KER_DOWN_STALL_LATENCY (KER_DOWN_STALL_LATENCY), + .TOTAL_OCC_LIMIT (TOTAL_OCC_LIMIT), + .BURSTCOUNT_WIDTH (BURSTCOUNT_WIDTH), + .ENABLE_BURST_COALESCE (ENABLE_BURST_COALESCE), + .USE_AXI (USE_AXI) + ) + dla_hld_lsu_write_kernel_downstream_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + + //cmd fifo kernel word info + .i_cmd_spans_two (cmd_spans_two), + .i_cmd_spans_three (cmd_spans_three), + + //cmd unaligned controller + .i_can_read_cmd_fifo (can_read_cmd_fifo), + .i_cmd_fifo_rd_ack (cmd_fifo_rd_ack), + .i_cmd_at_second_cycle (cmd_at_second_cycle), + .i_cmd_at_third_cycle (cmd_at_third_cycle), + .i_cmd_is_coalescing (cmd_is_coalescing), + + //burst coalescer + .i_burstcoal_snoop_valid (burstcoal_snoop_valid), + .i_burstcoal_snoop_burstsize (burstcoal_snoop_burstsize), + + //write ack fifo + .o_writeack_fifo_almost_full (writeack_fifo_almost_full), + .i_avm_writeack (avm_writeack), + + //read side of predicate fifo + .i_predicate_fifo_empty (predicate_fifo_empty), + .i_predicate_fifo_rd_data (predicate_fifo_rd_data), + .o_predicate_fifo_rd_ack (predicate_fifo_rd_ack), + + //kernel downstream + .o_valid (o_valid), + .o_empty (o_empty), + .o_almost_empty (o_almost_empty), + .i_stall (i_stall) + ); + assign o_readdata = 'x; + assign rsp_fifo_almost_full = 1'b0; + assign avm_rd_data_fifo_almost_full = 1'b0; + end + else begin : GEN_READ_DATA_ALIGNMENT + dla_hld_lsu_read_data_alignment #( + .INTRA_ADDR_WIDTH (INTRA_ADDR_WIDTH), + .KER_DOWN_STALL_LATENCY (KER_DOWN_STALL_LATENCY), + .MAX_MEM_WORDS_PER_KER_WORD (MAX_MEM_WORDS_PER_KER_WORD), + .ENABLE_WORD_COALESCE (ENABLE_WORD_COALESCE), + .ASYNC_RESET (ASYNC_RESET), + .ADDR_ALIGNMENT_BITS (ADDR_ALIGNMENT_BITS), + .HIGH_THROUGHPUT_MODE (HIGH_THROUGHPUT_MODE), + .MEM_DATA_BYTES (MEM_DATA_BYTES), + .KER_DATA_BYTES (KER_DATA_BYTES), + .CACHE_BYPASS_DATA_FIFO ((CACHE_SIZE_BYTES==0) ? 0 : 1), + .MLAB_FIFO_DEPTH (MLAB_FIFO_DEPTH), + .DATA_ALIGNER_MUX_PER_PIPE (DATA_ALIGNER_MUX_PER_PIPE), + .M20K_WIDE_FIFO_DEPTH (M20K_WIDE_FIFO_DEPTH) + ) + read_data_alignment_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + + //write side of avm data fifo + .i_burstcoal_valid (burstcoal_valid), + .o_avm_rd_data_fifo_almost_full (avm_rd_data_fifo_almost_full), + .i_avm_readdatavalid (avm_readdatavalid), + .i_avm_readdata (avm_readdata), + .o_avm_readdata_accepted (avm_readdata_accepted), + + //write side of response fifo + .o_rsp_fifo_almost_full (rsp_fifo_almost_full), + .i_cmd_fifo_rd_ack (cmd_fifo_rd_ack), + .i_cmd_can_coalesce (cmd_can_coalesce), + .i_cmd_addr (cmd_addr), + .i_cmd_spans_two (cmd_spans_two), + .i_cmd_spans_three (cmd_spans_three), + + //read side of predicate fifo + .i_predicate_fifo_empty (predicate_fifo_empty), + .i_predicate_fifo_rd_data (predicate_fifo_rd_data), + .o_predicate_fifo_rd_ack (predicate_fifo_rd_ack), + + //kernel downstream + .o_readdata (o_readdata), + .o_valid (o_valid), + .o_empty (o_empty), + .o_almost_empty (o_almost_empty), + .i_stall (i_stall) + ); + assign writeack_fifo_almost_full = 1'b0; + end + endgenerate + + +endmodule + +`default_nettype wire diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_lsu_burst_coalescer.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_lsu_burst_coalescer.sv new file mode 100644 index 0000000..e76f7a0 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_lsu_burst_coalescer.sv @@ -0,0 +1,643 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +// This module implements burst coalescing as a bump-in-the-wire architecture. It accepts word addresses and tries to form avalon bursts by looking for sequential word addresses. To play +// nicely with HLD global interconnect, this module also does not allow bursts to cross a burst boundary. That means if the max burst size is 16, bursts cannot cross a boundary of 16 words. +// Note this module only operates on word addresses whereas most of the LSU operates on byte addresses. +// +// The result of burst coalescing is one request for each burst. This is fine for read requests, but a write burst of length B is transferred over B clock cycles. To simply the fifo read +// control inside the write LSU, every read from the avm_ctrl_fifo results in one read from the avm_wr_data_fifo. The avm_ctrl_fifo is the output from the burst coalescer and ultimately +// drives avm_address and o_avm_burstcount. The avm_wr_data_fifo is the output from the write data aligner and ultimately drives avm_writedata and avm_byteenable. To make the read count from +// these fifos match, there is a repeater inside this module which receives one burst of length B from the burst coalescer and write B copies of this into the avm_ctrl_fifo. +// +// The input to this module may also seem a bit strange, the actual word address that burst coalesce operates on is i_base_addr + i_add_to_base_addr. Why not do the add outside this module? +// Because the adder is tessellated, and we can start comparing if the addresses are sequential on the lower bits while the upper bits are still being added. This is why the adder lives +// inside this module. The purpose of i_add_to_base_addr is for when a kernel word spans more than one memory word, since i_base_addr is the word address of the first memory word, we need +// to compute i_base_addr+1 for the second memory word, and i_base_addr+2 for the third memory word that this kernel word touches. If i_add_to_base_addr is known to be 0 e.g. the LSU is +// aligned, one pipeline stage can be removed to save area. +// +// If one is using read cache, burst coalescing inside the LSU is disabled, and there is a burst coalescer inside the cache to make bursts for cache misses. Additionally, the read LSU has +// throttle logic to not request more reads than it has space for. The cache capacity is at least as large as the throttle threshold, therefore the cache will never backpressure the burst +// coalescer inside the LSU, and so avm_ctrl_fifo can be bypassed. +// +// Even if burst coalescing as a feature is not used, one still needs to pass signals through this module for the adder (i_base_addr + i_add_to_base_addr) and the fifo (the unaligned +// controller operates with stall latency, must have enough downstream space available to catch things in flight). +// +// For additional info, refer to dla_hld_global_load_store.sv (top module of entire LSU) and dla_hld_lsu.sv (top module of the core LSU). + +`default_nettype none + +module dla_hld_lsu_burst_coalescer #( + //parameters that are different from dla_hld_lsu.sv + parameter bit USE_REPEATER, //set to 0 for read LSU, set to 1 for write LSU, using a repeater means one burst of length B will be written B times into avm_ctrl_fifo + parameter int UPSTREAM_STALL_LATENCY, //latency from o_almost_full to i_valid + parameter bit NO_AVM_WAITREQUEST, //set to 1 if read cache is being used, guaranteed that cache can accept the transaction immediately since cache capacity is larger than throttle threshold + parameter bit ADD_TO_ADDR_IS_ZERO, //set to 1 if i_add_to_base_addr is 0 (LSU is aligned, or burst coal used in read cache), no adder is needed so one pipeline stage is removed + parameter int EXTRA_WRITE_LATENCY, //to prevent avm_write from deasserting partway through a burst, ensure burst coalescer finishes with a memory word no sooner than the data aligner + + //parameters that are the same as dla_hld_lsu.sv + parameter bit ASYNC_RESET, //0 = registers consume reset synchronously, 1 = registers consume reset asynchronously + parameter int WORD_ADDR_WIDTH, //how many most significant bits of the byte address represent which memory word is being accessed + parameter int BURSTCOUNT_WIDTH, //width of avalon burst count signal, max burst size is 2**(BURSTCOUNT_WIDTH-1) + parameter bit ENABLE_BURST_COALESCE, //whether to coalesce sequential memory words together to make a burst, feature will be disabled (parameter value ignored) if width adaption on the memory interface is used + parameter int MLAB_FIFO_DEPTH, //use a shallow fifo if handshaking is expected to take a few clocks (or if capacity can be borrowed from a nearby deep fifo), if we need an MLAB may as well use all of it + parameter int M20K_WIDE_FIFO_DEPTH, //use a deep fifo if handshaking is expected to take hundreds of clocks e.g. going off chip, for wide data path use M20K in shallowest mode, but may as well use all depth available + parameter int M20K_NARROW_FIFO_DEPTH, //if we need a deep fifo but the data path is narrow e.g. up to 10 bits which is the narrowest M20K on S10, can get additional depth for without needing more M20K + parameter int BURST_COAL_MAX_TIMEOUT_BIT, //limit how large the dynamic timeout threshold can get inside burst coalescer + parameter bit USE_AXI, //0 = use AvalonMM, 1 = use AXI, this affects how the burstcount is constructed + parameter int ADDR_ADAPT_WIDTH //if width adaption is done on the global memory interface, how many word address LSBs are needed in AXI write data channel to indicate how to width adapt +) ( + input wire clock, + input wire resetn, + + //input to burst coalescing + input wire i_valid, //one memory word has been released from the unaligned controller, this will eventually result in one word on avm + input wire [WORD_ADDR_WIDTH-1:0] i_base_addr, //the input word address to burst coal is i_base_addr + i_add_to_base_addr, where i_base_addr is the first memory word that a kernel word touches + input wire [1:0] i_add_to_base_addr, //if a kernel word spans several memory words, need to adjust which word address it is targeting + output logic o_almost_full, //the fifo inside this module that immediately follows the burst coalescing logic is getting full + output logic o_disable_coalescer_timeout, //ignore the coalescer timeout if avm_ctrl_fifo is far away from being empty + + //writeack needs to know how many words were in a burst, snoop on what is written into avm_ctrl_fifo + output logic o_burstcoal_snoop_valid, + output logic [BURSTCOUNT_WIDTH-1:0] o_burstcoal_snoop_burstsize, + + //axi last fifo + output logic [ADDR_ADAPT_WIDTH:0] o_axi_last_fifo_rd_data, //MSBs = some bits of address for width adaptation, LSB = axi last which indicates this word is the last in a burst + input wire i_axi_last_fifo_rd_ack, + output logic o_axi_last_fifo_empty, + + //avm request interface -- avm_ctrl_fifo contains avm_address and o_avm_burstcount, can't hook up avalon to here since writedata and byteenable are managed separately, only assert avm_write once all are available + output logic o_avm_ctrl_fifo_empty, //fifo is empty + input wire i_avm_ctrl_fifo_rd_ack, //read from fifo + output logic [WORD_ADDR_WIDTH-1:0] o_avm_word_address, //still need to convert from this word address to avm_address which is a byte address + output logic [BURSTCOUNT_WIDTH-1:0] o_avm_burstcount //this is the actual o_avm_burstcount signal to goes to the memory interface +); + + + //a tessellated adder is used to calculate the word address for burst coal, this specifies the index where the adder carry-chain is cut for a pipeline stage + //ideally this is done in the middle of the adder, but the logic is easier if the upper bits should be the same for coalescing to happen (crossing a burst boundary is not allowed) + //BURSTCOUNT_WIDTH specifies where the burst boundary is, by chossing the tessellation index to be at or above this, the upper bits must be constant for all words in a burst + localparam int TESS_INDEX = ((WORD_ADDR_WIDTH/2) < BURSTCOUNT_WIDTH) ? BURSTCOUNT_WIDTH : (WORD_ADDR_WIDTH/2); + + //UPSTREAM_STALL_LATENCY is the latency from o_almost_full to i_valid, and then there are up to four pipeline stages: + //i_valid -> input_valid -> late_captured_done_with_word -> coal_done_with_word -> repeat_fifo_wr_req + //need to catch one more thing in case of timeout happens after almost full has asserted and stays asserted + localparam int REPEAT_FIFO_ALMOST_FULL_CUTOFF = UPSTREAM_STALL_LATENCY + 5; + + //if burst coalescing is not enabled, still need 2 clocks to add to base address before writing into fifo + //if using burst coalescing for writes, need a repeater and there is a zero cycle handshake between the repeater circuit and avm_ctrl_fifo + //if using burst coalescing for reads, there is no repeater and the result of burst coalescing goes straight to avm_ctrl_fifo + localparam int AVM_CTRL_FIFO_ALMOST_FULL_CUTOFF = (!ENABLE_BURST_COALESCE) ? (UPSTREAM_STALL_LATENCY+2) : (USE_REPEATER) ? 0 : REPEAT_FIFO_ALMOST_FULL_CUTOFF; + + + + /////////////// + // Signals // + /////////////// + + //reset + logic aclrn, sclrn, resetn_synchronized; + + //adder + logic input_valid; + logic [TESS_INDEX:0] input_addr_lo; + logic [TESS_INDEX-1:0] late_input_addr_lo; + logic [WORD_ADDR_WIDTH-1:TESS_INDEX] input_base_addr_hi; + logic [WORD_ADDR_WIDTH-1:TESS_INDEX] late_input_addr_hi; + + //avm_ctrl_fifo write side + logic axi_last_fifo_wr_req; + logic [ADDR_ADAPT_WIDTH:0] axi_last_fifo_wr_data; + logic avm_ctrl_fifo_wr_req, avm_ctrl_fifo_almost_full; + logic [WORD_ADDR_WIDTH-1:0] avm_ctrl_fifo_wr_addr; + logic [BURSTCOUNT_WIDTH-1:0] avm_ctrl_fifo_wr_burstcount; + + + + ///////////// + // Reset // + ///////////// + + dla_acl_reset_handler + #( + .ASYNC_RESET (ASYNC_RESET), + .USE_SYNCHRONIZER (0), + .SYNCHRONIZE_ACLRN (0), + .PIPE_DEPTH (0), + .NUM_COPIES (1) + ) + dla_acl_reset_handler_inst + ( + .clk (clock), + .i_resetn (resetn), + .o_aclrn (aclrn), + .o_resetn_synchronized (resetn_synchronized), + .o_sclrn (sclrn) + ); + + + + ///////////////////////// + // Tessellated Adder // + ///////////////////////// + + // compute i_base_addr + i_add_to_base_addr, which is the input address that the burst coalescer will use + // The following naming convention is used: + // - lo means this the bottom half of the tessellated add, hi means this is the top half of the tessellated add + // - base_addr means this is the input to the module, addr means that i_add_to_base_addr has already been added + // - late means it is one clock cycle after the corresponding non-late version + + //ADD_TO_ADDR_IS_ZERO indicates that i_add_to_base_addr is known to be zero, which is the case for an aligned lsu, and also for burstcoal inside cache + //since we don't need to add, remove one pipeline stage + generate + if (ADD_TO_ADDR_IS_ZERO) begin : NO_ADDER + assign input_valid = i_valid; + assign input_addr_lo = i_base_addr[TESS_INDEX-1:0]; + assign input_base_addr_hi = i_base_addr[WORD_ADDR_WIDTH-1:TESS_INDEX]; + always_ff @(posedge clock) begin + late_input_addr_lo <= input_addr_lo[TESS_INDEX-1:0]; + late_input_addr_hi <= input_base_addr_hi; + end + end + else begin : GEN_ADDER + always_ff @(posedge clock) begin + input_valid <= i_valid; + input_addr_lo <= i_base_addr[TESS_INDEX-1:0] + i_add_to_base_addr; + input_base_addr_hi <= i_base_addr[WORD_ADDR_WIDTH-1:TESS_INDEX]; + late_input_addr_lo <= input_addr_lo[TESS_INDEX-1:0]; + late_input_addr_hi <= input_base_addr_hi + input_addr_lo[TESS_INDEX]; + end + end + endgenerate + //note: input_valid in this module has the same meaning as i_valid in the word coalescer + + + + //////////////////////////////////// + // Burst Coalescer and Repeater // + //////////////////////////////////// + + //the output if the generate block below is the avm_ctrl_fifo write side signals + + generate + if (!ENABLE_BURST_COALESCE) begin : NO_BURST_COAL + if (ADD_TO_ADDR_IS_ZERO) begin : NO_ADDER //no adder and no burst coalesce, this is becomes purely a pass through + assign avm_ctrl_fifo_wr_req = i_valid; + assign avm_ctrl_fifo_wr_addr = i_base_addr; + end + else begin : GEN_ADDER //still need the tessellated adder even though there is no burst coalescer + logic late_i_valid; + always_ff @(posedge clock) begin + late_i_valid <= i_valid; + avm_ctrl_fifo_wr_req <= late_i_valid; + end + assign avm_ctrl_fifo_wr_addr = {late_input_addr_hi, late_input_addr_lo}; + end + assign avm_ctrl_fifo_wr_burstcount = 'x; //o_avm_burstcount will be set to a constant instead of being read from the fifo + assign o_almost_full = avm_ctrl_fifo_almost_full; + assign axi_last_fifo_wr_req = avm_ctrl_fifo_wr_req; + assign axi_last_fifo_wr_data = {avm_ctrl_fifo_wr_addr, 1'b1}; + end + else begin : GEN_BURST_COAL + + //capture the current word + logic late_input_valid; //delayed version of input_valid + logic captured_valid; //is what we captured valid, turns on when an incoming transaction arrives, turns off if we time out + logic [BURSTCOUNT_WIDTH-2:0] captured_next_addr_lo_inside_burst; //capture what the next address should be within the burst if coalescing is going to happen + logic captured_next_addr_in_same_burst; //do not allow bursts to cross the burst boundary + logic [TESS_INDEX-1:0] captured_addr_lo, captured_next_addr_lo; //bottom half of the captured address + logic [WORD_ADDR_WIDTH-1:TESS_INDEX] late_captured_addr_hi; //top half of the captured address + + //timeout + logic timeout; //waited too long for the next word to arrive, going to release the captured address to downstream and report that it cannot coalesce + + //coalescer + logic continue_in_same_burst_valid, late_continue_in_same_burst_valid; //word N+1 has arrived, can coalesce if word N did not time out and did not cross burst boundary + logic addr_match_lo, late_addr_match; //captured address matches incoming address, comparison is split over 2 clocks since adder is tessellated + logic coal_continue_in_same_burst; //word N can coalesce with word N+1 + + //keep the captured data live + logic [TESS_INDEX-1:0] late_captured_addr_lo; + logic late_captured_done_with_word; + logic coal_done_with_word; + logic [WORD_ADDR_WIDTH-1:0] coal_addr; + + + //captured the current word, check for coalescing when the next word arrives + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) captured_valid <= 1'b0; + else begin + if (input_valid) captured_valid <= 1'b1; + else if (timeout) captured_valid <= 1'b0; + if (~sclrn) captured_valid <= 1'b0; + end + end + + //addr and next_addr are the same for bits [WORD_ADDR_WIDTH-1:BURSTCOUNT_WIDTH-1] + //addr and next_addr are different for bits [BURSTCOUNT_WIDTH-2:0], for these lower bits we have next_addr = addr+1 + //the split between hi and lo is defined by TESS_BITS, and TESS_BITS >= BURSTCOUNT_WIDTH, therefore for the hi range addr and next_addr are the same + always_ff @(posedge clock) begin + //one clock after input_valid + if (input_valid) begin + captured_next_addr_lo_inside_burst <= input_addr_lo[BURSTCOUNT_WIDTH-2:0] + 1'b1; + captured_addr_lo <= input_addr_lo[TESS_INDEX-1:0]; + captured_next_addr_in_same_burst <= ~&input_addr_lo[BURSTCOUNT_WIDTH-2:0]; //cannot continue burst if at end of boundary, prevent case where next address is start of burst boundary + end + late_input_valid <= input_valid; + + //two clocks after input_valid + if (late_input_valid) begin + late_captured_addr_hi <= late_input_addr_hi; + end + end + + //one clock after input_valid + assign captured_next_addr_lo = {captured_addr_lo[TESS_INDEX-1:BURSTCOUNT_WIDTH-1], captured_next_addr_lo_inside_burst}; + + + //coalescer -- assuming the previous word has been capturedd, check if the previous word can coalesce with the incoming word + always_ff @(posedge clock) begin + //one clock after input_valid + continue_in_same_burst_valid <= input_valid & captured_valid & captured_next_addr_in_same_burst; //word N+1 has arrived, can coalesce if word N did not time out and did not cross burst boundary + addr_match_lo <= (input_addr_lo[TESS_INDEX-1:0] == captured_next_addr_lo[TESS_INDEX-1:0]); //bottom half of the address check + + //two clocks after input_valid + late_continue_in_same_burst_valid <= continue_in_same_burst_valid; + late_addr_match <= (late_input_addr_hi[WORD_ADDR_WIDTH-1:TESS_INDEX] == late_captured_addr_hi[WORD_ADDR_WIDTH-1:TESS_INDEX]) & addr_match_lo; //top half of the address check + result from bottom half + end + assign coal_continue_in_same_burst = late_addr_match & late_continue_in_same_burst_valid; //word N can coalesce with word N+1 + + + //timeout + dla_hld_lsu_coalescer_dynamic_timeout #( + .ASYNC_RESET (ASYNC_RESET), + .MAX_TIMEOUT_BIT (BURST_COAL_MAX_TIMEOUT_BIT) + ) + dla_hld_lsu_coalescer_dynamic_timeout_inst + ( + .clock (clock), + .resetn (resetn), + .i_valid (input_valid), + .i_disable_timeout (o_disable_coalescer_timeout), + .o_timeout (timeout), + .i_coal_if_addr_match (captured_valid & captured_next_addr_in_same_burst), + .i_late_addr_match (late_addr_match) + ); + + + //keep the captured data live + always_ff @(posedge clock) begin + //one clock after captured_valid + late_captured_done_with_word <= timeout | (input_valid & captured_valid); //done with word N if it timed-out or the word N+1 shows up + late_captured_addr_lo <= captured_addr_lo; + + //two clocks after captured_valid + coal_done_with_word <= late_captured_done_with_word; + coal_addr <= {late_captured_addr_hi, late_captured_addr_lo}; + end + + + //build up the burst, increment burstcount for every successful coalesce, flush the burst (write to the repeat fifo) upon timeout, address is not the next sequential address, or reached burst boundary + logic add_one_to_burstcount; //successful coalesce means increase size of the burst + logic done_burst_load_addr_next_time; //when to capture the first address of each burst + logic repeat_fifo_wr_req; //flush the burst + logic [WORD_ADDR_WIDTH-1:0] repeat_fifo_wr_addr; //capture the first address of each burst, as this is what is held on avalon address as the write burst goes out over several clocks + logic [BURSTCOUNT_WIDTH-1:0] repeat_fifo_wr_burstcount; //this is the burst count, the size of the burst + logic repeat_fifo_wr_burstcount_eq_one; //manually retimed logic across the repeat fifo to reduce combinational logic on repeat_fifo_rd_ack, repeater circuit needs to check burstcount == 1 + + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) begin + add_one_to_burstcount <= 1'b0; + done_burst_load_addr_next_time <= 1'b1; + repeat_fifo_wr_req <= 1'b0; + repeat_fifo_wr_addr <= '0; //not needed by not expected to cost extra logic on fpga + repeat_fifo_wr_burstcount <= (USE_AXI) ? 'h0 : 'h1; //axi burst length is one less than avalon + repeat_fifo_wr_burstcount_eq_one <= 1'b1; + end + else begin + //write to the fifo when the burst is done, otherwise the burst is not done so increment burst count + repeat_fifo_wr_req <= coal_done_with_word & ~coal_continue_in_same_burst; + add_one_to_burstcount <= coal_done_with_word & coal_continue_in_same_burst; + + //if we wrote to fifo the burst is done, capture the address of the next word that arrives since that will be the start of a new burst + //done_burst_load_addr_next_time must reset to 1 to ensure we capture the very first address + if (coal_done_with_word) done_burst_load_addr_next_time <= ~coal_continue_in_same_burst; + if (coal_done_with_word & done_burst_load_addr_next_time) repeat_fifo_wr_addr <= coal_addr; + + //update burstcount for the next word + //if repeat_fifo_wr_req = 1 on clock cycle N, these values update as of clock cycle N+1, so the old values on clock cycle N are written into the fifo + if (repeat_fifo_wr_req) begin + repeat_fifo_wr_burstcount <= (USE_AXI) ? 'h0 : 'h1; + repeat_fifo_wr_burstcount_eq_one <= 1'b1; + end + if (add_one_to_burstcount) begin + repeat_fifo_wr_burstcount <= repeat_fifo_wr_burstcount + 1'b1; + repeat_fifo_wr_burstcount_eq_one <= 1'b0; + end + + if (~sclrn) begin + add_one_to_burstcount <= 1'b0; + done_burst_load_addr_next_time <= 1'b1; + repeat_fifo_wr_req <= 1'b0; + //repeat_fifo_wr_addr <= '0; //this is not needed + repeat_fifo_wr_burstcount <= (USE_AXI) ? 'h0 : 'h1; + repeat_fifo_wr_burstcount_eq_one <= 1'b1; + end + end + end + + + if (!USE_REPEATER) begin : NO_REPEATER //read LSU does not need a repeater, bypass the repeat fifo and instead write the contents to the avm_ctrl_fifo + assign avm_ctrl_fifo_wr_req = repeat_fifo_wr_req; + assign avm_ctrl_fifo_wr_addr = repeat_fifo_wr_addr; + assign avm_ctrl_fifo_wr_burstcount = repeat_fifo_wr_burstcount; + assign o_almost_full = avm_ctrl_fifo_almost_full; + end + else begin : GEN_REPEATER + //read side of the repeat fifo + logic repeat_fifo_empty_raw, repeat_fifo_empty, repeat_fifo_rd_ack, repeat_burst_is_last; + logic [WORD_ADDR_WIDTH-1:0] repeat_fifo_rd_addr; + logic [BURSTCOUNT_WIDTH-1:0] repeat_fifo_rd_burstcount; + logic repeat_fifo_burstcount_eq_one; + + //repeater + logic inside_a_burst, first_in_current_burst; + logic [BURSTCOUNT_WIDTH-1:0] remaining_burst; + logic remaining_burst_eq_two; + + /////////////////// + // Repeat FIFO // + /////////////////// + + // one write into this fifo corresponds to one burst, after this fifo is repeat logic which copies 1 entry in this fifo into N entries where N is the burst count + // the reason this fifo is needed is the burst coalescers may have released a big burst, and before the N copies can be written into the repeat fifo, the burst coalescer finishes another burst + + dla_hld_fifo #( + .WIDTH (1 + BURSTCOUNT_WIDTH + WORD_ADDR_WIDTH), + .DEPTH (MLAB_FIFO_DEPTH), + .NEVER_OVERFLOWS (1), + .ALMOST_FULL_CUTOFF (REPEAT_FIFO_ALMOST_FULL_CUTOFF), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0), + .STYLE ("ms") + ) + repeat_fifo_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + .i_valid (repeat_fifo_wr_req), + .i_data ({repeat_fifo_wr_burstcount_eq_one, repeat_fifo_wr_burstcount, repeat_fifo_wr_addr}), + .o_stall (), + .o_almost_full (o_almost_full), + .o_valid (), + .o_data ({repeat_fifo_burstcount_eq_one, repeat_fifo_rd_burstcount, repeat_fifo_rd_addr}), + .i_stall (~repeat_fifo_rd_ack), + .o_almost_empty (), + .o_empty (repeat_fifo_empty_raw), + .ecc_err_status () + ); + + //to prevent avm_write from deasserting partway through a burst, ensure burst coalescer finishes with a memory word no sooner than the data aligner + //normally the latency through the burst coalescer is longer than the write data alignment, so it would be sufficient to release a memory word to the burst coalescer upon the last access to that memory word + //in case the write data alignment has a longer latency, add some latency here by masking the empty signal for the repeat fifo + if (EXTRA_WRITE_LATENCY) begin : GEN_EXTRA_WRITE_LATENCY + logic repeat_fifo_not_empty; + logic repeat_fifo_wr_req_delayed; + + //normally the increment for the fifo empty signal is the fifo write request delayed by WRITE_TO_READ_LATENCY-1 clocks (since the occ tracker has latency 1), this value is 2 since mid speed fifo has latency 3 + //then we need to add some more latency to ensure the burst coalescer finishes with a memory word no sooner than the data aligner + dla_acl_shift_register_no_reset #( + .WIDTH (1), + .STAGES (EXTRA_WRITE_LATENCY+2) + ) + repeat_fifo_extra_latency_inst + ( + .clock (clock), + .D (repeat_fifo_wr_req), + .Q (repeat_fifo_wr_req_delayed) + ); + + dla_acl_tessellated_incr_decr_threshold #( + .CAPACITY (MLAB_FIFO_DEPTH), + .THRESHOLD (1), + .INITIAL_OCCUPANCY (0), + .THRESHOLD_REACHED_AT_RESET (0), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0) + ) + repeat_fifo_empty_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + .incr_no_overflow (repeat_fifo_wr_req_delayed), + .incr_raw (repeat_fifo_wr_req_delayed), + .decr_no_underflow (repeat_fifo_rd_ack), + .decr_raw (repeat_fifo_rd_ack), + .threshold_reached (repeat_fifo_not_empty) + ); + assign repeat_fifo_empty = ~repeat_fifo_not_empty; + end + else begin : NO_EXTRA_WRITE_LATENCY + assign repeat_fifo_empty = repeat_fifo_empty_raw; + end + + + + //////////////// + // Repeater // + //////////////// + + //to simplify the handshake at the avm interface, one burst of length B which is one word inside repeat_fifo is converted into B words inside avm_ctrl_fifo + //this way each read from avm_wr_data_fifo corresponds to one read from avm_ctrl_fifo + + assign repeat_burst_is_last = (inside_a_burst) ? remaining_burst_eq_two : repeat_fifo_burstcount_eq_one; + assign repeat_fifo_rd_ack = ~repeat_fifo_empty & ~avm_ctrl_fifo_almost_full & repeat_burst_is_last; + + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) begin + inside_a_burst <= 1'b0; //track whether we are inside a burst, this is stateful logic so to get inside a burst it needs to be at least length 2 + first_in_current_burst <= 1'b1; + end + else begin + if (~repeat_fifo_empty & ~avm_ctrl_fifo_almost_full) begin + if (~inside_a_burst) begin + if (~repeat_fifo_burstcount_eq_one) inside_a_burst <= 1'b1; + end + else begin + if (remaining_burst_eq_two) inside_a_burst <= 1'b0; + end + first_in_current_burst <= repeat_burst_is_last; + end + if (~sclrn) begin + inside_a_burst <= 1'b0; + first_in_current_burst <= 1'b1; + end + end + end + + always_ff @(posedge clock) begin + if (~repeat_fifo_empty & ~avm_ctrl_fifo_almost_full) begin + if (~inside_a_burst) begin + remaining_burst <= repeat_fifo_rd_burstcount; + remaining_burst_eq_two <= (USE_AXI) ? (repeat_fifo_rd_burstcount == 1) : (repeat_fifo_rd_burstcount == 2); //axi burst length is one less than avalon + end + else begin + remaining_burst <= remaining_burst - 1'b1; + remaining_burst_eq_two <= (USE_AXI) ? (remaining_burst == 2) : (remaining_burst == 3); //axi burst length is one less than avalon + end + end + end + + //same clock cycle handshaking is used to write to avm_ctrl_fifo and to update the repeater circuit (which will read repeat_fifo on the same clock cycle if at the end of a burst) + assign avm_ctrl_fifo_wr_req = ~repeat_fifo_empty & ~avm_ctrl_fifo_almost_full & ((USE_AXI) ? first_in_current_burst : 1'b1); + assign avm_ctrl_fifo_wr_addr = repeat_fifo_rd_addr; + assign avm_ctrl_fifo_wr_burstcount = repeat_fifo_rd_burstcount; + + //axi last fifo + assign axi_last_fifo_wr_req = ~repeat_fifo_empty & ~avm_ctrl_fifo_almost_full; + assign axi_last_fifo_wr_data = {repeat_fifo_rd_addr, repeat_burst_is_last}; + + //snoop for writeack + assign o_burstcoal_snoop_valid = avm_ctrl_fifo_wr_req; + assign o_burstcoal_snoop_burstsize = avm_ctrl_fifo_wr_burstcount; + end + end + endgenerate + + + + ///////////////////// + // Avm Ctrl FIFO // + ///////////////////// + + generate + if (NO_AVM_WAITREQUEST) begin : NO_AVM_CTRL_FIFO + assign o_avm_ctrl_fifo_empty = ~avm_ctrl_fifo_wr_req; //empty from burstcoal means read cache must accept it + assign o_avm_word_address = avm_ctrl_fifo_wr_addr; + assign o_avm_burstcount = (USE_AXI) ? 0 : 1; //burstcoal inside lsu should be disabled, cache has its own burstcoal before releasing to avm transactions to global mem interconnect + //i_avm_ctrl_fifo_rd_ack is ignored + assign avm_ctrl_fifo_almost_full = 1'b0; //never need to backpressure cmd fifo read side state machine, cache will always have space to accept transactions + assign o_disable_coalescer_timeout = 1'b0; + end + else begin : GEN_AVM_CTRL_FIFO + logic [BURSTCOUNT_WIDTH-1:0] avm_burstcount_raw; + logic avm_ctrl_fifo_almost_full_raw, axi_last_fifo_almost_full; + assign avm_ctrl_fifo_almost_full = avm_ctrl_fifo_almost_full_raw | axi_last_fifo_almost_full; + + //AXI write data channel + //- data and byte enable come from the write data aligner + //- last signal depends on the number of words in the burst and therefore has to come from the burst coalescer + //- control flow: dla_hld_lsu waits until both the write data aligner and burst coalescer last fifo have stuff before asserting valid on the axi write data channel + + //when do we need the axi last signal? + //- obviously need to be using AXI instead of Avalon + //- write LSU has USE_REPEATER = 1 + //- don't need axi last if burst coalescer is disabled + //- if width adaption is done on the global memory interface, need the lower bits of the address to be present in every word of data to indicate how to width adapt (that was the case for Avalon, not so for AXI) + if (USE_AXI && USE_REPEATER && (ENABLE_BURST_COALESCE || ADDR_ADAPT_WIDTH)) begin + dla_hld_fifo #( + .WIDTH (ADDR_ADAPT_WIDTH + 1), + .DEPTH (M20K_NARROW_FIFO_DEPTH), + .NEVER_OVERFLOWS (1), + .ALMOST_FULL_CUTOFF (AVM_CTRL_FIFO_ALMOST_FULL_CUTOFF), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0), + .STYLE ("ms") + ) + axi_last_fifo_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + .i_valid (axi_last_fifo_wr_req), + .i_data (axi_last_fifo_wr_data), + .o_stall (), + .o_almost_full (axi_last_fifo_almost_full), + .o_valid (), + .o_data (o_axi_last_fifo_rd_data), + .i_stall (~i_axi_last_fifo_rd_ack), + .o_almost_empty (), + .o_empty (o_axi_last_fifo_empty), + .ecc_err_status () + ); + end + else begin + assign axi_last_fifo_almost_full = 1'b0; + assign o_axi_last_fifo_rd_data = 'h1; + assign o_axi_last_fifo_empty = 1'b0; + end + + dla_hld_fifo #( + .WIDTH (BURSTCOUNT_WIDTH + WORD_ADDR_WIDTH), + .DEPTH (M20K_WIDE_FIFO_DEPTH), + .NEVER_OVERFLOWS (1), + .ALMOST_FULL_CUTOFF (AVM_CTRL_FIFO_ALMOST_FULL_CUTOFF), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0), + .STYLE ("ms") + ) + avm_ctrl_fifo_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + .i_valid (avm_ctrl_fifo_wr_req), + .i_data ({avm_ctrl_fifo_wr_burstcount, avm_ctrl_fifo_wr_addr}), + .o_stall (), + .o_almost_full (avm_ctrl_fifo_almost_full_raw), + .o_valid (), + .o_data ({avm_burstcount_raw, o_avm_word_address}), + .i_stall (~i_avm_ctrl_fifo_rd_ack), + .o_almost_empty (), + .o_empty (o_avm_ctrl_fifo_empty), + .ecc_err_status () + ); + assign o_avm_burstcount = (ENABLE_BURST_COALESCE) ? avm_burstcount_raw : (USE_AXI) ? 0 : 1; + + + //if downstream of the coalescers is sufficiently far away from being empty e.g. lots of avm requests have been queued, then don't let the coalescers time out + + //M20K_WIDE_FIFO_DEPTH is typically 512, so avm_ctrl_fifo_occ is 9 bits, this means we can't tell occupancy 0 and 512 apart + //the somewhat full signal is used to disable the timeout on the coalecers, both word coalesing and burst coalescing, this happens when the occ reaches 256 or higher + //in the rare case that the avm ctrl fifo is able to completely fill to 512 items, avm_ctrl_fifo_occ will look like 0 so it won't disable the coalescer timeouts + //but this doesn't matter since the fifo is full and therefore no forward progress can be made anyways + //somewhat full operates on occupancy that is two clocks stale, but this is just a loose guideline for being full enough that we can disable the coalescer timeouts + localparam int AVM_CTRL_FIFO_OCC_BITS = $clog2(M20K_WIDE_FIFO_DEPTH); + localparam int BURSTCOAL_SOMEWHAT_FULL_THRESHOLD = M20K_WIDE_FIFO_DEPTH / 2; //make this divisible by a large power of 2 to minimize logic + + logic [1:0] avm_ctrl_fifo_occ_update; //can take values +1, 0, or -1 + logic [AVM_CTRL_FIFO_OCC_BITS-1:0] avm_ctrl_fifo_occ_update_ext; //sign extend the update + logic [AVM_CTRL_FIFO_OCC_BITS-1:0] avm_ctrl_fifo_occ; //track the occupancy with a binary counter, no tessellation + + always_ff @(posedge clock) begin + //increment (2'h1 means +1) if only avm_ctrl_fifo_wr_req, decrement (2'h3 means -1) if only i_avm_ctrl_fifo_rd_ack, no update (2'h0) if both or neither + avm_ctrl_fifo_occ_update <= (avm_ctrl_fifo_wr_req & ~i_avm_ctrl_fifo_rd_ack) ? 2'h1 : (~avm_ctrl_fifo_wr_req & i_avm_ctrl_fifo_rd_ack) ? 2'h3 : 2'h0; + end + + assign avm_ctrl_fifo_occ_update_ext = { {(AVM_CTRL_FIFO_OCC_BITS-1){avm_ctrl_fifo_occ_update[1]}}, avm_ctrl_fifo_occ_update[0] }; //sign extend + + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) avm_ctrl_fifo_occ <= '0; + else begin + avm_ctrl_fifo_occ <= avm_ctrl_fifo_occ + avm_ctrl_fifo_occ_update_ext; //occupancy of avm_ctrl_fifo that is late by one clock cycle + if (~sclrn) avm_ctrl_fifo_occ <= '0; + end + end + + always_ff @(posedge clock) begin + o_disable_coalescer_timeout <= avm_ctrl_fifo_occ >= BURSTCOAL_SOMEWHAT_FULL_THRESHOLD; + end + end + endgenerate + +endmodule + +`default_nettype wire diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_lsu_coalescer_dynamic_timeout.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_lsu_coalescer_dynamic_timeout.sv new file mode 100644 index 0000000..55c4b5a --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_lsu_coalescer_dynamic_timeout.sv @@ -0,0 +1,184 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +// This is implements the timeout counter for the coalescer. The threshold (how long to wait until timeout) is dynamic, and it turns out that most of the +// information that this module needs for adjusting the timeout threshold occurs naturally as a result of performing coalescing. +// +// For additional info, refer to dla_hld_global_load_store.sv (top module of entire LSU) and dla_hld_lsu.sv (top module of the core LSU). + +`default_nettype none + +module dla_hld_lsu_coalescer_dynamic_timeout #( + parameter bit ASYNC_RESET, //0 = registers consume reset synchronously, 1 = registers consume reset asynchronously + parameter int MAX_TIMEOUT_BIT //limit how large the dynamic timeout threshold can get, max value = (2**MAX_TIMEOUT_BIT)-1 +) ( + input wire clock, + input wire resetn, + + //controls for the timeout itself + input wire i_valid, //a new word has been accepted by the coalescer, reset timeout counter + input wire i_disable_timeout, //downstream is somewhat full, but reset the timeout counter only if timeout has not yet occurred + output logic o_timeout, //timeout has occurred + + //dynamic updates to the timeout threshold + input wire i_coal_if_addr_match, //would we coalesce if the incoming address is compatible with the captured address (address check is known two clocks later), this signal is on the same pipeline stage as i_valid + input wire i_late_addr_match //two clocks after i_valid the address compatibility check would have finished, this is that result (whether the incoming address is compatible with the captured address) +); + + //this is the bit width of the counter which counts how many consecutive times the coalescing has failed + //using a 3 bit counter, the 8th coalescing fail will be interpreted as too much random access and therefore the timeout threshold needs to decrease + //if this counter is made wider, then more consecutive coalescing fails would be needed before the timeout threshold can start decreasing + //note that the counter clips at the max value, so 9 consecutive coalescing fails will result in 2 decrements to the timeout threshold, 10 consecutive fails results in 3 decrements, etc. + localparam int NO_COALESCE_COUNT_BITS = 3; + + + + /////////////// + // Signals // + /////////////// + + //reset + logic aclrn, sclrn, resetn_synchronized; + + //coalescer timeout + logic [MAX_TIMEOUT_BIT:0] counter; //counter for the coalescer timeout, this is an offset counter and the extra bit allows the msb to be used to detect the timeout + logic counter_msb, late_counter_msb; //coalescer timeout is detected by negedge msb + + //update timeout threshold + logic seen_i_valid; //ignore the very first i_valid since there is no previous address to check whether coalescing could have happened + logic late_coal_if_addr_match; //delayed version of i_coal_if_addr_match + logic late_i_valid_excluding_first_ever_valid; //delayed version of i_valid factoring in seen_i_valid + logic previous_timed_out; //two clocks after i_valid, did the previous kernel time out (or something else prevented coalescing) + logic addr_match_valid; //two clocks after i_valid, result of coalescing is known + logic incr_threshold; //increase the timeout threshold if coalescing could have happened (addr match) but previously it timed out + logic decr_threshold; //decrease the timeout threshold if lots of random access is detected + logic [NO_COALESCE_COUNT_BITS-1:0] cannot_coalesce; //count how many random access events were seen, don't decrease timeout threshold unless there are many consecutive random accesses + logic threshold_full; //look ahead logic to detect when threshold is all ones + logic threshold_empty; //look ahead logic to detect when threshold is all zeros + logic [MAX_TIMEOUT_BIT-1:0] threshold; //the timeout threshold itself + + + + ///////////// + // Reset // + ///////////// + + dla_acl_reset_handler + #( + .ASYNC_RESET (ASYNC_RESET), + .USE_SYNCHRONIZER (0), + .SYNCHRONIZE_ACLRN (0), + .PIPE_DEPTH (0), + .NUM_COPIES (1) + ) + dla_acl_reset_handler_inst + ( + .clk (clock), + .i_resetn (resetn), + .o_aclrn (aclrn), + .o_resetn_synchronized (resetn_synchronized), + .o_sclrn (sclrn) + ); + + + + ///////////////////////// + // Coalescer Timeout // + ///////////////////////// + + //if MAX_TIMEOUT_BIT = 5, then counter is 6 bits and counts from X down to 31 and then stays there, where X can be as high as 63 and as low as 32 + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) counter <= '0; + else begin + if (counter_msb) counter <= counter - 1'b1; + if (i_valid | (counter_msb & i_disable_timeout)) counter <= {1'b1, threshold}; + if (~sclrn) counter <= '0; + end + end + assign counter_msb = counter[MAX_TIMEOUT_BIT]; + always_ff @(posedge clock) begin + late_counter_msb <= counter_msb; + end + assign o_timeout = ~counter_msb & late_counter_msb; //negedge msb, using the MAX_TIMEOUT_BIT = 5 example above, counter has just gotten to 31 + + + + //////////////////////////////// + // Update Timeout Threshold // + //////////////////////////////// + + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) seen_i_valid <= 1'b0; + else begin + if (i_valid) seen_i_valid <= 1'b1; + if (~sclrn) seen_i_valid <= 1'b0; + end + end + + always_ff @(posedge clock) begin + //one clock after i_valid + late_coal_if_addr_match <= i_coal_if_addr_match; + late_i_valid_excluding_first_ever_valid <= i_valid & seen_i_valid; + + //two clocks after i_valid + previous_timed_out <= ~late_coal_if_addr_match; + addr_match_valid <= late_i_valid_excluding_first_ever_valid; + end + + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) begin + incr_threshold <= 1'b0; + decr_threshold <= 1'b0; + cannot_coalesce <= '0; + threshold_full <= 1'b0; + threshold_empty <= 1'b1; + threshold <= '0; + end + else begin + //determine when to increase or decrease the threshold, three clocks after i_valid + incr_threshold <= 1'b0; + decr_threshold <= 1'b0; + if (addr_match_valid) begin //two clocks after i_valid, result of address check is known, also exclude first ever valid since there is no previous to compare against + if (i_late_addr_match) begin //disregarding timeout, this word could have coalesced with previous kernel word + if (previous_timed_out) incr_threshold <= 1'b1; //previous timed out, so increase threshold + cannot_coalesce <= '0; + end + else begin //disregarding timeout, this word cannot have coalesced with previous kernel word + if (&cannot_coalesce) decr_threshold <= 1'b1; //8th consective kernel word that could not coalesce, probably it's random access so decrease threshold + else cannot_coalesce <= cannot_coalesce + 1'b1; + end + end + + //look ahead logic: for threshold to become all ones, decr_threshold cannot be asserted, and either threshold==11111 or threshold=11110 and increasing + threshold_full <= ~decr_threshold && (&threshold[MAX_TIMEOUT_BIT-1:1]) && (threshold[0] || incr_threshold); + + //look ahead logic: for threshold to become all zeros, incr_threshold cannot be asserted, and either threshold=00000 or threshold=00001 and decreasing + threshold_empty <= ~incr_threshold && (~|threshold[MAX_TIMEOUT_BIT-1:1]) && (~threshold[0] || decr_threshold); + + //update the threshold itself, four clocks after i_valid + if (incr_threshold & ~threshold_full) threshold <= threshold + 1'b1; + if (decr_threshold & ~threshold_empty) threshold <= threshold - 1'b1; + + if (~sclrn) begin + incr_threshold <= 1'b0; + decr_threshold <= 1'b0; + cannot_coalesce <= '0; + //no reset needed for threshold_full or threshold_empty + threshold <= '0; + end + end + end + +endmodule + +`default_nettype wire diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_lsu_data_aligner.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_lsu_data_aligner.sv new file mode 100644 index 0000000..af5f060 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_lsu_data_aligner.sv @@ -0,0 +1,135 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +// This module is used to align kernel write data to the memory interface, and align memory read data to the kernel interface. Typically a barrel shifter is +// used to rotate i_data (the input data) by the amount specified by i_shift. One may choose whether to shift left or right, as well as whether the shift should +// be a wrap-around or linear. The input data is aligned by perserving the input data width. Once alignment is finished, the aligned data is replicated as many +// times as necessary to cover the width of the output data. +// +// For example, suppose a write LSU has kernel width = 4 and memory width = 64. There are 4 possible rotations of the kernel write data. After replicating the +// aligned data 16 times to widen it to the memory width, we can now enable any byte of the memory interface to source from any byte of the kernel write data. +// Byteenables would need to mask off everything but the 4 bytes we want to write, but that is a separate problem handled outside of the data aligner. +// +// The total latency through the data aligner can be chosen (0 is allowed), and pipeline registers are spaced equally among all of the 2:1 muxes that make up +// the shifter. If there is a pipeline stage every third 2:1 mux, this is equivalent to pipelining between every 8:1 mux. +// +// As future work, may want to support an 8:1 mux with latency 2 being decomposed as two stages of 3:1 mux, currently this decomposes into 4:1 followed by 2:1. +// +// For additional info, refer to dla_hld_global_load_store.sv (top module of entire LSU) and dla_hld_lsu.sv (top module of the core LSU). + +`default_nettype none + +module dla_hld_lsu_data_aligner #( + parameter int LATENCY, //number of clock cycles from i_data to o_data, value must be 0 or larger + parameter bit DIRECTION, //0 = shift right, 1 = shift left + parameter int SECTION_WIDTH, //how many bits of data are shifted together, for a completely unaligned LSU use 8 for data and 1 for byteenable + parameter bit WRAP_AROUND, //0 = linear shift, 1 = shift with wrap-around + parameter int I_DATA_WIDTH, //bit width of the i_data signal + parameter int I_SHIFT_WIDTH, //bit width of the i_shift signal + parameter int O_DATA_WIDTH //bit width of the o_data signal +) ( + input wire clock, + input wire [I_DATA_WIDTH-1:0] i_data, //input data + input wire [I_SHIFT_WIDTH-1:0] i_shift, //how much to shift the input data + output logic [O_DATA_WIDTH-1:0] o_data //output data, for write lsu this is a kernel upstream word aligned for memory, for read lsu this is memory word aligned for kernel downstream +); + + localparam int WIDTH_RATIO = (O_DATA_WIDTH+I_DATA_WIDTH-1) / I_DATA_WIDTH; //ceiling( output width / input width ), how many times we need to replicate input data to cover all bits of output data + + genvar g; + logic [I_DATA_WIDTH-1:0] aligned_data; //output data from barrel shifter + logic [WIDTH_RATIO*I_DATA_WIDTH-1:0] aligned_data_expanded; //replicated version of aligned_data to cover all bits of o_data + + generate + if (I_SHIFT_WIDTH == 0) begin : NO_ALIGN //no muxing, but still need latency + dla_acl_shift_register_no_reset #( + .WIDTH (I_DATA_WIDTH), + .STAGES (LATENCY) + ) + delay_inst + ( + .clock (clock), + .D (i_data), + .Q (aligned_data) + ); + end + else begin : GEN_ALIGN + logic [I_DATA_WIDTH-1:0] pipe_data [I_SHIFT_WIDTH:0]; + logic [I_SHIFT_WIDTH-1:0] pipe_shift [I_SHIFT_WIDTH:0]; + + always_comb begin + pipe_data[I_SHIFT_WIDTH] = i_data; + pipe_shift[I_SHIFT_WIDTH] = i_shift; + end + + for (g=0; g<I_SHIFT_WIDTH; g++) begin : GEN_MUX + localparam LATENCY_START_OF_STAGE = (I_SHIFT_WIDTH-1-g)*LATENCY / I_SHIFT_WIDTH; + localparam LATENCY_END_OF_STAGE = (I_SHIFT_WIDTH-g)*LATENCY / I_SHIFT_WIDTH; + localparam LATENCY_THIS_STAGE = LATENCY_END_OF_STAGE - LATENCY_START_OF_STAGE; + + //this is some statically determined permutation of pipe_data[g+1] since the number of wraparound shifts is the genvar + logic [I_DATA_WIDTH-1:0] shifted_data; + if (WRAP_AROUND) begin : GEN_WRAP_AROUND_SHIFT + if (DIRECTION) begin : SHIFT_LEFT + always_comb begin + shifted_data = pipe_data[g+1]; + for (int i=0; i<(1<<g); i++) begin + shifted_data = {shifted_data[SECTION_WIDTH-1:0], shifted_data[I_DATA_WIDTH-1:SECTION_WIDTH]}; + end + end + end + else begin : SHIFT_RIGHT + always_comb begin + shifted_data = pipe_data[g+1]; + for (int i=0; i<(1<<g); i++) begin + shifted_data = {shifted_data[I_DATA_WIDTH-SECTION_WIDTH-1:0], shifted_data[I_DATA_WIDTH-1:I_DATA_WIDTH-SECTION_WIDTH]}; + end + end + end + end + else begin : GEN_LINEAR_SHIFT + if (DIRECTION) begin : SHIFT_LEFT + assign shifted_data = pipe_data[g+1] >> (SECTION_WIDTH*(1<<g)); + end + else begin : SHIFT_RIGHT + assign shifted_data = pipe_data[g+1] << (SECTION_WIDTH*(1<<g)); + end + end + + //the actual mux itself, although this is coded as a 2:1 mux, it is possible some stages have no pipelining in which case there would be a N:1 mux between registers where N >= 4 + logic [I_DATA_WIDTH-1:0] muxed_data; + assign muxed_data = pipe_shift[g+1][g] ? shifted_data : pipe_data[g+1]; + + //add pipelining before next mux stage, latency 0 means passthrough + dla_acl_shift_register_no_reset #( + .WIDTH (I_SHIFT_WIDTH + I_DATA_WIDTH), + .STAGES (LATENCY_THIS_STAGE) + ) + delay_inst + ( + .clock (clock), + .D ({pipe_shift[g+1], muxed_data}), + .Q ({pipe_shift[g], pipe_data[g]}) + ); + end + + assign aligned_data = pipe_data[0]; + end + endgenerate + + assign aligned_data_expanded = {WIDTH_RATIO{aligned_data}}; + assign o_data = aligned_data_expanded[O_DATA_WIDTH-1:0]; + +endmodule + +`default_nettype wire diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_lsu_pkg.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_lsu_pkg.sv new file mode 100644 index 0000000..c5b9494 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_lsu_pkg.sv @@ -0,0 +1,57 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +uRpFoW6fuqWxNhTq9xdCy6qT4671X3qiVqXTV00HMbj9mVAXbzIVM21RrviClGAFB24CuQ7tX6ge +2LRQtYJXXXkegyfg7k6fuQ072fnvSoVFDal17l/SXvcKZLGhg5vK6/KGreUTnI9q1oQBwWkfy7eN +JreDYJ+MULVvFLUdvQj5CPXbVHMZcBdcCWV8gZXvNRGG1juhX1rLO4qzE7/iZFOgypLB/ypOu8Pr +xAB5b0p2P7PmBVBQwxA967b2LbUDJnqyCR18LG+4Ma4KEMH4X7XHrM4vDHWOP+xF7QJ1PWCDZhjR +ICj7OTJGieLqoWrKNUcyLBXDiu+stHBeJwcCOw== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 2016) +`pragma protect data_block +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 +UMRs9gTw9Wm6TLRugY7C4mJ6VUQ6 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_lsu_read_cache.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_lsu_read_cache.sv new file mode 100644 index 0000000..607fb4c --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_lsu_read_cache.sv @@ -0,0 +1,829 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +// This is the cache module for the read LSU. The cache lives outside of the core LSU. It is a bump-in-the-wire architecture which sits between the LSU avalon interface and +// the actual memory interface. There is no snoop on writes to memory, so to be functionally correct the read LSU can only access data that is not being modified during the +// read access. Two scenarios (among others) that satisfy this are: +// 1. read-only access to some region of global memory +// 2. all reads finish before any writes start to this region of global memory +// +// The contents of memory can change between different runs of the same hardware, therefore one must drive the i_flush_cache signal any time the contents of memory have changed +// (more specifically the contents in the region memory that this read LSU may access). Typically the i_flush_cache signal is asserted high for one clock cycle at the beginning +// of each opencl kernel execution. The valid marker for each cache line is stored in memory (not registers), so the cache must walk through all memory addresses in order to +// flush the cache. During this time the cache is still operational, e.g. backpressure is not applied to the LSU, however all cache lookups are treated as a cache miss, and +// the cache does not update with data read from global memory. +// +// Currently there is no hash function to map byte address in global memory to cache lines (although the cache architecture certainly supports such future enhancements). +// Instead the address is sliced up. Let's use some real numbers to make the explanation easier. Suppose global memory is 64 bytes wide, so the bottom 6 bits of the byte address +// indicate a location within a memory word. Suppose the cache depth is 1024 memory words, so bits [15:6] of the byte address indicate the cache line number. This means byte +// address 0 and byte address 65536 both map to cache line 0. To tell them apart, inside each cache line, the upper bits of the byte address (bits 16+) are stored so that we +// can infer which byte address the data is for. +// +// The operation of the cache is as follows: +// 1. (Optional) Split avalon read bursts coming from the LSU, but really the LSU should disable burst coalescing +// 2. Read from the cache to check for hit or miss, keep track of the result in the hit fifo +// 3a. If there is a cache hit, push the data into the hit fifo, skip to step 5 +// 3b. Otherwise it was a cache miss, request data from global memory (there is an optional bump-in-the-wire burst coalescer here) +// 4b. When data is returned from memory, push it into the rsp fifo and update the cache (but don't read from the cache again) +// 5. The hit fifo indicates whether the read data returned to the LSU should come from the hit fifo or the rsp fifo +// +// Some important observations: +// - each LSU read request (assume no bursts) results in exactly one read from the cache +// - if cache hit need to grab the data now, may be stalled from returning read data to LSU due to an earlier miss, and if we read the cache later the contents could have changed +// - not required to update cache with read data from global memory, it doesn't help the current cache miss, it may only help a future request to the same address +// +// Joint optimization with the read LSU: +// 1. Inside the LSU's burst coalescer, can bypass avm_ctrl_fifo +// - read LSU has a throttle to not ask for more data that it has space for +// - all fifos inside the cache are sized at least this deep, therefore cache will never backpressure the LSU, throttle will engage first to stop sending to the cache +// - therefore there is no backpressure, e.g. avm_waitrequest from the cache to LSU would always be 0 +// 2. Inside the LSU's read data alignment, can bypass avm_rd_data_fifo +// - this fifo was only needed because avm_readdatavalid has no backpressure mechanism +// - the read data returned from cache to LSU comes from either the hit fifo or rsp fifo, and the selection is gated by the order fifo, therefore read data is backpressureable +// +// Future extension: enable snoop on writes to invalidate cache +// - currently the cache is implemented with 1 write and 1 read port +// - if we had a memory with 2 write and 2 read ports, we could enable snoop on write without changing anything else in the cache +// - the extra read port would check if a snooped write was in the cache +// - the extra write port would update or invalidate that cache line if the snooped write was in the cache +// - notice the if snooped writes results in cache line invalidation, then we only need the quad port memory for the valid and upper address bits, this is a narrow memory so +// replicating memory for extra ports is not so expensive +// +// For additional info, refer to dla_hld_global_load_store.sv (top module of entire LSU) and dla_hld_lsu.sv (top module of the core LSU). + +`default_nettype none + +module dla_hld_lsu_read_cache #( + //parameters that are different from dla_hld_lsu.sv + parameter bit CACHE_NEVER_OVERFLOWS, //if cache capacity is no less than lsu throttle threshold and lsu does not produce bursts, then eliminate backpressure to lsu + parameter bit BYPASS_BURST_SPLITTER, //if burst coalescing inside the LSU is disabled, then cache does not need to split read request avalon bursts + parameter bit BYPASS_LSU_DATA_FIFO, //read data returned to the LSU from the cache is backpressurable, don't need another fifo inside LSU's read data alignment to catch non-backpressurable data + parameter bit PIPELINE_UPDATE_TO_CACHE, //optional pipeline stage can be inserted when updating the cache, allows more time for routing when the cache is large and therefore physically spread apart on the FPGA + parameter bit PIPELINE_READ_FROM_CACHE, //optional pipeline stage can be inserted before consuming read data from the cache, allows more time for routing when the cache is large + + //parameters that are the same as dla_hld_lsu.sv + parameter bit ASYNC_RESET, //0 = registers consume reset synchronously, 1 = registers consume reset asynchronously + parameter int ADDR_WIDTH, //width of address bus, for addresses that are byte addresses + parameter int INTRA_ADDR_WIDTH, //how many least significant bits of the byte address represent the location inside a memory word + parameter int WORD_ADDR_WIDTH, //how many most significant bits of the byte address represent which memory word is being accessed + parameter int MEM_DATA_BYTES, //width of memory data path in bytes, must be a power of 2 + parameter int BURSTCOUNT_WIDTH, //width of avalon burst count signal, max burst size is 2**(BURSTCOUNT_WIDTH-1) + parameter bit ENABLE_BURST_COALESCE, //whether to coalesce sequential memory words together to make a burst, feature will be disabled (parameter value ignored) if width adaption on the memory interface is used + parameter int CACHE_SIZE_BYTES, //the cache size in bytes which must be a power of 2, this can only be used with the read LSU + parameter int MLAB_FIFO_DEPTH, //use a shallow fifo if handshaking is expected to take a few clocks (or if capacity can be borrowed from a nearby deep fifo), if we need an MLAB may as well use all of it + parameter int M20K_WIDE_FIFO_DEPTH, //use a deep fifo if handshaking is expected to take hundreds of clocks e.g. going off chip, for wide data path use M20K in shallowest mode, but may as well use all depth available + parameter int M20K_NARROW_FIFO_DEPTH, //if we need a deep fifo but the data path is narrow e.g. up to 10 bits which is the narrowest M20K on S10, can get additional depth for without needing more M20K + parameter int BURST_COAL_MAX_TIMEOUT_BIT, //limit how large the dynamic timeout threshold can get inside burst coalescer + parameter bit USE_AXI //0 = use AvalonMM, 1 = use AXI, this affects how the burstcount is constructed +) ( + input wire clock, + input wire resetn, + input wire i_flush_cache, //a positive edge must be provided every time the contents change inside the region of memory accessible by the read LSU + + //kernel avm interface + input wire k_read, + input wire [ADDR_WIDTH-1:0] k_address, + input wire [BURSTCOUNT_WIDTH-1:0] k_burstcount, + output logic k_waitrequest, + output logic k_readdatavalid, //if BYPASS_LSU_DATA_FIFO=1 this means cache has data that LSU may or may not consume, if BYPASS_LSU_DATA_FIFO=0 this means LSU must consume data + output logic [8*MEM_DATA_BYTES-1:0] k_readdata, + input wire k_readdata_accepted, //if BYPASS_LSU_DATA_FIFO=1 this is how LSU indicates it consumed data, otherwise ignore this signal + + //memory avm interface + output logic m_read, + output logic [ADDR_WIDTH-1:0] m_address, + output logic [BURSTCOUNT_WIDTH-1:0] m_burstcount, + input wire m_waitrequest, + input wire m_readdatavalid, + input wire [8*MEM_DATA_BYTES-1:0] m_readdata +); + + //derived parameters + localparam int CACHE_ADDR_BITS = $clog2(CACHE_SIZE_BYTES/MEM_DATA_BYTES); //number of address bits for the cache memory + localparam int UPPER_ADDR_BITS = WORD_ADDR_WIDTH - CACHE_ADDR_BITS; //number of upper bits of the byte address need to be stored in the cache line + + + + /////////////// + // Signals // + /////////////// + + //reset + logic aclrn, sclrn, resetn_synchronized; + + //burst splitter + logic in_read, in_waitrequest; + logic [ADDR_WIDTH-1:0] in_address; + logic [WORD_ADDR_WIDTH-1:0] in_word_addr; + + //check for cache hit or miss + logic tag_cache_was_read, tag_cache_read_data_is_valid; + logic [WORD_ADDR_WIDTH-1:0] late_in_word_addr, late_two_in_word_addr, late_three_in_word_addr; + logic mixed_port_read_during_write, read_during_write_invalidate_read_data; + logic can_write_to_order_fifo, data_for_writing_to_order_fifo; + + //order fifo + logic order_fifo_wr_req, order_fifo_almost_full, order_fifo_empty, order_fifo_rd_ack, order_fifo_temp_valid, order_fifo_temp_stall; + logic order_fifo_wr_data, order_fifo_rd_data, order_fifo_temp_data; + + //hit fifo + logic hit_fifo_wr_req, read_from_hit_fifo, hit_fifo_not_empty, hit_fifo_rd_ack; + logic [8*MEM_DATA_BYTES-1:0] hit_fifo_wr_data, hit_fifo_rd_data; + + //burst coalescer to avalon request interface + logic burstcoal_valid; + logic [WORD_ADDR_WIDTH-1:0] burstcoal_word_addr; + logic avm_ctrl_fifo_empty, avm_ctrl_fifo_rd_ack; + logic [WORD_ADDR_WIDTH-1:0] avm_word_address; + logic [BURSTCOUNT_WIDTH-1:0] avm_burstcount; + + //rsp fifo + logic rsp_fifo_wr_req, read_from_rsp_fifo, rsp_fifo_not_empty, rsp_fifo_rd_ack; + logic [8*MEM_DATA_BYTES-1:0] rsp_fifo_wr_data, rsp_fifo_rd_data; + logic late_rsp_fifo_wr_req, late_two_rsp_fifo_wr_req; + + //return read data to LSU + logic can_read_order_fifo; + logic late_order_fifo_rd_data; + logic late_order_fifo_rd_ack, late_two_order_fifo_rd_ack; + + //addr fifo + logic addr_fifo_wr_req, addr_fifo_empty, addr_fifo_rd_ack; + logic [WORD_ADDR_WIDTH-1:0] addr_fifo_wr_data, addr_fifo_rd_data; + + //flush + logic [CACHE_ADDR_BITS:0] flush_counter; + logic is_flushing, late_flush_cache, flush_cache_posedge; + logic flush_writing_done, late_flush_writing_done, flush_reading_done; + + //tag cache memory + logic tag_cache_wr_en; + logic [CACHE_ADDR_BITS-1:0] tag_cache_wr_addr, tag_cache_rd_addr; + logic [UPPER_ADDR_BITS:0] tag_cache_wr_data, tag_cache_rd_data; + logic valid_read_from_cache; + logic [UPPER_ADDR_BITS-1:0] upper_addr_read_from_cache; + + //data cache memory + logic data_cache_wr_en; + logic [CACHE_ADDR_BITS-1:0] data_cache_wr_addr, data_cache_rd_addr; + logic [8*MEM_DATA_BYTES-1:0] data_cache_wr_data, data_cache_rd_data; + + + + ///////////// + // Reset // + ///////////// + + dla_acl_reset_handler + #( + .ASYNC_RESET (ASYNC_RESET), + .USE_SYNCHRONIZER (0), + .SYNCHRONIZE_ACLRN (0), + .PIPE_DEPTH (0), + .NUM_COPIES (1) + ) + dla_acl_reset_handler_inst + ( + .clk (clock), + .i_resetn (resetn), + .o_aclrn (aclrn), + .o_resetn_synchronized (resetn_synchronized), + .o_sclrn (sclrn) + ); + + + + ////////////////////// + // Burst Splitter // + ////////////////////// + + // the cache needs one read request per memory word, ideally the LSU should disable burst coalescing so that we are not just undoing it here + generate + if (BYPASS_BURST_SPLITTER) begin : NO_BURST_SPLIT + assign in_read = k_read; + assign in_address = k_address; + assign k_waitrequest = in_waitrequest; + end + else begin : GEN_BURST_SPLIT + dla_acl_burst_splitter #( + .ADDRESS_WIDTH (ADDR_WIDTH), + .BYTEENABLE_WIDTH (MEM_DATA_BYTES), + .BURSTCOUNT_WIDTH (BURSTCOUNT_WIDTH), + .SPLIT_WRITE_BURSTS (0), + .SPLIT_READ_BURSTS (1), + .BURST_BOUNDARY (0), + .USE_STALL_LATENCY (0), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0), + .BACKPRESSURE_DURING_RESET (1) + ) + dla_acl_burst_splitter_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + + .up_waitrequest (k_waitrequest), + .up_read (k_read), + .up_write (1'b0), + .up_address (k_address), + .up_writedata (), + .up_byteenable (), + .up_burstcount (k_burstcount), + + .down_waitrequest (in_waitrequest), + .down_read (in_read), + .down_write (), + .down_address (in_address), + .down_writedata (), + .down_byteenable (), + .down_burstcount () + ); + end + endgenerate + + + + /////////////////////////////////// + // Check for cache hit or miss // + /////////////////////////////////// + + // each cache line needs to store 3 things: + // 1. valid -- this is set to 0 during flush, set to 1 when snooping on read data returned from memory + // 2. upper address -- multiple addresses map to the same cache line, this is stored to indicate which address this cache line had stored + // 3. data -- the actual data itself, this is the same width as the memory data width + // in terms of implementation, 1 and 2 together are called the "tag" of the cache, and the tag is stored separately from the data + // tag cache is always accessed one clock cycle before the same cache line in the data cache + // this allows 1 clock cycle to check if the upper address bits match, if we read the tag cache and data cache on the same clock cycle we'd have to keep the data live for an extra clock cycle + // for consistency, the snoop on read data returned from memory also updates cache with the same timing -- when the tag cache is updated, the same cache line in the data cache updates one clock cycle later + + assign in_word_addr = in_address[ADDR_WIDTH-1:INTRA_ADDR_WIDTH]; //remove the lower bits which specify a location inside the memory word + assign tag_cache_rd_addr = in_word_addr[CACHE_ADDR_BITS-1:0]; //which cache line to read from in the tag cache + + //write the result into order fifo + always_ff @(posedge clock) begin + //one clock after burst splitter + tag_cache_was_read <= in_read & ~in_waitrequest; + late_in_word_addr <= in_word_addr; + mixed_port_read_during_write <= (tag_cache_wr_addr == tag_cache_rd_addr) & tag_cache_wr_en; //ram will return x read data, treat as cache miss + + //two clocks after + tag_cache_read_data_is_valid <= tag_cache_was_read; + late_two_in_word_addr <= late_in_word_addr; + read_during_write_invalidate_read_data <= mixed_port_read_during_write; + + //three clocks after + can_write_to_order_fifo <= tag_cache_read_data_is_valid; + //order fifo data: 1 means cache hit, 0 means cache miss, miss if anything funny happens (flushing, x read from ram) or if it is a real miss (invalid or upper addr mismatch) + data_for_writing_to_order_fifo <= flush_reading_done & ~read_during_write_invalidate_read_data & valid_read_from_cache & (upper_addr_read_from_cache == late_two_in_word_addr[WORD_ADDR_WIDTH-1:CACHE_ADDR_BITS]); + late_three_in_word_addr <= late_two_in_word_addr; //if cache miss, what address should we request from global mem + end + + + + ////////////////// + // Order FIFO // + ////////////////// + + // need to return data to the LSU in the correct order, order_fifo tracks whether the next word to return to the LSU should come from the hit fifo or rsp fifo + // capacity of order_fifo limits the total number of outstanding transactions, if all other fifos in the cache are at least this deep then backpressure only from order_fifo is sufficient + + assign in_waitrequest = (CACHE_NEVER_OVERFLOWS) ? 1'b0 : order_fifo_almost_full; + + generate + if (PIPELINE_READ_FROM_CACHE) begin : GEN_PIPE_ORDER_FIFO_WRITE + always_ff @(posedge clock) begin + order_fifo_wr_req <= can_write_to_order_fifo; + order_fifo_wr_data <= data_for_writing_to_order_fifo; + end + end + else begin : NO_PIPE_ORDER_FIFO_WRITE + assign order_fifo_wr_req = can_write_to_order_fifo; + assign order_fifo_wr_data = data_for_writing_to_order_fifo; + end + endgenerate + + dla_hld_fifo #( + .WIDTH (1), + .DEPTH (M20K_WIDE_FIFO_DEPTH), + .NEVER_OVERFLOWS (1), + .ALMOST_FULL_CUTOFF ((PIPELINE_READ_FROM_CACHE) ? 4 : 3), //3 or 4 pipeline stages from order_fifo_almost_full to order_fifo_wr_req + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0), + .STYLE ("ms") + ) + order_fifo_ms_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + .i_valid (order_fifo_wr_req), + .i_data (order_fifo_wr_data), + .o_stall (), + .o_almost_full (order_fifo_almost_full), + .o_valid (order_fifo_temp_valid), + .o_data (order_fifo_temp_data), + .i_stall (order_fifo_temp_stall), + .o_almost_empty (), + .o_empty (), + .ecc_err_status () + ); + + //prefetch into a 2-deep register based fifo, this eases placement since data now comes from an ALM register rather than M20K hardened read data register + dla_hld_fifo #( + .REGISTERED_DATA_OUT_COUNT (1), + .WIDTH (1), + .DEPTH (2), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0), + .STYLE ("llreg") + ) + order_fifo_ll_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + .i_valid (order_fifo_temp_valid), + .i_data (order_fifo_temp_data), + .o_stall (order_fifo_temp_stall), + .o_almost_full (), + .o_valid (), + .o_data (order_fifo_rd_data), + .i_stall (~order_fifo_rd_ack), + .o_almost_empty (), + .o_empty (order_fifo_empty), + .ecc_err_status () + ); + + + + //////////////// + // Hit FIFO // + //////////////// + + //if there is a cache hit, store that data in the hit fifo, cannot read it from the cache later on (e.g. if waiting due to an earlier cache miss) since the cache line could be modified before that later read + + generate + if (PIPELINE_READ_FROM_CACHE) begin : GEN_PIPE_HIT_FIFO_WRITE + always_ff @(posedge clock) begin + hit_fifo_wr_req <= can_write_to_order_fifo & data_for_writing_to_order_fifo; + hit_fifo_wr_data <= data_cache_rd_data; + end + end + else begin : NO_PIPE_HIT_FIFO_WRITE + assign hit_fifo_wr_req = can_write_to_order_fifo & data_for_writing_to_order_fifo; + assign hit_fifo_wr_data = data_cache_rd_data; + end + endgenerate + + dla_hld_fifo #( + .WIDTH (8*MEM_DATA_BYTES), + .DEPTH (M20K_WIDE_FIFO_DEPTH), + .NEVER_OVERFLOWS (1), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0), + .STYLE ("ms") + ) + hit_fifo_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + .i_valid (hit_fifo_wr_req), + .i_data (hit_fifo_wr_data), + .o_stall (), + .o_almost_full (), + .o_valid (), + .o_data (hit_fifo_rd_data), + .i_stall (~hit_fifo_rd_ack), + .o_almost_empty (), + .o_empty (), //guaranteed to not underflow + .ecc_err_status () + ); + + //order fifo and hit fifo are written to at the same time + //by the time we can read from the order fifo and it says this was a hit, guaranteed that the hit fifo won't be empty + assign hit_fifo_not_empty = 1'b1; + + + + /////////////////////////////////////////////////// + // Burst Coalescer to Avalon Request Interface // + /////////////////////////////////////////////////// + + //if there is a cache miss, request data from global mem + + + generate + if (PIPELINE_READ_FROM_CACHE) begin : GEN_PIPE_INTO_BURST_COAL + always_ff @(posedge clock) begin + burstcoal_valid <= can_write_to_order_fifo & ~data_for_writing_to_order_fifo; + burstcoal_word_addr <= late_three_in_word_addr; + end + end + else begin : NO_PIPE_INTO_BURST_COAL + assign burstcoal_valid = can_write_to_order_fifo & ~data_for_writing_to_order_fifo; + assign burstcoal_word_addr = late_three_in_word_addr; + end + endgenerate + + dla_hld_lsu_burst_coalescer + #( + .ASYNC_RESET (ASYNC_RESET), + .BURST_COAL_MAX_TIMEOUT_BIT (BURST_COAL_MAX_TIMEOUT_BIT), + .ENABLE_BURST_COALESCE (ENABLE_BURST_COALESCE), + .USE_REPEATER (0), //read lsu does not repeater, cache is only used with read lsu + .WORD_ADDR_WIDTH (WORD_ADDR_WIDTH), + .BURSTCOUNT_WIDTH (BURSTCOUNT_WIDTH), + .UPSTREAM_STALL_LATENCY (0), + .MLAB_FIFO_DEPTH (MLAB_FIFO_DEPTH), + .M20K_WIDE_FIFO_DEPTH (M20K_WIDE_FIFO_DEPTH), + .M20K_NARROW_FIFO_DEPTH (M20K_NARROW_FIFO_DEPTH), + .NO_AVM_WAITREQUEST (0), //this is a feature intended for burstcoal inside the lsu + .ADD_TO_ADDR_IS_ZERO (1), //i_add_to_base_addr is tied to 0, no adder is needed inside burstcoal which also means some pipeline stages can be removed + .EXTRA_WRITE_LATENCY (0), + .USE_AXI (USE_AXI), + .ADDR_ADAPT_WIDTH (0) + ) + dla_hld_lsu_burst_coalescer_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + + //input to burst coalescing + .i_valid (burstcoal_valid), + .i_base_addr (burstcoal_word_addr), + .i_add_to_base_addr ('0), //there is no unalignment which causes the access to go into the next mem word + .o_almost_full (), //the order fifo bounds the size of all other fifos, by construction the avm_ctrl_fifo inside here cannot overflow + .o_disable_coalescer_timeout (), + + //output to avm addr + .o_avm_ctrl_fifo_empty (avm_ctrl_fifo_empty), + .i_avm_ctrl_fifo_rd_ack (avm_ctrl_fifo_rd_ack), + .o_avm_word_address (avm_word_address), + .o_avm_burstcount (avm_burstcount) + ); + + //convert to avalon + assign m_read = ~avm_ctrl_fifo_empty; + assign m_burstcount = avm_burstcount; + assign m_address = {avm_word_address, {INTRA_ADDR_WIDTH{1'h0}}}; + assign avm_ctrl_fifo_rd_ack = m_read & ~m_waitrequest; + + + + //////////////// + // Rsp FIFO // + //////////////// + + //capture the response from global memory + assign rsp_fifo_wr_req = m_readdatavalid; + assign rsp_fifo_wr_data = m_readdata; + + dla_hld_fifo #( + .WIDTH (8*MEM_DATA_BYTES), + .DEPTH (M20K_WIDE_FIFO_DEPTH), + .NEVER_OVERFLOWS (1), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0), + .STYLE ("ms") //write to read latency of 3 + ) + rsp_fifo_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + .i_valid (rsp_fifo_wr_req), + .i_data (rsp_fifo_wr_data), + .o_stall (), + .o_almost_full (), + .o_valid (), + .o_data (rsp_fifo_rd_data), + .i_stall (~rsp_fifo_rd_ack), + .o_almost_empty (), + .o_empty (), //this is tracked externally + .ecc_err_status () + ); + + //track empty separately so that we can reserve a read before the read itself actually happens + //if fifo write to read latency is N, need to delay write request by N-1 clock cycle to track empty, the pipelining below assumes write to read latency of 3 + always_ff @(posedge clock) begin + late_rsp_fifo_wr_req <= rsp_fifo_wr_req; + late_two_rsp_fifo_wr_req <= late_rsp_fifo_wr_req; + end + + dla_acl_tessellated_incr_decr_threshold #( + .CAPACITY (M20K_WIDE_FIFO_DEPTH), + .THRESHOLD (1), + .INITIAL_OCCUPANCY (0), + .THRESHOLD_REACHED_AT_RESET (0), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0) + ) + rsp_fifo_empty_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + .incr_no_overflow (late_two_rsp_fifo_wr_req), + .incr_raw (late_two_rsp_fifo_wr_req), + .decr_no_underflow (read_from_rsp_fifo), + .decr_raw (read_from_rsp_fifo), + .threshold_reached (rsp_fifo_not_empty) + ); + + + + /////////////////////////////// + // Return read data to LSU // + /////////////////////////////// + + //naming convention: + //- ***_rd_ack is the drives the i_stall port of that fifo + //- read_from_*** reserves a read from that fifo before the read actually happens, fifo empty must be tracked externally + + //use the order fifo to determine whether to read from the hit fifo or the response fifo + assign can_read_order_fifo = ~order_fifo_empty & ((order_fifo_rd_data) ? hit_fifo_not_empty : rsp_fifo_not_empty); + + generate + if (BYPASS_LSU_DATA_FIFO) begin : READ_DATA_BACKPRESSURE //mimic the read interface of avm_rd_data_fifo inside the read LSU + assign k_readdatavalid = can_read_order_fifo; //readdatavalid means data is available, if the LSU accepts it data will be available two clocks later, which is the same latency to read from avm_rd_data_fifo + assign order_fifo_rd_ack = k_readdata_accepted; //LSU indicates that it accepted that data + assign read_from_hit_fifo = order_fifo_rd_ack & order_fifo_rd_data; //data read from the order fifo indicates which fifo to pop from + assign read_from_rsp_fifo = order_fifo_rd_ack & ~order_fifo_rd_data; + end + else begin : READ_DATA_NO_BACKPRESSURE //this is an avalon conformant read response interface, where read data cannot be backpressured + assign k_readdatavalid = late_two_order_fifo_rd_ack; + assign order_fifo_rd_ack = can_read_order_fifo; + assign read_from_hit_fifo = ~order_fifo_empty & order_fifo_rd_data & hit_fifo_not_empty; + assign read_from_rsp_fifo = ~order_fifo_empty & ~order_fifo_rd_data & rsp_fifo_not_empty; + end + endgenerate + + always_ff @(posedge clock) begin + //one clock after read from order fifo + late_order_fifo_rd_ack <= order_fifo_rd_ack; + late_order_fifo_rd_data <= order_fifo_rd_data; + hit_fifo_rd_ack <= read_from_hit_fifo; + rsp_fifo_rd_ack <= read_from_rsp_fifo; + + //two clocks after -- return data to kernel + late_two_order_fifo_rd_ack <= late_order_fifo_rd_ack; + k_readdata <= (late_order_fifo_rd_data) ? hit_fifo_rd_data : rsp_fifo_rd_data; + end + + + + ///////////////// + // Addr FIFO // + ///////////////// + + //to update the cache, we need to know the address for each word of data returned from global memory + assign addr_fifo_wr_req = burstcoal_valid; + assign addr_fifo_wr_data = burstcoal_word_addr; + + dla_hld_fifo #( + .WIDTH (WORD_ADDR_WIDTH), + .DEPTH (M20K_WIDE_FIFO_DEPTH), + .NEVER_OVERFLOWS (1), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0), + .STYLE ("ms") + ) + addr_fifo_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + .i_valid (addr_fifo_wr_req), + .i_data (addr_fifo_wr_data), + .o_stall (), + .o_almost_full (), + .o_valid (), + .o_data (addr_fifo_rd_data), + .i_stall (~addr_fifo_rd_ack), + .o_almost_empty (), + .o_empty (), + .ecc_err_status () + ); + + assign addr_fifo_rd_ack = read_from_rsp_fifo; + + + + ///////////// + // Flush // + ///////////// + + //the cache must be flushed every time the contents could have changed in the region of memory accessible by this read LSU + //every LSU inside an opencl kernel is flushed each time that kernel starts (flush has no effect for LSUs without read cache) + always_ff @(posedge clock) begin + late_flush_cache <= i_flush_cache; + flush_cache_posedge <= i_flush_cache & ~late_flush_cache; + end + + //as an example, if CACHE_ADDR_BITS is 5, flush_counter is 6 bits, it starts the flush at 63, counts down to 31 and then gets stuck there + //if we look at the bottom 5 of flush_counter, it sweeps the entire address space (from 31 down to 0, then 31 is where it rests) + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) flush_counter <= '0; + else begin + if (flush_cache_posedge) flush_counter <= '1; + else if (is_flushing) flush_counter <= flush_counter - 1'b1; + if (~sclrn) flush_counter <= '0; + end + end + assign is_flushing = flush_counter[CACHE_ADDR_BITS]; + + //after the flush is done, keep the flush status live for another 2 clocks since cache memory has 2 clocks of read latency, still need to filter read data if the read request was issued before flush had finished + always_ff @(posedge clock) begin + //timing of flush_writing_done depends on PIPELINE_UPDATE_TO_CACHE, see the "update the cache" section below + //after flush_writing_done asserts, any reads issued do not need to be masked because of flushing + //after flush_reading_done asserts, any read data received from cache does not need to be masked because of flushing + late_flush_writing_done <= flush_writing_done; + flush_reading_done <= late_flush_writing_done; + end + + + + //////////////////////// + // Update the Cache // + //////////////////////// + + // the cache only has one write port but it can be updated by two things: + // 1. flush -- invalidate all cache lines + // 2. snoop on read data returned from global memory -- this does not help the cache miss itself, it only may help a future read request to the same address + // While flush is running, the cache does not update with data read from global memory + + //whatever cache line was accessed in the tag cache (valid and upper address), that same cache line is accessed in the data cache one clock cycle later + //the upper address read from the tag cache needs to be compared against the byte address of the read request, as a part of checking whether the cache line is valid + //one pipeline stage is used for this comparison, so only 1 clock cycle after the tag cache is read do we know if the cache line was valid + //if we read the data cache at the same time as the tag cache, would need to keep the data live for one clock cycle before potentially writing it to the hit fifo + //the choice to read the tag cache one clock ahead of the data cache is purely to save area + + //unfornately this slightly complicates things for the cache update, it must follow the same convention of update the tag cache one clock before the data cache for data consistency + //if we updated the cache directly from the data returned from memory, we'd want to know one clock cycle ahead of time when readdatavalid is going to be 1 so we can update the tag + //in reality that means we would have to delay readata by 1 clock, which means we are spending the register that we saved earlier + //to solve this problem, the cache is updated by snooping on the data read from the rsp fifo + //there is some lookahead circuitry which reserves a read from rsp_fifo one clock cycle before the fifo itself is actually read, this is the time when we update the tag cache + + generate + if (!PIPELINE_UPDATE_TO_CACHE) begin : NO_PIPELINE_CACHE_UPDATE + //the write enable and the write address to the m20k are being driven by combinational logic, but this is a narrow m20k and will probably only be a single physical m20k + assign tag_cache_wr_en = is_flushing | addr_fifo_rd_ack; + assign tag_cache_wr_addr = (is_flushing) ? flush_counter : addr_fifo_rd_data[CACHE_ADDR_BITS-1:0]; + assign tag_cache_wr_data = {~is_flushing, addr_fifo_rd_data[WORD_ADDR_WIDTH-1:CACHE_ADDR_BITS]}; + assign data_cache_wr_data = rsp_fifo_rd_data; + assign flush_writing_done = ~is_flushing; + end + else begin : GEN_PIPELINE_CACHE_UPDATE //if the cache is large and therefore physically spread far apart across the FPGA, this pipeline stage allows more time for routing + always_ff @(posedge clock) begin + tag_cache_wr_en <= is_flushing | addr_fifo_rd_ack; + tag_cache_wr_addr <= (is_flushing) ? flush_counter : addr_fifo_rd_data[CACHE_ADDR_BITS-1:0]; + tag_cache_wr_data <= {~is_flushing, addr_fifo_rd_data[WORD_ADDR_WIDTH-1:CACHE_ADDR_BITS]}; + data_cache_wr_data <= rsp_fifo_rd_data; + flush_writing_done <= ~is_flushing; + end + end + endgenerate + + //tag contains both valid and upper_addr, split the read data into its components + assign {valid_read_from_cache, upper_addr_read_from_cache} = tag_cache_rd_data; + + //access the same cache line in the data cache one clock after it was accessed in the tag cache + always_ff @(posedge clock) begin + data_cache_wr_en <= tag_cache_wr_en; + data_cache_wr_addr <= tag_cache_wr_addr; + data_cache_rd_addr <= tag_cache_rd_addr; + end + + + + + //////////////////// + // Cache Memory // + //////////////////// + + dla_hld_lsu_read_cache_simple_dual_port_ram #( + .WIDTH (UPPER_ADDR_BITS+1), + .ADDR (CACHE_ADDR_BITS) + ) + tag_cache_inst + ( + .clock (clock), + .wr_en (tag_cache_wr_en), + .wr_addr (tag_cache_wr_addr), + .wr_data (tag_cache_wr_data), + .rd_addr (tag_cache_rd_addr), + .rd_data (tag_cache_rd_data) + ); + + dla_hld_lsu_read_cache_simple_dual_port_ram #( + .WIDTH (8*MEM_DATA_BYTES), + .ADDR (CACHE_ADDR_BITS) + ) + data_cache_inst + ( + .clock (clock), + .wr_en (data_cache_wr_en), + .wr_addr (data_cache_wr_addr), + .wr_data (data_cache_wr_data), + .rd_addr (data_cache_rd_addr), + .rd_data (data_cache_rd_data) + ); + +endmodule + + + + +module dla_hld_lsu_read_cache_simple_dual_port_ram #( + parameter int WIDTH, + parameter int ADDR //depth is 2**ADDR +) ( + input wire clock, + //no reset + + //write port, no byteenable + input wire wr_en, + input wire [ADDR-1:0] wr_addr, + input wire [WIDTH-1:0] wr_data, + + //read port, read latency is 2 clocks (both input and output of altera_syncram is registered) + input wire [ADDR-1:0] rd_addr, + output logic [WIDTH-1:0] rd_data +); + + //todo replace with new m20k/mlab wrapper when it becomes available + altera_syncram #( //modelsim library: altera_lnsim + .numwords_a (2**ADDR), + .numwords_b (2**ADDR), + .address_aclr_b ("NONE"), + .address_reg_b ("CLOCK0"), + .rdcontrol_reg_b ("CLOCK0"), + .byteena_reg_b ("CLOCK0"), + .indata_reg_b ("CLOCK0"), + .clock_enable_input_a ("BYPASS"), + .clock_enable_input_b ("BYPASS"), + .clock_enable_output_b ("BYPASS"), + .intended_device_family ("Stratix 10"), //quartus will correct this automatically to whatever your project actually uses + .lpm_type ("altera_syncram"), + .operation_mode ("DUAL_PORT"), + .outdata_aclr_b ("NONE"), + .outdata_sclr_b ("NONE"), + .outdata_reg_b ("CLOCK0"), + .power_up_uninitialized ("TRUE"), + .ram_block_type ("M20K"), + .read_during_write_mode_mixed_ports ("DONT_CARE"), + .widthad_a (ADDR), + .widthad_b (ADDR), + .width_a (WIDTH), + .width_b (WIDTH), + .width_byteena_a (1), + .enable_ecc ("FALSE") + ) + altera_syncram_inst + ( + //clock, no reset + .clock0 (clock), + + //write port + .wren_a (wr_en), + .address_a (wr_addr), + .data_a (wr_data), + + //read port + .address_b (rd_addr), + .q_b (rd_data), + + //unused + .aclr0 (1'b0), + .aclr1 (1'b0), + .address2_a (1'b1), + .address2_b (1'b1), + .addressstall_a (1'b0), + .addressstall_b (1'b0), + .byteena_a (1'b1), + .byteena_b (1'b1), + .clock1 (1'b1), + .clocken0 (1'b1), + .clocken1 (1'b1), + .clocken2 (1'b1), + .clocken3 (1'b1), + .data_b ({WIDTH{1'h1}}), + .eccencbypass (1'b0), + .eccencparity (8'b0), + .eccstatus (), + .q_a (), + .rden_a (1'b1), + .rden_b (1'b1), + .sclr (1'b0), + .wren_b (1'b0) + ); + +endmodule + + +`default_nettype wire diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_lsu_read_data_alignment.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_lsu_read_data_alignment.sv new file mode 100644 index 0000000..3aa14eb --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_lsu_read_data_alignment.sv @@ -0,0 +1,635 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +// This module accepts memory words (read from global memory) and produces kernel words (to be released to kernel downstream). It supports arbitary address alignment +// and arbitrary latency through the data aligner barrel shifter. One kernel word can span up to three memory words, and the word coalescer has already figured out +// how the kernel word has been split in order to send the read requests. This module reuses that information and has its own unaligned controller to track the various +// stages of assembling data for each kernel word. +// +// For additional info, refer to dla_hld_global_load_store.sv (top module of entire LSU) and dla_hld_lsu.sv (top module of the core LSU). + +`default_nettype none + +module dla_hld_lsu_read_data_alignment #( + //parameters that are different from dla_hld_lsu.sv + parameter bit CACHE_BYPASS_DATA_FIFO, //if using cache, bypass avm data fifo + + //parameters that are the same as dla_hld_lsu.sv + parameter bit ASYNC_RESET, //0 = registers consume reset synchronously, 1 = registers consume reset asynchronously + parameter int ADDR_ALIGNMENT_BITS, //indicates how many least significant bits of i_address are known to be 0, e.g. set this parameter to 3 if kernel accesses are 8-byte aligned + parameter int INTRA_ADDR_WIDTH, //how many least significant bits of the byte address represent the location inside a memory word + parameter int KER_DATA_BYTES, //width of kernel data path in bytes, does not need to be a power of 2 + parameter int MEM_DATA_BYTES, //width of memory data path in bytes, must be a power of 2 + parameter int KER_DOWN_STALL_LATENCY, //0 = use stall/valid, 1 or larger = use stall latency and the value indicates the downstream roundtrip latency (from i_stall to o_valid) + parameter int DATA_ALIGNER_MUX_PER_PIPE, //0 = use comb logic for data alignment mux, 1 or more = max number of 2:1 muxes before a pipeline stage is added, e.g. 2 means up to 4:1 mux between reg + parameter bit ENABLE_WORD_COALESCE, //whether to coalesce kernel words together within the same memory word + parameter bit HIGH_THROUGHPUT_MODE, //0 = use N clock cycles to process a kernel word that spans N memory words, 1 = use minimum amount of time to process kernel words, only matters if N >= 2 + parameter int MAX_MEM_WORDS_PER_KER_WORD, //trim some logic if it is guaranteed that each kernel word can only span 1 or 2 memory words + parameter int MLAB_FIFO_DEPTH, //use a shallow fifo if handshaking is expected to take a few clocks (or if capacity can be borrowed from a nearby deep fifo), if we need an MLAB may as well use all of it + parameter int M20K_WIDE_FIFO_DEPTH //use a deep fifo if handshaking is expected to take hundreds of clocks e.g. going off chip, for wide data path use M20K in shallowest mode, but may as well use all depth available +) ( + input wire clock, + input wire resetn, + + //write side of avm data fifo + input wire i_burstcoal_valid, //for read request throttle (don't ask for more data than there is space for), a memory word is considered outstanding once it enters burst coal + output logic o_avm_rd_data_fifo_almost_full, //this is the read request throttle, not the fifo's almost full + input wire i_avm_readdatavalid, //if CACHE_BYPASS_DATA_FIFO=0 this is avalon readdatavalid (no backpressure), else cache says there is data that LSU may accept but does not have to + input wire [8*MEM_DATA_BYTES-1:0] i_avm_readdata, //data read from memory + output logic o_avm_readdata_accepted, //only used if CACHE_BYPASS_DATA_FIFO=1, this is how LSU tells the cache whether it accepted the read data + + //read side of cmd fifo + output logic o_rsp_fifo_almost_full, //backpressure to unaligned controller for the read request address + input wire i_cmd_fifo_rd_ack, //read request is done with kernel word + input wire i_cmd_can_coalesce, //from word coalescer, last section of kernel word is in the same memory word as the first section of next kernel word + input wire [INTRA_ADDR_WIDTH-1:0] i_cmd_addr, //from word coalescer, within a memory word, the address of the first byte that this kernel word touches + input wire i_cmd_spans_two, //from word coalescer, kernel word spans at least two memory words + input wire i_cmd_spans_three, //from word coalescer, kernel word spans three memory words + + //read side of predicate fifo + input wire i_predicate_fifo_empty, //fifo is empty + input wire i_predicate_fifo_rd_data, //0 = normal transaction, 1 = predicated (still need to release a valid to kernel downstream, but no memory transaction) + output logic o_predicate_fifo_rd_ack, //read from fifo + + //kernel downstream + output logic [8*KER_DATA_BYTES-1:0] o_readdata, //data for kernel downstream + output logic o_valid, //LSU has a transaction available, kernel downstream can but does not need to accept it if using stall valid, must accept it if using stall latency + output logic o_empty, //LSU does not have a transaction available for kernel downstream, meant to be used with stall latency + output logic o_almost_empty, //LSU downstream interface does not have at least KER_DOWN_STALL_LATENCY transactions ready to be released + input wire i_stall //backpressure from kernel downstream +); + + //total width of the rsp fifo, but some output bits are masked or ignored so quartus may trim things + localparam int RSP_FIFO_WIDTH = INTRA_ADDR_WIDTH + 7; + + //this is how many 2:1 mux stages the data aligner will need + localparam int SHIFT_TO_ALIGN_WIDTH = INTRA_ADDR_WIDTH - ADDR_ALIGNMENT_BITS; + + //latency = ceiling(mux stages needed / max mux stages per pipe), but 0 means use combinational logic + localparam int DATA_ALIGNER_LATENCY = (DATA_ALIGNER_MUX_PER_PIPE == 0) ? 0 : ((SHIFT_TO_ALIGN_WIDTH + DATA_ALIGNER_MUX_PER_PIPE - 1) / DATA_ALIGNER_MUX_PER_PIPE); + + //2 clock cycles from rsp fifo read until start of data alignment, DATA_ALIGNER_LATENCY to do alignment, 1 clock for the register stage that accumulates the write data for output fifo + localparam int OUTPUT_FIFO_ALMOST_FULL_CUTOFF = DATA_ALIGNER_LATENCY + 3; + + + + /////////////// + // Signals // + /////////////// + + //reset + logic aclrn, sclrn, resetn_synchronized; + + //avm rd data fifo + logic avm_rd_data_fifo_not_empty, avm_rd_data_fifo_rd_ack, late_avm_rd_data_fifo_rd_ack; + logic [8*MEM_DATA_BYTES-1:0] avm_rd_data_fifo_rd_data; + + //convert cmd to rsp + logic cmd_first_preloaded; + logic rsp_fifo_wr_first_preloaded, rsp_fifo_wr_can_coalesce, rsp_fifo_wr_dont_read_data; + logic rsp_fifo_wr_spans_two, rsp_fifo_wr_spans_three, rsp_fifo_wr_needs_second_cycle, rsp_fifo_wr_needs_third_cycle; + logic [INTRA_ADDR_WIDTH-1:0] rsp_fifo_wr_addr; + + //rsp fifo + logic rsp_fifo_wr_req, rsp_fifo_empty, rsp_fifo_rd_ack; + logic [RSP_FIFO_WIDTH-1:0] rsp_fifo_wr_all_data, rsp_fifo_rd_all_data; + + //unpack rsp fifo read data + logic rsp_first_preloaded, rsp_can_coalesce, rsp_dont_read_data; + logic rsp_spans_two, rsp_spans_three, rsp_needs_second_cycle, rsp_needs_third_cycle; + logic [INTRA_ADDR_WIDTH-1:0] rsp_addr; + logic rsp_spans_two_raw, rsp_spans_three_raw; + + //unaligned controller + logic can_read_rsp_fifo; + logic rsp_at_second_cycle, rsp_at_third_cycle, rsp_is_coalescing; + + //address range analysis + logic [KER_DATA_BYTES-1:0] address_decode; + + //data alignment + logic [SHIFT_TO_ALIGN_WIDTH-1:0] shift_to_align_readdata; + logic [8*KER_DATA_BYTES-1:0] readdata_aligned; + + //output fifo + logic output_fifo_wr_req, output_fifo_almost_full; + logic [8*KER_DATA_BYTES-1:0] output_fifo_wr_data; + + + + ///////////// + // Reset // + ///////////// + + dla_acl_reset_handler + #( + .ASYNC_RESET (ASYNC_RESET), + .USE_SYNCHRONIZER (0), + .SYNCHRONIZE_ACLRN (0), + .PIPE_DEPTH (0), + .NUM_COPIES (1) + ) + dla_acl_reset_handler_inst + ( + .clk (clock), + .i_resetn (resetn), + .o_aclrn (aclrn), + .o_resetn_synchronized (resetn_synchronized), + .o_sclrn (sclrn) + ); + + + + //////////////////////// + // Avm Rd Data FIFO // + //////////////////////// + + //read data from global memory cannot be backpressured, capture it in a fifo + //if using read cache, the read data can be backpressured due to the fifos inside the read cache, so avm_rd_data_fifo can be bypassed + + //reads are reserved from avm_rd_data_fifo before the fifo itself is read, there is 2 clocks of latency from the read until the data is available + //this means fifo empty has to be tracked externally to the fifo to ensure no underflow + //those 2 clocks of read latency are implemented as a registered read ack, and stall in earliness of 1 in the fifo + always_ff @(posedge clock) begin + late_avm_rd_data_fifo_rd_ack <= avm_rd_data_fifo_rd_ack; + end + + assign o_avm_readdata_accepted = avm_rd_data_fifo_rd_ack; //if using cache, this is the LSU indicating that it has accepted the read data from cache + + generate + if (CACHE_BYPASS_DATA_FIFO) begin : NO_AVM_RD_DATA_FIFO + assign avm_rd_data_fifo_rd_data = i_avm_readdata; + assign avm_rd_data_fifo_not_empty = i_avm_readdatavalid; //if using cache, readdatavalid means the cache has data available, LSU may accept it but does not have to + end + else begin : GEN_AVM_RD_DATA_FIFO + dla_hld_fifo #( + .STALL_IN_EARLINESS (1), + .WIDTH (8*MEM_DATA_BYTES), + .DEPTH (M20K_WIDE_FIFO_DEPTH), + .NEVER_OVERFLOWS (1), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0), + .STYLE ("ms") + ) + avm_rd_data_fifo_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + .i_valid (i_avm_readdatavalid), + .i_data (i_avm_readdata), + .o_stall (), + .o_almost_full (), + .o_valid (), + .o_data (avm_rd_data_fifo_rd_data), + .i_stall (~late_avm_rd_data_fifo_rd_ack), + .o_almost_empty (), + .o_empty (), //this is tracked separately outside the fifo so that we can reserve space for a read before that read actually happens + .ecc_err_status () + ); + + //reserve reads from the fifo before the read itself actually happens + logic late_i_avm_readdatavalid, late_two_i_avm_readdatavalid; //this assumes avm_rd_data_fifo has a write to read latency of 3 + always_ff @(posedge clock) begin + late_i_avm_readdatavalid <= i_avm_readdatavalid; + late_two_i_avm_readdatavalid <= late_i_avm_readdatavalid; + end + + dla_acl_tessellated_incr_decr_threshold #( + .CAPACITY (M20K_WIDE_FIFO_DEPTH), + .THRESHOLD (1), + .INITIAL_OCCUPANCY (0), + .THRESHOLD_REACHED_AT_RESET (0), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0) + ) + avm_rd_data_fifo_empty_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + .incr_no_overflow (late_two_i_avm_readdatavalid), + .incr_raw (late_two_i_avm_readdatavalid), + .decr_no_underflow (avm_rd_data_fifo_rd_ack), + .decr_raw (avm_rd_data_fifo_rd_ack), + .threshold_reached (avm_rd_data_fifo_not_empty) + ); + end + endgenerate + + + + ///////////////////////////// + // Read Request Throttle // + ///////////////////////////// + + //never request more reads than there is space for capturing the response data + //there is 2 clocks of latency from o_avm_rd_data_fifo_almost_full to i_burstcoal_valid + //once a memory word enters the burst coalescer, that memory word is considered an outstanding transaction in terms of the throttle + //easier to add one when something enters burst coalescer rather than add burstcount when the read request leaves the LSU + //one clock after read data arrives from global memory, that transaction is no longer considered outstanding + dla_acl_tessellated_incr_decr_threshold #( + .CAPACITY (M20K_WIDE_FIFO_DEPTH), + .THRESHOLD (M20K_WIDE_FIFO_DEPTH-2), + .INITIAL_OCCUPANCY (0), + .THRESHOLD_REACHED_AT_RESET (1), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0) + ) + avm_rd_data_fifo_almost_full_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + .incr_no_overflow (i_burstcoal_valid), + .incr_raw (i_burstcoal_valid), + .decr_no_underflow (late_avm_rd_data_fifo_rd_ack), //okay to use a delayed version of read ack since, backpressure to upstream would be released one clock later + .decr_raw (late_avm_rd_data_fifo_rd_ack), + .threshold_reached (o_avm_rd_data_fifo_almost_full) + ); + + + + ////////////////////////// + // Convert Cmd to Rsp // + ////////////////////////// + + //convert the processing of each kernel word from request to response, this is not a trivial translation + //for example, suppose kernel word N and kernel word N+1 each span two memory words, and these kernel words can coalesce + //this means the second memory that kernel word N touches is the same memory word where kernel word N+1 starts + //in high throughput mode, on the request side no time is allocated for the second memory word of kernel word N, it will be dealt with at the same time as the first memory word of kernel word N+1 + //on the response side, no time is allocated for the first memory word of kernel word N+1, we already read that memory word in the second part of kernel word N so keep the data live + //there is only one clock cycle to generate the response for kernel word N+1, there is data kept live from kernel word N, and data read from the second memory word of kernel word N+1 + + generate + if (HIGH_THROUGHPUT_MODE && ENABLE_WORD_COALESCE) begin : GEN_CMD_FIRST_PRELOADED + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) cmd_first_preloaded <= 1'b0; + else begin + if (i_cmd_fifo_rd_ack) cmd_first_preloaded <= i_cmd_can_coalesce; //if kernel word N-1 can coalesce, then the first memory word of kernel word N has already been read + if (~sclrn) cmd_first_preloaded <= 1'b0; + end + end + end + else begin : NO_CMD_FIRST_PRELOADED + assign cmd_first_preloaded = 1'b0; + end + endgenerate + + always_ff @(posedge clock) begin + rsp_fifo_wr_first_preloaded <= cmd_first_preloaded; + rsp_fifo_wr_can_coalesce <= i_cmd_can_coalesce; + rsp_fifo_wr_dont_read_data <= ~i_cmd_spans_two & cmd_first_preloaded; + rsp_fifo_wr_spans_two <= i_cmd_spans_two; + rsp_fifo_wr_spans_three <= i_cmd_spans_three; + rsp_fifo_wr_needs_second_cycle <= i_cmd_spans_three | (i_cmd_spans_two & ~cmd_first_preloaded); //beware this logic is different than the word coalescer + rsp_fifo_wr_needs_third_cycle <= i_cmd_spans_three & ~cmd_first_preloaded; //beware this logic is different than the word coalescer + rsp_fifo_wr_addr <= i_cmd_addr; + end + + + + //////////////// + // Rsp FIFO // + //////////////// + + always_ff @(posedge clock) begin + rsp_fifo_wr_req <= i_cmd_fifo_rd_ack; + end + + assign rsp_fifo_wr_all_data[0] = (MAX_MEM_WORDS_PER_KER_WORD >= 2) ? rsp_fifo_wr_spans_two : 1'b0; //see comments on the corresponding read data for an interpretation of each signal + assign rsp_fifo_wr_all_data[1] = (MAX_MEM_WORDS_PER_KER_WORD == 3) ? rsp_fifo_wr_spans_three : 1'b0; + assign rsp_fifo_wr_all_data[2] = (MAX_MEM_WORDS_PER_KER_WORD >= 2) ? rsp_fifo_wr_needs_second_cycle : 1'b0; + assign rsp_fifo_wr_all_data[3] = (MAX_MEM_WORDS_PER_KER_WORD == 3) ? rsp_fifo_wr_needs_third_cycle : 1'b0; + assign rsp_fifo_wr_all_data[4] = (ENABLE_WORD_COALESCE) ? rsp_fifo_wr_can_coalesce : 1'b0; + assign rsp_fifo_wr_all_data[5] = (ENABLE_WORD_COALESCE) ? rsp_fifo_wr_first_preloaded : 1'b0; + assign rsp_fifo_wr_all_data[6] = (HIGH_THROUGHPUT_MODE) ? rsp_fifo_wr_dont_read_data : 1'b0; + assign rsp_fifo_wr_all_data[7 +: INTRA_ADDR_WIDTH] = ~((1<<ADDR_ALIGNMENT_BITS)-1) & rsp_fifo_wr_addr; + + dla_hld_fifo #( + .WIDTH (RSP_FIFO_WIDTH), + .DEPTH (M20K_WIDE_FIFO_DEPTH), + .NEVER_OVERFLOWS (1), + .ALMOST_FULL_CUTOFF (2), //1 clock from almost full to cmd fifo read, 1 clock to rsp_fifo_wr_req + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0), + .STYLE ("ms") + ) + rsp_fifo_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + .i_valid (rsp_fifo_wr_req), + .i_data (rsp_fifo_wr_all_data), + .o_stall (), + .o_almost_full (o_rsp_fifo_almost_full), + .o_valid (), + .o_data (rsp_fifo_rd_all_data), + .i_stall (~rsp_fifo_rd_ack), + .o_almost_empty (), + .o_empty (rsp_fifo_empty), + .ecc_err_status () + ); + + //quartus does not propagate constants across the ram inside the fifo, so do it again here + assign rsp_spans_two_raw = (MAX_MEM_WORDS_PER_KER_WORD >= 2) ? rsp_fifo_rd_all_data[0] : 1'b0; //kernel word spans at least two memory words + assign rsp_spans_three_raw = (MAX_MEM_WORDS_PER_KER_WORD == 3) ? rsp_fifo_rd_all_data[1] : 1'b0; //kernel word spans three memory words + assign rsp_needs_second_cycle = (MAX_MEM_WORDS_PER_KER_WORD >= 2) ? rsp_fifo_rd_all_data[2] : 1'b0; //need at least two clock cycles to process kernel word + assign rsp_needs_third_cycle = (MAX_MEM_WORDS_PER_KER_WORD == 3) ? rsp_fifo_rd_all_data[3] : 1'b0; //need at least three clock cycles to process kernel word + assign rsp_can_coalesce = (ENABLE_WORD_COALESCE) ? rsp_fifo_rd_all_data[4] : 1'b0; //last section of kernel word is in the same memory word as the first section of next kernel word + assign rsp_first_preloaded = (ENABLE_WORD_COALESCE) ? rsp_fifo_rd_all_data[5] : 1'b0; //first memory word has already been loaded by the previous kernel word + assign rsp_dont_read_data = (HIGH_THROUGHPUT_MODE) ? rsp_fifo_rd_all_data[6] : 1'b0; //if the first memory word has already been loaded, don't try to read it again + assign rsp_addr = ~((1<<ADDR_ALIGNMENT_BITS)-1) & rsp_fifo_rd_all_data[7 +: INTRA_ADDR_WIDTH]; //within a memory word, the address of the first byte that this kernel word touches + + //in low throughput mode, if a kernel word spans N memory words it will take N clock cycles to process it regardless of coalescing + assign rsp_spans_two = (HIGH_THROUGHPUT_MODE) ? rsp_spans_two_raw : rsp_needs_second_cycle; + assign rsp_spans_three = (HIGH_THROUGHPUT_MODE) ? rsp_spans_three_raw : rsp_needs_third_cycle; + + + + //////////////////////////// + // Unaligned Controller // + //////////////////////////// + + // based on how many memory words a kernel word spans and other info, track the progress of processing one kernel word + + // make forward progress in processing a non-predicated kernel word if kernel word info is available in rsp fifo, avm_rd_data_fifo has data (or we already preloaded it) and downstream has space + assign can_read_rsp_fifo = ~rsp_fifo_empty & (avm_rd_data_fifo_not_empty | rsp_dont_read_data) & ~output_fifo_almost_full & ~i_predicate_fifo_empty & ~i_predicate_fifo_rd_data; + + // done with a kernel word if it was predicated, or done processing its last memory word + assign o_predicate_fifo_rd_ack = rsp_fifo_rd_ack | (~output_fifo_almost_full & ~i_predicate_fifo_empty & i_predicate_fifo_rd_data); + + // in high throughput mode, done with a memory word as soon as the first kernel word who needs it reads it, anything needed by a later kernel word will be kept live + // in low throughput mode, done with a memory word when the last kernel word who needs it reads it + assign avm_rd_data_fifo_rd_ack = can_read_rsp_fifo & ((HIGH_THROUGHPUT_MODE) ? ~rsp_dont_read_data : ~rsp_is_coalescing); + + dla_hld_lsu_unaligned_controller #( + .ASYNC_RESET (ASYNC_RESET), + .MAX_MEM_WORDS_PER_KER_WORD (MAX_MEM_WORDS_PER_KER_WORD), + .HIGH_THROUGHPUT_MODE (HIGH_THROUGHPUT_MODE) + ) + dla_hld_lsu_unaligned_controller_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + + //handshaking + .i_can_read_fifo (can_read_rsp_fifo), + .o_fifo_rd_ack (rsp_fifo_rd_ack), + + //information about the kernel word + .i_spans_two (rsp_spans_two), + .i_spans_three (rsp_spans_three), + .i_needs_second_cycle (rsp_needs_second_cycle), + .i_needs_third_cycle (rsp_needs_third_cycle), + .i_can_coalesce (rsp_can_coalesce), + + //state of processing within kernel word + .o_at_second_cycle (rsp_at_second_cycle), //in the second clock cycle of processing current kernel word + .o_at_third_cycle (rsp_at_third_cycle), //in the third clock cycle of processing current kernel word + .o_is_coalescing (rsp_is_coalescing), //does the current section of the kernel word coalesce with the next section (next section could be same or next kernel word) + .o_first_access_in_word () + ); + + + + ////////////////////////////// + // Address Range Analysis // + ////////////////////////////// + + //determine which bytes of the kernel word to update once the data read from memory is aligned + //kernel word is always constructed from lowest byte to high byte, need to ensure the lower bytes which are constructed first do not get clobbered, but okay to write whatever to upper bytes + + generate + if (HIGH_THROUGHPUT_MODE) begin : NO_ADDRESS_DECODE + assign address_decode = '1; //high throughput mode writes to all bytes of output data at once + end + else begin : GEN_ADDRESS_DECODE + logic [INTRA_ADDR_WIDTH:0] prep_address_decode_lo_limit, address_decode_lo_limit; + + //one clock cycle after can_read_rsp_fifo + always_ff @(posedge clock) begin + if (rsp_at_third_cycle) prep_address_decode_lo_limit <= (INTRA_ADDR_WIDTH+1)'(2*MEM_DATA_BYTES - rsp_addr); + else if (rsp_at_second_cycle) prep_address_decode_lo_limit <= MEM_DATA_BYTES - rsp_addr; + else prep_address_decode_lo_limit <= '0; + end + + dla_acl_shift_register_no_reset #( + .WIDTH (INTRA_ADDR_WIDTH+1), + .STAGES (DATA_ALIGNER_LATENCY) + ) + address_decode_lo_limit_inst + ( + .clock (clock), + .D (prep_address_decode_lo_limit), + .Q (address_decode_lo_limit) //DATA_ALIGNER_LATENCY+1 clocks after can_read_rsp_fifo + ); + + //DATA_ALIGNER_LATENCY+2 clocks after can_read_rsp_fifo + always_ff @(posedge clock) begin + for (int i=0; i<KER_DATA_BYTES; i++) begin + address_decode[i] <= ((i & ~((1<<ADDR_ALIGNMENT_BITS)-1)) >= address_decode_lo_limit); + end + end + end + endgenerate + + + + ////////////////////// + // Data Alignment // + ////////////////////// + + //in high throughput mode, accumulate all of the data that is needed for the entire kernel word before aligning + //in low throughput mode, avm_rd_data_fifo_rd_data always feeds the aligner, how much to shift is varied as different memory words make their way through and accumulate in the write data for the output fifo + + generate + if (SHIFT_TO_ALIGN_WIDTH > 0) begin : GEN_SHIFT_TO_ALIGN + logic [SHIFT_TO_ALIGN_WIDTH-1:0] late_rsp_addr_intra_aligned; + always_ff @(posedge clock) begin + late_rsp_addr_intra_aligned <= rsp_addr[INTRA_ADDR_WIDTH-1:ADDR_ALIGNMENT_BITS]; //one clock after can_read_rsp_fifo + shift_to_align_readdata <= late_rsp_addr_intra_aligned; //two clocks after can_read_rsp_fifo + end + end + else begin : NO_SHIFT_TO_ALIGN //trivial alignment + assign shift_to_align_readdata = 'x; + end + endgenerate + + generate + if (HIGH_THROUGHPUT_MODE) begin : GEN_READDATA_BUFFERS + //based on the kernel width, memory width, and address alignment, determine how far the kernel word can go into the second or third memory word + //anything past this does not need a buffer, those bits can be assigned x so that quartus can trim it away + //it is highly unlikely that quartus can figure out the range analysis to trim away the upper bits of the buffer which are unreachable + localparam int WIDE_LIMIT = MEM_DATA_BYTES + KER_DATA_BYTES - (2**ADDR_ALIGNMENT_BITS); + + //assemble up to three memory words before sending it to the data aligner + //if kernel word spans one memory word: + // - data_lo should have the data, it can come from data_lo_buf if this memory word was preloaded by an earlier kernel word + //if kernel word spans two memory words: + // - data_lo should have the first memory word -- would have been the previous data read from the fifo, must be captured in data_lo_buf + // - data_mid should have the second memory word -- would be sourced directly from the fifo read data + //if kernel word spans three memory words: + // - data_lo should have the first memory word -- must capture what was read two words ago from the fifo in data_lo_buf + // - data_mid should have the second memory word -- would have been the previous data read from the fifo, must be captured in data_mid_buf + // - data_hi should have the third memory word -- would be sourced directly from the fifo read data + + genvar g; + logic [8*MEM_DATA_BYTES-1:0] data_lo, data_mid, data_hi; //these three memory words feed the data aligner + logic [8*MEM_DATA_BYTES-1:0] data_lo_buf, data_mid_buf; //may need to capture previous words read from fifo + + //there is 2 clocks of latency from avm_rd_data_fifo_rd_ack until the corresponding data arrives, figure out how to steer the data once it arrives + logic data_lo_choose_buf, data_lo_choose_buf_early; //should data_lo come from buffer or directly from fifo read data + logic data_mid_choose_buf, data_mid_choose_buf_early; //should data_mid come from buffer or directly from fifo read data + logic data_lo_buf_enable, data_lo_buf_enable_early_filter; //should data_lo_buf load from the fifo read data + logic data_mid_buf_enable; //should data_mid_buf load from the fifo read data + + always_ff @(posedge clock) begin + //one clock after avm_rd_data_fifo_rd_ack + data_lo_choose_buf_early <= rsp_first_preloaded | rsp_needs_second_cycle; + data_lo_buf_enable_early_filter <= ~(rsp_needs_third_cycle & rsp_at_second_cycle) & ~(rsp_needs_second_cycle & rsp_first_preloaded & ~rsp_at_second_cycle); + + //two clocks after + data_lo_choose_buf <= data_lo_choose_buf_early; + data_lo_buf_enable <= late_avm_rd_data_fifo_rd_ack & data_lo_buf_enable_early_filter; + + //three clocks after + if (data_lo_buf_enable) data_lo_buf <= avm_rd_data_fifo_rd_data; + end + + if (MAX_MEM_WORDS_PER_KER_WORD <= 2) begin + assign data_mid_choose_buf = 1'b0; //data_mid_buf is only needed if the kernel word spans three memory words + end + else begin //MAX_MEM_WORDS_PER_KER_WORD == 3 + always_ff @(posedge clock) begin + //one clock after avm_rd_data_fifo_rd_ack + data_mid_choose_buf_early <= rsp_needs_third_cycle | (rsp_needs_second_cycle & rsp_first_preloaded); + + //two clocks after + data_mid_choose_buf <= data_mid_choose_buf_early; + data_mid_buf_enable <= late_avm_rd_data_fifo_rd_ack; + + //three clocks after + if (data_mid_buf_enable) data_mid_buf <= avm_rd_data_fifo_rd_data; + end + end + + assign data_lo = (data_lo_choose_buf) ? data_lo_buf : avm_rd_data_fifo_rd_data; + for (g=0; g<MEM_DATA_BYTES; g++) begin : GEN_UPPER_BUFFERS + if (g+MEM_DATA_BYTES < WIDE_LIMIT) begin + assign data_mid[8*g+:8] = (data_mid_choose_buf) ? data_mid_buf[8*g+:8] : avm_rd_data_fifo_rd_data[8*g+:8]; + end + else begin + assign data_mid[8*g+:8] = 'x; //kernel word can never reach this far in the second memory word + end + + if (g+2*MEM_DATA_BYTES < WIDE_LIMIT) begin + assign data_hi[8*g+:8] = avm_rd_data_fifo_rd_data[8*g+:8]; + end + else begin + assign data_hi[8*g+:8] = 'x; //kernel word can never reach this far in the third memory word + end + end + + dla_hld_lsu_data_aligner #( + .LATENCY (DATA_ALIGNER_LATENCY), + .DIRECTION (1), //shift left + .SECTION_WIDTH (8 * (2**ADDR_ALIGNMENT_BITS)), + .WRAP_AROUND (0), //linear shift + .I_DATA_WIDTH (3*8*MEM_DATA_BYTES), + .I_SHIFT_WIDTH (SHIFT_TO_ALIGN_WIDTH), + .O_DATA_WIDTH (8*KER_DATA_BYTES) + ) + readdata_aligned_inst + ( + .clock (clock), + .i_data ({data_hi, data_mid, data_lo}), + .i_shift (shift_to_align_readdata), + .o_data (readdata_aligned) + ); + end + else begin : NO_READDATA_BUFFERS + dla_hld_lsu_data_aligner #( + .LATENCY (DATA_ALIGNER_LATENCY), + .DIRECTION (1), //shift left + .SECTION_WIDTH (8 * (2**ADDR_ALIGNMENT_BITS)), + .WRAP_AROUND (1), //wrap-around shift + .I_DATA_WIDTH (8*MEM_DATA_BYTES), + .I_SHIFT_WIDTH (SHIFT_TO_ALIGN_WIDTH), + .O_DATA_WIDTH (8*KER_DATA_BYTES) + ) + readdata_aligned_inst + ( + .clock (clock), + .i_data (avm_rd_data_fifo_rd_data), + .i_shift (shift_to_align_readdata), + .o_data (readdata_aligned) + ); + end + endgenerate + + + + /////////////////// + // Output FIFO // + /////////////////// + + dla_acl_shift_register_no_reset #( + .WIDTH (1), + .STAGES (DATA_ALIGNER_LATENCY + 3) + ) + output_fifo_wr_req_inst + ( + .clock (clock), + .D (o_predicate_fifo_rd_ack), + .Q (output_fifo_wr_req) + ); + + always_ff @(posedge clock) begin + for (int i=0; i<KER_DATA_BYTES; i++) begin + //low throughput mode will assemble the aligned data from up to 3 memory words over up to 3 clock cycles, high throughput mode does not do any accumulation here (address_decode is all ones) + if (address_decode[i]) begin + output_fifo_wr_data[8*i +: 8] <= readdata_aligned[8*i +: 8]; + end + end + end + + dla_hld_fifo #( + .WIDTH (8*KER_DATA_BYTES), + .DEPTH (MLAB_FIFO_DEPTH), + .NEVER_OVERFLOWS (1), + .ALMOST_FULL_CUTOFF (OUTPUT_FIFO_ALMOST_FULL_CUTOFF), + .USE_STALL_LATENCY_DOWNSTREAM ((KER_DOWN_STALL_LATENCY) ? 1 : 0), + .ALMOST_EMPTY_CUTOFF (KER_DOWN_STALL_LATENCY), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0), + .STYLE ("ms") + ) + output_fifo_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + .i_valid (output_fifo_wr_req), + .i_data (output_fifo_wr_data), + .o_stall (), + .o_almost_full (output_fifo_almost_full), + .o_valid (o_valid), + .o_data (o_readdata), + .i_stall (i_stall), + .o_almost_empty (o_almost_empty), + .o_empty (o_empty), + .ecc_err_status () + ); + + +endmodule + + +`default_nettype wire diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_lsu_unaligned_controller.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_lsu_unaligned_controller.sv new file mode 100644 index 0000000..ec92558 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_lsu_unaligned_controller.sv @@ -0,0 +1,165 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +// This module tracks the processing of each kernel word as it spans multiple memory words. Up to 3 memory words per kernel word is supported, however if it +// is statically known that kernel words can only span fewer memory words then some logic can be trimmed away. +// +// This is the central controller which reads from the cmd fifo (output of word coalescer) and steers all of the pipelined logic from reading the input fifos +// to aligning the kernel write data to the memory interface. The burst coalescer is also controlled by this. +// +// The read LSU has a second instance of this unaligned controller for the response data. This instance steers all of the pipelined logic from reading the +// avm_rd_data_fifo to aligning the memory read data to the kernel interface. +// +// For additional info, refer to dla_hld_global_load_store.sv (top module of entire LSU) and dla_hld_lsu.sv (top module of the core LSU). + +`default_nettype none + +module dla_hld_lsu_unaligned_controller #( + parameter bit ASYNC_RESET, //0 = registers consume reset synchronously, 1 = registers consume reset asynchronously + parameter int MAX_MEM_WORDS_PER_KER_WORD, //trim some logic if it is guaranteed that each kernel word can only span 1 or 2 memory words + parameter bit HIGH_THROUGHPUT_MODE //0 = use N clock cycles to process a kernel word that spans N memory words, 1 = use minimum amount of time to process kernel words, only matters if N >= 2 +) ( + input wire clock, + input wire resetn, + + //handshaking + input wire i_can_read_fifo, //can move on to the next section of the kernel word if upstream has stuff and downstream has space + output logic o_fifo_rd_ack, //done with all sections of the kernel word + + //information about the kernel word + input wire i_spans_two, //kernel word spans at least two memory words + input wire i_spans_three, //kernel word spans three memory words + input wire i_needs_second_cycle, //need at least two clock cycles to process kernel word + input wire i_needs_third_cycle, //need at least three clock cycles to process kernel word + input wire i_can_coalesce, //last section of kernel word is in the same memory word as the first section of next kernel word + + //state of processing within kernel word + output logic o_at_second_cycle, //in the second clock cycle of processing current kernel word + output logic o_at_third_cycle, //in the third clock cycle of processing current kernel word + output logic o_is_coalescing, //does the current section of the kernel word coalesce with the next section (next section could be same or next kernel word) + output logic o_first_access_in_word //asserts when the first access to a memory word happens +); + + //reset + logic aclrn, sclrn, resetn_synchronized; + dla_acl_reset_handler + #( + .ASYNC_RESET (ASYNC_RESET), + .USE_SYNCHRONIZER (0), + .SYNCHRONIZE_ACLRN (0), + .PIPE_DEPTH (0), + .NUM_COPIES (1) + ) + dla_acl_reset_handler_inst + ( + .clk (clock), + .i_resetn (resetn), + .o_aclrn (aclrn), + .o_resetn_synchronized (resetn_synchronized), + .o_sclrn (sclrn) + ); + + //read from the upstream fifo if done with all sections of the kernel word + assign o_fifo_rd_ack = i_can_read_fifo & ((i_needs_third_cycle) ? o_at_third_cycle : (i_needs_second_cycle) ? o_at_second_cycle : 1'b1); + + generate + if (MAX_MEM_WORDS_PER_KER_WORD == 3) begin : THREE_MEM_WORDS + //this is the most general version of the state machine which can progress through up to 3 memory words for each kernel word + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) begin + o_at_second_cycle <= 1'b0; + o_at_third_cycle <= 1'b0; + end + else begin + if (i_can_read_fifo) begin + if (o_at_third_cycle) begin + o_at_third_cycle <= 1'b0; + end + else if (o_at_second_cycle) begin + o_at_second_cycle <= 1'b0; + o_at_third_cycle <= i_needs_third_cycle; + end + else begin + o_at_second_cycle <= i_needs_second_cycle; + end + end + if (~sclrn) begin + o_at_second_cycle <= 1'b0; + o_at_third_cycle <= 1'b0; + end + end + end + end + else if (MAX_MEM_WORDS_PER_KER_WORD == 2) begin : TWO_MEM_WORDS + //impossible to get into third section, but not sure if quartus will figure that out + assign o_at_third_cycle = 1'b0; + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) begin + o_at_second_cycle <= 1'b0; + end + else begin + if (i_can_read_fifo) begin + if (o_at_second_cycle) begin + o_at_second_cycle <= 1'b0; + end + else begin + o_at_second_cycle <= i_needs_second_cycle; + end + end + if (~sclrn) begin + o_at_second_cycle <= 1'b0; + end + end + end + end + else begin : ONE_MEM_WORD //MAX_MEM_WORDS_PER_KER_WORD == 1 + //impossible to get into second or third section, but not sure if quartus will figure that out + assign o_at_second_cycle = 1'b0; + assign o_at_third_cycle = 1'b0; + end + endgenerate + + //i_can_coalesce (from word coalescer) indicates if the last section of a kernel word coalesces with the first section of the next kernel word, where a section is contained within one memory word + //if a kernel word spans two memory words, obviously we cannot coalesce while we are processing the first memory word of that kernel word + //based on where we are in processing the kernel word, determine whether or not coalescing actually happens + generate + if (HIGH_THROUGHPUT_MODE) begin : IS_COALESCING_HIGH_THROUGHPUT + always_comb begin + o_is_coalescing = i_can_coalesce; + if (i_spans_two) o_is_coalescing = 1'b0; //either the last section did not coalesce, or when processing the next kernel word it will finish the current kernel word's last section + end + end + else begin : IS_COALESCING_LOW_THROUGHPUT + always_comb begin + o_is_coalescing = i_can_coalesce; + if (i_spans_two & !o_at_second_cycle) o_is_coalescing = 1'b0; //i_can_coalesce is only valid if we are processing the last section of the kernel word + if (i_spans_three & !o_at_third_cycle) o_is_coalescing = 1'b0; + end + end + endgenerate + + //first access in a memory word happens when the previous word did not coalesce + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) begin + o_first_access_in_word <= 1'b1; + end + else begin + if (i_can_read_fifo) o_first_access_in_word <= ~o_is_coalescing; + if (~sclrn) o_first_access_in_word <= 1'b1; + end + end + + +endmodule + +`default_nettype wire diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_lsu_word_coalescer.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_lsu_word_coalescer.sv new file mode 100644 index 0000000..c35f4b0 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_lsu_word_coalescer.sv @@ -0,0 +1,357 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +// This module performs two things for the LSU: +// 1. (Required) Generate information for the unaligned controller such as how many memory words each kernel word spans, +// 2. (Optional) Detect whether many kernel words can be coalesced into the same memory word, or more accurately is last address of kernel word N inside the same memory address as the first address of kernel word N+1 +// +// For additional info, refer to dla_hld_global_load_store.sv (top module of entire LSU) and dla_hld_lsu.sv (top module of the core LSU). + +`default_nettype none + +module dla_hld_lsu_word_coalescer #( + parameter bit ASYNC_RESET, //0 = registers consume reset synchronously, 1 = registers consume reset asynchronously + parameter int ADDR_WIDTH, //width of address bus, for addresses that are byte addresses + parameter int ADDR_ALIGNMENT_BITS, //indicates how many least significant bits of i_address are known to be 0, e.g. set this parameter to 3 if kernel accesses are 8-byte aligned + parameter int INTRA_ADDR_WIDTH, //how many least significant bits of the byte address represent the location inside a memory word + parameter int KER_DATA_BYTES, //width of kernel data path in bytes, does not need to be a power of 2 + parameter int KER_DATA_BYTES_LAST, //in case width adaption is used in dla_hld_global_load_store, the last slice of the kernel data path may be smaller + parameter bit ENABLE_WORD_COALESCE, //whether to coalesce kernel words together within the same memory word + parameter bit HIGH_THROUGHPUT_MODE, //0 = use N clock cycles to process a kernel word that spans N memory words, 1 = use minimum amount of time to process kernel words, only matters if N >= 2 + parameter int MAX_MEM_WORDS_PER_KER_WORD, //trim some logic if it is guaranteed that each kernel word can only span 1 or 2 memory words + parameter int MLAB_FIFO_DEPTH, //use a shallow fifo if handshaking is expected to take a few clocks (or if capacity can be borrowed from a nearby deep fifo), if we need an MLAB may as well use all of it + parameter int WRITEACK_WIDTH, //writeack fifo indicate how many valids to release upon writeack, it uses narrow m20k, word coalescer stops to ensure value doesn't overflow narrow m20k width + parameter int WORD_COAL_MAX_TIMEOUT_BIT //limit how large the dynamic timeout threshold can get inside word coalescer +) ( + input wire clock, + input wire resetn, + + //kernel upstream + input wire i_valid, //this is stall latency valid, transaction must be accepted, also only non-predicated transactions arrive here + input wire i_more_wide_sections, //if using kernel width adaptation, this indicates there are more sections of the same kernel word still to come + input wire [ADDR_WIDTH-1:0] i_addr, //byte address of incoming transaction + + //ignore coalescer timeout if downstream is sufficiently far away from being empty + input wire i_disable_coalescer_timeout, + + //read side of cmd fifo + input wire i_cmd_fifo_rd_ack, //read from the cmd fifo + output logic o_cmd_fifo_empty, //cmd fifo is empty + output logic o_cmd_can_coalesce, //indicates the last memory word that kernel word N touches is the same as the first memory word that kernel N+1 touches + output logic o_cmd_spans_two, //kernel word N spans at least 2 memory words + output logic o_cmd_spans_three, //kernel word N spans 3 memory words + output logic o_cmd_needs_second_cycle, //kernel word N needs at least 2 clock cycles to process + output logic o_cmd_needs_third_cycle, //kernel word N needs 3 clock cycles to process + output logic o_cmd_more_wide_sections, //this is just i_more_wide_sections kept live + output logic [INTRA_ADDR_WIDTH-1:0] o_cmd_addr, //within a memory word, what is the address of the first byte that kernel word N touches + output logic [INTRA_ADDR_WIDTH-1:0] o_cmd_addr_modulo //the above modulo KER_DATA_BYTES, this is used by the write data aligner when the kernel width is much narrower than the memory width +); + + //total width of the cmd fifo, but some output bits are masked or ignored so quartus may trim things + localparam int CMD_FIFO_WIDTH = 2*INTRA_ADDR_WIDTH + 6; + + //a tessellated adder is used to calculate the last byte address, this specifies the index where the adder carry-chain is cut for a pipeline stage + //ideally this is done in the middle of the adder, but in order to guarantee a single carry-out from the lower bits, tessellation index must be above the max range of the adder on the lower bits + localparam int TESS_INDEX = ((ADDR_WIDTH/2) < (INTRA_ADDR_WIDTH+2)) ? (INTRA_ADDR_WIDTH+2) : (ADDR_WIDTH/2); + + + + /////////////// + // Signals // + /////////////// + + //reset + logic aclrn, sclrn, resetn_synchronized; + + //word coalescer and address range analysis + logic coal_done_with_word; //done with word N if it timed out or word N+1 shows up + logic coal_can_coalesce; //word N can coalesce with word N+1 if the last byte address of word N is in the same memory word as the first byte address of word N+1 + logic coal_more_wide_sections; //i_more_wide_sections kept live + logic [INTRA_ADDR_WIDTH-1:0] coal_addr; //i_addr kept live + logic [1:0] coal_last_addr_hi, coal_last_addr_hi_masked; //0 means kernel word spans 1 memory word, 1 means it spans 2 memory words, 2 means it spans 3 memory words + + //cmd fifo write side + logic [CMD_FIFO_WIDTH-1:0] cmd_fifo_wr_all_data; //package up all the data before writing to the fifo, the individual signals below have the same meaning as the corresponding output signals + logic cmd_fifo_wr_req; + logic cmd_fifo_wr_needs_second_cycle, cmd_fifo_wr_needs_third_cycle, cmd_fifo_wr_spans_two, cmd_fifo_wr_spans_three, cmd_fifo_wr_can_coalesce, cmd_fifo_wr_more_wide_sections; + logic [INTRA_ADDR_WIDTH-1:0] cmd_fifo_wr_addr, cmd_fifo_wr_addr_modulo; + + //cmd fifo read side + logic [CMD_FIFO_WIDTH-1:0] cmd_fifo_rd_all_data; + logic cmd_spans_two_raw, cmd_spans_three_raw; + + + + ///////////// + // Reset // + ///////////// + + dla_acl_reset_handler + #( + .ASYNC_RESET (ASYNC_RESET), + .USE_SYNCHRONIZER (0), + .SYNCHRONIZE_ACLRN (0), + .PIPE_DEPTH (0), + .NUM_COPIES (1) + ) + dla_acl_reset_handler_inst + ( + .clk (clock), + .i_resetn (resetn), + .o_aclrn (aclrn), + .o_resetn_synchronized (resetn_synchronized), + .o_sclrn (sclrn) + ); + + + + ///////////////////////////////////////////////// + // Word Coalescer and Address Range Analysis // + ///////////////////////////////////////////////// + + //calculate whether each kernel word will span 1, 2, or 3 memory words + //if word coalescing is enabled, then for kernel word N determine whether kernel word N+1 shares the same memory word + //the output if the generate block below is the coal_*** signals + + generate + if (!ENABLE_WORD_COALESCE) begin : NO_WORD_COAL + logic [INTRA_ADDR_WIDTH+1:0] input_last_addr; + assign input_last_addr = i_addr[INTRA_ADDR_WIDTH-1:0] + ((i_more_wide_sections) ? (KER_DATA_BYTES-1) : (KER_DATA_BYTES_LAST-1)); + + assign coal_done_with_word = i_valid; + assign coal_can_coalesce = 1'b0; //no coalescing + assign coal_more_wide_sections = i_more_wide_sections; + assign coal_addr = i_addr[INTRA_ADDR_WIDTH-1:0]; + assign coal_last_addr_hi = input_last_addr[INTRA_ADDR_WIDTH+1:INTRA_ADDR_WIDTH]; + end + else begin : GEN_WORD_COAL + //word coalescing: for kernel word N determine whether kernel word N+1 shares the same memory word + //this means we must capture kernel word N in registers, we can release it to downstream only once kernel word N+1 arrives or we time out + //assuming kernel word N+1 arrives before the timeout, we coalesce if the last byte address of kernel word N is in the same memory word as the first byte address of kernel word N+1 + //kernel upstream provides the first byte address that each kernel word touches, the last address is simply first address + kernel word size - 1 + //there is lots of pipelining, the adder to compute the last address is tessellated, and we will know the result of the above address check two clocks after kernel word N+1 arrives + + // The following naming convention is used: + // - lo means this the bottom half of the tessellated add, hi means this is the top half of the tessellated add + // - first_addr is the first byte address that the kernel word touches, last_addr is the last (inclusive) byte address that the kernel word touches + // - late means it is one clock cycle after the corresponding non-late version + + // Beware there are two variants of last_addr: + // - i_addr + KERNEL_WORD_SIZE is stored in captured_last_addr_lo (the lower bits) and late_captured_last_addr_hi (the upper bits), this used the entire i_addr + // - i_addr[INTRA_ADDR_WIDTH-1:0] + KERNEL_WORD_SIZE is stored in late_captured_last_addr, this only uses the bottom bits of i_addr, if it goes past 2**INTRA_ADDR_WIDTH then this kernel word spans multiple memory word + + //capture the current word + logic captured_valid; //is what we captured valid, turns on when an incoming transaction arrives, turns off if we time out + logic [TESS_INDEX:0] captured_last_addr_lo; //bottom half of the captured address + logic [ADDR_WIDTH-1:TESS_INDEX] captured_first_addr_hi, late_captured_last_addr_hi; //top half of the captured address + + //coalescer + logic continue_in_same_word_valid, late_continue_in_same_word_valid; //word N+1 has arrived, can coalesce if word N did not time out and not too many words have coalesced + logic addr_match_lo, late_addr_match; //captured address matches incoming address, comparison is split over 2 clocks since adder is tessellated + + //timeout + logic timeout; //waited too long for the next word to arrive, going to release the captured address to downstream and report that it cannot coalesce + + //limit how many kernel words can coalesce into one memory word + logic [WRITEACK_WIDTH-1:0] limiter_counter; //count how many kernel words have been coalesced into the current memory word + logic limiter_throttle; //too many kernel words have coalesced, stop coalescing in the current memory word so that writeack fifo value doesn't overflow + + //keep the captured data live + logic captured_more_wide_sections, late_captured_more_wide_sections, late_captured_done_with_word; + logic [INTRA_ADDR_WIDTH-1:0] captured_addr, late_captured_addr; + logic [INTRA_ADDR_WIDTH+1:0] late_captured_last_addr; + + + //capture the current word so that we can check for coalescing when the next word arrives + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) captured_valid <= 1'b0; + else begin + if (i_valid) captured_valid <= 1'b1; + else if (timeout) captured_valid <= 1'b0; + if (~sclrn) captured_valid <= 1'b0; + end + end + always_ff @(posedge clock) begin + //one clock after i_valid + if (i_valid) begin + captured_last_addr_lo <= i_addr[TESS_INDEX-1:0] + ((i_more_wide_sections) ? (KER_DATA_BYTES-1) : (KER_DATA_BYTES_LAST-1)); //bottom half of tessellated adder, msb is the carry-out + captured_first_addr_hi <= i_addr[ADDR_WIDTH-1:TESS_INDEX]; //this has two purposes: 1. keep upper bits live so tessellated adder can finish on next clock cycle, 2. late version of i_addr to check against + end + + //two clocks after i_valid + late_captured_last_addr_hi <= captured_first_addr_hi + captured_last_addr_lo[TESS_INDEX]; //top half of tessellated adder, add the carry-out from the bottom half to delayed version of upper bits of i_addr + end + + + //coalescer -- assuming the previous word has been captured, check if the previous word can coalesce with the incoming word + always_ff @(posedge clock) begin + //one clock after i_valid + continue_in_same_word_valid <= i_valid & captured_valid & ~limiter_throttle; //word N+1 has arrived, can coalesce if word N did not time out and not too many words have coalesced + addr_match_lo <= (i_addr[TESS_INDEX-1:INTRA_ADDR_WIDTH] == captured_last_addr_lo[TESS_INDEX-1:INTRA_ADDR_WIDTH]); //bottom half of the address check + + //two clocks after i_valid + late_continue_in_same_word_valid <= continue_in_same_word_valid; + late_addr_match <= (captured_first_addr_hi[ADDR_WIDTH-1:TESS_INDEX] == late_captured_last_addr_hi[ADDR_WIDTH-1:TESS_INDEX]) & addr_match_lo; //top half of the address check + result from bottom half + end + assign coal_can_coalesce = late_addr_match & late_continue_in_same_word_valid; //word N can coalesce with word N+1 + + + //timeout + dla_hld_lsu_coalescer_dynamic_timeout #( + .ASYNC_RESET (ASYNC_RESET), + .MAX_TIMEOUT_BIT (WORD_COAL_MAX_TIMEOUT_BIT) + ) + dla_hld_lsu_coalescer_dynamic_timeout_inst + ( + .clock (clock), + .resetn (resetn), + .i_valid (i_valid), + .i_disable_timeout (i_disable_coalescer_timeout), + .o_timeout (timeout), + .i_coal_if_addr_match (captured_valid & ~limiter_throttle), + .i_late_addr_match (late_addr_match) + ); + + + //limiter -- ensure we don't have too many kernel words coalescing into the same memory word, this bounds the width of the writeack fifo + //typically WRITEACK_WIDTH is 10, this allows for up to 516 or so threads to get coalesced into the same word (it is larger than 2**9 since there is some delay before it takes effect) + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) limiter_counter <= '0; + else begin + if (cmd_fifo_wr_req) begin + if (cmd_fifo_wr_can_coalesce) limiter_counter <= limiter_counter + 1'b1; + else limiter_counter <= '0; + end + if (~sclrn) limiter_counter <= '0; + end + end + assign limiter_throttle = limiter_counter[WRITEACK_WIDTH-1]; //msb + + + //since there is 2 clock cycles of pipelining to determine whether coalescing can happen, we need the captured data live for another 2 clocks + always_ff @(posedge clock) begin + //same clock cycle as captured_valid + if (i_valid) begin + captured_addr <= i_addr[INTRA_ADDR_WIDTH-1:0]; + captured_more_wide_sections <= i_more_wide_sections; + end + + //one clock after captured_valid + late_captured_done_with_word <= timeout | (i_valid & captured_valid); //done with word N if it timed-out or word N+1 shows up + late_captured_addr <= captured_addr; + late_captured_more_wide_sections <= captured_more_wide_sections; + + //two clocks after captured_valid + coal_done_with_word <= late_captured_done_with_word; + coal_addr <= late_captured_addr; + coal_last_addr_hi <= late_captured_last_addr[INTRA_ADDR_WIDTH+1:INTRA_ADDR_WIDTH]; + coal_more_wide_sections <= late_captured_more_wide_sections; + end + + //one clock after captured_valid + assign late_captured_last_addr = late_captured_addr + ((late_captured_more_wide_sections) ? (KER_DATA_BYTES-1) : (KER_DATA_BYTES_LAST-1)); + end + endgenerate + + + + /////////////////////////// + // Cmd FIFO Write Data // + /////////////////////////// + + //coalescing information is stored in the coal_*** signals, now convert this into the write data for the cmd fifo + //the interpretation of each signal is exactly the same as the corresponding output signal + + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) cmd_fifo_wr_req <= 1'b0; + else begin + cmd_fifo_wr_req <= coal_done_with_word; + if (~sclrn) cmd_fifo_wr_req <= 1'b0; + end + end + + always_ff @(posedge clock) begin + cmd_fifo_wr_can_coalesce <= coal_can_coalesce; + cmd_fifo_wr_addr <= coal_addr; + cmd_fifo_wr_more_wide_sections <= coal_more_wide_sections; + cmd_fifo_wr_addr_modulo <= coal_addr % KER_DATA_BYTES; //INTRA_ADDR_WIDTH should be small enough that this is just a single level of logic lookup table + end + + assign coal_last_addr_hi_masked = (MAX_MEM_WORDS_PER_KER_WORD == 1) ? 2'h0 : (MAX_MEM_WORDS_PER_KER_WORD == 2) ? {1'h0, coal_last_addr_hi[0]} : coal_last_addr_hi; + always_ff @(posedge clock) begin + cmd_fifo_wr_spans_two <= |coal_last_addr_hi_masked; + cmd_fifo_wr_spans_three <= coal_last_addr_hi_masked[1]; + cmd_fifo_wr_needs_second_cycle <= (HIGH_THROUGHPUT_MODE) ? coal_last_addr_hi_masked[1] | (coal_last_addr_hi_masked[0] & ~coal_can_coalesce) : |coal_last_addr_hi_masked; + cmd_fifo_wr_needs_third_cycle <= (HIGH_THROUGHPUT_MODE) ? coal_last_addr_hi_masked[1] & ~coal_can_coalesce : coal_last_addr_hi_masked[1]; + end + + assign cmd_fifo_wr_all_data[0] = (MAX_MEM_WORDS_PER_KER_WORD >= 2) ? cmd_fifo_wr_spans_two : 1'b0; + assign cmd_fifo_wr_all_data[1] = (MAX_MEM_WORDS_PER_KER_WORD == 3) ? cmd_fifo_wr_spans_three : 1'b0; + assign cmd_fifo_wr_all_data[2] = (MAX_MEM_WORDS_PER_KER_WORD >= 2) ? cmd_fifo_wr_needs_second_cycle : 1'b0; + assign cmd_fifo_wr_all_data[3] = (MAX_MEM_WORDS_PER_KER_WORD == 3) ? cmd_fifo_wr_needs_third_cycle : 1'b0; + assign cmd_fifo_wr_all_data[4] = (ENABLE_WORD_COALESCE) ? cmd_fifo_wr_can_coalesce : 1'b0; + assign cmd_fifo_wr_all_data[5] = (KER_DATA_BYTES!=KER_DATA_BYTES_LAST) ? cmd_fifo_wr_more_wide_sections : 1'b0; + assign cmd_fifo_wr_all_data[6 +: INTRA_ADDR_WIDTH] = ~((1<<ADDR_ALIGNMENT_BITS)-1) & cmd_fifo_wr_addr; + assign cmd_fifo_wr_all_data[6+INTRA_ADDR_WIDTH +: INTRA_ADDR_WIDTH] = ~((1<<ADDR_ALIGNMENT_BITS)-1) & cmd_fifo_wr_addr_modulo; + + + + //////////////// + // Cmd FIFO // + //////////////// + + //every write into the input fifos and will eventually result in one write into the cmd fifo at some later time + //every read from the cmd fifo will eventually result in one read from the input fifos at some later time + //therefore the occupancy in some input fifo is always larger than the cmd fifo, and that is used to backpressure kernel upstream + + dla_hld_fifo #( + .WIDTH (CMD_FIFO_WIDTH), + .DEPTH (MLAB_FIFO_DEPTH), + .NEVER_OVERFLOWS (1), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0), + .STYLE ("ms") + ) + cmd_fifo_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + .i_valid (cmd_fifo_wr_req), + .i_data (cmd_fifo_wr_all_data), + .o_stall (), + .o_almost_full (), + .o_valid (), + .o_data (cmd_fifo_rd_all_data), + .i_stall (~i_cmd_fifo_rd_ack), + .o_almost_empty (), + .o_empty (o_cmd_fifo_empty), + .ecc_err_status () + ); + + //quartus does not propagate constants across the ram inside the fifo, so do it again here + assign cmd_spans_two_raw = (MAX_MEM_WORDS_PER_KER_WORD >= 2) ? cmd_fifo_rd_all_data[0] : 1'b0; + assign cmd_spans_three_raw = (MAX_MEM_WORDS_PER_KER_WORD == 3) ? cmd_fifo_rd_all_data[1] : 1'b0; + assign o_cmd_needs_second_cycle = (MAX_MEM_WORDS_PER_KER_WORD >= 2) ? cmd_fifo_rd_all_data[2] : 1'b0; + assign o_cmd_needs_third_cycle = (MAX_MEM_WORDS_PER_KER_WORD == 3) ? cmd_fifo_rd_all_data[3] : 1'b0; + assign o_cmd_can_coalesce = (ENABLE_WORD_COALESCE) ? cmd_fifo_rd_all_data[4] : 1'b0; + assign o_cmd_more_wide_sections = (KER_DATA_BYTES!=KER_DATA_BYTES_LAST) ? cmd_fifo_rd_all_data[5] : 1'b0; + assign o_cmd_addr = ~((1<<ADDR_ALIGNMENT_BITS)-1) & cmd_fifo_rd_all_data[6 +: INTRA_ADDR_WIDTH]; + assign o_cmd_addr_modulo = ~((1<<ADDR_ALIGNMENT_BITS)-1) & cmd_fifo_rd_all_data[6+INTRA_ADDR_WIDTH +: INTRA_ADDR_WIDTH]; + + //in low throughput mode, if a kernel word spans N memory words it will take N clock cycles to process it regardless of coalescing + assign o_cmd_spans_two = (HIGH_THROUGHPUT_MODE) ? cmd_spans_two_raw : o_cmd_needs_second_cycle; + assign o_cmd_spans_three = (HIGH_THROUGHPUT_MODE) ? cmd_spans_three_raw : o_cmd_needs_third_cycle; + +endmodule + +`default_nettype wire diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_lsu_write_data_alignment.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_lsu_write_data_alignment.sv new file mode 100644 index 0000000..a5472a3 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_lsu_write_data_alignment.sv @@ -0,0 +1,580 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +// This module accepts kernel words and produces memory words, specifically the avalon writedata and byteenable. An avalon write can only be released to memory once +// the address and burstcount are also available (this comes from the burst coalescer). Both this module and the burst coalescer output a fifo read interface for avalon, +// when both fifos are not empty then an avalon write is released. +// +// The writedata and byteenable inputs to the this module is the read side of the input fifos within dla_hld_lsu. Data is temporarily stored there to give time for the +// word coalescer to do its thing. The unaligned controller tracks the progress of processing each kernel word, this is used to steer the pipelined data alignment logic +// inside this module. Arbitrary address alignment is supported, and the data aligner barrel shifter can have an arbitrary amount of latency for pipelining. +// +// For additional info, refer to dla_hld_global_load_store.sv (top module of entire LSU) and dla_hld_lsu.sv (top module of the core LSU). + +`default_nettype none + +module dla_hld_lsu_write_data_alignment #( + parameter bit ASYNC_RESET, //0 = registers consume reset synchronously, 1 = registers consume reset asynchronously + parameter int ADDR_ALIGNMENT_BITS, //indicates how many least significant bits of i_address are known to be 0, e.g. set this parameter to 3 if kernel accesses are 8-byte aligned + parameter int INTRA_ADDR_WIDTH, //how many least significant bits of the byte address represent the location inside a memory word + parameter int KER_DATA_BYTES, //width of kernel data path in bytes, does not need to be a power of 2 + parameter int KER_DATA_BYTES_LAST, //in case width adaption is used in dla_hld_global_load_store, the last slice of the kernel data path may be smaller + parameter int MEM_DATA_BYTES, //width of memory data path in bytes, must be a power of 2 + parameter int DATA_ALIGNER_MUX_PER_PIPE, //0 = use comb logic for data alignment mux, 1 or more = max number of 2:1 muxes before a pipeline stage is added, e.g. 2 means up to 4:1 mux between reg + parameter bit USE_BYTE_ENABLE, //set to 0 if i_byteenable is always all ones, this will save some area, only write LSU consumes this parameter + parameter bit HIGH_THROUGHPUT_MODE, //0 = use N clock cycles to process a kernel word that spans N memory words, 1 = use minimum amount of time to process kernel words, only matters if N >= 2 + parameter int MAX_MEM_WORDS_PER_KER_WORD, //trim some logic if it is guaranteed that each kernel word can only span 1 or 2 memory words + parameter int M20K_WIDE_FIFO_DEPTH //use a deep fifo if handshaking is expected to take hundreds of clocks e.g. going off chip, for wide data path use M20K in shallowest mode, but may as well use all depth available +) ( + input wire clock, + input wire resetn, + + //from word coalescer + input wire i_cmd_more_wide_sections, + input wire i_cmd_spans_two, + input wire i_cmd_spans_three, + input wire [INTRA_ADDR_WIDTH-1:0] i_cmd_addr_modulo, + input wire [INTRA_ADDR_WIDTH-1:0] i_cmd_addr, + + //from unaligned controller + input wire i_can_read_cmd_fifo, + input wire i_cmd_fifo_rd_ack, + input wire i_cmd_at_second_cycle, + input wire i_cmd_at_third_cycle, + input wire i_cmd_is_coalescing, + input wire i_cmd_first_access_in_word, + + //read side of input fifos -- guaranteed to not underflow + input wire [KER_DATA_BYTES-1:0] i_input_byteenable_fifo_rd_data, + output logic o_input_byteenable_fifo_rd_ack, + input wire [8*KER_DATA_BYTES-1:0] i_input_writedata_fifo_rd_data, + output logic o_input_writedata_fifo_rd_ack, + + //avm wr data fifo -- this will combine with addr and burst count from burst coalescer to make the full avalon transaction + output logic o_avm_wr_data_fifo_almost_full, + output logic o_avm_wr_data_fifo_empty, + input wire i_avm_wr_data_fifo_rd_ack, + output logic [8*MEM_DATA_BYTES-1:0] o_avm_writedata, + output logic [MEM_DATA_BYTES-1:0] o_avm_byteenable +); + + + //disregarding address alignment, this is how many 2:1 mux stages the data aligner would have needed + localparam int RAW_SHIFT_TO_ALIGN_WIDTH = (HIGH_THROUGHPUT_MODE) ? (($clog2(KER_DATA_BYTES) > INTRA_ADDR_WIDTH) ? INTRA_ADDR_WIDTH : $clog2(KER_DATA_BYTES)) : $clog2(KER_DATA_BYTES); + + //this is how many 2:1 mux stages the data aligner will need + localparam int SHIFT_TO_ALIGN_WIDTH = RAW_SHIFT_TO_ALIGN_WIDTH - ADDR_ALIGNMENT_BITS; + + //latency = ceiling(mux stages needed / max mux stages per pipe), but 0 means use combinational logic + localparam int DATA_ALIGNER_LATENCY = (DATA_ALIGNER_MUX_PER_PIPE == 0) ? 0 : ((SHIFT_TO_ALIGN_WIDTH + DATA_ALIGNER_MUX_PER_PIPE - 1) / DATA_ALIGNER_MUX_PER_PIPE); + + //1 clock from almost full to unaligned controller, 2 clock cycles until start of data alignment, DATA_ALIGNER_LATENCY to do alignment, 1 clock for the register stage that accumulates the write data for avm data fifo + localparam int AVM_WR_DATA_FIFO_ALMOST_FULL_CUTOFF = DATA_ALIGNER_LATENCY + 4; + + //based on the kernel width, memory width, and address alignment, determine how far the kernel word can go into the second or third memory word + //anything past this does not need a buffer, those bits can be assigned x so that quartus can trim it away + //it is highly unlikely that quartus can figure out the range analysis to trim away the upper bits of the buffer which are unreachable + localparam int WIDE_LIMIT = (HIGH_THROUGHPUT_MODE) ? (MEM_DATA_BYTES + KER_DATA_BYTES - (2**ADDR_ALIGNMENT_BITS)) : MEM_DATA_BYTES; + + + + /////////////// + // Signals // + /////////////// + + genvar g; + + //reset + logic aclrn, sclrn, resetn_synchronized; + + //address range analysis + logic [INTRA_ADDR_WIDTH-1:0] prep_master_lo_limit, prep_master_hi_limit; + logic [INTRA_ADDR_WIDTH-1:0] addr_master_lo_limit, addr_master_hi_limit; + logic [MEM_DATA_BYTES-1:0] late_addr_master_mask_lo, late_addr_master_mask_hi; + logic late_prep_not_in_first, late_prep_not_in_last, late_prep_spans_two, late_prep_spans_three; + logic late_addr_not_in_first, late_addr_not_in_last, late_addr_spans_two, late_addr_spans_three; + logic [3*MEM_DATA_BYTES-1:0] late_addr_decode_lo, late_addr_decode_hi, late_addr_decode; + + //byteenable alignment + logic [SHIFT_TO_ALIGN_WIDTH-1:0] shift_to_align_byteenable; + logic [3*MEM_DATA_BYTES-1:0] aligned_byteenable; + + //data alignment + logic [SHIFT_TO_ALIGN_WIDTH-1:0] shift_to_align_writedata; + logic [3*8*MEM_DATA_BYTES-1:0] aligned_writedata; + + //which bytes of kernel word to accumulate into memory word + logic aligned_byteenable_valid, aligned_writedata_valid; + logic [3*MEM_DATA_BYTES-1:0] load_enable; + + //aligned byteenable and writedata capture + logic [MEM_DATA_BYTES-1:0] captured_load_enable; //only used by high throughput mode + logic [8*MEM_DATA_BYTES-1:0] captured_aligned_writedata; //only used by high throughput mode + logic captured_kernel_word_valid, current_kernel_word_valid; + + //avm wr data fifo + logic prep_clear_byteenables, clear_byteenables; + logic prep_write_to_fifo, write_to_fifo; + logic avm_wr_data_fifo_wr_req; + logic [8*MEM_DATA_BYTES-1:0] avm_wr_data_fifo_wr_writedata; + logic [MEM_DATA_BYTES-1:0] avm_wr_data_fifo_wr_byteenable; + + + + ///////////// + // Reset // + ///////////// + + dla_acl_reset_handler + #( + .ASYNC_RESET (ASYNC_RESET), + .USE_SYNCHRONIZER (0), + .SYNCHRONIZE_ACLRN (0), + .PIPE_DEPTH (0), + .NUM_COPIES (1) + ) + dla_acl_reset_handler_inst + ( + .clk (clock), + .i_resetn (resetn), + .o_aclrn (aclrn), + .o_resetn_synchronized (resetn_synchronized), + .o_sclrn (sclrn) + ); + + + + ////////////////////////////// + // Address Range Analysis // + ////////////////////////////// + + //based on the address and size of the kernel word, determine which bytes of memory will be affected + //we have DATA_ALIGNER_LATENCY+1 clock cycles to produce a mask that will integrate with the aligned byteenables, and that becomes the load enable for assembling the write data for the avm_wr_data_fifo + //one kernel word can span up to 3 memory words, for example suppose the memory width is 4, kernel width is 8, and address is 3 + //in this example, the first byte of memory affected is address 3, and the last byte (inclusive) is address 10 + //it touches address 3 in the first memory word, addresses 4 through 7 in the second, and addresses 8 through 10 in the third + //the way address decoding is implemented, we will produce one master mask (which is the width of one memory word), then derive an individual masks for each of the up to 3 memory words + //the master mask is defined by the lowest and highest (inclusive) bytes of memory affected, modulo the memory width, so lo=3 and hi=2 in this example, the mask has ones in the indexes between lo and hi inclusive + //if the kernel word only spans one memory word, then hi>lo and the mask can be used without modification + //if the kernel word spans two memory words, then hi is ignored when constructing the mask for the first memory word, and lo is ignored when constructing the mask for the second memory word + //if the kernel word spans three memory words, then hi is ignored in the first memory word, both hi and lo are ignored in the second word, and lo is ignored in the third memory word + //in this example, we would end up with these masks: first = 1000 (lo=3, ignore hi), second = 1111 (ignore lo and hi), third = 0111 (ignored lo, hi=2) + + //determine the high and low limits for the master mask + //same clock cycle as i_can_read_cmd_fifo + assign prep_master_lo_limit = i_cmd_addr; + assign prep_master_hi_limit = (INTRA_ADDR_WIDTH)'(i_cmd_addr + ((i_cmd_more_wide_sections) ? (KER_DATA_BYTES-1) : (KER_DATA_BYTES_LAST-1))); + + dla_acl_shift_register_no_reset #( + .WIDTH (2*INTRA_ADDR_WIDTH), + .STAGES (DATA_ALIGNER_LATENCY) + ) + addr_master_limits_inst + ( + .clock (clock), + .D ({prep_master_hi_limit, prep_master_lo_limit}), + .Q ({addr_master_hi_limit, addr_master_lo_limit}) //DATA_ALIGNER_LATENCY clocks after i_can_read_cmd_fifo + ); + + //convert the high and low limits into a mask + //DATA_ALIGNER_LATENCY+1 clocks after i_can_read_cmd_fifo + generate + if (MAX_MEM_WORDS_PER_KER_WORD == 1) begin : NO_MASTER_MASK_HI //LSU is aligned, use equality to do the decode, need to figure out which half, quarter, eighth, etc. of the memory word to update + always_ff @(posedge clock) begin + for (int i=0; i<MEM_DATA_BYTES; i++) begin + late_addr_master_mask_lo[i] <= ((i & ~((1<<ADDR_ALIGNMENT_BITS)-1)) == addr_master_lo_limit); + end + end + //late_addr_master_mask_hi not needed + end + else begin : GEN_MASTER_MASK_HI //LSU is unaligned, no special tricks to decode the high and low limits into a mask + always_ff @(posedge clock) begin + for (int i=0; i<MEM_DATA_BYTES; i++) begin + late_addr_master_mask_lo[i] <= ((i & ~((1<<ADDR_ALIGNMENT_BITS)-1)) >= addr_master_lo_limit); //if ADDR_ALIGNMENT_BITS=2, then indexes 0, 1, 2, and 3 produce the same result, quartus should remove duplicates + late_addr_master_mask_hi[i] <= ((i & ~((1<<ADDR_ALIGNMENT_BITS)-1)) <= addr_master_hi_limit); //the idea is that if we are 4 byte aligned, only every 4th index of the master mask actually needs to be computed + end + end + end + endgenerate + + //determine the filters to convert the master mask into the masks for each of the three memory words + //one clock cycle after i_can_read_cmd_fifo + always_ff @(posedge clock) begin + late_prep_not_in_first <= i_cmd_at_second_cycle | i_cmd_at_third_cycle; //ignore master mask lo when not in the first memory word + late_prep_not_in_last <= ~i_cmd_at_third_cycle & ((i_cmd_at_second_cycle) ? i_cmd_spans_three : i_cmd_spans_two); //ignore master mask hi when not in the last memory word + late_prep_spans_two <= i_cmd_spans_two; //in high throughput mode, ignore master mask hi when in the first memory word if kernel word spans at least 2 memory words + late_prep_spans_three <= i_cmd_spans_three; //in high throughput mode, ignreo master mask hi when in the second memory word if kernel word spans 3 memory words + end + + dla_acl_shift_register_no_reset #( + .WIDTH (4), + .STAGES (DATA_ALIGNER_LATENCY) + ) + late_addr_filters_inst + ( + .clock (clock), + .D ({late_prep_spans_three, late_prep_spans_two, late_prep_not_in_last, late_prep_not_in_first}), + .Q ({late_addr_spans_three, late_addr_spans_two, late_addr_not_in_last, late_addr_not_in_first}) //DATA_ALIGNER_LATENCY+1 clocks after i_can_read_cmd_fifo + ); + + //apply the filters, DATA_ALIGNER_LATENCY+1 clocks after i_can_read_cmd_fifo + + //in high throughput mode this is for the first memory word, in low throughput mode all memory words time-share this + assign late_addr_decode_lo[MEM_DATA_BYTES-1:0] = (late_addr_not_in_first) ? '1 : late_addr_master_mask_lo; + assign late_addr_decode_hi[MEM_DATA_BYTES-1:0] = ((HIGH_THROUGHPUT_MODE) ? late_addr_spans_two : late_addr_not_in_last) ? '1 : late_addr_master_mask_hi; + + //second memory word for high throughput mode only (low throughput mode doesn't use this) + assign late_addr_decode_lo[2*MEM_DATA_BYTES-1:MEM_DATA_BYTES] = '1; + assign late_addr_decode_hi[2*MEM_DATA_BYTES-1:MEM_DATA_BYTES] = (late_addr_spans_three) ? '1 : late_addr_master_mask_hi; + + //third memory word for high throughput mode only (low throughput mode doesn't use this) + assign late_addr_decode_lo[3*MEM_DATA_BYTES-1:2*MEM_DATA_BYTES] = '1; + assign late_addr_decode_hi[3*MEM_DATA_BYTES-1:2*MEM_DATA_BYTES] = late_addr_master_mask_hi; + + //combine low and high masks + generate + if (ADDR_ALIGNMENT_BITS == INTRA_ADDR_WIDTH) begin : TRIVIAL_ADDR_DECODE //kernel word is same size as memory word and exactly aligns, trivial address decode + assign late_addr_decode = '1; + end + else if (MAX_MEM_WORDS_PER_KER_WORD == 1) begin : ALIGNED_ADDR_DECODE //LSU is aligned, ignore late_addr_decode_hi since late_addr_master_mask_lo was decoded using equality and therefore contains high and low limits + assign late_addr_decode = late_addr_decode_lo; + end + else begin : UNALIGNED_ADDR_DECODE //LSU is unaligned + assign late_addr_decode = late_addr_decode_lo & late_addr_decode_hi; + end + endgenerate + + + + //////////////////////////// + // Byteenable Alignment // + //////////////////////////// + + //the state of the unaligned controller indicates how far along we currently are in processing a kernel word + //there is one clock cycle of pipelining from this state to the steering logic for the byteenables + //for example, if the unaligned controller is in the second memory word of kernel word N at time T, then how much to shift the byteenables for the second memory word of kernel word N must be known at time T+1 + //if the unaligned controller is completely done with kernel word N at time X, send a read ack to input byteenable fifo at time X+1 + + always_ff @(posedge clock) begin + o_input_byteenable_fifo_rd_ack <= i_cmd_fifo_rd_ack; + end + + generate + if (SHIFT_TO_ALIGN_WIDTH > 0) begin : GEN_SHIFT_TO_ALIGN + logic [SHIFT_TO_ALIGN_WIDTH+ADDR_ALIGNMENT_BITS-1:0] shift_to_align_raw; //this is how much to shift if we disregard address alignment info + + if ($clog2(KER_DATA_BYTES) < INTRA_ADDR_WIDTH) begin : NARROW //kernel width is no more than half the memory width (impossible to get into third memory word), use modulo which has a narrower bit width + if (HIGH_THROUGHPUT_MODE) begin : HI + always_ff @(posedge clock) begin + shift_to_align_raw <= i_cmd_addr_modulo; + end + end + else begin : LO + always_ff @(posedge clock) begin + if (i_cmd_at_second_cycle) shift_to_align_raw <= i_cmd_addr + (KER_DATA_BYTES - MEM_DATA_BYTES); + else shift_to_align_raw <= i_cmd_addr_modulo; + end + end + end + else begin : WIDE //kernel width is more than half the memory width, shift width is at least as wide as the intra addr so no advantage to using modulo + if (HIGH_THROUGHPUT_MODE) begin : HI + always_ff @(posedge clock) begin + shift_to_align_raw <= i_cmd_addr; + end + end + else begin : LO + always_ff @(posedge clock) begin + if (i_cmd_at_third_cycle) shift_to_align_raw <= i_cmd_addr + (KER_DATA_BYTES - 2*MEM_DATA_BYTES); + else if (i_cmd_at_second_cycle) shift_to_align_raw <= i_cmd_addr + (KER_DATA_BYTES - MEM_DATA_BYTES); + else shift_to_align_raw <= i_cmd_addr; + end + end + end + + //if ADDR_ALIGNMENT_BITS=1 then shift_to_align_raw is even, instead of shifting each 8 bit section of data by using shift_to_align_raw, we should shift each 16 bit section of data by shift_to_align_raw/2 + assign shift_to_align_byteenable = shift_to_align_raw[SHIFT_TO_ALIGN_WIDTH+ADDR_ALIGNMENT_BITS-1:ADDR_ALIGNMENT_BITS]; + end + else begin : NO_SHIFT_TO_ALIGN //trivial alignment + assign shift_to_align_byteenable = 'x; + end + endgenerate + + //now that we know how much to shift the byteenables, actually do it + generate + if (!USE_BYTE_ENABLE) begin : NO_ALIGN_BYTEENABLE + assign aligned_byteenable = '1; + end + else begin : GEN_ALIGN_BYTEENABLE + dla_hld_lsu_data_aligner #( + .LATENCY (DATA_ALIGNER_LATENCY), + .DIRECTION (0), //shift right + .SECTION_WIDTH (1 * (2**ADDR_ALIGNMENT_BITS)), + .WRAP_AROUND (1), + .I_DATA_WIDTH (KER_DATA_BYTES), + .I_SHIFT_WIDTH (SHIFT_TO_ALIGN_WIDTH), + .O_DATA_WIDTH (3*MEM_DATA_BYTES) + ) + aligned_byteenable_inst + ( + .clock (clock), + .i_data (i_input_byteenable_fifo_rd_data), + .i_shift (shift_to_align_byteenable), + .o_data (aligned_byteenable) + ); + end + endgenerate + + + + ////////////////////// + // Data Alignment // + ////////////////////// + + //byteenable is one clock later than unaligned controller, writedata is two clocks later than unaligned controller + + //input byteenable fifo has no stall in earliness, but input writedata fifo has stall in earliness of 1, so writedata will arrive one clock later than byteenable + assign o_input_writedata_fifo_rd_ack = o_input_byteenable_fifo_rd_ack; + + always_ff @(posedge clock) begin + shift_to_align_writedata <= shift_to_align_byteenable; + end + + dla_hld_lsu_data_aligner #( + .LATENCY (DATA_ALIGNER_LATENCY), + .DIRECTION (0), //shift right + .SECTION_WIDTH (8 * (2**ADDR_ALIGNMENT_BITS)), + .WRAP_AROUND (1), + .I_DATA_WIDTH (8*KER_DATA_BYTES), + .I_SHIFT_WIDTH (SHIFT_TO_ALIGN_WIDTH), + .O_DATA_WIDTH (3*8*MEM_DATA_BYTES) + ) + aligned_writedata_inst + ( + .clock (clock), + .i_data (i_input_writedata_fifo_rd_data), + .i_shift (shift_to_align_writedata), + .o_data (aligned_writedata) + ); + + + + ///////////////////////////////////////////////////////////////// + // Which Bytes of Kernel Word to Accumulate into Memory Word // + ///////////////////////////////////////////////////////////////// + + //byteenable is scheduled one clock earlier than writedata in the pipeline so that we have one clock cycle to combine address range analysis and the aligned byteenables + + dla_acl_shift_register_no_reset #( + .WIDTH (1), + .STAGES (DATA_ALIGNER_LATENCY+1) + ) + aligned_byteenable_valid_inst + ( + .clock (clock), + .D (i_can_read_cmd_fifo), + .Q (aligned_byteenable_valid) + ); + + generate + for (g=0; g<3*MEM_DATA_BYTES; g++) begin : LOAD_ENABLE + if (g < WIDE_LIMIT) begin : GEN_LOAD_ENABLE + always_ff @(posedge clock) begin + load_enable[g] <= late_addr_decode[g] & aligned_byteenable[g] & aligned_byteenable_valid; //DATA_ALIGNER_LATENCY+2 clocks after i_can_read_cmd_fifo + end + end + else begin : NO_LOAD_ENABLE + assign load_enable[g] = 1'b0; + end + end + endgenerate + always_ff @(posedge clock) begin + aligned_writedata_valid <= aligned_byteenable_valid; //output of the writedata aligner is valid one clock after the output of the byteenable aligner + end + + + + //////////////////////////////////////////////// + // Aligned Byteenable and Writedata Capture // + //////////////////////////////////////////////// + + //in high throughput mode, the data aligner is used once per kernel word no matter how many memory words it spans + //can only write one memory word at a time to avm_wr_data_fifo, so need to keep up to 2 other memory words live for writing to the fifo later on + + generate + if (HIGH_THROUGHPUT_MODE && MAX_MEM_WORDS_PER_KER_WORD >= 2) begin : GEN_WRITEDATA_BUFFERS + + //write data for avm_wr_data_fifo can come from both aligned_writedata and captured_aligned_writedata, control when to load from each + logic prep_captured_kernel_word_valid; //in DATA_ALIGNER_LATENCY+2 clocks from now, should the write data for avm_wr_data_fifo accumulate from captured_aligned_writedata + logic prep_current_kernel_word_valid; //in DATA_ALIGNER_LATENCY+2 clocks from now, should the write data for avm_wr_data_fifo accumulate from aligned_writedata + logic prep_capture_to_load_from_hi; //in DATA_ALIGNER_LATENCY+2 clocks from now, should captured_aligned_writedata load from captured_aligned_writedata_hi instead of aligned_writedata + logic capture_to_load_from_hi; + + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) prep_captured_kernel_word_valid <= 1'b0; + else begin + if (i_can_read_cmd_fifo) prep_captured_kernel_word_valid <= (~i_cmd_at_second_cycle & ~i_cmd_at_third_cycle & i_cmd_spans_two) | (i_cmd_at_second_cycle & i_cmd_spans_three); + if (~sclrn) prep_captured_kernel_word_valid <= 1'b0; + end + end + assign prep_current_kernel_word_valid = ~i_cmd_at_second_cycle & ~i_cmd_at_third_cycle; + assign prep_capture_to_load_from_hi = i_cmd_at_second_cycle; + + dla_acl_shift_register_no_reset #( + .WIDTH (3), + .STAGES (DATA_ALIGNER_LATENCY+2) + ) + kernel_word_valids_inst + ( + .clock (clock), + .D ({prep_captured_kernel_word_valid, prep_current_kernel_word_valid, prep_capture_to_load_from_hi}), + .Q ({ captured_kernel_word_valid, current_kernel_word_valid, capture_to_load_from_hi}) + ); + + //capture the second and third memory words of the kernel word so that it can written into avm_wr_data_fifo later on + if (MAX_MEM_WORDS_PER_KER_WORD == 2) begin : TWO_MEM_WORDS + for (g=0; g<MEM_DATA_BYTES; g++) begin : CAPTURE + if (g+MEM_DATA_BYTES < WIDE_LIMIT) begin : GEN_CAPTURE //limit the size of the buffer based on how far into the second memory word the kernel word can go + always_ff @(posedge clock) begin + if (aligned_writedata_valid) begin + captured_load_enable[g] <= load_enable[g+MEM_DATA_BYTES]; + captured_aligned_writedata[8*g+:8] <= aligned_writedata[8*(g+MEM_DATA_BYTES)+:8]; + end + end + end + else begin : NO_CAPTURE //this should get trimmed away by quartus + assign captured_load_enable[g] = 1'h0; + assign captured_aligned_writedata[8*g+:8] = 'x; + end + end + end + else begin : THREE_MEM_WORDS //MAX_MEM_WORDS_PER_KER_WORD == 3 + logic [MEM_DATA_BYTES-1:0] captured_load_enable_hi; + logic [8*MEM_DATA_BYTES-1:0] captured_aligned_writedata_hi; + for (g=0; g<MEM_DATA_BYTES; g++) begin : CAPTURE + if (g+MEM_DATA_BYTES < WIDE_LIMIT) begin : GEN_CAPTURE //limit the size of the buffer based on how far into the third memory word the kernel word can go + always_ff @(posedge clock) begin + if (aligned_writedata_valid) begin + captured_load_enable_hi[g] <= load_enable[g+2*MEM_DATA_BYTES]; + captured_aligned_writedata_hi[8*g+:8] <= aligned_writedata[8*(g+2*MEM_DATA_BYTES)+:8]; + end + end + end + else begin : NO_CAPTURE //this should get trimmed away by quartus + assign captured_load_enable_hi[g] = 1'h0; + assign captured_aligned_writedata_hi[8*g+:8] = 'x; + end + end + always_ff @(posedge clock) begin //if the kernel word can go into the third memory word, there is no size trimming possible for the buffer that stores the second memory word + if (aligned_writedata_valid) begin + if (capture_to_load_from_hi) begin + captured_load_enable <= captured_load_enable_hi; + captured_aligned_writedata <= captured_aligned_writedata_hi; //some bits of captured_aligned_writedata_hi may be x, 2:1 mux for captured_aligned_writedata may not span full memory word width + end + else begin + captured_load_enable <= load_enable[2*MEM_DATA_BYTES-1:MEM_DATA_BYTES]; + captured_aligned_writedata <= aligned_writedata[2*8*MEM_DATA_BYTES-1:8*MEM_DATA_BYTES]; + end + end + end + end + end + else begin : NO_WRITEDATA_BUFFERS + assign captured_kernel_word_valid = 1'b0; //low throughput mode does not have the buffers to keep data live like high throughput mode + assign current_kernel_word_valid = 1'b1; //low throughput mode always sources from aligned_writedata + end + endgenerate + + + + ///////////////////// + // Avm Data FIFO // + ///////////////////// + + always_ff @(posedge clock) begin + //1 clock after i_can_read_cmd_fifo + prep_clear_byteenables <= i_can_read_cmd_fifo & i_cmd_first_access_in_word; //first access in this memory word, clear out whatever the byteenables have accumulated from the previous memory word + prep_write_to_fifo <= i_can_read_cmd_fifo & ~i_cmd_is_coalescing; //done accumulating kernel words into this memory word + end + + dla_acl_shift_register_no_reset #( + .WIDTH (2), + .STAGES (DATA_ALIGNER_LATENCY+1) + ) + avm_wr_data_fifo_write_control_inst + ( + .clock (clock), + .D ({prep_write_to_fifo, prep_clear_byteenables}), + .Q ({ write_to_fifo, clear_byteenables}) + ); + + always_ff @(posedge clock) begin + //write when we have finished consuming kernel words to fully construct this memory word + avm_wr_data_fifo_wr_req <= write_to_fifo; + + //clear byteenables if first write + if (clear_byteenables) avm_wr_data_fifo_wr_byteenable <= '0; + + //only high throughput mode can integrate in previous captured data + if (captured_kernel_word_valid) begin + for (int i=0; i<MEM_DATA_BYTES; i++) begin + if (captured_load_enable[i]) begin + avm_wr_data_fifo_wr_writedata[8*i +: 8] <= captured_aligned_writedata[8*i +: 8]; + avm_wr_data_fifo_wr_byteenable[i] <= 1'b1; + end + end + end + + //integrate in aligned_writedata + //low throughput mode gets all of the data through aligned_writedata by shifting the kernel word by different amounts over different clock cycles + //in high throughput mode, only the first memory word comes in through here, later memory words from the same kernel word are captured for writing later (possibly together with first memory word of next kernel word) + if (current_kernel_word_valid) begin + for (int i=0; i<MEM_DATA_BYTES; i++) begin + if (load_enable[i]) begin + avm_wr_data_fifo_wr_writedata[8*i +: 8] <= aligned_writedata[8*i +: 8]; + avm_wr_data_fifo_wr_byteenable[i] <= 1'b1; + end + end + end + end + + dla_hld_fifo #( + .WIDTH (MEM_DATA_BYTES + 8*MEM_DATA_BYTES), + .DEPTH (M20K_WIDE_FIFO_DEPTH), + .NEVER_OVERFLOWS (1), + .ALMOST_FULL_CUTOFF (AVM_WR_DATA_FIFO_ALMOST_FULL_CUTOFF), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0), + .STYLE ("ms") + ) + avm_wr_data_fifo_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + .i_valid (avm_wr_data_fifo_wr_req), + .i_data ({avm_wr_data_fifo_wr_byteenable, avm_wr_data_fifo_wr_writedata}), + .o_stall (), + .o_almost_full (o_avm_wr_data_fifo_almost_full), + .o_valid (), + .o_data ({o_avm_byteenable, o_avm_writedata}), + .i_stall (~i_avm_wr_data_fifo_rd_ack), + .o_almost_empty (), + .o_empty (o_avm_wr_data_fifo_empty), + .ecc_err_status () + ); + +endmodule + +`default_nettype wire + + +
\ No newline at end of file diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_lsu_write_kernel_downstream.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_lsu_write_kernel_downstream.sv new file mode 100644 index 0000000..7c149e6 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_lsu_write_kernel_downstream.sv @@ -0,0 +1,424 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +// This module is used by the write LSU to release valids to kernel downstream when writeack arrives. It monitors the outputs from the unaligned controller to +// determine how many completed kernel words have been packed into each memory word. Once the memory word is finished, the corresponding number of kernel words +// this memory word contains is written to a fifo. Upon receiving writeack, read from this fifo, the read data indicates how many non-predicated valids are +// allowed to be released to kernel downstream. This module also controls the read side of the predicate fifo, a predicated transaction has no corresponding +// writeack and is allowed to be released to kernel downstream if there are no valids ahead of it. +// +// To add support for AXI, which has one writeack per burst, an additional translation needs to happen: +// 1. (New for AXI support) For each writeack, how many memory words can be released downstream +// 2. (Existing for Avalon) For each memory word, how many kernel words can be released downstream +// +// In theory, it is possible to do both translations for AXI in one step, e.g. for each writeack (one per burst), how many kernel words can be released. However, +// the architecture of the LSU does not allow it easily since that information does not exist anywhere. When the word coalescer is done and releases a memory word +// to the burst coalescer, that is the point in time when the number of kernel words per memory word is written to the writeack fifo. It will be many clock cycles +// later until the burst coalescer finishes, and only at that time point in time would we know the number of memory words in a burst (and therefore could compute +// the number of kernel words in a burst). +// +// For additional info, refer to dla_hld_global_load_store.sv (top module of entire LSU) and dla_hld_lsu.sv (top module of the core LSU). + +`default_nettype none + +module dla_hld_lsu_write_kernel_downstream #( + parameter bit ASYNC_RESET, //0 = registers consume reset synchronously, 1 = registers consume reset asynchronously + parameter int KER_DOWN_STALL_LATENCY, //0 = use stall/valid, 1 or larger = use stall latency and the value indicates the downstream roundtrip latency (from i_stall to o_valid) + parameter bit HIGH_THROUGHPUT_MODE, //0 = use N clock cycles to process a kernel word that spans N memory words, 1 = use minimum amount of time to process kernel words, only matters if N >= 2 + parameter int MAX_MEM_WORDS_PER_KER_WORD, //trim some logic if it is guaranteed that each kernel word can only span 1 or 2 memory words + parameter int MLAB_FIFO_DEPTH, //use a shallow fifo if handshaking is expected to take a few clocks (or if capacity can be borrowed from a nearby deep fifo), if we need an MLAB may as well use all of it + parameter int M20K_NARROW_FIFO_DEPTH, //if we need a deep fifo but the data path is narrow e.g. up to 10 bits which is the narrowest M20K on S10, can get additional depth for without needing more M20K + parameter int TOTAL_OCC_LIMIT, //loose upper bound on the maximum number of threads allowed inside the LSU at any time, this bounds the counter width for o_active + parameter int WRITEACK_WIDTH, //writeack fifo indicate how many valids to release upon writeack, it uses narrow m20k, word coalescer stops to ensure value doesn't overflow narrow m20k width + parameter int BURSTCOUNT_WIDTH, //width of avalon burst count signal, max burst size is 2**(BURSTCOUNT_WIDTH-1) + parameter bit ENABLE_BURST_COALESCE, //whether to coalesce sequential memory words together to make a burst + parameter bit USE_AXI //0 = use AvalonMM, 1 = use AXI +) ( + input wire clock, + input wire resetn, + + //kernel word info from word coalescer + input wire i_cmd_spans_two, //kernel word spans at least two memory words + input wire i_cmd_spans_three, //kernel word spans three memory words + + //unaligned controller + input wire i_can_read_cmd_fifo, //can make forward progress in processing this kernel word + input wire i_cmd_fifo_rd_ack, //done with all sections of kernel word + input wire i_cmd_at_second_cycle, //in the second clock cycle of processing current kernel word + input wire i_cmd_at_third_cycle, //in the third clock cycle of processing current kernel word + input wire i_cmd_is_coalescing, //does the current section of the kernel word coalesce with the next section (next section could be same or next kernel word) + + //burst coalescer + input wire i_burstcoal_snoop_valid, //watch when the output fifo from the burst coalescer is read + input wire [BURSTCOUNT_WIDTH-1:0] i_burstcoal_snoop_burstsize, //if ack is for an entire burst this indicates how many memory words are done, note there is still a conversion to kernel words + + //write ack fifo + input wire i_avm_writeack, //from memory interface, write has committed to memory + output logic o_writeack_fifo_almost_full,//stop sending more writes if no more space to track how many kernel words have finished inside each memory word + + //read side of predicate fifo + input wire i_predicate_fifo_empty, //fifo is empty + input wire i_predicate_fifo_rd_data, //0 = normal transaction, 1 = predicated (still need to release a valid to kernel downstream, but no memory transaction) + output logic o_predicate_fifo_rd_ack, //read from fifo + + //kernel downstream + output logic o_valid, //LSU has a transaction available, kernel downstream can but does not need to accept it if using stall valid, must accept it if using stall latency + output logic o_empty, //LSU does not have a transaction available for kernel downstream, meant to be used with stall latency + output logic o_almost_empty, //LSU downstream interface does not have at least KER_DOWN_STALL_LATENCY transactions ready to be released + input wire i_stall //backpressure from kernel downstream +); + + localparam int TOTAL_OCC_BITS = $clog2(TOTAL_OCC_LIMIT); //how many bits are needed for an occupancy counter in the worst case that all threads inside the LSU are tracked by that counter + + /////////////// + // Signals // + /////////////// + + //reset + logic aclrn, sclrn, resetn_synchronized; + + //track when memory words and kernel words have finished + logic done_with_mem_word; + logic [1:0] done_with_ker_word; //up to 2 kernel words can finish on the same clock cycle, see comments below + + //writeack fifo + logic writeack_fifo_wr_req, writeack_fifo_empty, writeack_fifo_rd_ack; + logic [WRITEACK_WIDTH-1:0] writeack_fifo_wr_data, writeack_fifo_rd_data; //writeack_fifo data tracks how many valids can be released to kernel downstream upon receiving writeack + + //kernel downstream + logic [WRITEACK_WIDTH-1:0] writeack_count_incr; //transfer from writeack_fifo into writeack_count + logic [TOTAL_OCC_BITS-1:0] writeack_count; //in kernel downstream stalls for a long time, nearly all writes could accumulate here, size this counter the same width as o_active + logic writeack_count_was_two_or_more; //lookahead logic for writeack_count_nonzero + logic writeack_count_nonzero; //use the lookahead logic to reduce the combinational logic for detecting when writeack_count != 0 + logic writeack_count_decr; //transfer from writeack_count into mini_writeack_count if writeack_count has stuff and mini_writeack_count has space available + logic [3:0] mini_writeack_count; //narrow bit width offset counter can integrate predicate logic without huge amounts of serial combinational logic + logic mini_writeack_incr; //pipelined version of writeack_count_decr + logic mini_writeack_decr; //transfer from mini_writeack_count into output_count + logic mini_writeack_almost_full; //backpressure to stop transfer from writeack_count + logic output_count_incr; //pipelined version of mini_writeack_decr + logic output_count_decr; //kernel downstream accepted a transaction + logic output_count_almost_full; //backpressure to stop transfer from mini_writeack_count + logic not_empty; //occ tracker produces an inverted o_valid + + + + ///////////// + // Reset // + ///////////// + + dla_acl_reset_handler + #( + .ASYNC_RESET (ASYNC_RESET), + .USE_SYNCHRONIZER (0), + .SYNCHRONIZE_ACLRN (0), + .PIPE_DEPTH (0), + .NUM_COPIES (1) + ) + dla_acl_reset_handler_inst + ( + .clk (clock), + .i_resetn (resetn), + .o_aclrn (aclrn), + .o_resetn_synchronized (resetn_synchronized), + .o_sclrn (sclrn) + ); + + + + ////////////////////////////////////////////////////////////// + // Track when memory words and kernel words have finished // + ////////////////////////////////////////////////////////////// + + always_ff @(posedge clock) begin + done_with_mem_word <= i_can_read_cmd_fifo & ~i_cmd_is_coalescing; + end + + generate + if (HIGH_THROUGHPUT_MODE && MAX_MEM_WORDS_PER_KER_WORD >= 2) begin : TWO_DONE_WITH_KER_WORD + //in high throughput mode, if the last section of kernel word N is in the same memory word as the first section of kernel word N+1, then the unaligned controller + //allocates no time for the last section of kernel word N, this data is kept live in registers and is processed on the same clock cycle as the first section of kernel word N+1 + //until the first section of kernel word N+1 is processed, we cannot claim the write has finished for kernel word N + //it is also possible that kernel word N+1 fits within one memory word, so we need to say two writes have finished on the same clock cycle + + logic has_leftover; //last section of kernel word N is in same memory word as first section of kernel word N+1, there will be some leftover data that kernel word N+1 will deal with at the same time + logic done_with_ker_word_a; //kernel word N+1 has finished using the above example + logic done_with_ker_word_b; //kernel word N has finished, this is only delayed by one clock since it can happen any time after done_with_mem_word, look at how writeack_fifo_wr_data accumulates and clears + + assign has_leftover = (i_cmd_spans_three) ? ~i_cmd_at_third_cycle : (i_cmd_spans_two) ? ~i_cmd_at_second_cycle : 1'b0; + assign done_with_ker_word_a = i_cmd_fifo_rd_ack & ~has_leftover; + always_ff @(posedge clock) begin + done_with_ker_word_b <= i_cmd_fifo_rd_ack & has_leftover; + done_with_ker_word[0] <= done_with_ker_word_a ^ done_with_ker_word_b; //convert from two separate one bit signals into a single two bit value to add + done_with_ker_word[1] <= done_with_ker_word_a & done_with_ker_word_b; + end + end + else begin : ONE_DONE_WITH_KER_WORD + always_ff @(posedge clock) begin + done_with_ker_word[0] <= i_cmd_fifo_rd_ack; + end + assign done_with_ker_word[1] = 1'h0; + end + endgenerate + + + + ///////////////////// + // Writeack FIFO // + ///////////////////// + + //accumulate how many kernel words have finished in the current memory word, when the memory word is done write to the fifo and clear the counter + //writeack_fifo data tracks how many valids can be released to kernel downstream upon receiving writeack + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) begin + writeack_fifo_wr_req <= 1'b0; + writeack_fifo_wr_data <= 0; + end + else begin + writeack_fifo_wr_req <= done_with_mem_word; + if (writeack_fifo_wr_req) begin + writeack_fifo_wr_data <= done_with_ker_word; + end + else begin + writeack_fifo_wr_data <= writeack_fifo_wr_data + done_with_ker_word; + end + if (~sclrn) begin + writeack_fifo_wr_req <= 1'b0; + writeack_fifo_wr_data <= 0; + end + end + end + + dla_hld_fifo #( + .WIDTH (WRITEACK_WIDTH), + .DEPTH (M20K_NARROW_FIFO_DEPTH), + .NEVER_OVERFLOWS (1), + .ALMOST_FULL_CUTOFF (3), //1 clock from almost full to cmd fifo read, 1 clock to done_with_mem_word, 1 clock to writeack_fifo_wr_req + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0), + .STYLE ("ms") + ) + writeack_fifo_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + .i_valid (writeack_fifo_wr_req), + .i_data (writeack_fifo_wr_data), + .o_stall (), + .o_almost_full (o_writeack_fifo_almost_full), + .o_valid (), + .o_data (writeack_fifo_rd_data), + .i_stall (~writeack_fifo_rd_ack), + .o_almost_empty (), + .o_empty (writeack_fifo_empty), + .ecc_err_status () + ); + + + + ////////////////////////////////////////////// + // Writeack burst to memory word conversion // + ////////////////////////////////////////////// + + // AXI provides one writeack for the entire burst, translate that to how many memory words can be released downstream. + // For Avalon, already had to translate how many kernel words can be released per memory word. + // Once AXI has translated burst to memory words, will also need to reuse the Avalon translation of memory words to kernel words. + + generate + if (ENABLE_BURST_COALESCE && USE_AXI) begin : GEN_BURST_TO_MEM_WORD + //upon receiving a writeack for the entire burst, pop from the fifo below to determine how many memory words this burst contained (this information was originally provided by the burst coalescer) + //there is a counter that tracks outstanding memory words (words that have been popped from the fifo but not yet accepted by the second translator or memory to kernel words) + localparam int BURST_TO_MEM_WORD_BITS = $clog2(M20K_NARROW_FIFO_DEPTH) + 1; + + logic burst_to_mem_word_fifo_rd_ack; + logic [BURSTCOUNT_WIDTH-1:0] burst_to_mem_word_fifo_rd_data, burst_to_mem_word_neg_counter_update; + logic [BURST_TO_MEM_WORD_BITS-1:0] burst_to_mem_word_neg_counter; + + dla_hld_fifo #( + .WIDTH (BURSTCOUNT_WIDTH), + .DEPTH (M20K_NARROW_FIFO_DEPTH), //if at least as deep as writeack fifo, then by construction this cannot overflow + .NEVER_OVERFLOWS (1), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0), + .STYLE ("ms") + ) + burst_to_mem_word_fifo_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + .i_valid (i_burstcoal_snoop_valid), + .i_data (i_burstcoal_snoop_burstsize), + .o_stall (), + .o_almost_full (), + .o_valid (), + .o_data (burst_to_mem_word_fifo_rd_data), + .i_stall (~burst_to_mem_word_fifo_rd_ack), + .o_almost_empty (), + .o_empty (), + .ecc_err_status () + ); + + assign burst_to_mem_word_fifo_rd_ack = i_avm_writeack; + + //number of words in a burst = axi burst length + 1 + always_ff @(posedge clock) begin + burst_to_mem_word_neg_counter_update <= (burst_to_mem_word_fifo_rd_ack) ? (burst_to_mem_word_fifo_rd_data + 1'b1) : '0; + end + + //if a burst has been writeack, then decrease the counter by that the burst size + //if a word within that burst has been processed, then increase the counter by 1 + //since a writeack happens before processing of words within that burst, the value of burst_to_mem_word_neg_counter is 0 or negative + + //the value of burst_to_mem_word_neg_counter is 0 or negative + //a negative value means there are some outstanding memory words that have been popped from the burst_to_mem_word_fifo_inst fifo but not yet accepted by the second translator + //the second translator does memory words to kernel words, it can only receive one memory word per clock cycle because it needs to pop from a different fifo + //if a burst has two or more memory words, this counter is necessary to track outstanding memory words + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) burst_to_mem_word_neg_counter <= '0; + else begin + burst_to_mem_word_neg_counter <= burst_to_mem_word_neg_counter - burst_to_mem_word_neg_counter_update + writeack_fifo_rd_ack; + if (~sclrn) burst_to_mem_word_neg_counter <= '0; + end + end + assign writeack_fifo_rd_ack = burst_to_mem_word_neg_counter[BURST_TO_MEM_WORD_BITS-1]; //msb = is value negative, max value is 0 so really this checks for a nonzero value + end + else begin : NO_BURST_TO_MEM_WORD + //upon receiving writeack, read from writeack_fifo, data indicates how many non-predicated transactions can be released to kernel downstream + assign writeack_fifo_rd_ack = i_avm_writeack; + end + endgenerate + + + + ///////////////////////// + // Kernel Downstream // + ///////////////////////// + + //accumulate the data read from writeack_fifo into writeack_count + always_ff @(posedge clock) begin + writeack_count_incr <= (writeack_fifo_rd_ack) ? writeack_fifo_rd_data : '0; //transfer to writeack_count + writeack_count_was_two_or_more <= (writeack_count >= 2); + end + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) writeack_count <= '0; + else begin + writeack_count <= writeack_count + writeack_count_incr - writeack_count_decr; + if (~sclrn) writeack_count <= '0; + end + end + + //use lookahead logic to determine when writeack_count is nonzero, if so then we can transfer a value of 1 from writeack_count into mini_writeack_count + //the purpose of using mini_writeack_count is that the bit width is much smaller + //need to integrate predicate logic with counter being nonzero in order to transfer to output_count, it is too much combinational logic when using a large bit with counter + assign writeack_count_decr = (writeack_count_was_two_or_more | writeack_count[0]) & ~mini_writeack_almost_full; + + always_ff @(posedge clock) begin + mini_writeack_incr <= writeack_count_decr; //transfer to mini_writeack_count + end + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) mini_writeack_count <= '1; //4 bits can represent -8 to +7, we use -1 to +6, msb is sign bit which indiates empty, second msb means almost full + else begin + mini_writeack_count <= mini_writeack_count + mini_writeack_incr - mini_writeack_decr; + if (~sclrn) mini_writeack_count <= '1; + end + end + assign writeack_count_nonzero = ~mini_writeack_count[3]; + always_ff @(posedge clock) begin + mini_writeack_almost_full <= ~mini_writeack_count[3] & mini_writeack_count[2]; //detect +4 or more, count can be up to 5 by the time almost full asserts + end + + //transfer from mini_writeack_count to output_count if there is space available, next transaction to kernel downstream is not predicated, and mini_writeack_count has stuff + assign mini_writeack_decr = ~output_count_almost_full & ~i_predicate_fifo_empty & ~i_predicate_fifo_rd_data & writeack_count_nonzero; + + //drain the predicate fifo into output_count, which tracks how many valids can be released to kernel downstream + //only need to check if mini_writeack_count has stuff if the next transaction to kernel downstream is not predicated + assign o_predicate_fifo_rd_ack = ~output_count_almost_full & ~i_predicate_fifo_empty & (i_predicate_fifo_rd_data | writeack_count_nonzero); + + always_ff @(posedge clock) begin + output_count_incr <= o_predicate_fifo_rd_ack; //transfer to output_count + end + assign output_count_decr = (not_empty & ~i_stall); //transaction accepted by kernel downstream + + //output count is not implemented with a counter, only care about being empty (~o_valid) or almost full (backpressure) or almost empty (for stall latency), each of which can be implemented with an occ tracker + + dla_acl_tessellated_incr_decr_threshold #( + .CAPACITY (MLAB_FIFO_DEPTH), + .THRESHOLD (1), + .INITIAL_OCCUPANCY (0), + .THRESHOLD_REACHED_AT_RESET (0), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0) + ) + o_valid_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + .incr_no_overflow (output_count_incr), + .incr_raw (output_count_incr), + .decr_no_underflow (output_count_decr), + .decr_raw (output_count_decr), + .threshold_reached (not_empty) + ); + + dla_acl_tessellated_incr_decr_threshold #( + .CAPACITY (MLAB_FIFO_DEPTH), + .THRESHOLD (MLAB_FIFO_DEPTH-1), + .INITIAL_OCCUPANCY (0), + .THRESHOLD_REACHED_AT_RESET (1), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0) + ) + output_count_almost_full_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + .incr_no_overflow (output_count_incr), + .incr_raw (output_count_incr), + .decr_no_underflow (output_count_decr), + .decr_raw (output_count_decr), + .threshold_reached (output_count_almost_full) + ); + + assign o_empty = ~not_empty; + assign o_valid = (KER_DOWN_STALL_LATENCY) ? output_count_decr : not_empty; + + generate + if (KER_DOWN_STALL_LATENCY) begin + logic not_almost_empty; + dla_acl_tessellated_incr_decr_threshold #( + .CAPACITY (MLAB_FIFO_DEPTH), + .THRESHOLD (KER_DOWN_STALL_LATENCY+1), //convert from cutoff to threshold semantics + .INITIAL_OCCUPANCY (0), + .THRESHOLD_REACHED_AT_RESET (0), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (0) + ) + o_almost_empty_inst + ( + .clock (clock), + .resetn (resetn_synchronized), + .incr_no_overflow (output_count_incr), + .incr_raw (output_count_incr), + .decr_no_underflow (output_count_decr), + .decr_raw (output_count_decr), + .threshold_reached (not_almost_empty) + ); + assign o_almost_empty = ~not_almost_empty; + end + else begin + assign o_almost_empty = 1'b1; + end + endgenerate + +endmodule + +`default_nettype wire diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram.sv new file mode 100644 index 0000000..3e4391c --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram.sv @@ -0,0 +1,381 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +/** +dla_hld_ram is a project to simplify the usage of on-chip FPGA memory. Firstly, a lot of complexities are from Quartus IP such as altera_syncram and altdpram are hidden from the user. +Secondly, there are many value-added features such as using depth/width stitching to minimize the number of physical RAMs needed to create one logical RAM, which Quartus IP does +not handle well for non-power-of-2 sizes. + +A very detailed powerpoint slide deck describing the internals can be found at: //depot/docs/hld/ip/dla_hld_ram introduction algorithm convergence.pptx + +Here is a summary of the responsibility of each layer, note that the functionality in each layer can be optionally bypassed: + +Level | Layer | Description summary | Description details +------+-------------------------------------------+---------------------------------------------------+------------------------------------------------------------------------------------ + 1 | dla_hld_ram | choose M20K/MLAB if user did not specify it +------+-------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------- + 2 | dla_hld_ram_ecc | adds error correction codes +------+-------------------------------------------+---------------------------------------------------+------------------------------------------------------------------------------------ + 3 | dla_hld_ram_tall_depth_stitch | minimize the number physical memories needed to | - depth stitch a multiple of 16k depth, 8k depth, and leftover depth + 4 | dla_hld_ram_remaining_width | construct one logical memory where the width and | - extract remaining width, e.g. if width=32 may want to handle 2 bits separately + 5 | dla_hld_ram_bits_per_enable | depth are not "nice" values (e.g. depth not a | - logical to physical mapping of byte enables and data + 6 | dla_hld_ram_short_depth_stitch | power of two), among configurations of minimal | - split depth into top/bottom, top depth is multiple of max physical depth + 7 | dla_hld_ram_bottom_width_stitch | memory try to minimize glue logic (e.g. size of | - split bottom width into left/right, large width will depth stitch in next layer + 8 | dla_hld_ram_bottom_depth_stitch | read data mux) | - implement the depth stitch for large width groups extracted in previous layer +------+-------------------------------------------+---------------------------------------------------+------------------------------------------------------------------------------------ + 9 | dla_hld_ram_lower | unified interface for M20K and MLAB, also models the number of physical memories used +------+-------------------------------------------+---------------------------------------------------+------------------------------------------------------------------------------------ + 10 | dla_hld_ram_lower_m20k_simple_dual_port, | wrappers around altera_syncram or altdpram, + | dla_hld_ram_lower_m20k_true_dual_port, | add soft logic when hardened logic lacks functionality + | dla_hld_ram_lower_mlab_simple_dual_port | +*/ + +`default_nettype none + +`include "dla_acl_parameter_assert.svh" + +module dla_hld_ram import dla_common_pkg::*; #( + //geometry configuration + parameter int DEPTH, //number of words of memory + parameter int WIDTH, //width of the data bus, both read and write data + parameter int BE_WIDTH, //width of the byte enable signal, beware that WIDTH / BE_WIDTH must divide evenly + + //geometry constants + parameter bit MINIMIZE_MEMORY_USAGE, //0 = minimize glue logic between memories (may require more physical memories), 1 = minimize number of physical memories needed (may require more glue logic) + parameter int SIM_ONLY_MIN_PHYSICAL_DEPTH, //set to 0 to use real physical values, set to nonzero to allow simulation to use shallower memories to better test mixed port read during write + + //memory initialization + parameter bit USE_MEM_INIT_FILE, //0 = do not use memory initialization file, 1 = use memory initialization file + parameter bit ZERO_INITIALIZE_MEM, //only when USE_MEM_INIT_FILE = 0, choose whether the memory contents power up to zero or don't care (MLAB can only power up to zero) + parameter MEM_INIT_NAME, //only when USE_MEM_INIT_FILE = 1, specify the original file name including the .mif extension, this file name is modified as memory contents are sliced + + //error correction codes + parameter bit ENABLE_ECC, //whether to enable error correction codes + parameter bit ECC_STATUS_TIME_STRETCH, //0 = report the instantaneous ecc status, 1 = pulse stretch any single error corrected and latch (until reset) any double error detected + parameter bit ASYNC_RESET, //how do ecc status registers CONSUME reset, 1 = asynchronously, 0 = synchronously, no other registers consume reset + parameter bit SYNCHRONIZE_RESET, //should reset be synchronized BEFORE it is consumed by the ecc status registers, 1 = synchronize it, 0 = no change to reset before consumption + + //memory configuration + parameter RAM_BLOCK_TYPE, //legal values are: "M20K", "MLAB", "DLA_HLD_RAM_TO_CHOOSE" + parameter RAM_OPERATION_MODE, //legal values are: "SIMPLE_DUAL_PORT", "TRUE_DUAL_PORT" + parameter device_family_t DEVICE_FAMILY, //legal values are: "Cyclone 10 GX", "Arria 10", "Stratix 10", "Agilex" + parameter READ_DURING_WRITE, //legal values are: "DONT_CARE", "OLD_DATA", "NEW_DATA" + parameter bit REGISTER_A_READDATA, //latency from a_address to a_readdata is 1 (if unregistered) or 2 (if registered) + parameter bit REGISTER_B_ADDRESS, //for mlab only choose whether to register or unregister the read address, for m20k this parameter is ignored since all inputs must be registered + parameter bit REGISTER_B_READDATA, //latency from b_address to b_readdata is REGISTER_B_ADDRESS + REGISTER_B_READDATA, can be from 0 to 2 inclusive for mlab, can be from 1 to 2 for m20k + + //try to use memory hardened logic + parameter bit USE_ENABLE, // set to 0 if no clock enables are used + parameter bit COMMON_IN_CLOCK_EN, //set to 1 if a_in_clock_en and b_in_clock_en are driven by the same source + parameter bit COMMON_OUT_CLOCK_EN, //set to 1 if a_out_clock_en and b_out_clock_en are driven by the same source + + //derived parameters that affect the module interface + localparam int ADDR = $clog2(DEPTH) +) ( + input wire clock, + + //port a + input wire [ADDR-1:0] a_address, //address for read or write + input wire a_read_enable, //read enable signal + input wire a_write, //write enable, 1 = write, 0 = read + input wire [WIDTH-1:0] a_writedata, //data to write to memory + input wire [BE_WIDTH-1:0] a_byteenable, //which bytes of write data to commit to memory + output logic [WIDTH-1:0] a_readdata, //data read from memory + output wire a_read_valid, //latency matched read enable + input wire a_in_clock_en, //applies to all inputs: address, write enable, write data, byte enable + input wire a_out_clock_en, //applies to all outputs: read data + + //port b + input wire [ADDR-1:0] b_address, //signals have the same meaning as port a + input wire b_read_enable, + input wire b_write, + input wire [WIDTH-1:0] b_writedata, + input wire [BE_WIDTH-1:0] b_byteenable, + output logic [WIDTH-1:0] b_readdata, + output wire b_read_valid, + input wire b_in_clock_en, + input wire b_out_clock_en, + + //error correction code + input wire resetn, //reset is only used if ENABLE_ECC = 1 and ECC_STATUS_TIME_STRETCH = 1, and it is only used by the ecc status not the ram itself + output logic [1:0] ecc_err_status //bit 0 = double bit error detected (uncorrectable), bit 1 = single bit error corrected +); + + /////////////////////// + // Legality checks // + /////////////////////// + + generate + //check for non-trivial dimensions + `DLA_ACL_PARAMETER_ASSERT(DEPTH >= 2) + `DLA_ACL_PARAMETER_ASSERT(WIDTH >= 1) + `DLA_ACL_PARAMETER_ASSERT(BE_WIDTH >= 1) + + //width / be_width must divide evenly with no remainder + `DLA_ACL_PARAMETER_ASSERT(WIDTH % BE_WIDTH == 0) + + //check for a legal value of ram block type + localparam bit RAM_BLOCK_TYPE_IS_M20K = RAM_BLOCK_TYPE == "M20K"; + localparam bit RAM_BLOCK_TYPE_IS_MLAB = RAM_BLOCK_TYPE == "MLAB"; + localparam bit RAM_BLOCK_TYPE_IS_HLD_RAM_TO_CHOOSE = RAM_BLOCK_TYPE == "DLA_HLD_RAM_TO_CHOOSE"; + `DLA_ACL_PARAMETER_ASSERT(RAM_BLOCK_TYPE_IS_M20K || RAM_BLOCK_TYPE_IS_MLAB || RAM_BLOCK_TYPE_IS_HLD_RAM_TO_CHOOSE) + + //check for a legal value of ram operation mode + localparam bit RAM_OPERATION_MODE_IS_SIMPLE_DUAL_PORT = RAM_OPERATION_MODE == "SIMPLE_DUAL_PORT"; + localparam bit RAM_OPERATION_MODE_IS_TRUE_DUAL_PORT = RAM_OPERATION_MODE == "TRUE_DUAL_PORT"; + `DLA_ACL_PARAMETER_ASSERT(RAM_OPERATION_MODE_IS_SIMPLE_DUAL_PORT || RAM_OPERATION_MODE_IS_TRUE_DUAL_PORT) + + //check for a legal value of device family + localparam DEVICE_FAMILY_STR = + (DEVICE_FAMILY == DEVICE_C10) ? "Cyclone 10 GX" : + (DEVICE_FAMILY == DEVICE_A10) ? "Arria 10" : + (DEVICE_FAMILY == DEVICE_S10) ? "Stratix 10" : + (DEVICE_FAMILY == DEVICE_AGX7) ? "Agilex" : + (DEVICE_FAMILY == DEVICE_AGX5) ? "Agilex" : + "Unknown"; + localparam bit DEVICE_FAMILY_IS_C10 = DEVICE_FAMILY_STR == "Cyclone 10 GX"; + localparam bit DEVICE_FAMILY_IS_A10 = DEVICE_FAMILY_STR == "Arria 10"; + localparam bit DEVICE_FAMILY_IS_S10 = DEVICE_FAMILY_STR == "Stratix 10"; + localparam bit DEVICE_FAMILY_IS_AGX = DEVICE_FAMILY_STR == "Agilex"; + `DLA_ACL_PARAMETER_ASSERT(DEVICE_FAMILY_IS_C10 || DEVICE_FAMILY_IS_A10 || DEVICE_FAMILY_IS_S10 || DEVICE_FAMILY_IS_AGX) + + //check for a legal value of mixed port read during write mode + localparam bit READ_DURING_WRITE_IS_DONT_CARE = READ_DURING_WRITE == "DONT_CARE"; + localparam bit READ_DURING_WRITE_IS_OLD_DATA = READ_DURING_WRITE == "OLD_DATA"; + localparam bit READ_DURING_WRITE_IS_NEW_DATA = READ_DURING_WRITE == "NEW_DATA"; + `DLA_ACL_PARAMETER_ASSERT(READ_DURING_WRITE_IS_DONT_CARE || READ_DURING_WRITE_IS_OLD_DATA || READ_DURING_WRITE_IS_NEW_DATA) + + //mlab and true dual port is illegal + `DLA_ACL_PARAMETER_ASSERT(!RAM_BLOCK_TYPE_IS_MLAB || !RAM_OPERATION_MODE_IS_TRUE_DUAL_PORT) + + //unregistered address and true dual port is illegal + `DLA_ACL_PARAMETER_ASSERT(REGISTER_B_ADDRESS || !RAM_OPERATION_MODE_IS_TRUE_DUAL_PORT) + + //m20k with unregistered address is illegal + `DLA_ACL_PARAMETER_ASSERT(!RAM_BLOCK_TYPE_IS_M20K || REGISTER_B_ADDRESS) + endgenerate + + + + ////////////////////////// + // Derived parameters // + ////////////////////////// + + //choose ram block type if user did not explicitly set it + localparam bit MUST_CHOOSE_M20K = (RAM_OPERATION_MODE == "TRUE_DUAL_PORT"); + localparam bit MUST_CHOOSE_MLAB = (REGISTER_B_ADDRESS == 0); + localparam bit DEVICE_FAMILY_A10_OR_OLDER = (DEVICE_FAMILY_STR == "Cyclone 10 GX") || (DEVICE_FAMILY_STR == "Arria 10"); + localparam int MLAB_MAX_PHYSICAL_DEPTH = (DEVICE_FAMILY_A10_OR_OLDER) ? 64 : 32; + localparam bit FAVOR_M20K = (DEPTH > MLAB_MAX_PHYSICAL_DEPTH) || USE_MEM_INIT_FILE; //m20k natively supports mem init inside a partial reconfig region + localparam HEURISTIC_RAM_BLOCK_TYPE = (MUST_CHOOSE_M20K) ? "M20K" : (MUST_CHOOSE_MLAB) ? "MLAB" : (FAVOR_M20K) ? "M20K" : "MLAB"; + localparam CHOSEN_RAM_BLOCK_TYPE = (RAM_BLOCK_TYPE == "DLA_HLD_RAM_TO_CHOOSE") ? HEURISTIC_RAM_BLOCK_TYPE : RAM_BLOCK_TYPE; + + //depth quantization - round up the depth to the nearest multiple of the minimum physical depth + //simulation may reduce the minimum physical depth to gain more test coverage of read-during-write behavior and depth stitching + localparam int MIN_PHYSICAL_DEPTH = (SIM_ONLY_MIN_PHYSICAL_DEPTH) ? SIM_ONLY_MIN_PHYSICAL_DEPTH : (CHOSEN_RAM_BLOCK_TYPE=="MLAB") ? 32 : 512; + localparam int MIN_USABLE_DEPTH = (RAM_OPERATION_MODE == "TRUE_DUAL_PORT") ? 2*MIN_PHYSICAL_DEPTH : MIN_PHYSICAL_DEPTH; + localparam int QUANTIZED_DEPTH = ((DEPTH + MIN_USABLE_DEPTH - 1) / MIN_USABLE_DEPTH) * MIN_USABLE_DEPTH; + + //sanity check that the hardware is using the memory initialization files produced by the software model + localparam DLA_HLD_RAM_MEM_INIT_NAME = {MEM_INIT_NAME, ".hldram"}; + + //optionally skip all the upper layers of dla_hld_ram, intended to reduce the module count for Modelsim AE + //this can only be done when no features are used: no ECC, do whatever altera_syncram is going to do in terms of width/depth stitching, and no byte enables (therefore no bits per enable resizing) + localparam bit BYPASS_ALL_UPPER_LAYERS = !ENABLE_ECC && !MINIMIZE_MEMORY_USAGE && (BE_WIDTH == 1); + + + + //////////////////////// + // Address resizing // + //////////////////////// + + //if the address signal in this module is narrower than the port width of the instance, modelsim puts Z on the upper bits which is ambigious in terms of what address to access + localparam int QUANTIZED_ADDR = $clog2(QUANTIZED_DEPTH); + logic [QUANTIZED_ADDR-1:0] quantized_a_address, quantized_b_address; + generate + if (QUANTIZED_ADDR > ADDR) begin : ZERO_EXTEND_ADDRESS + assign quantized_a_address = {'0, a_address}; + assign quantized_b_address = {'0, b_address}; + end + else begin : ORIGINAL_ADDRESS //since QUANTIZED_DEPTH >= DEPTH therefore QUANTIZED_ADDR >= ADDR, strictly greater than was handled above, so this must be QUANTIZED_ADDR == ADDR + assign quantized_a_address = a_address; + assign quantized_b_address = b_address; + end + endgenerate + + + + ///////////////////////////////////////////////// + // Next layer in the instantiation hierarchy // + ///////////////////////////////////////////////// + + //imitate the query functions in the software model + // synthesis translate_off + int NUM_PHYSICAL_M20K, NUM_PHYSICAL_MLAB; + // synthesis translate_on + + generate + if (BYPASS_ALL_UPPER_LAYERS) begin : GEN_LOWER + dla_hld_ram_lower + #( + .DEPTH (QUANTIZED_DEPTH), //changed + .WIDTH (WIDTH), + .BE_WIDTH (BE_WIDTH), + .UTILIZED_WIDTH (WIDTH), //assuming all bits of the data are used -- this is only for modelling the number of physical memories needed + .MINIMIZE_MEMORY_USAGE (MINIMIZE_MEMORY_USAGE), + .MIN_PHYSICAL_DEPTH (MIN_PHYSICAL_DEPTH), + .USE_MEM_INIT_FILE (USE_MEM_INIT_FILE), + .ZERO_INITIALIZE_MEM (ZERO_INITIALIZE_MEM), + .MEM_INIT_NAME (DLA_HLD_RAM_MEM_INIT_NAME), //changed + .RAM_BLOCK_TYPE (CHOSEN_RAM_BLOCK_TYPE), //changed + .RAM_OPERATION_MODE (RAM_OPERATION_MODE), + .DEVICE_FAMILY (DEVICE_FAMILY_STR), + .READ_DURING_WRITE (READ_DURING_WRITE), + .REGISTER_A_READDATA (REGISTER_A_READDATA), + .REGISTER_B_ADDRESS (REGISTER_B_ADDRESS), + .REGISTER_B_READDATA (REGISTER_B_READDATA), + .USE_ENABLE (USE_ENABLE), + .COMMON_IN_CLOCK_EN (COMMON_IN_CLOCK_EN), + .COMMON_OUT_CLOCK_EN (COMMON_OUT_CLOCK_EN) + ) + dla_hld_ram_lower_inst + ( + + .clock (clock), + .a_address (quantized_a_address), //changed + .a_read_enable (a_read_enable), + .a_write (a_write), + .a_writedata (a_writedata), + .a_byteenable (a_byteenable), + .a_readdata (a_readdata), + .a_in_clock_en (a_in_clock_en), + .a_out_clock_en (a_out_clock_en), + .b_address (quantized_b_address), //changed + .b_read_enable (b_read_enable), + .b_write (b_write), + .b_writedata (b_writedata), + .b_byteenable (b_byteenable), + .b_readdata (b_readdata), + .b_in_clock_en (b_in_clock_en), + .b_out_clock_en (b_out_clock_en) + ); + + // synthesis translate_off + assign NUM_PHYSICAL_M20K = dla_hld_ram_lower_inst.NUM_PHYSICAL_M20K; + assign NUM_PHYSICAL_MLAB = dla_hld_ram_lower_inst.NUM_PHYSICAL_MLAB; + // synthesis translate_on + end + else begin : GEN_ECC + dla_hld_ram_ecc + #( + .DEPTH (QUANTIZED_DEPTH), //changed + .WIDTH (WIDTH), + .BE_WIDTH (BE_WIDTH), + .MINIMIZE_MEMORY_USAGE (MINIMIZE_MEMORY_USAGE), + .MIN_PHYSICAL_DEPTH (MIN_PHYSICAL_DEPTH), + .USE_MEM_INIT_FILE (USE_MEM_INIT_FILE), + .ZERO_INITIALIZE_MEM (ZERO_INITIALIZE_MEM), + .MEM_INIT_NAME (DLA_HLD_RAM_MEM_INIT_NAME), //changed + .ENABLE_ECC (ENABLE_ECC), + .ECC_STATUS_TIME_STRETCH(ECC_STATUS_TIME_STRETCH), + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (SYNCHRONIZE_RESET), + .RAM_BLOCK_TYPE (CHOSEN_RAM_BLOCK_TYPE), //changed + .RAM_OPERATION_MODE (RAM_OPERATION_MODE), + .DEVICE_FAMILY (DEVICE_FAMILY_STR), + .READ_DURING_WRITE (READ_DURING_WRITE), + .REGISTER_A_READDATA (REGISTER_A_READDATA), + .REGISTER_B_ADDRESS (REGISTER_B_ADDRESS), + .REGISTER_B_READDATA (REGISTER_B_READDATA), + .USE_ENABLE (USE_ENABLE), + .COMMON_IN_CLOCK_EN (COMMON_IN_CLOCK_EN), + .COMMON_OUT_CLOCK_EN (COMMON_OUT_CLOCK_EN) + ) + dla_hld_ram_ecc_inst + ( + + .clock (clock), + .a_address (quantized_a_address), //changed + .a_write (a_write), + .a_writedata (a_writedata), + .a_byteenable (a_byteenable), + .a_readdata (a_readdata), + .a_in_clock_en (a_in_clock_en), + .a_out_clock_en (a_out_clock_en), + .a_read_enable (a_read_enable), + .b_address (quantized_b_address), //changed + .b_write (b_write), + .b_writedata (b_writedata), + .b_byteenable (b_byteenable), + .b_readdata (b_readdata), + .b_in_clock_en (b_in_clock_en), + .b_out_clock_en (b_out_clock_en), + .b_read_enable (b_read_enable), + .resetn (resetn), + .ecc_err_status (ecc_err_status) + ); + + // synthesis translate_off + assign NUM_PHYSICAL_M20K = dla_hld_ram_ecc_inst.NUM_PHYSICAL_M20K; + assign NUM_PHYSICAL_MLAB = dla_hld_ram_ecc_inst.NUM_PHYSICAL_MLAB; + // synthesis translate_on + end + endgenerate + + logic a_read_enable_d1; + dla_delay #( + .WIDTH (1), + .DELAY (1), + .DEVICE (DEVICE_FAMILY) + ) a_delay_read_enable ( + .clk (clock), + .clk_en (USE_ENABLE ? a_in_clock_en : 1'b1), + .i_data (a_read_enable), + .o_data (a_read_enable_d1) + ); + dla_delay #( + .WIDTH (1), + .DELAY (REGISTER_A_READDATA), + .DEVICE (DEVICE_FAMILY) + ) a_delay_read_valid ( + .clk (clock), + .clk_en (USE_ENABLE ? a_out_clock_en : 1'b1), + .i_data (a_read_enable_d1), + .o_data (a_read_valid) + ); + + logic b_read_enable_d1; + dla_delay #( + .WIDTH (1), + .DELAY (1), + .DEVICE (DEVICE_FAMILY) + ) b_delay_read_enable ( + .clk (clock), + .clk_en (USE_ENABLE ? (COMMON_IN_CLOCK_EN ? a_in_clock_en : b_in_clock_en) : 1'b1), + .i_data (b_read_enable), + .o_data (b_read_enable_d1) + ); + dla_delay #( + .WIDTH (1), + .DELAY (REGISTER_A_READDATA), + .DEVICE (DEVICE_FAMILY) + ) b_delay_read_valid ( + .clk (clock), + .clk_en (USE_ENABLE ? (COMMON_OUT_CLOCK_EN ? a_out_clock_en : b_out_clock_en) : 1'b1), + .i_data (b_read_enable_d1), + .o_data (b_read_valid) + ); + +endmodule + +`default_nettype wire diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram_bits_per_enable.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram_bits_per_enable.sv new file mode 100644 index 0000000..51e18b0 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram_bits_per_enable.sv @@ -0,0 +1,244 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +//see dla_hld_ram.sv for a description of the parameters, ports, and general functionality of all the dla_hld_ram layers + +//this layer resizes the data and byte enable signals to match what the physical implementation supports + +`default_nettype none + +`include "dla_acl_parameter_assert.svh" + +module dla_hld_ram_bits_per_enable #( + //geometry configuration + parameter int DEPTH, + parameter int WIDTH, + parameter int BE_WIDTH, + + //geometry constants + parameter bit MINIMIZE_MEMORY_USAGE, + parameter int MIN_PHYSICAL_DEPTH, + + //memory initialization + parameter bit USE_MEM_INIT_FILE, + parameter bit ZERO_INITIALIZE_MEM, + parameter MEM_INIT_NAME, + + //memory configuration + parameter RAM_BLOCK_TYPE, + parameter RAM_OPERATION_MODE, + parameter DEVICE_FAMILY, + parameter READ_DURING_WRITE, + parameter bit REGISTER_A_READDATA, + parameter bit REGISTER_B_ADDRESS, + parameter bit REGISTER_B_READDATA, + + //try to use memory hardened logic + parameter bit USE_ENABLE, + parameter bit COMMON_IN_CLOCK_EN, + parameter bit COMMON_OUT_CLOCK_EN, + + //derived parameters + localparam int ADDR = $clog2(DEPTH) +) ( + input wire clock, + //no reset + + //port a + input wire [ADDR-1:0] a_address, + input wire a_read_enable, + input wire a_write, + input wire [WIDTH-1:0] a_writedata, + input wire [BE_WIDTH-1:0] a_byteenable, + output logic [WIDTH-1:0] a_readdata, + input wire a_in_clock_en, + input wire a_out_clock_en, + + //port b + input wire [ADDR-1:0] b_address, + input wire b_read_enable, + input wire b_write, + input wire [WIDTH-1:0] b_writedata, + input wire [BE_WIDTH-1:0] b_byteenable, + output logic [WIDTH-1:0] b_readdata, + input wire b_in_clock_en, + input wire b_out_clock_en +); + + + //legality checks + generate + //width / be_width must divide evenly with no remainder + `DLA_ACL_PARAMETER_ASSERT(WIDTH % BE_WIDTH == 0) + endgenerate + + + + //this is the physical bits per enable supported by both M20K and MLAB + //although may instantiate altdpram with bits per enable = 5, it uses twice the number of MLABs, which suggests that only 5 out of every 10 physical bits of storage are actually used + localparam int PHYSICAL_BITS_PER_ENABLE = 10; + + //for every logical byte enable signal, determine how many physical byte enable signals it drives and how many bits of physical storage it controls + //for example, if LOGICAL_BITS_PER_ENABLE = 32, the fewest number of 10 bit sections we need is 4, so each logical enable drives 4 physical byte enable signals, and we use 40 bits of physical storage + localparam int LOGICAL_BITS_PER_ENABLE = WIDTH / BE_WIDTH; + localparam int PHYSICAL_ENABLES_PER_LOGICAL_ENABLE = (LOGICAL_BITS_PER_ENABLE + PHYSICAL_BITS_PER_ENABLE - 1) / PHYSICAL_BITS_PER_ENABLE; //this is the 4 in the above example + localparam int PHYSICAL_STORAGE_PER_LOGICAL_ENABLE = PHYSICAL_ENABLES_PER_LOGICAL_ENABLE * PHYSICAL_BITS_PER_ENABLE; //this is the 40 in the above example + + //width of the physical byte enable and data signals + localparam int PHYSICAL_BE_WIDTH = PHYSICAL_ENABLES_PER_LOGICAL_ENABLE * BE_WIDTH; + localparam int PHYSICAL_WIDTH = PHYSICAL_STORAGE_PER_LOGICAL_ENABLE * BE_WIDTH; + + //decide the next instantiation layer to use + localparam bit USE_SHORT_DEPTH_STITCH = MINIMIZE_MEMORY_USAGE && (RAM_BLOCK_TYPE == "M20K"); + + //model how much of the physical width is actually used + localparam bit USE_16K_BY_1 = (DEPTH > 16*MIN_PHYSICAL_DEPTH) && !MINIMIZE_MEMORY_USAGE; //depth strictly larger than 8k, note if MINIMIZE_MEMORY_USAGE=1 then depth 16k is implemented with MAXIMUM_DEPTH=4096 + localparam bit USE_8K_BY_2 = (DEPTH > 8*MIN_PHYSICAL_DEPTH) && !MINIMIZE_MEMORY_USAGE; //depth strictly larger than 4k, note if bits per enable is odd then we are going to waste one bit of storage per enable + //else use 4k x 5 or shorter/wider, in which case bits per enable needs to be rounded up to the nearest multiple of 5 to model how much RAM is physically used + localparam int BITS_PER_ENABLE_ROUNDED_UP_TO_NEAREST_MULTIPLE_OF_TWO = ((LOGICAL_BITS_PER_ENABLE+1)/2) * 2; + localparam int BITS_PER_ENABLE_ROUNDED_UP_TO_NEAREST_MULTIPLE_OF_FIVE = ((LOGICAL_BITS_PER_ENABLE+4)/5) * 5; + localparam int QUANTIZED_LOGICAL_BITS_PER_ENABLE = (USE_16K_BY_1) ? LOGICAL_BITS_PER_ENABLE : (USE_8K_BY_2) ? BITS_PER_ENABLE_ROUNDED_UP_TO_NEAREST_MULTIPLE_OF_TWO : BITS_PER_ENABLE_ROUNDED_UP_TO_NEAREST_MULTIPLE_OF_FIVE; + localparam int UTILIZED_WIDTH = QUANTIZED_LOGICAL_BITS_PER_ENABLE * BE_WIDTH; + + + + logic [PHYSICAL_WIDTH-1:0] physical_a_writedata, physical_b_writedata; + logic [PHYSICAL_BE_WIDTH-1:0] physical_a_byteenable, physical_b_byteenable; + logic [PHYSICAL_WIDTH-1:0] physical_a_readdata, physical_b_readdata; + + always_comb begin + for (int i=0; i<BE_WIDTH; i++) begin + physical_a_byteenable[PHYSICAL_ENABLES_PER_LOGICAL_ENABLE*i +: PHYSICAL_ENABLES_PER_LOGICAL_ENABLE] = {PHYSICAL_ENABLES_PER_LOGICAL_ENABLE{a_byteenable[i]}}; + physical_b_byteenable[PHYSICAL_ENABLES_PER_LOGICAL_ENABLE*i +: PHYSICAL_ENABLES_PER_LOGICAL_ENABLE] = {PHYSICAL_ENABLES_PER_LOGICAL_ENABLE{b_byteenable[i]}}; + + physical_a_writedata[PHYSICAL_STORAGE_PER_LOGICAL_ENABLE*i +: PHYSICAL_STORAGE_PER_LOGICAL_ENABLE] = a_writedata[LOGICAL_BITS_PER_ENABLE*i +: LOGICAL_BITS_PER_ENABLE]; + physical_b_writedata[PHYSICAL_STORAGE_PER_LOGICAL_ENABLE*i +: PHYSICAL_STORAGE_PER_LOGICAL_ENABLE] = b_writedata[LOGICAL_BITS_PER_ENABLE*i +: LOGICAL_BITS_PER_ENABLE]; + + a_readdata[LOGICAL_BITS_PER_ENABLE*i +: LOGICAL_BITS_PER_ENABLE] = physical_a_readdata[PHYSICAL_STORAGE_PER_LOGICAL_ENABLE*i +: PHYSICAL_STORAGE_PER_LOGICAL_ENABLE]; + b_readdata[LOGICAL_BITS_PER_ENABLE*i +: LOGICAL_BITS_PER_ENABLE] = physical_b_readdata[PHYSICAL_STORAGE_PER_LOGICAL_ENABLE*i +: PHYSICAL_STORAGE_PER_LOGICAL_ENABLE]; + end + end + + + + //imitate the query functions in the software model + // synthesis translate_off + int NUM_PHYSICAL_M20K, NUM_PHYSICAL_MLAB; + // synthesis translate_on + + + generate + if (USE_SHORT_DEPTH_STITCH) begin : GEN_SHORT_DEPTH_STITCH + dla_hld_ram_short_depth_stitch + #( + .DEPTH (DEPTH), + .WIDTH (PHYSICAL_WIDTH), //changed + .BE_WIDTH (PHYSICAL_BE_WIDTH), //changed + .UTILIZED_WIDTH (UTILIZED_WIDTH), //created at this layer + .MINIMIZE_MEMORY_USAGE (MINIMIZE_MEMORY_USAGE), + .MIN_PHYSICAL_DEPTH (MIN_PHYSICAL_DEPTH), + .USE_MEM_INIT_FILE (USE_MEM_INIT_FILE), + .ZERO_INITIALIZE_MEM (ZERO_INITIALIZE_MEM), + .MEM_INIT_NAME (MEM_INIT_NAME), + .RAM_BLOCK_TYPE (RAM_BLOCK_TYPE), + .RAM_OPERATION_MODE (RAM_OPERATION_MODE), + .DEVICE_FAMILY (DEVICE_FAMILY), + .READ_DURING_WRITE (READ_DURING_WRITE), + .REGISTER_A_READDATA (REGISTER_A_READDATA), + .REGISTER_B_ADDRESS (REGISTER_B_ADDRESS), + .REGISTER_B_READDATA (REGISTER_B_READDATA), + .USE_ENABLE (USE_ENABLE), + .COMMON_IN_CLOCK_EN (COMMON_IN_CLOCK_EN), + .COMMON_OUT_CLOCK_EN (COMMON_OUT_CLOCK_EN) + ) + dla_hld_ram_short_depth_stitch_inst + ( + .clock (clock), + .a_address (a_address), + .a_read_enable (a_read_enable), + .a_write (a_write), + .a_writedata (physical_a_writedata), //changed + .a_byteenable (physical_a_byteenable), //changed + .a_readdata (physical_a_readdata), //changed + .a_in_clock_en (a_in_clock_en), + .a_out_clock_en (a_out_clock_en), + .b_address (b_address), + .b_read_enable (b_read_enable), + .b_write (b_write), + .b_writedata (physical_b_writedata), //changed + .b_byteenable (physical_b_byteenable), //changed + .b_readdata (physical_b_readdata), //changed + .b_in_clock_en (b_in_clock_en), + .b_out_clock_en (b_out_clock_en) + ); + + // synthesis translate_off + assign NUM_PHYSICAL_M20K = dla_hld_ram_short_depth_stitch_inst.NUM_PHYSICAL_M20K; + assign NUM_PHYSICAL_MLAB = dla_hld_ram_short_depth_stitch_inst.NUM_PHYSICAL_MLAB; + // synthesis translate_on + end + else begin : GEN_LOWER + dla_hld_ram_lower + #( + .DEPTH (DEPTH), + .WIDTH (PHYSICAL_WIDTH), //changed + .BE_WIDTH (PHYSICAL_BE_WIDTH), //changed + .UTILIZED_WIDTH (UTILIZED_WIDTH), //created at this layer + .MINIMIZE_MEMORY_USAGE (MINIMIZE_MEMORY_USAGE), + .MIN_PHYSICAL_DEPTH (MIN_PHYSICAL_DEPTH), + .USE_MEM_INIT_FILE (USE_MEM_INIT_FILE), + .ZERO_INITIALIZE_MEM (ZERO_INITIALIZE_MEM), + .MEM_INIT_NAME (MEM_INIT_NAME), + .RAM_BLOCK_TYPE (RAM_BLOCK_TYPE), + .RAM_OPERATION_MODE (RAM_OPERATION_MODE), + .DEVICE_FAMILY (DEVICE_FAMILY), + .READ_DURING_WRITE (READ_DURING_WRITE), + .REGISTER_A_READDATA (REGISTER_A_READDATA), + .REGISTER_B_ADDRESS (REGISTER_B_ADDRESS), + .REGISTER_B_READDATA (REGISTER_B_READDATA), + .USE_ENABLE (USE_ENABLE), + .COMMON_IN_CLOCK_EN (COMMON_IN_CLOCK_EN), + .COMMON_OUT_CLOCK_EN (COMMON_OUT_CLOCK_EN) + ) + dla_hld_ram_lower_inst + ( + .clock (clock), + .a_address (a_address), + .a_read_enable (a_read_enable), + .a_write (a_write), + .a_writedata (physical_a_writedata), //changed + .a_byteenable (physical_a_byteenable), //changed + .a_readdata (physical_a_readdata), //changed + .a_in_clock_en (a_in_clock_en), + .a_out_clock_en (a_out_clock_en), + .b_address (b_address), + .b_read_enable (b_read_enable), + .b_write (b_write), + .b_writedata (physical_b_writedata), //changed + .b_byteenable (physical_b_byteenable), //changed + .b_readdata (physical_b_readdata), //changed + .b_in_clock_en (b_in_clock_en), + .b_out_clock_en (b_out_clock_en) + ); + + // synthesis translate_off + assign NUM_PHYSICAL_M20K = dla_hld_ram_lower_inst.NUM_PHYSICAL_M20K; + assign NUM_PHYSICAL_MLAB = dla_hld_ram_lower_inst.NUM_PHYSICAL_MLAB; + // synthesis translate_on + end + endgenerate + + +endmodule + +`default_nettype wire diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram_bottom_depth_stitch.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram_bottom_depth_stitch.sv new file mode 100644 index 0000000..d6da76f --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram_bottom_depth_stitch.sv @@ -0,0 +1,392 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +//see dla_hld_ram.sv for a description of the parameters, ports, and general functionality of all the dla_hld_ram layers + +//this is the bottommost layer of the upper layers in dla_hld_ram +//after splitting top and bottom, and bottom left and bottom right, this layer now implements the depth stitch within the bottom for complete width groups + +`default_nettype none + +`include "dla_acl_parameter_assert.svh" + +module dla_hld_ram_bottom_depth_stitch #( + //geometry configuration + parameter int DEPTH, + parameter int WIDTH, + parameter int BE_WIDTH, + parameter int UTILIZED_WIDTH, + + //geometry constants + parameter bit MINIMIZE_MEMORY_USAGE, + parameter int MIN_PHYSICAL_DEPTH, + + //memory initialization + parameter bit USE_MEM_INIT_FILE, + parameter bit ZERO_INITIALIZE_MEM, + parameter MEM_INIT_NAME, + + //memory configuration + parameter RAM_BLOCK_TYPE, + parameter RAM_OPERATION_MODE, + parameter DEVICE_FAMILY, + parameter READ_DURING_WRITE, + parameter bit REGISTER_A_READDATA, + parameter bit REGISTER_B_ADDRESS, + parameter bit REGISTER_B_READDATA, + + //try to use memory hardened logic + parameter bit USE_ENABLE, + parameter bit COMMON_IN_CLOCK_EN, + parameter bit COMMON_OUT_CLOCK_EN, + + //derived parameters + localparam int ADDR = $clog2(DEPTH) +) ( + input wire clock, + //no reset + + //port a + input wire [ADDR-1:0] a_address, + input wire a_read_enable, + input wire a_write, + input wire [WIDTH-1:0] a_writedata, + input wire [BE_WIDTH-1:0] a_byteenable, + output logic [WIDTH-1:0] a_readdata, + input wire a_in_clock_en, + input wire a_out_clock_en, + + //port b + input wire [ADDR-1:0] b_address, + input wire b_read_enable, + input wire b_write, + input wire [WIDTH-1:0] b_writedata, + input wire [BE_WIDTH-1:0] b_byteenable, + output logic [WIDTH-1:0] b_readdata, + input wire b_in_clock_en, + input wire b_out_clock_en +); + + /////////////////////// + // Legality checks // + /////////////////////// + + generate + //depth must be a multiple of min physical depth, and depth can only be up to 3.5k since everything else must have been allocated to the top + `DLA_ACL_PARAMETER_ASSERT((DEPTH / MIN_PHYSICAL_DEPTH) * MIN_PHYSICAL_DEPTH == DEPTH) + `DLA_ACL_PARAMETER_ASSERT(DEPTH <= 7*MIN_PHYSICAL_DEPTH) + + //width / be_width must divide evenly with no remainder + `DLA_ACL_PARAMETER_ASSERT(WIDTH % BE_WIDTH == 0) + + //bits per enable must be 10, which enforces that width is a multiple of 10 + `DLA_ACL_PARAMETER_ASSERT((WIDTH/BE_WIDTH) == 10) + + //utilized width must be a multiple of 10 -- this layer only deals with depth 2k and shorter + `DLA_ACL_PARAMETER_ASSERT(UTILIZED_WIDTH % 10 == 0) + endgenerate + + + + ////////////////////////// + // Derived parameters // + ////////////////////////// + + //rules for depth stitching + localparam int TOP_DEPTH = (DEPTH >= 4*MIN_PHYSICAL_DEPTH) ? 4*MIN_PHYSICAL_DEPTH : 0; //top depth should be 2k, assuming min physical depth is 0.5k + localparam int MB_DEPTH = DEPTH - TOP_DEPTH; //leftover depth for middle and bottom + localparam int MID_DEPTH = (MB_DEPTH >= 2*MIN_PHYSICAL_DEPTH) ? 2*MIN_PHYSICAL_DEPTH : 0; //middle should be 1k, assuming min physical depth is 0.5k + localparam int BOT_DEPTH = MB_DEPTH - MID_DEPTH; //leftover depth for bottom, should be 0 or 0.5k + + //memory initialization file name modification + localparam TOP_MEM_INIT_NAME = {MEM_INIT_NAME, "t"}; + localparam MID_MEM_INIT_NAME = {MEM_INIT_NAME, "m"}; + localparam BOT_MEM_INIT_NAME = {MEM_INIT_NAME, "b"}; + + //avoid zero width signals + localparam int TOP_ADDR = (TOP_DEPTH <= 1) ? 1 : $clog2(TOP_DEPTH); + localparam int MID_ADDR = (MID_DEPTH <= 1) ? 1 : $clog2(MID_DEPTH); + localparam int BOT_ADDR = (BOT_DEPTH <= 1) ? 1 : $clog2(BOT_DEPTH); + + + + //////////////////// + // Depth stitch // + //////////////////// + + //based the depths of the sections (some depths can be 0), determine which section the address targets + //mask the write enable for all sections that the address does not target + //keep this decoding information live so that later when the read data arrives, know which section to consume read data from + + logic top_a_write, top_b_write; + logic mid_a_write, mid_b_write; + logic bot_a_write, bot_b_write; + logic [TOP_ADDR-1:0] top_a_address, top_b_address; + logic [MID_ADDR-1:0] mid_a_address, mid_b_address; + logic [BOT_ADDR-1:0] bot_a_address, bot_b_address; + logic [WIDTH-1:0] top_a_readdata, top_b_readdata; + logic [WIDTH-1:0] mid_a_readdata, mid_b_readdata; + logic [WIDTH-1:0] bot_a_readdata, bot_b_readdata; + logic top_a_read_enable; + logic mid_a_read_enable; + logic bot_a_read_enable; + logic top_b_read_enable; + logic mid_b_read_enable; + logic bot_b_read_enable; + + dla_hld_ram_generic_three_way_depth_stitch #( + .TOP_DEPTH (TOP_DEPTH), + .MID_DEPTH (MID_DEPTH), + .BOT_DEPTH (BOT_DEPTH), + .WIDTH (WIDTH), + .REGISTER_A_ADDRESS (1), + .REGISTER_B_ADDRESS (REGISTER_B_ADDRESS), + .REGISTER_A_READDATA (REGISTER_A_READDATA), + .REGISTER_B_READDATA (REGISTER_B_READDATA) + ) + dla_hld_ram_generic_three_way_depth_stitch_inst + ( + .clock (clock), + .a_address (a_address), + .a_read_enable (a_read_enable), + .a_write (a_write), + .a_in_clock_en (a_in_clock_en), + .a_out_clock_en (a_out_clock_en), + .top_a_address (top_a_address), + .mid_a_address (mid_a_address), + .bot_a_address (bot_a_address), + .top_a_read_enable (top_a_read_enable), + .mid_a_read_enable (mid_a_read_enable), + .bot_a_read_enable (bot_a_read_enable), + .top_a_write (top_a_write), + .mid_a_write (mid_a_write), + .bot_a_write (bot_a_write), + .top_a_readdata (top_a_readdata), + .mid_a_readdata (mid_a_readdata), + .bot_a_readdata (bot_a_readdata), + .a_readdata (a_readdata), + .b_address (b_address), + .b_read_enable (b_read_enable), + .b_write (b_write), + .b_in_clock_en (b_in_clock_en), + .b_out_clock_en (b_out_clock_en), + .top_b_address (top_b_address), + .mid_b_address (mid_b_address), + .bot_b_address (bot_b_address), + .top_b_read_enable (top_b_read_enable), + .mid_b_read_enable (mid_b_read_enable), + .bot_b_read_enable (bot_b_read_enable), + .top_b_write (top_b_write), + .mid_b_write (mid_b_write), + .bot_b_write (bot_b_write), + .top_b_readdata (top_b_readdata), + .mid_b_readdata (mid_b_readdata), + .bot_b_readdata (bot_b_readdata), + .b_readdata (b_readdata) + ); + + + + ///////////////////////////////////////////////// + // Next layer in the instantiation hierarchy // + ///////////////////////////////////////////////// + + //imitate the query functions in the software model + // synthesis translate_off + int NUM_PHYSICAL_M20K, NUM_PHYSICAL_MLAB; + int TOP_NUM_PHYSICAL_M20K, TOP_NUM_PHYSICAL_MLAB; + int MID_NUM_PHYSICAL_M20K, MID_NUM_PHYSICAL_MLAB; + int BOT_NUM_PHYSICAL_M20K, BOT_NUM_PHYSICAL_MLAB; + assign NUM_PHYSICAL_M20K = TOP_NUM_PHYSICAL_M20K + MID_NUM_PHYSICAL_M20K + BOT_NUM_PHYSICAL_M20K; + assign NUM_PHYSICAL_MLAB = TOP_NUM_PHYSICAL_MLAB + MID_NUM_PHYSICAL_MLAB + BOT_NUM_PHYSICAL_MLAB; + // synthesis translate_on + + generate + if (TOP_DEPTH) begin : GEN_TOP + dla_hld_ram_lower + #( + .DEPTH (TOP_DEPTH), //changed + .WIDTH (WIDTH), + .BE_WIDTH (BE_WIDTH), + .UTILIZED_WIDTH (UTILIZED_WIDTH), + .MINIMIZE_MEMORY_USAGE (MINIMIZE_MEMORY_USAGE), + .MIN_PHYSICAL_DEPTH (MIN_PHYSICAL_DEPTH), + .USE_MEM_INIT_FILE (USE_MEM_INIT_FILE), + .ZERO_INITIALIZE_MEM (ZERO_INITIALIZE_MEM), + .MEM_INIT_NAME (TOP_MEM_INIT_NAME), //changed + .RAM_BLOCK_TYPE (RAM_BLOCK_TYPE), + .RAM_OPERATION_MODE (RAM_OPERATION_MODE), + .DEVICE_FAMILY (DEVICE_FAMILY), + .READ_DURING_WRITE (READ_DURING_WRITE), + .REGISTER_A_READDATA (REGISTER_A_READDATA), + .REGISTER_B_ADDRESS (REGISTER_B_ADDRESS), + .REGISTER_B_READDATA (REGISTER_B_READDATA), + .USE_ENABLE (USE_ENABLE), + .COMMON_IN_CLOCK_EN (COMMON_IN_CLOCK_EN), + .COMMON_OUT_CLOCK_EN (COMMON_OUT_CLOCK_EN) + ) + dla_hld_ram_lower_inst + ( + .clock (clock), + .a_address (top_a_address), //changed + .a_read_enable (top_a_read_enable), //changed + .a_write (top_a_write), //changed + .a_writedata (a_writedata), + .a_byteenable (a_byteenable), + .a_readdata (top_a_readdata), //changed + .a_in_clock_en (a_in_clock_en), + .a_out_clock_en (a_out_clock_en), + .b_address (top_b_address), //changed + .b_read_enable (top_b_read_enable), //changed + .b_write (top_b_write), //changed + .b_writedata (b_writedata), + .b_byteenable (b_byteenable), + .b_readdata (top_b_readdata), //changed + .b_in_clock_en (b_in_clock_en), + .b_out_clock_en (b_out_clock_en) + ); + + // synthesis translate_off + assign TOP_NUM_PHYSICAL_M20K = dla_hld_ram_lower_inst.NUM_PHYSICAL_M20K; + assign TOP_NUM_PHYSICAL_MLAB = dla_hld_ram_lower_inst.NUM_PHYSICAL_MLAB; + // synthesis translate_on + end + else begin : NO_TOP + // synthesis translate_off + assign TOP_NUM_PHYSICAL_M20K = 0; + assign TOP_NUM_PHYSICAL_MLAB = 0; + // synthesis translate_on + end + endgenerate + + + generate + if (MID_DEPTH) begin : GEN_MID + dla_hld_ram_lower + #( + .DEPTH (MID_DEPTH), //changed + .WIDTH (WIDTH), + .BE_WIDTH (BE_WIDTH), + .UTILIZED_WIDTH (UTILIZED_WIDTH), + .MINIMIZE_MEMORY_USAGE (MINIMIZE_MEMORY_USAGE), + .MIN_PHYSICAL_DEPTH (MIN_PHYSICAL_DEPTH), + .USE_MEM_INIT_FILE (USE_MEM_INIT_FILE), + .ZERO_INITIALIZE_MEM (ZERO_INITIALIZE_MEM), + .MEM_INIT_NAME (MID_MEM_INIT_NAME), //changed + .RAM_BLOCK_TYPE (RAM_BLOCK_TYPE), + .RAM_OPERATION_MODE (RAM_OPERATION_MODE), + .DEVICE_FAMILY (DEVICE_FAMILY), + .READ_DURING_WRITE (READ_DURING_WRITE), + .REGISTER_A_READDATA (REGISTER_A_READDATA), + .REGISTER_B_ADDRESS (REGISTER_B_ADDRESS), + .REGISTER_B_READDATA (REGISTER_B_READDATA), + .USE_ENABLE (USE_ENABLE), + .COMMON_IN_CLOCK_EN (COMMON_IN_CLOCK_EN), + .COMMON_OUT_CLOCK_EN (COMMON_OUT_CLOCK_EN) + ) + dla_hld_ram_lower_inst + ( + .clock (clock), + .a_address (mid_a_address), //changed + .a_read_enable (mid_a_read_enable), //changed + .a_write (mid_a_write), //changed + .a_writedata (a_writedata), + .a_byteenable (a_byteenable), + .a_readdata (mid_a_readdata), //changed + .a_in_clock_en (a_in_clock_en), + .a_out_clock_en (a_out_clock_en), + .b_address (mid_b_address), //changed + .b_read_enable (mid_b_read_enable), //changed + .b_write (mid_b_write), //changed + .b_writedata (b_writedata), + .b_byteenable (b_byteenable), + .b_readdata (mid_b_readdata), //changed + .b_in_clock_en (b_in_clock_en), + .b_out_clock_en (b_out_clock_en) + ); + + // synthesis translate_off + assign MID_NUM_PHYSICAL_M20K = dla_hld_ram_lower_inst.NUM_PHYSICAL_M20K; + assign MID_NUM_PHYSICAL_MLAB = dla_hld_ram_lower_inst.NUM_PHYSICAL_MLAB; + // synthesis translate_on + end + else begin : NO_MID + // synthesis translate_off + assign MID_NUM_PHYSICAL_M20K = 0; + assign MID_NUM_PHYSICAL_MLAB = 0; + // synthesis translate_on + end + endgenerate + + + generate + if (BOT_DEPTH) begin : GEN_BOT + dla_hld_ram_lower + #( + .DEPTH (BOT_DEPTH), //changed + .WIDTH (WIDTH), + .BE_WIDTH (BE_WIDTH), + .UTILIZED_WIDTH (UTILIZED_WIDTH), + .MINIMIZE_MEMORY_USAGE (MINIMIZE_MEMORY_USAGE), + .MIN_PHYSICAL_DEPTH (MIN_PHYSICAL_DEPTH), + .USE_MEM_INIT_FILE (USE_MEM_INIT_FILE), + .ZERO_INITIALIZE_MEM (ZERO_INITIALIZE_MEM), + .MEM_INIT_NAME (BOT_MEM_INIT_NAME), //changed + .RAM_BLOCK_TYPE (RAM_BLOCK_TYPE), + .RAM_OPERATION_MODE (RAM_OPERATION_MODE), + .DEVICE_FAMILY (DEVICE_FAMILY), + .READ_DURING_WRITE (READ_DURING_WRITE), + .REGISTER_A_READDATA (REGISTER_A_READDATA), + .REGISTER_B_ADDRESS (REGISTER_B_ADDRESS), + .REGISTER_B_READDATA (REGISTER_B_READDATA), + .USE_ENABLE (USE_ENABLE), + .COMMON_IN_CLOCK_EN (COMMON_IN_CLOCK_EN), + .COMMON_OUT_CLOCK_EN (COMMON_OUT_CLOCK_EN) + ) + dla_hld_ram_lower_inst + ( + .clock (clock), + .a_address (bot_a_address), //changed + .a_read_enable (bot_a_read_enable), //changed + .a_write (bot_a_write), //changed + .a_writedata (a_writedata), + .a_byteenable (a_byteenable), + .a_readdata (bot_a_readdata), //changed + .a_in_clock_en (a_in_clock_en), + .a_out_clock_en (a_out_clock_en), + .b_address (bot_b_address), //changed + .b_read_enable (bot_b_read_enable), //changed + .b_write (bot_b_write), //changed + .b_writedata (b_writedata), + .b_byteenable (b_byteenable), + .b_readdata (bot_b_readdata), //changed + .b_in_clock_en (b_in_clock_en), + .b_out_clock_en (b_out_clock_en) + ); + + // synthesis translate_off + assign BOT_NUM_PHYSICAL_M20K = dla_hld_ram_lower_inst.NUM_PHYSICAL_M20K; + assign BOT_NUM_PHYSICAL_MLAB = dla_hld_ram_lower_inst.NUM_PHYSICAL_MLAB; + // synthesis translate_on + end + else begin : NO_BOT + // synthesis translate_off + assign BOT_NUM_PHYSICAL_M20K = 0; + assign BOT_NUM_PHYSICAL_MLAB = 0; + // synthesis translate_on + end + endgenerate + +endmodule + +`default_nettype wire diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram_bottom_width_stitch.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram_bottom_width_stitch.sv new file mode 100644 index 0000000..4c9313e --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram_bottom_width_stitch.sv @@ -0,0 +1,296 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +//see dla_hld_ram.sv for a description of the parameters, ports, and general functionality of all the dla_hld_ram layers + +//now that top and bottom have already been depth stitched, bottom depth is limited to 3.5k +//complete groups of width 40 (and sometimes width 20) should depth stitch to minimize the number of physical memories +//leftover width is not wide enough to save physical memories, so don't depth stitch since that requires extra glue logic for the read data mux +//this layer splits the width into complete groups that will depth stitch, and the leftover width that will not depth stitch + +`default_nettype none + +`include "dla_acl_parameter_assert.svh" + +module dla_hld_ram_bottom_width_stitch #( + //geometry configuration + parameter int DEPTH, + parameter int WIDTH, + parameter int BE_WIDTH, + parameter int UTILIZED_WIDTH, + + //geometry constants + parameter bit MINIMIZE_MEMORY_USAGE, + parameter int MIN_PHYSICAL_DEPTH, + + //memory initialization + parameter bit USE_MEM_INIT_FILE, + parameter bit ZERO_INITIALIZE_MEM, + parameter MEM_INIT_NAME, + + //memory configuration + parameter RAM_BLOCK_TYPE, + parameter RAM_OPERATION_MODE, + parameter DEVICE_FAMILY, + parameter READ_DURING_WRITE, + parameter bit REGISTER_A_READDATA, + parameter bit REGISTER_B_ADDRESS, + parameter bit REGISTER_B_READDATA, + + //try to use memory hardened logic + parameter bit USE_ENABLE, + parameter bit COMMON_IN_CLOCK_EN, + parameter bit COMMON_OUT_CLOCK_EN, + + //derived parameters + localparam int ADDR = $clog2(DEPTH) +) ( + input wire clock, + //no reset + + //port a + input wire [ADDR-1:0] a_address, + input wire a_read_enable, + input wire a_write, + input wire [WIDTH-1:0] a_writedata, + input wire [BE_WIDTH-1:0] a_byteenable, + output logic [WIDTH-1:0] a_readdata, + input wire a_in_clock_en, + input wire a_out_clock_en, + + //port b + input wire [ADDR-1:0] b_address, + input wire b_read_enable, + input wire b_write, + input wire [WIDTH-1:0] b_writedata, + input wire [BE_WIDTH-1:0] b_byteenable, + output logic [WIDTH-1:0] b_readdata, + input wire b_in_clock_en, + input wire b_out_clock_en +); + + /////////////////////// + // Legality checks // + /////////////////////// + + generate + //depth must be a multiple of min physical depth, and depth can only be up to 3.5k since everything else must have been allocated to the top + `DLA_ACL_PARAMETER_ASSERT((DEPTH / MIN_PHYSICAL_DEPTH) * MIN_PHYSICAL_DEPTH == DEPTH) + `DLA_ACL_PARAMETER_ASSERT(DEPTH <= 7*MIN_PHYSICAL_DEPTH) + + //width / be_width must divide evenly with no remainder + `DLA_ACL_PARAMETER_ASSERT(WIDTH % BE_WIDTH == 0) + + //bits per enable must be 10, which enforces that width is a multiple of 10 + `DLA_ACL_PARAMETER_ASSERT((WIDTH/BE_WIDTH) == 10) + + //utilized width must be a multiple of 10 -- there is never a use-case for 4k x 5 by itself (however 4k x 10 is used) in the bottom half, a single 4k x 5 would have been dealt with by the remaining width layer + `DLA_ACL_PARAMETER_ASSERT(UTILIZED_WIDTH % 10 == 0) + endgenerate + + + + /////////////////////////////////// + // Summary of the bottom rules // + /////////////////////////////////// + + //to understand how these rules were created, refer to: //depot/docs/hld/ip/dla_hld_ram introduction algorithm convergence.pptx + //if true dual port, then depth has been quantized to 1K, so TYPE will be even + + // DEPTH | TYPE | strategy + // ------+------+----------------------------------------------------------------------------------------------- + // 0.5K | 1 | none, this is a power of 2 + // 1K | 2 | none, this is a power of 2 + // 1.5K | 3 | every complete width of 40 uses depth 1K+0.5K, leftover width uses depth 2K + // 2K | 4 | none, this is a power of 2 + // 2.5K | 5 | every complete width of 40 uses depth 2K+0.5K, if leftover width is 20 or 30 then also use this depth stitch, else use depth 4K + // 3K | 6 | every complete width of 20 uses depth 2K+1K, leftover width uses depth 4K + // 3.5K | 7 | every complete width of 40 uses depth 2K+1K+0.5K, leftover width uses depth 4K + + //this layer deals with the splitting of complete width groups vs leftover width + //left side gets the full width groups and therefore implements the depth stitch + //right side gets the leftover width and uses a power of 2 depth + + + ////////////////////////// + // Derived parameters // + ////////////////////////// + + localparam int TYPE = DEPTH / MIN_PHYSICAL_DEPTH; + + //for each depth category, calculate how much width should be allocated to the right side + localparam int RIGHT_WIDTH_TYPE_1_2_4 = WIDTH; //if bottom depth is a power of 2, right side gets all the width, don't use left side which implements the depth stitch + localparam int RIGHT_WIDTH_TYPE_6 = WIDTH % 20; //if depth 3k, right side gets leftover width after extracting complete groups of 20 + localparam int RIGHT_WIDTH_TYPE_3_7 = WIDTH % 40; //if depth 1.5k or 3.5k, right side gets leftover width after extracting complete groups of 40 + localparam int RIGHT_WIDTH_TYPE_5 = ((WIDTH % 40) == 10) ? 10 : 0; //if depth 5k, right side gets leftover width only if it is 10, else leftover width is 0, 20, or 30 so all width goes to left side depth stitch + + //right side gets the leftover width and uses a power of 2 depth, left side gets the full width groups and therefore implements the depth stitch + localparam int RIGHT_WIDTH = (TYPE==1 || TYPE==2 || TYPE==4) ? RIGHT_WIDTH_TYPE_1_2_4 : (TYPE==6) ? RIGHT_WIDTH_TYPE_6 : (TYPE==3 || TYPE==7) ? RIGHT_WIDTH_TYPE_3_7 : RIGHT_WIDTH_TYPE_5; + localparam int LEFT_WIDTH = WIDTH - RIGHT_WIDTH; + + //for next layer in the instantiation hierarchy + localparam int RIGHT_BE_WIDTH = RIGHT_WIDTH / 10; + localparam int LEFT_BE_WIDTH = BE_WIDTH - RIGHT_BE_WIDTH; + localparam RIGHT_MEM_INIT_NAME = {MEM_INIT_NAME, "r"}; + localparam LEFT_MEM_INIT_NAME = {MEM_INIT_NAME, "l"}; + localparam int RIGHT_DEPTH = 1 << $clog2(DEPTH); //round up to nearest power of 2 + localparam int RIGHT_UTILIZED_WIDTH = RIGHT_WIDTH; + localparam int LEFT_UTILIZED_WIDTH = LEFT_WIDTH; + + + + ///////////////////////////////////////////////// + // Next layer in the instantiation hierarchy // + ///////////////////////////////////////////////// + + //imitate the query functions in the software model + // synthesis translate_off + int NUM_PHYSICAL_M20K, NUM_PHYSICAL_MLAB; + int RIGHT_NUM_PHYSICAL_M20K, RIGHT_NUM_PHYSICAL_MLAB; + int LEFT_NUM_PHYSICAL_M20K, LEFT_NUM_PHYSICAL_MLAB; + assign NUM_PHYSICAL_M20K = RIGHT_NUM_PHYSICAL_M20K + LEFT_NUM_PHYSICAL_M20K; + assign NUM_PHYSICAL_MLAB = RIGHT_NUM_PHYSICAL_MLAB + LEFT_NUM_PHYSICAL_MLAB; + // synthesis translate_on + + generate + if (RIGHT_WIDTH) begin : GEN_RIGHT + //determine the range of the width to use for data and byte enable + localparam int HI = RIGHT_WIDTH - 1; + localparam int LO = 0; + localparam int HI_BE = RIGHT_BE_WIDTH - 1; + localparam int LO_BE = 0; + + dla_hld_ram_lower + #( + .DEPTH (RIGHT_DEPTH), //changed, beware that left side does not change depth + .WIDTH (RIGHT_WIDTH), //changed + .BE_WIDTH (RIGHT_BE_WIDTH), //changed + .UTILIZED_WIDTH (RIGHT_UTILIZED_WIDTH), //changed + .MINIMIZE_MEMORY_USAGE (MINIMIZE_MEMORY_USAGE), + .MIN_PHYSICAL_DEPTH (MIN_PHYSICAL_DEPTH), + .USE_MEM_INIT_FILE (USE_MEM_INIT_FILE), + .ZERO_INITIALIZE_MEM (ZERO_INITIALIZE_MEM), + .MEM_INIT_NAME (RIGHT_MEM_INIT_NAME), //changed + .RAM_BLOCK_TYPE (RAM_BLOCK_TYPE), + .RAM_OPERATION_MODE (RAM_OPERATION_MODE), + .DEVICE_FAMILY (DEVICE_FAMILY), + .READ_DURING_WRITE (READ_DURING_WRITE), + .REGISTER_A_READDATA (REGISTER_A_READDATA), + .REGISTER_B_ADDRESS (REGISTER_B_ADDRESS), + .REGISTER_B_READDATA (REGISTER_B_READDATA), + .USE_ENABLE (USE_ENABLE), + .COMMON_IN_CLOCK_EN (COMMON_IN_CLOCK_EN), + .COMMON_OUT_CLOCK_EN (COMMON_OUT_CLOCK_EN) + ) + dla_hld_ram_lower_inst + ( + .clock (clock), + .a_address (a_address), + .a_read_enable (a_read_enable), + .a_write (a_write), + .a_writedata (a_writedata[HI:LO]), //changed + .a_byteenable (a_byteenable[HI_BE:LO_BE]), //changed + .a_readdata (a_readdata[HI:LO]), //changed + .a_in_clock_en (a_in_clock_en), + .a_out_clock_en (a_out_clock_en), + .b_address (b_address), + .b_read_enable (b_read_enable), + .b_write (b_write), + .b_writedata (b_writedata[HI:LO]), //changed + .b_byteenable (b_byteenable[HI_BE:LO_BE]), //changed + .b_readdata (b_readdata[HI:LO]), //changed + .b_in_clock_en (b_in_clock_en), + .b_out_clock_en (b_out_clock_en) + ); + + // synthesis translate_off + assign RIGHT_NUM_PHYSICAL_M20K = dla_hld_ram_lower_inst.NUM_PHYSICAL_M20K; + assign RIGHT_NUM_PHYSICAL_MLAB = dla_hld_ram_lower_inst.NUM_PHYSICAL_MLAB; + // synthesis translate_on + end + else begin : NO_RIGHT + // synthesis translate_off + assign RIGHT_NUM_PHYSICAL_M20K = 0; + assign RIGHT_NUM_PHYSICAL_MLAB = 0; + // synthesis translate_on + end + endgenerate + + + generate + if (LEFT_WIDTH) begin : GEN_LEFT + //determine the range of the width to use for data and byte enable + localparam int HI = WIDTH - 1; + localparam int LO = RIGHT_WIDTH; + localparam int HI_BE = BE_WIDTH - 1; + localparam int LO_BE = RIGHT_BE_WIDTH; + + dla_hld_ram_bottom_depth_stitch + #( + .DEPTH (DEPTH), //unlike right side this does NOT change + .WIDTH (LEFT_WIDTH), //changed + .BE_WIDTH (LEFT_BE_WIDTH), //changed + .UTILIZED_WIDTH (LEFT_UTILIZED_WIDTH), //changed + .MINIMIZE_MEMORY_USAGE (MINIMIZE_MEMORY_USAGE), + .MIN_PHYSICAL_DEPTH (MIN_PHYSICAL_DEPTH), + .USE_MEM_INIT_FILE (USE_MEM_INIT_FILE), + .ZERO_INITIALIZE_MEM (ZERO_INITIALIZE_MEM), + .MEM_INIT_NAME (LEFT_MEM_INIT_NAME), //changed + .RAM_BLOCK_TYPE (RAM_BLOCK_TYPE), + .RAM_OPERATION_MODE (RAM_OPERATION_MODE), + .DEVICE_FAMILY (DEVICE_FAMILY), + .READ_DURING_WRITE (READ_DURING_WRITE), + .REGISTER_A_READDATA (REGISTER_A_READDATA), + .REGISTER_B_ADDRESS (REGISTER_B_ADDRESS), + .REGISTER_B_READDATA (REGISTER_B_READDATA), + .USE_ENABLE (USE_ENABLE), + .COMMON_IN_CLOCK_EN (COMMON_IN_CLOCK_EN), + .COMMON_OUT_CLOCK_EN (COMMON_OUT_CLOCK_EN) + ) + dla_hld_ram_bottom_depth_stitch_inst + ( + .clock (clock), + .a_address (a_address), + .a_read_enable (a_read_enable), + .a_write (a_write), + .a_writedata (a_writedata[HI:LO]), //changed + .a_byteenable (a_byteenable[HI_BE:LO_BE]), //changed + .a_readdata (a_readdata[HI:LO]), //changed + .a_in_clock_en (a_in_clock_en), + .a_out_clock_en (a_out_clock_en), + .b_address (b_address), + .b_read_enable (b_read_enable), + .b_write (b_write), + .b_writedata (b_writedata[HI:LO]), //changed + .b_byteenable (b_byteenable[HI_BE:LO_BE]), //changed + .b_readdata (b_readdata[HI:LO]), //changed + .b_in_clock_en (b_in_clock_en), + .b_out_clock_en (b_out_clock_en) + ); + + // synthesis translate_off + assign LEFT_NUM_PHYSICAL_M20K = dla_hld_ram_bottom_depth_stitch_inst.NUM_PHYSICAL_M20K; + assign LEFT_NUM_PHYSICAL_MLAB = dla_hld_ram_bottom_depth_stitch_inst.NUM_PHYSICAL_MLAB; + // synthesis translate_on + end + else begin : NO_LEFT + // synthesis translate_off + assign LEFT_NUM_PHYSICAL_M20K = 0; + assign LEFT_NUM_PHYSICAL_MLAB = 0; + // synthesis translate_on + end + endgenerate + +endmodule + +`default_nettype wire diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram_ecc.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram_ecc.sv new file mode 100644 index 0000000..4f9289e --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram_ecc.sv @@ -0,0 +1,403 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +//see dla_hld_ram.sv for a description of the parameters, ports, and general functionality of all the dla_hld_ram layers + +//this layer is adds error correction codes, specifically single error correct double error detect hamming codes + +`default_nettype none + +`include "dla_acl_parameter_assert.svh" + +module dla_hld_ram_ecc +import dla_acl_ecc_pkg::*; +#( + //geometry configuration + parameter int DEPTH, + parameter int WIDTH, + parameter int BE_WIDTH, + + //geometry constants + parameter bit MINIMIZE_MEMORY_USAGE, + parameter int MIN_PHYSICAL_DEPTH, + + //memory initialization + parameter bit USE_MEM_INIT_FILE, + parameter bit ZERO_INITIALIZE_MEM, + parameter MEM_INIT_NAME, + + //error correction codes -- these parameters are consumed at this layer, layers below do not have them + parameter bit ENABLE_ECC, + parameter bit ECC_STATUS_TIME_STRETCH, + parameter bit ASYNC_RESET, + parameter bit SYNCHRONIZE_RESET, + + //memory configuration + parameter RAM_BLOCK_TYPE, + parameter RAM_OPERATION_MODE, + parameter DEVICE_FAMILY, + parameter READ_DURING_WRITE, + parameter bit REGISTER_A_READDATA, + parameter bit REGISTER_B_ADDRESS, + parameter bit REGISTER_B_READDATA, + + //try to use memory hardened logic + parameter bit USE_ENABLE, + parameter bit COMMON_IN_CLOCK_EN, + parameter bit COMMON_OUT_CLOCK_EN, + + //derived parameters + localparam int ADDR = $clog2(DEPTH) +) ( + input wire clock, + + //port a + input wire [ADDR-1:0] a_address, + input wire a_write, + input wire [WIDTH-1:0] a_writedata, + input wire [BE_WIDTH-1:0] a_byteenable, + output logic [WIDTH-1:0] a_readdata, + input wire a_in_clock_en, + input wire a_out_clock_en, + input wire a_read_enable, + + //port b + input wire [ADDR-1:0] b_address, + input wire b_write, + input wire [WIDTH-1:0] b_writedata, + input wire [BE_WIDTH-1:0] b_byteenable, + output logic [WIDTH-1:0] b_readdata, + input wire b_in_clock_en, + input wire b_out_clock_en, + input wire b_read_enable, + + //error correction code -- these signals are consumed at this layer, layers below do not have them + input wire resetn, + output logic [1:0] ecc_err_status +); + + /////////////////////// + // Legality checks // + /////////////////////// + + generate + //width / be_width must divide evenly with no remainder + `DLA_ACL_PARAMETER_ASSERT(WIDTH % BE_WIDTH == 0) + endgenerate + + + + ////////////////////////// + // Derived parameters // + ////////////////////////// + + //note: the max group size of 32 has been deliberately chosen, after encoding this expands to 39 bits which maps nicely to the physical width of m20k and mlab + + localparam int BITS_PER_ENABLE = WIDTH / BE_WIDTH; //how many bits of data are controlled by each byte enable signal, typically we think of this as 8 but really can be any value + localparam int MAX_ECC_GROUP_SIZE = 32; //if data is wide, slice into smaller sections and encode each section independently, limit the xor network size to maintain high fmax + localparam int ECC_GROUP_SIZE = (BITS_PER_ENABLE > MAX_ECC_GROUP_SIZE) ? MAX_ECC_GROUP_SIZE : BITS_PER_ENABLE; //cannot jointly encode data from different byte enable groups + localparam int ENCODED_BITS_PER_ENABLE = (ENABLE_ECC) ? getEncodedBitsEccGroup(BITS_PER_ENABLE, ECC_GROUP_SIZE) : BITS_PER_ENABLE; //how many encoded bits of data are controlled by each byte enable signal + localparam int ENCODED_WIDTH = ENCODED_BITS_PER_ENABLE * BE_WIDTH; //total data width after encoding + + + + //////////////////////////////////////////////////////////////// + // Encode the write data, respecting byte enable boundaries // + //////////////////////////////////////////////////////////////// + + genvar g; + logic [ENCODED_WIDTH-1:0] encoded_a_writedata, encoded_b_writedata; + logic [ENCODED_WIDTH-1:0] encoded_a_readdata, encoded_b_readdata; + logic [ENCODED_WIDTH-1:0] encoded_a_readdata_raw, encoded_b_readdata_raw; + + generate + if (ENABLE_ECC) begin : ECC_ENCODE + //each byte enable signal controls BITS_PER_ENABLE bits of the data path, to respect this boundary never ecc encode across different groups + //it is possible that the group could be large, so we would want multiple ecc encoders within that group to limit the size of the xor network + //dla_acl_ecc_encoder already does that for us, however we may need non-uniform slicing, so we still have to deal with that here + + //example scenario, suppose WIDTH = 98 and BE_WIDTH = 2, therefore BITS_PER_ENABLE = 49 + //given that MAX_ECC_GROUP_SIZE = 32, this is how the data should be sliced up: + //dla_acl_ecc_encoder instance 0 -- ecc instance 0 handles bits 31:0, ecc instance 1 handles bits 48:32 + //dla_acl_ecc_encoder instance 1 -- ecc instance 0 handles bits 80:49, ecc instance 1 handles bits 97:81 + + //the above layout cannot be achieved with only one instance of dla_acl_ecc_encoder, there is no way to alternate between slicing 32 and 17 bits + + for (g=0; g<BE_WIDTH; g++) begin + dla_acl_ecc_encoder + #( + .DATA_WIDTH (BITS_PER_ENABLE), + .ECC_GROUP_SIZE (ECC_GROUP_SIZE), + .INPUT_PIPELINE_STAGES (0), //must use zero latency to maintain the conceptual clock enable model of dla_hld_ram + .OUTPUT_PIPELINE_STAGES (0) //likewise as above + ) + dla_acl_ecc_encoder_inst_a + ( + .clock (clock), //this currently has no effect since the number of pipeline stages is 0 + .clock_enable (1'b1), //this currently has no effect since the number of pipeline stages is 0 + .i_data (a_writedata[g*BITS_PER_ENABLE +: BITS_PER_ENABLE]), + .o_encoded (encoded_a_writedata[g*ENCODED_BITS_PER_ENABLE +: ENCODED_BITS_PER_ENABLE]) + ); + + dla_acl_ecc_encoder + #( + .DATA_WIDTH (BITS_PER_ENABLE), + .ECC_GROUP_SIZE (ECC_GROUP_SIZE), + .INPUT_PIPELINE_STAGES (0), + .OUTPUT_PIPELINE_STAGES (0) + ) + dla_acl_ecc_encoder_inst_b + ( + .clock (clock), + .clock_enable (1'b1), + .i_data (b_writedata[g*BITS_PER_ENABLE +: BITS_PER_ENABLE]), + .o_encoded (encoded_b_writedata[g*ENCODED_BITS_PER_ENABLE +: ENCODED_BITS_PER_ENABLE]) + ); + end + end + else begin : NO_ENCODE + assign encoded_a_writedata = a_writedata; + assign encoded_b_writedata = b_writedata; + end + endgenerate + + + + ///////////////////////////////////////////////// + // Next layer in the instantiation hierarchy // + ///////////////////////////////////////////////// + + dla_hld_ram_tall_depth_stitch + #( + .DEPTH (DEPTH), + .WIDTH (ENCODED_WIDTH), //changed + .BE_WIDTH (BE_WIDTH), + .MINIMIZE_MEMORY_USAGE (MINIMIZE_MEMORY_USAGE), + .MIN_PHYSICAL_DEPTH (MIN_PHYSICAL_DEPTH), + .USE_MEM_INIT_FILE (USE_MEM_INIT_FILE), + .ZERO_INITIALIZE_MEM (ZERO_INITIALIZE_MEM), + .MEM_INIT_NAME (MEM_INIT_NAME), + .RAM_BLOCK_TYPE (RAM_BLOCK_TYPE), + .RAM_OPERATION_MODE (RAM_OPERATION_MODE), + .DEVICE_FAMILY (DEVICE_FAMILY), + .READ_DURING_WRITE (READ_DURING_WRITE), + .REGISTER_A_READDATA (REGISTER_A_READDATA), + .REGISTER_B_ADDRESS (REGISTER_B_ADDRESS), + .REGISTER_B_READDATA (REGISTER_B_READDATA), + .USE_ENABLE (USE_ENABLE), + .COMMON_IN_CLOCK_EN (COMMON_IN_CLOCK_EN), + .COMMON_OUT_CLOCK_EN (COMMON_OUT_CLOCK_EN) + ) + dla_hld_ram_tall_depth_stitch_inst + ( + .clock (clock), + .a_address (a_address), + .a_write (a_write), + .a_writedata (encoded_a_writedata), //changed + .a_byteenable (a_byteenable), + .a_readdata (encoded_a_readdata_raw), //changed + .a_in_clock_en (a_in_clock_en), + .a_out_clock_en (a_out_clock_en), + .a_read_enable (a_read_enable), + .b_address (b_address), + .b_write (b_write), + .b_writedata (encoded_b_writedata), //changed + .b_byteenable (b_byteenable), + .b_readdata (encoded_b_readdata_raw), //changed + .b_in_clock_en (b_in_clock_en), + .b_out_clock_en (b_out_clock_en), + .b_read_enable (b_read_enable) + ); + + //imitate the query functions in the software model + // synthesis translate_off + int NUM_PHYSICAL_M20K, NUM_PHYSICAL_MLAB; + assign NUM_PHYSICAL_M20K = dla_hld_ram_tall_depth_stitch_inst.NUM_PHYSICAL_M20K; + assign NUM_PHYSICAL_MLAB = dla_hld_ram_tall_depth_stitch_inst.NUM_PHYSICAL_MLAB; + // synthesis translate_on + + + + //////////////////////////////// + // Sim-only error injection // + //////////////////////////////// + + //leave a hook for injecting errors into the read data, intended for simulation only + logic [ENCODED_WIDTH-1:0] SIM_ONLY_a_inject_error, SIM_ONLY_b_inject_error; + assign SIM_ONLY_a_inject_error = 0; //these signals are forced by the testbench + assign SIM_ONLY_b_inject_error = 0; + assign encoded_a_readdata = encoded_a_readdata_raw ^ SIM_ONLY_a_inject_error; + assign encoded_b_readdata = encoded_b_readdata_raw ^ SIM_ONLY_b_inject_error; + + + + /////////////////////////////////////////////////////////// + // Decode the read data and produce ECC status signals // + /////////////////////////////////////////////////////////// + + localparam bit CONNECT_A_READDATA_TO_ECC = RAM_OPERATION_MODE == "TRUE_DUAL_PORT"; //ignore port a read data if simple dual port + + generate + if (ENABLE_ECC) begin : ECC_DECODE + logic [BE_WIDTH-1:0] a_single_error, a_double_error; + logic [BE_WIDTH-1:0] b_single_error, b_double_error; + logic any_single_error, any_double_error; + + for (g=0; g<BE_WIDTH; g++) begin + if (CONNECT_A_READDATA_TO_ECC) begin + dla_acl_ecc_decoder + #( + .DATA_WIDTH (BITS_PER_ENABLE), + .ECC_GROUP_SIZE (ECC_GROUP_SIZE), + .INPUT_PIPELINE_STAGES (0), //must use zero latency to maintain the conceptual clock enable model of dla_hld_ram + .OUTPUT_PIPELINE_STAGES (0), //likewise as above + .STATUS_PIPELINE_STAGES (0) //likewise as above + ) + dla_acl_ecc_decoder_inst_a + ( + .clock (clock), //this currently has no effect since the number of pipeline stages is 0 + .clock_enable (1'b1), //this currently has no effect since the number of pipeline stages is 0 + .i_encoded (encoded_a_readdata[g*ENCODED_BITS_PER_ENABLE +: ENCODED_BITS_PER_ENABLE]), + .o_data (a_readdata[g*BITS_PER_ENABLE +: BITS_PER_ENABLE]), + .o_single_error_corrected (a_single_error[g]), + .o_double_error_detected (a_double_error[g]) + ); + end + else begin + assign a_readdata[g*BITS_PER_ENABLE +: BITS_PER_ENABLE] = 'x; + assign a_single_error[g] = '0; + assign a_double_error[g] = '0; + end + + dla_acl_ecc_decoder + #( + .DATA_WIDTH (BITS_PER_ENABLE), + .ECC_GROUP_SIZE (ECC_GROUP_SIZE), + .INPUT_PIPELINE_STAGES (0), + .OUTPUT_PIPELINE_STAGES (0), + .STATUS_PIPELINE_STAGES (0) + ) + dla_acl_ecc_decoder_inst_b + ( + .clock (clock), + .clock_enable (1'b1), + .i_encoded (encoded_b_readdata[g*ENCODED_BITS_PER_ENABLE +: ENCODED_BITS_PER_ENABLE]), + .o_data (b_readdata[g*BITS_PER_ENABLE +: BITS_PER_ENABLE]), + .o_single_error_corrected (b_single_error[g]), + .o_double_error_detected (b_double_error[g]) + ); + end + + assign any_single_error = (|a_single_error) | (|b_single_error); + assign any_double_error = (|a_double_error) | (|b_double_error); + + if (ECC_STATUS_TIME_STRETCH) begin + dla_hld_ram_ecc_pulse_stretch_and_sticky #( + .ASYNC_RESET (ASYNC_RESET), + .SYNCHRONIZE_RESET (SYNCHRONIZE_RESET), + .SINGLE_ERROR_PULSE_STRETCH (3) //this is existing behavior from dla_acl_altera_syncram_wrapped + ) + dla_hld_ram_ecc_pulse_stretch_and_sticky_inst + ( + .clock (clock), + .resetn (resetn), + .i_single_error_corrected (any_single_error), + .i_double_error_detected (any_double_error), + .o_ecc_err_status (ecc_err_status) + ); + end + else begin + assign ecc_err_status = {any_single_error, any_double_error}; + end + end + else begin : NO_DECODE + if (CONNECT_A_READDATA_TO_ECC) begin + assign a_readdata = encoded_a_readdata; + end + else begin + assign a_readdata = 'x; + end + assign b_readdata = encoded_b_readdata; + assign ecc_err_status = 2'h0; + end + endgenerate + +endmodule + + + + +//this is a helper module to convert the raw signals from the ECC decoder into something suitable for lazy collection +//assuming bit errors are rare, one way to monitor the ECC status signals from all memories is to simply OR the status signals from all instances +//these may be physically spread across the FPGA, so pulse stretch them so that they can be collected on a slower clock (or by using a multicycle clock constraint) + +module dla_hld_ram_ecc_pulse_stretch_and_sticky #( + parameter bit ASYNC_RESET, //how do registers CONSUME reset, 1 = asynchronously, 0 = synchronously + parameter bit SYNCHRONIZE_RESET, //should be reset be synchronized BEFORE it is consumed, 1 = synchronize it, 0 = no change to reset before consumption + parameter int SINGLE_ERROR_PULSE_STRETCH //at least 1, how many clock cycles to pulse stretch any single bit error, a value of 3 means an input high for one clock cycle results in an output high for four clocks +) ( + input wire clock, + input wire resetn, + input wire i_single_error_corrected, + input wire i_double_error_detected, + output logic [1:0] o_ecc_err_status +); + + //the double error detected status is a sticky bit, only reset can clear it, the intent being one should probably restart the system if an uncorrectable error is seen + logic aclrn, sclrn; + dla_acl_reset_handler + #( + .ASYNC_RESET (ASYNC_RESET), + .USE_SYNCHRONIZER (SYNCHRONIZE_RESET), + .SYNCHRONIZE_ACLRN (SYNCHRONIZE_RESET), + .PULSE_EXTENSION (0), + .PIPE_DEPTH (1), + .NUM_COPIES (1) + ) + dla_acl_reset_handler_inst + ( + .clk (clock), + .i_resetn (resetn), + .o_aclrn (aclrn), + .o_resetn_synchronized (), + .o_sclrn (sclrn) + ); + + logic [SINGLE_ERROR_PULSE_STRETCH-1:0] single_error_history; + logic single_error_pulse_stretched; + logic double_error_latched; + + always_ff @(posedge clock or negedge aclrn) begin + if (~aclrn) begin + single_error_history <= '0; + single_error_pulse_stretched <= 1'b0; + double_error_latched <= 1'b0; + end + else begin + single_error_history[0] <= i_single_error_corrected; + for (int i=1; i<SINGLE_ERROR_PULSE_STRETCH; i++) single_error_history[i] <= single_error_history[i-1]; + single_error_pulse_stretched <= i_single_error_corrected | (|single_error_history); + double_error_latched <= double_error_latched | i_double_error_detected; + if (~sclrn) begin + single_error_history <= '0; + single_error_pulse_stretched <= 1'b0; + double_error_latched <= 1'b0; + end + end + end + + assign o_ecc_err_status = {single_error_pulse_stretched, double_error_latched}; + +endmodule + +`default_nettype wire diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram_generic_three_way_depth_stitch.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram_generic_three_way_depth_stitch.sv new file mode 100644 index 0000000..141368c --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram_generic_three_way_depth_stitch.sv @@ -0,0 +1,175 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +//when dla_hld_ram needs to perform a depth stitch, this module is used to decode whether the address targets the top, middle or bottom sections of memory +//a 3:1 depth stitch is decomposed into two 2:1 depth stitches, see comments inside dla_hld_ram_generic_two_way_depth_stitch for the inner workings + +`default_nettype none + +module dla_hld_ram_generic_three_way_depth_stitch #( + parameter int TOP_DEPTH, //the depth of the top section of memory, this can be zero but the total depth cannot be zero + parameter int MID_DEPTH, //the depth of the middle section of memory, this can be zero but the total depth cannot be zero + parameter int BOT_DEPTH, //the depth of the bottom section of memory, this can be zero but the total depth cannot be zero + parameter int WIDTH, //width of the readdata signals + parameter bit REGISTER_A_ADDRESS, //these 4 parameters controls the read latency, see comments inside dla_hld_ram_generic_two_way_depth_stitch + parameter bit REGISTER_B_ADDRESS, + parameter bit REGISTER_A_READDATA, + parameter bit REGISTER_B_READDATA, + + localparam int DEPTH = TOP_DEPTH + MID_DEPTH + BOT_DEPTH, //total depth + localparam int ADDR = (DEPTH <= 1) ? 1 : $clog2(DEPTH), //avoid zero width signals + localparam int TOP_ADDR = (TOP_DEPTH <= 1) ? 1 : $clog2(TOP_DEPTH), + localparam int MID_ADDR = (MID_DEPTH <= 1) ? 1 : $clog2(MID_DEPTH), + localparam int BOT_ADDR = (BOT_DEPTH <= 1) ? 1 : $clog2(BOT_DEPTH) +) ( + input wire clock, + + //port a + input wire [ADDR-1:0] a_address, //logical address + input wire a_read_enable, + input wire a_write, //logical write enable + input wire a_in_clock_en, //logical input clock enable + input wire a_out_clock_en, //logical output clock enable + output logic [TOP_ADDR-1:0] top_a_address, //physical address for top memory + output logic [MID_ADDR-1:0] mid_a_address, //physical address for middle memory + output logic [BOT_ADDR-1:0] bot_a_address, //physical address for bottom memory + output wire top_a_read_enable, + output wire mid_a_read_enable, + output wire bot_a_read_enable, + output logic top_a_write, //physical write enable for top memory + output logic mid_a_write, //physical write enable for middle memory + output logic bot_a_write, //physical write enable for bottom memory + input wire [WIDTH-1:0] top_a_readdata, //physical read data from the top memory + input wire [WIDTH-1:0] mid_a_readdata, //physical read data from the middle memory + input wire [WIDTH-1:0] bot_a_readdata, //physical read data from the bottom memory + output logic [WIDTH-1:0] a_readdata, //logical read data + + //port b + input wire [ADDR-1:0] b_address, + input wire b_read_enable, + input wire b_write, + input wire b_in_clock_en, + input wire b_out_clock_en, + output logic [TOP_ADDR-1:0] top_b_address, + output logic [MID_ADDR-1:0] mid_b_address, + output logic [BOT_ADDR-1:0] bot_b_address, + output wire top_b_read_enable, + output wire mid_b_read_enable, + output wire bot_b_read_enable, + output logic top_b_write, + output logic mid_b_write, + output logic bot_b_write, + input wire [WIDTH-1:0] top_b_readdata, + input wire [WIDTH-1:0] mid_b_readdata, + input wire [WIDTH-1:0] bot_b_readdata, + output logic [WIDTH-1:0] b_readdata +); + + localparam MB_DEPTH = MID_DEPTH + BOT_DEPTH; //depth of the middle and bottom combined + localparam MB_ADDR = (MB_DEPTH <= 1) ? 1 : $clog2(MB_DEPTH); //avoid zero width signals + + logic [MB_ADDR-1:0] mb_a_address, mb_b_address; + logic mb_a_write, mb_b_write; + logic [WIDTH-1:0] mb_a_readdata, mb_b_readdata; + logic mb_a_read_enable; + logic mb_b_read_enable; + + + + dla_hld_ram_generic_two_way_depth_stitch #( + .TOP_DEPTH (TOP_DEPTH), + .BOT_DEPTH (MB_DEPTH), + .WIDTH (WIDTH), + .REGISTER_A_ADDRESS (REGISTER_A_ADDRESS), + .REGISTER_B_ADDRESS (REGISTER_B_ADDRESS), + .REGISTER_A_READDATA (REGISTER_A_READDATA), + .REGISTER_B_READDATA (REGISTER_B_READDATA) + ) + top_inst + ( + .clock (clock), + .a_address (a_address), + .a_read_enable (a_read_enable), + .a_write (a_write), + .a_in_clock_en (a_in_clock_en), + .a_out_clock_en (a_out_clock_en), + .top_a_address (top_a_address), + .bot_a_address (mb_a_address), + .top_a_read_enable (top_a_read_enable), + .bot_a_read_enable (mb_a_read_enable), + .top_a_write (top_a_write), + .bot_a_write (mb_a_write), + .top_a_readdata (top_a_readdata), + .bot_a_readdata (mb_a_readdata), + .a_readdata (a_readdata), + .b_address (b_address), + .b_read_enable (b_read_enable), + .b_write (b_write), + .b_in_clock_en (b_in_clock_en), + .b_out_clock_en (b_out_clock_en), + .top_b_address (top_b_address), + .bot_b_address (mb_b_address), + .top_b_read_enable (top_b_read_enable), + .bot_b_read_enable (mb_b_read_enable), + .top_b_write (top_b_write), + .bot_b_write (mb_b_write), + .top_b_readdata (top_b_readdata), + .bot_b_readdata (mb_b_readdata), + .b_readdata (b_readdata) + ); + + dla_hld_ram_generic_two_way_depth_stitch #( + .TOP_DEPTH (MID_DEPTH), + .BOT_DEPTH (BOT_DEPTH), + .WIDTH (WIDTH), + .REGISTER_A_ADDRESS (REGISTER_A_ADDRESS), + .REGISTER_B_ADDRESS (REGISTER_B_ADDRESS), + .REGISTER_A_READDATA (REGISTER_A_READDATA), + .REGISTER_B_READDATA (REGISTER_B_READDATA) + ) + bottom_inst + ( + .clock (clock), + .a_address (mb_a_address), + .a_read_enable (mb_a_read_enable), + .a_write (mb_a_write), + .a_in_clock_en (a_in_clock_en), + .a_out_clock_en (a_out_clock_en), + .top_a_address (mid_a_address), + .bot_a_address (bot_a_address), + .top_a_read_enable (mid_a_read_enable), + .bot_a_read_enable (bot_a_read_enable), + .top_a_write (mid_a_write), + .bot_a_write (bot_a_write), + .top_a_readdata (mid_a_readdata), + .bot_a_readdata (bot_a_readdata), + .a_readdata (mb_a_readdata), + .b_address (mb_b_address), + .b_read_enable (mb_b_read_enable), + .b_write (mb_b_write), + .b_in_clock_en (b_in_clock_en), + .b_out_clock_en (b_out_clock_en), + .top_b_address (mid_b_address), + .bot_b_address (bot_b_address), + .top_b_read_enable (mid_b_read_enable), + .bot_b_read_enable (bot_b_read_enable), + .top_b_write (mid_b_write), + .bot_b_write (bot_b_write), + .top_b_readdata (mid_b_readdata), + .bot_b_readdata (bot_b_readdata), + .b_readdata (mb_b_readdata) + ); + +endmodule + +`default_nettype wire diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram_generic_two_way_depth_stitch.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram_generic_two_way_depth_stitch.sv new file mode 100644 index 0000000..9379c3f --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram_generic_two_way_depth_stitch.sv @@ -0,0 +1,106 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +//when dla_hld_ram needs to perform a depth stitch, this module is used to decode whether the address targets the top or bottom sections of memory +//this module requires the logical address as the input (which can address the combined depth of the top and bottom) +//this module will output the physical address for the top memory section and the physical address for the bottom memory section +//for the write enable, when doing a depth stitch, the physical write enable needs to be masked if the address does not target that section of memory +//the top/bottom decoding information is kept live so that later when the read data arrives from the top and bottom sections, we know which read data should drive the logical interface + +//the implementation assumes two ports (to support true dual port, if simple dual port then Quartus will prune the dangling wires) +//the read data latency (which affects how long to keep the top/bottom decode information live) is per port, for port a the latency is REGISTER_A_ADDRESS + REGISTER_A_READDATA, so 0 to 2 inclusive + +`default_nettype none + +module dla_hld_ram_generic_two_way_depth_stitch #( + parameter int TOP_DEPTH, //the depth of the top section of memory, this can be zero but the total depth cannot be zero + parameter int BOT_DEPTH, //the depth of the bottom section of memory, this can be zero but the total depth cannot be zero + parameter int WIDTH, //width of the readdata signals + parameter bit REGISTER_A_ADDRESS, //these 4 parameters controls the read latency, see header comment + parameter bit REGISTER_B_ADDRESS, + parameter bit REGISTER_A_READDATA, + parameter bit REGISTER_B_READDATA, + + localparam int DEPTH = TOP_DEPTH + BOT_DEPTH, //total depth + localparam int ADDR = (DEPTH <= 1) ? 1 : $clog2(DEPTH), //avoid zero width signals + localparam int TOP_ADDR = (TOP_DEPTH <= 1) ? 1 : $clog2(TOP_DEPTH), + localparam int BOT_ADDR = (BOT_DEPTH <= 1) ? 1 : $clog2(BOT_DEPTH) +) ( + input wire clock, + + //port a + input wire [ADDR-1:0] a_address, //logical address + input wire a_read_enable, + input wire a_write, //logical write enable + input wire a_in_clock_en, //logical input clock enable + input wire a_out_clock_en, //logical output clock enable + output logic [TOP_ADDR-1:0] top_a_address, //physical address for top memory + output logic [BOT_ADDR-1:0] bot_a_address, //physical address for bottom memory + output logic top_a_read_enable, + output logic bot_a_read_enable, + output logic top_a_write, //physical write enable for top memory + output logic bot_a_write, //physical write enable for bottom memory + input wire [WIDTH-1:0] top_a_readdata, //physical read data from the top memory + input wire [WIDTH-1:0] bot_a_readdata, //physical read data from the bottom memory + output logic [WIDTH-1:0] a_readdata, //logical read data + + //port b + input wire [ADDR-1:0] b_address, + input wire b_read_enable, + input wire b_write, + input wire b_in_clock_en, + input wire b_out_clock_en, + output logic [TOP_ADDR-1:0] top_b_address, + output logic [BOT_ADDR-1:0] bot_b_address, + output logic top_b_read_enable, + output logic bot_b_read_enable, + output logic top_b_write, + output logic bot_b_write, + input wire [WIDTH-1:0] top_b_readdata, + input wire [WIDTH-1:0] bot_b_readdata, + output logic [WIDTH-1:0] b_readdata +); + + //decode top or bottom + logic a_is_bottom, b_is_bottom; + assign a_is_bottom = (TOP_DEPTH==0) ? 1'b1 : (BOT_DEPTH==0) ? 1'b0 : (a_address >= TOP_DEPTH); + assign b_is_bottom = (TOP_DEPTH==0) ? 1'b1 : (BOT_DEPTH==0) ? 1'b0 : (b_address >= TOP_DEPTH); + assign top_a_read_enable = a_read_enable && (!a_is_bottom); + assign bot_a_read_enable = a_read_enable && ( a_is_bottom); + assign top_b_read_enable = b_read_enable && (!b_is_bottom); + assign bot_b_read_enable = b_read_enable && ( b_is_bottom); + + //determine whether to write to top or bottom + assign top_a_write = a_write & ~a_is_bottom; + assign bot_a_write = a_write & a_is_bottom; + assign top_b_write = b_write & ~b_is_bottom; + assign bot_b_write = b_write & b_is_bottom; + + //determine the address to provide for top and bottom + logic [ADDR-1:0] a_address_subtract, b_address_subtract; + assign a_address_subtract = a_address - TOP_DEPTH; + assign b_address_subtract = b_address - TOP_DEPTH; + assign top_a_address = a_address[TOP_ADDR-1:0]; + assign bot_a_address = a_address_subtract[BOT_ADDR-1:0]; + assign top_b_address = b_address[TOP_ADDR-1:0]; + assign bot_b_address = b_address_subtract[BOT_ADDR-1:0]; + + //select the read data + //because we enable force_to_zero, the read_enable bit will zero out RAMs that are not selected + //Thus, we simply OR the data to get the read data from the chosen RAM + assign a_readdata = (TOP_DEPTH==0) ? bot_a_readdata : (BOT_DEPTH==0) ? top_a_readdata : (bot_a_readdata | top_a_readdata); + assign b_readdata = (TOP_DEPTH==0) ? bot_b_readdata : (BOT_DEPTH==0) ? top_b_readdata : (bot_b_readdata | top_b_readdata); + +endmodule + +`default_nettype wire diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram_lower.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram_lower.sv new file mode 100644 index 0000000..1a83238 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram_lower.sv @@ -0,0 +1,285 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +//see dla_hld_ram.sv for a description of the parameters, ports, and general functionality of all the dla_hld_ram layers + +//this is the top level for the bottom layers of dla_hld_ram +//the upper layers deal with value-added features like width/depth stitching to minimize physical memory usage +//the lower layers deal with hiding the complexity of Quartus IP and adding soft logic when hardened logic lacks functionality +//this layer selects which of the specific Quartus IP wrappers to use, and it models how much physical memory will be used + +`default_nettype none + +`include "dla_acl_parameter_assert.svh" + +module dla_hld_ram_lower #( + //geometry configuration + parameter int DEPTH, + parameter int WIDTH, + parameter int BE_WIDTH, + parameter int UTILIZED_WIDTH, //this is for modelling the number of physical memories used, created at the bits per enable layer, adjusted as fewer geometries are allowed as we go down the layers + + //geometry constants + parameter bit MINIMIZE_MEMORY_USAGE, + parameter int MIN_PHYSICAL_DEPTH, + + //memory initialization + parameter bit USE_MEM_INIT_FILE, + parameter bit ZERO_INITIALIZE_MEM, + parameter MEM_INIT_NAME, + + //memory configuration + parameter RAM_BLOCK_TYPE, + parameter RAM_OPERATION_MODE, + parameter DEVICE_FAMILY, + parameter READ_DURING_WRITE, + parameter bit REGISTER_A_READDATA, + parameter bit REGISTER_B_ADDRESS, + parameter bit REGISTER_B_READDATA, + + //try to use memory hardened logic + parameter bit USE_ENABLE, + parameter bit COMMON_IN_CLOCK_EN, + parameter bit COMMON_OUT_CLOCK_EN, + + //derived parameters + localparam int ADDR = $clog2(DEPTH) +) ( + input wire clock, + //no reset + + //port a + input wire [ADDR-1:0] a_address, + input wire a_read_enable, + input wire a_write, + input wire [WIDTH-1:0] a_writedata, + input wire [BE_WIDTH-1:0] a_byteenable, + output logic [WIDTH-1:0] a_readdata, + input wire a_in_clock_en, + input wire a_out_clock_en, + + //port b + input wire [ADDR-1:0] b_address, + input wire b_read_enable, + input wire b_write, + input wire [WIDTH-1:0] b_writedata, + input wire [BE_WIDTH-1:0] b_byteenable, + output logic [WIDTH-1:0] b_readdata, + input wire b_in_clock_en, + input wire b_out_clock_en +); + + /////////////////////// + // Legality checks // + /////////////////////// + + generate + //check for non-trivial dimensions + `DLA_ACL_PARAMETER_ASSERT(WIDTH >= 1) + `DLA_ACL_PARAMETER_ASSERT(DEPTH >= 2) + `DLA_ACL_PARAMETER_ASSERT(BE_WIDTH >= 1) + + //width / be_width must divide evenly with no remainder + `DLA_ACL_PARAMETER_ASSERT(WIDTH % BE_WIDTH == 0) + + //if using byte enables, bits per enable must be physically supported + `DLA_ACL_PARAMETER_ASSERT(BE_WIDTH == 1 || (WIDTH/BE_WIDTH) == 10) + + //depth must be a multiple of min physical depth + `DLA_ACL_PARAMETER_ASSERT((DEPTH / MIN_PHYSICAL_DEPTH) * MIN_PHYSICAL_DEPTH == DEPTH); + + //check for a legal value of ram block type + localparam bit RAM_BLOCK_TYPE_IS_M20K = RAM_BLOCK_TYPE == "M20K"; + localparam bit RAM_BLOCK_TYPE_IS_MLAB = RAM_BLOCK_TYPE == "MLAB"; + `DLA_ACL_PARAMETER_ASSERT(RAM_BLOCK_TYPE_IS_M20K || RAM_BLOCK_TYPE_IS_MLAB) + + //check for a legal value of ram operation mode + localparam bit RAM_OPERATION_MODE_IS_SIMPLE_DUAL_PORT = RAM_OPERATION_MODE == "SIMPLE_DUAL_PORT"; + localparam bit RAM_OPERATION_MODE_IS_TRUE_DUAL_PORT = RAM_OPERATION_MODE == "TRUE_DUAL_PORT"; + `DLA_ACL_PARAMETER_ASSERT(RAM_OPERATION_MODE_IS_SIMPLE_DUAL_PORT || RAM_OPERATION_MODE_IS_TRUE_DUAL_PORT) + + //check for a legal value of device family + localparam bit DEVICE_FAMILY_IS_C10 = DEVICE_FAMILY == "Cyclone 10 GX"; + localparam bit DEVICE_FAMILY_IS_A10 = DEVICE_FAMILY == "Arria 10"; + localparam bit DEVICE_FAMILY_IS_S10 = DEVICE_FAMILY == "Stratix 10"; + localparam bit DEVICE_FAMILY_IS_AGX = DEVICE_FAMILY == "Agilex"; + `DLA_ACL_PARAMETER_ASSERT(DEVICE_FAMILY_IS_C10 || DEVICE_FAMILY_IS_A10 || DEVICE_FAMILY_IS_S10 || DEVICE_FAMILY_IS_AGX) + + //check for a legal value of mixed port read during write mode + localparam bit READ_DURING_WRITE_IS_DONT_CARE = READ_DURING_WRITE == "DONT_CARE"; + localparam bit READ_DURING_WRITE_IS_OLD_DATA = READ_DURING_WRITE == "OLD_DATA"; + localparam bit READ_DURING_WRITE_IS_NEW_DATA = READ_DURING_WRITE == "NEW_DATA"; + `DLA_ACL_PARAMETER_ASSERT(READ_DURING_WRITE_IS_DONT_CARE || READ_DURING_WRITE_IS_OLD_DATA || READ_DURING_WRITE_IS_NEW_DATA) + + //mlab and true dual port is illegal + `DLA_ACL_PARAMETER_ASSERT(!RAM_BLOCK_TYPE_IS_MLAB || !RAM_OPERATION_MODE_IS_TRUE_DUAL_PORT) + + //m20k with unregistered address is illegal + `DLA_ACL_PARAMETER_ASSERT(!RAM_BLOCK_TYPE_IS_M20K || REGISTER_B_ADDRESS) + endgenerate + + + + ////////////////////////// + // Derived parameters // + ////////////////////////// + + //finish constructing the memory initialization file name by appending the .mif extension after the name modification done by upper layers + localparam MEM_INIT_FILE_NAME = {MEM_INIT_NAME, ".mif"}; + + //limit the max physical depth used by altera_syncram, e.g. if we want 8k x 10, better to build it from 4k x 5 (tiled as 2x2) instead of 8k x 2 (tiled as 1x5) + localparam bit DEVICE_FAMILY_A10_OR_OLDER = (DEVICE_FAMILY == "Cyclone 10 GX") || (DEVICE_FAMILY == "Arria 10"); + localparam int MAXIMUM_DEPTH = (MINIMIZE_MEMORY_USAGE && DEVICE_FAMILY_A10_OR_OLDER) ? 8*MIN_PHYSICAL_DEPTH : 0; //if trying to minimize memory usage, altera_syncram physical depth should not exceed 4k + + + + /////////////////////////////////////////////////// + // Model how many physical memories are needed // + /////////////////////////////////////////////////// + + //determine the physical depth of the underlying hardened memory + localparam int M20K_MAX_PHYSICAL_DEPTH = (MAXIMUM_DEPTH) ? MAXIMUM_DEPTH : (DEVICE_FAMILY_A10_OR_OLDER) ? 32*MIN_PHYSICAL_DEPTH : 4*MIN_PHYSICAL_DEPTH; + localparam int MLAB_MAX_PHYSICAL_DEPTH = (DEVICE_FAMILY_A10_OR_OLDER) ? 2*MIN_PHYSICAL_DEPTH : MIN_PHYSICAL_DEPTH; + localparam int MAX_PHYSICAL_DEPTH = (RAM_BLOCK_TYPE == "M20K") ? M20K_MAX_PHYSICAL_DEPTH : MLAB_MAX_PHYSICAL_DEPTH; + localparam int DEPTH_ROUNDED_UP_TO_NEAREST_POWER_OF_TWO = 1 << $clog2(DEPTH); + localparam int PHYSICAL_DEPTH = (DEPTH_ROUNDED_UP_TO_NEAREST_POWER_OF_TWO > MAX_PHYSICAL_DEPTH) ? MAX_PHYSICAL_DEPTH : DEPTH_ROUNDED_UP_TO_NEAREST_POWER_OF_TWO; + + //determine the physical width of the underlying hardened memory + localparam int M = MIN_PHYSICAL_DEPTH; //shorten the names to make enumerating the cases more compact, min physical depth is a power of 2 (either 512 or 32 for m20k or mlab, or overriden by simulation) + localparam int D = PHYSICAL_DEPTH; //guaranteed this is a power of 2, depth was rounded up to nearest power of 2, and max physical depth must be a power of 2 + localparam int M20K_PHYSICAL_WIDTH = (D==M) ? 40 : (D==2*M) ? 20 : (D==4*M) ? 10 : (D==8*M) ? 5 : (D==16*M)? 2 : 1; //if true dual port, depth was quantized to 2 * min physical depth, so width limited to 20 + localparam int MLAB_PHYSICAL_WIDTH = (D==M) ? 20 : 10; + localparam int PHYSICAL_WIDTH = (RAM_BLOCK_TYPE == "M20K") ? M20K_PHYSICAL_WIDTH : MLAB_PHYSICAL_WIDTH; + + //how many physical copies are tiled in the x and y directions to cover the width and depth + //using the raw width can be misleading, for example at depth 4k the physical width is 5, altera_syncram does not allow 5 bits per enable, so pad the data to 10 bits per enable as a workaround + //if there were 2 byte enable signals (WIDTH=20 whereas UTILIZED_WIDTH=10), the width makes it look like 4 M20K are needed but actually only 2 M20K are synthesized + localparam int DEPTH_PHYSICAL_TILING = (DEPTH + PHYSICAL_DEPTH - 1) / PHYSICAL_DEPTH; + localparam int WIDTH_PHYSICAL_TILING = (UTILIZED_WIDTH + PHYSICAL_WIDTH - 1) / PHYSICAL_WIDTH; + + //resource usage + localparam int NUM_PHYSICAL_M20K = (RAM_BLOCK_TYPE != "M20K") ? 0 : DEPTH_PHYSICAL_TILING * WIDTH_PHYSICAL_TILING; + localparam int NUM_PHYSICAL_MLAB = (RAM_BLOCK_TYPE != "MLAB") ? 0 : DEPTH_PHYSICAL_TILING * WIDTH_PHYSICAL_TILING; + + //the layers above consume these localparam values by assigning them to an integer, intended for simulation only + + + + ///////////////////////////////////////////////// + // Next layer in the instantiation hierarchy // + ///////////////////////////////////////////////// + + generate + if (RAM_BLOCK_TYPE_IS_M20K && RAM_OPERATION_MODE_IS_TRUE_DUAL_PORT) begin : M20K_TDP + dla_hld_ram_lower_m20k_true_dual_port + #( + .DEPTH (DEPTH), + .WIDTH (WIDTH), + .BE_WIDTH (BE_WIDTH), + .MAXIMUM_DEPTH (MAXIMUM_DEPTH), + .DEVICE_FAMILY (DEVICE_FAMILY), + .READ_DURING_WRITE (READ_DURING_WRITE), + .USE_ENABLE (USE_ENABLE), + .COMMON_IN_CLOCK_EN (COMMON_IN_CLOCK_EN), + .COMMON_OUT_CLOCK_EN (COMMON_OUT_CLOCK_EN), + .REGISTER_A_READDATA (REGISTER_A_READDATA), + .REGISTER_B_READDATA (REGISTER_B_READDATA), + .USE_MEM_INIT_FILE (USE_MEM_INIT_FILE), + .ZERO_INITIALIZE_MEM (ZERO_INITIALIZE_MEM), + .MEM_INIT_FILE_NAME (MEM_INIT_FILE_NAME) + ) + dla_hld_ram_lower_m20k_true_dual_port_inst + ( + .clock (clock), + .a_address (a_address), + .a_read_enable (a_read_enable), + .a_write (a_write), + .a_writedata (a_writedata), + .a_byteenable (a_byteenable), + .a_readdata (a_readdata), + .a_in_clock_en (a_in_clock_en), + .a_out_clock_en (a_out_clock_en), + .b_address (b_address), + .b_read_enable (b_read_enable), + .b_write (b_write), + .b_writedata (b_writedata), + .b_byteenable (b_byteenable), + .b_readdata (b_readdata), + .b_in_clock_en (b_in_clock_en), + .b_out_clock_en (b_out_clock_en) + ); + end + if (RAM_BLOCK_TYPE_IS_M20K && RAM_OPERATION_MODE_IS_SIMPLE_DUAL_PORT) begin : M20K_SDP + dla_hld_ram_lower_m20k_simple_dual_port + #( + .DEPTH (DEPTH), + .WIDTH (WIDTH), + .BE_WIDTH (BE_WIDTH), + .MAXIMUM_DEPTH (MAXIMUM_DEPTH), + .DEVICE_FAMILY (DEVICE_FAMILY), + .READ_DURING_WRITE (READ_DURING_WRITE), + .USE_ENABLE (USE_ENABLE), + .COMMON_IN_CLOCK_EN (COMMON_IN_CLOCK_EN), + .REGISTER_B_READDATA (REGISTER_B_READDATA), + .USE_MEM_INIT_FILE (USE_MEM_INIT_FILE), + .ZERO_INITIALIZE_MEM (ZERO_INITIALIZE_MEM), + .MEM_INIT_FILE_NAME (MEM_INIT_FILE_NAME) + ) + dla_hld_ram_lower_m20k_simple_dual_port_inst + ( + .clock (clock), + .a_address (a_address), + .a_write (a_write), + .a_writedata (a_writedata), + .a_byteenable (a_byteenable), + .a_in_clock_en (a_in_clock_en), + .b_address (b_address), + .b_read_enable (b_read_enable), + .b_readdata (b_readdata), + .b_in_clock_en (b_in_clock_en), + .b_out_clock_en (b_out_clock_en) + ); + end + if (RAM_BLOCK_TYPE_IS_MLAB && RAM_OPERATION_MODE_IS_SIMPLE_DUAL_PORT) begin : MLAB + dla_hld_ram_lower_mlab_simple_dual_port + #( + .DEPTH (DEPTH), + .WIDTH (WIDTH), + .BE_WIDTH (BE_WIDTH), + .DEVICE_FAMILY (DEVICE_FAMILY), + .READ_DURING_WRITE (READ_DURING_WRITE), + .REGISTER_B_ADDRESS (REGISTER_B_ADDRESS), + .REGISTER_B_READDATA (REGISTER_B_READDATA), + .USE_MEM_INIT_FILE (USE_MEM_INIT_FILE), + .MEM_INIT_FILE_NAME (MEM_INIT_FILE_NAME) + ) + dla_hld_ram_lower_mlab_simple_dual_port_inst + ( + .clock (clock), + .a_address (a_address), + .a_write (a_write), + .a_writedata (a_writedata), + .a_byteenable (a_byteenable), + .a_in_clock_en (a_in_clock_en), + .b_address (b_address), + .b_read_enable (b_read_enable), + .b_readdata (b_readdata), + .b_in_clock_en (b_in_clock_en), + .b_out_clock_en (b_out_clock_en) + ); + end + endgenerate + +endmodule + +`default_nettype wire diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram_lower_m20k_simple_dual_port.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram_lower_m20k_simple_dual_port.sv new file mode 100644 index 0000000..5e466cb --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram_lower_m20k_simple_dual_port.sv @@ -0,0 +1,354 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +//see dla_hld_ram.sv for a description of the parameters, ports, and general functionality of all the dla_hld_ram layers + +//this module provides a unified interface for M20K in simple dual port mode, it instantiates altera_syncram and adds soft logic to support new data mode + +`default_nettype none + +`include "dla_acl_parameter_assert.svh" + +module dla_hld_ram_lower_m20k_simple_dual_port #( + //geometry of the memory + parameter int DEPTH, //number of words of memory + parameter int WIDTH, //width of the data bus, both read and write data + parameter int BE_WIDTH, //width of the byte enable signal, note that WIDTH / BE_WIDTH must divide evenly + parameter int MAXIMUM_DEPTH, //ensure access to all 20k bits of memory by limiting how narrow the physical width can get, implemented by limiting the max physical depth, 0 = no limit + + //operation of memory + parameter DEVICE_FAMILY, //"Cyclone 10 GX" | "Arria 10" | "Stratix 10" | "Agilex" + parameter READ_DURING_WRITE, //"DONT_CARE" | "OLD_DATA" | "NEW_DATA" + + //simplified use-cases that lead to more use of hardened logic + parameter bit USE_ENABLE, //set to 0 if all clock enables are unused + parameter bit COMMON_IN_CLOCK_EN, //set to 1 if a_in_clock_en and b_in_clock_en are driven by the same source + + //specify whether to register or unregister the read data + parameter bit REGISTER_B_READDATA, //latency from b_address to b_readdata is 1 (if unregistered) or 2 (if registered) + + //memory initialization + parameter bit USE_MEM_INIT_FILE, //0 = do not use memory initialization file, 1 = use memory initialization file + parameter bit ZERO_INITIALIZE_MEM, //only when USE_MEM_INIT_FILE = 0, choose whether the memory contents power up to zero or don't care + parameter MEM_INIT_FILE_NAME, //only when USE_MEM_INIT_FILE = 1, specify the name of the file that contains the initial memory contents + + //derived parameters that affect the module interface + localparam int ADDR = $clog2(DEPTH) +) ( + input wire clock, + //no reset + + //port a + input wire [ADDR-1:0] a_address, //address for write + input wire a_read_enable, + input wire a_write, //write enable + input wire [WIDTH-1:0] a_writedata, //data to write to memory + input wire [BE_WIDTH-1:0] a_byteenable, //which bytes of write data to commit to memory + input wire a_in_clock_en, //applies to all inputs of port a: address, write enable, write data, byte enable + + //port b + input wire [ADDR-1:0] b_address, //address for read + input wire b_read_enable, + output logic [WIDTH-1:0] b_readdata, //data read from memory + input wire b_in_clock_en, //applies to all inputs of port b: address + input wire b_out_clock_en //applies to all outputs of port b: read data +); + + //legality checks would be no stricter than what dla_hld_ram_lower already checked for + + + ////////////////////////// + // Derived parameters // + ////////////////////////// + + localparam int BITS_PER_ENABLE = WIDTH / BE_WIDTH; + + + + ////////////////////////////////////////////////////////////////////// + // Model the hardened address and input registers inside the m20k // + ////////////////////////////////////////////////////////////////////// + + //in many cases these registers have no fanout so they will just get swept away + logic [ADDR-1:0] a_internal_address, b_internal_address; + logic a_internal_read_enable; + logic a_internal_write; + logic [BE_WIDTH-1:0] a_internal_byteenable; + logic [WIDTH-1:0] a_internal_writedata; + logic [ADDR-1:0] a_mux_address, b_mux_address; + logic b_internal_read_enable; + + always_ff @(posedge clock) begin + if (a_in_clock_en) begin + a_internal_address <= a_address; + a_internal_read_enable<= a_read_enable; + a_internal_write <= a_write; + a_internal_byteenable <= a_byteenable; + a_internal_writedata <= a_writedata; + end + if (b_in_clock_en) begin + b_internal_address <= b_address; + b_internal_read_enable<= b_read_enable; + end + end + + //this is what drives the address port if soft logic is used for address stall + assign a_mux_address = (a_in_clock_en) ? a_address : a_internal_address; + assign b_mux_address = (b_in_clock_en) ? b_address : b_internal_address; + + //////////////////////////// + // altera_syncram ports // + //////////////////////////// + + //add soft logic when hardened logic lacks functionality + //if byte enables are not used, then altera_syncram can be used with arbitrary width + //if mixed port read during write is new data mode, can emulate this by adding a data bypass + + logic [ADDR-1:0] address_a, address_b; + logic rden_b; + logic addressstall_b; + logic wren_a; + logic [BE_WIDTH-1:0] byteena_a; + logic [WIDTH-1:0] data_a; + logic [WIDTH-1:0] q_b; + logic clock0; + logic clock1; + logic clocken1; + + //write enable and byte enable + generate + if (BE_WIDTH == 1) begin //1 byte enable for the entire data width, don't need to use physical byte enable, combine it with write enable + assign wren_a = a_write & a_in_clock_en & a_byteenable; + assign byteena_a = 1'b1; + end + else begin + assign wren_a = a_write & a_in_clock_en; + assign byteena_a = a_byteenable; + end + endgenerate + + //ports that have a natural mapping + assign address_a = a_address; + assign data_a = a_writedata; + assign address_b = b_address; + + //clock enable for input: always use soft logic for write port (by masking the write enable), always use hard logic for read port + assign addressstall_b = ~b_in_clock_en; + assign clock0 = clock; + + //clock enable for output: always use hard logic + generate + if (!REGISTER_B_READDATA || !USE_ENABLE) begin + assign clock1 = 1'b1; + assign clocken1 = 1'b1; + end + else begin + assign clock1 = clock; + assign clocken1 = b_out_clock_en; + end + endgenerate + + //////////////<FORCE_TO_ZERO>/////////////// + localparam bit ENABLE_FORCE_TO_ZERO_SOFT_LOGIC = (DEVICE_FAMILY == "Cyclone 10 GX") || (DEVICE_FAMILY == "Arria 10"); + localparam string ENABLE_FORCE_TO_ZERO = ENABLE_FORCE_TO_ZERO_SOFT_LOGIC ? "FALSE" : "TRUE"; + logic b_read_valid; + if (ENABLE_FORCE_TO_ZERO_SOFT_LOGIC) begin : GEN_SOFT_FORCE_TO_ZERO + assign rden_b = 1'b1; + + logic read_enable_d1; + always_ff @(posedge clock) begin + if (!USE_ENABLE || (COMMON_IN_CLOCK_EN ? a_in_clock_en : b_in_clock_en)) begin + read_enable_d1 <= b_read_enable; + end + end + + if (REGISTER_B_READDATA) begin : gen_out_read_valid_flop + always_ff @(posedge clock) begin + if (!USE_ENABLE || b_out_clock_en) begin + b_read_valid <= read_enable_d1; + end + end + end else begin : gen_out_read_valid_wire + assign b_read_valid = read_enable_d1; + end + end else begin : GEN_HARD_FORCE_TO_ZERO + assign rden_b = b_read_enable; + assign b_read_valid = 1'b1; + end + //////////////</FORCE_TO_ZERO>/////////////// + + //output the read data + generate + if (READ_DURING_WRITE == "NEW_DATA") begin //new data mode is achieved by using a data bypass + logic addr_match; + logic [BE_WIDTH-1:0] b_bypass_enable_unreg, b_bypass_enable_reg, b_bypass_enable; + logic [WIDTH-1:0] b_bypass_data_unreg , b_bypass_data_reg, b_bypass_data; + + //detect when the addresses match, less logic is needed if the effective addresses can only change at the same time (due to a common input clock enable) + if (COMMON_IN_CLOCK_EN) begin + always_ff @(posedge clock) begin + if (a_in_clock_en) addr_match <= (a_address == b_address) && b_read_enable; + end + end + else begin + always_ff @(posedge clock) begin + addr_match <= (a_mux_address == b_mux_address); + end + end + + //if the output data is unregistered, determine whether to use bypass and what the bypass data should be + assign b_bypass_enable_unreg = (a_internal_write & b_internal_read_enable & addr_match) ? a_internal_byteenable : '0; + assign b_bypass_data_unreg = a_internal_writedata; + + //if the output data is registered, the logic above serves as next state logic for the registered version, but now also need to factor in the output clock enable + always_ff @(posedge clock) begin + if (b_out_clock_en) begin + b_bypass_enable_reg <= b_bypass_enable_unreg; + b_bypass_data_reg <= b_bypass_data_unreg; + end + end + + //select between registered or unregistered output + assign b_bypass_enable = (REGISTER_B_READDATA) ? b_bypass_enable_reg : b_bypass_enable_unreg; + assign b_bypass_data = (REGISTER_B_READDATA) ? b_bypass_data_reg : b_bypass_data_unreg; + + //adjust the read data if we have a mixed port read during write + always_comb begin + if (b_read_valid) begin + for (int i=0; i<BE_WIDTH; i++) begin + b_readdata[i*BITS_PER_ENABLE+:BITS_PER_ENABLE] = (b_bypass_enable[i]) ? b_bypass_data[i*BITS_PER_ENABLE+:BITS_PER_ENABLE] : q_b[i*BITS_PER_ENABLE+:BITS_PER_ENABLE]; + end + end else begin + b_readdata = {WIDTH{1'b0}}; + end + end + end + else begin + assign b_readdata = (b_read_valid ? q_b : {WIDTH{1'b0}}); + end + endgenerate + + + + ///////////////////////////////// + // altera_syncram parameters // + ///////////////////////////////// + + localparam int BYTE_SIZE = (BE_WIDTH == 1) ? 0 : BITS_PER_ENABLE; + localparam INTENDED_DEVICE_FAMILY = DEVICE_FAMILY; + localparam OUTDATA_REG = (REGISTER_B_READDATA) ? ((USE_ENABLE) ? "CLOCK1" : "CLOCK0") : "UNREGISTERED"; + localparam CLOCK_ENABLE_OUTPUT = (USE_ENABLE && REGISTER_B_READDATA) ? "NORMAL" : "BYPASS"; + localparam MIXED_PORT_READ_DURING_WRITE = (READ_DURING_WRITE == "DONT_CARE") ? "DONT_CARE" : "OLD_DATA"; + localparam POWER_UP_UNINITIALIZED = (USE_MEM_INIT_FILE || ZERO_INITIALIZE_MEM) ? "FALSE" : "TRUE"; + localparam MEM_INIT_FILE = (USE_MEM_INIT_FILE) ? MEM_INIT_FILE_NAME : "UNUSED"; + + /////////////////////////////// + // altera_syncram instance // + /////////////////////////////// + + altera_syncram + #( + //fundamentals + .lpm_type ("altera_syncram"), + .ram_block_type ("M20K"), + .intended_device_family (INTENDED_DEVICE_FAMILY), + .operation_mode ("DUAL_PORT"), + + //clocking + .address_reg_b ("CLOCK0"), + .outdata_reg_b (OUTDATA_REG), + + //clock enables + .clock_enable_input_a ("BYPASS"), + .clock_enable_input_b ("BYPASS"), + .clock_enable_output_b (CLOCK_ENABLE_OUTPUT), + + //reset is not used + .address_aclr_b ("NONE"), + .outdata_aclr_b ("NONE"), + .outdata_sclr_b ("NONE"), + + //size of the memory + .widthad_a (ADDR), //bit width of the address + .widthad_b (ADDR), + .numwords_a (DEPTH), //number of words + .numwords_b (DEPTH), + .width_a (WIDTH), //width of the write data and read data signals + .width_b (WIDTH), + .width_byteena_a (BE_WIDTH), //width of the byte enable signal + .byte_size (BYTE_SIZE), + + //force to zero + .enable_force_to_zero (ENABLE_FORCE_TO_ZERO), + + //limit the depth of the memory to ensure access to all 20k bits + .maximum_depth (MAXIMUM_DEPTH), + + //mixed port read during write + .read_during_write_mode_mixed_ports (MIXED_PORT_READ_DURING_WRITE), + + //hardened error correction code + .enable_ecc ("FALSE"), + + //memory initialization + .power_up_uninitialized (POWER_UP_UNINITIALIZED), + .init_file (MEM_INIT_FILE) + ) + altera_syncram_inst + ( + //clock + .clock0 (clock0), + .clock1 (clock1), + + //no reset + .aclr0 (1'b0), + .aclr1 (1'b0), + .sclr (1'b0), + + //port a + .address_a (address_a), + .addressstall_a (1'b0), + .byteena_a (byteena_a), + .data_a (data_a), + .wren_a (wren_a), + .q_a (), + .rden_a (1'b1), + + //port b + .address_b (address_b), + .addressstall_b (addressstall_b), + .byteena_b (1'b1), + .data_b ({WIDTH{1'b1}}), + .wren_b (1'b0), + .q_b (q_b), + .rden_b (rden_b), + + //shared + .clocken0 (1'b1), + .clocken1 (clocken1), + + //unused stuff which was intended for quad port ram + .address2_a (1'b1), + .address2_b (1'b1), + .clocken2 (1'b1), + .clocken3 (1'b1), + + //error correction codes + .eccencbypass (1'b0), + .eccencparity (8'b0), + .eccstatus () + ); + +endmodule + +`default_nettype wire diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram_lower_m20k_true_dual_port.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram_lower_m20k_true_dual_port.sv new file mode 100644 index 0000000..7035d23 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram_lower_m20k_true_dual_port.sv @@ -0,0 +1,496 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +//see dla_hld_ram.sv for a description of the parameters, ports, and general functionality of all the dla_hld_ram layers + +//this module provides a unified interface for M20K in true dual port mode, it instantiates altera_syncram and adds soft logic to support new data mode +//beware that old data mode in stratrix 10 and newer is not possible to support even with soft logic + +`default_nettype none + +`include "dla_acl_parameter_assert.svh" + +module dla_hld_ram_lower_m20k_true_dual_port #( + //geometry of the memory + parameter int DEPTH, //number of words of memory + parameter int WIDTH, //width of the data bus, both read and write data + parameter int BE_WIDTH, //width of the byte enable signal, note that WIDTH / BE_WIDTH must divide evenly + parameter int MAXIMUM_DEPTH, //ensure access to all 20k bits of memory by limiting how narrow the physical width can get, implemented by limiting the max physical depth, 0 = no limit + + //operation of memory + parameter DEVICE_FAMILY, //"Cyclone 10 GX" | "Arria 10" | "Stratix 10" | "Agilex" + parameter READ_DURING_WRITE, //"DONT_CARE" | "OLD_DATA" | "NEW_DATA" + + //simplified use-cases that lead to more use of hardened logic + parameter bit USE_ENABLE, //set to 0 if all clock enables are unused + parameter bit COMMON_IN_CLOCK_EN, //set to 1 if a_in_clock_en and b_in_clock_en are driven by the same source + parameter bit COMMON_OUT_CLOCK_EN, //set to 1 if a_out_clock_en and b_out_clock_en are driven by the same source + + //specify whether to register or unregister the read data + parameter bit REGISTER_A_READDATA, //latency from a_address to a_readdata is 1 (if unregistered) or 2 (if registered) + parameter bit REGISTER_B_READDATA, //latency from b_address to b_readdata is 1 (if unregistered) or 2 (if registered) + + //memory initialization + parameter bit USE_MEM_INIT_FILE, //0 = do not use memory initialization file, 1 = use memory initialization file + parameter bit ZERO_INITIALIZE_MEM, //if USE_MEM_INIT_FILE = 0, then choose whether the memory contents initialize to zero or don't care + parameter MEM_INIT_FILE_NAME, //if USE_MEM_INIT_FILE = 1, then specify the name of the file that contains the initial memory contents + + //derived parameters that affect the module interface + localparam int ADDR = $clog2(DEPTH) +) ( + input wire clock, + //no reset + + //port a + input wire [ADDR-1:0] a_address, //address for read or write + input wire a_read_enable, + input wire a_write, //write enable, 1 = write, 0 = read + input wire [WIDTH-1:0] a_writedata, //data to write to memory + input wire [BE_WIDTH-1:0] a_byteenable, //which bytes of write data to commit to memory + output logic [WIDTH-1:0] a_readdata, //data read from memory + input wire a_in_clock_en, //applies to all inputs: address, write enable, write data, byte enable + input wire a_out_clock_en, //applies to all outputs: read data + + //port b + input wire [ADDR-1:0] b_address, //signals have the same meaning as port a + input wire b_read_enable, + input wire b_write, + input wire [WIDTH-1:0] b_writedata, + input wire [BE_WIDTH-1:0] b_byteenable, + output logic [WIDTH-1:0] b_readdata, + input wire b_in_clock_en, + input wire b_out_clock_en +); + + //different logic is needed for a10 or older versus s10 or newer + localparam bit DEVICE_FAMILY_A10_OR_OLDER = (DEVICE_FAMILY == "Cyclone 10 GX") || (DEVICE_FAMILY == "Arria 10"); + + + + /////////////////////// + // Legality checks // + /////////////////////// + + //in addition to what was already checked by dla_hld_ram_lower + generate + //if s10 or newer, impossible to use soft logic to construct old data mode for mixed port read during write + localparam bit READ_DURING_WRITE_IS_OLD_DATA = READ_DURING_WRITE == "OLD_DATA"; + `DLA_ACL_PARAMETER_ASSERT(DEVICE_FAMILY_A10_OR_OLDER || !READ_DURING_WRITE_IS_OLD_DATA) + endgenerate + + + + ////////////////////////// + // Derived parameters // + ////////////////////////// + + localparam int BITS_PER_ENABLE = WIDTH / BE_WIDTH; + + //determine when hardened logic can be used, in all other cases use soft logic to implement the functionality + localparam bit USE_HARD_LOGIC_FOR_ADDR_STALL = DEVICE_FAMILY_A10_OR_OLDER && COMMON_IN_CLOCK_EN; + //S10 and newer families do not support hardend output registers with clock enables + localparam bit USE_HARD_LOGIC_FOR_OUT_REGISTER = USE_ENABLE ? COMMON_OUT_CLOCK_EN && REGISTER_A_READDATA && REGISTER_B_READDATA && DEVICE_FAMILY_A10_OR_OLDER : REGISTER_A_READDATA && REGISTER_B_READDATA; + + //altera_syncram output only has 2 configurations: either both outputs are registered with a common output clock enable, or both outputs are unregistered and soft logic is used + //the parameters below indicate whether to add a register after the output of altera_syncram + localparam bit REGISTER_Q_A = !USE_HARD_LOGIC_FOR_OUT_REGISTER && REGISTER_A_READDATA; + localparam bit REGISTER_Q_B = !USE_HARD_LOGIC_FOR_OUT_REGISTER && REGISTER_B_READDATA; + + + + ////////////////////////////////////////////////////////////////////// + // Model the hardened address and input registers inside the m20k // + ////////////////////////////////////////////////////////////////////// + + logic [ADDR-1:0] a_internal_address , b_internal_address ; + logic a_internal_write , b_internal_write ; + logic [BE_WIDTH-1:0] a_internal_byteenable , b_internal_byteenable ; + logic [WIDTH-1:0] a_internal_writedata , b_internal_writedata ; + logic [ADDR-1:0] a_mux_address , b_mux_address ; + logic a_internal_read_enable; + logic b_internal_read_enable; + logic a_mux_read_enable; + logic b_mux_read_enable; + + //in many cases these registers have no fanout so they will just get swept away + always_ff @(posedge clock) begin + if (a_in_clock_en) begin + a_internal_address <= a_address; + a_internal_read_enable<= a_read_enable; + a_internal_write <= a_write; + a_internal_byteenable <= a_byteenable; + a_internal_writedata <= a_writedata; + end + if (b_in_clock_en) begin + b_internal_address <= b_address; + b_internal_read_enable<= b_read_enable; + b_internal_write <= b_write; + b_internal_byteenable <= b_byteenable; + b_internal_writedata <= b_writedata; + end + end + + //this is what drives the address port if soft logic is used for address stall + assign a_mux_address = (a_in_clock_en) ? a_address : a_internal_address; + assign b_mux_address = (b_in_clock_en) ? b_address : b_internal_address; + assign a_mux_read_enable = (a_in_clock_en) ? a_read_enable : a_internal_read_enable; + assign b_mux_read_enable = (b_in_clock_en) ? b_read_enable : b_internal_read_enable; + + + + /////////////////////////////////////// + // altera_syncram write side ports // + /////////////////////////////////////// + + //add soft logic when hardened logic lacks functionality + //if byte enables are not used, then altera_syncram can be used with arbitrary width + //if mixed port read during write is new data mode, can emulate this by adding a data bypass + //address stall is no longer present in s10 or newer, use a shadow register in ALM logic to ensure the hardened address registers inside the m20k stay frozen + + logic clock0; + logic [ADDR-1:0] address_a , address_b ; + logic rden_a; + logic rden_b; + logic addressstall_a , addressstall_b ; + logic wren_a , wren_b ; + logic [BE_WIDTH-1:0] byteena_a , byteena_b ; + logic [WIDTH-1:0] data_a , data_b ; + + //clock enable for address: use hard logic only if a10 or older and there is a common input clock enable for both ports + assign clock0 = clock; + generate + if (USE_HARD_LOGIC_FOR_ADDR_STALL) begin : GEN_HARD_ADDR_STALL + assign address_a = a_address; + assign address_b = b_address; + assign addressstall_a = ~a_in_clock_en; + assign addressstall_b = ~b_in_clock_en; + end + else begin : GEN_SOFT_ADDR_STALL + assign address_a = a_mux_address; + assign address_b = b_mux_address; + assign addressstall_a = 1'b0; + assign addressstall_b = 1'b0; + end + endgenerate + + //write enable and byte enable + generate + if (BE_WIDTH == 1) begin : NO_BYTEENABLE //1 byte enable for the entire data width, don't need to use physical byte enable, combine it with write enable + assign wren_a = a_write & a_in_clock_en & a_byteenable; + assign byteena_a = 1'b1; + assign wren_b = b_write & b_in_clock_en & b_byteenable; + assign byteena_b = 1'b1; + end + else begin : GEN_BYTEENABLE + assign wren_a = a_write & a_in_clock_en; + assign byteena_a = a_byteenable; + assign wren_b = b_write & b_in_clock_en; + assign byteena_b = b_byteenable; + end + endgenerate + + //write data + assign data_a = a_writedata; + assign data_b = b_writedata; + + + + /////////////////////////////////////// + // altera_syncram read side ports // + /////////////////////////////////////// + + logic clock1; + logic clocken1; + logic [WIDTH-1:0] q_a , q_b ; + logic [WIDTH-1:0] adjusted_q_a , adjusted_q_b ; + + //output clock enable: use hard logic only if both read data are registered and there is a common output clock enable + generate + if (!USE_ENABLE) begin : GEN_NO_CLOCK_EN + assign clock1 = 1'b1; + assign clocken1 = 1'b1; + end + else if (USE_HARD_LOGIC_FOR_OUT_REGISTER) begin : GEN_HARD_OUT_CLOCK_EN + assign clock1 = clock; + assign clocken1 = a_out_clock_en; + end + else begin : GEN_SOFT_OUT_CLOCK_EN + assign clock1 = 1'b1; + assign clocken1 = 1'b1; + end + endgenerate + + //////////////<FORCE_TO_ZERO>/////////////// + localparam bit ENABLE_FORCE_TO_ZERO_SOFT_LOGIC = (DEVICE_FAMILY == "Cyclone 10 GX") || (DEVICE_FAMILY == "Arria 10"); + localparam string ENABLE_FORCE_TO_ZERO = ENABLE_FORCE_TO_ZERO_SOFT_LOGIC ? "FALSE" : "TRUE"; + logic a_read_valid; + logic b_read_valid; + if (ENABLE_FORCE_TO_ZERO_SOFT_LOGIC) begin : GEN_SOFT_FORCE_TO_ZERO + assign rden_a = 1'b1; + assign rden_b = 1'b1; + + logic a_read_enable_d1; + logic b_read_enable_d1; + always_ff @(posedge clock) begin + if (!USE_ENABLE || a_in_clock_en) begin + a_read_enable_d1 <= a_read_enable; + end + if (!USE_ENABLE || (COMMON_IN_CLOCK_EN ? a_in_clock_en : b_in_clock_en)) begin + b_read_enable_d1 <= b_read_enable; + end + end + + if (REGISTER_B_READDATA) begin : gen_out_read_valid_flop + always_ff @(posedge clock) begin + if (!USE_ENABLE || a_out_clock_en) begin + a_read_valid <= a_read_enable_d1; + end + if (!USE_ENABLE || b_out_clock_en) begin + b_read_valid <= b_read_enable_d1; + end + end + end else begin : gen_out_read_valid_wire + assign a_read_valid = a_read_enable_d1; + assign b_read_valid = b_read_enable_d1; + end + end else begin : GEN_HARD_FORCE_TO_ZERO + assign rden_a = USE_HARD_LOGIC_FOR_ADDR_STALL ? a_read_enable : a_mux_read_enable; + assign a_read_valid = 1'b1; + assign rden_b = USE_HARD_LOGIC_FOR_ADDR_STALL ? b_read_enable : b_mux_read_enable; + assign b_read_valid = 1'b1; + end + //////////////</FORCE_TO_ZERO>/////////////// + + //register q_a and/or q_b if altera_syncram has unregistered output but dla_hld_ram has registered output + generate + if (REGISTER_Q_A) begin + always_ff @(posedge clock) begin + if (a_out_clock_en) adjusted_q_a <= (a_read_valid ? q_a : {WIDTH{1'b0}}); + end + end + else begin + assign adjusted_q_a = (a_read_valid ? q_a : {WIDTH{1'b0}}); + end + if (REGISTER_Q_B) begin + always_ff @(posedge clock) begin + if (b_out_clock_en) adjusted_q_b <= (b_read_valid ? q_b : {WIDTH{1'b0}}); + end + end + else begin + assign adjusted_q_b = (b_read_valid ? q_b : {WIDTH{1'b0}}); + end + endgenerate + + //output the read data + generate + if (READ_DURING_WRITE == "NEW_DATA") begin //new data mode is achieved by using a data bypass + logic addr_match; + logic [BE_WIDTH-1:0] common_internal_byteenable; + logic [WIDTH-1:0] common_internal_writedata; + logic [BE_WIDTH-1:0] a_bypass_enable_unreg, a_bypass_enable_reg, a_bypass_enable; + logic [WIDTH-1:0] a_bypass_data_unreg , a_bypass_data_reg, a_bypass_data; + logic [BE_WIDTH-1:0] b_bypass_enable_unreg, b_bypass_enable_reg, b_bypass_enable; + logic [WIDTH-1:0] b_bypass_data_unreg , b_bypass_data_reg, b_bypass_data; + + //detect when the addresses match, less logic is needed if the effective addresses can only change at the same time (due to a common input clock enable) + if (COMMON_IN_CLOCK_EN) begin + always_ff @(posedge clock) begin + if (a_in_clock_en) addr_match <= (a_address == b_address); + end + end + else begin + always_ff @(posedge clock) begin + addr_match <= (a_mux_address == b_mux_address); + end + end + + //if a_in_clock_en and b_in_clock_en are driven from the same source, then we don't need to keep the writedata live from both port a and b + //in addition to the above, if a_out_clock_en and b_out_clock_en are driven from the same source (but not necessarily the same source as the input clock enables), quartus should merge a_bypass_data and b_bypass_data + //the same analysis also applies to byte enables + always_ff @(posedge clock) begin + if (b_in_clock_en) begin + common_internal_byteenable <= (b_write) ? b_byteenable : a_byteenable; + common_internal_writedata <= (b_write) ? b_writedata : a_writedata; + end + end + + //if the output data is unregistered, determine whether to use bypass and what the bypass data should be + assign a_bypass_enable_unreg = (~a_internal_write & + a_internal_read_enable & + b_internal_write & + addr_match) ? ((COMMON_IN_CLOCK_EN) ? common_internal_byteenable : b_internal_byteenable) : '0; + assign a_bypass_data_unreg = (COMMON_IN_CLOCK_EN) ? common_internal_writedata : b_internal_writedata; + assign b_bypass_enable_unreg = (~b_internal_write & + b_internal_read_enable & + a_internal_write & + addr_match) ? ((COMMON_IN_CLOCK_EN) ? common_internal_byteenable : a_internal_byteenable) : '0; + assign b_bypass_data_unreg = (COMMON_IN_CLOCK_EN) ? common_internal_writedata : a_internal_writedata; + + //if the output data is registered, the logic above serves as next state logic for the registered version, but now also need to factor in the output clock enable + always_ff @(posedge clock) begin + if (a_out_clock_en) begin + a_bypass_enable_reg <= a_bypass_enable_unreg; + a_bypass_data_reg <= a_bypass_data_unreg; + end + if (b_out_clock_en) begin + b_bypass_enable_reg <= b_bypass_enable_unreg; + b_bypass_data_reg <= b_bypass_data_unreg; + end + end + + //select between registered or unregistered output + assign a_bypass_enable = (REGISTER_A_READDATA) ? a_bypass_enable_reg : a_bypass_enable_unreg; + assign a_bypass_data = (REGISTER_A_READDATA) ? a_bypass_data_reg : a_bypass_data_unreg; + assign b_bypass_enable = (REGISTER_B_READDATA) ? b_bypass_enable_reg : b_bypass_enable_unreg; + assign b_bypass_data = (REGISTER_B_READDATA) ? b_bypass_data_reg : b_bypass_data_unreg; + + //adjust the read data if we have a mixed port read during write + always_comb begin + for (int i=0; i<BE_WIDTH; i++) begin + a_readdata[i*BITS_PER_ENABLE+:BITS_PER_ENABLE] = (a_bypass_enable[i]) ? a_bypass_data[i*BITS_PER_ENABLE+:BITS_PER_ENABLE] : adjusted_q_a[i*BITS_PER_ENABLE+:BITS_PER_ENABLE]; + b_readdata[i*BITS_PER_ENABLE+:BITS_PER_ENABLE] = (b_bypass_enable[i]) ? b_bypass_data[i*BITS_PER_ENABLE+:BITS_PER_ENABLE] : adjusted_q_b[i*BITS_PER_ENABLE+:BITS_PER_ENABLE]; + end + end + end + else begin + assign a_readdata = adjusted_q_a; + assign b_readdata = adjusted_q_b; + end + endgenerate + + + + ///////////////////////////////// + // altera_syncram parameters // + ///////////////////////////////// + + localparam int BYTE_SIZE = (BE_WIDTH == 1) ? 0 : BITS_PER_ENABLE; + localparam INTENDED_DEVICE_FAMILY = DEVICE_FAMILY; + localparam OUTDATA_REG = (USE_HARD_LOGIC_FOR_OUT_REGISTER) ? ((USE_ENABLE) ? "CLOCK1" : "CLOCK0") : "UNREGISTERED"; + localparam CLOCK_ENABLE_OUTPUT = (USE_ENABLE && USE_HARD_LOGIC_FOR_OUT_REGISTER) ? "NORMAL" : "BYPASS"; + localparam MIXED_PORT_READ_DURING_WRITE = (READ_DURING_WRITE == "DONT_CARE" || !DEVICE_FAMILY_A10_OR_OLDER) ? "DONT_CARE" : "OLD_DATA"; + localparam POWER_UP_UNINITIALIZED = (USE_MEM_INIT_FILE || ZERO_INITIALIZE_MEM) ? "FALSE" : "TRUE"; + localparam MEM_INIT_FILE = (USE_MEM_INIT_FILE) ? MEM_INIT_FILE_NAME : "UNUSED"; + + + + /////////////////////////////// + // altera_syncram instance // + /////////////////////////////// + + altera_syncram + #( + //fundamentals + .lpm_type ("altera_syncram"), + .ram_block_type ("M20K"), + .operation_mode ("BIDIR_DUAL_PORT"), + .intended_device_family (INTENDED_DEVICE_FAMILY), + + //clocking -- all inputs on clock0, all outputs on clock1 (or no clock if outputs are unregistered) + .address_reg_b ("CLOCK0"), + .byteena_reg_b ("CLOCK0"), + .indata_reg_b ("CLOCK0"), + .outdata_reg_a (OUTDATA_REG), + .outdata_reg_b (OUTDATA_REG), + + //clock enables + .clock_enable_input_a ("BYPASS"), + .clock_enable_input_b ("BYPASS"), + .clock_enable_output_a (CLOCK_ENABLE_OUTPUT), + .clock_enable_output_b (CLOCK_ENABLE_OUTPUT), + + //reset is not used + .outdata_aclr_a ("NONE"), + .outdata_aclr_b ("NONE"), + .outdata_sclr_a ("NONE"), + .outdata_sclr_b ("NONE"), + + //size of the memory + .widthad_a (ADDR), //bit width of the address + .widthad_b (ADDR), + .numwords_a (DEPTH), //number of words + .numwords_b (DEPTH), + .width_a (WIDTH), //width of the write data and read data signals + .width_b (WIDTH), + .width_byteena_a (BE_WIDTH), //width of the byte enable signal + .width_byteena_b (BE_WIDTH), + .byte_size (BYTE_SIZE), + + //force to zero + .enable_force_to_zero (ENABLE_FORCE_TO_ZERO), + + //limit the depth of the memory to ensure access to all 20k bits + .maximum_depth (MAXIMUM_DEPTH), + + //mixed port read during write + .read_during_write_mode_mixed_ports (MIXED_PORT_READ_DURING_WRITE), + + //same port read during write -- dla_hld_ram does not allow configuration of this + .read_during_write_mode_port_a ("NEW_DATA_NO_NBE_READ"), + .read_during_write_mode_port_b ("NEW_DATA_NO_NBE_READ"), + + //hardened error correction code + .enable_ecc ("FALSE"), + + //memory initialization + .power_up_uninitialized (POWER_UP_UNINITIALIZED), + .init_file (MEM_INIT_FILE) + ) + altera_syncram_inst + ( + //clock + .clock0 (clock0), + .clock1 (clock1), + + //no reset + .aclr0 (1'b0), + .aclr1 (1'b0), + .sclr (1'b0), + + //port a + .address_a (address_a), + .addressstall_a (addressstall_a), + .byteena_a (byteena_a), + .data_a (data_a), + .wren_a (wren_a), + .q_a (q_a), + .rden_a (rden_a), + + //port b + .address_b (address_b), + .addressstall_b (addressstall_b), + .byteena_b (byteena_b), + .data_b (data_b), + .wren_b (wren_b), + .q_b (q_b), + .rden_b (rden_b), + + //shared + .clocken0 (1'b1), + .clocken1 (clocken1), + + //unused stuff which was intended for quad port ram + .address2_a (1'b1), + .address2_b (1'b1), + .clocken2 (1'b1), + .clocken3 (1'b1), + + //error correction codes + .eccencbypass (1'b0), + .eccencparity (8'b0), + .eccstatus () + ); + +endmodule + +`default_nettype wire diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram_lower_mlab_simple_dual_port.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram_lower_mlab_simple_dual_port.sv new file mode 100644 index 0000000..afec14e --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram_lower_mlab_simple_dual_port.sv @@ -0,0 +1,258 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +//see dla_hld_ram.sv for a description of the parameters, ports, and general functionality of all the dla_hld_ram layers + +//this module provides a unified interface for MLAB in simple dual port mode, it instantiates altdpram and adds soft logic to support old data mode + +`default_nettype none + +`include "dla_acl_parameter_assert.svh" + +module dla_hld_ram_lower_mlab_simple_dual_port #( + //geometry of the memory + parameter int DEPTH, //number of words of memory + parameter int WIDTH, //width of the data bus, both read and write data + parameter int BE_WIDTH, //width of the byte enable signal, note that WIDTH / BE_WIDTH must divide evenly + + //operation of memory + parameter DEVICE_FAMILY, //"Cyclone 10 GX" | "Arria 10" | "Stratix 10" | "Agilex" + parameter READ_DURING_WRITE, //"DONT_CARE" | "OLD_DATA" | "NEW_DATA" + + //specify whether to register or unregister the read address and the read data + parameter bit REGISTER_B_ADDRESS, //latency from b_address to b_readdata is REGISTER_B_ADDRESS + REGISTER_B_READDATA, can be from 0 to 2 inclusive + parameter bit REGISTER_B_READDATA, + + //memory initialization + parameter bit USE_MEM_INIT_FILE, //0 = do not use memory initialization file, 1 = use memory initialization file + //ZERO_INITIALIZE_MEM is not used since without a memory initialization file, altdpram memory contents always power up to 0 + parameter MEM_INIT_FILE_NAME, //if USE_MEM_INIT_FILE = 1, then specify the name of the file that contains the initial memory contents + + //derived parameters that affect the module interface + localparam int ADDR = $clog2(DEPTH) +) ( + input wire clock, + //no reset + + //port a + input wire [ADDR-1:0] a_address, //address for write + input wire a_write, //write enable + input wire [WIDTH-1:0] a_writedata, //data to write to memory + input wire [BE_WIDTH-1:0] a_byteenable, //which bytes of write data to commit to memory + input wire a_in_clock_en, //applies to all inputs of port a: address, write enable, write data, byte enable + + //port b + input wire [ADDR-1:0] b_address, //address for read + input wire b_read_enable, + output logic [WIDTH-1:0] b_readdata, //data read from memory + input wire b_in_clock_en, //applies to all inputs of port b: address + input wire b_out_clock_en //applies to all outputs of port b: read data +); + + //legality checks would be no stricter than what dla_hld_ram_lower already checked for + + + ////////////////////////// + // Derived parameters // + ////////////////////////// + + localparam int BITS_PER_ENABLE = WIDTH / BE_WIDTH; + + + + ////////////////////// + // altdpram ports // + ////////////////////// + + //add soft logic when hardened logic lacks functionality + //if byte enables are not used, then altdpram can be used with arbitrary width + //if mixed port read during write is old data mode, can emulate this by using new data mode and delaying all writes by 1 clock cycle + + logic [ADDR-1:0] wraddress, rdaddress; + logic wren; + logic [BE_WIDTH-1:0] byteena; + logic [WIDTH-1:0] data; + logic inclock, outclock; + logic outclocken; + + //write enable, byte enable, and write data + generate + if (READ_DURING_WRITE == "OLD_DATA") begin //old data mode is achieved by delaying all writes by 1 clock cycle + always_ff @(posedge clock) begin + data <= a_writedata; + wraddress <= a_address; + end + if (BE_WIDTH == 1) begin //1 byte enable for the entire data width, don't need to use physical byte enable, combine it with write enable + always_ff @(posedge clock) begin + wren <= a_write & a_in_clock_en & a_byteenable; + end + assign byteena = 1'b1; + end + else begin + always_ff @(posedge clock) begin + wren <= a_write & a_in_clock_en; + byteena <= a_byteenable; + end + end + end + else begin //new data or don't care + assign data = a_writedata; + assign wraddress = a_address; + if (BE_WIDTH == 1) begin //1 byte enable for the entire data width, don't need to use physical byte enable, combine it with write enable + assign wren = a_write & a_in_clock_en & a_byteenable; + assign byteena = 1'b1; + end + else begin + assign wren = a_write & a_in_clock_en; + assign byteena = a_byteenable; + end + end + endgenerate + + //read address is always implemented in ALM logic in some LAB other than the ones used for data storage, no penalty for using soft logic + generate + if (REGISTER_B_ADDRESS) begin + always_ff @(posedge clock) begin + if (b_in_clock_en) rdaddress <= b_address; + end + end + else begin + assign rdaddress = b_address; + end + endgenerate + + + //////////////<FORCE_TO_ZERO>/////////////// + localparam bit ENABLE_FORCE_TO_ZERO_SOFT_LOGIC = (DEVICE_FAMILY == "Cyclone 10 GX") || (DEVICE_FAMILY == "Arria 10"); + localparam string ENABLE_FORCE_TO_ZERO = ENABLE_FORCE_TO_ZERO_SOFT_LOGIC ? "FALSE" : "TRUE"; + logic b_read_valid; + logic read_enable_d1; + if (REGISTER_B_ADDRESS) begin : gen_in_read_enable_flop + always_ff @(posedge clock) begin + if (b_in_clock_en) begin + read_enable_d1 <= b_read_enable; + end + end + end else begin : gen_in_read_enable_wire + assign read_enable_d1 = b_read_enable; + end + + if (REGISTER_B_READDATA) begin : gen_out_read_valid_flop + always_ff @(posedge clock) begin + if (b_out_clock_en) begin + b_read_valid <= read_enable_d1; + end + end + end else begin : gen_out_read_valid_wire + assign b_read_valid = read_enable_d1; + end + //////////////</FORCE_TO_ZERO>/////////////// + + //clock enable for input: always use soft logic for write port (by masking the write enable), always use soft logic for read port (no penalty for read address to use soft logic) + assign inclock = clock; + + //clock enable for output: always use hard logic + generate + if (!REGISTER_B_READDATA) begin + assign outclock = clock; //ip catalog still connects this even though it is unused, unlike altera_syncram which complains if a clock is unused + assign outclocken = 1'b1; + end + else begin + assign outclock = clock; + assign outclocken = b_out_clock_en; + end + endgenerate + + logic [WIDTH-1:0] q; + + /////////////////////////// + // altdpram parameters // + /////////////////////////// + + localparam int BYTE_SIZE = (BE_WIDTH == 1) ? 0 : BITS_PER_ENABLE; + localparam INTENDED_DEVICE_FAMILY = DEVICE_FAMILY; + localparam OUTDATA_REG = (REGISTER_B_READDATA) ? "OUTCLOCK" : "UNREGISTERED"; + localparam MIXED_PORT_READ_DURING_WRITE = (READ_DURING_WRITE == "DONT_CARE") ? "DONT_CARE" : "NEW_DATA"; + localparam MEM_INIT_FILE = (USE_MEM_INIT_FILE) ? MEM_INIT_FILE_NAME : "UNUSED"; + + + + ///////////////////////// + // altdpram instance // + ///////////////////////// + + altdpram + #( + //fundamentals + .lpm_type ("altdpram"), + .ram_block_type ("MLAB"), + .intended_device_family (INTENDED_DEVICE_FAMILY), + + //clocking + .indata_reg ("INCLOCK"), + .outdata_reg (OUTDATA_REG), + .rdaddress_reg ("UNREGISTERED"), + .rdcontrol_reg ("UNREGISTERED"), + .wraddress_reg ("INCLOCK"), + .wrcontrol_reg ("INCLOCK"), + + //reset is not used + .indata_aclr ("OFF"), + .rdcontrol_aclr ("OFF"), + .rdaddress_aclr ("OFF"), + .wraddress_aclr ("OFF"), + .wrcontrol_aclr ("OFF"), + .outdata_aclr ("OFF"), + .outdata_sclr ("OFF"), + + //size of the memory + .width (WIDTH), + .widthad (ADDR), + .width_byteena (BE_WIDTH), + .byte_size (BYTE_SIZE), + + //mixed port read during write + .read_during_write_mode_mixed_ports (MIXED_PORT_READ_DURING_WRITE), + + //memory initialization + .lpm_file (MEM_INIT_FILE) + ) + altdpram_inst + ( + //write port + .inclock (inclock), + .inclocken (1'b1), + .data (data), + .wraddress (wraddress), + .wraddressstall (1'b0), + .wren (wren), + .byteena (byteena), + + //read port + .outclock (outclock), + .outclocken (outclocken), + .rdaddress (rdaddress), + .rdaddressstall (1'b0), + .rden (1'b1), + .q (q), + + //no reset + .aclr (1'b0), + .sclr (1'b0) + ); + + assign b_readdata = (b_read_valid ? q : {WIDTH{1'b0}}); + +endmodule + +`default_nettype wire diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram_remaining_width.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram_remaining_width.sv new file mode 100644 index 0000000..afffd23 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram_remaining_width.sv @@ -0,0 +1,327 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +//see dla_hld_ram.sv for a description of the parameters, ports, and general functionality of all the dla_hld_ram layers + +//this layer deals with "remaining width" +//every width of 10 will fully utilize the physical storage controlled by one physical byte enable signal +//if bits per enable = 32, then 30 bits will fully utilize the storage, and it may be beneficial to special case the 2 remaining bits instead of simply rounding it up to use 10 bits of storage +//this layer also handles the special rules for depth 16k, which is implemented with some mix of 4k x 5 (best memory utilization) and 16k x 1 (special case remaining width that minimize read mux glue logic) +//likewise this layer also handles the special rules for depth 8k, some mix of 4k x 5 and 8k x 2 + +`default_nettype none + +`include "dla_acl_parameter_assert.svh" + +module dla_hld_ram_remaining_width #( + //geometry configuration + parameter int DEPTH, + parameter int WIDTH, + parameter int BE_WIDTH, + + //geometry constants + parameter bit MINIMIZE_MEMORY_USAGE, + parameter int MIN_PHYSICAL_DEPTH, + + //memory initialization + parameter bit USE_MEM_INIT_FILE, + parameter bit ZERO_INITIALIZE_MEM, + parameter MEM_INIT_NAME, + + //memory configuration + parameter RAM_BLOCK_TYPE, + parameter RAM_OPERATION_MODE, + parameter DEVICE_FAMILY, + parameter READ_DURING_WRITE, + parameter bit REGISTER_A_READDATA, + parameter bit REGISTER_B_ADDRESS, + parameter bit REGISTER_B_READDATA, + + //try to use memory hardened logic + parameter bit USE_ENABLE, + parameter bit COMMON_IN_CLOCK_EN, + parameter bit COMMON_OUT_CLOCK_EN, + + //derived parameters + localparam int ADDR = $clog2(DEPTH) +) ( + input wire clock, + //no reset + + //port a + input wire [ADDR-1:0] a_address, + input wire a_read_enable, + input wire a_write, + input wire [WIDTH-1:0] a_writedata, + input wire [BE_WIDTH-1:0] a_byteenable, + output logic [WIDTH-1:0] a_readdata, + input wire a_in_clock_en, + input wire a_out_clock_en, + + //port b + input wire [ADDR-1:0] b_address, + input wire b_read_enable, + input wire b_write, + input wire [WIDTH-1:0] b_writedata, + input wire [BE_WIDTH-1:0] b_byteenable, + output logic [WIDTH-1:0] b_readdata, + input wire b_in_clock_en, + input wire b_out_clock_en +); + + /////////////////////// + // Legality checks // + /////////////////////// + + generate + //width / be_width must divide evenly with no remainder + `DLA_ACL_PARAMETER_ASSERT(WIDTH % BE_WIDTH == 0) + endgenerate + + + //////////////////////////////////////////// + // Summary of the remaining width rules // + //////////////////////////////////////////// + + //to understand how these rules were created, refer to: //depot/docs/hld/ip/dla_hld_ram introduction algorithm convergence.pptx + //if true dual port, then depth has been quantized to 1K, so TYPE will be even + + // DEPTH | TYPE | strategy + // -------------------+-----------------+-------------------------------------------------------------------------------- + // 2.5K, 3K, 3.5K | 5, 6, 7 | if (bits per enable % 10) is nonzero and up to 5, then extract up to width 5 for use in 4k x 5 + // -------------------+-----------------+-------------------------------------------------------------------------------- + // 4.5K, 5K, 5.5K, 6K | 9, 10, 11, 12 | if (bits per enable % 10) is nonzero and up to 2, then extract up to width 2 for use in 8k x 2 + // -------------------+-----------------+-------------------------------------------------------------------------------- + // 6.5K, 7K, 7.5K | 13, 14, 15 | if (bits per enable % 10) is nonzero and up to 6, then extract up to width 6 for use in 8k x 2 + // | | exception: if (bits per enable % 10) == 5, then use 4k x 5 instead, implemented by using altera_syncram MAXIMUM_DEPTH + // -------------------+-----------------+-------------------------------------------------------------------------------- + // 8K | 16 | if (bits per enable % 5) is 1, then extract width 6 (or 1) for use in 8k x 2 + // | | if (bits per enable % 5) is 2, then extract width 2 for use in 8k x 2 + // | | if (bits per enable % 5) is 3, then extract width 8 (or 3) for use in 8k x 2 + // | | if (bits per enable % 5) is 4, then extract width 4 for use in 8k x 2 + // -------------------+-----------------+-------------------------------------------------------------------------------- + // multiple of 16K | multiple of 32 | extract width (bits per enable % 5) for use in 16k x 1 + // -------------------+-----------------+-------------------------------------------------------------------------------- + // any other value | any other value | do nothing, depth is less than 2K or is a power of 2 + // | | the layer above separates depth into multiples of 16K, 8K, and leftover + + + + ////////////////////////// + // Derived parameters // + ////////////////////////// + + //determine whether to bypass the functionality in this layer + localparam bit DEVICE_FAMILY_A10_OR_OLDER = (DEVICE_FAMILY == "Cyclone 10 GX") || (DEVICE_FAMILY == "Arria 10"); + localparam bit CAN_WIDTH_SPLICE = MINIMIZE_MEMORY_USAGE & (RAM_BLOCK_TYPE == "M20K") & DEVICE_FAMILY_A10_OR_OLDER; + + //some math + localparam int BITS_PER_ENABLE = WIDTH / BE_WIDTH; + localparam int TYPE = DEPTH / MIN_PHYSICAL_DEPTH; + localparam int BPE_MOD_TEN = BITS_PER_ENABLE % 10; + localparam int BPE_MOD_FIVE = BITS_PER_ENABLE % 5; + + //for each depth category, calculate how many bits of remaining width would be extracted + localparam int EXTRACT_TYPE_5_TO_7 = (BPE_MOD_TEN == 0) ? 0 : (BPE_MOD_TEN <= 5) ? 5 : 0; + localparam int EXTRACT_TYPE_9_TO_12 = (BPE_MOD_TEN == 0) ? 0 : (BPE_MOD_TEN <= 2) ? 2 : 0; + localparam int EXTRACT_TYPE_13_TO_15 = (BPE_MOD_TEN == 0) ? 0 : (BPE_MOD_TEN <= 2) ? 2 : (BPE_MOD_TEN <= 4) ? 4 : (BPE_MOD_TEN == 5) ? 5 : (BPE_MOD_TEN == 6) ? 6 : 0; + localparam int EXTRACT_TYPE_16 = (BPE_MOD_FIVE == 0) ? 0 : (BPE_MOD_FIVE == 1) ? 6 : (BPE_MOD_FIVE == 2) ? 2 : (BPE_MOD_FIVE == 3) ? 8 : 4; + localparam int EXTRACT_TYPE_MULTI_32 = BPE_MOD_FIVE; + + //given the depth category, determine how many bits of remaining width to extract + localparam int EXTRACT = (TYPE >= 5 && TYPE <= 7) ? EXTRACT_TYPE_5_TO_7 : (TYPE >= 9 && TYPE <= 12) ? EXTRACT_TYPE_9_TO_12 : (TYPE >= 13 && TYPE <= 15) ? EXTRACT_TYPE_13_TO_15 : + (TYPE == 16) ? EXTRACT_TYPE_16 : ((TYPE/32)*32 == TYPE) ? EXTRACT_TYPE_MULTI_32 : 0; + + //extraction goes to right side, remaining bits per enable goes to left side + localparam int RIGHT_BITS_PER_ENABLE = (!CAN_WIDTH_SPLICE) ? 0 : (BITS_PER_ENABLE < EXTRACT) ? BITS_PER_ENABLE : EXTRACT; + localparam int LEFT_BITS_PER_ENABLE = BITS_PER_ENABLE - RIGHT_BITS_PER_ENABLE; + + //for next layer in the instantiation hierarchy + localparam int RIGHT_WIDTH = RIGHT_BITS_PER_ENABLE * BE_WIDTH; + localparam int LEFT_WIDTH = LEFT_BITS_PER_ENABLE * BE_WIDTH; + localparam int RIGHT_DEPTH = 1 << $clog2(DEPTH); //round up to nearest power of 2 + localparam bit RIGHT_MINIMIZE_MEMORY_USAGE = (RIGHT_DEPTH == 16*MIN_PHYSICAL_DEPTH) && (RIGHT_BITS_PER_ENABLE == 5); //only for depth=8k and width=5, need dla_hld_ram_lower to set altera_syncram MAXIMUM_DEPTH=4096 + localparam RIGHT_MEM_INIT_NAME = {MEM_INIT_NAME, "r"}; + localparam LEFT_MEM_INIT_NAME = {MEM_INIT_NAME, "l"}; + + + + ///////////////////////////// + // Width splice the data // + ///////////////////////////// + + // note this is a width SPLICE, not a width stitch + // within each bits per enable group, separate the left and right parts + // then for all groups, stitch all the left parts together, and stitch all the right parts together + + logic [RIGHT_WIDTH-1:0] right_a_writedata, right_b_writedata, right_a_readdata, right_b_readdata; + logic [LEFT_WIDTH-1:0] left_a_writedata, left_b_writedata, left_a_readdata, left_b_readdata; + + generate + if (RIGHT_BITS_PER_ENABLE == 0) begin : DATA_LEFT_ONLY + assign left_a_writedata = a_writedata; + assign left_b_writedata = b_writedata; + assign a_readdata = left_a_readdata; + assign b_readdata = left_b_readdata; + end + else if (LEFT_BITS_PER_ENABLE == 0) begin : DATA_RIGHT_ONLY + assign right_a_writedata = a_writedata; + assign right_b_writedata = b_writedata; + assign a_readdata = right_a_readdata; + assign b_readdata = right_b_readdata; + end + else begin : DATA_LEFT_AND_RIGHT + always_comb begin + for (int i=0; i<BE_WIDTH; i++) begin + {left_a_writedata[LEFT_BITS_PER_ENABLE*i +: LEFT_BITS_PER_ENABLE], right_a_writedata[RIGHT_BITS_PER_ENABLE*i +: RIGHT_BITS_PER_ENABLE]} = a_writedata[BITS_PER_ENABLE*i +: BITS_PER_ENABLE]; + {left_b_writedata[LEFT_BITS_PER_ENABLE*i +: LEFT_BITS_PER_ENABLE], right_b_writedata[RIGHT_BITS_PER_ENABLE*i +: RIGHT_BITS_PER_ENABLE]} = b_writedata[BITS_PER_ENABLE*i +: BITS_PER_ENABLE]; + a_readdata[BITS_PER_ENABLE*i +: BITS_PER_ENABLE] = {left_a_readdata[LEFT_BITS_PER_ENABLE*i +: LEFT_BITS_PER_ENABLE], right_a_readdata[RIGHT_BITS_PER_ENABLE*i +: RIGHT_BITS_PER_ENABLE]}; + b_readdata[BITS_PER_ENABLE*i +: BITS_PER_ENABLE] = {left_b_readdata[LEFT_BITS_PER_ENABLE*i +: LEFT_BITS_PER_ENABLE], right_b_readdata[RIGHT_BITS_PER_ENABLE*i +: RIGHT_BITS_PER_ENABLE]}; + end + end + end + endgenerate + + + + ///////////////////////////////////////////////// + // Next layer in the instantiation hierarchy // + ///////////////////////////////////////////////// + + //imitate the query functions in the software model + // synthesis translate_off + int NUM_PHYSICAL_M20K, NUM_PHYSICAL_MLAB; + int RIGHT_NUM_PHYSICAL_M20K, RIGHT_NUM_PHYSICAL_MLAB; + int LEFT_NUM_PHYSICAL_M20K, LEFT_NUM_PHYSICAL_MLAB; + assign NUM_PHYSICAL_M20K = RIGHT_NUM_PHYSICAL_M20K + LEFT_NUM_PHYSICAL_M20K; + assign NUM_PHYSICAL_MLAB = RIGHT_NUM_PHYSICAL_MLAB + LEFT_NUM_PHYSICAL_MLAB; + // synthesis translate_on + + generate + if (RIGHT_BITS_PER_ENABLE) begin : GEN_RIGHT + dla_hld_ram_bits_per_enable + #( + .DEPTH (RIGHT_DEPTH), //changed + .WIDTH (RIGHT_WIDTH), //changed + .BE_WIDTH (BE_WIDTH), + .MINIMIZE_MEMORY_USAGE (RIGHT_MINIMIZE_MEMORY_USAGE), //changed + .MIN_PHYSICAL_DEPTH (MIN_PHYSICAL_DEPTH), + .USE_MEM_INIT_FILE (USE_MEM_INIT_FILE), + .ZERO_INITIALIZE_MEM (ZERO_INITIALIZE_MEM), + .MEM_INIT_NAME (RIGHT_MEM_INIT_NAME), //changed + .RAM_BLOCK_TYPE (RAM_BLOCK_TYPE), + .RAM_OPERATION_MODE (RAM_OPERATION_MODE), + .DEVICE_FAMILY (DEVICE_FAMILY), + .READ_DURING_WRITE (READ_DURING_WRITE), + .REGISTER_A_READDATA (REGISTER_A_READDATA), + .REGISTER_B_ADDRESS (REGISTER_B_ADDRESS), + .REGISTER_B_READDATA (REGISTER_B_READDATA), + .USE_ENABLE (USE_ENABLE), + .COMMON_IN_CLOCK_EN (COMMON_IN_CLOCK_EN), + .COMMON_OUT_CLOCK_EN (COMMON_OUT_CLOCK_EN) + ) + dla_hld_ram_bits_per_enable_inst + ( + .clock (clock), + .a_address (a_address), + .a_read_enable (a_read_enable), + .a_write (a_write), + .a_writedata (right_a_writedata), //changed + .a_byteenable (a_byteenable), + .a_readdata (right_a_readdata), //changed + .a_in_clock_en (a_in_clock_en), + .a_out_clock_en (a_out_clock_en), + .b_address (b_address), + .b_read_enable (b_read_enable), + .b_write (b_write), + .b_writedata (right_b_writedata), //changed + .b_byteenable (b_byteenable), + .b_readdata (right_b_readdata), //changed + .b_in_clock_en (b_in_clock_en), + .b_out_clock_en (b_out_clock_en) + ); + + // synthesis translate_off + assign RIGHT_NUM_PHYSICAL_M20K = dla_hld_ram_bits_per_enable_inst.NUM_PHYSICAL_M20K; + assign RIGHT_NUM_PHYSICAL_MLAB = dla_hld_ram_bits_per_enable_inst.NUM_PHYSICAL_MLAB; + // synthesis translate_on + end + else begin : NO_RIGHT + // synthesis translate_off + assign RIGHT_NUM_PHYSICAL_M20K = 0; + assign RIGHT_NUM_PHYSICAL_MLAB = 0; + // synthesis translate_on + end + endgenerate + + + generate + if (LEFT_BITS_PER_ENABLE) begin : GEN_LEFT + dla_hld_ram_bits_per_enable + #( + .DEPTH (DEPTH), //unlike right this does not change + .WIDTH (LEFT_WIDTH), //changed + .BE_WIDTH (BE_WIDTH), + .MINIMIZE_MEMORY_USAGE (MINIMIZE_MEMORY_USAGE), //unlike right this does not change + .MIN_PHYSICAL_DEPTH (MIN_PHYSICAL_DEPTH), + .USE_MEM_INIT_FILE (USE_MEM_INIT_FILE), + .ZERO_INITIALIZE_MEM (ZERO_INITIALIZE_MEM), + .MEM_INIT_NAME (LEFT_MEM_INIT_NAME), //changed + .RAM_BLOCK_TYPE (RAM_BLOCK_TYPE), + .RAM_OPERATION_MODE (RAM_OPERATION_MODE), + .DEVICE_FAMILY (DEVICE_FAMILY), + .READ_DURING_WRITE (READ_DURING_WRITE), + .REGISTER_A_READDATA (REGISTER_A_READDATA), + .REGISTER_B_ADDRESS (REGISTER_B_ADDRESS), + .REGISTER_B_READDATA (REGISTER_B_READDATA), + .USE_ENABLE (USE_ENABLE), + .COMMON_IN_CLOCK_EN (COMMON_IN_CLOCK_EN), + .COMMON_OUT_CLOCK_EN (COMMON_OUT_CLOCK_EN) + ) + dla_hld_ram_bits_per_enable_inst + ( + .clock (clock), + .a_address (a_address), + .a_read_enable (a_read_enable), + .a_write (a_write), + .a_writedata (left_a_writedata), //changed + .a_byteenable (a_byteenable), + .a_readdata (left_a_readdata), //changed + .a_in_clock_en (a_in_clock_en), + .a_out_clock_en (a_out_clock_en), + .b_address (b_address), + .b_read_enable (b_read_enable), + .b_write (b_write), + .b_writedata (left_b_writedata), //changed + .b_byteenable (b_byteenable), + .b_readdata (left_b_readdata), //changed + .b_in_clock_en (b_in_clock_en), + .b_out_clock_en (b_out_clock_en) + ); + + // synthesis translate_off + assign LEFT_NUM_PHYSICAL_M20K = dla_hld_ram_bits_per_enable_inst.NUM_PHYSICAL_M20K; + assign LEFT_NUM_PHYSICAL_MLAB = dla_hld_ram_bits_per_enable_inst.NUM_PHYSICAL_MLAB; + // synthesis translate_on + end + else begin : NO_LEFT + // synthesis translate_off + assign LEFT_NUM_PHYSICAL_M20K = 0; + assign LEFT_NUM_PHYSICAL_MLAB = 0; + // synthesis translate_on + end + endgenerate + +endmodule + +`default_nettype wire diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram_short_depth_stitch.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram_short_depth_stitch.sv new file mode 100644 index 0000000..e0edfe5 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram_short_depth_stitch.sv @@ -0,0 +1,322 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +//see dla_hld_ram.sv for a description of the parameters, ports, and general functionality of all the dla_hld_ram layers + +//this layer is the top level for width/depth stitching algorithm originally developed for s10 m20k geometries +//depth stitch top and bottom, where top depth is a multiple of the max physical depth (for a10 limit this to 4k since 8k and 16k were already specially handled) + +`default_nettype none + +`include "dla_acl_parameter_assert.svh" + +module dla_hld_ram_short_depth_stitch #( + //geometry configuration + parameter int DEPTH, + parameter int WIDTH, + parameter int BE_WIDTH, + parameter int UTILIZED_WIDTH, + + //geometry constants + parameter bit MINIMIZE_MEMORY_USAGE, + parameter int MIN_PHYSICAL_DEPTH, + + //memory initialization + parameter bit USE_MEM_INIT_FILE, + parameter bit ZERO_INITIALIZE_MEM, + parameter MEM_INIT_NAME, + + //memory configuration + parameter RAM_BLOCK_TYPE, + parameter RAM_OPERATION_MODE, + parameter DEVICE_FAMILY, + parameter READ_DURING_WRITE, + parameter bit REGISTER_A_READDATA, + parameter bit REGISTER_B_ADDRESS, + parameter bit REGISTER_B_READDATA, + + //try to use memory hardened logic + parameter bit USE_ENABLE, + parameter bit COMMON_IN_CLOCK_EN, + parameter bit COMMON_OUT_CLOCK_EN, + + //derived parameters + localparam int ADDR = $clog2(DEPTH) +) ( + input wire clock, + //no reset + + //port a + input wire [ADDR-1:0] a_address, + input wire a_read_enable, + input wire a_write, + input wire [WIDTH-1:0] a_writedata, + input wire [BE_WIDTH-1:0] a_byteenable, + output logic [WIDTH-1:0] a_readdata, + input wire a_in_clock_en, + input wire a_out_clock_en, + + //port b + input wire [ADDR-1:0] b_address, + input wire b_read_enable, + input wire b_write, + input wire [WIDTH-1:0] b_writedata, + input wire [BE_WIDTH-1:0] b_byteenable, + output logic [WIDTH-1:0] b_readdata, + input wire b_in_clock_en, + input wire b_out_clock_en +); + + /////////////////////// + // Legality checks // + /////////////////////// + + generate + //sanity checks: for bits per enable to choose this module, need to minimize memory usage and use M20K + `DLA_ACL_PARAMETER_ASSERT(MINIMIZE_MEMORY_USAGE) + localparam bit RAM_BLOCK_TYPE_IS_M20K = RAM_BLOCK_TYPE == "M20K"; + `DLA_ACL_PARAMETER_ASSERT(RAM_BLOCK_TYPE_IS_M20K) + + //width / be_width must divide evenly with no remainder + `DLA_ACL_PARAMETER_ASSERT(WIDTH % BE_WIDTH == 0) + + //bits per enable must be 10, which enforces that width is a multiple of 10 + `DLA_ACL_PARAMETER_ASSERT((WIDTH/BE_WIDTH) == 10) + + //utilized width must be a multiple of 5, this layer and below only deals with depths up to 4k + `DLA_ACL_PARAMETER_ASSERT(UTILIZED_WIDTH % 5 == 0) + endgenerate + + + + ////////////////////////// + // Derived parameters // + ////////////////////////// + + //rules for depth stitching + localparam bit DEVICE_FAMILY_A10_OR_OLDER = (DEVICE_FAMILY == "Cyclone 10 GX") || (DEVICE_FAMILY == "Arria 10"); + localparam int MAX_PHYSICAL_M20K_DEPTH = (DEVICE_FAMILY_A10_OR_OLDER) ? 8*MIN_PHYSICAL_DEPTH : 4*MIN_PHYSICAL_DEPTH; //for a10 and older only allow 4k top, for s10 max physical depth is 2k + localparam int COMPLETE_MULTIPLES_OF_MAX_DEPTH = DEPTH / MAX_PHYSICAL_M20K_DEPTH; //how many multiples of max physical depth can we use without exceeding depth + localparam int TOP_DEPTH = COMPLETE_MULTIPLES_OF_MAX_DEPTH * MAX_PHYSICAL_M20K_DEPTH; //top depth uses as many multiples of max physical depth as possible without wastage + localparam int BOT_DEPTH = DEPTH - TOP_DEPTH; //leftover depth goes to the bottom + + //memory initialization file name modification + localparam TOP_MEM_INIT_NAME = {MEM_INIT_NAME, "t"}; + localparam BOT_MEM_INIT_NAME = {MEM_INIT_NAME, "b"}; + + //model how much of the physical width is actually used + //no change to top, bottom only deals with depth up to 3.5k and in all cases where the 4k x 5 geometry is used at least 6 bits from every group of 10 will be used + localparam int BOT_UTILIZED_WIDTH = WIDTH; + + //avoid zero width signals + localparam int TOP_ADDR = (TOP_DEPTH <= 1) ? 1 : $clog2(TOP_DEPTH); + localparam int BOT_ADDR = (BOT_DEPTH <= 1) ? 1 : $clog2(BOT_DEPTH); + + + + //////////////////// + // Depth stitch // + //////////////////// + + //based the depths of the sections (some depths can be 0), determine which section the address targets + //mask the write enable for all sections that the address does not target + //keep this decoding information live so that later when the read data arrives, know which section to consume read data from + + logic top_a_write, top_b_write; + logic bot_a_write, bot_b_write; + logic [TOP_ADDR-1:0] top_a_address, top_b_address; + logic [BOT_ADDR-1:0] bot_a_address, bot_b_address; + logic [WIDTH-1:0] top_a_readdata, top_b_readdata; + logic [WIDTH-1:0] bot_a_readdata, bot_b_readdata; + logic top_a_read_enable; + logic bot_a_read_enable; + logic top_b_read_enable; + logic bot_b_read_enable; + + dla_hld_ram_generic_two_way_depth_stitch #( + .TOP_DEPTH (TOP_DEPTH), + .BOT_DEPTH (BOT_DEPTH), + .WIDTH (WIDTH), + .REGISTER_A_ADDRESS (1), + .REGISTER_B_ADDRESS (REGISTER_B_ADDRESS), + .REGISTER_A_READDATA (REGISTER_A_READDATA), + .REGISTER_B_READDATA (REGISTER_B_READDATA) + ) + dla_hld_ram_generic_two_way_depth_stitch_inst + ( + .clock (clock), + .a_address (a_address), + .a_read_enable (a_read_enable), + .a_write (a_write), + .a_in_clock_en (a_in_clock_en), + .a_out_clock_en (a_out_clock_en), + .top_a_address (top_a_address), + .bot_a_address (bot_a_address), + .top_a_read_enable (top_a_read_enable), + .bot_a_read_enable (bot_a_read_enable), + .top_a_write (top_a_write), + .bot_a_write (bot_a_write), + .top_a_readdata (top_a_readdata), + .bot_a_readdata (bot_a_readdata), + .a_readdata (a_readdata), + .b_address (b_address), + .b_read_enable (b_read_enable), + .b_write (b_write), + .b_in_clock_en (b_in_clock_en), + .b_out_clock_en (b_out_clock_en), + .top_b_address (top_b_address), + .bot_b_address (bot_b_address), + .top_b_read_enable (top_b_read_enable), + .bot_b_read_enable (bot_b_read_enable), + .top_b_write (top_b_write), + .bot_b_write (bot_b_write), + .top_b_readdata (top_b_readdata), + .bot_b_readdata (bot_b_readdata), + .b_readdata (b_readdata) + ); + + + + ///////////////////////////////////////////////// + // Next layer in the instantiation hierarchy // + ///////////////////////////////////////////////// + + //imitate the query functions in the software model + // synthesis translate_off + int NUM_PHYSICAL_M20K, NUM_PHYSICAL_MLAB; + int TOP_NUM_PHYSICAL_M20K, TOP_NUM_PHYSICAL_MLAB; + int BOT_NUM_PHYSICAL_M20K, BOT_NUM_PHYSICAL_MLAB; + assign NUM_PHYSICAL_M20K = TOP_NUM_PHYSICAL_M20K + BOT_NUM_PHYSICAL_M20K; + assign NUM_PHYSICAL_MLAB = TOP_NUM_PHYSICAL_MLAB + BOT_NUM_PHYSICAL_MLAB; + // synthesis translate_on + + generate + if (TOP_DEPTH) begin : GEN_TOP + dla_hld_ram_lower + #( + .DEPTH (TOP_DEPTH), //changed + .WIDTH (WIDTH), + .BE_WIDTH (BE_WIDTH), + .MINIMIZE_MEMORY_USAGE (MINIMIZE_MEMORY_USAGE), + .UTILIZED_WIDTH (UTILIZED_WIDTH), + .MIN_PHYSICAL_DEPTH (MIN_PHYSICAL_DEPTH), + .USE_MEM_INIT_FILE (USE_MEM_INIT_FILE), + .ZERO_INITIALIZE_MEM (ZERO_INITIALIZE_MEM), + .MEM_INIT_NAME (TOP_MEM_INIT_NAME), //changed + .RAM_BLOCK_TYPE (RAM_BLOCK_TYPE), + .RAM_OPERATION_MODE (RAM_OPERATION_MODE), + .DEVICE_FAMILY (DEVICE_FAMILY), + .READ_DURING_WRITE (READ_DURING_WRITE), + .REGISTER_A_READDATA (REGISTER_A_READDATA), + .REGISTER_B_ADDRESS (REGISTER_B_ADDRESS), + .REGISTER_B_READDATA (REGISTER_B_READDATA), + .USE_ENABLE (USE_ENABLE), + .COMMON_IN_CLOCK_EN (COMMON_IN_CLOCK_EN), + .COMMON_OUT_CLOCK_EN (COMMON_OUT_CLOCK_EN) + ) + dla_hld_ram_lower_inst + ( + .clock (clock), + .a_address (top_a_address), //changed + .a_read_enable (top_a_read_enable), + .a_write (top_a_write), //changed + .a_writedata (a_writedata), + .a_byteenable (a_byteenable), + .a_readdata (top_a_readdata), //changed + .a_in_clock_en (a_in_clock_en), + .a_out_clock_en (a_out_clock_en), + .b_address (top_b_address), //changed + .b_read_enable (top_b_read_enable), + .b_write (top_b_write), //changed + .b_writedata (b_writedata), + .b_byteenable (b_byteenable), + .b_readdata (top_b_readdata), //changed + .b_in_clock_en (b_in_clock_en), + .b_out_clock_en (b_out_clock_en) + ); + + // synthesis translate_off + assign TOP_NUM_PHYSICAL_M20K = dla_hld_ram_lower_inst.NUM_PHYSICAL_M20K; + assign TOP_NUM_PHYSICAL_MLAB = dla_hld_ram_lower_inst.NUM_PHYSICAL_MLAB; + // synthesis translate_on + end + else begin : NO_TOP + // synthesis translate_off + assign TOP_NUM_PHYSICAL_M20K = 0; + assign TOP_NUM_PHYSICAL_MLAB = 0; + // synthesis translate_on + end + endgenerate + + + generate + if (BOT_DEPTH) begin : GEN_BOT + dla_hld_ram_bottom_width_stitch + #( + .DEPTH (BOT_DEPTH), //changed + .WIDTH (WIDTH), + .BE_WIDTH (BE_WIDTH), + .UTILIZED_WIDTH (BOT_UTILIZED_WIDTH), //changed + .MINIMIZE_MEMORY_USAGE (MINIMIZE_MEMORY_USAGE), + .MIN_PHYSICAL_DEPTH (MIN_PHYSICAL_DEPTH), + .USE_MEM_INIT_FILE (USE_MEM_INIT_FILE), + .ZERO_INITIALIZE_MEM (ZERO_INITIALIZE_MEM), + .MEM_INIT_NAME (BOT_MEM_INIT_NAME), //changed + .RAM_BLOCK_TYPE (RAM_BLOCK_TYPE), + .RAM_OPERATION_MODE (RAM_OPERATION_MODE), + .DEVICE_FAMILY (DEVICE_FAMILY), + .READ_DURING_WRITE (READ_DURING_WRITE), + .REGISTER_A_READDATA (REGISTER_A_READDATA), + .REGISTER_B_ADDRESS (REGISTER_B_ADDRESS), + .REGISTER_B_READDATA (REGISTER_B_READDATA), + .USE_ENABLE (USE_ENABLE), + .COMMON_IN_CLOCK_EN (COMMON_IN_CLOCK_EN), + .COMMON_OUT_CLOCK_EN (COMMON_OUT_CLOCK_EN) + ) + dla_hld_ram_bottom_width_stitch_inst + ( + .clock (clock), + .a_address (bot_a_address), //changed + .a_read_enable (bot_a_read_enable), + .a_write (bot_a_write), //changed + .a_writedata (a_writedata), + .a_byteenable (a_byteenable), + .a_readdata (bot_a_readdata), //changed + .a_in_clock_en (a_in_clock_en), + .a_out_clock_en (a_out_clock_en), + .b_address (bot_b_address), //changed + .b_read_enable (bot_b_read_enable), + .b_write (bot_b_write), //changed + .b_writedata (b_writedata), + .b_byteenable (b_byteenable), + .b_readdata (bot_b_readdata), //changed + .b_in_clock_en (b_in_clock_en), + .b_out_clock_en (b_out_clock_en) + ); + + // synthesis translate_off + assign BOT_NUM_PHYSICAL_M20K = dla_hld_ram_bottom_width_stitch_inst.NUM_PHYSICAL_M20K; + assign BOT_NUM_PHYSICAL_MLAB = dla_hld_ram_bottom_width_stitch_inst.NUM_PHYSICAL_MLAB; + // synthesis translate_on + end + else begin : NO_BOT + // synthesis translate_off + assign BOT_NUM_PHYSICAL_M20K = 0; + assign BOT_NUM_PHYSICAL_MLAB = 0; + // synthesis translate_on + end + endgenerate + +endmodule + +`default_nettype wire diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram_tall_depth_stitch.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram_tall_depth_stitch.sv new file mode 100644 index 0000000..b683fae --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_hld_ram_tall_depth_stitch.sv @@ -0,0 +1,376 @@ +// Copyright 2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +//see dla_hld_ram.sv for a description of the parameters, ports, and general functionality of all the dla_hld_ram layers + +//this layer depth stitches a multiple of 16k depth, 8k depth, and leftover depth +//there are special rules for handling depth 16k and depth 8k, and by extracting these the general purpose width/depth stitch only needs to consider depth up to 7.5k + +`default_nettype none + +`include "dla_acl_parameter_assert.svh" + +module dla_hld_ram_tall_depth_stitch #( + //geometry configuration + parameter int DEPTH, + parameter int WIDTH, + parameter int BE_WIDTH, + + //geometry constants + parameter bit MINIMIZE_MEMORY_USAGE, + parameter int MIN_PHYSICAL_DEPTH, + + //memory initialization + parameter bit USE_MEM_INIT_FILE, + parameter bit ZERO_INITIALIZE_MEM, + parameter MEM_INIT_NAME, + + //memory configuration + parameter RAM_BLOCK_TYPE, + parameter RAM_OPERATION_MODE, + parameter DEVICE_FAMILY, + parameter READ_DURING_WRITE, + parameter bit REGISTER_A_READDATA, + parameter bit REGISTER_B_ADDRESS, + parameter bit REGISTER_B_READDATA, + + //try to use memory hardened logic + parameter bit USE_ENABLE, + parameter bit COMMON_IN_CLOCK_EN, + parameter bit COMMON_OUT_CLOCK_EN, + + //derived parameters + localparam int ADDR = $clog2(DEPTH) +) ( + input wire clock, + //no reset + + //port a + input wire [ADDR-1:0] a_address, + input wire a_write, + input wire [WIDTH-1:0] a_writedata, + input wire [BE_WIDTH-1:0] a_byteenable, + output logic [WIDTH-1:0] a_readdata, + input wire a_in_clock_en, + input wire a_out_clock_en, + input wire a_read_enable, + output wire a_read_valid, + + //port b + input wire [ADDR-1:0] b_address, + input wire b_write, + input wire [WIDTH-1:0] b_writedata, + input wire [BE_WIDTH-1:0] b_byteenable, + output logic [WIDTH-1:0] b_readdata, + input wire b_in_clock_en, + input wire b_out_clock_en, + input wire b_read_enable, + output wire b_read_valid +); + + //no legality checks + + + ////////////////////////// + // Derived parameters // + ////////////////////////// + + //determine whether to bypass the functionality in this layer + localparam bit DEVICE_FAMILY_A10_OR_OLDER = (DEVICE_FAMILY == "Cyclone 10 GX") || (DEVICE_FAMILY == "Arria 10"); + localparam bit CAN_DEPTH_STITCH = MINIMIZE_MEMORY_USAGE & (RAM_BLOCK_TYPE == "M20K") & DEVICE_FAMILY_A10_OR_OLDER; + + //rules for depth stitching, if no depth stitching is allowed then all depth goes to the bottom + localparam int TOP_DEPTH = (!CAN_DEPTH_STITCH) ? 0 : (DEPTH / (32*MIN_PHYSICAL_DEPTH)) * (32*MIN_PHYSICAL_DEPTH); //extract as many multiples of 16k depth as possible + localparam int MB_DEPTH = DEPTH - TOP_DEPTH; //leftover depth for middle and bottom + localparam int MID_DEPTH = (!CAN_DEPTH_STITCH) ? 0 : (MB_DEPTH >= 16*MIN_PHYSICAL_DEPTH) ? 16*MIN_PHYSICAL_DEPTH : 0; //extract one 8k depth if available + localparam int BOT_DEPTH = MB_DEPTH - MID_DEPTH; //leftover depth for bottom, up to 7.5k + + //memory initialization file name modification + localparam TOP_MEM_INIT_NAME = {MEM_INIT_NAME, "_16"}; + localparam MID_MEM_INIT_NAME = {MEM_INIT_NAME, "_8"}; + localparam BOT_MEM_INIT_NAME = {MEM_INIT_NAME, "_"}; + + //avoid zero width signals + localparam int TOP_ADDR = (TOP_DEPTH <= 1) ? 1 : $clog2(TOP_DEPTH); + localparam int MID_ADDR = (MID_DEPTH <= 1) ? 1 : $clog2(MID_DEPTH); + localparam int BOT_ADDR = (BOT_DEPTH <= 1) ? 1 : $clog2(BOT_DEPTH); + + + + //////////////////// + // Depth stitch // + //////////////////// + + //based the depths of the sections (some depths can be 0), determine which section the address targets + //mask the write enable for all sections that the address does not target + //keep this decoding information live so that later when the read data arrives, know which section to consume read data from + + logic top_a_write, top_b_write; + logic mid_a_write, mid_b_write; + logic bot_a_write, bot_b_write; + logic [TOP_ADDR-1:0] top_a_address, top_b_address; + logic [MID_ADDR-1:0] mid_a_address, mid_b_address; + logic [BOT_ADDR-1:0] bot_a_address, bot_b_address; + logic top_a_read_enable; + logic mid_a_read_enable; + logic bot_a_read_enable; + logic top_b_read_enable; + logic mid_b_read_enable; + logic bot_b_read_enable; + logic [WIDTH-1:0] top_a_readdata, top_b_readdata; + logic [WIDTH-1:0] mid_a_readdata, mid_b_readdata; + logic [WIDTH-1:0] bot_a_readdata, bot_b_readdata; + + dla_hld_ram_generic_three_way_depth_stitch #( + .TOP_DEPTH (TOP_DEPTH), + .MID_DEPTH (MID_DEPTH), + .BOT_DEPTH (BOT_DEPTH), + .WIDTH (WIDTH), + .REGISTER_A_ADDRESS (1), + .REGISTER_B_ADDRESS (REGISTER_B_ADDRESS), + .REGISTER_A_READDATA (REGISTER_A_READDATA), + .REGISTER_B_READDATA (REGISTER_B_READDATA) + ) + dla_hld_ram_generic_three_way_depth_stitch_inst + ( + .clock (clock), + .a_address (a_address), + .a_read_enable (a_read_enable), + .a_write (a_write), + .a_in_clock_en (a_in_clock_en), + .a_out_clock_en (a_out_clock_en), + .top_a_address (top_a_address), + .mid_a_address (mid_a_address), + .bot_a_address (bot_a_address), + .top_a_read_enable (top_a_read_enable), + .mid_a_read_enable (mid_a_read_enable), + .bot_a_read_enable (bot_a_read_enable), + .top_a_write (top_a_write), + .mid_a_write (mid_a_write), + .bot_a_write (bot_a_write), + .top_a_readdata (top_a_readdata), + .mid_a_readdata (mid_a_readdata), + .bot_a_readdata (bot_a_readdata), + .a_readdata (a_readdata), + .b_address (b_address), + .b_read_enable (b_read_enable), + .b_write (b_write), + .b_in_clock_en (b_in_clock_en), + .b_out_clock_en (b_out_clock_en), + .top_b_address (top_b_address), + .mid_b_address (mid_b_address), + .bot_b_address (bot_b_address), + .top_b_read_enable (top_b_read_enable), + .mid_b_read_enable (mid_b_read_enable), + .bot_b_read_enable (bot_b_read_enable), + .top_b_write (top_b_write), + .mid_b_write (mid_b_write), + .bot_b_write (bot_b_write), + .top_b_readdata (top_b_readdata), + .mid_b_readdata (mid_b_readdata), + .bot_b_readdata (bot_b_readdata), + .b_readdata (b_readdata) + ); + + + + ///////////////////////////////////////////////// + // Next layer in the instantiation hierarchy // + ///////////////////////////////////////////////// + + //imitate the query functions in the software model + // synthesis translate_off + int NUM_PHYSICAL_M20K, NUM_PHYSICAL_MLAB; + int TOP_NUM_PHYSICAL_M20K, TOP_NUM_PHYSICAL_MLAB; + int MID_NUM_PHYSICAL_M20K, MID_NUM_PHYSICAL_MLAB; + int BOT_NUM_PHYSICAL_M20K, BOT_NUM_PHYSICAL_MLAB; + assign NUM_PHYSICAL_M20K = TOP_NUM_PHYSICAL_M20K + MID_NUM_PHYSICAL_M20K + BOT_NUM_PHYSICAL_M20K; + assign NUM_PHYSICAL_MLAB = TOP_NUM_PHYSICAL_MLAB + MID_NUM_PHYSICAL_MLAB + BOT_NUM_PHYSICAL_MLAB; + // synthesis translate_on + + generate + if (TOP_DEPTH) begin : GEN_TOP + dla_hld_ram_remaining_width + #( + .DEPTH (TOP_DEPTH), //changed + .WIDTH (WIDTH), + .BE_WIDTH (BE_WIDTH), + .MINIMIZE_MEMORY_USAGE (MINIMIZE_MEMORY_USAGE), + .MIN_PHYSICAL_DEPTH (MIN_PHYSICAL_DEPTH), + .USE_MEM_INIT_FILE (USE_MEM_INIT_FILE), + .ZERO_INITIALIZE_MEM (ZERO_INITIALIZE_MEM), + .MEM_INIT_NAME (TOP_MEM_INIT_NAME), //changed + .RAM_BLOCK_TYPE (RAM_BLOCK_TYPE), + .RAM_OPERATION_MODE (RAM_OPERATION_MODE), + .DEVICE_FAMILY (DEVICE_FAMILY), + .READ_DURING_WRITE (READ_DURING_WRITE), + .REGISTER_A_READDATA (REGISTER_A_READDATA), + .REGISTER_B_ADDRESS (REGISTER_B_ADDRESS), + .REGISTER_B_READDATA (REGISTER_B_READDATA), + .USE_ENABLE (USE_ENABLE), + .COMMON_IN_CLOCK_EN (COMMON_IN_CLOCK_EN), + .COMMON_OUT_CLOCK_EN (COMMON_OUT_CLOCK_EN) + ) + dla_hld_ram_remaining_width_inst + ( + .clock (clock), + .a_address (top_a_address), //changed + .a_read_enable (top_a_read_enable), + .a_write (top_a_write), //changed + .a_writedata (a_writedata), + .a_byteenable (a_byteenable), + .a_readdata (top_a_readdata), //changed + .a_in_clock_en (a_in_clock_en), + .a_out_clock_en (a_out_clock_en), + .b_address (top_b_address), //changed + .b_read_enable (top_b_read_enable), + .b_write (top_b_write), //changed + .b_writedata (b_writedata), + .b_byteenable (b_byteenable), + .b_readdata (top_b_readdata), //changed + .b_in_clock_en (b_in_clock_en), + .b_out_clock_en (b_out_clock_en) + ); + + // synthesis translate_off + assign TOP_NUM_PHYSICAL_M20K = dla_hld_ram_remaining_width_inst.NUM_PHYSICAL_M20K; + assign TOP_NUM_PHYSICAL_MLAB = dla_hld_ram_remaining_width_inst.NUM_PHYSICAL_MLAB; + // synthesis translate_on + end + else begin : NO_TOP + // synthesis translate_off + assign TOP_NUM_PHYSICAL_M20K = 0; + assign TOP_NUM_PHYSICAL_MLAB = 0; + // synthesis translate_on + end + endgenerate + + + generate + if (MID_DEPTH) begin : GEN_MID + dla_hld_ram_remaining_width + #( + .DEPTH (MID_DEPTH), //changed + .WIDTH (WIDTH), + .BE_WIDTH (BE_WIDTH), + .MINIMIZE_MEMORY_USAGE (MINIMIZE_MEMORY_USAGE), + .MIN_PHYSICAL_DEPTH (MIN_PHYSICAL_DEPTH), + .USE_MEM_INIT_FILE (USE_MEM_INIT_FILE), + .ZERO_INITIALIZE_MEM (ZERO_INITIALIZE_MEM), + .MEM_INIT_NAME (MID_MEM_INIT_NAME), //changed + .RAM_BLOCK_TYPE (RAM_BLOCK_TYPE), + .RAM_OPERATION_MODE (RAM_OPERATION_MODE), + .DEVICE_FAMILY (DEVICE_FAMILY), + .READ_DURING_WRITE (READ_DURING_WRITE), + .REGISTER_A_READDATA (REGISTER_A_READDATA), + .REGISTER_B_ADDRESS (REGISTER_B_ADDRESS), + .REGISTER_B_READDATA (REGISTER_B_READDATA), + .USE_ENABLE (USE_ENABLE), + .COMMON_IN_CLOCK_EN (COMMON_IN_CLOCK_EN), + .COMMON_OUT_CLOCK_EN (COMMON_OUT_CLOCK_EN) + ) + dla_hld_ram_remaining_width_inst + ( + .clock (clock), + .a_address (mid_a_address), //changed + .a_read_enable (mid_a_read_enable), + .a_write (mid_a_write), //changed + .a_writedata (a_writedata), + .a_byteenable (a_byteenable), + .a_readdata (mid_a_readdata), //changed + .a_in_clock_en (a_in_clock_en), + .a_out_clock_en (a_out_clock_en), + .b_address (mid_b_address), //changed + .b_read_enable (mid_b_read_enable), + .b_write (mid_b_write), //changed + .b_writedata (b_writedata), + .b_byteenable (b_byteenable), + .b_readdata (mid_b_readdata), //changed + .b_in_clock_en (b_in_clock_en), + .b_out_clock_en (b_out_clock_en) + ); + + // synthesis translate_off + assign MID_NUM_PHYSICAL_M20K = dla_hld_ram_remaining_width_inst.NUM_PHYSICAL_M20K; + assign MID_NUM_PHYSICAL_MLAB = dla_hld_ram_remaining_width_inst.NUM_PHYSICAL_MLAB; + // synthesis translate_on + end + else begin : NO_MID + // synthesis translate_off + assign MID_NUM_PHYSICAL_M20K = 0; + assign MID_NUM_PHYSICAL_MLAB = 0; + // synthesis translate_on + end + endgenerate + + + generate + if (BOT_DEPTH) begin : GEN_BOT + dla_hld_ram_remaining_width + #( + .DEPTH (BOT_DEPTH), //changed + .WIDTH (WIDTH), + .BE_WIDTH (BE_WIDTH), + .MINIMIZE_MEMORY_USAGE (MINIMIZE_MEMORY_USAGE), + .MIN_PHYSICAL_DEPTH (MIN_PHYSICAL_DEPTH), + .USE_MEM_INIT_FILE (USE_MEM_INIT_FILE), + .ZERO_INITIALIZE_MEM (ZERO_INITIALIZE_MEM), + .MEM_INIT_NAME (BOT_MEM_INIT_NAME), //changed + .RAM_BLOCK_TYPE (RAM_BLOCK_TYPE), + .RAM_OPERATION_MODE (RAM_OPERATION_MODE), + .DEVICE_FAMILY (DEVICE_FAMILY), + .READ_DURING_WRITE (READ_DURING_WRITE), + .REGISTER_A_READDATA (REGISTER_A_READDATA), + .REGISTER_B_ADDRESS (REGISTER_B_ADDRESS), + .REGISTER_B_READDATA (REGISTER_B_READDATA), + .USE_ENABLE (USE_ENABLE), + .COMMON_IN_CLOCK_EN (COMMON_IN_CLOCK_EN), + .COMMON_OUT_CLOCK_EN (COMMON_OUT_CLOCK_EN) + ) + dla_hld_ram_remaining_width_inst + ( + .clock (clock), + .a_address (bot_a_address), //changed + .a_read_enable (bot_a_read_enable), + .a_write (bot_a_write), //changed + .a_writedata (a_writedata), + .a_byteenable (a_byteenable), + .a_readdata (bot_a_readdata), //changed + .a_in_clock_en (a_in_clock_en), + .a_out_clock_en (a_out_clock_en), + .b_address (bot_b_address), //changed + .b_read_enable (bot_b_read_enable), + .b_write (bot_b_write), //changed + .b_writedata (b_writedata), + .b_byteenable (b_byteenable), + .b_readdata (bot_b_readdata), //changed + .b_in_clock_en (b_in_clock_en), + .b_out_clock_en (b_out_clock_en) + ); + + // synthesis translate_off + assign BOT_NUM_PHYSICAL_M20K = dla_hld_ram_remaining_width_inst.NUM_PHYSICAL_M20K; + assign BOT_NUM_PHYSICAL_MLAB = dla_hld_ram_remaining_width_inst.NUM_PHYSICAL_MLAB; + // synthesis translate_on + end + else begin : NO_BOT + // synthesis translate_off + assign BOT_NUM_PHYSICAL_M20K = 0; + assign BOT_NUM_PHYSICAL_MLAB = 0; + // synthesis translate_on + end + endgenerate + +endmodule + +`default_nettype wire diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_input_feeder.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_input_feeder.sv new file mode 100644 index 0000000..bc1307c --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_input_feeder.sv @@ -0,0 +1,149 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +H6X6Un9Nch/5r+XeUktVkhpL/7RRaCpVSGvfs5MLyfcGm6p8xAZ2Eg3xlOb0Zuamtajzjgi5yhZH +IVUq0cp3SY0d3asEg1wy8Y8VJDmoxLqVT/I7k8hTrHGC84uOIM1iuurqsKZDHMmH1QBSYnpgEHGZ +VzO4BOM1aMGY/nrXYstvFVOHoxz7ZiqNrQOGP0JbvJxo2rKT+CrSijhBhLCLyNIh722BMKaV2oSI +kcgO+eMjuJi3cBKP5SK3OCpEV0gMuP0eSSWnBt4wsbKPaMN6VHxikxa4Evtqq3yPx2PlvlesscrD +WwEv7O0bymVx8v2ujC+3knCJv0tL/saEin+wCQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 7280) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_input_feeder_constants.svh b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_input_feeder_constants.svh new file mode 100644 index 0000000..5a8934a --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_input_feeder_constants.svh @@ -0,0 +1,46 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +0ajPn2BYGBudkWMbvraGuvZ1858C2HiTGJUiFrjaikKhEZeMndNic3WlgUCpQiA2/hqrP/Q+rawr +pBdMJjzqrb8hTGtwlpUAs4p+bwrru5tTH55M0embVxeE7wFm+/QISre46JYcKM8zaMre/UZHin3v +zuCga7qAUCj1Ck90+CupgNG6HMLaLwa0xjzhLOpUHPMNiqygby7ATB0xHQdjUccD0Q3MAkOeCrA+ +x2M5vvc1oOAj2YETcwLEPc1n1plKU2mN5v1hU/EY7lc/ltRwC48wyWfkeV+xqcIClTZAXjcWCDiA +jyFOFNRb2iqHiouQous9jdV4rEHQ1F6qKzB9OQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 1408) +`pragma protect data_block +sTIUKTxvnoBH+7W1e/C8bEE1Rd7EGotI+aSRO5MqxcK5XSebhOoAMNwgfuhHYVBB9YRYbBIY+Bg4 +6NBG1myVAD2PbeF9BAqShZh45q8wPqHoHmTP9RjIPyxP849FbC2WaOD2BeuKOpkf8mW0c2eEehNE +OTihhnQ1Qnl85iml+RSWR08mvd3BpVYSk+mbu61LSUhnzBCV5YJxfAM+fJu6VPwdmPzaoRsCW/Gp +6ltP1cBgjR8ZO1y/hCM/KyGpfDBkIcLtVxhuiJ2UOS1NxPwcYwAr8URy/ctCKYoh9ypVA+QAtysp +ZMRSdo4NZLRbflKt2utQvWkt/yX6c1H9UkMcJHVNKqvxuh23Qq3ohiSzseszLC4hl5dlzWtjf/rt +Rx/l76HRKFvCYGbJ8ge2+Qy5X9jhYPdasIWGyPA/v8axuKYYbiuWywbWuI641efcQb1d41HHd81R +Q4LkmJxmVJIJMFWyH89mhx+sB7f6J92ZOTa/l3ZR3hwBp3ZZS4Jcctak510E0UK/rpdRX7vJu4ZT +nvXt6odC087+IgcLFrNie3kkv5o9ZIeirjpWfnmwoStNYCIcvyOGgk265v/X6m8d9FTOFZVVsK8x +Yk9GWnWRZzFZcS9GgmaP0cYELfsTjuROzDPLHZa7CXMg4pSn4lU2aTw/j+qTqDUzKwb7aJELeWKN +hlxZDDKpzW5EdRpFD8+f4MfVpkw64pGWneMct1OW/VTE0kZHak4o/aNQrlwZm5C0InrEyXpgazPj +6OFFKpekquJvjW6P89sMSKc9GJ9u0ReUPoZIDUKg4CgH1kVQ8XYH5PRpvkU3rgLER8OOk53N5722 +ECMRytJNQbn9jznUzV/cCkKbm9/19JVXcLKh3ZsyjDNKoNQ8CHw1PrHrbisWNs08tJi2yzy6kJoz +pmXbpaLIL7EBozU/8iOFVj4danjw9vnNVkxPoCHZva1jnryhrojpejkHSkQ55XrLJPO6lzWzHdHa +V4C1RPNHPGyV4rQq06EoKybLvrfwLhGM/pHjEsBfiYEyCu9+3Wbtk9p2At92710/9EzLJ8cqsmEZ +qJ6qysVxZeCs9Uj6G+mwACWlTXVTTGyouRqg7kcB9k21DVz/re6voY+IAwAUMxg/ty7hCZhGeMpP +Vv4mO9fQj0yB5QLgUybqZS7nXqsDi5auTiAvLYudrmxDJIC+Ags1uM5fCnzroQDhCJWSvdeBWwfj +7AxQGdFoBoUk21PbvJ0BCDHVUC2E4mbgUw6tzuvUq77MXONEA0knMo95DEznEWvYFC5FORS3fwhw +YxrRbwrDrV3JXNSlbRzBha78xpmmKdD9uNWVjgQeukUgdmywCMgzY4Vr+3WXLZ4uGTsK26jT/FoY ++C/f1uw8vSrY+rQzWvPvfmB5UYwYv0mRKT+t0BQjTK63YFbSVLgdm0yxfg5NrABzbrQDHc2APZBC +M5w9nqqg/8udCKtiYHwmCwwxy2zQG0WgBFXAaJtPuewoD+odCwqcXU9VIzGGzsNA/EqhFtp+yA38 +tYOPhJzpNW7z5fPKK5QADu1z9Uu2+fRQMm9VAAsjBfMedgSBh2CFIfMLiy3l7LqC5dlErA7bqSw9 +XXMxlJ1a5qHycvnsm/V4o2ZG4XigemIvGzGTea43WsTPw+aORh0UsxAvLTGdo6NIfms9W9b0YzMJ +/qzh0/Sx9wlt+HbrYVwSP992u+AyLKY8sSxvzLbYfDSYH4D9x3bXOPVVdzlSKGzFpTIUQkesEuYq +8ImgyfK65uOKSYX1ixR6JU9E8nACKt7m/84gQY0FxdUM+8WhhYZFF6Q624IaIdRbspU3IJ/hovX9 +Hz8xv42LqJ+3xcHDtratb995oXnjTWdEMQMdPcUOdrbl0sG3e+xU+A== +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_input_feeder_if.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_input_feeder_if.sv new file mode 100644 index 0000000..eee18f5 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_input_feeder_if.sv @@ -0,0 +1,68 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +qhO8p4Z4bshV/5KYGYy3emR0AO2CKBda0l8W8yRUA9jOQlR8uFk4ojUUvYekaxFKHjv9e2Pe/UeZ +7HMt75l8311ewyK+fqJxjlzVR4fMmXw1o0UCkGKTfcuPwLWYSawQ0QpDOAGrAiCO5oZdXRI17eRZ +o8IB5AzWg7vP3Vd0Dng5nAPuXK54T0uasqMdePTRmjeOHxxWxla6vO12Lxfw5sgYoAtTQn3ZGF+E +EN12js+osS839mlxAFAg80lkIFEwKHJYDQcSYI0Ck3scsxz8y7rMB6nDSGsjgyPV8Q5B05DUiehW +0B+AWmCL5+g0yrORB8yj+adspfzKOg64YXDkaQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 2624) +`pragma protect data_block +fmQ31F7urLp2rCEKR31XTNo+AGzhhr8A2LYAzSTuU9yasnPhQdzWZRL5IV1xVu7rO0tmKZOpzcgx +AWlw2b+I80jJk/BTD49cOUAQLZ18UJ2mDOkaNpf+Mi4A1NtpPDgQOGP8nhCwnGdV4xHfeWrPWcud +AGCVhi7wbPV03P0EzQALF2F4l8RQg85WP0tC7FGbScahTD/qFcNxtWlERjHns7Y/eLcQBL0zRj3S +nI69yja7X7monTei8r7HQJraARinsAmiKRuZ03dvqcYllmmx74BD2vrzkFdmUHgnDa57nVt6a6Py +clJpDBUcHxrEgLsyoIaUNVZVoecxbEqYFDnjH6VNiVHZnhsN/46krIfNyhrnhH/70LQtWYodOrSz +SlTEdsXWFwLHduQhyamU1aUfSYsfyFlBLzBLfNBxJwhvNRtKHs9plKVeSx4CIuI19+KrgwABlfTO +LGDR7LJoTP2CRKnhkkQMCilLpOZr9gB4k40h8HvVYiz5q44v2c5OeeBXJUne5iyGHO3kkIdnGsLI +nmGjQ4Td/9icfiu+qmWmZyaosuFCSKowWEGg8SunGNRlBNF1AHOmMgCge/Mzox53plgYhKKhSeQi +z++nzv2cPb/NYRW14wQh1xcVhGQ2lXQ2956xyv6TUufTiRX2bFPYrZY4QhsNddNhCRuv2WZNakjj +HgSAYGdvQj1Dcn8RQrRI+VKwj50sQ/hEGCkLBkwAZTK/TvMOH41LbXh8JHyp4w9hm2gqkHPP3JIQ +KzecQe9XASFILF40HY71T9+w8E3pmN5sNdcdaJiC/ydSLbSJt/qzIZ+ZxH08I3RufvCJfhqJd0R4 +DYJAJ6tjEPDN7PA1q76JUFmmpkd9qU5Tj8ZK2gVVbz38LQtCWEUOjEZHEaWbsfsMZz1ElzjWLVQO +TTFb1YfFGWf3tTqwP77k2U0/oCGY+9G9oYPudsUPrcTqTO7iLWhf/LHb7qTf8ae2tbzFewjj7Z5x +eCwSgZ8iDq+vQb5JDD/AeWiAjr3n9D0cm2IMSQ7bcBVqndYjN2AE0gfzYesqor3M91lRPP+aKTXt +2OaxmNy+zGazYyaGY0moFFO4TXEiEDCOWJiCW4UBpcr+qxuClsNNnxKvZ4TMFTwlbB4Q3wjcBDK+ +9OxsuXkHPIYejoqVvELLmWfQ4Jp/dMTowdx3jM3UH3HU2Op4GAN7VqoHTxDPNsC20ps+9JO+6NpB +A2g90kG7Ra6v/ISB9wBgU9q5c1z5nRNGVdYj+DpbFOJyHJuyuvrKJ5mEbqY/71R/nYQq51CVIzEl +AONGbUMN6U7qIeJR3vA2xUmYEw3Nn1yZFNYXvtaMSeMKyXU1oGWzcYogFGlO95c69jJdxqf6O0Ny +Rdc693I4ymuTqyTMNXeufV8Cz8uwxQogcCGzpyEVjwqUB4kHYgqarDZF7U+RlSkh2q3beqZitjF7 +qpVqT0e5h8TpgxRxciPtHa1kQ6N7XFM6DJjLcJbkZrb/MbGAo27HPfzMXSIdAAgTK/WYpNmdU3zq +mBWKDlji4+DRYBlQ6DjDczMCDITApdH2v/U/dA2QIcmbjfzo7RL7yULoVhj+L1dR9sbxnyKwgg7V +4/XQnptw6zDb7D+6hkRuS7lqQmNEZLsD6GEpEA2Ph3qiUsNHqzJB5hU58ttCG8VldGTDtZQf9BaV +sG/dXtfgABmt+UiKPO+kIdcPwT3TrWdSD8acOp+XaXZ46UF7sCy3is02/ZbId3YvY7wLkWbnYorr +AICUqIJQFsDnEG+PIW4BrxqMF4NxHg5lScnj8ltvziE9MmN03A3WPXuvlZRNpTnQstLUB/tVYo9p +xfR0BvZ2iQE/nPPyjvP+xkphDWeV0NXNkdsfseidJM3gxP4VOOJfLw+Gnrg/VHs4xRKRuxWzL86F +CLRrCgOYfBga35+lEGQyqMzwy4tNKQkgMUmWJCf22H4/uIgoxFibUOwuhDj4d/MoZf9q5D+RQivr +gKLuFCqRN9pXLcw8rcXm7HKjOzEgmV6ZTbSZZLttuLzvA2c881Wl7UEYOiWld6Vn0LoTzidjhJVZ +fGgXgLf8lpJ/ddfQFwehpsYKtTugY0I1HJKmY8fORD2djK7A4ZPU7qIF12F50XaXsOUAo0/MOLaO +lElG4chA5Q5Z0XeXa62FH0z3GuAEoDBEnck5Dj7rqzNUCZFN/7eX7xvR/vygwLuG+eXXMeMbK0Kd +Fosf6MLDfonBViMMUWlANdUIe5wW9sik4CNaa8+V0OBvWxZ4stPQOQYvbvanTB27bBwN4z2d9Wdy +0ZFOgr3Q7G8TZGQNsmkj4U7JaKr9wjJ2nxkR54T2CzbYiENB2rLc2iJTUojuDZiVMQ2qhTFcZDTG +0k65xtbffrKApZOXMrHgg9yUW4B6Ry5/b0PDLTcVTZIui0w9VoMRkRc2hKLPkTO1YuLVF97OpcTD +90vtSNBuxvWtxyKxBzzXj76r5JV0aiiSun6FAsF8cYb8W0x5GMb8Py0bVj5zJ0s51CGJqIhfzILo +TDdmQWTaQJ2ezLb0ZqHZx9piI1hvVgJlm5t+DvLSU870/uvK5ppDYgwayiRQ4fQkA9Zl13hDw9E+ +NUUCXC8O6zRs70vIKr/Zvhs5RJGY1AjnKPWmP1+fd2ZJxXjoLYTnpW0PMfR00Fohu+H+u0TD5oD4 +0Ti8rHlpJgFGBuQfEw8h9koxYsyv4CgMN+2/3kjZNdGaNtAP/lxuROuflqoLZUhll9t7MAKT5CjY +7hYpnsFiCOxEmVsEvAI1Yui/TUcHAnIZLNz8DyWVuz7UredihDQyEjXPiBslp/jw0MdpaFgh+tkB +sNZg7SZ3+ITyWwdaJtbctDl2NLaRpjfyCE9UvRH9EYht6O6snlGLrzFyj4WT4vMn6+eIA+T8O36n +9ekY36CNMUNlJ8uO4F5BnMJ7t25HKe3rwInSwXjJa3swdLOY+eNyFyXqMSTIQ/iA3MB9BCi9qByb +ITi3wrYkc8BXRK5lvqaqzgt7568gfxbMvTR2svlonyyChas01Sx+zqHoS8ADsMtdVkr5iL01z1cd +j15tPNaqjYbjPeNMtQPMQmMirmjLysDHRKcJlIzqoUmoXSx7U+ZMJmtAzZsjaO2ZUW15np3vJKaS +DgxtCZMMwZoDKpJY1yx58x5GaYteX8qZMXFsAC0/GsyyXP01SZQdSH1umO/L5TIRCw5szCXf1Lli +co82PqekfCOS1jFN8Q7i4Y/6bJSlhS9tDxpX2rL8ZXD5/Z4StibOete7yMqxYAmNpns53tniZglJ +Cn5PiGlgquX/i8PgZrSpSgxxYiPcU2AseYr8gzW39jXAiNPcXq+uorQqyMlKBuYL/L7p6rOqrSv7 +3n4/IfBZuW2J+LIpjKxAHXqkHgRAaCbWoaEid3cmq3HWqjFj5v2b+N5JYMuX2SwOaLXga4UrqF4I +VlfJ8JFxFazOe27tHMf+QiH+TBAl+LIeSnHejw6sQ1TnOuc1o3zUdZJGvKt5uSyeAGEkDjWQ61b+ +XWI= +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_input_feeder_in_config.svh b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_input_feeder_in_config.svh new file mode 100644 index 0000000..3c35991 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_input_feeder_in_config.svh @@ -0,0 +1,47 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +GVREK81zLl6keOaLghWPkEzPRUZg9ovYF0ljHQBCtnAZGgsXQ/cs+tnAkoPAPaJi2py2rIr3R0yH +5TwjjiMBrtyP6lD5pOUQL7cDLOeehbWpuB6YLQyf6sDsnufVDBTP2uWzmb3jV/ahiWah0Hs/6Qfk +Bdtt//qoBtKk4Cqt7R4MsocTf01gv6w4Ecb1baM+nJxllvEmrLD9F7Wk1vqGOtFrpOmVuNeG/2pT +A8OvwCrY+VK+fUa7jHoTar66V6/0xylyvBNRKIzBGf/Nb43kbCnPa7Z9oA9cC7n1Wwo4HcvZQ5bC +n7DUdWfMsy231NoVqJfrgxyuyJr0w5B0B/gj8w== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 1440) +`pragma protect data_block +4pmCOWJtypUpUPL+OU9vIEtS4arfjay4Y/TTWrCzAtr0CoZwQtucdporJvAYRBMFHVMxkezsmLON +xZal2E3TOY4F01DHz5xbW3AygGk+7VhcrB73tWOlmqB7nujkwFIuotgqpESQ8txIZocY0Vri6ad0 +nnzdmtFI7T9v+8+QLVCemy2Xo4XrwUFQDE5q6bR2bOTwL301ggw3zKEuEvaVmf0CyOnE4tm+uOiu +DerRQwDxYtcdEV0mjCvUYKDw1kuP7J41lKZH3DRlX6eWA6/iHlt+CfuM4xtWCbFZlCeVBRWc0dpP +FfBrlWGF686cqKqvl14ul6o/+MJNF0+SdOeM83bhxzN0AA8pACq+Ki1byDHi6KR5O0ozIE/vG/aa +5BGQH2gAq6vw8K21IlIzgY7lYmbw9ymBZGbPf5KUQ4IDjrNGp//7pgrqcN2tCmx/qH1jpL6Ws3Cc +R2SeZ9isT9bOMVO7lFI7uuy+dSf8dWQv1pXRsnQa5neaFJoqMxKW6HHMuVhNYsVgBa/BAjVRhmJd +57NMJAyYi6AUCMavLdx9ZMWpn5KqePWnQI8jmT9YEwA0FbUXjeEpRw+dZmjap+ceHNO6QCxX8x9/ +riK3BJHdrVaOrI5E+kNnyB81NcX76uhYMMjUu5ashNwUQsjYjpYTGkpwoJwjsq/sABxvokr/tvb7 +M8n+HBkBc1O+2vD6v6vPPocL+OE4KsgX4qm2phdg54M6KGChkTgHN3Jyl+EYzXIBPLgmE9m5BoW7 +hv56sZRLsWld8Sxqxw5N2I1/5t+81ZWkV1a1eOHJS6PUdsFDm8GK8fYBheZD+DJM1Hxb8MtEq3A6 +zMUi8XiLvhuF2oJpZZW7DBD2O7kKsjXXdsPa6C2PS3CA7m2G7WZ/gtJwM1OWGCMxbFyK26SFoBUO +nhEMKstIBezpbBSdPr+FKRJP3KCVXZTw/vmaeCtD0qYvDrfOMg75d/7cBdzM3JeOedkban9U+tDC +kha/vGEVedbY7KBTcsxsOJ5bsZPowUxSS8Yo5x1eeKj5Fb3V9KgTyMjjAOrMjC+zSLp41RIQ8oYs +JcmOGI65MWre87rHOopUy6DDHOQn5rpr2q4p85XKrJzSsNweFElLcOVLXpw02aMjsSAw1oJXxkK3 +13jrVNSS7ujviuWBPWx8PtGf8NbkQRR9QYdMhSNNLuOcec+EqCJenPsH4BesMpeDuiYxO3EJ1vko +cR6aUd/ZLi4SBFlddgC0euxS3MItvFvd5ZnwzEx+0DQAaJZWP5egeFOaXBktezObDH0QB9YvGcgk +nr+HJETUpDdt5jHVMP6FUpg1rhwL13/1g4Bklk57Vl0n66SNUDwf/vqmEd4/AVfBmqeWQ1eBvlfN +43wJ1v6hqcSICalmOz1IP5+AQAoL8/V3Mdc+IRMTH2LQ0kVcLBYKYKrrGC8vISsXRhbQ4IRnqw2x +L1zx9EFkcMcF9OfisAtMmJX5wAXwRqCb3v8Zh4Sl7dvywr5V6pLcztAa3gHRi3uuI5scnrnTs7QI +bmB0t9U5ajn+Ub/B0/cIpPpcUU3pJozt2f15zrUgXpj4sec/3ZuDb5bWayRBQrTTJ+4+z5C9Qu49 +eqVGXvKJzadEL9m6sZjVyD4De4/2zDVEEZ6hu3tOG3i1j4iBCNP7gQdSVz6pN62vQR9x//P2Zzqk +SYRZstKBx4A9Bs/6fU8JRpy6kHU6Ni9vxdYtUT7a5dtJsvINSfrZbqXrv54WCLBfX9pauL3pb6s9 +TqEWOrF22X5wvFnrFWFcw3+U17i+eYe3xMB5JhDXwVk1uTWk98EZfuGB0jRPdk/ogU5YS5J1IcSm +d9cg8fOI7SN76nzmF6Y3UhINyP/47u2S+hCxTmiwgjCfYY9ab8O3EMoF5RSbG2ztjA1fQdoe5SEo +wQVnqhh6q5hlf21RMMBG +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_input_feeder_out_config.svh b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_input_feeder_out_config.svh new file mode 100644 index 0000000..4d6775f --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_input_feeder_out_config.svh @@ -0,0 +1,47 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +WHUKlj1KvxMZO0iHXk/ZSQYz8rtj1knoGmKei7/38jYd8sD9VlVy15sEhJWJC8KHY/S1+isI1a+K +wwjrRCvsYVBGd8BfLktSC3crpvsMkl4OI/ir0UT5cHujGbHn8DpMIyCaPA20q6p3b+G3Nia6Asx9 +dHvnbyWrNlnQSAVv9ZHR5YLVbFpfzUclC2Z9Up2edbEqrBEY2vq1DjNCo3HI/wrI0J6vLBzt0dTj +OTJcZ+SyqMZVasH04nVp61Yh3eWZx/Jk0R0u/4rIrBKIcW/4EqmfQG6qQsQKdQIV24ecNBnymlsp +gZJ0EP3jt3UFGrBgR84lyMvw+m96z8BLSOx9MQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 1440) +`pragma protect data_block +ZdFNavpr4tNlcEMkgHMc8SaptU+BCVB80kU5OfxIDXFn0MoNaCX3IvRoJkvl7G90+mUgBoKi11zH +gNl5EPeL53yXTy03CaEST7snq7qcSxwass+KU08TyR4u7UUWhMxiN0cHy1WsEJdCVPLaTAN4I9pj +PhRIAU6AtnAA4y1VtbuOaYcgr/kJEF1cZcyqu1tSIAJRSP9tFzbkM9pmPDuMpBzCu/ekosiUstJq +KONGwtB8uJOKb+41yu8lPcw/BQ8UT40oNGsRzdu12RZ8VZhKiW12gonR8EhZMdgtsNY+w1BBVE2h +tuoxdTs+FwpB13SJFiMQZAq0janKuDGpbDgZhUFPgwZpRWUZ0O+OWtlbxAkFFmIDppaWsm9B3qzt +V8uFWyCT/eqSMiu/dvo/O+KI7/tkfRI4mNbMCFWkdzGGP4zSOmUgqNnHj2OkgkgkUOuyClZ8y/zW +JhwAAZhyxdOlYTRcE8F7ZITKT9HFtVgfm96s1+7slhDcW6hjxOe5A83WWDYP8ECjp7qgUfvLRFWH +TRgJyF4cZF52hrJnTvcK3vuo2I4r23mnV8HtE7c/pk66jAyRMonwxJz9vDSBNypb811NJl6Y2g8E +drJ7CcldGUluENRz1edtAc64KokKJP8K4AU8+zCTIu7XXW6xWgSIbYzInPNP/SigUSINmBT37Aoo +PApM3lyzwSREq7J8AFl+dcalc4FuEwp0WF9R8yEZ4Mv+rt9euav0ddSfVg3k3lIR6jFt4Q2O14jG +iIWYyDBUktO2y+s6+bU+fwi+XzZKfwq5ZAiIECxGzQJVjaMfYnAE1xIJTbpPukDcAFIy9FDSOvtq +cBmvJ/9/BRm66c1M6sS5WGw/aLDvPM/4APVNOraPquhFkDPgZKAxDFilpb8Y1ajTxTHVo4t9bIZe +LsVA2/psUwmPrNUaPb3/zbBf9IXZx7DVLwrPZsVew8Wvju74lhhkQnUfpIJT2WrP7TJoQP1f2V0y +k3YjBBYb+ezVJbU7gHi4Y2+UHEA/cSSvasscK2VePGM7TZUOTDkZFgWN4J4twOZ6wL4A0C5aChZQ +Twz+wY2HAV/ilTRMCvumjfnMOIzpqzdr4O1cG7YaB90oWfF5+zmT+iJ1Jx4gTAg0OAzdp4bQ1iz3 +Q/zIt0Pv2bNxF658OUWr2AURU4bQwnPPirJDnw+aG4DMjeGk5X/ZBFRdE4QyzX3aU8Sx0lTcBfVN +X714sshvzYsR+uL4O+SCvup3t/cG0zKqiSkPlIGUbv6+N4LKd/c3a4+sLzrohriPeu3DOQ1xEWo7 +UVT6KI10cWVZLJEH06VnI0wS+bMSgpObx0o8p/D9KlttMdE8yUeIlk0eQCpV5xoaoyvX7GQiTyD6 +dnCFMt2F0NtXuRkOPBzBNo9LJnOlhWoa1A6bntyCbiLIN4bxPelR8uoAcQlEtQaZbv00FoQYZP02 +iA/73mf0952kXTHR6umDSCb35djqYaVjaFjlhY/KYqGX6W+63haiL9epTQj5/oRP6IBc26F3l89u +QyWwR3ZM2Sun6bDVwZXD/mnHVSATGdatAoy8XJoOweIvVD8+6yNSH1i7w5R0+1MGy+2rM+M5kbA4 +v9d7toTd9beCBDBoI/2k4Gnc7OVsVo9Kb9V/00is3i4/dGHCT5Y3VyYYFhtuE1L5Ob80D/t9Zb+1 +sNjJkA4izRJC2i0pmnHFpDg2T9VtfE7D/LcpT6Hogmgv5UhH+cAJjn+4GojiBd4SGFfP/DKyD2Lz +edTSl3nRNHZwju7U6Ygfl0jy6oAmElkBizERV/5Yw8si7JC2JWq79Kj+zrQg+69p5inIaD/z1r3C +g8Jkwz+WzaNmzOWdwJQNrf69jwjShk20UZKVcoHQ++mvVR9e5Uvs2Wu09RFn6Qql8NzGY15Vb7V0 +x8NoKhWISygBJ7GLxPRg +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_input_feeder_pkg.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_input_feeder_pkg.sv new file mode 100644 index 0000000..64450c5 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_input_feeder_pkg.sv @@ -0,0 +1,112 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +dT1mVF8GoU2cXlESVkjpmR/BMAvC4Kd0HsHVlR9/iI0eF5mdJE6+UzX5AXLarLvihYxQwEgn3FaY +PNlWFJYbOlal03dl3H2rW1GjsC8vSAPNijMpCG3CZ0yT7z0ENTmWrxGndBqIOLElDC1SaxG89Ydz +mgKqyuIBluO9naGGuJqVylHcOP/tZHtDf61Tb22UW5RgOZdwMswl2ATXfx8m6NNV4Gh6ozNV/Izq +k6rJQYs2VqMO/dAQD3kzBBUM1eZETtM5LnwhmioZERawapm7PPIKZYgc3pwxCyEN9RkWx8VNOe7Q +iXnmTbCVxTtdyW+Jpk+8lOKYfVlpVX8QiLkpvg== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 5136) +`pragma protect data_block +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 +8SLLucTz +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_input_feeder_reader_config.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_input_feeder_reader_config.sv new file mode 100644 index 0000000..09d8adb --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_input_feeder_reader_config.sv @@ -0,0 +1,109 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +kLu/3iZ7n+cC6CJ08ce7j6+oGnqC8slbZQksEMB1zz9nStJGONl5k0IFvaMTj/AycVRc/BKJ60AP +i/6apunE4c1fZiAedGqlBx+rvSpC4OAz1V0nfnw/eNwWYpUcb0p2D0g28k/Hgd7P2kPElkXodojI +jkr8f9aL2KSYqgGyodd5Lkb2k/QWSbudfsH9cFTBanO3WlfeZ+a7leCGYcbmi0PpSvKs/Dutf0mZ +NYVemkRnllTBAUkvVuHRap+xVn36qnOp9FTg9IRvSp4WFSVzjgsDsYE3yjnupkECsl8+zm08x5vg +zewuELHTaoujUoOCqA0XVPwCBJiGE+dBHFj6mw== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 5008) +`pragma protect data_block +eR7ZAYtNGRUMlZ3GoXeyia72J/Cqjs5B+Fgbb661JlZg39DCHkoXXQw2tgiuCl4BvROqAyYPnTg+ +u73UmZGKvfgH+Bi5pfMdczcLTKVHx1DJXnpCzeOha/m6L0BNkFsx/lkHqCOuFfrBBnVxJXqSwrwD +TOmzEkFtBxYl3nTXBGoNwDOku1Xm87GvEc6q2HJ8Ps76AVHgBsODkZK1OlecAOklss913pJ1cMyT +HOnzvf6m9+jE1ZaXCkxnqsvoQGqJTaZ62wVf8zZsbXtZ7A3UIJyl8TTsQ4/hrPWGRCqCTQVzReBi +FrVMk70QnJsMSLtgi4JeI97gExUdKFw/JQdCOBspExTIJDlGbv/K71RsW5U9kCcTPy6I3HuA1PwM +ubaSlJ26RTMnUc6pdhS69+aIG3rUmr3X9OiBswfF1GDkWN3T2sYP6GRnB4BSC9OQLV0bDDWdIazN +BvO3bjeUqWoxVbdskrOxNZXL6oYu0WVoRSZ1pK6KZb1sL2U7LmB5Ia86tRpKPxH3LoCVXZUDvSS0 +fIXfRZlNtai+SvXh6gUcZdNcOHM0h2jMKzlOLKHH7f3FBD0xrfsVuvBulrz6p3UeyWXKl7eZbH6Y +Hr3wCzM7A23q3DLxCd5aDIw7cfu3weAQTQnIMDpDx5xb2Bd0s6MQMRaTGEC3CPf2/+gVWH5gXlM+ ++RejjC0k+7YsGnJwZSvHeD2DI1wZEnBCBa5P8TXthntot2du6qsuxB8qmZiuI7V3ZToTuVl5SpI9 +yYuZrvSqJdGpenH1E+q1xpMaB7SKXp0mm2GuLwgss6ILXXTXRLx0dbejxErzwhGT+iaAhP3q7ruW +XyrXwzt/m3x+wAK29hYHfU8O8xBLMlqkg3dYopUG8D3eCxlECPcwow3HNBZOstN9bz6rkfGpkals +ihbvj0AjBJPihSuDCf2w0lRha+7vTvqRt4Xe2gqgvH3fk4a3CiHTxU+Pa8Pih34902hRAGWeSA0V +Uod8NuOaEo2SQjPcdH78S9pWdpAT2VKiOR/ckcnqpNz6hfPULJPQB9EkiE10aj3GvXMV2iWVns5w +vnyBsQLOHs/prXG9Ka5zQ1WY3f5OmCv2WG2F+agOa8KHc5MhhHDcVMC69zSYVH0F5EB8L6FdvKx5 +KnaNu7KQzhRcsCbeokd/j7ZWoZHsu8FAGov9chCx7LV1MnPjPe5zTVjevLHBAz7004M5r1qb2o5S +X6syV9Rt3img8qN/+8Ei3eT80Jgl6egE/PNg+9xHExkwpRZLF9lj96vBtKE3+/PiwnIu/y0/o+h1 +ttbQD4wjYzQV8gc5HPrSWC88ew1w3M7DjmPLySFOPn+9h32TyehBGqnUyo4gXyM1ne5WTDkR0+zG +HGEL9vzcgGp/Lil5Y2I3QpvtufNLdCQziCRytonU/tVGikPeM7rxgj5+DbwZOBWMBWUDt8PHa2KY +xTcSj/YRqON4XuYq4QTh/XYHcabHGrCQxchqA9lEYBJz5HJvLQVESwVPdLqVbo1b4lixpWDPspVu +3KDiuRt5cHsA3A7T0/rdJHPRf8pFFSker8MzanP+dyH4ethbsN79f5jGmZ289pgMc6/ERoFPtebC +grIvKnSIPYVjQF9PYyuK5U2A1dFILTpjqdWKE5YIhXYmLCGT0T+a1L17/8MUOACIkYYtlqnD2sQh +0pR+btZs+iPuw05dNtOuNosyHof+CTmmxsUtJn6WQUX1lFqoV2A/lZiSKTUvltSh+zyb+zvUwogm +GD4Cl9qDbCxC2XF5Fby5esZMuHUBnrBFJPm1iCvea5kyza6itRyjdYJ551M3ZoqrphqS4Xc9G36R +CnE9D/mLwWdU1TQLwnsujZyO/rBOZVRUInnmp/cyvp96mC1aN/tUwbc1zZGOXYK35soYt239PlBE +hblHZzZKCXZGfPvIKvlJgXTsfbHblNy3JxXnQDFd1IvJtNdZrYUmrdQA9D9rkGxjnhfm89aEWf6Y +R0GMCV1YaIIhuiKhh2gOuLcr7QWD08hqIU9yN6C2VzULh2fA3g+SzKEdhiKHGgpRp0W1uynhP+QU +1tnwb230zuW9XLjZkCwUlA0ln2dWuhtfPLCagJ25JRMzgDtgxvFEeNhgbQ4d1H4B2ZUwfyXvaYDt +UEBaegYB4TV2eipgqzKClgKhBac1b2di5m1iDF+wx9v5r61ANSG7Xfzv6EsgMRt9x0rIltycahpZ +eWLg0Hox709MVHAbgTdEJZMerIRjOJ5qa3kHd10DNbm5Y3Ladln/qfJpkn5fLn4zk49G1MA45/je +mywwVS3ITCjs0pEMUQNDfSweR1h3RVwwO1OUXFzYAL8fEuC2nvFoXQq8nuEGnPt7cJJL55mB620T +BWwGHXGgYyi8WYTK2vk6sxWNusEUhz2bzKyIyMiEXZirPy+UYkpuvroNPgZPJpHBgntyomcFGBcO +okiZzrIpRpRJDQ7hJBiTrcoH1Dr7QXUA95D1HgxBMUZKxQJX11FB3KioMd1WL5FeePWasOKQUbu2 +FihLCtlptPlTGS8+T/NkYMDys4h0QyVQL+YfhtWIvuD9QXfVAI8EZOiyeJllLuZ3Q34iidZCGkc2 ++UJOvhVcQxik/0BIA5hvknEgNhNF6UJlHMh9OnC8qWRkJnbtUr3qAZTFyulxlmUmHD0cmmQ73ZOL ++Qf+0OLaQTzs5SgjL4I4clQTT7LWeJR+yK72ovczyPJYY8p5wq+GzFQqNaQHJ1CygktChDi0ciES +mAvToCDtJPq4jOWJwpuTsLfifMWutAWhY2FCzKmfuHAPxGCo0wyGMCN6tvSPh/x6q50rEYao6roz +jOTGswejyo+QelgtsOs1gddnQNML5Oiub1twoLCQiU/SI04iJf4J2jXBnCoYtjcYujTu3Hy3lMnh +L/G+LlsL8F2MQMQXo2mB+IFOc9ETOLmYMEOykR2iOacdG5e8bUc7y3QvT7EXuTpyFL1opro/T3ra +/6Q9gYXGL+Co0QT+3vumdP1PkN6GFZXmG62uA1fFYvYgRWI6zfEF3Ik8lxQ2KViQxyeHXVR/bjzi +zjZxKWDDT4t8dyse1Nbvx8VQcPRUQ8lt6qAHIbtBaXWV0FrrFtYm1u13U48Rr99FTfYRbi6dmeWo +EkjTT9jNy0p1yLsoV8XaDw3qxLcCyi1xH0b8Hvh56EkpsqaIdTpHLV0JeB5b6p00yFhcgvkdmlQp +Mx1dI+iByfkb8nUhk9mRGmnoBinp7J1ApfE1MP0GPqr5VduzgCJOba0MAW5pX6IH28XRvKsxQnVx +lEMA3yxGQIVGqDCidY4BQ++QesTC9YDN7S4BWf2wWPfg1x35aMkQBXLcc308CHvLELVSoxzCsd0W +gtRYwBwQn2iKOlHp7DKiYIvFx+oArL2QwFehKgtqJF2BOlFUPpCc7CYLIzfJtyQiBPZ2FimmuSlM +i/+OifJopdUZdFrxlhD2ne69grZCl+vBKhqPXH89EQQQeQeYNacltp60ztsteNpFNOlDsrwqW9QQ +Q5W5y7qG1+uJ5RQuW4d3TlbuaBVieCeTnlim13S3k2bG7lIY1L0In6CFCGs+jxaAVQXAgVOxtLfC +MHFCCm6+AghaLRAIbvLTsm5x48fk3HMEEwlvYGToEZQY5JCmq/ofqbL/busaKesuvtz+h9mUJF+L +H9mf1XxQ7BAJp1v8m+1a8bFRaUJFbt7RS8uZJlEUKKCPxeqItPn9s9O+LWhSYyjgLDmvA1SRSCcp +HdlW+xTeUu23ZmvDzoJt/zhJrgfe8VdYjSRt70uDrGvAR/sglQ2DOtjXj/m85wfJ1UCwpyXLKyT2 ++LB9oAoFfZRd2slZ1x7icjLK8YDn6F+IyN1gOohq6ocrpZkdmIL4HK0o6/TFqP4cbCczGElV+ngI +wOgI+b2HOt6hAAigfTPmzW437Uz9c3F0g29ZbPZMwRFrkt3juBW1PgGCABHZfpNY7K9/LS9dbt9C +2iuI6t7F5nZFP4Sf+uWADlPrgqMaUmEsM6iofOlnlKIVb0Rftq+qFN7oZDRSUOrp1MNNrjZx6op0 +R3NOsav5bAVqZFYXjzwo27Imdx9bj9mCO2WCmazgktZORf0egjOptW+7fCVPnFXB3BFX9uc6vMhy +zHVgoP+afln94jBND2LC5TpPzDp+fwUSRcuFkDj7w/n9JU95i7AImzwkOkY6sUlwfXgdOzov9eAC +hqDS/vG3jShxQXrB1N9jjVTecZ4tmIGrKFuKhekhsmjt4SOSkCgS4LjfDM1FOveA+0d1F4mPhM1y +iwgIdJkdDL72HAz8zPuxUPYlF51oS+XLfvnkiAXFTixLIFu19oVkCFRBb3UpzTh4cP0Io+MLtkxr +4dpzdMLeL39tOwpKhRm8X1AlBAODGwHCi3iJmVjZohCpKaupYzpLpIZnKdy+uhgbig+EAzuaG3sz +UbQSqycJr5PjTfx5cy9cAFQADfjGElZ3d60nDa3Veqsy4C2yF/bVfz50LRdEutxqMZNsSUuGOYfL +6xLDX2Sz8B3nxGF8oqKupGyEV43Iejc7JDhkhUIA9FCmYr7mEwMwaoTQG/0BhcumL++mrPYD77Nv +f0+4mxlXZ79CCtEoobvVT0KhwrZXovrK//5EVIpHsFeE3yFcc2tay6BQVDtShkYvKFxtAXdMS1+U +bk8KMyuuT1YVIsXIAa43+Zh1p7NEfBqDgXLbWJRhcvYEkSuoJH7WYX+2nrPZFjfPAfwRx/ESRNJ8 +4GuNWbukkU/Z/4O1Sc85k6mU/PTE4EYzJM0j+KNEpPByVlOJUcPgpY6ln1L43k1i0b5piVCIFLWb +5+fryc62KPwW65GOwNm64oAV0gDsxzDk9q3Z4x1h2eJAEVDQk914ji7HxZd92js6lMTVlm1nxhQN +0B8CU/zlqvSoKaUaedEjryMN7CiepdXFAPF5Y177VC0Sh6UGWZoRf2r9TOoEYSoXQBJgvUctFgqf +cyxOIX1Pa3BueP3Mj3/0kmTMgz8m1eqrFZeCDXkPQqqF2+eR5sxxJNTvbTbAz5B32QMx/iRH48ok +/I0S+/VA7M5ROyyoG6GcS+1iYk3ofi5rbzYGyAjN8t6b5YUZfK4zSylRz0uqGMCpIeeuEibrcbpy +9UkBEtrqtKnRfGlZzrSkGWkPVUZVezGKjeUsjMUAMaRrf1DD6MLM6NoJ6wQNaDoTOXEeRtKhDyuD +JVOWhKe5yyIWtOYMTL8kzyG4RmMOTDJ+J47eBK4XhlX/xamYHH9HDxoL/QxI/0MzOwqyR0h+JfHW +aMqfHfl2Zmy75CrZ5ab3v6UusXqa7b2vRTbt5JMEUpkH9uOeAUkunLxz5FYuSM4Eq10MDrcnT9Dq +xY1RujScrDFr8KZFfvjUds2YBBcn3Q4WEAL0xaq+UZQEOZV7zPq9/i15GEDFTU5QpKwCl0Uj43r5 +ela3Je6yFokdLt+0xPWlJUPLIne1U9LrVYGa961TR8zfNlb4kj8PfvP7AspjFqgI7rI3k/lPx+pr +D2B5O3j1e8vpJ/8QZoqXd88veGymDsQRRqlApzJFljtSoAz2BZdT+Iv6PLTf79KrwbO6WXEmBGhj +aoZ52ZWXi7takYwW0Jy5gDD5wwk6tMvC9vpNMDj5MlU0MTjrGrokiOxGoadCeYvLSUbnTen6vWsO +1tfD1jpiGyjunkZ2MNxuI2KzZrbwiigpxaTn9H61uKnccJjyhAbBjZpUciDNMF7/aOGrf1HbFsZa +x261whEri1+kZYNo/xhWVBf8/aqw2jOl3DZq9j+pjTTTRietsxmxA0oZPvH6Fkz81TEJfUJL+tMu +EHMQVCaNQXzUl2Zqg5pVl41p2pIC618NqqPQCkzpumNiHY7UK/89l15kri1FCzxB+8JHlpVkjXA7 +GymErV1pv+B6UGmqfGv7FD4e6Td8bDzw360+uKKJJRn70b6bVn3F3LqbEjWvtoCIkJCYb9tMpfyM +Hi0C3UvjAVFGagcB5jV1flL2WLlApvVNme2vQZCVAnxLLib7P8Zz3g2HZTqk/F0CugDgoqE8OALU +qv1m29fhx3fpdF9TLa4XAWr0GUzMXSowkafK4wwav/UNqSCRNR499MmXSEo9ja5yXuKD2kL0Jlkv +e3k/sA7MsBa3Jzeh06PNUjSD/n5br8YAakj9KmVtI/jVJBmRQLZie3Gefdd1/QFZ9deXwlVfIsfi +ZVFEFrTzREDCc7YbPAZZsXchhEegfGGk1OP2lWi3txffF+rBvskhW+9XZwdiCaZgNok8MFLG3xZJ +FpepK0Lw8r/TO32A4/9IxyJJN6u0szzY1kyqNtIUvgW4Yfbv1wZCNdIKPqxN12JhWv/EH9pG1Nq1 +ReoEka3nvOKRtzswnE9cl+q5APYhrPGM/9ehFrY3LDedVwhOl4MH6wP4pR9x5AM7RbsuOvtdEq/r +Qt5sMmtVwVbBw6DhiW3mij1VPDOYTeR7+2ARydVAF5MOJTQm4JM1LKvbxOVbMmi2qyXnYx5n4Mw8 +FEkPz3U5QM/ubgZXwYKtcr/7Zz/EnQScTNjZ79PQfPqPrRd5IpH4h+subo/724qK4Zo7YPT+ZLkk +A6f802m0i0l663QYe0ZXwg7A9R6s1w7hobyCmLOzPKPmYlYg1ndBp+6l9h90Wb57UgMBzMf1gNPu +k6GKwzjbKGDoQHFmU6zaXXBCqN6i15L1ygzYayU0qb/FZooXQmJN5BR6iG4ARf+vFQ== +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_input_feeder_reader_config_vc.svh b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_input_feeder_reader_config_vc.svh new file mode 100644 index 0000000..dea9905 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_input_feeder_reader_config_vc.svh @@ -0,0 +1,188 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +IggsBMYKnr9ErOgixNO0ckLg9bZTjMXhNcz9N5SfCNqiIAZbovtqMo5qGBy5r06EZ9VpqI9iW+w4 +Pao2nt50CPOpHJPvPIaHAusqg8HvT3HxtZ1Ehd2XbKyWD7EybbBkVJ8hpj7HplWup6sYDWnLr6cB +mP2MnldB8EhScOnGJX3g1I9Ths0Y5dwuIWbbSkgkFLbGujKVDbmwQgdKZV8JvgDr32I1mdAq6o6i +9sh5LXwwcWWksCmxsNXzZwpkp7Etsi3UNchxUEY3iZ5PYfHI13i6kS3QFKR5p2d8FV1WvkYz8zYn +DIHNL+t5cOt72jOy1ttzDziq6TF0yVUddgXgGA== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 9504) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_input_feeder_sb_xbar_config.svh b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_input_feeder_sb_xbar_config.svh new file mode 100644 index 0000000..a3076cc --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_input_feeder_sb_xbar_config.svh @@ -0,0 +1,45 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +Yvs8uO7+Rk2z4hpgHLnXLmMoxNLbdt4+/Iu0HuyLnrAEp+dZ/AwYbiVy8rnXmyANdD3Yxn8FDYt3 +0uKHDmKsPlPqTheQiuHcLIxIDrGdE8v62HMGIIa/Cy2wC39bCX2f2NdegEutC1xcaIVLP1sXkIaa +QrjUkwKLlNYolWj7HluZU85zoYZNMMbM1PBPhOzYGKxLM8McA3Yke0WwF/qt4kxEQ0FK7icUp9+e +vqX86UIK2KxqzkvYwvEl1UTx6hln7/Tx8RdU0TGi9obG5kJcmGTPHxUHZ2dFr7I95YxMKXSFUWmc +Air0o1bxWTmqiAgpgNaz0gNyjak0bj4ooPsy0Q== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 1312) +`pragma protect data_block +CKIYVmTtZb5SDAxZIIGiObnWbkH957+AZIC5patmDL/rJQjgd3e7Z/bsB7P5ojyon3CoNPulpW5L +KnWkMcBv0mO3DbJm2NQ/64roBnY66dWy9Mj03VA6CqUFN0LkrKAyIzrLqVm+nGQGKo/bS8buwYgw +IVptf5R0g88kgy1BiqUbWOs5zuwJxE7wabn0feh4k26gFRFgZ/UexJPvWuYFoaW5I3DfX6RYGCoE +piKiFfpuRuuVy8R+DrLAQimsZfQGZ/fovtd8F9T1lD3+MsRbS2I7y1Fe6zYXQJXsTUyc8TOLh6L0 +SlpXxeJIHjt5zm55FwevBNaNHVdBCkjdwGR/IRQi1qYseq+U/9JWMJkNR9YT1tPG/kVYASeJjf0S +yPQhAzdfJL4R2/9hlrMzJxGwyOpKBikokRS5Mz8WCV0QuEgbjDGI+LhnJ2lTsV60GkwdZe1b7TUM +V/zoC4+5oHYQY3FJPezq3Zy6GIHmFbosnexhfD8sbkcEOLL9xzJRP2DH95uWOATMEgwhAYNR/8f7 +XlkhNpnaBg4GfAggJShRjA/4L2EiibjFct2DOxtVLJmbTXhHCjRDt4LMc8FoCgoTBKljW7NSt987 +++A4dR1/YAbsWIetuRZ55bLiJFu/KWI+ww0Jo5AC7oP8WsVgnDXoO8PuCtC/LwVnScsBfjO+PhgM +T+Tr/Uk9D3+mRk8JifLcrAshKOC4yanqRyoacswJFa2TngcJuF6SNuOGFNQgryI16Fam/cbZ50ZT +BPyW53d0qe/08jHCrAwEUZm7/uWgAPhkvjeKV8/AU7Nl8SITz58GsOKqB18b5PmiWlcHGs9R+OUD +MfRrYM9g80gmRUOOIQ65XsgfQh+Dq3z13Ik0TUC1vaqnWWA41EUYcv1eAUYQUueW58sPzlOMBKbc +Shectst8caszVl1yWT1JCD4Dg5ELE6YtlI9z3PbKXHe9i6+5Vl78M7k5UU8DVEAfg44BdTUIWWQG +5wkwK0lk6KVlTph2eaFD0UAcFaIbz+wyqRojpGpimWXxWBYyOKiIzSoVtOtkDaGf78LFqHsf7IoU +y4rBDCIxsjakXwaSqw3gRQhqI7ycH/H2AABbDABPFnxQLWT2FQUAHWWrJF8mHZYranJnwn1LbxEN +KwnY7l/WQVIyExRm6N866WyDuZbdOUnfaq9p4RpGrMPQAOvHtV4kPHC0fA/gxDDcKypvyiR94eYO +gHtX6QC63MQniVjMmFqZPP+AD+PasjvSVfHe9waG8hKrtSvSpM+p3PHs4rNSngUg+oj4ZDUQZW2E +u5jyKkwcV2hvcQnkm661nV75fFiVeUMin33C5GQ3aw2bi6fD7TqVdgM5erpYAxiE94y1JyykofRs +P+SVReEC+V4Zt0uXEruBOziCHlBFOhCmsbo7mi6LgfWV0MPAea5n7fHLf4I2zlTJMAGHDY2b7Id5 +hzMiliqNWqpxmolJInQhcFWe5bMCEYl9DX4/dbAWD67c3DIF8URWzOAl0NSE4c0UrYVfNaRw7AOI +/aL/vb2RbuWP9TZMO24jI0+hrQNaMs7XQNjBOzqhNAfyluihiWsloJeQ0G4E+AaqizJsyPpidQBt +2/v2IvNDzdh65b7fPa7WjIi5AwJA5YaPlfhP+qZl1ewzCbHjKmZzBA8egcX7sv7bqpGyfXh4s+vd +dH7W08QalMPgS4IisqPQEehH7nNT4taTrmTtRNK8aLMKrBgFrTBAIE1aP6ECVFjhkXEGK2EKxigQ +2Q== +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_input_feeder_writer_config.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_input_feeder_writer_config.sv new file mode 100644 index 0000000..1ed7ec1 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_input_feeder_writer_config.sv @@ -0,0 +1,112 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +WXQDMtsItm2WrPwxq7oFabM+2JFWANMpDZeMKteAp9CVI3nke0J18Z38Jv6uLthVTCqVvFvGqT2l +H6H+58aE25YDhjCDep/eCu9bX0s7OVJtZd/ECN7e0zL1DBHONis8Yx/t+y8L8o3wRVxGJG84Z9oN +W6xTdj3eluSiLm8aZBmUxEcnMPuyO/K9sOTIdQTOo10vlsFhwnjTbNv1+Q5qmAyBG+VNq+IfiglD +szaFkJykdsnL+frAAKCWjiwN/2DNnYbXmLT3sM94ucrSD6NNPb3TKzoUFOahfQ0COt0Zb2DK+XqU +GwDXK0yi19MgBRYSDQ+EvMYVtG1VIlxA28ftpw== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 5136) +`pragma protect data_block +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 +4SczrHfA +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_input_feeder_writer_config_vc.svh b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_input_feeder_writer_config_vc.svh new file mode 100644 index 0000000..23744a6 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_input_feeder_writer_config_vc.svh @@ -0,0 +1,288 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +Owlgdigg+vhATtnEwPRt8W2bmkCp9BVfS7wkL+OuelAqqGKATMuu3K2pJ7e+N8COldQYqFkEfU4R +kAxofe0WOhrqxHnG/TfEeaXJBR9Ek1S1mfI5RCCKbgXGc6tEprgj1cQVLBJmbZ4nLrOZNhJbEwPl +U1A3x+6P1QBCJURl/kU3cLVnCo5JWKq6+bbnToyRZoOrEHSCWIN7m+sHbMUIjiFDmKj8IqW6rDHv +3KlQ39FR1CRGW+aKhLAv3CvgrcRkt3UvY8DmPtdG6mOTVfS3mAQIKfgf5lgAYqFqWzsDYkMvvgpQ +rgfKYBLoG8TPSRajNCXNSif5WR22a93HsREtLA== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 15168) +`pragma protect data_block +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 +dfLewn/D +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_input_feeder_writer_mux_config.svh b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_input_feeder_writer_mux_config.svh new file mode 100644 index 0000000..6889c17 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_input_feeder_writer_mux_config.svh @@ -0,0 +1,51 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +wQje0Vb3YTXZ1IZnpoenMCfGuo4QrYRuc/u7Me9Mni1UXnFC63eVDTXeIb1dWWTzuLMzWyDvGslz +/bYrHTG+0ITJlwOtXikmqwPHU/2r8sy5w8PRIyhokfvJshtXMWwDt3jvL+Pdxrz1ytDNxAO/8du5 +m8J6hCpHG67IuTgFI0hnjZpx+P6XB5FOZjshCkAI+QFXPN80bpeTuxTCu1oNt3Jrs7muYaAXQzED +4favJtaD4ixyx6ITHxF6izwsbT0ahFi+ch9sniiEyqdlv7GbhQaETwzZT6pTV+CL/J6W3mmpPjH7 +p5zWQJYxEZsojHxa4byVuW2s1Jm7C7ywObBPBw== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 1664) +`pragma protect data_block +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 +mshrNUEw5KuSgdY= +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_input_streamer.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_input_streamer.sv new file mode 100644 index 0000000..2f77c53 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_input_streamer.sv @@ -0,0 +1,218 @@ +// Copyright 2024 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +/** + * dla_input_streamer.sv + * + * FPGA AI Suite input streaming is handled here. This provides an AXI interface to the top-level entity, + * and is responsible for clock-crossing from AXI to DLA clock domains. This module is also responsible for + * applying the layout transform to incoming data. + * + * For now, enabling streaming implies enabling the hardware layout transform module. + * The layout transform assumes input tensors in HWC format; and the input bus width is arbitrary, width + * conversion is done in the layout transform where the output is always CVEC*sizeof(fp16). + * + * Flow control is handled by the configuration of the stream-buffer writer. Backpressuring from the SB + * writer will be propagated to this AXI connection to avoid the need to configure the transfer frame sizes + * in this module. + * + */ + +/** +TODO (arooney): + - Consider behaviour when a frame is done, it gets consumed by the SB, and the + LT can accept a few frames before backpressuring. But then the producer is a few packets into + the transmission. Maybe its best to only accept data when the layout transform is done AND the + SB is ready. + - Implement strobe signal handling. + - Remove unused AXI signals. +*/ + +`resetall +`undefineall +`default_nettype none + +module dla_input_streamer +#( + parameter int TDATA_WIDTH, + parameter int FIFO_DEPTH, + parameter int TID_WIDTH, + parameter int TDEST_WIDTH, + parameter int TUSER_WIDTH, + parameter dla_lt_pkg::lt_arch_t LT_ARCH, + parameter int OUTPUT_WIDTH +) ( + input wire clk_dla, + input wire clk_ddr, + // AMBA AXI-Stream signals + input wire clk_axi, + input wire i_resetn_async, + input wire [LT_ARCH.CONFIG_BYTES*8-1:0] i_config_data, + input wire i_config_valid, + output logic o_config_ready, + input wire i_streaming_enable, + input wire i_tvalid, // indicates the transmitter is driving a valid transfer + output logic o_tready, // indicates that the receiver can accept a transfer + input wire [TDATA_WIDTH-1:0] i_tdata, // the primary payload of the interface + input wire [TDATA_WIDTH/8-1:0] i_tstrb, // (NOT USED) byte qualifier indicating whether the + // associated byte in tdata should be processed + // as a data, or position byte + input wire [TDATA_WIDTH/8-1:0] i_tkeep, // (NOT USED) byte qualifier indicating whether the + // contents of tdata is processed as part of the data stream + input wire i_tlast, // (NOT USED) indicates the boundary of a packet + input wire [TID_WIDTH-1:0] i_tid, // (NOT USED) a data stream identifier + input wire [TDEST_WIDTH-1:0] i_tdest, // (NOT USED) provides routing information for the data stream + input wire [TUSER_WIDTH-1:0] i_tuser, // (NOT USED) user-defined sideband information + input wire i_twakeup, // (AXI5-S ONLY, NOT USED) identifies any activity associated with the AXI-s interface + // output + output logic [OUTPUT_WIDTH-1:0] o_istream_data, + output logic o_istream_valid, + input wire i_istream_ready, // from input feeder + + output logic o_reading_first_word, // for CSR active-jobs counter + output logic o_param_error +); + + logic resetn; + logic resetn_clk_dla; + logic reader_empty; + logic [OUTPUT_WIDTH-1:0] dcfifo_data; + logic dcfifo_valid, dcfifo_stall; + logic lt_done; + logic ready_input_state; // state-based input ready signal that accounts for inter-frame back-pressure + logic lt_ready; // ready signal from layout transform, accounts for intra-frame back-pressure + logic axi_param_error; + + //reset parameterization + localparam int RESET_USE_SYNCHRONIZER = 1; + localparam int RESET_PIPE_DEPTH = 3; + localparam int RESET_NUM_COPIES = 1; + dla_reset_handler_simple #( + .USE_SYNCHRONIZER (RESET_USE_SYNCHRONIZER), + .PIPE_DEPTH (RESET_PIPE_DEPTH), + .NUM_COPIES (RESET_NUM_COPIES) + ) + istream_reset_synchronizer + ( + .clk (clk_axi), + .i_resetn (i_resetn_async), + .o_sclrn (resetn) + ); + dla_reset_handler_simple #( + .USE_SYNCHRONIZER (RESET_USE_SYNCHRONIZER), + .PIPE_DEPTH (RESET_PIPE_DEPTH), + .NUM_COPIES (RESET_NUM_COPIES) + ) + istream_clk_dla_reset_synchronizer + ( + .clk (clk_dla), + .i_resetn (i_resetn_async), + .o_sclrn (resetn_clk_dla) + ); + + dla_streamer_fsm streamer_fsm ( + .clk_dla (clk_dla), + .clk_axi (clk_axi), + .i_resetn_axi (resetn), + .i_resetn_async (i_resetn_async), + .i_dla_ready (i_istream_ready), + .i_lt_ready (lt_ready), + .i_streaming_enable (i_streaming_enable), + .i_lt_done_frame (lt_done), + .i_tvalid (i_tvalid), + .o_stream_ready (ready_input_state), + .o_reading_first_word (o_reading_first_word) + ); + + // accept new data when LT and input feeder are both ready. This should translate to + // only accepting data when we're prepared to accept a whole image (as opposed to accepting + // a couple transfers until LT is full, then waiting for previous inference, then accepting the rest, + // since this would probably compilate frame dropping). + dla_layout_transform #( + .CNT_BITS(20), + .DDR_BYTES(TDATA_WIDTH/8), + .CONFIG_DATA_BYTES(LT_ARCH.CONFIG_BYTES), + .DATA_ELEMENT_WIDTH(LT_ARCH.DATA_ELEMENT_WIDTH), + .MAX_CHANNELS(LT_ARCH.MAX_CHANNELS), + .MAX_FEATURE_HEIGHT(LT_ARCH.MAX_FEATURE_HEIGHT), + .MAX_FEATURE_WIDTH(LT_ARCH.MAX_FEATURE_WIDTH), + .MAX_FEATURE_DEPTH(LT_ARCH.MAX_FEATURE_DEPTH), + .MAX_STRIDE_HEIGHT(LT_ARCH.MAX_STRIDE_HEIGHT), + .MAX_STRIDE_WIDTH(LT_ARCH.MAX_STRIDE_WIDTH), + .MAX_STRIDE_DEPTH(LT_ARCH.MAX_STRIDE_DEPTH), + .CVEC(LT_ARCH.CVEC), + .MAX_PAD_FRONT(LT_ARCH.MAX_PAD_FRONT), + .MAX_PAD_LEFT(LT_ARCH.MAX_PAD_LEFT), + .MAX_PAD_TOP(LT_ARCH.MAX_PAD_TOP), + .MAX_FILTER_WIDTH(LT_ARCH.MAX_FILTER_WIDTH), + .MAX_FILTER_HEIGHT(LT_ARCH.MAX_FILTER_HEIGHT), + .MAX_FILTER_DEPTH(LT_ARCH.MAX_FILTER_DEPTH), + .MAX_DILATION_WIDTH(LT_ARCH.MAX_DILATION_WIDTH), + .MAX_DILATION_HEIGHT(LT_ARCH.MAX_DILATION_HEIGHT), + .MAX_DILATION_DEPTH(LT_ARCH.MAX_DILATION_DEPTH), + .DO_U8_CONV(LT_ARCH.DO_U8_CONV), + .DEVICE(LT_ARCH.DEVICE) + ) reader_layout_transform ( + .clk(clk_axi), + .i_rstn(resetn), + .i_config_data(i_config_data), + .i_config_valid(i_config_valid), + .o_config_ready(o_config_ready), + .i_data(i_tdata), + .i_valid(i_tvalid & ready_input_state), + .o_ready(lt_ready), + .o_data(dcfifo_data), + .o_valid(dcfifo_valid), + .i_stall(dcfifo_stall), + .o_last(lt_done), + .o_param_error(axi_param_error) + ); + + localparam int DCFIFO_ALMOST_FULL_CUTOFF = 0; + dla_acl_dcfifo #( + .WIDTH (OUTPUT_WIDTH), + .DEPTH (FIFO_DEPTH), + .ALMOST_FULL_CUTOFF (DCFIFO_ALMOST_FULL_CUTOFF) + ) + clock_crosser + ( + .async_resetn (i_resetn_async), //reset synchronization is handled internally + + //write side + .wr_clock (clk_axi), + .wr_req (dcfifo_valid), + .wr_data (dcfifo_data), + .wr_almost_full (dcfifo_stall), + + //read side + .rd_clock (clk_dla), + .rd_empty (reader_empty), + .rd_data (o_istream_data), + .rd_ack (i_istream_ready) + ); + + dla_clock_cross_full_sync cc_param_error ( + .clk_src(clk_axi), + .i_src_async_resetn(1'b1), + .i_src_data(axi_param_error), + .o_src_data(), + + .clk_dst(clk_ddr), + .i_dst_async_resetn(1'b1), + .o_dst_data(o_param_error) + ); + + assign o_istream_valid = ~reader_empty; + assign o_tready = lt_ready & ready_input_state; + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_interface_if.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_interface_if.sv new file mode 100644 index 0000000..f387fd8 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_interface_if.sv @@ -0,0 +1,85 @@ +// Copyright 2021-2021 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +// The purpose of this module is to provide interfaces that are used across +// multiple modules. If needed, those modules should provide helper functions +// to create param structs from module specific structs that can be used to +// instantiate these interfaces. + +`include "dla_common_types.svh" + +interface pe_array_result_if #( + dla_interface_pkg::pe_array_result_param_t param +); + typedef struct packed { + logic valid; + logic [param.NUM_LANES-1:0][param.NUM_RESULTS_PER_CYCLE-1:0] + [param.NUM_FEATURES-1:0][param.RESULT_WIDTH-1:0] result; + } Type; + Type data; + modport sender(output data); + modport receiver(input data); +endinterface + +interface pe_array_control_if #( + dla_interface_pkg::pe_array_control_param_t param +); + typedef struct packed { + logic valid; + logic init_accumulator; + logic flush_accumulator; + logic [param.ELTWISE_MULT_CMD_WIDTH-1:0] eltwise_mult_cmd; + logic [param.RESULT_ID_WIDTH-1:0] result_id; + } Type; + Type data; + modport sender(output data); + modport receiver(input data); +endinterface + +interface input_feeder_feature_if #( + dla_interface_pkg::input_feeder_feature_param_t param +); + `BLOCK_TYPE(param.DOT_SIZE, param.FEATURE_WIDTH, param.FEATURE_EXPONENT_WIDTH); + block_t [param.NUM_LANES-1:0][param.NUM_FEATURES-1:0] data; + modport sender(output data); + modport receiver(input data); +endinterface + +interface scratchpad_write_addr_if #( + dla_interface_pkg::scratchpad_param_t param +); + typedef struct packed { + logic [param.SCRATCHPAD_MEM_ID_WIDTH-1:0] mem_id; + logic [param.SCRATCHPAD_MEM_ADDR_WIDTH-1:0] mem_addr; + } Type; + Type data; + modport sender (output data); + modport receiver (input data); +endinterface + +interface scratchpad_read_addr_if #( + dla_interface_pkg::scratchpad_param_t param +); + typedef struct packed { + // The base read address full + // address to read from. + logic [param.SCRATCHPAD_FILTER_BASE_ADDR_WIDTH-1:0] filter_base_addr; + + // Same as filter_base_addr but for bias_scale. Synchronous to it. Not + // used when ENABLE_2X_READ is off. ?? + logic [param.SCRATCHPAD_BIAS_SCALE_BASE_ADDR_WIDTH-1:0] bias_scale_base_addr; + } Type; + Type data; + modport sender (output data); + modport receiver (input data); +endinterface diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_interface_pkg.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_interface_pkg.sv new file mode 100644 index 0000000..4e0aa20 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_interface_pkg.sv @@ -0,0 +1,242 @@ +// Copyright 2020-2021 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +// --- dla_interface_pkg --- +// This package contains types which are used as interface types between +// subsystems. They are kept separate from the types in `dla_common_pkg` +// because the names in this package sometimes conflict with names in other +// packages, which cannot happen in `dla_common_pkg`. These name conflicts can +// happen because some subsystems create a typedef alias of a type in +// `dla_interface_pkg` with the same name except it is parameterized by an +// "arch" struct from the subsystem for convenience. +package dla_interface_pkg; + import dla_common_pkg::*; + + virtual class vector_t #(int VECTOR_SIZE, int DATA_WIDTH); + typedef struct packed { + logic [VECTOR_SIZE-1:0][DATA_WIDTH-1:0] v; + } t; + endclass + + virtual class block_t #(int BLOCK_SIZE, int MANTISSA_WIDTH, int EXPONENT_WIDTH); + typedef struct packed { + logic [EXPONENT_WIDTH-1:0] exponent; + logic [BLOCK_SIZE-1:0][MANTISSA_WIDTH-1:0] mantissa; + } t; + endclass + + virtual class pe_array_control_t #(int ELTWISE_MULT_CMD_WIDTH, int RESULT_ID_WIDTH); + typedef struct packed { + logic valid; + logic init_accumulator; + logic flush_accumulator; + logic [ELTWISE_MULT_CMD_WIDTH-1:0] eltwise_mult_cmd; + logic [RESULT_ID_WIDTH-1:0] result_id; + } t; + endclass + + virtual class pe_array_feature_t #( + int BLOCK_SIZE, + int FEATURE_WIDTH, + int FEATURE_EXPONENT_WIDTH, + int NUM_LANES, + int NUM_FEATURES + ); + typedef block_t#( + .BLOCK_SIZE(BLOCK_SIZE), + .MANTISSA_WIDTH(FEATURE_WIDTH), + .EXPONENT_WIDTH(FEATURE_EXPONENT_WIDTH))::t [NUM_LANES-1:0][NUM_FEATURES-1:0] t; + endclass + + virtual class pe_array_filter_t #( + int BLOCK_SIZE, + int FILTER_WIDTH, + int FILTER_EXPONENT_WIDTH, + int NUM_PES, + int NUM_FILTERS + ); + typedef block_t#( + .BLOCK_SIZE(BLOCK_SIZE), + .MANTISSA_WIDTH(FILTER_WIDTH), + .EXPONENT_WIDTH(FILTER_EXPONENT_WIDTH))::t [NUM_PES-1:0][NUM_FILTERS-1:0] t; + endclass + + virtual class pe_array_bias_t #( + int BIAS_WIDTH, + int NUM_PES, + int NUM_FILTERS + ); + typedef logic [NUM_PES-1:0][NUM_FILTERS-1:0][BIAS_WIDTH-1:0] t; + endclass + + virtual class pe_array_scale_t #( + int SCALE_WIDTH, + int NUM_PES, + int NUM_FILTERS + ); + typedef logic [NUM_PES-1:0][NUM_FILTERS-1:0][SCALE_WIDTH-1:0] t; + endclass + + virtual class pe_array_result_t #( + int RESULT_WIDTH, + int NUM_FEATURES, + int NUM_RESULTS_PER_CYCLE, + int NUM_LANES + ); + typedef struct packed { + logic valid; + logic [NUM_LANES-1:0][NUM_RESULTS_PER_CYCLE-1:0][NUM_FEATURES-1:0][RESULT_WIDTH-1:0] result; + } t; + endclass + + virtual class scratchpad_write_addr_t #(int MEM_ID_WIDTH, int MEM_ADDR_WIDTH); + typedef struct packed { + logic [MEM_ID_WIDTH-1:0] mem_id; + logic [MEM_ADDR_WIDTH-1:0] mem_addr; + } t; + endclass + + virtual class scratchpad_write_data_t #( + int MAX_DATA_WIDTH + ); + typedef struct packed { + logic is_filter; // indicates whether the write data is filter data or bias data + logic [MAX_DATA_WIDTH-1:0] data; + } t; + endclass + + virtual class scratchpad_read_addr_t #( + int FILTER_BASE_ADDR_WIDTH, + int BIAS_SCALE_BASE_ADDR_WIDTH + ); + typedef struct packed { + // The base read address (address without the last bit) for filter + // reading when 2x clock is enabled. Otherwise this represents full + // address to read from. + logic [FILTER_BASE_ADDR_WIDTH-1:0] filter_base_addr; + + // Same as filter_base_addr but for bias_scale. Synchronous to it. Not + // used when ENABLE_2X_READ is off. ?? + logic [BIAS_SCALE_BASE_ADDR_WIDTH-1:0] bias_scale_base_addr; + } t; + endclass + + virtual class scratchpad_read_data_t#( + int NUM_PE_PORTS, + int BLOCK_SIZE, + int FILTER_WIDTH, + int FILTER_EXPONENT_WIDTH, + int BIAS_WIDTH, + int SCALE_WIDTH); + typedef struct packed { + struct packed { + logic valid; + block_t#( + .BLOCK_SIZE(BLOCK_SIZE), + .MANTISSA_WIDTH(FILTER_WIDTH), + .EXPONENT_WIDTH(FILTER_EXPONENT_WIDTH))::t filter; + + logic [BIAS_WIDTH-1:0] bias; + logic [SCALE_WIDTH-1:0] scale; + } [NUM_PE_PORTS-1:0] ports; + } t; + endclass + + typedef struct packed { + logic init_accumulator; + logic flush_accumulator; + + logic [31:0] filter_read_addr; + logic [31:0] filter_read_base_addr; + + logic [31:0] bias_read_addr; + logic [31:0] bias_read_base_addr; + + logic layer_first_valids; + logic feature_valid; + + logic [31:0] eltwise_mult_cmd; + + logic filter_read; + logic all_done; + } input_feeder_control_t; + + function automatic int get_input_feeder_control_width(); + return $bits(input_feeder_control_t); + endfunction + + function automatic input_feeder_control_t get_input_feeder_control( + logic [get_input_feeder_control_width()-1:0] input_feeder_raw_data + ); + input_feeder_control_t control = input_feeder_control_t'(input_feeder_raw_data); + + return control; + endfunction + + typedef struct { + int NUM_LANES; + int NUM_RESULTS_PER_CYCLE; + int NUM_FEATURES; + int RESULT_WIDTH; + } pe_array_result_param_t; + + typedef struct { + int ELTWISE_MULT_CMD_WIDTH; + int RESULT_ID_WIDTH; + } pe_array_control_param_t; + + typedef struct { + int NUM_FEATURES; + int NUM_LANES; + int DOT_SIZE; + int FEATURE_WIDTH; + int FEATURE_EXPONENT_WIDTH; + } input_feeder_feature_param_t; + + function automatic int calc_mem_id_width(int NUM_PE_PORTS, int NUM_FILTER_PORTS, int NUM_BIAS_SCALE_PORTS); + // Max number of filter memories per filter write group. + automatic int NUM_FILTER_MEM_PER_GROUP = divceil(NUM_PE_PORTS, NUM_FILTER_PORTS); + // Max number of bias_scale memories per filter write group. + automatic int NUM_BIAS_SCALE_MEM_PER_GROUP = divceil(NUM_PE_PORTS, NUM_BIAS_SCALE_PORTS); + return $clog2(max(NUM_FILTER_MEM_PER_GROUP, NUM_BIAS_SCALE_MEM_PER_GROUP)); + endfunction + + function automatic int calc_mem_addr_width(int FILTER_DEPTH, int BIAS_SCALE_DEPTH); + return $clog2(max(FILTER_DEPTH, BIAS_SCALE_DEPTH)); + endfunction + + function automatic int calc_filter_base_addr_width(int FILTER_DEPTH); + return $clog2(FILTER_DEPTH); + endfunction + + function automatic int calc_bias_scale_base_addr_width(int BIAS_SCALE_DEPTH); + return $clog2(BIAS_SCALE_DEPTH); + endfunction + + typedef struct { + int SCRATCHPAD_MEM_ID_WIDTH; + int SCRATCHPAD_MEM_ADDR_WIDTH; + int SCRATCHPAD_FILTER_BASE_ADDR_WIDTH; + int SCRATCHPAD_BIAS_SCALE_BASE_ADDR_WIDTH; + } scratchpad_param_t; + + // Data stream parameters defined as a struct type + typedef struct { + int ELEMENT_BITS ; // Bit width of each tensor element (e.g., 16 for float16) + int VECTOR_SIZE ; // Vector depth of each transaction per-lane (former k drain) + int NATIVE_VECTOR_SIZE; // Vector depth of multiple transactions per-lane (former k depth) + int GROUP_SIZE ; // Number of lanes within a phase-aligned group + int GROUP_NUM ; // Number of phase-aligned groups + int GROUP_DELAY ; // Number of clocks of delay between phases + } aux_data_pack_params_t; +endpackage diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_interface_profiling_counters.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_interface_profiling_counters.sv new file mode 100644 index 0000000..a7128cb --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_interface_profiling_counters.sv @@ -0,0 +1,434 @@ +// Copyright 2021 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +`resetall +`undefineall +`default_nettype none +`include "dla_acl_parameter_assert.svh" + +// This module snoops on the control signals of several stallable interfaces throughout CoreDLA. It uses each valid and +// ready pair to produce several counters which are useful for debug purposes. These counters as well as the steady state +// values of valid and ready are readable by the debug network. + +// It is expected that a human (and not some automated script) will examine the data dumped by the debug network. To assist +// the parsing of this information, this module also contains a ROM that describes which offsets the profiling counters +// are available at as well as a human readable string to describe what each profiling counter is. As a contingency plan +// in case the FPGA runs low on M20K memory blocks, the ROM functionality could be moved entirely into software, however +// this would then require strict versions between hardware and runtime. + +// Future optimizations: +// 1. Not all interfaces runs on clk_dla, probably the easiest way to deal with this is to have one instantiation of this +// module per clock domain (use clock crossers to connect to the debug network which runs on clk_dla). Would need to +// expose RAM depth, mem init file name, etc. as parameters. In case there are lots of stallable interfaces, probably +// better to use multiple instantiations so that the ROM and read data mux won't grow super large. +// 2. Upper 32 bits of each 64-bit counter can probably be implemented with RAM instead of registers. Each time the bottom +// 32 bits overflows, assert some flag. Enhance the state machine to check and clear such flags, and upon doing so +// perform a read-modify-write to the RAM to add 1 to the upper 32 bits of the corresponding counter. + +module dla_interface_profiling_counters #( + parameter int NUM_INTERFACES, //number of stallable interfaces to snoop on valid and ready + parameter int ADDR_WIDTH, //width of the read request address, typically 24 + parameter int DATA_WIDTH //width of the read response data, typically 32 +) ( + input wire clk, + input wire i_resetn_async, //active low reset that has NOT been synchronized to any clock + + //snoop on valid and ready from various stallable interfaces + input wire i_snoop_valid [NUM_INTERFACES-1:0], + input wire i_snoop_ready [NUM_INTERFACES-1:0], + + //debug network interfaces + input wire i_dbg_arvalid, + input wire [ADDR_WIDTH-1:0] i_dbg_araddr, + output logic o_dbg_arready, + output logic o_dbg_rvalid, + output logic [DATA_WIDTH-1:0] o_dbg_rdata, + input wire i_dbg_rready +); + + ///////////////////////////////// + // Parameter legality checks // + ///////////////////////////////// + + //signal widths cannot be trivial + `DLA_ACL_PARAMETER_ASSERT(NUM_INTERFACES >= 1) + `DLA_ACL_PARAMETER_ASSERT(ADDR_WIDTH == 24) //this is the only configuration ever tested + `DLA_ACL_PARAMETER_ASSERT(DATA_WIDTH == 32) //this is the only configuration ever tested + + + + ///////////////// + // Constants // + ///////////////// + + //ROM sizing + localparam int RAM_DEPTH = 2048; //BEWARE: make sure this is at least as deep as the MIF file + localparam int RAM_ADDR = $clog2(RAM_DEPTH); + + //state machine + localparam int STATE_IDLE = 0; + localparam int STATE_ROM_ACCEPT = 1; + localparam int STATE_ROM_ADDR = 2; + localparam int STATE_ROM_DATA = 3; + localparam int STATE_COUNT_ACCEPT = 4; + localparam int STATE_COUNT_ADDR = 5; + localparam int STATE_COUNT_DATA = 6; + localparam int STATE_FREEZE_DATA = 7; + localparam int NUM_STATES = 8; + + + + /////////////// + // Signals // + /////////////// + + //reset + logic sclrn; + + //rom - implemented as ram for now + //future optimization: upper bits of profiling counters change slowly, can probably move these inside the ram + logic ram_wr_en; + logic [RAM_ADDR-1:0] ram_wr_addr, ram_rd_addr; + logic [DATA_WIDTH-1:0] ram_wr_data, ram_rd_data; + + //profiling counters + genvar g; + logic freeze; + logic [DATA_WIDTH-1:0] profiling_counter_per_interface [NUM_INTERFACES-1:0]; + logic [DATA_WIDTH-1:0] profiling_counter_final; + + //state machine + logic [$clog2(NUM_STATES)-1:0] state; + logic [ADDR_WIDTH-1:0] captured_addr; + + + + ///////////////////////////// + // Reset Synchronization // + ///////////////////////////// + + dla_reset_handler_simple #( + .USE_SYNCHRONIZER (1), + .PIPE_DEPTH (1), + .NUM_COPIES (1) + ) + reset_synchronizer + ( + .clk (clk), + .i_resetn (i_resetn_async), + .o_sclrn (sclrn) + ); + + + + /////////// + // ROM // + /////////// + + // See create_mif.cpp for a description of the offset/string encoding that the runtime expects and that + // the memory initialization file needs to implement. + + altera_syncram + #( + .address_aclr_b ("NONE"), + .address_reg_b ("CLOCK0"), + .clock_enable_input_a ("BYPASS"), + .clock_enable_input_b ("BYPASS"), + .clock_enable_output_b ("BYPASS"), + .enable_ecc ("FALSE"), + .init_file ("dla_interface_profiling_counters.mif"), + .intended_device_family ("Arria 10"), //Quartus will fix this automatically + .lpm_type ("altera_syncram"), + .numwords_a (RAM_DEPTH), + .numwords_b (RAM_DEPTH), + .operation_mode ("DUAL_PORT"), + .outdata_aclr_b ("NONE"), + .outdata_sclr_b ("NONE"), + .outdata_reg_b ("CLOCK0"), + .power_up_uninitialized ("FALSE"), + .ram_block_type ("M20K"), + .read_during_write_mode_mixed_ports ("DONT_CARE"), + .widthad_a (RAM_ADDR), + .widthad_b (RAM_ADDR), + .width_a (DATA_WIDTH), + .width_b (DATA_WIDTH), + .width_byteena_a (1) + ) + ram + ( + .address_a (ram_wr_addr), + .address_b (ram_rd_addr), + .clock0 (clk), + .data_a (ram_wr_data), + .wren_a (ram_wr_en), + .q_b (ram_rd_data), + .address2_a (1'b1), + .address2_b (1'b1), + .addressstall_a (1'b0), + .addressstall_b (1'b0), + .byteena_a (1'b1), + .byteena_b (1'b1), + .clock1 (1'b1), + .clocken0 (1'b1), + .clocken1 (1'b1), + .clocken2 (1'b1), + .clocken3 (1'b1), + .data_b ({DATA_WIDTH{1'b1}}), + .eccencbypass (1'b0), + .eccencparity (8'b0), + .eccstatus (), + .q_a (), + .rden_a (1'b1), + .rden_b (1'b1), + .wren_b (1'b0) + ); + assign ram_wr_en = 1'b0; + assign ram_wr_addr = '0; + assign ram_wr_data = '0; + assign ram_rd_addr = captured_addr[RAM_ADDR+1:2]; + + + + ////////////////////////// + // Profiling Counters // + ////////////////////////// + + // Each stallable interface has a set of profiling counters which occupies a 32 byte chunk of the address space. + // + // Byte offset | Interpretation + // ------------+---------------------------------------------------------------------------------------------- + // 0 | Steady state value of valid + // 4 | Steady state value of ready + // 8 | Lower 32-bits of 64-bit counter for number of transactions accepted (valid & ready) + // 12 | Upper 32-bits of the above counter + // 16 | Lower 32-bits of 64-bit counter for number of clock cycles of backpressure (valid & ~ready) + // 20 | Upper 32-bits of the above counter + // 24 | Lower 32-bits of 64-bit counter for number of clock cycles of data starvation (~valid & ready) + // 28 | Upper 32-bits of the above counter + // + // There is some special handling for data starvation. It is a bit trickier to profile since "~valid & ready" will be + // true before any work has begun as well as after all the work has finished. To resolve this, only start counting + // after the first item of work has been seen, and every time a new item of work is seen capture the value in a + // shadow register (avoid observing any increment in the raw counter after the last item of work). + // + // Since it takes multiple 32-bit reads to access the entire 64-bit value, there is the ability to freeze the counter + // values. This is implemented by masking ready and valid i.e. the increment to the counter is set to 0. Note the freeze + // does not affect the reading of the steady state value of valid and ready. + + for (g=0; g<NUM_INTERFACES; g++) begin : GEN_PROFILING_COUNTERS + //add pipelining for routability to decouple the physical location of the interface from the + //physical location of the profiling counters + localparam int INPUT_PIPE_STAGES = 4; + logic valid, ready; + logic [INPUT_PIPE_STAGES-2:0] pipe_valid, pipe_ready; + always_ff @(posedge clk) begin + {valid, pipe_valid} <= {pipe_valid, i_snoop_valid[g]}; + {ready, pipe_ready} <= {pipe_ready, i_snoop_ready[g]}; + end + + //decode which profiling counter should increment based on valid and ready + logic incr_transaction, incr_backpressure, incr_starvation; + logic transaction_seen, incr_transaction_previous; + always_ff @(posedge clk) begin + incr_transaction <= ~freeze & valid & ready; + incr_backpressure <= ~freeze & valid & ~ready; + incr_starvation <= ~freeze & ~valid & ready & transaction_seen; + + if (~freeze & valid & ready) transaction_seen <= 1'b1; + incr_transaction_previous <= incr_transaction; + + if (~sclrn) begin + incr_transaction <= 1'b0; + incr_backpressure <= 1'b0; + incr_starvation <= 1'b0; + transaction_seen <= 1'b0; + end + end + + //update the profiling counters + //64-bit counter is tessellated into two 32-bit counters, use the carry out from the + //lower 32 bits to determine whether to increment upper 32 bits + logic [DATA_WIDTH-1:0] count_transaction_lo, count_transaction_hi; + logic count_transaction_carry; + logic [DATA_WIDTH-1:0] count_backpressure_lo, count_backpressure_hi; + logic count_backpressure_carry; + logic [DATA_WIDTH-1:0] raw_starvation_lo, raw_starvation_hi; + logic raw_starvation_carry; + logic [DATA_WIDTH-1:0] count_starvation_lo, count_starvation_hi; + + always_ff @(posedge clk) begin + //how many items of work have passed through this stallable interface + {count_transaction_carry, count_transaction_lo} <= {1'b0, count_transaction_lo} + incr_transaction; + count_transaction_hi <= count_transaction_hi + count_transaction_carry; + + //how many clock cycles of backpressure have been observed + {count_backpressure_carry, count_backpressure_lo} <= {1'b0, count_backpressure_lo} + incr_backpressure; + count_backpressure_hi <= count_backpressure_hi + count_backpressure_carry; + + //data starvation raw counter -- start counting "~valid & ready" only after the first item of work + {raw_starvation_carry, raw_starvation_lo} <= {1'b0, raw_starvation_lo} + incr_starvation; + raw_starvation_hi <= raw_starvation_hi + raw_starvation_carry; + + //data starvation shadow register -- don't observe increases in raw counter after the last item of work + if (incr_transaction) count_starvation_lo <= raw_starvation_lo; + if (incr_transaction_previous) count_starvation_hi <= raw_starvation_hi; + + if (~sclrn) begin + count_transaction_lo <= '0; + count_transaction_hi <= '0; + count_transaction_carry <= 1'b0; + count_backpressure_lo <= '0; + count_backpressure_hi <= '0; + count_backpressure_carry <= 1'b0; + raw_starvation_lo <= '0; + raw_starvation_hi <= '0; + raw_starvation_carry <= 1'b0; + count_starvation_lo <= '0; + count_starvation_hi <= '0; + end + end + + //decode which offset to observe + always_ff @(posedge clk) begin + case (captured_addr[4:2]) + 3'h0: profiling_counter_per_interface[g] <= valid; + 3'h1: profiling_counter_per_interface[g] <= ready; + 3'h2: profiling_counter_per_interface[g] <= count_transaction_lo; + 3'h3: profiling_counter_per_interface[g] <= count_transaction_hi; + 3'h4: profiling_counter_per_interface[g] <= count_backpressure_lo; + 3'h5: profiling_counter_per_interface[g] <= count_backpressure_hi; + 3'h6: profiling_counter_per_interface[g] <= count_starvation_lo; + 3'h7: profiling_counter_per_interface[g] <= count_starvation_hi; + default: profiling_counter_per_interface[g] <= 'x; + endcase + end + end + + //mux for choosing a profiling counter has two pipeline stages + //first pipeline stage chooses one of 8 values associated with one stallable interface + //second pipeline stage chooses which stallable interface + always_ff @(posedge clk) begin + profiling_counter_final <= '0; + for (int i=0; i<NUM_INTERFACES; i++) begin + if (captured_addr[ADDR_WIDTH-3:5] == i) begin + profiling_counter_final <= profiling_counter_per_interface[i]; + end + end + end + + + + ///////////////////// + // State machine // + ///////////////////// + + // This is the same approach used by the CSR: backpressure by default, several pipeline stages to process one read request. + // Here is the address map: + // - ROM: + // - consumes the bottom half of the address space, only some of which is backed by the ROM + // - runtime has no idea how big the ROM is, it walks the list of offsets/descriptions until it sees the next offset = 0 + // - Profiling counters: + // - consumes the third quarter of the address space + // - each stallable interface has its own block of 32 bytes in the address space + // - address space is allocated starting from the bottom and increasing + // - Freeze logic: + // - consumes the fourth quarter of the address space + // - assume all incoming read requests are 4-byte aligned i.e. bottom 2 bits of address are 0 + // - if the incoming read request has bit 2 of the byte address asserted (odd index in terms of 4-byte words), then assert freeze + // - if the incoming read request has bit 2 of the byte address deasserted (even index), then deassert freeze + // - read value returned is the updated value of freeze + + always_ff @(posedge clk) begin + //default behavior + o_dbg_arready <= 1'b0; + o_dbg_rvalid <= 1'b0; + + case (state) + STATE_IDLE: begin + if (i_dbg_arvalid) begin + o_dbg_arready <= 1'b1; + captured_addr <= i_dbg_araddr; + if (!i_dbg_araddr[ADDR_WIDTH-1]) begin //bottom half of address space is for ROM + state <= STATE_ROM_ACCEPT; + end + else begin //top half of address space is for profiling counters + if (!i_dbg_araddr[ADDR_WIDTH-2]) begin //3rd quarter of address space is for profiling counters + state <= STATE_COUNT_ACCEPT; + end + else begin //4th quarter of address space is for freeze logic + state <= STATE_FREEZE_DATA; + freeze <= i_dbg_araddr[2]; + end + end + end + end + STATE_ROM_ACCEPT: begin + //ram_rd_addr valid now + state <= STATE_ROM_ADDR; + end + STATE_ROM_ADDR: begin + //hardened input register inside m20k valid now + state <= STATE_ROM_DATA; + end + STATE_ROM_DATA: begin + //hardened output register inside m20k valid now + o_dbg_rvalid <= 1'b1; + o_dbg_rdata <= ram_rd_data; + if (o_dbg_rvalid && i_dbg_rready) begin + o_dbg_rvalid <= 1'b0; + state <= STATE_IDLE; + end + end + + STATE_COUNT_ACCEPT: begin + //captured_addr valid now + state <= STATE_COUNT_ADDR; + end + STATE_COUNT_ADDR: begin + //all indexes of profiling_counter_per_interface valid now + state <= STATE_COUNT_DATA; + end + STATE_COUNT_DATA: begin + //profiling_counter_final valid now + o_dbg_rvalid <= 1'b1; + o_dbg_rdata <= profiling_counter_final; + if (o_dbg_rvalid && i_dbg_rready) begin + o_dbg_rvalid <= 1'b0; + state <= STATE_IDLE; + end + end + + STATE_FREEZE_DATA: begin + //freeze valid now + o_dbg_rvalid <= 1'b1; + o_dbg_rdata <= freeze; + if (o_dbg_rvalid && i_dbg_rready) begin + o_dbg_rvalid <= 1'b0; + state <= STATE_IDLE; + end + end + + default: begin + state <= STATE_IDLE; + end + endcase + + if (~sclrn) begin + state <= STATE_IDLE; + o_dbg_arready <= 1'b0; + o_dbg_rvalid <= 1'b0; + freeze <= 1'b0; + end + end + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_latency_alignment.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_latency_alignment.sv new file mode 100644 index 0000000..855c737 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_latency_alignment.sv @@ -0,0 +1,83 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +scxNKyS2Fu+RKOjmRyZoY4EgHcxSaWdluIyXtNDG+BZZeP3+5c/6fyqFSlTwnJ8yJzyjT+DFQtuy +G55DsuyurUsgZbq4gwtIxninqmZD/QylA1hwpcJKsro8Et0wqW/67zoR0vP9r/owuHITod7XmjoZ +fEzHcBsbTaUqNzdzOqotScK5mBx0LjfTmtwja/WZBdhBZBbpIHp33TuuPplb5TpprwaKaMLhLKL/ +o3086hNYxkZmGEJ7D1ZTd3icEW6+jQ2kdVa2Uoi4g784kBJY/hDPPX60SmlW1VgJ3jbd1wT/Omqy +Nqj06HKBjk3Qm6pyqkSw9dgyVka5iok3TFdENg== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 3504) +`pragma protect data_block +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 +U+jrMSfeapaNvanwCu6OlBmCWJKrSCpkmMle +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_layout_transform.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_layout_transform.sv new file mode 100644 index 0000000..e52fe53 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_layout_transform.sv @@ -0,0 +1,384 @@ +// Copyright 2020-2024 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +/** + * dla_layout_transform.sv + * + * Top level of the DLA layout transform (LT) module. The transform can u8 data to FP16 (can be disabled) + * and converts DHWC tensors to CDHWCvec (which is the format required by the PE array), it will also + * fold the data into the CVEC dimension whenever the stride dimensions of the first convolution are non-1. + * The folding feature cannot be turned off here - it can be turned off my ensuring that the transform node + * in the compiler has strides of 1. See `dla_pass_folding.cpp` to see how this is done in the compiler. + * + * The main feature of this layout transform is that it can fold input tensor dimensions into the channel dimension + * which improves the efficiency of the PE array. The parameters of the first convolution in the graph are + * required as input to this module. The input tensor is partitioned into volumes equal to the + * STRIDE_HEIGHTxSTRIDE_WIDTHxSTRIDE_DEPTHxCHANNELS of the input convolution. + * The partitioned volume is then copied into one "CVEC" line and output once the CVEC line is complete. + * + * To achieve the folding transform, the DLA layout transform module instantiates the following modules: + * > dla_layout_transform.sv - This module, serves as the interface for users, and instantiates top-level + * signals and submodules. + * + * > dla_lt_conversion.sv - If enabled, converts input data from U8 to FP16 data types. + * + * > dla_lt_dimension_counter.sv - Generates tensor indexes for all tokens in incoming data packet. + * + * > dla_lt_gen_index_info.sv - Uses tensor indexes from the lt_dimension_counter to calculate the mapping + * target output position; this includes which RAM module, RAM line, and posisiton within the RAM line + * (each line holds a CVEC line of output data) each output is mapped to. The memory manager uses this + * data to emplace the incoming data into its position in the RAM. + * + * > dla_lt_memory_manager.sv - Uses the addressing information from the lt_gen_index_info module to emplace + * incoming data into the RAM. The RAM is used to store intermediate results because often, when we fold + * data, we have to buffer an output CVEC for many cycles before all the data becomes available. + * Has these submodules, + * > dla_lt_ram_arb.sv - Arbitrates write requests and read requests from two sources. + * > dla_lt_funnel.sv - Maps data from incoming data packet to the correct position within CVEC in + * a single cycle for all data in the input packet. Uses the indexing info from the lt_gen_index_info + * module. + * + * > dla_lt_output_logic.sv - Keeps track of the number of completed CVEC lines, and writes them to output. + * This module is also responsible for keeping track of the output dimensions and writing padding lines when + * required. + * + */ + +`resetall +`undefineall +`default_nettype none + +`include "dla_acl_parameter_assert.svh" + +function int calc_output_channels( + input int cvec, channels, stride_height, stride_width, stride_depth +); + integer div_result; + div_result = ((channels * stride_width * stride_height * stride_depth) + cvec - 1) / cvec; + calc_output_channels = div_result * cvec; +endfunction + +function int calc_output_dim_max( + input int feature_dim, filter_dim, dilation_dim, pad_dim, stride_dim +); + integer conv_dim; + // conv_dim = (feature_dim - ((filter_dim - 1) * dilation_dim + 1) + pad_dim) / stride_dim + 1; + conv_dim = (feature_dim + pad_dim) + 1; + // ceil_value = (filter_dim + stride_dim - 1) / stride_dim;//((filter_dim % stride_dim) == 0) ? 0 : 1; + calc_output_dim_max = conv_dim + filter_dim - 1; +endfunction + + module dla_layout_transform + import dla_common_pkg::*,dla_lt_pkg::*; + #( + // Convolution parameters: + parameter int MAX_CHANNELS =0, + parameter int MAX_FEATURE_HEIGHT=0, + parameter int MAX_FEATURE_WIDTH=0, + parameter int MAX_FEATURE_DEPTH=0, + parameter int MAX_STRIDE_HEIGHT=0, + parameter int MAX_STRIDE_WIDTH=0, + parameter int MAX_STRIDE_DEPTH=0, + parameter int MAX_PAD_FRONT=0, + parameter int MAX_PAD_LEFT=0, + parameter int MAX_PAD_TOP=0, + parameter int MAX_FILTER_WIDTH=4, + parameter int MAX_FILTER_HEIGHT=4, + parameter int MAX_FILTER_DEPTH=4, + parameter int MAX_DILATION_WIDTH, + parameter int MAX_DILATION_HEIGHT, + parameter int MAX_DILATION_DEPTH, + + // Exact parameters + parameter int CVEC=0, + parameter bit DO_U8_CONV=1, + parameter int DATA_ELEMENT_WIDTH = 32, + parameter int CNT_BITS = 32, + parameter int DDR_BYTES = 4, + parameter int CONFIG_DATA_BYTES, + + device_family_t DEVICE, + // Derived Params + localparam int MAX_DIM_BITS = $clog2((MAX_FEATURE_DEPTH + MAX_PAD_FRONT) * (MAX_FEATURE_HEIGHT + MAX_PAD_TOP) * (MAX_FEATURE_WIDTH + MAX_PAD_LEFT) * CVEC), + localparam int unsigned MAX_INPUT_VOLUME = MAX_CHANNELS * MAX_FEATURE_WIDTH * MAX_FEATURE_HEIGHT * MAX_FEATURE_DEPTH, + //todo: Capitalize constants... + localparam int unsigned ELEM_PER_DDR = (DDR_BYTES*8)/DATA_ELEMENT_WIDTH, + localparam int unsigned OUTPUT_DATA_WIDTH = 16, + localparam int MAX_TRANSFERS = (MAX_INPUT_VOLUME + ELEM_PER_DDR -1) / ELEM_PER_DDR + ) ( + // Module connections + input wire clk, + input wire i_rstn, + input wire [CONFIG_DATA_BYTES*8-1:0] i_config_data, + input wire i_config_valid, + output logic o_config_ready, + input wire [8*DDR_BYTES-1:0] i_data, + input wire i_valid, + input wire i_stall, + output logic o_ready, + output logic o_stall, + output logic [CVEC-1:0][OUTPUT_DATA_WIDTH-1:0] o_data, + output logic o_valid, + output logic o_last, + output logic o_param_error + ); + + `DLA_ACL_PARAMETER_ASSERT((DO_U8_CONV == 0 && DATA_ELEMENT_WIDTH == 16) || (DO_U8_CONV == 1 && DATA_ELEMENT_WIDTH == 8)); // only supported combinations currently. + + localparam int unsigned MAX_OUTPUT_C = calc_output_channels(CVEC, MAX_CHANNELS, MAX_STRIDE_HEIGHT, MAX_STRIDE_WIDTH, MAX_STRIDE_DEPTH); + localparam int unsigned MAX_OUTPUT_W = calc_output_dim_max(MAX_FEATURE_WIDTH, MAX_FILTER_WIDTH, MAX_DILATION_WIDTH, MAX_PAD_LEFT, MAX_STRIDE_WIDTH); + localparam int unsigned MAX_OUTPUT_H = calc_output_dim_max(MAX_FEATURE_HEIGHT, MAX_FILTER_HEIGHT, MAX_DILATION_HEIGHT, MAX_PAD_TOP, MAX_STRIDE_HEIGHT); + localparam int unsigned MAX_OUTPUT_D = calc_output_dim_max(MAX_FEATURE_DEPTH, MAX_FILTER_DEPTH, MAX_DILATION_DEPTH, MAX_PAD_FRONT, MAX_STRIDE_DEPTH); + localparam int unsigned MAX_INNER_ROWS = MAX_OUTPUT_C > CVEC ? MAX_OUTPUT_C/CVEC-1 : 0; + localparam int unsigned MAX_OUTPUT_VOLUME = MAX_OUTPUT_W * MAX_OUTPUT_H * MAX_OUTPUT_C; + // if CHANNELS > ELEM_PER_DDR then only 2 CVECs are modified per cycle in the worst case. Bump up to 4 to redue congestion; this value heavily effects area! + localparam shortint unsigned max_num_partitions = MAX_CHANNELS > ELEM_PER_DDR ? 4 : calc_max_partitions( + MAX_FEATURE_HEIGHT, MAX_FEATURE_WIDTH, MAX_CHANNELS, MAX_STRIDE_HEIGHT, MAX_STRIDE_WIDTH, ELEM_PER_DDR + ) + 20; // TODO: The max_partition calculation does a pretty good job, but there are some edge conditions that are not accounted for. Review. For now, +N works. + localparam integer num_buffers = (max_num_partitions)+(MAX_FEATURE_WIDTH/MAX_STRIDE_WIDTH) + MAX_INNER_ROWS*(MAX_FEATURE_WIDTH/MAX_STRIDE_WIDTH)*(MAX_FEATURE_HEIGHT/MAX_STRIDE_HEIGHT)*(MAX_FEATURE_DEPTH/MAX_STRIDE_DEPTH);// minimum number of buffers!!! + localparam int n_pool_bits = $clog2((max_num_partitions)); + localparam int n_buffer_pools = $rtoi($pow(2, n_pool_bits)); + localparam int cvec_per_buffer = $rtoi($pow(2, $clog2(($rtoi($ceil((num_buffers*1.0)/(max_num_partitions)))+1) + 30))); // round to nearst power of 2 since we mod by the value in a few places. + localparam int total_buffers = n_buffer_pools * cvec_per_buffer; + localparam int buffers_in_progress = max_num_partitions*7; + + localparam int available = total_buffers - buffers_in_progress; + + logic [$clog2((MAX_OUTPUT_W * MAX_OUTPUT_H * MAX_OUTPUT_D * (MAX_OUTPUT_C/CVEC)))-1:0] lines_written; + logic [ELEM_PER_DDR-1:0] completed_vol_tally [1:0]; + logic [address_info_e.num()-1:0][CNT_BITS-1:0] addr_queue [n_buffer_pools-1:0][ELEM_PER_DDR-1:0]; + + logic ready_for_config; + logic ready_for_transfer; + logic input_data_valid; + logic cnt_ready; + logic next_transfer_overflow; + logic internal_reset; + logic resetn_condition, start_rx, done_frame; + logic config_ready; + logic [$clog2(MAX_TRANSFERS):0] frame_finished, transfer_count; + + layout_transform_config_if layout_transform_config(); + + shortint unsigned finished_lines_reg; + int buffer_usage; + + // counters used by dimension counter logic: + logic [max($clog2(MAX_CHANNELS), 1)-1:0] C_d [ELEM_PER_DDR-1:0]; + logic [max($clog2(MAX_FEATURE_WIDTH), 1)-1:0] W_d [ELEM_PER_DDR-1:0]; + logic [max($clog2(MAX_STRIDE_WIDTH), 1)-1:0] IN_W_d [ELEM_PER_DDR-1:0]; + logic [max($clog2(MAX_FEATURE_WIDTH), 1)-1:0] S_W_d [ELEM_PER_DDR-1:0]; + + logic [max($clog2(MAX_FEATURE_HEIGHT), 1)-1:0] H_d [ELEM_PER_DDR-1:0]; + logic [max($clog2(MAX_STRIDE_HEIGHT), 1)-1:0] IN_H_d [ELEM_PER_DDR-1:0]; + logic [max($clog2(MAX_FEATURE_HEIGHT), 1)-1:0] S_H_d [ELEM_PER_DDR-1:0]; + + logic [max($clog2(MAX_FEATURE_DEPTH), 1)-1:0] D_d [ELEM_PER_DDR-1:0]; + logic [max($clog2(MAX_STRIDE_DEPTH), 1)-1:0] IN_D_d [ELEM_PER_DDR-1:0]; + logic [max($clog2(MAX_FEATURE_DEPTH), 1)-1:0] S_D_d [ELEM_PER_DDR-1:0]; + logic [MAX_DIM_BITS-1:0] Index_d [ELEM_PER_DDR-1:0]; + + assign resetn_condition = i_rstn & !internal_reset; + assign o_config_ready = config_ready & ready_for_config; + + dla_config_deserialize #( + .CONFIG_WIDTH(CONFIG_DATA_BYTES*8) + ) lt_config_deserialize ( + .clk(clk), + .i_resetn(resetn_condition), + .i_valid(i_config_valid), + .i_config(i_config_data), + .o_ready(config_ready), + + .if_config(layout_transform_config) + ); + + always_ff @( posedge clk ) begin : latch_last_frame + frame_finished <= frame_finished; + + if (i_valid & o_ready & ~done_frame) begin + // We've started to accept output for this inference. This + // signals to the output logic that we can start writing outputs. + start_rx <= 1; + frame_finished <= frame_finished - 1; + done_frame <= frame_finished[$clog2(MAX_TRANSFERS)]; + end else if (layout_transform_config.valid & ~start_rx) begin + // Don't accept a new config until we're finished with this transform. + ready_for_config <= 1'b0; + frame_finished <= ((layout_transform_config.data.feature_volume + ELEM_PER_DDR - 1) / ELEM_PER_DDR) - 2; + end + + if (~resetn_condition) begin + start_rx <= 0; + frame_finished <= MAX_TRANSFERS-2; + done_frame <= 0; + ready_for_config <= 1'b1; + end + end + + assign buffer_usage = (finished_lines_reg - lines_written); + assign next_transfer_overflow = available <= buffer_usage; // may need to pipeline this. Maybe change to 'almost full signal'. + assign o_ready = ready_for_transfer == 1'b1 & next_transfer_overflow == 1'b0 & !done_frame; + assign o_stall = ready_for_transfer == 1'b0 | next_transfer_overflow == 1'b1 | done_frame; + assign internal_reset = o_last & o_valid & !i_stall; + // Dimension counter: Keeps track of position within tensor of incoming data. + dla_lt_dimension_counter #( + .ELEMENTS_PER_CYCLE(ELEM_PER_DDR), + .MAX_CHANNELS(MAX_CHANNELS), + .MAX_FEATURE_WIDTH(MAX_FEATURE_WIDTH), + .MAX_FEATURE_HEIGHT(MAX_FEATURE_HEIGHT), + .MAX_FEATURE_DEPTH(MAX_FEATURE_DEPTH), + .MAX_STRIDE_WIDTH(MAX_STRIDE_WIDTH), + .MAX_STRIDE_HEIGHT(MAX_STRIDE_HEIGHT), + .MAX_STRIDE_DEPTH(MAX_STRIDE_DEPTH), + .MAX_INPUT_VOLUME(MAX_INPUT_VOLUME), + .MAX_DIM_BITS(MAX_DIM_BITS) + ) dim_counter ( + .clk(clk), + .i_rstn(resetn_condition), + .i_increment(input_data_valid | ~ready_for_transfer), + .if_lt_config(layout_transform_config), + + .o_ready(cnt_ready), + .o_c_dim(C_d), + .o_w_dim(W_d), + .o_h_dim(H_d), + .o_d_dim(D_d), + .o_w_inner(IN_W_d), + .o_h_inner(IN_H_d), + .o_d_inner(IN_D_d), + .o_w_stride(S_W_d), + .o_h_stride(S_H_d), + .o_d_stride(S_D_d), + .o_index(Index_d) + ); + + // TODO(arooney): add more conversions + logic [ELEM_PER_DDR-1:0][15:0] fp16_val; + if (DO_U8_CONV) begin + dla_lt_data_conversion #( + .DDR_BYTES(DDR_BYTES), + .DATA_ELEMENT_WIDTH(DATA_ELEMENT_WIDTH), + .ELEMENTS_PER_CYCLE(ELEM_PER_DDR) + ) data_conversion ( + .clk(clk), + .i_valid(i_valid & o_ready), + .i_data(i_data), + + .o_fp16_val(fp16_val), + .o_valid(input_data_valid) + ); + end + else begin + assign input_data_valid = i_valid & o_ready; + always_ff @(posedge clk) begin + fp16_val <= i_data; + end + end + + dla_lt_gen_index_info #( + .ELEMENTS_PER_CYCLE(ELEM_PER_DDR), + .N_BUFFER_POOLS(n_buffer_pools), + .CVEC_PER_BUFFER(cvec_per_buffer), + .N_POOL_BITS(n_pool_bits), + .CNT_BITS(CNT_BITS), + .MAX_CHANNELS(MAX_CHANNELS), + .CVEC(CVEC), + .MAX_FEATURE_WIDTH(MAX_FEATURE_WIDTH), + .MAX_FEATURE_HEIGHT(MAX_FEATURE_HEIGHT), + .MAX_FEATURE_DEPTH(MAX_FEATURE_DEPTH), + + .MAX_STRIDE_WIDTH(MAX_STRIDE_WIDTH), + .MAX_STRIDE_HEIGHT(MAX_STRIDE_HEIGHT), + .MAX_STRIDE_DEPTH(MAX_STRIDE_DEPTH), + .MAX_DIM_BITS(MAX_DIM_BITS), + .MAX_INPUT_VOLUME(MAX_INPUT_VOLUME) + ) gen_index_info ( + .clk(clk), + .i_rstn(resetn_condition), + .i_next_overflow(next_transfer_overflow), + .i_valid(input_data_valid), + .i_ready(cnt_ready), + .i_c_dim(C_d), + .i_w_inner(IN_W_d), + .i_h_inner(IN_H_d), + .i_d_inner(IN_D_d), + .i_w_stride(S_W_d), + .i_h_stride(S_H_d), + .i_d_stride(S_D_d), + .i_index(Index_d), + .if_lt_config(layout_transform_config), + + .o_addr_queue(addr_queue), + .o_completed_vol_tally(completed_vol_tally[0]), + .o_ready_for_transfer(ready_for_transfer) + ); + + logic [($clog2(cvec_per_buffer))-1:0] output_line_num [n_buffer_pools-1:0]; + logic [($clog2(cvec_per_buffer))-1:0] curr_out_line [n_buffer_pools-1:0]; + logic [n_buffer_pools-1:0] actively_reading; + logic [MAX_OUTPUT_C-1:0][16-1:0] output_line_data [n_buffer_pools-1:0]; + dla_lt_memory_manager #( + .NUM_BUFFER_POOLS(n_buffer_pools), + .CVEC_PER_BUFFER(cvec_per_buffer), + .ELEMENTS_PER_CYCLE(ELEM_PER_DDR), + .CNT_BITS(CNT_BITS), + .CVEC(CVEC), + .MAX_OUTPUT_C(MAX_OUTPUT_C), + .DEVICE(DEVICE) + ) memory_manager ( + .clk(clk), + .i_rstn(resetn_condition), + .i_addr_queue(addr_queue), + .i_output_line_num(output_line_num), + .i_actively_reading(actively_reading), + .i_fp16_data(fp16_val), + .i_completed_vol_tally(completed_vol_tally[0]), + + .o_completed_vol_tally(completed_vol_tally[1]), + .o_output_line_data(output_line_data), + .o_curr_out_line(curr_out_line) + ); + + dla_lt_output_logic #( + .NUM_BUFFER_POOLS(n_buffer_pools), + .CVEC_PER_BUFFER(cvec_per_buffer), + .ELEMENTS_PER_CYCLE(ELEM_PER_DDR), + .N_POOL_BITS(n_pool_bits), + .MAX_OUTPUT_W(MAX_OUTPUT_W), + .MAX_OUTPUT_H(MAX_OUTPUT_H), + .MAX_OUTPUT_D(MAX_OUTPUT_D), + .MAX_OUTPUT_C(MAX_OUTPUT_C), + .CVEC(CVEC), + .CNT_BITS(CNT_BITS), + .MAX_DIM_BITS(MAX_DIM_BITS) + ) output_logic ( + .clk(clk), + .i_rstn(resetn_condition), + .i_output_line_data(output_line_data), + .i_curr_out_line(curr_out_line), + .i_completed_vol_tally(completed_vol_tally[1]), + .i_stall(i_stall), + .if_lt_config(layout_transform_config), + .i_ready(start_rx), + + .o_line_num(output_line_num), + .o_read_req(actively_reading), + .o_data(o_data), + .o_valid(o_valid), + .o_last(o_last), + .o_lines_written(lines_written), + .o_finished_lines(finished_lines_reg) + ); + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_layout_transform_config.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_layout_transform_config.sv new file mode 100644 index 0000000..07b6261 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_layout_transform_config.sv @@ -0,0 +1,23 @@ +// Copyright 2024 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +interface layout_transform_config_if; + +import dla_lt_pkg::*; + +layout_transform_config_t data; +logic valid; +logic pre_valid; +logic ready; + +endinterface diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_layout_transform_config.svh b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_layout_transform_config.svh new file mode 100644 index 0000000..e5e62ca --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_layout_transform_config.svh @@ -0,0 +1,67 @@ +// Copyright 2024 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +typedef struct packed { + uint16_t input_height; + uint16_t input_width; + uint16_t input_depth; + uint16_t stride_height; + uint16_t stride_width; + uint16_t stride_depth; + uint16_t out_pad; + uint16_t left_pad; + uint16_t high_pad; + uint16_t output_w; + uint16_t output_h; + uint16_t output_d; + uint16_t output_channels; + uint16_t input_channels; + uint32_t feature_volume; + uint16_t stride_volume; + uint16_t channels_incr; + uint16_t depth_incr; + uint16_t stride_depth_incr; + uint16_t stride_height_incr; + uint16_t output_volume; + uint16_t output_face_area; + uint16_t output_w_range; + uint16_t output_h_range; + uint16_t h_overflow; + uint16_t w_overflow; + uint16_t w_padding_per_stride; // (i_config_decoded[PAD_LEFT]%i_config_decoded[STRIDE_WIDTH]) + uint16_t h_padding_per_stride; // (i_config_decoded[PAD_TOP]%i_config_decoded[STRIDE_HEIGHT]) + uint16_t c_step; + uint16_t w_step; + uint16_t h_step; + uint16_t d_step; + uint16_t w_stride_step; + uint16_t h_stride_step; + uint16_t w_inner_step; + uint16_t h_inner_step; + int16_t top_full_padding; + int16_t left_full_padding; + + uint16_t effective_fw; + uint16_t effective_fh; + uint16_t stride_w_limit; + uint16_t stride_h_limit; + uint16_t final_stride_w_limit; + uint16_t final_stride_h_limit; + + uint16_t w_end_overhang; + + uint16_t continue_count_cond; + uint16_t w_nstrides; + uint16_t h_nstrides; + uint16_t _padding_; +} layout_transform_config_t; diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_lt_data_conversion.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_lt_data_conversion.sv new file mode 100644 index 0000000..7fe65c6 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_lt_data_conversion.sv @@ -0,0 +1,154 @@ +// Copyright 2020-2024 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +/** + * dla_lt_data_conversion.sv + * + * The LT data conversion is responsible for converting U8 integers to FP16 values + * for inference in the PE array. + * + */ +`resetall +`undefineall +`default_nettype none + +module dla_lt_data_conversion #( + parameter int DDR_BYTES, + parameter int DATA_ELEMENT_WIDTH=8, + parameter int ELEMENTS_PER_CYCLE +) ( + input wire clk, + input wire i_valid, + input wire [8*DDR_BYTES-1:0] i_data, + output wire [ELEMENTS_PER_CYCLE-1:0][15:0] o_fp16_val, + output wire o_valid +); + + parameter BASE_EXP = 15 - 1; + logic [ELEMENTS_PER_CYCLE-1:0][15:0] fp16_val; + assign o_fp16_val = fp16_val; + + logic data_valid; + assign o_valid = data_valid; + + always_ff @( posedge clk ) begin + data_valid <= i_valid; + // data_valid[1] <= data_valid[0]; + end + + for (genvar in_token = 0; in_token < ELEMENTS_PER_CYCLE; in_token++) + begin : g_fp16 + logic [7:0] sample; + logic [1:0][3:0] exp_offset_nib; + logic [1:0][7:0] shifted_val_nib; + logic token_in_progress; + assign sample = i_data[(in_token*DATA_ELEMENT_WIDTH)+:DATA_ELEMENT_WIDTH]; + // split token into nibbles and mux calculation... + + always_ff @(posedge clk) + begin + token_in_progress <= 0; // so that the last value is still converted. + if (i_valid) + begin + token_in_progress <= 1; + exp_offset_nib[0] <= 0; + shifted_val_nib[0] <= 0; + + if (sample[3]) + begin + exp_offset_nib[0] <= 4; + shifted_val_nib[0] <= {sample[2:0], 5'b0}; + end + else if (sample[2]) + begin + exp_offset_nib[0] <= 3; + shifted_val_nib[0] <= {sample[1:0], 6'b0}; + end + else if (sample[1]) + begin + exp_offset_nib[0] <= 2; + shifted_val_nib[0] <= {sample[0], 7'b0}; + end + else if (sample[0]) + begin + exp_offset_nib[0] <= 1; + shifted_val_nib[0] <= 0; + end + end + end + + always_ff @(posedge clk) + begin + if (i_valid) + begin + exp_offset_nib[1] <= 0; + shifted_val_nib[1] <= 0; + if (sample[7]) + begin + exp_offset_nib[1] <= 8; + shifted_val_nib[1] <= {sample[6:0], 1'b0}; + end + else if (sample[6]) + begin + exp_offset_nib[1] <= 7; + shifted_val_nib[1] <= {sample[5:0], 2'b0}; + end + else if (sample[5]) + begin + exp_offset_nib[1] <= 6; + shifted_val_nib[1] <= {sample[4:0], 3'b0}; + end + else if (sample[4]) + begin + exp_offset_nib[1] <= 5; + shifted_val_nib[1] <= {sample[3:0], 4'b0}; + end + end + end + + logic [4:0] exp_offset; + logic [4:0] exp_offset_reversed; + logic [7:0] shifted_val; + + always_ff @(posedge clk) + begin + if ((i_valid) || token_in_progress) + begin + if (exp_offset_nib[1] > exp_offset_nib[0]) + begin + exp_offset <= exp_offset_nib[1] + BASE_EXP; + shifted_val <= shifted_val_nib[1]; + end + else if (exp_offset_nib[0] > 0) + begin + exp_offset <= exp_offset_nib[0] + BASE_EXP; + shifted_val <= shifted_val_nib[0]; + end + else + begin + exp_offset <= 0; + shifted_val <= 0; + end + end + end + + + + assign fp16_val[in_token] = { + 1'b0, + exp_offset, + shifted_val, + 2'b0 + }; + end +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_lt_dimension_counter.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_lt_dimension_counter.sv new file mode 100644 index 0000000..153869f --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_lt_dimension_counter.sv @@ -0,0 +1,401 @@ +// Copyright 2020-2024 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +/** + * dla_lt_dimension_counter.sv + * + * This module generates tensor indexing information for N elements each cycle. The layout + * transformation needs to know the context of each incoming token, and thus we need to + * calculate the dimension information only from the tensor index. The transform also needs to + * know about which "stride partition" the input belongs to, and where within the partition the + * input is from. + * + * For example, consider a 4x4 RGB tensor with 2x2 partitions. The tensor with the (0,0) partition + * outlined is shown below (where each value corresponds to the CWH ordering): + + [2 5 ] 8 11 + [1 4 ] 7 10 [14 17]20 23 + [0 3 ] 6 9 [13 16]19 22 26 29 32 35 + [12 15]18 21 25 28 31 34 38 41 44 47 + 24 27 30 33 37 40 43 46 + 36 39 42 45 + + * in this case, for instance, the element 16 is in position C=1, W=1, H=1, and stride (S_W=0,S_H=0), + * and is in position (inner_W=1,inner_H=1) within the stride. + * + */ + +`resetall +`undefineall +`default_nettype none + +import dla_lt_pkg::*; + +module dla_lt_dimension_counter import dla_common_pkg::*; #( + parameter int ELEMENTS_PER_CYCLE, + parameter int MAX_CHANNELS, + + parameter int MAX_FEATURE_WIDTH, + parameter int MAX_FEATURE_HEIGHT, + parameter int MAX_FEATURE_DEPTH, + + parameter int MAX_STRIDE_WIDTH, + parameter int MAX_STRIDE_HEIGHT, + parameter int MAX_STRIDE_DEPTH, + parameter int MAX_INPUT_VOLUME, + + parameter int MAX_DIM_BITS +) ( + input wire clk, + input wire i_rstn, + input wire i_increment, + + layout_transform_config_if if_lt_config, + + // ready signal is asserted when the startup sequence is over + output wire o_ready, + + // Tensor dimension output: + output wire [max($clog2(MAX_CHANNELS), 1)-1:0] o_c_dim [ELEMENTS_PER_CYCLE-1:0], + output wire [max($clog2(MAX_FEATURE_WIDTH), 1)-1:0] o_w_dim [ELEMENTS_PER_CYCLE-1:0], + output wire [max($clog2(MAX_FEATURE_HEIGHT), 1)-1:0] o_h_dim [ELEMENTS_PER_CYCLE-1:0], + output wire [max($clog2(MAX_FEATURE_DEPTH), 1)-1:0] o_d_dim [ELEMENTS_PER_CYCLE-1:0], + + // Location within the stride partition: + output wire [max($clog2(MAX_STRIDE_WIDTH), 1)-1:0] o_w_inner [ELEMENTS_PER_CYCLE-1:0], + output wire [max($clog2(MAX_STRIDE_HEIGHT), 1)-1:0] o_h_inner [ELEMENTS_PER_CYCLE-1:0], + output wire [max($clog2(MAX_STRIDE_DEPTH), 1)-1:0] o_d_inner [ELEMENTS_PER_CYCLE-1:0], + + // Which stride partition: + output wire [max($clog2(MAX_FEATURE_WIDTH), 1)-1:0] o_w_stride [ELEMENTS_PER_CYCLE-1:0], + output wire [max($clog2(MAX_FEATURE_HEIGHT), 1)-1:0] o_h_stride [ELEMENTS_PER_CYCLE-1:0], + output wire [max($clog2(MAX_FEATURE_DEPTH), 1)-1:0] o_d_stride [ELEMENTS_PER_CYCLE-1:0], + + // Input index in original ordering: + output wire [MAX_DIM_BITS-1:0] o_index [ELEMENTS_PER_CYCLE-1:0] +); + + // Index calculation registers: + logic [$clog2(ELEMENTS_PER_CYCLE + 1):0] state_cnt; + logic startup; + + assign o_ready = state_cnt[$clog2(ELEMENTS_PER_CYCLE + 1)]; + + logic [max($clog2(MAX_CHANNELS), 1)-1:0] C_d [ELEMENTS_PER_CYCLE-1:0]; + logic [max($clog2(MAX_FEATURE_WIDTH), 1)-1:0] W_d [ELEMENTS_PER_CYCLE-1:0]; + logic [max($clog2(MAX_STRIDE_WIDTH), 1)-1:0] IN_W_d [ELEMENTS_PER_CYCLE-1:0]; + logic [max($clog2(MAX_FEATURE_WIDTH), 1)-1:0] S_W_d [ELEMENTS_PER_CYCLE-1:0]; + + logic [max($clog2(MAX_FEATURE_HEIGHT), 1)-1:0] H_d [ELEMENTS_PER_CYCLE-1:0]; + logic [max($clog2(MAX_STRIDE_HEIGHT), 1)-1:0] IN_H_d [ELEMENTS_PER_CYCLE-1:0]; + logic [max($clog2(MAX_FEATURE_HEIGHT), 1)-1:0] S_H_d [ELEMENTS_PER_CYCLE-1:0]; + + logic [max($clog2(MAX_FEATURE_DEPTH), 1)-1:0] D_d [ELEMENTS_PER_CYCLE-1:0]; + logic [max($clog2(MAX_STRIDE_DEPTH), 1)-1:0] IN_D_d [ELEMENTS_PER_CYCLE-1:0]; + logic [max($clog2(MAX_FEATURE_DEPTH), 1)-1:0] S_D_d [ELEMENTS_PER_CYCLE-1:0]; + logic [MAX_DIM_BITS-1:0] Index_d [ELEMENTS_PER_CYCLE-1:0]; + + assign o_c_dim = C_d; + assign o_w_dim = W_d; + assign o_h_dim = H_d; + assign o_d_dim = D_d; + assign o_w_inner = IN_W_d; + assign o_h_inner = IN_H_d; + assign o_d_inner = IN_D_d; + assign o_w_stride = S_W_d; + assign o_h_stride = S_H_d; + assign o_d_stride = S_D_d; + assign o_index = Index_d; + + logic[MAX_DIM_BITS-1:0] next_index; + + // tried to avoid the waste here by creating in generate (Should be triangular), but couldn't index upwards... + logic [max($clog2(MAX_CHANNELS), 1)-1:0] C_regbank [ELEMENTS_PER_CYCLE-1:0] [ELEMENTS_PER_CYCLE-1:0]; + logic [max($clog2(MAX_FEATURE_WIDTH), 1)-1:0] W_regbank [ELEMENTS_PER_CYCLE-1:0] [ELEMENTS_PER_CYCLE-1:0]; + logic [max($clog2(MAX_STRIDE_WIDTH), 1)-1:0] IN_W_regbank [ELEMENTS_PER_CYCLE-1:0] [ELEMENTS_PER_CYCLE-1:0]; + logic [max($clog2(MAX_FEATURE_WIDTH), 1)-1:0] S_W_regbank [ELEMENTS_PER_CYCLE-1:0] [ELEMENTS_PER_CYCLE-1:0]; + logic [max($clog2(MAX_FEATURE_HEIGHT), 1)-1:0] H_regbank [ELEMENTS_PER_CYCLE-1:0] [ELEMENTS_PER_CYCLE-1:0]; + logic [max($clog2(MAX_STRIDE_HEIGHT), 1)-1:0] IN_H_regbank [ELEMENTS_PER_CYCLE-1:0] [ELEMENTS_PER_CYCLE-1:0]; + logic [max($clog2(MAX_FEATURE_HEIGHT), 1)-1:0] S_H_regbank [ELEMENTS_PER_CYCLE-1:0] [ELEMENTS_PER_CYCLE-1:0]; + logic [max($clog2(MAX_FEATURE_DEPTH), 1)-1:0] D_regbank [ELEMENTS_PER_CYCLE-1:0] [ELEMENTS_PER_CYCLE-1:0]; + logic [max($clog2(MAX_STRIDE_DEPTH), 1)-1:0] IN_D_regbank [ELEMENTS_PER_CYCLE-1:0] [ELEMENTS_PER_CYCLE-1:0]; + logic [max($clog2(MAX_FEATURE_DEPTH), 1)-1:0] S_D_regbank [ELEMENTS_PER_CYCLE-1:0] [ELEMENTS_PER_CYCLE-1:0]; + + assign startup = state_cnt[$clog2(ELEMENTS_PER_CYCLE + 1)]; + + logic [16-1:0] channel_, width_, width_stride_, width_inner_, height_, height_stride_, height_inner_, depth_; + logic counters_valid_; + + dla_lt_step_counter #( + .ELEMENTS_PER_CYCLE(ELEMENTS_PER_CYCLE), + .DIM_BITS(16), + .DEPTH_TENSOR(0) // TODO(arooney): Enable 3D inputs + ) step_counter ( + .clk(clk), + .i_resetn(i_rstn), + .i_increment((startup == 1'b0 | i_increment == 1'b1) & if_lt_config.valid), + .i_channel_dim(if_lt_config.data.input_channels), + .i_width_dim(if_lt_config.data.input_width), + .i_width_overhang(if_lt_config.data.w_padding_per_stride), + .i_height_overhang(if_lt_config.data.h_padding_per_stride), + .i_height_dim(if_lt_config.data.input_height), + .i_depth_dim(if_lt_config.data.input_depth), + .i_channel_step(if_lt_config.data.c_step), + .i_width_stride(if_lt_config.data.stride_width), + .i_width_step(if_lt_config.data.w_step), + .i_stride_w_count(if_lt_config.data.output_w_range), + .i_width_stride_step(if_lt_config.data.w_stride_step), + .i_width_inner_step(if_lt_config.data.w_inner_step), + .i_height_stride(if_lt_config.data.stride_height), + .i_height_step(if_lt_config.data.h_step), + .i_stride_h_count(if_lt_config.data.output_h_range), + .i_height_stride_step(if_lt_config.data.h_stride_step), + .i_height_inner_step(if_lt_config.data.h_inner_step), + .i_depth_step(if_lt_config.data.d_step), + .i_pad_w(if_lt_config.data.left_pad), + .i_pad_h(if_lt_config.data.high_pad), + .i_continue_count_cond(if_lt_config.data.continue_count_cond), + .i_overhang_end_w(if_lt_config.data.w_end_overhang), + .i_w_nstrides(if_lt_config.data.w_nstrides), + .i_h_nstrides(if_lt_config.data.h_nstrides), + .o_channel(channel_), + .o_width(width_), + .o_width_stride(width_stride_), + .o_width_inner(width_inner_), + .o_height(height_), + .o_height_stride(height_stride_), + .o_height_inner(height_inner_), + .o_depth(depth_), + .o_valid(counters_valid_) + ); + + for (genvar in_token = 0; in_token < ELEMENTS_PER_CYCLE; in_token++) + begin : gen_calculate_tensor_indexes + always_ff @(posedge clk) + /** + * Process: calculate_tensor_indexes + * Description: Given `ELEMENTS_PER_CYCLE` tokens, we must compute as many tensor indexes per-cycle in order + * to calculate the transformed address of each input token. This process computes the first + * value of each tensor dimension using division and modulo operators; the remainder of the + * `ELEMENTS_PER_CYCLE` values for each index are computed using the last index computed in the previous + * pipieline stages. There are `ELEMENTS_PER_CYCLE` stages before `ELEMENTS_PER_CYCLE` index values become ready, + * at which point, `ELEMENTS_PER_CYCLE` values become ready every cycle. + */ + begin : ff_calculate_tensor_indexes + if (!i_rstn) + begin + C_regbank[in_token] <= '{default: '0}; + W_regbank[in_token] <= '{default: '0}; + H_regbank[in_token] <= '{default: '0}; + D_regbank[in_token] <= '{default: '0}; + IN_W_regbank[in_token] <= '{default: '0}; + S_W_regbank[in_token] <= '{default: '0}; + IN_H_regbank[in_token] <= '{default: '0}; + S_H_regbank[in_token] <= '{default: '0}; + IN_D_regbank[in_token] <= '{default: '0}; + S_D_regbank[in_token] <= '{default: '0}; + C_d[in_token] <= '0; + W_d[in_token] <= '0; + H_d[in_token] <= '0; + D_d[in_token] <= '0; + Index_d[in_token] <= '0; + + if (in_token == 0) + begin + state_cnt <= ELEMENTS_PER_CYCLE; + next_index <= '0; + end + end + else + begin + if ((startup == 1'b0 || i_increment == 1'b1) & if_lt_config.valid & counters_valid_) // separate state and math logic... + begin + if (in_token == 0) + begin + state_cnt <= ~o_ready ? state_cnt - 1 : state_cnt; + + next_index <= next_index + ELEMENTS_PER_CYCLE; + + C_regbank[in_token][0] <= channel_; + W_regbank[in_token][0] <= width_; + H_regbank[in_token][0] <= height_; + D_regbank[in_token][0] <= depth_; + + S_W_regbank[in_token][0] <= width_stride_; + S_H_regbank[in_token][0] <= height_stride_; + S_D_regbank[in_token][0] <= 0; + + IN_W_regbank[in_token][0] <= width_inner_; + IN_H_regbank[in_token][0] <= height_inner_; + IN_D_regbank[in_token][0] <= 0; + end + else + begin + if (C_regbank[in_token-1][0] == if_lt_config.data.input_channels-1) + begin + C_regbank[in_token][0] <= 0; + if (W_regbank[in_token-1][0] == if_lt_config.data.input_width-1) + begin + W_regbank[in_token][0] <= 0; + IN_W_regbank[in_token][0] <= if_lt_config.data.w_padding_per_stride; + S_W_regbank[in_token][0] <= 0; + if (H_regbank[in_token-1][0] == if_lt_config.data.input_height-1) + begin + H_regbank[in_token][0] <= 0; + IN_H_regbank[in_token][0] <= 0; + S_H_regbank[in_token][0] <= 0; + if (D_regbank[in_token-1][0] == if_lt_config.data.input_depth-1) + begin + D_regbank[in_token][0] <= 0; + IN_D_regbank[in_token][0] <= 0; + S_D_regbank[in_token][0] <= 0; + end + else + begin + D_regbank[in_token][0] <= D_regbank[in_token-1][0] + 1; + IN_D_regbank[in_token][0] <= IN_D_regbank[in_token-1][0] + 1; + if (IN_D_regbank[in_token-1][0] + 1 >= if_lt_config.data.stride_depth) + begin + IN_D_regbank[in_token][0] <= 0; + S_D_regbank[in_token][0] <= S_D_regbank[in_token-1][0] + 1; + end + else + begin + S_D_regbank[in_token][0] <= S_D_regbank[in_token-1][0]; + end + end + end + else + begin + H_regbank[in_token][0] <= H_regbank[in_token-1][0] + 1; + IN_H_regbank[in_token][0] <= IN_H_regbank[in_token-1][0] + 1; + if (IN_H_regbank[in_token-1][0] + 1 >= if_lt_config.data.stride_height) + begin + IN_H_regbank[in_token][0] <= 0; + if (S_H_regbank[in_token-1][0] + 1 >= if_lt_config.data.stride_h_limit) begin + S_H_regbank[in_token][0] <= 0; + end else begin + S_H_regbank[in_token][0] <= S_H_regbank[in_token-1][0] + 1; + end + end + else + begin + S_H_regbank[in_token][0] <= S_H_regbank[in_token-1][0]; + end + D_regbank[in_token][0] <= D_regbank[in_token-1][0]; + IN_D_regbank[in_token][0] <= IN_D_regbank[in_token-1][0]; + S_D_regbank[in_token][0] <= S_D_regbank[in_token-1][0]; + + end + end + else + begin + W_regbank[in_token][0] <= W_regbank[in_token-1][0] + 1; + IN_W_regbank[in_token][0] <= IN_W_regbank[in_token-1][0] + 1; + if (IN_W_regbank[in_token-1][0] + 1 >= if_lt_config.data.stride_width) + begin + IN_W_regbank[in_token][0] <= 0; + S_W_regbank[in_token][0] <= S_W_regbank[in_token-1][0] + 1; + if (S_W_regbank[in_token-1][0] + 1 >= if_lt_config.data.stride_w_limit) begin + S_W_regbank[in_token][0] <= 0; + end else begin + S_W_regbank[in_token][0] <= S_W_regbank[in_token-1][0] + 1; + end + end + else + begin + S_W_regbank[in_token][0] <= S_W_regbank[in_token-1][0]; + end + H_regbank[in_token][0] <= H_regbank[in_token-1][0]; + D_regbank[in_token][0] <= D_regbank[in_token-1][0]; + + IN_H_regbank[in_token][0] <= IN_H_regbank[in_token-1][0]; + IN_D_regbank[in_token][0] <= IN_D_regbank[in_token-1][0]; + + S_H_regbank[in_token][0] <= S_H_regbank[in_token-1][0]; + S_D_regbank[in_token][0] <= S_D_regbank[in_token-1][0]; + end + end + else + begin + C_regbank[in_token][0] <= C_regbank[in_token-1][0] + 1; + + W_regbank[in_token][0] <= W_regbank[in_token-1][0]; + H_regbank[in_token][0] <= H_regbank[in_token-1][0]; + D_regbank[in_token][0] <= D_regbank[in_token-1][0]; + + IN_W_regbank[in_token][0] <= IN_W_regbank[in_token-1][0]; + IN_H_regbank[in_token][0] <= IN_H_regbank[in_token-1][0]; + IN_D_regbank[in_token][0] <= IN_D_regbank[in_token-1][0]; + + S_W_regbank[in_token][0] <= S_W_regbank[in_token-1][0]; + S_H_regbank[in_token][0] <= S_H_regbank[in_token-1][0]; + S_D_regbank[in_token][0] <= S_D_regbank[in_token-1][0]; + end + if (IN_W_regbank[in_token-1][0] >= if_lt_config.data.stride_width) + begin + IN_W_regbank[in_token][0] <= 0; + if (S_W_regbank[in_token-1][0] + 1 >= if_lt_config.data.stride_w_limit) begin + S_W_regbank[in_token][0] <= 0; + end else begin + S_W_regbank[in_token][0] <= S_W_regbank[in_token-1][0] + 1; + end + end + if (IN_H_regbank[in_token-1][0] >= if_lt_config.data.stride_height) + begin + IN_H_regbank[in_token][0] <= 0; + if (S_H_regbank[in_token-1][0] + 1 >= if_lt_config.data.stride_h_limit) begin + S_H_regbank[in_token][0] <= 0; + end else begin + S_H_regbank[in_token][0] <= S_H_regbank[in_token-1][0] + 1; + end + end + if (IN_D_regbank[in_token-1][0] >= if_lt_config.data.stride_depth) + begin + IN_D_regbank[in_token][0] <= 0; + S_D_regbank[in_token][0] <= S_D_regbank[in_token-1][0] + 1; + end + end + for (integer i = 1; i < (ELEMENTS_PER_CYCLE - in_token); i++) + begin + C_regbank[in_token][i] <= C_regbank[in_token][i-1]; + W_regbank[in_token][i] <= W_regbank[in_token][i-1]; + H_regbank[in_token][i] <= H_regbank[in_token][i-1]; + D_regbank[in_token][i] <= D_regbank[in_token][i-1]; + + IN_W_regbank[in_token][i] <= IN_W_regbank[in_token][i-1]; + IN_H_regbank[in_token][i] <= IN_H_regbank[in_token][i-1]; + IN_D_regbank[in_token][i] <= IN_D_regbank[in_token][i-1]; + + S_W_regbank[in_token][i] <= S_W_regbank[in_token][i-1]; + S_H_regbank[in_token][i] <= S_H_regbank[in_token][i-1]; + S_D_regbank[in_token][i] <= S_D_regbank[in_token][i-1]; + end + C_d[in_token] <= C_regbank[in_token][(ELEMENTS_PER_CYCLE - in_token)-1]; + W_d[in_token] <= W_regbank[in_token][(ELEMENTS_PER_CYCLE - in_token)-1]; + H_d[in_token] <= H_regbank[in_token][(ELEMENTS_PER_CYCLE - in_token)-1]; + D_d[in_token] <= D_regbank[in_token][(ELEMENTS_PER_CYCLE - in_token)-1]; + + IN_W_d[in_token] <= IN_W_regbank[in_token][(ELEMENTS_PER_CYCLE - in_token)-1]; + IN_H_d[in_token] <= IN_H_regbank[in_token][(ELEMENTS_PER_CYCLE - in_token)-1]; + IN_D_d[in_token] <= IN_D_regbank[in_token][(ELEMENTS_PER_CYCLE - in_token)-1]; + + S_W_d[in_token] <= S_W_regbank[in_token][(ELEMENTS_PER_CYCLE - in_token)-1]; + S_H_d[in_token] <= S_H_regbank[in_token][(ELEMENTS_PER_CYCLE - in_token)-1]; + S_D_d[in_token] <= S_D_regbank[in_token][(ELEMENTS_PER_CYCLE - in_token)-1]; + Index_d[in_token] <= next_index + in_token - (ELEMENTS_PER_CYCLE * (ELEMENTS_PER_CYCLE)); + end + end + end //ff_calculate_tensor_indexes + end //gen_calculate_tensor_indexes +endmodule //lt_dimension_counter diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_lt_funnel.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_lt_funnel.sv new file mode 100644 index 0000000..ad75919 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_lt_funnel.sv @@ -0,0 +1,73 @@ +// Copyright 2020-2024 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +/** + * dla_lt_funnel.sv + * + * Reduces INPUTS (DDR width) input tokens to OUTPUT (CVEC) output tokens combinationally. + * Operation: + * 1. Each input is multiplexed in a 1xOUTPUT multiplexer with enable signal. + * The selected output line corresponds with the target output position of the input in the resulting CVEC + * line. + * 2. For each MUX, the elements position i of all MUXes are OR'ed together for each OUTPUT number of MUX ouputs. + * At most one input to the token-wise OR operator will be non-zero. + * 3. Together, the output of the OUTPUT OR-gates have the value of the rearranged inputs. + * + * Assumptions: + * The user is responsible for ensuring that there are no collisions in the input-output (DDR-CVEC) mapping. + */ + +`resetall +`undefineall +`default_nettype none + +module dla_lt_funnel #( + parameter int INPUTS=16, // i.e., DDR tokens + parameter int OUTPUTS=32, // i.e., CVEC + parameter int ELEM_WIDTH=16 +) ( + input wire [INPUTS-1:0][ELEM_WIDTH-1:0] i_tokens, // input values + input wire i_valid [INPUTS-1:0], // valid signal corresponding to each input + input wire [$clog2(OUTPUTS):0] i_select [INPUTS-1:0], // select value in position i represents input i's position in CVEC line + output logic [OUTPUTS-1:0][ELEM_WIDTH-1:0] o_funnel_out // rearranged and combined output +); + for (genvar inputs = 0; inputs < INPUTS; inputs++) + begin: g_mux + wire [ELEM_WIDTH-1:0] mux_output [OUTPUTS-1:0]; + dla_lt_mux #(.VALUE_WIDTH(ELEM_WIDTH), .NOUTPUT(OUTPUTS)) mux_inst ( + .i_valid(i_valid[inputs]), + .i_select(i_select[inputs]), + .i_value(i_tokens[inputs]), + .o_mux_output(mux_output) + ); + end + + for (genvar outputs = 0; outputs < OUTPUTS; outputs++) + begin: g_or + logic [ELEM_WIDTH-1:0] or_input [INPUTS-1:0]; + for (genvar inputs = 0; inputs < INPUTS; inputs++) + begin + assign or_input[inputs] = g_mux[inputs].mux_output[outputs]; + end + always_comb begin + for (int i = 0; i < INPUTS; i++) begin + if (i == 0) begin + o_funnel_out[outputs] = or_input[0]; + end else begin + o_funnel_out[outputs] |= or_input[i]; + end + end + end + end +endmodule + diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_lt_gen_index_info.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_lt_gen_index_info.sv new file mode 100644 index 0000000..6c15d7d --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_lt_gen_index_info.sv @@ -0,0 +1,254 @@ +// Copyright 2020-2024 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +/** + * dla_lt_gen_index_info.sv + * + * Generates the indices and control logic for the layout transform RAM modules. Controls + * where incoming data is stored in the RAM modules, where incoming data is collected into + * CVEC groups for downstream inference. + * + * RAM index information is derived from the index counters at the input to this module. + * + */ + +`resetall +`undefineall +`default_nettype none + +module dla_lt_gen_index_info import dla_common_pkg::*, dla_lt_pkg::*; #( + parameter int ELEMENTS_PER_CYCLE, + parameter int N_BUFFER_POOLS, + parameter int N_POOL_BITS, + parameter int CVEC_PER_BUFFER, + parameter int CNT_BITS, + parameter int MAX_CHANNELS, + parameter int CVEC, + + parameter int MAX_FEATURE_WIDTH, + parameter int MAX_FEATURE_HEIGHT, + parameter int MAX_FEATURE_DEPTH, + + parameter int MAX_STRIDE_WIDTH, + parameter int MAX_STRIDE_HEIGHT, + parameter int MAX_STRIDE_DEPTH, + parameter int MAX_INPUT_VOLUME, + parameter int MAX_DIM_BITS +) ( + input wire clk, + input wire i_rstn, + input wire i_valid, + input wire i_ready, + input wire i_next_overflow, + layout_transform_config_if if_lt_config, + input wire [max($clog2(MAX_CHANNELS), 1)-1:0] i_c_dim [ELEMENTS_PER_CYCLE-1:0], + + // Location within the stride partition: + input wire [max($clog2(MAX_STRIDE_WIDTH), 1)-1:0] i_w_inner [ELEMENTS_PER_CYCLE-1:0], + input wire [max($clog2(MAX_STRIDE_HEIGHT), 1)-1:0] i_h_inner [ELEMENTS_PER_CYCLE-1:0], + input wire [max($clog2(MAX_STRIDE_DEPTH), 1)-1:0] i_d_inner [ELEMENTS_PER_CYCLE-1:0], + + // Which stride partition: + input wire [max($clog2(MAX_FEATURE_WIDTH), 1)-1:0] i_w_stride [ELEMENTS_PER_CYCLE-1:0], + input wire [max($clog2(MAX_FEATURE_HEIGHT), 1)-1:0] i_h_stride [ELEMENTS_PER_CYCLE-1:0], + input wire [max($clog2(MAX_FEATURE_DEPTH), 1)-1:0] i_d_stride [ELEMENTS_PER_CYCLE-1:0], + + // Input index in original ordering: + input wire [MAX_DIM_BITS-1:0] i_index [ELEMENTS_PER_CYCLE-1:0], + + output wire [address_info_e.num()-1:0][CNT_BITS-1:0] o_addr_queue [N_BUFFER_POOLS-1:0][ELEMENTS_PER_CYCLE-1:0], + output wire [ELEMENTS_PER_CYCLE-1:0] o_completed_vol_tally, + output wire o_ready_for_transfer +); + integer unsigned overhang_h, overhang_w; + assign overhang_w = if_lt_config.data.w_padding_per_stride; + assign overhang_h = if_lt_config.data.h_padding_per_stride; + + logic [ELEMENTS_PER_CYCLE-1:0] completed_vol_tally; + logic ready_for_transfer; + logic prev_ddr_valid; + + logic [3:0] startup; + assign ready_for_transfer = startup[3]; + assign o_completed_vol_tally = completed_vol_tally; + assign o_ready_for_transfer = ready_for_transfer; + logic [2:0] completed_volume [ELEMENTS_PER_CYCLE-1:0]; + logic [2:0] new_line [ELEMENTS_PER_CYCLE-1:0]; + + for (genvar in_token = 0; in_token < ELEMENTS_PER_CYCLE; in_token++) + begin : gen_ddr_tokens + logic [address_info_e.num()-1:0][CNT_BITS-1:0] addr_queue[N_BUFFER_POOLS-1:0]; + for (genvar gi = 0; gi < N_BUFFER_POOLS; gi++) begin : gen_assign + assign o_addr_queue[gi][in_token] = addr_queue[gi]; + end + shortint unsigned index_in_stride; + shortint unsigned stride_c; + shortint unsigned index_in_cvec; + shortint unsigned cvec_cursor; + shortint unsigned idx; + shortint unsigned buffer_num; + shortint unsigned pool_addr; + shortint unsigned inner; + + + shortint unsigned in_WHD_calc; + shortint unsigned in_WH_calc; + shortint unsigned in_W_calc; + shortint unsigned s_WH_calc; + shortint unsigned s_W_calc; + shortint unsigned in_W_reg; + shortint unsigned s_W_reg; + + logic [MAX_DIM_BITS-1:0] index_store [2:0][ELEMENTS_PER_CYCLE-1:0]; + always_ff @(posedge clk) + begin + if (!i_rstn) begin + completed_volume[in_token] <= '{default: '0}; + new_line[in_token] <= '{default: '0}; + if (in_token == 0) begin + index_store <= '{default: '0}; + startup <= 2; + end + end else begin + // Spreads the following calculations accross several cycles: + // index_in_stride = i_w_inner[in_token] + STRIDE_WIDTH * (i_h_inner[in_token] + STRIDE_HEIGHT * (i_d_inner[in_token] + STRIDE_DEPTH * i_c_dim[in_token])); + // cvec_cursor = i_w_stride[in_token] + (FEATURE_WIDTH / STRIDE_WIDTH) * (i_h_stride[in_token] + ((FEATURE_HEIGHT / STRIDE_HEIGHT) * (i_d_stride[in_token] + (FEATURE_DEPTH / STRIDE_DEPTH) * 0))); // stride_c + if ((i_next_overflow == 0 && i_valid == 1'b1 && ready_for_transfer == 1'b1) || (i_ready && ready_for_transfer == 1'b0)) + begin + if (ready_for_transfer == 1'b0 && in_token == 0) + startup <= startup - 1; + //1 + in_WHD_calc <= if_lt_config.data.channels_incr*i_c_dim[in_token]; // STRIDE_WIDTH*STRIDE_HEIGHT*STRIDE_DEPTH + in_WH_calc <= if_lt_config.data.depth_incr*i_d_inner[in_token]; // STRIDE_WIDTH*STRIDE_HEIGHT + in_W_calc <= if_lt_config.data.stride_width*i_h_inner[in_token]; + in_W_reg <= i_w_inner[in_token]; + s_WH_calc <= if_lt_config.data.stride_depth_incr * i_d_stride[in_token]; // (FEATURE_HEIGHT / STRIDE_HEIGHT) * (FEATURE_WIDTH / STRIDE_WIDTH) + s_W_calc <= if_lt_config.data.stride_height_incr *i_h_stride[in_token]; //(FEATURE_WIDTH / STRIDE_WIDTH) + s_W_reg <= i_w_stride[in_token]; + + completed_volume[in_token][0] <= + i_w_stride[in_token] == if_lt_config.data.stride_w_limit - 1 && + i_w_inner[in_token] == if_lt_config.data.final_stride_w_limit && + i_h_inner[in_token] == if_lt_config.data.stride_height - 1 && + i_c_dim[in_token] == if_lt_config.data.input_channels - 1 || + i_h_stride[in_token] == if_lt_config.data.stride_h_limit - 1 && + i_w_inner[in_token] == if_lt_config.data.stride_width - 1 && + i_h_inner[in_token] == if_lt_config.data.final_stride_h_limit && + i_c_dim[in_token] == if_lt_config.data.input_channels - 1 || + i_index[in_token] == if_lt_config.data.feature_volume - 1; + + new_line[in_token][0] <= + i_w_stride[in_token] == 0 && + i_h_stride[in_token] > 0 && + i_h_inner[in_token] == 0 && + i_w_inner[in_token] == overhang_w && + i_c_dim[in_token] == 0 || + i_w_stride[in_token] == 0 && + i_h_stride[in_token] == 0 && + i_h_inner[in_token] == overhang_h && + i_w_inner[in_token] == overhang_w && + i_c_dim[in_token] == 0 || + i_h_stride[in_token] == 0 && + i_h_inner[in_token] == overhang_h && + i_w_inner[in_token] == 0 && + i_c_dim[in_token] == 0; + + //2 + index_in_stride <= in_W_reg + in_W_calc + in_WH_calc + in_WHD_calc; + cvec_cursor <= s_W_reg + s_W_calc + s_WH_calc; + completed_volume[in_token][1] <= completed_volume[in_token][0]; + new_line[in_token][1] <= new_line[in_token][0]; + + //3 + index_in_cvec <= index_in_stride; + buffer_num <= cvec_cursor % (CVEC_PER_BUFFER * N_BUFFER_POOLS); + pool_addr <= cvec_cursor[N_POOL_BITS-1:0]; + inner <= (cvec_cursor >> N_POOL_BITS) % CVEC_PER_BUFFER; + index_store[0] <= i_index; + index_store[1] <= index_store[0]; + index_store[2] <= index_store[1]; + new_line[in_token][2] <= new_line[in_token][1]; + completed_volume[in_token][2] <= completed_volume[in_token][1]; + + end + else + begin + // hold values + in_WHD_calc <= in_WHD_calc; + in_WH_calc <= in_WH_calc; + in_W_calc <= in_W_calc; + in_W_reg <= in_W_reg; + s_WH_calc <= s_WH_calc; + s_W_calc <= s_W_calc; + s_W_reg <= s_W_reg; + index_in_cvec <= index_in_cvec; + buffer_num <= buffer_num; + pool_addr <= pool_addr; + inner <= inner; + index_store[0] <= index_store[0]; + index_store[1] <= index_store[1]; + index_store[2] <= index_store[2]; + new_line[in_token][0] <= new_line[in_token][0]; + new_line[in_token][1] <= new_line[in_token][1]; + new_line[in_token][2] <= new_line[in_token][2]; + completed_volume[in_token][0] <= completed_volume[in_token][0]; + completed_volume[in_token][1] <= completed_volume[in_token][1]; + completed_volume[in_token][2] <= completed_volume[in_token][2]; + if (in_token == 0) + startup <= startup; + end + end + end + + + always_ff @(posedge clk) + /** + * Process: derive_indexes + * + * Description: In this process, the exact buffer locations of the incoming data + * is calculated for all incoming values using the indexes calculated above. + * The results are passed downstream for writing to RAM, and eventually output, once + * the line is finished. + */ + begin : derive_indexes + if (!i_rstn) begin + completed_vol_tally[in_token] <= '0; + if (in_token == 0) begin + prev_ddr_valid <= '0; + end + for (int i = 0; i < N_BUFFER_POOLS; i++) begin + addr_queue[i] <= '{default: '0}; + end + end else begin + // Clear values... + completed_vol_tally[in_token] <= '0; + for (int i = 0; i < N_BUFFER_POOLS; i++) begin + addr_queue[i][VALID] <= 1'b0; + addr_queue[i][INNER_LINE] <= 1'b0; + addr_queue[i][NEW_LINE] <= '0; + end + if (in_token == 0) begin + prev_ddr_valid <= i_valid; + end + if (i_valid & ready_for_transfer & ~i_next_overflow) + begin + addr_queue[pool_addr][VALID] <= index_store[2][in_token] < if_lt_config.data.feature_volume; + addr_queue[pool_addr][INNER_LINE] <= inner; + addr_queue[pool_addr][CVEC_IDX] <= index_in_cvec; + addr_queue[pool_addr][NEW_LINE] <= (index_in_cvec == 0) || new_line[in_token][2]; + completed_vol_tally[in_token] <= completed_volume[in_token][2] || index_in_cvec == if_lt_config.data.stride_volume - 1; + end + end + end + end +endmodule //lt_gen_index_info diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_lt_memory_manager.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_lt_memory_manager.sv new file mode 100644 index 0000000..7a9b2c9 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_lt_memory_manager.sv @@ -0,0 +1,298 @@ +// Copyright 2020-2024 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +/** + * dla_lt_memory_manager.sv + * + * Manages the RAM modules and RAM arbiter for the layout transform. + * + * Using the index information in the address queue, the memory manager stores + * incoming data in the target RAM and RAM line. + * + * NUM_BUFFER_POOLS RAM modules are instantiated; this is the number of RAMs + * required to avoid collision. Each RAM line will represent a CVEC of data. + * Once a CVEC is finished, it will be output, and the RAM line can be reused. + * + */ + +`resetall +`undefineall +`default_nettype none + +module dla_lt_memory_manager import dla_lt_pkg::*,dla_common_pkg::*; #( + parameter int NUM_BUFFER_POOLS, + parameter int CVEC_PER_BUFFER, + parameter int ELEMENTS_PER_CYCLE, + parameter int CNT_BITS, + parameter int CVEC, + parameter int MAX_OUTPUT_C, + parameter device_family_t DEVICE +) ( + input wire clk, + input wire i_rstn, + input wire [address_info_e.num()-1:0][CNT_BITS-1:0] i_addr_queue [NUM_BUFFER_POOLS-1:0][ELEMENTS_PER_CYCLE-1:0], + input wire [($clog2(CVEC_PER_BUFFER))-1:0] i_output_line_num [NUM_BUFFER_POOLS-1:0], + input wire [NUM_BUFFER_POOLS-1:0] i_actively_reading, + input wire [ELEMENTS_PER_CYCLE-1:0][15:0] i_fp16_data, + input wire [ELEMENTS_PER_CYCLE-1:0] i_completed_vol_tally, + output wire [ELEMENTS_PER_CYCLE-1:0] o_completed_vol_tally, + + output wire [MAX_OUTPUT_C-1:0][16-1:0] o_output_line_data [NUM_BUFFER_POOLS-1:0], + output wire [($clog2(CVEC_PER_BUFFER))-1:0] o_curr_out_line [NUM_BUFFER_POOLS-1:0] +); + + dla_delay #( + .WIDTH(ELEMENTS_PER_CYCLE), + .DELAY(12), + .DEVICE(DEVICE) + ) new_line_delay ( + .clk(clk), + .i_data(i_completed_vol_tally), + .o_data(o_completed_vol_tally) + ); + + + for (genvar pool_num = 0; pool_num < NUM_BUFFER_POOLS; pool_num++) + begin : gen_buffer_pools + + logic [MAX_OUTPUT_C-1:0][16-1:0] line_data; + logic [MAX_OUTPUT_C-1:0][16-1:0] updated_line_data [3:0]; + logic [MAX_OUTPUT_C-1:0][16-1:0] updated_line_data_comb; + logic [($clog2(CVEC_PER_BUFFER))-1:0] line_num [3:0]; + + logic valid [3:0]; + logic [3:0] new_line_cnt [CVEC_PER_BUFFER-1:0]; + + logic cycle_valid; + logic [($clog2(CVEC_PER_BUFFER))-1:0] pool_addr_comb; + + logic [($clog2(CVEC_PER_BUFFER))-1:0] addrA; + logic [($clog2(CVEC_PER_BUFFER))-1:0] addrB; + + logic validA; + logic validB; + byte unsigned outputCount[CVEC_PER_BUFFER-1:0]; + + logic [MAX_OUTPUT_C-1:0][16-1:0] dataA; + logic [MAX_OUTPUT_C-1:0][16-1:0] dataB; + + logic valid_vec [ELEMENTS_PER_CYCLE-1:0]; + logic valid_single; + logic [$clog2(MAX_OUTPUT_C):0] select_vec [ELEMENTS_PER_CYCLE-1:0]; + logic [MAX_OUTPUT_C-1:0][15:0] funnel_out; + logic [CNT_BITS-1:0] line_num_vec [ELEMENTS_PER_CYCLE-1:0]; + logic [CNT_BITS-1:0] line_num_single; + logic [CNT_BITS-1:0] new_line_vec [ELEMENTS_PER_CYCLE-1:0]; + logic [CNT_BITS-1:0] new_line_single; + + dla_lt_funnel #( + .INPUTS(ELEMENTS_PER_CYCLE), + .OUTPUTS(MAX_OUTPUT_C), + .ELEM_WIDTH(16) + ) funnel ( + .i_tokens(i_fp16_data), + .i_valid(valid_vec), + .i_select(select_vec), + .o_funnel_out(funnel_out) + ); + + for (genvar token = 0; token < ELEMENTS_PER_CYCLE; token++) + begin: g_funnel_data + // we have a DDR-width vector of tokens. We are guaranteed each pool only has a single line_num (i.e., line_num_vec is a vector with either zero or address X repeated up to CVEC times). + // So we need to funnel the incomig data vector to CVEC for the current pool... + assign valid_vec[token] = i_addr_queue[pool_num][token][VALID]; + assign select_vec[token] = i_addr_queue[pool_num][token][CVEC_IDX]; + assign line_num_vec[token] = i_addr_queue[pool_num][token][INNER_LINE]; + assign new_line_vec[token] = i_addr_queue[pool_num][token][NEW_LINE]; + end + + // Delay these signals to help with retiming and routing (?) + logic [MAX_OUTPUT_C-1:0][16-1:0] output_line_data; + logic [($clog2(CVEC_PER_BUFFER))-1:0] curr_out_line; + + dla_delay #( + .WIDTH(MAX_OUTPUT_C * 16), + .DELAY(3), + .DEVICE(DEVICE) + ) output_data_delay ( + .clk(clk), + .i_data(output_line_data), + .o_data(o_output_line_data[pool_num]) + ); + + dla_delay #( + .WIDTH($clog2(CVEC_PER_BUFFER)), + .DELAY(3), + .DEVICE(DEVICE) + ) output_line_delay ( + .clk(clk), + .i_data(curr_out_line), + .o_data(o_curr_out_line[pool_num]) + ); + + dla_hld_ram #( + .DEPTH(CVEC_PER_BUFFER), + .WIDTH(MAX_OUTPUT_C * 16), + .BE_WIDTH(1), + + .MINIMIZE_MEMORY_USAGE(1), + .SIM_ONLY_MIN_PHYSICAL_DEPTH(1), + + .USE_MEM_INIT_FILE(0), + .ZERO_INITIALIZE_MEM(1), + .MEM_INIT_NAME("none"), + + .ENABLE_ECC(0), + .ECC_STATUS_TIME_STRETCH(0), + .ASYNC_RESET(0), + .SYNCHRONIZE_RESET(0), + + .RAM_BLOCK_TYPE("M20K"), + .RAM_OPERATION_MODE("TRUE_DUAL_PORT"), + .DEVICE_FAMILY(DEVICE), + .READ_DURING_WRITE("NEW_DATA"), + .REGISTER_A_READDATA(1), + .REGISTER_B_ADDRESS(1), + .REGISTER_B_READDATA(1), + + .USE_ENABLE(0), + .COMMON_IN_CLOCK_EN(1), + .COMMON_OUT_CLOCK_EN(1) + ) ram_buffer_pool ( + .clock (clk), + .resetn (i_rstn), + // a port + .a_address (addrA), //address for read or write + .a_write (validA), //write enable(), 1 = write(), 0 = read + .a_writedata (dataA), //data to write to memory + .a_byteenable ('1), //which bytes of write data to commit to memory + .a_readdata (line_data), //data read from memory + .a_in_clock_en (1'b1), //applies to all inputs: address(), write enable(), write data(), byte enable + .a_out_clock_en (1'b1), //applies to all outputs: read data + // b port + .b_address (addrB), //signals have the same meaning as port a + .b_write (validB), + .b_writedata (dataB), + .b_byteenable ('1), + .b_readdata (output_line_data), + .b_in_clock_en (1'b1), + .b_out_clock_en (1'b1), + .ecc_err_status(), + .a_read_enable('1), + .b_read_enable('1) + ); + + // This arbitration module behaves as follows: + // Write requests and port A read requests are prioritized. If the addresses for write and Port A read + // differ, then the port A read will be transferred to port B. If there is also an active port B read request with + // a different address, it will be deferred. The current_read_a/b output keep track of what read address is currently valid, + // assuming a 2-cycle read delay. + // The output logic (driving port B) will use the current_read_b output to drive the output_valid signal. + dla_lt_ram_arb #(.ADDRESS_WIDTH($clog2(CVEC_PER_BUFFER)), .DATA_WIDTH(MAX_OUTPUT_C * 16)) + arbiter ( + .clk(clk), + .i_rstn(i_rstn), + .i_a_address(line_num[0]), + .i_a_valid_read_req(valid[0]), + + .i_b_address(i_output_line_num[pool_num]), + .i_b_valid_read_req(i_actively_reading[pool_num]), + + .i_write_address(line_num[3]), + .i_write_req(valid[3]), + .i_write_data(updated_line_data[3]), + + .o_arb_address_a(addrA), + .o_arb_write_valid_a(validA), + .o_arb_data_a(dataA), + + .o_arb_address_b(addrB), + .o_arb_write_valid_b(validB), + .o_arb_data_b(dataB), + .o_current_read_a(), + .o_current_read_b(curr_out_line) + ); + + + always_ff @(posedge clk) + begin + if (!i_rstn) begin + valid <= '{default: '0}; + updated_line_data <= '{default: '0}; + outputCount <= '{default: '0}; + cycle_valid = 0; + new_line_cnt <= '{default: '1}; + end else begin + + line_num_single <= line_num_vec.or(); + valid_single <= valid_vec.or(); + new_line_single <= new_line_vec.or(); + updated_line_data_comb <= funnel_out; + + // pass along line number. + // line_num[0] is used for reading. + // line_num[3] is used for writing back, since by then the address requested with line_num[0] + // has been retrieved. + line_num[1] <= line_num[0]; + line_num[2] <= line_num[1]; + line_num[3] <= line_num[2]; + + // pass along the valid-write signal + valid[0] <= '0; + valid[1] <= valid[0]; + valid[2] <= valid[1]; + valid[3] <= valid[2]; + + // pass along updated data. In the third cycle, combine with existing data + // iff this line hasn't been reset within the last 5 cycles (3 cycles to have + // written reset data, and 2 to read it back). + updated_line_data[0] <= '{default: '0}; + // updated_line_data_comb = '{default: '0}; + updated_line_data[1] <= updated_line_data[0]; + updated_line_data[2] <= updated_line_data[1]; + updated_line_data[3] <= new_line_cnt[line_num[2]][3] == 1'b0 ? updated_line_data[2] : updated_line_data[2] | line_data; + + // update counters for each address. + for (int i = 0; i < CVEC_PER_BUFFER; i++) + begin + if (new_line_cnt[i][3] == 1'b0 ) + new_line_cnt[i] <= new_line_cnt[i] - 1; + if (outputCount[i] < 4) + outputCount[i] <= outputCount[i] + 1; + end + + valid[0] <= valid_single; + line_num[0] <= line_num_single; + + if (valid_single) + begin + + outputCount[line_num_single] <= 0; + if (new_line_single) + begin + new_line_cnt[line_num_single] <= 3; // 3 to write current line, then 2 to read - any sooner and the data will be wrong... + end + end + + updated_line_data[0] <= updated_line_data_comb; + + if (valid_single && outputCount[line_num_single] < 3) // i.e., we have data to write, and the previously received data is sill in the pipeline. + begin + updated_line_data[0] <= updated_line_data_comb | updated_line_data[outputCount[line_num_single]]; + if (~new_line_cnt[line_num_single][3]) new_line_cnt[line_num_single] <= 3; + valid[outputCount[line_num_single]+1] <= 0; // quash downstream write + end + end + end + end +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_lt_mux.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_lt_mux.sv new file mode 100644 index 0000000..92b16a7 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_lt_mux.sv @@ -0,0 +1,38 @@ +// Copyright 2020-2022 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +`resetall +`undefineall +`default_nettype none + +module dla_lt_mux #( + parameter int VALUE_WIDTH, + parameter int NOUTPUT, + parameter int SELECT_WIDTH=$clog2(NOUTPUT) + ) ( + input wire i_valid, + input wire [SELECT_WIDTH:0] i_select, + input wire [VALUE_WIDTH-1:0] i_value, + output logic [VALUE_WIDTH-1:0] o_mux_output [NOUTPUT-1:0] +); + + always_comb + begin + o_mux_output <= '{default: '0}; + if (i_valid) + begin + o_mux_output[i_select] <= i_value; + end + end + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_lt_output_logic.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_lt_output_logic.sv new file mode 100644 index 0000000..3721522 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_lt_output_logic.sv @@ -0,0 +1,205 @@ +// Copyright 2020-2024 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +/** + * dla_lt_output_logic.sv + * + * Keeps track of finished CVEC lines, and writes the finished lines to the output. + * Also keeps track of the dimensions of the output, and outputs padding lines when + * required. + * + */ + +`resetall +`undefineall +`default_nettype none + +module dla_lt_output_logic import dla_lt_pkg::*; #( + parameter int NUM_BUFFER_POOLS, + parameter int CVEC_PER_BUFFER, + parameter int ELEMENTS_PER_CYCLE, + parameter int N_POOL_BITS, + parameter int MAX_OUTPUT_W, + parameter int MAX_OUTPUT_H, + parameter int MAX_OUTPUT_D, + parameter int MAX_OUTPUT_C, + parameter int CVEC, + parameter int CNT_BITS, + parameter int MAX_DIM_BITS, + localparam int MAX_OUTPUT_VOLUME = MAX_OUTPUT_W * MAX_OUTPUT_H * MAX_OUTPUT_D * (MAX_OUTPUT_C/CVEC) +) ( + input wire clk, + input wire i_rstn, + input wire [MAX_OUTPUT_C-1:0][16-1:0] i_output_line_data [NUM_BUFFER_POOLS-1:0], + input wire [($clog2(CVEC_PER_BUFFER))-1:0] i_curr_out_line [NUM_BUFFER_POOLS-1:0], + input wire [ELEMENTS_PER_CYCLE-1:0] i_completed_vol_tally, + layout_transform_config_if if_lt_config, + input wire i_ready, + + output logic [($clog2(CVEC_PER_BUFFER))-1:0] o_line_num [NUM_BUFFER_POOLS-1:0], + output logic [NUM_BUFFER_POOLS-1:0] o_read_req, + output logic [CVEC-1:0][16-1:0] o_data, + output logic o_valid, + output logic o_last, + input wire i_stall, + output logic [$clog2((MAX_OUTPUT_VOLUME))-1:0] o_lines_written, + output int o_finished_lines +); + + logic [MAX_DIM_BITS-1:0] top_full_padding, left_full_padding; + assign top_full_padding = if_lt_config.data.top_full_padding; + assign left_full_padding = if_lt_config.data.left_full_padding; + + logic [$clog2((MAX_OUTPUT_VOLUME))-1:0] lines_written; + logic [16-1:0] finished_lines_comb, finished_lines_reg; + assign o_finished_lines = finished_lines_reg; + assign o_lines_written = lines_written; + + // Add up all the lines in the current cycle that are complete CVEC lines, represented in the tally vector. + always_comb + begin + finished_lines_comb = 0; + for (int i =0 ; i < ELEMENTS_PER_CYCLE; i++) + begin + finished_lines_comb = finished_lines_comb + i_completed_vol_tally[i]; + end + end + + logic [N_POOL_BITS-1:0] pool_out_comb; + logic [N_POOL_BITS-1:0] pool_out; + logic [$clog2(CVEC_PER_BUFFER):0] line_out_comb; + logic [$clog2((NUM_BUFFER_POOLS) * (CVEC_PER_BUFFER)):0] output_cursor; + + logic inside_padding; + logic write_line; + logic extra_cvec; + + shortint unsigned output_w_cnt; + shortint unsigned output_h_cnt; + shortint unsigned total_output; + shortint unsigned cvec_rollover; + shortint unsigned cvec_count; + logic [MAX_DIM_BITS-1:0] left_pad, top_pad; + + assign pool_out_comb = output_cursor[N_POOL_BITS-1:0]; + assign line_out_comb = ((output_cursor >> N_POOL_BITS) & (CVEC_PER_BUFFER-1)); + + + logic overflow; + logic front_pad; + assign overflow = (output_w_cnt >= if_lt_config.data.w_overflow + || output_h_cnt >= if_lt_config.data.h_overflow) && total_output < (if_lt_config.data.output_volume); + assign front_pad = (~top_full_padding[MAX_DIM_BITS-1] && top_pad <= top_full_padding) || (~left_full_padding[MAX_DIM_BITS-1] && left_pad <= left_full_padding); + + + assign inside_padding = i_stall == 0 && i_ready && (overflow || front_pad); + + assign extra_cvec = (total_output >= if_lt_config.data.output_face_area) && total_output < if_lt_config.data.output_volume; + + assign write_line = (i_stall == 0 && i_ready && (( lines_written < finished_lines_reg) || (extra_cvec))); + + + always_ff @( posedge clk) + begin + o_valid <= 1'b0; + finished_lines_reg <= finished_lines_reg + finished_lines_comb; + o_read_req <= '{default: '0}; + if (!i_rstn) + begin + finished_lines_reg <= '0; + lines_written <= '0; + output_cursor <= '0; + o_data <= '0; + o_line_num <= '{default: '0}; + pool_out <= '0; + + output_h_cnt <= 0; + output_w_cnt <= 0; + + total_output <= 0; + cvec_rollover <= 0; + o_last <= 0; + cvec_count <= '0; + left_pad <= '0; + top_pad <= '0; + end + else if (if_lt_config.valid) + begin + o_line_num[pool_out_comb] <= line_out_comb; + pool_out <= pool_out_comb; + o_data <= i_output_line_data[pool_out_comb][CVEC*(cvec_count)+:CVEC]; + o_last <= lines_written == (if_lt_config.data.output_volume - 1) || total_output == (if_lt_config.data.output_volume - 1); + output_cursor <= output_cursor; + lines_written <= lines_written; + cvec_rollover <= cvec_rollover; + total_output <= total_output; + + // Could do the following with a state machine..? + o_valid <= '0; + o_read_req[pool_out_comb] <= 1'b1; + if (inside_padding) begin + o_data <= '0; + o_valid <= '1; + end + else if (write_line) begin + o_read_req[pool_out_comb] <= 1'b1; + end + if (i_stall) begin + o_valid <= o_valid; + o_data <= o_data; + end else begin + if ((write_line == 1 || extra_cvec) && inside_padding == 0 ) begin + o_read_req[pool_out_comb] <= 1'b1; + + o_valid <= i_curr_out_line[pool_out_comb] == line_out_comb; // This makes it so that output stalls when all RAM ports are busy... + if (i_curr_out_line[pool_out_comb] == line_out_comb) begin + output_cursor <= ((output_cursor + 1) & ((NUM_BUFFER_POOLS) * (CVEC_PER_BUFFER) - 1)); + + lines_written <= lines_written + 1; + end + end + + if (inside_padding || write_line == 1 && i_curr_out_line[pool_out_comb] == line_out_comb) begin + total_output <= total_output + 1; + cvec_rollover <= cvec_rollover + 1; + + // Keep track of dimensionality of output: + output_w_cnt <= output_w_cnt + 1; + left_pad <= left_pad+1; + + if (output_w_cnt >= if_lt_config.data.output_w-1) + begin + output_w_cnt <= 0; + left_pad <= 0; + top_pad <= top_pad + 1; + output_h_cnt <= output_h_cnt + 1; + if (output_h_cnt >= if_lt_config.data.output_h-1) + begin + output_h_cnt <= 0; + end + end + if ((cvec_rollover) == if_lt_config.data.output_face_area - 1) // start going to overflow... + begin + output_cursor <= 0; + cvec_rollover <= 0; + cvec_count <= cvec_count + 1; + left_pad<= 0; + top_pad <= 0; + output_w_cnt <= 0; + output_h_cnt <= 0; + end + end + end + end + end +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_lt_pkg.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_lt_pkg.sv new file mode 100644 index 0000000..a7e2e46 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_lt_pkg.sv @@ -0,0 +1,134 @@ +// Copyright 2020-2024 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + + +`resetall +`undefineall +`default_nettype none + +package dla_lt_pkg; + + import dla_common_pkg::*; + + function int calc_max_partitions; + input int height, width, channels, stride_height, stride_width, elem_per_ddr; + static int max_s[1:0] = '{default :'0}; + static int init_s[1:0] = '{default :'0}; + static int distance = 0; + static int partitions = 0; + static int s_w = 0; + static int s_h = 0; + static int in_w = 0; + static int in_h = 0; + static int c = 0; + static int h = 0; + static int w = 0; + begin + + if (elem_per_ddr > height * width * channels) + elem_per_ddr = height * width * channels - 1; + for (integer i = 0; i < (height * width * channels); i++) + begin + if (i % elem_per_ddr == 0) + begin + distance = max_s[0] - init_s[0] + ((max_s[1] - init_s[1]) * (width / stride_width)); + partitions = (distance > partitions) ? distance : partitions; + init_s[0] = s_w; + init_s[1] = s_h; + max_s = init_s; + end + + if (s_w > max_s[0]) + begin + max_s[0] = s_w; + end + + if (s_h > max_s[1]) + begin + max_s[1] = s_h; + end + + c += 1; + + if (c >= channels) + begin + c = 0; + w += 1; + in_w += 1; + end + + if (w >= width) + begin + w = 0; + in_w = 0; + s_w = 0; + h += 1; + in_h += 1; + end + + if (h >= height) + begin + h = 0; + s_h = 0; + in_h = 0; + end + + if (in_w >= stride_width) + begin + in_w = 0; + s_w += 1; + end + + if (in_h >= stride_height) + begin + in_h = 0; + s_h += 1; + end + end + + calc_max_partitions = (partitions + 1) < 2? 2 : (partitions + 1); + end + endfunction + + typedef struct { + int ENABLE_LT; + int DATA_ELEMENT_WIDTH; + int CNT_BITS; + int DO_U8_CONV; + int DDR_BYTES; + int CONFIG_BYTES; + int MAX_CHANNELS; + int MAX_FEATURE_HEIGHT; + int MAX_FEATURE_WIDTH; + int MAX_FEATURE_DEPTH; + int MAX_STRIDE_HEIGHT; + int MAX_STRIDE_WIDTH; + int MAX_STRIDE_DEPTH; + int CVEC; + int MAX_PAD_FRONT; + int MAX_PAD_LEFT; + int MAX_PAD_TOP; + int MAX_FILTER_HEIGHT; + int MAX_FILTER_WIDTH; + int MAX_FILTER_DEPTH; + int MAX_DILATION_WIDTH; + int MAX_DILATION_HEIGHT; + int MAX_DILATION_DEPTH; + device_family_t DEVICE; // device + } lt_arch_t; + + enum {VALID, INNER_LINE, CVEC_IDX, STRIDE_IDX, C_STRIDE, NEW_LINE} address_info_e; + + `include "dla_layout_transform_config.svh" + +endpackage diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_lt_ram_arb.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_lt_ram_arb.sv new file mode 100644 index 0000000..0705fef --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_lt_ram_arb.sv @@ -0,0 +1,120 @@ +// Copyright 2020-2024 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +/** + * dla_ram_arb.sv + * + * arbiter module for full duplex dual port RAM. + * + * Operation: + * The module accepts two read requests, and a single write request. The write + * request takes highest priority. A write request will be sent to either port A or B + * if either are free. Otherwise, if there is a read request on both port A and B, then + * the write will take place on port B and the read request will be ignored. + * The user should check the current_read_a/b outputs to confirm the address that is + * being read. + * + * Assumptions: + * Must be used with full duplex RAM that has a 2-cycle read latency. + * + */ + + `resetall + `undefineall + `default_nettype none + import dla_common_pkg::*; + + module dla_lt_ram_arb #(parameter ADDRESS_WIDTH, parameter DATA_WIDTH) ( + input wire clk, + input wire i_rstn, + //PORT A READ REQUESTS + input wire [ADDRESS_WIDTH-1:0] i_a_address, + input wire i_a_valid_read_req, + + //PORT B READ REQUESTS + input wire [ADDRESS_WIDTH-1:0] i_b_address, + input wire i_b_valid_read_req, + + //WRITE REQUESTS + input wire [ADDRESS_WIDTH-1:0] i_write_address, + input wire i_write_req, + input wire [DATA_WIDTH-1:0] i_write_data, + + //OUTPUTS A + output logic [ADDRESS_WIDTH-1:0] o_arb_address_a, + output logic o_arb_write_valid_a, + output logic [DATA_WIDTH-1:0] o_arb_data_a, + output logic [ADDRESS_WIDTH-1:0] o_current_read_a, // Address of value currently driven on port A (assumes 2-cycle read delay!) + + //OUTPUTS B + output logic [ADDRESS_WIDTH-1:0] o_arb_address_b, + output logic o_arb_write_valid_b, + output logic [DATA_WIDTH-1:0] o_arb_data_b, + output logic [ADDRESS_WIDTH-1:0] o_current_read_b + ); + + logic [ADDRESS_WIDTH-1:0] current_read_a_[1:0]; + logic [ADDRESS_WIDTH-1:0] current_read_b_[1:0]; + + assign o_current_read_a = current_read_a_[0]; + assign o_current_read_b = current_read_b_[0]; + + assign o_arb_data_a = i_write_data; + assign o_arb_data_b = i_write_data; + + + always_ff @(posedge clk) + begin + if (!i_rstn) + begin + current_read_a_ <= '{default: '0}; + current_read_b_ <= '{default: '0}; + end + current_read_a_[1] <= o_arb_address_a; + current_read_a_[0] <= current_read_a_[1]; + + current_read_b_[1] <= o_arb_address_b; + current_read_b_[0] <= current_read_b_[1]; + end + + always_comb begin : arbitrate + o_arb_address_a = i_a_address; + o_arb_write_valid_a = 1'b0; + + o_arb_address_b = i_b_address; + o_arb_write_valid_b = 1'b0; + + + if ((i_write_req == 1'b1 && i_a_valid_read_req == 1'b0) || (i_write_req == 1'b1 && i_a_valid_read_req == 1'b1 && i_a_address == i_write_address)) + begin + // Port A does not have a read request, or read request is for the same address. + o_arb_address_a = i_write_address; + o_arb_write_valid_a = 1'b1; + end + else if ((i_write_req == 1'b1 && i_b_valid_read_req == 1'b0) || (i_write_req == 1'b1 && i_b_valid_read_req == 1'b1 && i_b_address == i_write_address)) + begin + // Port B does not have a read request or read request is for the same address. + o_arb_address_b = i_write_address; + o_arb_write_valid_b = 1'b1; + end + else if (i_write_req == 1'b1 && i_b_valid_read_req == 1'b1 && i_a_valid_read_req == 1'b1 && i_write_address != i_b_address && i_write_address != i_a_address) + begin + // Both A and B have a read request, and there is a write request at a unique address. + // Then send the write request to port B and ignore the read. This disparity will be visible to the user by checking the current_read_b value. + o_arb_address_b = i_write_address; // instead of b_address... + o_arb_write_valid_b = 1'b1; + end + + end + + endmodule //ram_arb diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_lt_step_counter.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_lt_step_counter.sv new file mode 100644 index 0000000..912ea63 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_lt_step_counter.sv @@ -0,0 +1,351 @@ +// Copyright 2024 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +/** + * dla_lt_skip_counter.sv + * + * This module is responsible for calculating the index of the first token (pixel) arriving at the + * LT input each cycle. The remaining indeces are calculated in a different pipeline. + * + * Initially these calculations were done using division operations, which became too slow once + * runtime-configurability was added. Now this module uses a series of skip-counters with a + * carry chain to calculate tensor indeces for every Nth pixel, where N = (DDR-width / pixel-width). + * + * This counter calculates height, width, depth, and channel indeces, as well as the "stride inner" + * and "stride outer" indeces. In the most basic form, the calculations performed can be written as, + * + * Channels: C = index % CHANNELS + * Width: W = (index / CHANNELS) % WIDTH + * Height: H = (index / CHANNELS / WIDTH) % HEIGHT + * Depth: D = (index / CHANNELS / WIDTH / HEIGHT) + * + * Where CHANNELS, WIDTH, HEIGHT, and DEPTH are the exact dimensions of the input tensor, and `index` + * is the arbitrary location in the tensor (assuming DHWC memory format). The stride dimensions can + * be written as follows, + * + * Outer stride width: stride_w = W / STRIDE_WIDTH + * Outer stride height: stride_w = H / STRIDE_HEIGHT + * Inner stride width: inner_w = W % STRIDE_WIDTH + * Inner stride height: inner_h = H % STRIDE_HEIGHT + * + * These calculations above don't account for padding. To account for padding, we add (PADDING % STRIDE) + * to the numerator for each stride calculation. + * + * This is implemented using a multi-stage skip-counter with a carry-chain as shown below, excluding + * stride counters: + * + * ┌────────────────┐ + * │CHANNELS ┼────┐ + * │ │ step + * │ Step = │ │ + * │ N % CHANNELS│◄───┘ + * │ │ + * └──────────┬─────┘ + * carry-in + * │ + * ┌───────▼────────┐ + * │WIDTH ┼────┐ + * │ │ step + * │ Step = │ │ + * │ N / CHANNELS│◄───┘ + * │ % WIDTH │ + * └──────────┬─────┘ + * carry-in + * │ + * ┌────▼───────────┐ + * │HEIGHT ┼────┐ + * │ │ step + * │ Step = │ │ + * │ N / CHANNELS│◄───┘ + * │ / WIDTH │ + * │ % HEIGHT │ + * └────────────┬───┘ + * │ + * │ + * ┌──────▼─────────┐ + * │DEPTH ┼────┐ + * │ │ step + * │ Step = │ │ + * │ N / CHANNELS│◄───┘ + * │ / WIDTH │ + * │ / HEIGHT │ + * └────────────────┘ + * + * Note: Look at `config_bitstream_generator.cpp` for details on how each of the input values to this + * module are calculated. These values are passed into hardware through the configuration network. + * + */ +`resetall +`undefineall +`default_nettype none + +module dla_lt_step_counter #( + parameter ELEMENTS_PER_CYCLE, + parameter DIM_BITS, + parameter DEPTH_TENSOR +) ( + input wire clk, + input wire i_resetn, + input wire i_increment, + input wire [DIM_BITS-1:0] i_channel_dim, + input wire [DIM_BITS-1:0] i_width_dim, + input wire [DIM_BITS-1:0] i_width_overhang, + input wire [DIM_BITS-1:0] i_height_overhang, + input wire [DIM_BITS-1:0] i_height_dim, + input wire [DIM_BITS-1:0] i_depth_dim, + input wire [DIM_BITS-1:0] i_channel_step, + input wire [DIM_BITS-1:0] i_width_stride, + input wire [DIM_BITS-1:0] i_width_step, + input wire [DIM_BITS-1:0] i_stride_w_count, + input wire [DIM_BITS-1:0] i_width_stride_step, + input wire [DIM_BITS-1:0] i_width_inner_step, + input wire [DIM_BITS-1:0] i_height_stride, + input wire [DIM_BITS-1:0] i_height_step, + input wire [DIM_BITS-1:0] i_stride_h_count, + input wire [DIM_BITS-1:0] i_height_stride_step, + input wire [DIM_BITS-1:0] i_height_inner_step, + input wire [DIM_BITS-1:0] i_depth_step, + input wire [DIM_BITS-1:0] i_pad_w, + input wire [DIM_BITS-1:0] i_pad_h, + input wire [DIM_BITS-1:0] i_continue_count_cond, + input wire [DIM_BITS-1:0] i_overhang_end_w, + input wire [DIM_BITS-1:0] i_w_nstrides, + input wire [DIM_BITS-1:0] i_h_nstrides, + + output logic [DIM_BITS-1:0] o_channel, + output logic [DIM_BITS-1:0] o_width, + + output logic [DIM_BITS-1:0] o_width_stride, + output logic [DIM_BITS-1:0] o_width_inner, + + output logic [DIM_BITS-1:0] o_height, + output logic [DIM_BITS-1:0] o_height_stride, + output logic [DIM_BITS-1:0] o_height_inner, + + output logic [DIM_BITS-1:0] o_depth, + output logic o_valid +); + +localparam shortint N_STAGES = 3; +logic [N_STAGES-1:0] stage_cnt; +assign o_valid = stage_cnt[2]; + +logic [DIM_BITS-1:0] channel, channel_carry; +logic [DIM_BITS-1:0] width, width_stride, width_inner, width_inner_carry, width_carry; +logic [DIM_BITS-1:0] height, height_stride, height_inner, height_inner_carry, height_carry; +logic [DIM_BITS-1:0] depth; + +logic [DIM_BITS-1:0] channel_reg [N_STAGES-1:0]; +logic [DIM_BITS-1:0] channel_carry_reg [N_STAGES-1:0]; + +logic [DIM_BITS-1:0] width_reg [N_STAGES-2:0]; +logic [DIM_BITS-1:0] width_carry_reg [N_STAGES-2:0]; +logic [DIM_BITS-1:0] width_inner_reg [N_STAGES-2:0]; +logic [DIM_BITS-1:0] width_inner_carry_reg [N_STAGES-2:0]; + +logic [DIM_BITS-1:0] height_reg; +logic [DIM_BITS-1:0] height_carry_reg; +logic [DIM_BITS-1:0] height_inner_reg; +logic [DIM_BITS-1:0] height_inner_carry_reg; + +logic [DIM_BITS-1:0] width_stride_reg; +logic [DIM_BITS-1:0] width_stride_carry_reg; +int next_stride; + +always_comb +begin + /** CHANNELS (0) **/ + channel_carry = 0; + if ((channel_reg[N_STAGES-1] + i_channel_step) < i_channel_dim) begin + channel = channel_reg[N_STAGES-1] + i_channel_step; + end + else begin + channel = channel_reg[N_STAGES-1] + i_channel_step - i_channel_dim; + channel_carry = 1; + end + + /** WIDTH (1) **/ + width_carry = 0; + if ((width_reg[N_STAGES-2] + i_width_step + channel_carry_reg[N_STAGES-1] ) < i_width_dim) begin + width = width_reg[N_STAGES-2] + i_width_step + channel_carry_reg[N_STAGES-1]; + end + else begin + width = width_reg[N_STAGES-2] + i_width_step + channel_carry_reg[N_STAGES-1] - i_width_dim; + width_carry = 1; + end + + /** INNER WIDTH STRIDE (2) **/ // Move down a stage.... + width_inner_carry = 0; + if (width_carry_reg[N_STAGES-2] & i_width_overhang != 0 & ~i_continue_count_cond) begin + if (i_pad_w + i_width_inner_step + channel_carry_reg[N_STAGES-2] - (i_width_stride - width_inner_reg[N_STAGES-3] - i_overhang_end_w) < 0) begin + width_inner = i_pad_w; + end + else if (i_pad_w + i_width_inner_step + channel_carry_reg[N_STAGES-2] - (i_width_stride - width_inner_reg[N_STAGES-3] - i_overhang_end_w) < i_width_stride) begin + width_inner = i_pad_w + i_width_inner_step + channel_carry_reg[N_STAGES-2] - (i_width_stride - width_inner_reg[N_STAGES-3] - i_overhang_end_w); + width_inner_carry = 1; + end + else begin + width_inner = i_pad_w + i_width_inner_step + channel_carry_reg[N_STAGES-2] - (i_width_stride - width_inner_reg[N_STAGES-3] - i_overhang_end_w); + width_inner_carry = 2; + end + end + else if ((width_inner_reg[N_STAGES-3] + i_width_inner_step + channel_carry_reg[N_STAGES-2]) < i_width_stride) begin + width_inner = width_inner_reg[N_STAGES-3] + i_width_inner_step + channel_carry_reg[N_STAGES-2]; + end + else begin + width_inner = width_inner_reg[N_STAGES-3] + channel_carry_reg[N_STAGES-2] + i_width_inner_step - i_width_stride; + width_inner_carry = 1; + end + + /** WIDTH STRIDE (3) **/ + if (width_carry_reg[N_STAGES-3] & i_width_overhang != 0 & i_continue_count_cond) begin + next_stride = width_inner_carry_reg[N_STAGES-3] + i_width_stride_step + 1 - (i_w_nstrides - o_width_stride); + if (next_stride < i_w_nstrides) begin + width_stride = next_stride; + end + else begin + width_stride = o_width_stride + width_inner_carry_reg[N_STAGES-3] - i_w_nstrides; + end + end + else if ((o_width_stride + i_width_stride_step + width_inner_carry_reg[N_STAGES-3]) < i_w_nstrides) begin + width_stride = o_width_stride + i_width_stride_step + width_inner_carry_reg[N_STAGES-3]; + end + else begin + width_stride = o_width_stride + width_inner_carry_reg[N_STAGES-3] + i_width_stride_step - i_w_nstrides; + end + + /** HEIGHT (2) **/ + height_carry = 0; + if ((height_reg + i_height_step + width_carry_reg[N_STAGES-2]) < i_height_dim) begin + height = height_reg + i_height_step + width_carry_reg[N_STAGES-2]; + end + else begin + height = height_reg + i_height_step + width_carry_reg[N_STAGES-2] - i_height_dim; + height_carry = 1; + end + + + /** INNER HEIGHT STRIDE (2) **/ + + height_inner_carry = 0; + if ((height_inner_reg + i_height_inner_step + width_carry_reg[N_STAGES-2]) < i_height_stride) begin + height_inner = height_inner_reg + i_height_inner_step + width_carry_reg[N_STAGES-2]; + end + else begin + height_inner = height_inner_reg + i_height_inner_step + width_carry_reg[N_STAGES-2] - i_height_stride; + height_inner_carry = 1; + end + + /** HEIGHT STRIDE (3) **/ + if ((o_height_stride + i_height_stride_step + height_inner_carry_reg) < i_h_nstrides) begin + height_stride = o_height_stride + i_height_stride_step + height_inner_carry_reg; + end + else begin + height_stride = o_height_stride + i_height_stride_step + height_inner_carry_reg - i_h_nstrides; + end + + /** DEPTH (3) **/ + if (DEPTH_TENSOR) begin + depth = o_depth + i_depth_step + height_carry_reg; // Shouldn't overflow - then we've reached the end. + end + else begin + depth = 0; + end +end + +always_ff @( posedge clk ) begin + if (i_increment) begin + if (~stage_cnt[N_STAGES-1]) stage_cnt <= (stage_cnt << 1) | 1; + // 0 + channel_reg[N_STAGES-1] <= channel; + channel_reg[N_STAGES-2] <= channel_reg[N_STAGES-1]; + channel_reg[N_STAGES-3] <= channel_reg[N_STAGES-2]; + channel_carry_reg[N_STAGES-1] <= channel_carry; + channel_carry_reg[N_STAGES-2] <= channel_carry_reg[N_STAGES-1]; + channel_carry_reg[N_STAGES-3] <= channel_carry_reg[N_STAGES-2]; + + // 1 + if (stage_cnt[0]) begin + width_reg[N_STAGES-2] <= width; + width_reg[N_STAGES-3] <= width_reg[N_STAGES-2]; + + width_carry_reg[N_STAGES-2] <= width_carry; + width_carry_reg[N_STAGES-3] <= width_carry_reg[N_STAGES-2]; + end + + // 2 + width_inner_reg[N_STAGES-3] <= i_width_overhang; + height_inner_reg <= i_height_overhang; + if (stage_cnt[1]) begin + width_inner_carry_reg[N_STAGES-3] <= width_inner_carry; + width_inner_reg[N_STAGES-3] <= width_inner; + + height_reg <= height; + height_carry_reg <= height_carry; + + height_inner_reg <= height_inner; + height_inner_carry_reg <= height_inner_carry; + end + + // preload these values which contain padding information. + o_height_inner <= height_inner_reg; + o_width_inner <= width_inner_reg[0]; + // 3 + if (stage_cnt[2]) begin + o_channel <= channel_reg[0]; + o_width <= width_reg[0]; + o_height <= height_reg; + o_depth <= depth; + + o_height_stride <= height_stride; + o_width_stride <= width_stride; + end + end + else begin + o_channel <= o_channel; + o_width <= o_width; + o_height <= o_height; + o_depth <= o_depth; + o_height_inner <= o_height_inner; + o_width_inner <= o_width_inner; + o_height_stride <= o_height_stride; + o_width_stride <= o_width_stride; + end + + if (~i_resetn) begin + o_channel <= '0; + o_width <= '0; + o_height <= '0; + o_depth <= '0; + o_height_inner <= '0; + o_width_inner <= '0; + o_height_stride <= '0; + o_width_stride <= '0; + stage_cnt <= '0; + height_reg <= '0; + height_carry_reg <= '0; + height_inner_reg <= '0; + height_inner_carry_reg <= '0; + + width_stride_reg <= '{default: '0}; + width_stride_carry_reg <= '{default: '0}; + channel_reg <= '{default: '0}; + channel_carry_reg <= '{default: '0}; + width_reg <= '{default: '0}; + width_carry_reg <= '{default: '0}; + width_inner_reg <= '{default: '0}; + width_inner_carry_reg <= '{default: '0}; + end +end + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_output_streamer.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_output_streamer.sv new file mode 100644 index 0000000..90b7fb8 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_output_streamer.sv @@ -0,0 +1,432 @@ +// Copyright 2020-2024 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +// Description of functionality: +// This module is responsible for receiving DLA data from the cross bar (essentially coming from PE array) +// in HWC format and dispatches it to an AXI stream interface +// This module is fed by width adapter that converts between xbar_k_vec and the AXI bus width (specified at the arch file +// through the output_stream_interface:bus_width) +// Once data is converted to the correct interface width, it gets stored in a dual-clock FIFO which acts +// as a clock crosser between the clk_dla and the clk_axi. It also acts as a conversion from the simple +// ready-valid protocol in DLA to an AXI stream protocol (most of the signals won't be used) +// Some control logic is used to specify which bytes are valid (through the tstrb signal), which will be used +// when the number of output channels is not a multiple of k_vec. For example, if k_vec = c_vec = 8, +// output_channels (O_C) = 12, we will have two transfers of size 8, the first transfer will have 8 valid outputs, +// but the second transfer will have 4 valid outputs and 4 unvalid outputs (zeros), so we use the t_strb to indicate +// which bytes (essentially which FP16 elements) are valid, and it's expected to be consumed by the downstream blocks +// (receiver of the AXI signals) + +`resetall +`undefineall +`default_nettype none +`include "dla_acl_parameter_assert.svh" + +module dla_output_streamer import dla_common_pkg::*, dla_output_streamer_pkg::*; #( + // DLA (input data) side parameters + parameter int CONFIG_WIDTH = 32, + // AXI side parameters + parameter int TDATA_WIDTH = 128, // an integer number of bits (typically a power of 2 from 8 - 1024) + parameter int TID_WIDTH = 8, // recommended to be no more than 8. + parameter int TDEST_WIDTH = 8, // recommended to be no more than 8. + + // Data DC FIFO Depth + parameter int FIFO_DEPTH = 1024, + + + parameter int INPUT_WIDTH_ELEMENTS = 1, + parameter int INPUT_ELEMENT_WIDTH = 1, + + // Decide if Width adaptaion resides before or after the data CDC FIFO + localparam int INPUT_DATA_BITS = INPUT_WIDTH_ELEMENTS * INPUT_ELEMENT_WIDTH, + localparam int OUTPUT_WIDTH_ELEMENTS = TDATA_WIDTH / INPUT_ELEMENT_WIDTH, + localparam int WA_BEFORE_CDC = INPUT_WIDTH_ELEMENTS < OUTPUT_WIDTH_ELEMENTS, + + // DLA (input data) side derived parameters + + // AXI side derived parameters + localparam int TSTRB_WIDTH = TDATA_WIDTH / 8, + localparam int TUSER_WIDTH = TDATA_WIDTH / 8 +) ( + // Master/driver (DLA) signals + input wire clk_dla, + input wire i_aresetn, + + // config input for output streaming + input wire [CONFIG_WIDTH-1:0] i_config_data, + input wire i_config_valid, + output logic o_config_ready, + + // input data + output logic o_ready, // backpressure to xbar + input wire i_valid, // valid from xbar + input wire [INPUT_DATA_BITS-1:0] i_data, // data from xbar after width adaptation + input wire i_data_done, // data from xbar sent was the last one (the actual last data comes after WA) + output logic o_last_data_received, // got the last data + + // config input for flush handling + input wire [CONFIG_WIDTH-1:0] i_config_flush_data, + input wire i_config_flush_valid, + output logic o_config_flush_ready, + + // input signals for flush generation + output wire o_input_done, // xbar input for a layer is done and received + + // Receiver (AXI) signals + input wire clk_axi, + input wire i_axi_aresetn, + output logic o_axi_t_valid, // indicates the Transmitter is driving a valid transfer + input wire i_axi_t_ready, // indicates that a Receiver can accept a transfer. + output wire o_axi_t_last, // Unused - indicates the boundary of a packet + output wire [TDATA_WIDTH-1:0] o_axi_t_data, // the primary payload used to provide the data that is passing across the interface + output wire [TSTRB_WIDTH-1:0] o_axi_t_strb, // the byte qualifier that indicates whether the content of the associated byte of TDATA is valid + output wire [TSTRB_WIDTH-1:0] o_axi_t_keep, // Unused + output wire [TID_WIDTH-1:0] o_axi_t_id, // Unused - data stream identifier + output wire [TDEST_WIDTH-1:0] o_axi_t_dest, // Unused - provides routing information for the data stream + output wire [TUSER_WIDTH-1:0] o_axi_t_user, // Unused - user-defined sideband information that can be transmitted along the data stream. + output wire o_axi_t_wakeup // Unused - identifies any activity associated with AXI-Stream interface +); + //reset parameterization + localparam int RESET_USE_SYNCHRONIZER = 1; + localparam int RESET_PIPE_DEPTH = 3; + localparam int RESET_NUM_COPIES = 1; + + ////////////////////////////////////////// + // Reset Synchronization onto DLA clk // + ///////////////////////////////////////// + + logic [RESET_NUM_COPIES-1:0] sync_dla_resetn; + + dla_reset_handler_simple #( + .USE_SYNCHRONIZER (RESET_USE_SYNCHRONIZER), + .PIPE_DEPTH (RESET_PIPE_DEPTH), + .NUM_COPIES (RESET_NUM_COPIES) + ) dla_resetn_synchronizer ( + .clk (clk_dla), + .i_resetn (i_aresetn), + .o_sclrn (sync_dla_resetn) + ); + + ////////////////////////////////////////// + // Reset Synchronization onto AXI clk // + ///////////////////////////////////////// + + logic [RESET_NUM_COPIES-1:0] sync_axi_resetn; + + dla_reset_handler_simple #( + .USE_SYNCHRONIZER (RESET_USE_SYNCHRONIZER), + .PIPE_DEPTH (RESET_PIPE_DEPTH), + .NUM_COPIES (RESET_NUM_COPIES) + ) axi_resetn_synchronizer ( + .clk (clk_axi), + .i_resetn (i_aresetn), + .o_sclrn (sync_axi_resetn) + ); + + // last data + logic received_last_data; + logic xbar_sent_last_data; + always_ff @ (posedge clk_dla) begin + received_last_data <= 1'b0; + if (i_data_done) begin + xbar_sent_last_data <= 1'b1; + end + if (xbar_sent_last_data & i_valid & o_ready) begin + received_last_data <= 1'b1; + xbar_sent_last_data <= 1'b0; + end + if (~sync_dla_resetn) begin + received_last_data <= 1'b0; + xbar_sent_last_data <= 1'b0; + end + end + assign o_last_data_received = received_last_data; + + logic w_flush; + // Instaniate the flush generation block + dla_output_streamer_flush_handler # ( + .CONFIG_WIDTH(CONFIG_WIDTH) + ) flush_generator ( + .clk_dla(clk_dla), + .i_aresetn(sync_dla_resetn[0]), + .i_config_data(i_config_flush_data), + .i_config_valid(i_config_flush_valid), + .o_config_ready(o_config_flush_ready), + .i_ready(o_ready), + .i_valid(i_valid), + .o_flush(w_flush), + .o_input_done(o_input_done) + ); + + // Handle Config data and strb generation + // Writing side dla_clk + logic config_is_loaded; + logic cfg_rd_empty, cfg_rd_ack, cfg_rd_amost_empty, cfg_wr_almost_full; + logic [CONFIG_WIDTH-1:0] cfg_rd_data; + dla_acl_dcfifo #( + .DEPTH (32), + .WIDTH (CONFIG_WIDTH), + .ALMOST_FULL_CUTOFF (2) + ) dla_acl_fifo_inst_cfg ( + .async_resetn (i_aresetn), // dcfifo will synchronize the reset internally + .wr_clock (clk_dla), + .wr_req (i_config_valid), + .wr_data (i_config_data), + .wr_almost_full (cfg_wr_almost_full), // early indication to upstream that soon fifo may no longer be able to accept data, threshold controlled by ALMOST_FULL_CUTOFF + .wr_full (), // inform upstream that we cannot accept data + + .rd_clock (clk_axi), + .rd_empty (cfg_rd_empty), // advertise to downstream that fifo is empty, a read only occurs when ~rd_empty & rd_ack + .rd_ack (~config_is_loaded), // read acknowledge from downstream, ignored when fifo is empty -- this is like an active low backpressure from downstream + .rd_data (cfg_rd_data), + .rd_almost_empty (cfg_rd_amost_empty) // early indication to downstream that soon fifo may no longer be able to supply data, threshold controlled by ALMOST_EMPTY_CUTOFF + ); + + assign o_config_ready = ~cfg_wr_almost_full; + + // Reading side AXI clock + logic [CONFIG_WIDTH-1:0] config_offset; + output_streamer_config_t cfg; + localparam int NUM_CONFIG_OFFSETS = divCeil($bits(cfg), CONFIG_WIDTH); + + // For now, ensure size of config is exact multiple of CONFIG_WIDTH + `DLA_ACL_PARAMETER_ASSERT($bits(cfg) == NUM_CONFIG_OFFSETS * CONFIG_WIDTH); + + logic [CONFIG_WIDTH-1:0] config_total_transfers; // total number of axi_data transfers for a layer + logic [CONFIG_WIDTH-1:0] config_total_transfers_adjusted; // total number of axi_data transfers for a layer miuns any invalid last transactions + logic [CONFIG_WIDTH-1:0] config_transfers_per_hw_pixel; // Decides the total number of transfers needed to send a full set of output channels for a single piexel + // for a single width/height pixel given a specific data_width for the axi interface. + logic [CONFIG_WIDTH-1:0] config_valid_bytes_stream_width; // Determines how many elements of the last transfer are valid. + logic [CONFIG_WIDTH-1:0] config_last_index; // Determines index of last valid transaction per height/width. + logic [CONFIG_WIDTH-1:0] config_last_stream; // Determines if this stream is the last stream to geenrate tlast + logic [CONFIG_WIDTH-1:0] channel_chunks_counter; // Counter for the config_transfers_per_hw_pixel + logic [CONFIG_WIDTH-1:0] total_counter_out; + logic ostreamer_downstream_ready; + + assign config_total_transfers = cfg.total_transfers; + assign config_total_transfers_adjusted = cfg.total_transfers_adjusted; + assign config_transfers_per_hw_pixel = cfg.transfers_per_hw_pixel; + assign config_valid_bytes_stream_width = cfg.valid_bytes_stream_width; + assign config_last_index = cfg.last_index; + assign config_last_stream = cfg.last_stream; + logic output_valid; + logic output_tx_received; + always_ff @(posedge clk_axi) begin + // config state machine + if (~config_is_loaded & ~cfg_rd_empty) begin + // update progress in accepting NUM_CONFIG_OFFSETS transactions + if (config_offset == NUM_CONFIG_OFFSETS-1) begin + config_offset <= '0; + config_is_loaded <= 1'b1; + end + else begin + config_offset <= config_offset + 1'b1; + end + cfg <= (cfg_rd_data[CONFIG_WIDTH-1:0] << ($bits(cfg) - CONFIG_WIDTH)) | (cfg >> CONFIG_WIDTH); + end else begin + // keep track of how many transactions are read by AXI to drive t_strb + if (config_is_loaded & output_tx_received) begin + total_counter_out <= total_counter_out + 1; + if (total_counter_out == (config_total_transfers - 1)) begin + config_is_loaded <= 1'b0; + total_counter_out <= '0; + end + channel_chunks_counter <= channel_chunks_counter + 1; // increment counter + if (channel_chunks_counter == (config_transfers_per_hw_pixel - 1)) begin + channel_chunks_counter <= '0; // + end + end + end + // resetn + if (~sync_axi_resetn[0]) begin + config_is_loaded <= 1'b0; + channel_chunks_counter <= '0; + total_counter_out <= '0; + config_offset <= '0; + end + end + + logic [TDATA_WIDTH-1:0] ostreamer_output_data; + localparam int FIFO_CUTOFF = 0; // No need for slack cycles as the full goes back and gets handled in the same cycle in the width adapter + + if (!WA_BEFORE_CDC) begin : GEN_WA_AFTER_DC_FIFO + // In this situation we want the width adaptation to happen in the slow clock domain + // so that the upstream IP can continue producing data that goes straight into the fifo + localparam int XBAR_WIDTH_BITS = INPUT_WIDTH_ELEMENTS * INPUT_ELEMENT_WIDTH; + logic [XBAR_WIDTH_BITS-1:0] fifo_data; + logic fifo_rd_empty, fifo_downstream_ready; + logic wr_full; + + dla_acl_dcfifo #( + .DEPTH (FIFO_DEPTH), + .WIDTH (XBAR_WIDTH_BITS), + .ALMOST_FULL_CUTOFF (FIFO_CUTOFF) + ) dla_acl_fifo_inst ( + .async_resetn (i_aresetn), // dcfifo will synchronize the reset internally + .wr_clock (clk_dla), + .wr_req (i_valid && o_ready), + .wr_data (i_data), + .wr_full (wr_full), // inform upstream that we cannot accept data + + .rd_clock (clk_axi), + .rd_empty (fifo_rd_empty), // advertise to downstream that fifo is empty, a read only occurs when ~rd_empty & rd_ack + .rd_ack (fifo_downstream_ready), // read acknowledge from downstream, ignored when fifo is empty -- this is like an active low backpressure from downstream + .rd_data (fifo_data) + ); + + logic adapted_valid; + // Instantiate a width adapter to convert from xbar_k_vec width to AXI width + dla_width_adapter #( + .GROUP_NUM ( 1 ), // hardcoded + .GROUP_DELAY ( 0 ), + .INPUT_DATA_WIDTH_IN_ELEMENTS ( INPUT_WIDTH_ELEMENTS ), + .OUTPUT_DATA_WIDTH_IN_ELEMENTS ( OUTPUT_WIDTH_ELEMENTS), + .ELEMENT_WIDTH ( INPUT_ELEMENT_WIDTH ), + .FLUSH_ENABLE ( 0 ) + ) wa_output_stream_inst ( + .clock ( clk_axi ), + .i_aresetn ( i_aresetn ), + .i_flush ( 1'b0 ), + .o_din_ready ( fifo_downstream_ready ), + .i_din_valid ( ~fifo_rd_empty ), + .i_din_data ( fifo_data ), + .i_dout_ready ( ostreamer_downstream_ready ), // to be received from output streamer + .o_dout_valid ( adapted_valid ), + .o_dout_data ( ostreamer_output_data ) + ); + assign output_tx_received = adapted_valid & ostreamer_downstream_ready; + assign output_valid = adapted_valid; + // We backpressure the upstream if the fifo is full, or if we want to flush (empty) the exit fifo + // out of any leftover invalid transactions that might come out of cvec != axi + assign o_ready = ~wr_full; + + end else begin: GEN_WA_BEFORE_DC_FIFO + logic adapted_valid; + logic [TDATA_WIDTH-1:0] adapted_data; + logic wr_full; // dc fifo for data after width adaptation + + // Instantiate a width adapter to convert from xbar_k_vec width to AXI width + dla_width_adapter #( + .GROUP_NUM ( 1 ), // hardcoded + .GROUP_DELAY ( 0 ), + .INPUT_DATA_WIDTH_IN_ELEMENTS ( INPUT_WIDTH_ELEMENTS ), + .OUTPUT_DATA_WIDTH_IN_ELEMENTS ( OUTPUT_WIDTH_ELEMENTS ), + .ELEMENT_WIDTH ( INPUT_ELEMENT_WIDTH ), + .FLUSH_ENABLE ( 1 ) + ) wa_output_stream_inst ( + .clock ( clk_dla ), + .i_aresetn ( i_aresetn ), + .i_flush ( w_flush ), // flush only activated with an incoming valid transaction + .o_din_ready ( o_ready ), + .i_din_valid ( i_valid ), + .i_din_data ( i_data ), + .i_dout_ready ( ~wr_full ), // to be received from output streamer + .o_dout_valid ( adapted_valid ), + .o_dout_data ( adapted_data ) + ); + + logic rd_empty; + // Instantiate the output FIFO to perform clock domain crossing + dla_acl_dcfifo #( + .DEPTH (FIFO_DEPTH), + .WIDTH (TDATA_WIDTH), + .ALMOST_FULL_CUTOFF (FIFO_CUTOFF) + ) dla_acl_fifo_inst ( + .async_resetn (i_aresetn), // dcfifo will synchronize the reset internally + .wr_clock (clk_dla), + .wr_req (adapted_valid && !wr_full), + .wr_data (adapted_data), + .wr_almost_full (), // early indication to upstream that soon fifo may no longer be able to accept data, threshold controlled by ALMOST_FULL_CUTOFF + .wr_full (wr_full), // inform upstream that we cannot accept data + + .rd_clock (clk_axi), + .rd_empty (rd_empty), // advertise to downstream that fifo is empty, a read only occurs when ~rd_empty & rd_ack + .rd_ack (ostreamer_downstream_ready), // read acknowledge from downstream, ignored when fifo is empty -- this is like an active low backpressure from downstream + .rd_data (ostreamer_output_data) + ); + assign output_tx_received = ~rd_empty & ostreamer_downstream_ready; + assign output_valid = ~rd_empty; + end + + // Convert FIFO interface to AXI signals + logic flush_exit_fifo; // signal used to flush the fifo out of any leftover invalid transactions + logic [TSTRB_WIDTH-1:0] strb_signal_normal, strb_signal_last; + + assign o_axi_t_valid = output_valid & config_is_loaded & ((o_axi_t_strb != '0)) & ~flush_exit_fifo; + assign ostreamer_downstream_ready = (i_axi_t_ready & config_is_loaded) || (flush_exit_fifo); + assign o_axi_t_data = ostreamer_output_data; + assign o_axi_t_last = (total_counter_out == (config_total_transfers_adjusted - 1)) & + output_valid & config_is_loaded & ostreamer_downstream_ready & config_last_stream; + + + // Control logic to produce the o_axi_t_strb signal + assign strb_signal_normal = '1; + assign strb_signal_last = ((1 << config_valid_bytes_stream_width) - 1); + assign o_axi_t_strb = flush_exit_fifo ? '0 : + channel_chunks_counter > config_last_index ? '0 : + channel_chunks_counter == config_last_index ? strb_signal_last : + strb_signal_normal; + // + // state machine to decide if output streamer is producing output from the exit fifo + // or flushing (emptying) the exit fifo + // we need the ability to flush the exit fifo in some situations where part of the last transactions from the xbar + // do not carry actual data (all zeros). In these situations, we need the tlast to come out with the + // actual last valid transaction with valid data, and these invalid transactions to be removed from the exit fifo + // + // for example, if cvec=32 elements, axi=8 elements (128 bits), and channels=6, each cvec produces 4 axi transactions + // In the last cvec transaction (4 axi transactions), we would have the first with valid data + // and the remaining three with zeros + // Up until 2024.3 release, we would produce tlast at the last axi transaction (#4), but this is + // not efficient since the last valid transaction happens three transactions earlier, TX number 1 + // out of the last 4 transactions. With the state machine, we produce tlast at the first transaction + // of the last four alongside the tlast. Finally we enter a flush state and flush the exit fifo + // to empty it out of these last three invalid transactions + // + typedef enum logic { + ACTIVE = 1'b0, + FLUSH = 1'b1 + } state_t; + state_t state, state_next; + + always_ff @(posedge clk_axi) begin + if (~sync_axi_resetn[0]) begin + state <= ACTIVE; + end else begin + state <= state_next; + end + end + logic no_exit_fifo_flush_needed; + + assign no_exit_fifo_flush_needed = config_is_loaded && (config_total_transfers == config_total_transfers_adjusted); + always_comb begin + state_next = state; + flush_exit_fifo = 0; + case(state) + ACTIVE: begin + flush_exit_fifo = 0; + if (no_exit_fifo_flush_needed) begin + state_next = ACTIVE; + end else if ((total_counter_out == config_total_transfers_adjusted - 1) && config_is_loaded) begin + state_next = FLUSH; + end + end + FLUSH: begin + flush_exit_fifo = 1; + if ((total_counter_out == config_total_transfers - 1) && config_is_loaded) begin + state_next = ACTIVE; + end + end + default: state_next = ACTIVE; // Default state + endcase + end + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_output_streamer_config.svh b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_output_streamer_config.svh new file mode 100644 index 0000000..d21048a --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_output_streamer_config.svh @@ -0,0 +1,30 @@ +// Copyright 2024 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +/* + This is the shared datatype between C++ compiler config generation and output streamer RTL +*/ +typedef struct packed { + uint32_t valid_bytes_stream_width; // number of valid bytes for last transfer of one HW pixel, used to drive the tstrb signal + uint16_t transfers_per_hw_pixel; // total number of AXI transfers for one pixel in HW (all output channels of one pixel) + uint32_t total_transfers; // total number of AXI transfers for a layer given the AXI data width + uint32_t total_transfers_adjusted; // total number of AXI transfers for a layer minus the last invalid transactions if any + uint8_t last_index; // index of transaction within a single HW pixel where some valid and invalid elements exist + uint8_t last_stream; // bool to determine if this is the last stream to generate the tlast signal (mainly for multi-output support) +} output_streamer_config_t; + +typedef struct packed { + uint32_t total_transfers; // total number of input transactions from xbar to output streamer width adapter + uint32_t transfers_per_hw_pixel; // total number of xbar transfers for one pixel in HW (all output channels of one pixel) + uint32_t flush_index; // index of the last transaction at a given pixel, where we need to flush the width adapter and move to next pixel +} output_streamer_flush_config_t; diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_output_streamer_flush_handler.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_output_streamer_flush_handler.sv new file mode 100644 index 0000000..59385a1 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_output_streamer_flush_handler.sv @@ -0,0 +1,112 @@ +// Copyright 2020-2024 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +// Description of functionality: +// This module is responsible for generating a flush signal to read the stored data in the registers of the width adapter +// in cases where kvec and axi widths don't match, we need to flush the width adapter. For example, if kvec=xbar_kvec = 8 elements +// and axi is 16 elemets, finally assume each pixel has 24 channels, this means to finish a pixel, we receive 3 kvec transactions from +// DLA, but the width adapter will be programmed to combine each two kvec tx into one axi tx (8+8->16), which means we will be waiting for +// a fourth tx that will never come, so what we do is that we flush that third transaction from the width adapter, and padd it with zeros +// and the output streamer will produece correct strb signal + +`resetall +`undefineall +`default_nettype none +`include "dla_acl_parameter_assert.svh" + +module dla_output_streamer_flush_handler import dla_common_pkg::*, dla_output_streamer_pkg::*; #( + // DLA (input data) side parameters + parameter int CONFIG_WIDTH = 32 +) ( + // Master/driver (DLA) signals + input wire clk_dla, + input wire i_aresetn, + + // config input + input wire [CONFIG_WIDTH-1:0] i_config_data, + input wire i_config_valid, + output logic o_config_ready, + + input wire i_ready, // ready from output streamer width adapter + input wire i_valid, // valid from xbar + + output wire o_input_done, // xbar input for a layer is done and received + output wire o_flush +); + +// Handle Config data + logic config_is_loaded; + logic [CONFIG_WIDTH-1:0] config_offset; + logic [CONFIG_WIDTH-1:0] flush_counter; + logic [CONFIG_WIDTH-1:0] transactions_counter; + output_streamer_flush_config_t cfg; + + logic done; + assign o_input_done = done; + + localparam int NUM_CONFIG_OFFSETS = divCeil($bits(cfg), CONFIG_WIDTH); + + // For now, ensure size of config is exact multiple of CONFIG_WIDTH + `DLA_ACL_PARAMETER_ASSERT($bits(cfg) == NUM_CONFIG_OFFSETS * CONFIG_WIDTH); + + logic [CONFIG_WIDTH-1:0] config_flush_index; // Determines index of last valid transaction to generate flush. + logic [CONFIG_WIDTH-1:0] config_total_transfers; // Determines total number of transactions. + logic flush_active; + + assign config_flush_index = cfg.flush_index; + assign config_total_transfers = cfg.total_transfers; + assign o_config_ready = ~config_is_loaded; + assign flush_active = (config_flush_index != 32'hffffffff); + assign o_flush = flush_active & (flush_counter == (config_flush_index)); + + always_ff @(posedge clk_dla) begin + // config state machine + done <= 1'b0; + if (o_config_ready & i_config_valid) begin + // update progress in accepting NUM_CONFIG_OFFSETS transactions + if (config_offset == NUM_CONFIG_OFFSETS-1) begin + config_offset <= '0; + config_is_loaded <= 1'b1; + end + else begin + config_offset <= config_offset + 1'b1; + end + cfg <= (i_config_data[CONFIG_WIDTH-1:0] << ($bits(cfg) - CONFIG_WIDTH)) | (cfg >> CONFIG_WIDTH); + end else begin + // keep track of how many input transactions are read by output streamer width adapter + if (i_ready & i_valid) begin + transactions_counter <= transactions_counter + 1; + if (transactions_counter == config_total_transfers-1) begin + config_is_loaded <= 1'b0; + transactions_counter <= '0; + done <= 1'b1; + end + if (flush_active) begin + flush_counter <= flush_counter + 1; + if (flush_counter == (config_flush_index)) begin + flush_counter <= '0; + end + end + end + end + // resetn + if (~i_aresetn) begin + config_is_loaded <= 1'b0; + flush_counter <= '0; + transactions_counter <= '0; + config_offset <= '0; + done <= 1'b0; + end + end + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_output_streamer_pkg.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_output_streamer_pkg.sv new file mode 100644 index 0000000..ed0d64f --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_output_streamer_pkg.sv @@ -0,0 +1,41 @@ +// Copyright 2024 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +// This package keeps all of the arch parameters related to the output streamer +// For now it only includes the config struct + +`resetall +`undefineall +package dla_output_streamer_pkg; + import dla_common_pkg::*; + `include "dla_output_streamer_config.svh" + typedef struct { + int TDATA_WIDTH; // AXI data width + int CONFIG_WIDTH; // typically 32 + int C_VECTOR; // architecture c vector + int FIFO_DEPTH; // depth of the dc data fifo + device_family_t DEVICE; // device + } output_streamer_arch_t; + + virtual class data_t #(int DATA_WIDTH); + // Define a packed struct for a single data element with the specified width + typedef struct packed { + logic [DATA_WIDTH-1:0] d; + } t; + endclass + + virtual class output_streamer_out_data_t #(int WIDTH); + typedef data_t#( + .DATA_WIDTH(WIDTH))::t t; + endclass +endpackage diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_pe.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_pe.sv new file mode 100644 index 0000000..f5fcfd4 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_pe.sv @@ -0,0 +1,138 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +T6jsiKR8lzOi4YJ04KHv619OOBhVCtXEcku8PQ/3vQHpKjsFrsiEXpBBt0UQSXwm0dXutXWXA+AP +82F836gJEnrzxMtZSwvmjkDn9l9/yg/JS1YUQQEqqgxTeMErG8HUw3FpzhZQ0pQWpkBFG5lz7Cq4 +phFaL1Q5reKhwf9ooZdJ3uwzV3j5gNcM3+0wJpJ6bzaKspOq4F7TmcUUvqyAksfX3Pwp/ba75C9s +RAzAUf5HzXR8QIl08D+lmaf1xP2YzyQIi9nqp4BL1FtgzlcWRT5ofj2hiciYAy0olXd+Ps63r+ke +BOT+3Gp8xreCLwamobywcCVOJzz0GU2vOLSleQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 6640) +`pragma protect data_block ++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 +Io35SVYfCIuiGJ8iQ55iKUIfXEC+iPJ8ypG5HA== +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_pe_array.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_pe_array.sv new file mode 100644 index 0000000..dd88e9a --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_pe_array.sv @@ -0,0 +1,242 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +tEErGSDytGtjON5trsyxIdoikmoEIWCRXoND3+SBXsmgVBQ9ODbnzxDYxYHxOugIoSbmj91I8knM ++Yhf18BUozT26PwpWDnX8BCQ4sBswFB412giBjkh6/1TXYnUNQsz5A0uSC5Z529oGDmCXJqu3V63 +jFaLedE3qtu7uCtJuN+4A80YNzXF3hJXxKql5xUIB3C0uzOZ3fM4xA5ncYatZPzoYThKvTEj9ubB +Xc9cKbprApEk60jDgbchlj2+luXRzM9YfEjkR8y42Pf6n0NGrLmiNKov+rM24am5OhwuJVJKgwfl +Qmaf8mn724pAHa49NKLRkA3WEP50kpKSuYs/UA== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 12544) +`pragma protect data_block +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 +C6kgzQ== +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_pe_array_arch_t.svh b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_pe_array_arch_t.svh new file mode 100644 index 0000000..7fd39cc --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_pe_array_arch_t.svh @@ -0,0 +1,52 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +5UAWa9wAgvLJjVbc7jq4Tqam0B2xIUBt7aLf/7k5r/DJ2dAgCgaoJIBpwkhvIADvaUQw8KDGDRVC +BOargXlwrD/sdX3QYbICVzqywTz285hcbzGnNNu7VAfRyd0qWBuTr898BAXwth6K7PCc07VbSvO9 +qpcy+tGsX13XsMveBexs27vvEAcuwhNIPBCjRkaMAyJCV4IN0t7kE+YBVSF9/XQ7v/BW/DNhEotq +uo0ajnaADO8NZWCQSJlCG0pDEVXGuKUMJPQ9BM9XnJqQN6zsWZnGTaOmlZEZBWgBPsSKrNaUyOtj +Fz4Y3cIRyQAXhRBRxs9bDidEDE+4N4khuggMFw== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 1760) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_pe_array_constants.svh b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_pe_array_constants.svh new file mode 100644 index 0000000..4968f86 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_pe_array_constants.svh @@ -0,0 +1,71 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +uzK/+e4shgSaFY1x/s9+ueqzjaearG+7kV+dtBJ6A1LnGhRmEJpVq1pi1pHP0AfqGrglRBLczVc+ ++7yjxR9oQZD1x08ZKRDEODKwYDgeVITj/2v/qAsDTcy47lCyjBV+WgnYuBNR8MEkH9xvAuiiM6gE +pE+1IG1RdhzRtETF/snnjDfAnAXU/DqNixoqY2BtkDFZCPQjLOf9NTB9Ewf2CLX/ruyDpuHfhXv7 +7I95nDxLY+PlpZa9+MomzdFUAuRhBMd3BnaY3DnGZHLN+fpGStFU6bGCaUOHIaQ2ASObmiJZuTX6 +w/MajmRgxeuD3TN5BxaKT0Wj2xDAksSGP1enxw== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 2816) +`pragma protect data_block +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 +FSs5dgQn2PKL69jQD28q2VVNQXZ0rYU= +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_pe_array_enums.svh b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_pe_array_enums.svh new file mode 100644 index 0000000..b3356d5 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_pe_array_enums.svh @@ -0,0 +1,77 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +lCeMj1xOEPOflPfT5Q2ejIhRQtRaeQSCw6fjsYNWDqMGaOeJ8rMegIwDwFfp1hizg1vwmiXJMI12 +f1ls0PWccRpTNnOVxlnSMX8WxbdoGp0a4+VGunBx58h34C+lPCCeyAZMgAr55DCbKYdzVDIs9aos +vUaz5ksPe77HxT8ib98AzsXji+mnnLwjqCbClK8ooZ4UMlmpnFtYt2AyVbiU8xNxfL9aomILJ29I +Lez1+IFxHMMfeTx6Hwpv1IjVAzAVSemGmRWI702nI6YkzNbQ1TGsDu0Hbd+3kIUm8h13OCOMWcUd +arG8ML1SGqyMqKgUdJg83GQwv0M73P66/dj0vw== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 3168) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_pe_array_if.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_pe_array_if.sv new file mode 100644 index 0000000..7169ce2 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_pe_array_if.sv @@ -0,0 +1,125 @@ +// Copyright 2020-2021 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +`resetall +`undefineall + +`include "dla_common_types.svh" +`include "dla_pe_array_constants.svh" + +interface pe_array_feature_if #( + dla_pe_array_pkg::pe_array_arch_t arch +); + `BLOCK_TYPE(arch.DOT_SIZE, arch.FEATURE_WIDTH, arch.FEATURE_EXPONENT_WIDTH); + block_t [arch.NUM_LANES-1:0][arch.NUM_FEATURES-1:0] data; + modport sender (output data); + modport receiver (input data); +endinterface + +interface pe_array_filter_if #( + dla_pe_array_pkg::pe_array_arch_t arch +); + `BLOCK_TYPE_VALID(arch.DOT_SIZE, arch.FILTER_WIDTH, arch.FILTER_EXPONENT_WIDTH); + block_t [arch.NUM_PES-1:0][arch.NUM_FILTERS-1:0] data; + modport sender (output data); + modport receiver (input data); +endinterface + +interface pe_array_bias_if #( + dla_pe_array_pkg::pe_array_arch_t arch +); + logic [arch.NUM_PES-1:0][arch.NUM_FILTERS-1:0][BIAS_WIDTH-1:0] data; + modport sender (output data); + modport receiver (input data); +endinterface + +interface pe_array_scale_if #( + dla_pe_array_pkg::pe_array_arch_t arch +); + logic [arch.NUM_PES-1:0][arch.NUM_FILTERS-1:0][SCALE_WIDTH-1:0] data; + modport sender (output data); + modport receiver (input data); +endinterface + +interface pe_feature_if #( + dla_pe_array_pkg::pe_array_arch_t arch, + int DIM1 = 1, + int DIM2 = 1 +); + `BLOCK_TYPE(arch.DOT_SIZE, arch.FEATURE_WIDTH, arch.FEATURE_EXPONENT_WIDTH); + block_t [arch.NUM_FEATURES-1:0] data [DIM1][DIM2]; + modport sender(output data); + modport receiver(input data); +endinterface + +interface pe_filter_if #( + dla_pe_array_pkg::pe_array_arch_t arch, + int DIM1 = 1, + int DIM2 = 1 +); + `BLOCK_TYPE_VALID(arch.DOT_SIZE, arch.FILTER_WIDTH, arch.FILTER_EXPONENT_WIDTH); + block_t [arch.NUM_FILTERS-1:0] data [DIM1][DIM2]; + modport sender(output data); + modport receiver(input data); +endinterface + +interface pe_bias_if #( + dla_pe_array_pkg::pe_array_arch_t arch, + int DIM1 = 1, + int DIM2 = 1 +); + logic [arch.NUM_FILTERS-1:0][BIAS_WIDTH-1:0] data [DIM1][DIM2]; + modport sender(output data); + modport receiver(input data); +endinterface + +interface pe_scale_if #( + dla_pe_array_pkg::pe_array_arch_t arch, + int DIM1 = 1, + int DIM2 = 1 +); + logic [arch.NUM_FILTERS-1:0][SCALE_WIDTH-1:0] data [DIM1][DIM2]; + modport sender(output data); + modport receiver(input data); +endinterface + +interface pe_request_if #( + dla_pe_array_pkg::pe_array_arch_t arch, + int DIM1 = 1, + int DIM2 = 1 +); + typedef struct packed { + logic valid; + logic init_accumulator; + logic flush_accumulator; + logic [arch.ELTWISE_MULT_CMD_WIDTH-1:0] eltwise_mult_cmd; + logic [arch.RESULT_ID_WIDTH-1:0] result_id; + } Type; + Type data [DIM1][DIM2]; + modport sender(output data); + modport receiver(input data); +endinterface + +interface pe_result_if #( + dla_pe_array_pkg::pe_array_arch_t arch, + int DIM1 = 1, + int DIM2 = 1 +); + typedef struct packed { + logic valid; + logic [arch.NUM_RESULTS_PER_CYCLE-1:0][arch.NUM_FEATURES-1:0][RESULT_WIDTH-1:0] result; + } Type; + Type data [DIM1][DIM2]; + modport sender(output data); + modport receiver(input data); +endinterface diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_pe_array_pkg.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_pe_array_pkg.sv new file mode 100644 index 0000000..5258a1e --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_pe_array_pkg.sv @@ -0,0 +1,531 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +6Pjw5akaJbc858TCZrTrsavsS1teOic1lGJEG4ZqPWlMsNkgwI1vpJrC4rJblOJfPfJtXt9ZdnY7 +JtLQoJqfI3xPBAWUr/SdiGsDEyk78MzmBG8K8fO19M0qcurGGCjA7WjAF2RaCpGfGBF3tqTVTJPH +REa7QXodfgeWpCTLWDDQ0y2Fn5OiHkqmURE0gzEKTddQTxIbI0Etw6faXYWuataUi89frEBysBlF +qyf9IrQRAnNjAiA1zoRjhxcjgBkQQdvGUeS7+vsfQuiiJekvD29EFcX4v0H3Z9rzSb95u6p3z7LT +enUY07cUfpcOEE0Fek53QPPvepnqXyoRdUlnaw== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 29040) +`pragma protect data_block +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 +6f9SWDWlRTXAIRplO+FiDvJHlwMUn7zRu/cU +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_pe_blockfp_to_accum_input.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_pe_blockfp_to_accum_input.sv new file mode 100644 index 0000000..b96b332 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_pe_blockfp_to_accum_input.sv @@ -0,0 +1,163 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +RseWstWVf8JOMjVaks3y6Tubz5d+vxq5jHDiBzTM6/kf/6LTbESWQeDuakIiFpax145ro5g5LYrt +s9XWfF1v3XY/cFaG6BxQ/IeV4o/JqEb/uyy0plntyjlcZaLH91NH7meRcluIexwWKyygr4XQ7Cya +fV3+XaIrbTBHV4DJhw/hWWUSm/mGTLSzgyGQpw1MY061UMaFYGklVsIol6XoW4ZrJiFtzxS5e/iD +NtKaHhOd6bKuiqNrpNsTpU5riojgrktC9nBZ9nG758T7WGyAc8XgbZvQy05EAHbHa3O+cIhJEG0Z +CZpQt4eWa26dx1/e/2SWsvGxtU6jGx/YsG9VVA== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 8064) +`pragma protect data_block +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 +QSWfZkai0/Wxg8Rxv0sGIHKmLU4XNJlgXR5M +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_pe_drain.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_pe_drain.sv new file mode 100644 index 0000000..b5d7fa7 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_pe_drain.sv @@ -0,0 +1,150 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +uXE3TcYSZfecMcHydXsmPyW6TaWWL3feGcYNKxT/cpYun+2tlA4QsJTKc/wyY3U84W95bTisMuRJ +aBQWlx4tCyxkNof6H9hc1Vvtc7Zaim7pqQz/f9AiRiTx03ybmaRI2P3wWmPF4/OlQQ5zRT4hejAr +mLCxVaZwHB66XSHYOhrfjiOiu2qcMH0e/+kt5DhDhYE3pwVkksVRcQEvQ55FI+35Pw2aKuEMg9Ht +K8DhtmejU9uNSohrxGyfPBPK72/rjL9XJEsYExAQjoRcnYmT0OBNj8U2wFF+TJw8b6P4xkBbaldp +FNT1XnAjblX7xkvSjsFdep1xhJ5nFtulqSnj6w== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 7328) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_platform_reset.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_platform_reset.sv new file mode 100644 index 0000000..1f9e9ef --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_platform_reset.sv @@ -0,0 +1,141 @@ +// Copyright 2020-2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + + + +// This is top level reset module that is responsible for ensuring reset is held for a long time +// on each clock domain. All resets from each clock domain (which typically come from PLL locked, +// DDR calibrated, or an external pin) are combined asynchronously. The idea is that if any reset +// is asserted, everything goes into reset. After including all reset sources, for each clock domain +// this all-inclusive reset is synchronized to that clock domain and then pulse extended (to ensure +// reset is held for a long time). Finally, all the pulse extended resets are combined asynchronously. +// This commonize reset is distributed to all modules within the DLA IP, each module is responsible +// for synchronizing the reset before consumption. + +`resetall +`undefineall +`default_nettype none + +module dla_platform_reset #( + parameter int RESET_HOLD_CLOCK_CYCLES, //how many clock cycles to extend how long reset is held for + parameter int MAX_DLA_INSTANCES, //maximum number of DLA instances defined by the number of CSR and DDR interfaces provided by the BSP + parameter int ENABLE_DDR=1, //whether the DDR resets passed to this instance are valid, resets are ignored when disabled + parameter int ENABLE_AXI=0 //Whether the AXI resets passed to this instance are valid, resets are ignored when disabled +) ( + //clocks + input wire clk_dla, + input wire clk_ddr [MAX_DLA_INSTANCES], //one ddr clock for each ddr bank + input wire clk_pcie, + input wire clk_axis [MAX_DLA_INSTANCES], + + //resets from each clock domain, if you don't have a resetn signal then tie that inport port to 1'b1 + input wire i_resetn_dla, + input wire i_resetn_ddr [MAX_DLA_INSTANCES], //one ddr reset for each ddr bank + input wire i_resetn_pcie, + input wire i_resetn_axis [MAX_DLA_INSTANCES], + + //after combining the resets from all clock domains, this output reset has been held for at RESET_HOLD_CLOCK_CYCLES on each clock domain + //this reset is NOT synchronized to any clock, it is meant for distribution to the DLA IP + //unfortunately inside a PR region one has no access to a global clock line, which would be ideal for distribution + output logic o_resetn_async +); + + //convert unpacked to packed + logic [MAX_DLA_INSTANCES-1:0] resetn_ddr_reindex; + logic [MAX_DLA_INSTANCES-1:0] resetn_axis_reindex; + always_comb begin + for (int i=0; i<MAX_DLA_INSTANCES; i++) begin + resetn_ddr_reindex[i] = i_resetn_ddr[i]; + resetn_axis_reindex[i] = i_resetn_axis[i]; + end + end + + logic resetn_ddr_combined, resetn_axi_combined, resetn_inputs_combined; + logic resetn_pulse_extended_dla, resetn_pulse_extended_pcie; + logic [MAX_DLA_INSTANCES-1:0] resetn_pulse_extended_ddr; + logic [MAX_DLA_INSTANCES-1:0] resetn_pulse_extended_axis; + + assign resetn_inputs_combined = i_resetn_dla & i_resetn_pcie & resetn_ddr_combined & resetn_axi_combined; + + dla_platform_reset_internal #( + .RESET_HOLD_CLOCK_CYCLES (RESET_HOLD_CLOCK_CYCLES) + ) + dla_resetn_inst + ( + .clk (clk_dla), + .i_resetn_combined (resetn_inputs_combined), + .o_resetn_pulse_extended (resetn_pulse_extended_dla) + ); + + if (ENABLE_DDR) begin + assign resetn_ddr_combined = &resetn_ddr_reindex; + + for (genvar g = 0; g < MAX_DLA_INSTANCES; g++) begin : GEN_DDR_RESET + dla_platform_reset_internal #( + .RESET_HOLD_CLOCK_CYCLES (RESET_HOLD_CLOCK_CYCLES) + ) + ddr_resetn_inst + ( + .clk (clk_ddr[g]), + .i_resetn_combined (resetn_inputs_combined), + .o_resetn_pulse_extended (resetn_pulse_extended_ddr[g]) + ); + end + end else begin + assign resetn_ddr_combined = 1'b1; + assign resetn_pulse_extended_ddr = '{default: 1'b1}; + end + + dla_platform_reset_internal #( + .RESET_HOLD_CLOCK_CYCLES (RESET_HOLD_CLOCK_CYCLES) + ) + pcie_resetn_inst + ( + .clk (clk_pcie), + .i_resetn_combined (resetn_inputs_combined), + .o_resetn_pulse_extended (resetn_pulse_extended_pcie) + ); + + if (ENABLE_AXI) begin + assign resetn_axi_combined = &resetn_axis_reindex; + + for (genvar g = 0; g < MAX_DLA_INSTANCES; g++) begin: GEN_AXI_RESET + dla_platform_reset_internal #( + .RESET_HOLD_CLOCK_CYCLES (RESET_HOLD_CLOCK_CYCLES) + ) + axis_resetn_inst + ( + .clk (clk_axis[g]), + .i_resetn_combined (resetn_inputs_combined), + .o_resetn_pulse_extended (resetn_pulse_extended_axis[g]) + ); + end + end else begin + assign resetn_axi_combined = 1'b1; + assign resetn_pulse_extended_axis = '{default: 1'b1}; + end + + dla_cdc_reset_async recombine_resets + ( + .clk (clk_pcie), + .i_async_resetn ( + resetn_pulse_extended_dla & + (&resetn_pulse_extended_ddr) & + resetn_pulse_extended_pcie & + (&resetn_pulse_extended_axis) + ), + + .o_async_resetn (o_resetn_async) + ); + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_platform_reset_internal.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_platform_reset_internal.sv new file mode 100644 index 0000000..d3f686a --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_platform_reset_internal.sv @@ -0,0 +1,75 @@ +// Copyright 2020-2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + + + +// This is a helper module within dla_platform_reset. For each clock domain, this module synchronizes and +// then pulse extends the reset. + +`resetall +`undefineall +`default_nettype none + +module dla_platform_reset_internal #( + parameter int RESET_HOLD_CLOCK_CYCLES //how many clock cycles to extend how long reset is held for +) ( + input wire clk, + input wire i_resetn_combined, + output logic o_resetn_pulse_extended +); + + //all registers in this module enter reset asynchronously but exit reset synchronously + + + //synchronize the reset + logic aclrn; + + dla_acl_reset_handler + #( + .ASYNC_RESET (1), + .SYNCHRONIZE_ACLRN (1), + .USE_SYNCHRONIZER (1), + .PULSE_EXTENSION (0), + .PIPE_DEPTH (0), + .NUM_COPIES (1) + ) + dla_acl_reset_handler_inst + ( + .clk (clk), + .i_resetn (i_resetn_combined), + .o_aclrn (aclrn), + .o_resetn_synchronized (), + .o_sclrn () + ); + + + //pulse extend + localparam int COUNTER_WIDTH = $clog2(RESET_HOLD_CLOCK_CYCLES) + 1; + logic [COUNTER_WIDTH-1:0] counter; + logic dla_ip_sdc_false_path_from_this_resetn; //don't change this name, used for SDC wildcard naming + + always_ff @(posedge clk or negedge aclrn) begin + if (~aclrn) begin + counter <= '0; + dla_ip_sdc_false_path_from_this_resetn <= 1'b0; + end + else begin + if (counter[COUNTER_WIDTH-1] == 1'b0) begin + counter <= counter + 1'b1; + end + dla_ip_sdc_false_path_from_this_resetn <= counter[COUNTER_WIDTH-1]; + end + end + assign o_resetn_pulse_extended = dla_ip_sdc_false_path_from_this_resetn; + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_ram.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_ram.sv new file mode 100644 index 0000000..5a4274f --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_ram.sv @@ -0,0 +1,89 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +PrFjCugkygqEThtyeSFMfYXDk7gQaqGZzeCcrtfGk+H9h1YP/okQz2yOfkQWfatnV+uMwPdVWo2o +tkIP68BmWj42YpSJL8rh/FLO1xlAcUhUkJENAFs82u5cdwpnlDtG/7vj5+bdI1Uw9rKOcU07rOXO +MzPaccjxBCiiDYMHLvyFG/DxYUTjG05jI3dp6JV5bKxWaQZDEL6oobiJZMaUrgWlKpoB9Yt9iSXS +syAMfqFlgc0cy0bpGwgwkDaocCgCV/Gg1We/q6pMDnYbaQ39BnU1VR16Sq2ht1dbHUk8l8trQeb0 +Xjl08dhAkKBAULPTAB4Erw+LdYqKYN8Ht4XQkg== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 3856) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_reset_handler_simple.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_reset_handler_simple.sv new file mode 100644 index 0000000..c229d4c --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_reset_handler_simple.sv @@ -0,0 +1,68 @@ +// Copyright 2015-2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +///////////////////////////////////////////////////////////////////////////////////// +// // +// dla_reset_handler_simple // +// // +// This module is a wrapper around dla_acl_reset_handler. It hard codes many of the // +// parameters to that module to align with the reset strategy to be used in the // +// coreDLA project. // +// // +///////////////////////////////////////////////////////////////////////////////////// + + +`default_nettype none + +module dla_reset_handler_simple #( + parameter bit USE_SYNCHRONIZER, // set to 1 to enable a clock domain crossing synchronizer, 0 to use i_resetn directly without a synchronizer + parameter int PIPE_DEPTH, // number of pipeline stages for synchronous reset outputs (pipeline stages are added AFTER the synchronizer) + // A value of 0 is valid and means the input will be passed straight to the output after the synchronizer chain + parameter int NUM_COPIES // number of copies of the synchronous reset output. Minimum value 1. +)( + input wire clk, + input wire i_resetn, // this MUST be an active-low reset signal + output logic [NUM_COPIES-1:0] o_sclrn // multiple copies of synchronous reset output, with 'dont_merge' constraints applied to the registers that feed them to help with fanout +); + + /////////////////////////////////////// + // Parameter checking + // + // Generate an error if any illegal parameter settings or combinations are used + /////////////////////////////////////// + initial /* synthesis enable_verilog_initial_construct */ + begin + if (PIPE_DEPTH < 0) + $fatal(1, "Illegal parameterization, requre PIPE_DEPTH >= 0"); + if (NUM_COPIES < 1) + $fatal(1, "Illegal parameterization, requre NUM_COPIES >= 1"); + end + + dla_acl_reset_handler #( + .ASYNC_RESET (0), + .USE_SYNCHRONIZER (USE_SYNCHRONIZER), + .SYNCHRONIZE_ACLRN (0), + .PULSE_EXTENSION (0), + .PIPE_DEPTH (PIPE_DEPTH), + .NUM_COPIES (NUM_COPIES) + ) dla_acl_reset_handler_inst ( + .clk (clk), + .i_resetn (i_resetn), + .o_aclrn (), + .o_sclrn (o_sclrn), + .o_resetn_synchronized () + ); + +endmodule + +`default_nettype wire diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_s10_adder1.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_s10_adder1.sv new file mode 100644 index 0000000..0c33bb1 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_s10_adder1.sv @@ -0,0 +1,50 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +WC7ppUgcS+kgxEO6k1AADnWAS3vRIzTkYS50hbS+Oq3AsAyTlYMLVJAaXMSa44QeXeT/MoamU+O6 +BSICpUMY5M5YskHpuukej3I8po1Xwp3OcZDzYRN+rETI440Rb05wpJkveUbepL8ZkPkPyZ4NnIpS +KO/65/m6qdZ1EsYgvR1RjMlT+7zMyYtIHOFLGeOuFIKluHNPRvsIrtI7+4vumvBUmiUDKX9BZA0c +saLrX4PFAR+lcW4zGhvCB5wkV6GEcZv6llSUya4l8nD7YGUbc8LKhs5QAcLn51kWTdTKlQPaN38Z +FdJVLLRKOX0vxuU7Yn09FjeuoGOHRIb0zoQoMQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 1600) +`pragma protect data_block +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 +5XNyrw== +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_s10_adder2.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_s10_adder2.sv new file mode 100644 index 0000000..2f50820 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_s10_adder2.sv @@ -0,0 +1,50 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +HL6Ky8HXdAmXZ5j06FL2WCyo5RhAE4xsH5xuOriwc0Gc/WjjA02+ps9b4/9XZeAmfgRHhoE0eUvr +6mEZrqc/rs6biMmtbScu+VleZVhvlP9z4+KQEo1jo55+7oyV7Oajjaq9/1WJuQnJMmxc0fpotjRb +Ti7fNDrBIL9l8YJoHe0cuJOWQNKk7xJLJNKE0lvH+mbqVU8tomfFtyyC+FTWXhgAQSJ2QMS+aK3C +OtwDWnrO4ZsKpvDDt6+2Jv8Nw9btZRxvkvpkcUDA3cSB/YZ56KrUx1bRj4r8cBSbX6RK8slHwD7m +zwv9m/RqQJ9u7JWEyPM1JOcQUuFDLXrAmdASfQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 1616) +`pragma protect data_block +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 +yZYOkGswN5LwV1euulGsFVpRKUg= +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_s10_adder_tree.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_s10_adder_tree.sv new file mode 100644 index 0000000..a3d5d58 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_s10_adder_tree.sv @@ -0,0 +1,58 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +Wex3hqU8b9zffYwUlzHo3/aIAd/Ci1kG3VMf5LZYeQW61IoaJrqiY1R4F1Vxo9uZJowR361liDBb ++QFvafTUHjkAH8Y5dIEeauDllQ3JHDjYhKz3S73l+Xj8O+dgad27ebaQR0XFZN81w0CVG+sBfXzI +P8BqPXeQYBXlOMJleeRGtqQkMzOUsvwD0Hp4zCsMCTlqgwUuWQ9DdRDFwCgNgNR7/QMtcTV3WKva +m1A63BcUb/zvtRI4suSOAYmn+sZNGIIbz1/es2EpH7km/sltN9WTQxgY4q0lIvrLNwe+mJ5asEOo +cv6W61WE/kO3o2I+gd0riMw4lOcebIan5t6vDA== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 2080) +`pragma protect data_block +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 +vQAgcqrkGeKu2FR4oxfRXWpb7ZUYzoKDlA3f+g== +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_sequencer.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_sequencer.sv new file mode 100644 index 0000000..32d3b7b --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_sequencer.sv @@ -0,0 +1,118 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +QqCFLURyw/d+zlY3m6aneaXWwrpdJLgZS6ZR8irwz1o8+ZBWMcLGH2lhEI9Q/gcGVYbs3UoHWlGe +zoe1Bu9kvZHy4aAyknTLTQEoxEt1q/revGiaUB4TVsvpYDxENq1JgkOw4ngkblW9QSK24jvTvRuP +slrQE/E3Ads3wyb3aXCAfgJhyn6pXOGB3qZPwl9lu0SIJaq3VjZmJtYeSGzb/+Y2OADazjYquXpT +zGLN3KZhD3Ilm1s7flNp3ZOw+5tKJHZjNETOLrCcmF7Du42AZ1VHPwuNW5QKln5jn8rXFuqoZfzK +Cfrpg88e6PTdHwPcBvjMIfre+pHrp6rNA3Qo8A== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 5520) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_sequencer_pe_control.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_sequencer_pe_control.sv new file mode 100644 index 0000000..e36a60a --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_sequencer_pe_control.sv @@ -0,0 +1,235 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +FH+Xu1fSTF29aNf2Zz1F+MdlC0wSTbyTsf/Ye5yWqSWGBXn2uVK03WPyPIAkWLr2xhBhTdqxsprA +ybLMGCXCs4J6ThjJIiUf7MyOklnAwHyxZZjgtFTHmzWE6ZoqdPge9w6JVyCRoXpyKEvrJCKvtXOn +XWku6FEHaYx6S7BsCkuPcJGXSYNn8qNnu9J4Cezov/kQ8LFZDk7nd1q6wvVV+WKjKx9Bv8h8OAiw +sVos9OII9Nqvu3kNkFl+1QgCt3x50SVMa+WimBPMX1udbjX/QQBm6nptGmo5pNBuYZ6sndz+hEl0 +t0Tjl5RiEbpR2GGtJTRxmtp0azfJ901qVCQB8w== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 12144) +`pragma protect data_block +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 +WSCr +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_sequencer_pkg.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_sequencer_pkg.sv new file mode 100644 index 0000000..99fbf3a --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_sequencer_pkg.sv @@ -0,0 +1,90 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +XwbT74GYlA8g5B4VUI6wCvKMLXs5Ym+n5SrndlznDbek2DN6+7W97YopySxnZRgQY7Rl+sJvq5vy +eL5QZQRp+BRmRyYG6EHHsripiu6BXAKWswgdcOFSyUNVxKFeEUI+k+kW7z9bNJdFwIQJpjsRGi+o +uHEZeeHXXm6Co/lvXGo3KmYX3I/EiXhgsRIQHuWi7SbE0kWfLyhKG9BCxlhvUqhAJh3J8S5IqT+J +59sDF6FLCQk0qwSVQVjP0qWPkN0V8t9J78Z4jSgb5zGGLrGIYuYsGA+1jYLL+brvqd42Qo/zPiQw +0wfWVrMXz5vUwmana8hyhEOx7zL6dGpLwa0XnQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 3920) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_sequencer_result_id_counters.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_sequencer_result_id_counters.sv new file mode 100644 index 0000000..b27365e --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_sequencer_result_id_counters.sv @@ -0,0 +1,149 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +UoQ1zZp7LX3a54D8oN/PXeFW7HhjX4hn7sawe1Fk+ayUZISbkPux2enG2oiqkzGM2WMzKQdBr7x0 +5gxXEvqMrAdcqA89VD1DECOGcGm/l7ecNHGsLn+X6yWLZlTvLAPK7ePycqMP33Aportpth6pHot1 +/M2GTrTZT5TbWOmcl5KEx45duydmXnr/B8mo6dy7E4bxDqmxSx+h3HjTiJM/2vau5cl6PntW7MRp +8yWP+Wg1u0xwYLGx3ErTXGxX14EbKexxu2qUxWu6pZlnQxcQeGHqpSC/5JDKa9oPi0WsMjc8ca8A +BIt9XLrUhBRNQpZ49ko2bUW3Hy2f3e7zEuxQPQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 7280) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_sequencer_scratchpad_control.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_sequencer_scratchpad_control.sv new file mode 100644 index 0000000..75cb766 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_sequencer_scratchpad_control.sv @@ -0,0 +1,180 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +HCag4G+eOveGppBhDBJSKDXXyz0n2bfdOkGVicTkWl1Qcl1Mww2srvWLv5VnLwMEo7Vw3wcwzn7O +OLaX2T3AIgQas0L872Va0+PKNYqyxBFQuzX7KJudTj0NAK2oud7EPv96wnKvJ/8I/pKctjB2uh6P +/riCle6UHusuhcBy9sIi/PR11WWR20Eq4qgJBaRzQC4Qe0tgnqMfVTijKLQewcGjxyHS5V9u3UOV +gECvLayG2uBzxku+hIYTqRSgIXpGq60ZQv/KY/n2ZrElC6dJzMFzGRS3mwyVzUT0zGtSg/2c4n22 +uniNxQ+1/jeIj9kJd7LeeAp5ZBs6zxSxqe0MfA== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 9024) +`pragma protect data_block +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 +qWAQ0CkJca+Lc2YbxIn35neW +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_sfc_backpressure_generator.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_sfc_backpressure_generator.sv new file mode 100644 index 0000000..2e7dded --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_sfc_backpressure_generator.sv @@ -0,0 +1,73 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +7uO8QJSiHu34oYjvjxLonSuS669foOcbIKDdUptkRPnXICF9fZGe6Mqgqpvw6W2TJTZUVE1i7OX/ +llWGB2Uyr9IsmtTHagdfZn0P7HhMqo/tEFVPRLNtyuLBjjj1M7V5gnwTbizv8mDNBcHBAJUnG1Bz +dtYsCJY29a2F5reuOlMKRPBPo//rPst7mzvdHislW8uGwlma/XeVsO+zdxdDtLQt7VGTjimcQN2L +5IW7qvmdy+LiCSIbmgYwA77C75hDAa0PKcrhGR8KFQYU4om5YS1SkKOLilc0kSSWmZT3jkihbNzf +hQrTIevfOsi+FfjzgXBLKC2TPGuIW3ZRyVi+Rw== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 2912) +`pragma protect data_block +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 +obcdKa4= +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_signmag_to_2scomplement.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_signmag_to_2scomplement.sv new file mode 100644 index 0000000..4fff69a --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_signmag_to_2scomplement.sv @@ -0,0 +1,46 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +efqMvemWttwzbysYtMUPtKpWKA5ys6G6RU11IxwGo1JwGnq3x6+HMf/UauJ+AttMqcQHuvx0ESJn +7OnGiw2QsHA9x0Nu8+hpT2EkJJmaxjHdQQ0OPXru7IbBgWGKW9jDzwnzNPmMm4kWMNcOL9M7cCrI +t9F6lWNM89qXmYkw3WitduO3+t07dTq0tPVO/e5/yAt+Gk1dM4VOEDOKVHbbZuYbaNXNHOvDAMwA +ceuBv54Y1cExTytpdhv45kz0LwwS4iAb2vPv8ofSbuiWQmI/BFCRML5QCow8ONqLXoZPtJCR//z0 +WltlVh9FS3gu7k3pS6GZTTMn2zzgyly6bBPP+g== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 1392) +`pragma protect data_block +w3hIlpjFsGPBRPdrAv0R1YGL4qD+vNSe+Npe2PS9guwfgxGKNXD7bPnvFZByCfWnkAhSvCKgr04R +oH99qX+125V3S1fl94bH50kj7XHko4zK+KiVJmMBkCZuP4fTgWLRLbvUwtP6ziADShY5WvYSfboY +VfG3sGaQdV9gShDUi/jQup4zvdbOpcu5yT1ZcpxXWmuaghm9Tj3B6BIoWLcexpJ/p7wgiDbjLS6P +QN1OghMvJ4UZhNIdpdc1pTMGq2tERX9hV5l4OYxiQUTIGj0gpl3e6zDYx56ZU2Ulkuy4RVT/eaOM +0eg90/k1s0ttBOTf3tjb49ADfADzrupDVlRzbOnkEFIRyWFHB9WkkR/CUds5SeoKJ3CHejv5v1sT +I+N+hlEX1IHLu869LUmeYCB3Iw8wh4RBnWfBPLNM2ZrWUl5hdE8us5JswCuqw3CboLVQVQ7P2DHj +MpEtT+Qd6wZoARJd9/NV+6pIjB23TBwCO3XDXdRVYanIrz6eplZIe4tFxqBl3ub6kY8V2A3953Rp +917Wo+t/KYapCyi8y3MQ1/lUDOERG/asbOw0iAtdT1MfQAJTWtQ7wTBP5IoRZtc/AVynFhRpj8MF +v1qSfWF3QOP8CwGabP7+zjNZYwn+HIr+iWZWCgKF1XgSdMppR+cE5FO16xxMQZ7TBeI75iEVZa7n +T0J1A8od/9FCeG59CRZAKHWy3cOiMQNpfrg/oO1hPMX7PHnFrqk+LrH1UPWgdEOm7Cp6jOVX4YD5 +OBjZD6/tS6MmQISBtE5r8Xm0EbsUZ1QUaM9VJEa2rFegIl13RZcUiewCktA3bT0kQPoGpyuu27BC +vU7GfVZ4ODK7zNBs30+Ei7MM7FGykeLIVqiOpKBAaKSIL+DqciUsbEQdwx/rQA2qQOMttfrOaj+q +cjlLo/4FP6IdnENXv7nlLkb16zBBGZ0PLQvCr/LmaJeVh/gNAdPAtUq6qnv+MzAhJH5s/XXSK9/C +83YLUgrqtCI3NLs7K7Gicvjxz6awmZfd4GYsf1ZjEDnKoAu5CofmDD9wCn33buNxnGwvN9vE4dul +7O0fz29IVjYbqkJDkpPKACQNOZlqsSMoLmoVi4TgUa13OBw8axh8YQ82zwtg/9MQGCsVxbg8rzqV +0o45DUUvM62320MxMeDDmquw1j/n87O27TrmY/jEsRkoxD3SVsjJk2CjD9sOrAE6YuqOlgoRqJWj +OY85I1jjIQTaEN6IH1Hw+8VpvlwisF5M7655F63rodfm2gyzzzCKAFGpkc7SjJQUSmX7GXnTyln7 +uZu9oUFA+2zG/mkTMjflU8yvpTeZZn/EWAvmZhqa+/xQ9eq2gZfxZhqx1bYKdi6MUFI8uyui2n9I +BTNiK0DPI1cjCd0z3B+Rua7A0S1DCdlIHBoVvYOsPXg0D4V/Em651T8Se4kqGu/4eqH05Z6a8V1w +nb9zO9YLoJQxEY+LvFRbWBVqyTgDXwCKKKR6my7GlXET4yKsVOatbhDgreSSj5AX3fuyQvNNHgwB +uy4xdARnru2154X1UJhudY42/viQmpm1q1fwB8wZ90+m/lU9Wk6zz8R2SiJNFzRLSWC73/SEOuTD +WJ88Nah/+01ZZ28a7yWwZQiVehKffS7jw0p0AiICmkJcJj0SWeKR88LF8TGUz/CZ6N3i0pL+YJBN +jJ3cQ2OY44BBltbFWm1QAFJ8UuvuGJfFlHYumuDviTGsoYHuohnzsHE4Gb7nyKcljG3+s2szWE4Z +BaEmHLl0fxz0ET2tIgQz2xN8Aayp8dLF9Fh+7QM2EE/FsdjK0aut66Oi0rZ2ZOWV7ssSMYXUzOqh +ocojalcmM4fjpwr9MzebIhhAehWGgFBe +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_st_pipeline_stage.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_st_pipeline_stage.sv new file mode 100644 index 0000000..7de5188 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_st_pipeline_stage.sv @@ -0,0 +1,78 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +17t0wag4d2xqRwD62hX4XK7iY/T47xmjmoj469Gwoa8+ewz+Mcz1Uz7K9pnpFzsjB94gFff56xtC +OI3wq7KL3Md79xV7zsDM7+pwBr7aLqhGeeeA8E0DkuhM6KgIIqScm31HNJpUTllR1+dcjy21fvSV +RJcJlS/xxbvFAwnCd+uTxtyHKOxlQVDf2u7s67SAjvX1Ti8UyYvy+x0FkWsUdOv+Rp2Z5bao/oxX +EPKOk9czVdBne3UZJ2ecWdMS3ptpSJb0XIytGedHU308JPVq09DWjqDGCn7mUfUB+I6E4Zae5XDx +Swqn2Ddvigm339CW3z9I1oVArL23QD8/08QhDg== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 3248) +`pragma protect data_block +5WZ5RaXfyDtsBD7RJUDX7M7aZFwVMVu/09V9X8o7oGu11aRx67SwcX4hZpoUU5BDs3Kj049yQ4fF ++aGUIvgBYqZSYvsJ6Be+OvS22oSaY3vp2UeFhHTDOJOkATwaqD0spylKiCzBlxKs9+K+8KVnECRz +f33t6nX1Yv81I8XhKw1TrsZVjoE7mNwXPwZf6CkL0yDZzE+IQi1RC2xDEc/AY/I0MKUn2wfeUPbG +GJIxbZ1mCAOQ10/7zkDB3RB9dEhgvDvxo7x0aL9i5WATy6dAkfm75M4xGFdzNin+QdK+ntXLDcIr +M7AIqahgr9cLGqOb54aJTtfsK6dm13UJTY23enVO/azGt3VQAgKcM9AMRb4j+FZpfmXmjfT6uiQ2 +nO5ZBgBORKVD/2JAlFTmn6g97oAz3UvHBS1D5083Y3Pj3NRVEoswGOqVs7DLFF/nYDP+tV43TJPe +rJR1gmULZ1IdrufIvqPol0V8gcjW1ki1z1Vurj/DyFdguCJ8pd18JloU0oZqEEPnsl8HQF4qJ2Xi +SQSR/ArNozrbtuXWqFkeWycd4qwLv4220kKnEHf9+x0tX7c/8qUUAQZQLpr7aud3VT3Bft7qzUoE +MdNbZzEC97FFfNZs3gE5fo8Cb/olHeX8QmmKSW5fpJD2G8i4ZpAAEtnLs2Bw9IYurN8azUMzoBB8 +nTEHF5HrKKHd28gAi/9K92/p3lf2dfcIe5i5eSXAiPgPomaLrTrOfk15P/ZuLms0lQUW2FkTpXHY +OF9DHE1+/o72K6qxy6epwDCELfa8BkzWFj8thVtVvC0hMzIicwzUOKubxe4ZUeuwU7YcqKQ230Ky +DHyJWYdAU0nfBgE+txLpVKRimVR+3pEjK1TRsCeaPIzYikMbWe9sf9XQvCfMUhTRJSUQquzu0y83 +SJNC1TVuAjDzOgGZqDUKhsaRdX54DeSDQ2BkPG3T3v2IuuGsC+usxOOoaPLQuSttT2oty0uvesl+ +OXRxDJk3JBL6JITfvWyI/pYGMEcDDhElCOz4pqxXIiXJZg/wwhMnHe5jeqA3726qHOG9WhpfTcp6 +bi2RF51YquErKe77ZNyqYzelBGaE4dFpE6KyMyagri6kO2N+8o2ud6+rHzzbPtFHpYF5wBZJlqkL +OW0w1sGnRk6uJASCxAsmgzz0+dH2+tR6g1jZDj+KeH0BC0MyP0FyRmm6bDZ7WFrYmNR4134yi0IA +awgO7yAqCrxXzWXMYMTOF7X+MKpwBNCm5w0OT4skU3ocSVy6MOEWAyj8pa1DPlX3Pf85EtBwhSbV +KHdFaD/rdZQsDsg317ae2CPfrhqdkhH+d5+SR4K+L99ZKlE1p9dkBrCZERkVViAAOu0GoLgDnvZP +p+/xuI9As9sFdSGGwLInI2RHMXmILP209zcmc2psgNceNpvIDsx6nltTAtzGtAKX0wxTgZZ1UV7E +ItdKluiliLKDeKygpXY1/RhAyh5PnNPzs6BCyiqg4TVjIZV0Vo06JWOJ2dUpli6ynmcukTlc9Ud8 +ngj9swjuZdfnLa7xGCWQF8XBB6cx1bxgaBsM5iJ81C+yT/0Veo8h3HaCHDFDtqMq7i1duguRbstp +UcgQjf1aeAAT2pSPK/kZddTQeAOpT31Ka6QPsKUfw38fq+Z6byHkA4R1TCi5dDfr/O3O+6JjKOX+ +zRb98CtYKWc5/QcggmXpz5fiB1/8UEWUYISgCv4dJp1sqcRee7HF6zi7g4RZlC5t1hdNjDJlM+A9 +vICVFzsDaRYgCeYaOEt79+nq8GlGF01BTyj7dr/Z6iuGKZ4VtVIECxNrQLM/48A7FKvFF+8OHqBv +5ZbGRiM5uzXtGjsqLFok+bwp2gGWIGeT56B8FXImnCOgI0FLjryaNsWDeb6iSg7sOjS+gtCpViwU +gQRKox4GLy0jF6ZHKS/8sOAWbBkfv7N2IlsbiXjychav3K15yKWcBkjdbf7DFNh0UNKHy9ZaS9Ed +YVlaGHRdHbnHF6xPxIcGf4Yh62tGyFPnogiZgv6IkrzeSc4a82nwmR/xmzVG2bxqyx1x633RwGxb +aueoE+wgt4fFLy9ftiAq7wUpMwRDlmpRzj3t5rCquOQdet64atOVQ3LL96j4LHMKTGSyr+JGteV4 +0oqxBth5Ec5E20HAB4RojbYClTJNK5bZAuKcrTRUxkxvRSJ+h5vrq2HacvQ7+hv49yc2XyBzZaOU +DAylLpBtqn3ofPUpvaoFC3HQ0jZrCZsmycxQdNEfgCCjuIfvzXoCGwJu5cBjFsnNts63tTT2yaUf +PxVrzO7xTGCeBIlpR1RqMZIDcNLjha3dDvf2NUvh/wBoiPfhrIZ+Yv53UI+1nhes5lW7arVgTU93 +6afM9p33Q+iJXa4HXal/yQgnQyyOfBhVhCk8/ejaq6CEBcdTpcLUqlwOmyQiD5GVTx741VWWRliy +Md4aKNDcYi14/rXJrjyWhWruMPq2T2hMiD0DfFD9p8d1ba2fCNQS493HRQYCA1iDvqgNKF0/EyvI +yDkLMQPiHgn2iogA856t/oSq0McAABF/bEFIHI9ab3T3Ur5RXRhpnk8zoRQoyLxdrnrb43GiJCnA +V7WyOkgxi6FScA2vnGuKGcXHlsLLk2fG2P5TgOSz1p4vfDsPBrm4lZrZhOwC7C1Vs9ZduIs+mr3W +UzP5qzXx+fHVlG4Pg4uYg+05oLwwHbxeAmEmgfHB7zGqWc7iy52y4aOKJ5c/xbokoHLQ6HHj2Jpt +vuAtsBKX7jaHjDm5SleFDYKMdOWWBs4nWL1yFHI8BVXjtaMWNgltCB1hd5IxM1rSOjB6B9vSirem +Zg8P6A+9EGAvclelRsGtC/uG2JIOzHSAf/3Un/OQXTqMxpRfY64ToEoL1yMfIRAazPK2N21nu5mJ +JFvoam8PvPZElluwVNLJ1NuPxuEVcrm0MGTAXtDEcrQzNjmJ2YZQ+m2WbJn5RMpCHO4cpwcDxJTi +XIR1jtCkRP2RwHu+Lg/H6wHkJDA8Svu+v9OFScsVvUAJ9KYy9XYGA6GTQgkYwTisirzNrDAwhsg/ +ZYRcBhiW36TRD7nPB8Iy/tBuIzufc+BtBFtS8Z7PBGxBO6TMasupkHWw1dLae3vvUxX+oT4ruDKw +OUpz4DCbGbswHQavKRYcGNUjNq5/PaE3u+tDsS+1TzRJDNoucWSy9Pu+0nZ+BSK/9qmMKff2Y3Gn +u0/SLkUprhyJZL89mRvbN+jXPk1MjcQ0NS3aKYbR0Ttl/ZRF7wCHE37bNWK94C6joQhRBEYUZmUa +k/SBJTSdx7WFqN0o8tKjMkbHubzZwT14twYSLBfNvapdfFjyiH0+H/4EyNg1KXcUqPy9e/smWsqN +FK4ZgywWByus7CEPs+n39DkBFXVMj5I/ke1QkxeyLWdbzp6cUsUCxlt8MKaX6lVSV/Yk6hZzMB7H +Z9uugSwtHriK2S8WDAsIjWzSjV+B8f3tJ8Hj1xOPDjU7jfssrBWPSkc/MsvIT5+pT+QL5vFS5FN1 +yuyFmnNwdE10X8RAn7cU26uFrRac3pzrGJZssV2DBDstf++CyUQBbXCpegIhFH4BKu2t1xfrLtd+ +EZDcHEiv83WvyxRiICe+XWJyY0GzKQDIiJcLNbxGF/gFJ8MxBnV1BYsA2lhxd4Zn3w0rnXmPWHjE +7QAJFCpssNSKDIgWcX0sj25Juz2rCUZB1eqUchrOLTriwSC9e9gqFhDPziNQLcS0F43QvqE8bUDP +XzA+MSBiutS97F5ENgzbBSWqy/3wEtABUT7D/DOUHjPyyGrinkksu1ulC/oxCIbuZ4DYicJ5CLqJ +BPlisDYlRaDUFBkjOJ3RuIa0t1aU3bwT++Fyk8MkcLrzGLAIX/DTxwLJbveQXhSYSDWv1ZFAtWxX +hkEzPPozum4Jx3hMmoZFAnqpNiVOEDyzekv1aYERsXpJb56y2IluGJkylCnAl1fYJJJAN8E8LrVa +Q2Ejg3sFZe7xUxAf6ukezvBgdbHyLxfpVPHF8bbinbqJ5Gs11vMZ9RZ2raPzp3AF8HZMhup3fprw +37ieaG9X/IN7zPZbNXv1Q0hy2zVevGe0vWZEf6JAziB1FPdCwh+3G0LDtVJKBmmM3pHIG8HLKGC0 +G6mOqePpCRHDue94l1FuHQrKeM2eypTJiXpqP5Bv5w1ZNq6hZjDPWKkar7fEjH8Smyj/njPnQIth +d3WyWUIxPUYTC2b10JyDrjiGTYixjVTmN8pCJb3mcosrxYIT6d8yJYmYLZgFQICyx6Oc06OJNWb6 +tutLuVa0uwACx6y9T8C1EHanvrr70sqKZNi0VqxjP+qUtanwAc36MvRDm7I/ZYRqy/LIPxP71XI= +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_manager.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_manager.sv new file mode 100644 index 0000000..d5ebc72 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_manager.sv @@ -0,0 +1,555 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +51Cej503wbDukb0czebudDf3cO7NiOAIS6Fri7sxThFkULFLQo5GI0F94wLGieUZxbD2xwiidnoi +x86rwtTLiXFjbGBP5LEAhCfVKJI3w9CRxkSQPbl1fK8OQc0outl//TA1q8Y2M/bZAF4xsF6SyPH7 +vzCnAu9D66kjegFGHcqFDwX/TcU91fbazQHIBr+6MCsDTvGKplF+Vby8tGtHt4Mjp64UCLFKAp7m +/2isIX+I6gqhL9IBXQzD4Knc3tWltdPSRYGjfkr05oVdZawa9tACL6ceEonR2gFE0bvxlbqBxwZm +Xp7f2ltwMT4pZ8O4La3HV3KU+S8ZX/UNmhXGMQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 30384) +`pragma protect data_block +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 +N7VK +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_ram.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_ram.sv new file mode 100644 index 0000000..af8a996 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_ram.sv @@ -0,0 +1,290 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +3rFXNGbuFWZMLpc7tPdIF6EoIkjj674d3On7HiyNUpiudfzKKggQpxnPPTMrc2z8Fc6duadZHSHk +wOy+yXU1YtsKNCipOvqVXt0y9L45fEcDzBPFQvy8b7rTd9KcQLuN8GBn+6c4YhB/lS3WrP1fmJ8o +Qt3I1fO77gLcBQU9lB+UHigIcXsWJmBp15FlylCrxiMGxs7e+xcg1zTYPvuZofYHbjfzJfOUU+VX +lTm/weIqco3CqOdcZ3joEouGtm3beXL1dDjMsumO4kngmPvM9y35CZjbqwUQVm+hm7cPkZlJxHCO +BSIvpnTG7ZN/MnSeP9DSWGXPj10FE9uvv1ja5A== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 15296) +`pragma protect data_block +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 +ziKDXiF9KdnJ+dXc+Wg5jMHefes= +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_reader_addr_gen.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_reader_addr_gen.sv new file mode 100644 index 0000000..9fd37ab --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_reader_addr_gen.sv @@ -0,0 +1,1189 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +zSZiKcudDSAUy9m1vVpinC1IDFuG4il/E4bgvUWsu2U5geFzhBUozolsAW9otDYwx8n3I/Ev+5ud +vR2O1rvrPYAdnAOxS+P9m2KW11EHgeplzVeF0mrh3kIDyjrdh2gq+tRR0anHVHit/T4K/yL5JuEc +RWnJeX9rSJvEbiMO1wLWIBolRYLoJv8Fh3IYSxtqPRaMw/sOTXQZw3Hm/B2dRq8jPPlo0nJQmeWJ +bX+SGCelAU251c9seldceMy57qDbqbFO0uN0PK3TmS98pX0PuUm6RwyfiiNuwtXRaq7rgI6zPhpX +whE6WBJyFQ7xsWdUs7rr+a568zXoSSYVGxZw+g== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 66560) +`pragma protect data_block +Obj+JEKMiy24mJREsL0m0nlx/RHUOeQkmyb3fES+oiPg2bG+XDRKB9tDqawLjSnFddguMHJmW0e2 +zIuWG5HfeJruEZGkKdZ2ptTVTRuDkJ/KJZKgv2KOQZ817d6o60SWuAvQrvHpNEkoKA7kNKkyKQEB +E/OkVWvkgnGe7q9XgBTEy9npGMCObnbFcgLqCM2TSbupgdsgraoYqmLo3zofBZ+x45j+zHNy7VOD +YSEt59Wy8Dv0f7XUoINWQiHrRwnXbJW3uVBiM3s+gP+tyweKo9+yE4A4cc3+iFQeWs47pFpO+uqZ +amI7vmEVQ3+wBc3d3lgqDac90/r66vJAb7yzMJP84yqE3WxNgsatUR5ajIZIGJZHhFhruDXYsfYF +0115J8IM2Gx47ZAEUJscR1fnzHzn1j4LwnDrzet/J3fxHo5LmS29xRxGW/p0k3lVSlMkEsWA8PjI +Q5vrjsLn0X3XrJ1uK4Q87lcdDaDwP7ex7sxYTTSBexRk9+rXQ1jscrE6vLje1fSanF9u1ACK6m3O +Uao5VpHcnvU+Hz4FHftG3Z1YKFStqp2/vv2BtERHIDx3F/RZRvQsEkA8pfTtWlT3g/rKXm/47oGw +rWjTFvP0sb1e/tw99NR0Ai2SSB5P459shIUJhu+qz99obxESEi7hVBYCe3b1LJT8XIVD45e1n7u/ +1Uyjc3BSZbvl1r8Vvou5SiA5fdgxcH7Qb+bhtfsDgZOx4KZIyF1CHmKHBYpogtH1qwKzlZ0ux5An +QxS4jhQ04jcpDzD6acQgMTw9IyNchqE1zYvHGXrmnamz8Yx+9yOdu46PKuSh1xvblRPz9q5zvsgn +SSim+SHrJ9bL1eYRoh10dI8QRH2nmqfhtoIhwyd0ExZWvOEfUcOf8xlCUS/Ki6oRT18zS2wwXpKg +pFK+uhdSx4hRCkUfLzStGL0mIOZZUYXePMtEi5H74A7TMkYaVgBfvgNQanvSyaDYtrL4rBS5IwvV +AfYofo+1Gjvln5w2YQx2TpTyMu47WGnCUpnqFcJmREVyjsH+MyLkA3MYNKznjuDa5KG+SAqvwd9P +ItegQIPglT7PudKsFRAM3rhWRGklnMwsKqBvU1L4Gj1fuJLZLl+gYc7Wmai2JeJRWfZDQPpoibmJ +n88nTq2qu0wRDRjrztyeBxrBaguFixuECkGHgh9cyoGQbZWl/uNuDtfEJF7XGpxN36871Po6cpBr +paSpdMZUGKMCfDQXUThhv+lmtNkHsUpMd4IssjcZ3f069PAHXFktgVYd84o+2z5UKqUcc2fmUVDQ +VFTVpQEqftDusqo4kPiYOThyEYh4UEB2Fn3FQoGTD6b++OZmJDue0oYr5S+jXj2jezigyPI7hW3P +LKJ5f1VIzT6lKBQzxXEBNHFaevV8gqIu04+gludw5qVyaTUtBwhx2ytyAFQqzOTcaRNPHnioytGA +Nj0FNecvNEab3YUYKR/Gb1hIEMuwRmG71lvGmJ1xMi7QSkuC75Rsdd1JLdEc/wjQx3c0BFLpJbyA +fNQWQ8VM4isCwaK/zwhSW8GIOq+TapfD+K3jifxnI5tDAQNiol/FFuQppMS9GjyPmuh6lVo943DN +ELeI5QUd5A9hIMOeZiSbYQ2f4npu2MzkNoXOi65HSHmxV/1oJ1i4RnUWN0ny739lEPN9gBBCK9bC +sBJNOqVdL6FsciGg+/CUuIMKsUD0s6phDfAC8StYxc3/q32v2uG7yx/C+SFKwrh3q3hqrxrRmAWR +eyb5qKNrAZIPnAAkRi7+bnYyECYxudWR2pEuby7CI8vq6UGBlc0OpKihkcbQ4QaBcP2geOpiFw6k +DoiRF2ow0ZwlKAlDCUNDGw7yYI3QTILpQs5n+jXlyJkA1hRVJDUyOcFEdn+iUboA2TXZgfN23Ltk +2R7XcbhAt+EhTJCsOLCOJdfJ31T0x+aRBqZc5yom0ILRtiVbPd0HklNRd3MvhEhohueSkNthIWjX +FvmdkhNNCBSu2i9fbTF4nZ1oHk8xs1KQYdmVhfwPCO7Pi85pQuApNvAsBUhLCSkhhn6I20yjT8/5 +dp6HUnW8NC2ZUEaew0GAvIbj0O96yoxEBttvzlUGY5nH+VhCMowxu8lYj/PepWfDfKiu9OzSaW8c +oZ0W0AGzHCE7+3sNF7NsW01JSeCBAGqZmnXlqRQKDIvlw9UIY3LuWZ/qUI3QHLa9gmhL6yt0ubIM +Lw5Ic/uZ+c8Nf21YbYSLblyj0weMkI2RP4mMwIK0k5xpH9KVU8/WIRALWmVkXI81isZsBOkHArMh +C+Z5MhuSP2fs91VmHTOVEoVc9Y2Y7fwkCy3NKdZ96QLkYblvcWEAroOSjdN5wExFQLdByWfhaBrP +aGSZqkpYK1t2TQwgMqsB9CPuXfL5MRfPjCw3Dc84GIgkAh8Y5qokW6eY/HBRHfLBBk1Lb9RwOebS +BkV9JO/2oQVMNvC/1vhRbzxXuLPL0LmZWboJNI4Dc37pInqXvy5lZPdJGz8lwAv5ydMDh2TLSsO/ +OikzAHZ89ler3OGqcTk8FnSaJIgYJ15JTGgmBZl+3F2bIBoIQ2ViWYRAUaJjnCyT9wt/1MvcUzK7 +B8z2tarwNfR/7Dl6nID/RKb1CDnRnQHE+ofmerkOzBKmfZBfB4FgUwU/T9o51quqOq1uWdeO5Hvs +4ig5L0ROX9soo5UAo2d9Ns3KMCyZ6ue2kHo+XSOeO+rYC/sn9dwyEZdeZQRHXwulCbbH0XYeVvH9 +7HhYJcbQyR/rY/4XzUJuCRAPdDaR75/ZTJBG4fLoPbLNMM6VZFDXeRT57IoX8dhSspZgrH30zpwr +zzBE1t5XrlOf2eVliLB8DzyVXltTFGw3oKhmX7Y9AqENE5FFr535DFCjX38vjVWdXvtPtcDEuVX5 +caY6i++vEdc8mj9hf8xFjV7FfkUQLyoju+onoil743QjH5SQt5BbxRT8kKh22gfhq5FF76kp7+vT +O7GxZXBpFUjd3W2iHEhSPSKAzPqlEceGcJrC9ihEa+IAkg7PTNMRL7sXe8L0+e/8vpI1sQ6QUSD8 +dF9+mjX1/Xsc4DUNIlSMzWIItSmTcwJwaYPru7QeM1xKNof9DfcxxBhhlbMENplXICAWPgUPVaKI +7D370nMiN1OEUVDs4q2i776qAbSkg+nSeBmaFiMPP2F7L9OSTkrvYw5z9sbefB0s0gDCxbaAnGoh +On0kIUY6F+R7hlUwUGanK/E/vuAEO0coi3bwOVkyNvLRKw8OviW+49V3XFM06udTSqrPsH/78PfP +Jr5fgrpzJvLDXCVH+1Me9350RQraFRUKL2xwQ+IKzdlR6HlWMqDtHBj3NWhGT70qBBwBlZCRK6mB +I4wL4ZG17ODVBTg6Xynq9a/7ET8nFgHULx2YUZIAROKSf5ybjEIFK/qrvJJCXUv83O5oQahg0sfw +gEIKNWZrljyFdQW6Pycyq4Yefj5CBTt0VYXh/9ZwqXdZxXGNJqSD7+V1PKPI/WBn51Ql8YT9VIF5 +q3896JFuF7rpy2PCFh1R+pLah75x/L11RGQzIFCp/4sd9eJI5U8R2cY7HwHUALzN748dggFVS+oL +bOyqiR8Aci8qASguVPkqI1AHd0IFjdVoag8sE8ay58tlBM/fLwcyg2zK50s90hupZvJD3nHSzEqD +UOCrRbPLLgsfLQm0lzSe2kqnSoCs0ehJvHwxkYtcP/2G0p1SF/r+3/sZZzQPhExKNGjOkKE9D4Ds +ec1o3qBNXzTr2yxZSxKCDuRgOMHFZylpBezc2GyQVWwVq61biW4NRxRb8Nw2OqEPh5wkHIq/2pwI +t5cyz4+RyFZeEYmZcAmMhYetg1+0tpwE7eWNhEfEEvMffhH7dsOaf7IyQB1MRXdGQg2rmb+lPZy4 +bmeav9PSJusjv2K+/gfuM58cqy9nbCIvkqfayUUJbrUxt5LyN1qvWYMtnb8RcAMh4co77zen9mYo +Iu3Z3zhHd6nLRkfwuLaLqZbRD6mqLhNEDukLiEmIyiabl2JR8+BGL7EREZklsCjnIGuD9mQ17LHr +LOTnRaiNNbF3I2pwcPMMXpwV66EFTSLYR+K3nLyzkLpXCQ0CV6PzYAMdkXv0WPClRrSjvhni/EJK +OF4JuQigzN74W6nfIRHHfJbrkEotThx2asIekTY6jQ0ZUkb2jeU8UPWZsinZcmXj4s+NIYafWkvm +HCGMWKtcrNAZo/tF0R9tTPCcJch/yBpf8uegB6NfOjJxCof88qRxtJ8pSEMGTWiIacnUSUCwyTwt +sEA0NecThAD99oBU4FnoJDSag6bTwrxLXJkARKhi35ek42kcY8A71v7FCvSQ0OwF7ymHqF22xKpL +i/fIz2lgL3rRfEAugTw8pIy1A3MP8lCfEQ45qV76+IZd8Pq6iTtVL3qEdtsN0t61e0p8IQtxx8Fg +Bg4QwWF0ijHos8qJlMq8BHj5KOeC6+vDqJ5oz2USTg4RbmKEOyeVqCNvFifTwFFoZVk7QEBPXZVk +EGRa8XVuw8m5j1TtAcdpYpUPLlK/9jjclzc6ZzXrdtO3JuoAWWsxy1SQOvGs/h4XX9keVSBQu3H2 +s4HqBCpKRdvHHrG63Kd04/6v/LUU7LAF5XxDagZ6+5nHbRvXVITxXx3dsSo3FEGGPgJ/MEDw1wfl +2AS5axYKZdiOjqp7wi7fETuz+BcG0dWfqWoby59WeHfrF6l6dis+vkzLC4EDEo98XmQ/tu1Y4G1v +59JPTt1hGpsKaAs/N35QbHL9TsVHgOPOWTeVA6GK3IgBDLSRj8bAImVRVwUD/hV9pc+r/s6uBHC8 +RMbDrJQ8n4i/WRZ7e4suS5fuYsiT8slRXbF9TKIYPDnp+Wvu0gAXdinbL4XU47+tF/BRUkee5Uam +76QUywK0SEH+CyYyNUPj/6u76F4QNdC23Uqu4sVgf4bs8yNucrU1btYMeRRXu70Q3k8kiH87wnvy +L2ibvNGdo0MfFV3Y2Cnhhj95LG5lMySghdUEFMgPDBI9HqiEOsH/6sH9hNar32dRtIaZWMRRLC5i +oRgtkFlwz8PhDOvhBWMuAPYAEykCTQsIDtjB0TchzbunrD5rbJE5ENj1/ABxUEnSUkjTl84PjKbX +6bk7h1V0gwJNsWhR201qpVlpztqiucrlrPLhfj4hM+nC54XA40i5bCxAbzHh3CNqG294emtbG6LZ +MDa4b0CtO7uOIFtvaqYi+pfK7p15vsXmXv1qUnlYz3572QnO2MaR8wkjVd8sBT//YCqFhgSdPBSO +WE0t/72Sw4jsKwwixmY2x0xWhJzBu9vc0ldbVgVvfkG5JyFZWNOsSRPy3QVy+0CNfZLOLz4OOreR +lv3JkEPZOQvb5IRCT1sYlOj5o4/zLcfiszPfPoxMzjDphyud3URtTUas7+OVlIll6RRVyNGOwB47 +MnebKOVjL91fASPHCZAMdGWePqeFoJ7Z8mC8S58EVIchWBYtE4hp+1RiqFg/H5XeZ+rcXGhwlLv3 +n4j1Edw/pr0yF6/Gfbpo+mzWek4hrkRZDK2tZx1AU0PYlcKTMUnn1OPgGX6k2e5micQh13kTzG0Z +5g5mJhcBNzsK4nwx6ronXD0c3GrUInXb1CwgUK12udJWBQm6mmehcvDul0Ge0cCGK8uCwJeJAGXb +uzvw0U3Xj/67BOOWSubyYRW1hhQe8gWVp4QLhFJBE0SxAGU3V5nhOORLB+tjWhchmC4crkzgtnBs +6t8RicCkuKJciYHiurT83C1On4qPvdBqRuOvh7EYpZDgiwqCjzB7qVYlvFc48U4DniZbd3lsftA8 +mOnPmWjcPep6OiUn+5fBuMxdJaEwekLFsKTMU2TDOba0f8unj9Bp13zRMmEtBIKDnZQNGTKNSvZK +45kYIyD+uwNuhd84uldl4DEon6haz0RIhai1Glu2Q30pzy8GsJeadl5Ygj7QdVzVu5vZiv2SpDnu +MH8xQd/tvQkCOWg1DR1B7Ufg/NPLz0+bYnSJTITLchtBEOX8yRYR54nxUfWgK6PouJ/y1pV5IrDg +z3J/4ZWYNpRYY8EY27RLnqzJwkmtxOBt2rnkcYMmPuf8BFTyO2U9FZa3zxbcXQ/mD0C+TvSMHMzq +5OfsXRQiPnF0k7cSibjKiWoPOBe+9m8qmIthNaMLP2fkGBoTqSexTOCmHAll2+KzejB+he5Aj9z1 +0i8bzHEeOJEqDqM3RYIu3EMsMMwY/YK2dBh67MVegtL5DWLlFh6YUl8jMzIkqPHUdjpIKDUKVkFJ +AGt1iMicVTbZB/9EvKH9u35D+qz5vg5zzr8kjWgWATZQ4Zg4wVKbYWdkwZbwySeG82qL2ichxTsA +XMsOQgQLUSBRSq0HNfGLU12CQrAMyOMQ2+yd9mTeyOopopSWoacJUqWhUP2OkqeO4H5c5IGr3QXe +a7yfzyqcKXHMmZH5p9xnFPpxIuzlbL7ZIfYKSKHD5zXrUl3c0eUZT6JAtI1sar0ihs+OeKHG4VWl +AAK7HBvL2c79xPmdiBG9fTHa7Bq+1lX0589UTaJ07L3LQeDDa+9UkcPOW95zEb8sHBADQaHr4iRz +4UqQSvSlQquhMzy8gFGPafA/7y8ZgmCn0TbCY+4Z94nkbnAVtYnwndwY+I1sShAdfwJLJZL06fUO +0Tx/5r+OqhOE/cE8lxecX3X95fFsSN5N4b7QON9tLqap8fAhdye99CHg93j/igDwzJnCRUCVuaha +BerRknZ0GiCojjSPkdA2ehfdlH1JGnsLl4z9MG0IWN4Y7ilyVyRI5hFTRzvCyV3KYOjOcKxlg7Ym +bDq8hCLzsi015hcNTYVhazlpo7AqqXBaU3Ip2YZ+iNjTfEyktWSOq31vJXPhqI4W3OUEsdCenG8Y +ugYyklrUd+kK3Y5RSXBUcXybKgTtHhPWUSNMBYR5MlIUu4ZNUuzecvJlmm7R6udO1rfi+bHH2L0H +PYn+i4p7BVd5FyIKtKXRY9CQxdYwyauuQ1ywD2cXYJLX5rzu5c3D0nTI/WWGta58Kw5yUwjXiICY +lCsf3NMr/TEVFCT5KYZbjTx/7giKQuEPd3XRd2rJ2W2Eo0jgWJLxyDPvOCqH3FoIMK+SAf634fTB +Yna+AKvnvl4Hv/9PcORoXSoKnWCvI07FvQ6+DcXogCuonhgGFLklIR1dmhf4U+/OdQvOKwxFfUy1 +z93FpXSdR+eHlh8Cqpk0UX1DzMPgo06p9jSNV+ubZp3WP8TJRUXa+6cwZDwt3YsWnUUHjmugAOI2 +XwtQ4DAP+g5n4ROX3hhnClXzP2GXLksPJp39QKAEoMdBaQ+ATgtyeH04noLacKXiBhDt5ARr+Zdu +0UOI5ymkDxVmhUDoJrv7HWMzYJmK5VJWYNKOgCfNaRrX/OcI9zHt0oLqUkozhcKhSW8QRnt4XdCS +xB7bdE6g5+IPXGyapFwHrLwTbeVNNMTyKfOdtZRkY+K4gHFbw5qvUsVMcbIoPZvOrluDUanM1PH9 +QN7HoyutCNsPx9S8Y41WwMDwZKsjlXuGbQUUGA0I+AfkCbhpoInM4INDVHVXtu9jqoQHQM//ozQP +4lXRF/cnzNTiw9nYi0VirFURv69PneTFfhIJcAeOM8mrOXj7vCoDfIQRTA7UUiXTBeFiyl/EJQPj +WCWGKJMgelJIMVJhIcveFSNtlfeX8PmcFTtUBZbHuS1ipGiRo4QB1AeQLYh5oqz6AoBD+U7oz4QU +X9tK2XACYkrYcsczX+mrwa61dfVWW2ow0qi9L0Z61GQEPM7iLxNQ1/Rn6UX95+0A7/rh0+TRtJrX +9IlKROtwCOSf4E/p4mp8UQ5NLyF1TWFKDHDzzrsVMk+bo+VlgNt3UB9MfBtMgnQeR+0mSfZSna14 +OuAbDpSal6nRrgFyCXU7fAH5LIaKg8ksc4qAYQGxHz2BaLN/gaqWL1A91xD8KN+HrVnMqtQ2rlIx ++oTADk5JYccpn0qH/kW1rDha6HRg1zTdrVaPYcfJcE21fwjAONcwja+9VN2dkFidY80glG/qsOrU +yrVHs9+CNM3TdU5SHBI071aeXljK6xb4h745MeSZ8uPyv1ApuUfPMm/wJpv5izL2hi70kVfGNME/ +h+h298lC0BeIvyQHXRA0H5KtSNMJt2RYZlZ94CRo0bbOhoY+/O2c9b796xl5UEG11V/+rw06HWkY +bS6by89KyWfeiVzfhqdPIeLScarmkLKHuW2XSpaYh17aUD5GbiehBV4gfwD0OadtRm5yDPgdw6vY +lRkjfEGjK3CPybTVbeTC68VsDjsT2K567JmTxFYiKjAJ9CGGe8gTAJD/ml5K4tk6kYjIZFAHi2zn +N2V0fzqb8FE1VW10tuN3yb1xL3P1djpJb7N7njdtnpGYmaFcBxi5Np4AG2LY9sTO3hGB4W6sJp3P +z5qjFlYrSF8OUtWNUevXD6+8c6hHLP+KJpyyWxWMvZ6cl7zg51xrxbFBeIw8qmQy0N7UNJxD/myQ +996l/VBNHZS4sIHxlXRbBY2i3XnE7pyP9jo2pGtPmy8LHPKuArMJh0bSRb8KRKw3WcYRifCBVsAf +Jr1dwf/QaOi2sZRV/QgEt53ayORkBtiLDIPsMcJIuuPwQZLd1+wulAvFxiIKxvM4I+QP5HSGP38G +CSrDL3eKlC5P/NlzNPCCsX3b7GRty8RQxntAo4Pck+voIBbob4SQ9RFlHP1aVggGkYpoEH72w0D7 +OQNpzZjN/aBFW8xcnwfYUbwgC19er7gO+A3r5Y0Cj74iOkX21MLf1iJJonmWE7SsmQ6coRauQpGr +PDB9ODV3fVnq3dA6xx+SjlzG6zp4jFZrYwC5paD4IU2RZ5ybFblQOpwpl29RRwjieuo+oNJrscnu +ZrYA+jhy24kmBm3/FqXOiGd5hTCW+90j/vTrlRPoZVfoLYkgHB42WqM8hi4W1EwD8AQGe32yet5X +4DC4IKGH3fR+2wZCGyP6sbD4x1b5YIu4gNuvjyKJnC5Ni4g5NCeorNlASPbU1BjD4nhs3RlZGvN6 +ptHGHhteBDCiNLh6odY8mTkQA7ZCIR3c3HuZBb2bybzsSJ4R7lVoCa6zmbVjvLQe73t/ptL/TEOB +AebMziHCGFtPl9amPNhnZfEGUc15tVTkxBSt0aBGlPE8UBxnzqFGyD1UlcxwEFx7+eYiE/OrU+uo +xaSqUEScUfIZcS/QMOARrG5d2dWZD7ZiX5GNePjX5v39SMJbV1q2059b1DxEPvx5CEWzLIAmSZYL ++1wddTfpw7foOQrRlnuCQuMt4m1I84fWw6TVC2f/plLkoPrxg6sZ7YuupH9vgHXAyjyqnrF0eJuj +oxQgDHSn7dkn20w9CpXWouNhciKdzrgK2YZ+yL8pqAFJNmI7KTY6VgcqHK0UN9Kb1+dDeCyIvLDc +iRpYWa/tyzDT2CDIWTlC1nC8yNDDU3Xp6bQsBWBWeHzq+8tlpzaI4HDku15MOdTGVSA/71iuvyBV +fa26hMdcXdJM/Ckv1OZxnERiUNh1QVGJdUhs7q0gw9w5XIzfULKV3nUMt8Xx/vD0nirTTEon6Iq3 +oeW8Pb8xI+Pymna9Oj4zU0LP2SizLUjjVpY57E+B/fdoENOjRBrMygNtk6y+jVR/kDZ1UOYA7SLP +U61jihbKewAUYpDmQtcoVgnm8rO1cZykR5TCOUy0+MKONITXoPxflFmPSf27ctQ+Ck7wFNvqTB3w +/jwqVAsF6Lp906k+fGFsdOEqjn3Yre2YBBTVIgKCpsJ6H8J0t/oQWPR6ZuWx6WZyJWPrLz7kZTaM +d/gRXgN4ND8d+zaYJaY6CdW4Z9HIHdflniLnjS9OPVlAo5oX27XQl9PCaTxy0+J6afvVyNFQCpIZ +05oZPG5H7JFy9jHabv7uFmkynyA5en12CqoR6ygpwDDk93022Bq78gEPN8ZN46V5+X7XQJNbM72L +4okrgYmELgE/SG3/RwDGPe96/EsN1yhGvSeuUuPd1Bgl7p/hmN0sUPiD0eh759vkrHvZrRlYCos/ +pMePfjGMSNcZP6R73IwY5XpQ8yazJYF+0GfVafWEjEovqmJVYqx9jeyxlSbi8K0bLZ0Qpy2HvBgP +U6APbc0Z2sOKzJRBGF8ZX39W12oLoRSvJoPylBclSr4mVcLKyLAw5ORq9iFsBHVxH2qIvjgz+3xx +cM2uG4BvRCnPmmtrwVakAuC9vFavdNf+oiqVmrrsS5aiLbe0kTA9CVyBejJpPdwOFROB2/H6IVIa +Vz0ORF4cy2gnXVF79mMej1iFIWYxxTbR9ofrfVkM1tXJ5TXUc6WENQrnIhlGgBa/ktswewF86zmW +gHhy1L6GOQZUDzsonwr3syoe/B1y/8OSIsLfrZ1uGxJTd63M0Y2Qr2mlUZ/lID5jW8sVTLcOn4ec +dS9u0lw83gEifhPmhpQd1hpOnsUIAmbVVWdjhyBejoToj3yEE0K5T8YMzu4t3w0g0P3qqloeWFOZ +ATDTlwD9/7GPQgm5OgG2k6nZUzsQLmQkS3HCBzm0bhYDf+p1ldLZV0MqFouYrOVYeWSdW6QimvxS +w5oedOsGQfl/WBn7wblMS5sLvW/mDsOyMw3QQH8hg9dl4npm03mVgsobJ08rehf7Cj+wX0Wb1eGh +hcqrv1uJqyanvCQwaWZ5FY4JH1CsKpniTOX+JLqey2B7gy5Fz+fsWo1v7Fv8XsMkMSXyVeaATZmO +wRlkrNUBPpEPxFrPdcK3a2fPcgjEGOy2XkKL1sbqia6nUXgPCv8qrr+Q40VGXy8pcbyf/wgNhqMz +K9BHj4Wu/ppm1kUh9I50udwiPBrQyq/hEbJlwz1jDiJy033BkQu/FvyVaF+r3AR4ZuCITsQ9Sa17 +Zr/mTGNCJKZVsBZfPfoQ12ZxVqj12ce2U+tkn6S8FHmX6/HB+Gx+mbVpKS48mNYo+RruhPW5JqBT +aH3G3VJOGHWc9sRDbtMkaHhCLsXYQyEr4K91j8T+w6fsRLqQvhfUpm1MfvnuioEArtxokZalAyOl +SU8tYOCRzXKELN3NJp4/Pc3TidgRFYMv1yGs0JpbwPCa0iZtKI3/O70i4omv/SQm9jDgLiLMGdGV +iwQga3GJCiDCkKApw8h4g7okDu9TeJzF9zxTswiuzDrlWfh8THiIaGom/k2i5hYVeVVUwFssK2VH +KumCA8lkpDsvTcaH21wZNQKxVytkErtLfvgqoFwrl/N6lYf+trOe8CWXvbreJ1BACmxR6E13PjRQ +ZA2Xt79TyRo2gu1QJ+OHK9fZVBNEYxE1ppKvGWnOubEHJO0himkRocN9YrKrFvmGFHmDF30NaZAK +F4yO+UPJqcv1uHdhVYwvqWdCHYDNLRwd/gHojxRwo3JcicB5M8JxtJuhlFMtVotd2m7tl8eKMpOw +pTXrKRPL6cLDrp1Q8v/62pK7RpWUhH0zW6NNdVGKdvy7xr1GISPnR7scNZaWwPmdyBd0OKie5sY5 +wa8cdPCLuZyAoWSiKuY4zR7jrFKROEcUisLnSy8DlNmpvL98vGSAOJEFZoINUf4UrkopThyFBLaN +0H8EkDj9ZIyNbfT50HxsOnpZOKnqKamVxE1SMXrt49wK8EBocMT1XmVGz1gkhWpV6x5bD6TgbHzT +KIMDtdslzOHBt9+uJdtHKGUzbggw+egD2e4KUUnsOiAaT6tdffSpIk1an6MzDtyKodKvu3VdrooO +pnbmLoat1r1I29C6ru7pJmgOqdrOh9pyCfBoLUe2gg2ea2+j0suyybYhm1Dqvpzd0PKcNlXrVfB2 +hF46HDIdLTUyAgkxoxK8T+QAARn4fX4lWzjX3Od+WXuVnGF/ZOhQR2cs+YKEjnURTcxGhNjxPd5n +d7AJTznqTS5/FwoaeQtavlEGUZSFW9gGerY0srfIBSBCP78J56wjZHDr7iJMU4KKOhxDp49L/oxZ +ZS/rgZziSBwi1bE5vN41PjY0jWVTv56jC+SA+EAlxKAfDxkKjhy7crwBKhd/oXy0VlIzNIkGkrBD +1L/omUVXJHynKug22CI28R98K6A6eaAhS2iiSuriNQXsgCr14NWUgdhzwxh2vlQdjQceIvUmkF3K +gdwCZjAlOPx0zHNCELNw+STr1Zu5neHnLzeItLnP8UUzCYGyu/qjlGAjjvT/pwuKMnfTE42JSz+Q +6+WIwf+X4+usdb5MfiyzIcmW1imlKCSwXufYIKAJ+P2HN94Ls8v85PZ1UpAg4TVAT7kf0gGfDzBP +kmpTl9VeKCHMpGfsfae3ujNnoCdm4DJXdS9u4z6bYa8xp5OPrlKxL6HiGzUDKRW97xzaqm+P5zvU +eRKEPJ9a4BUQqI1M40w4tQzVOaxTO0sX1WlGoUUYggy0qoBy1+LISgIl1NTTM0kwveGyBwhmhYR3 +6Z5xwK9W+kWayiSJEcovxZOMfxfbdVTBTVAiDRYfPHxfWhL1uegO+3/68T2vn13ecMPx5Z1/gED7 +KntCZtmJ/kMe1I+5YdHi9MOO3cdZLIrlU3o8YgSVBRqp9cRlP49UHlH8ViP6IAcJiv82PxxZ4cPy +SagU52LME4KOTKHh972jTRH3xARxR2kKfXFz2iydbAzzLpAdWX23dcx3og0bYks+vEi/gWjsfjDg +KJfv/BB0Qt7tKlmfR7ZTAkMLk3CyoQtLsu+5CXLOtqPd957mnc8pN6TfRU7wGla92gTGzxHM1Avo +HXzxkQj1smSXCLyiDsfHHeBRL6JU9yrPPKTFjc7f/tgi6QVWlrUQMUB4/S6Cr+QjjyztP+i793k9 +Qrpx57pg0CuFHJZmVCI+AXwQQIRrgNmYbaHVQGnHJjWT3YQJJrGeWi6DKeavTFW9l/zOpdjv7gXj +pG0esOpgC9DGPqNCW0tp3sMaevLFvQc8KBPX7oY4ZqwHniBhjhCNFQKjf4ij9nSpmTk2Rw7aoyrH +HWu+zT8QggjVnfqAuvbm93ec3LUc6VEunHCKtijsFEWTko3ifoYd49Y1dHKod/X8XigXaXmDa2uL +lFeI+jwznQZH8afI52hPsnp8wZSybhDzUoIwCVKacqethd2c3O1ZRnzn7UL0AEHmq1ddiQVNKE8S +G+lKg8E7RrDOoJMKn94/2xYk5vLyHoCl+Xh41Ia2m6Ei1mPNmwQieW6ffdB/JSe7MAfe5DRNB4lF +OGqPUjxLJi781pyqkwdXn+N8nVumNobCxh/oBs71g0+8y29GR1ZzQk/kLdoHDyA2dBof8blhwlBn +wRDWG1WlOeoJlmAamOUrhZmV2t5jYskAZ5HcuVhhZpWDDg4w0QTHYw56ZslXojCdAir2eXHjYz3o +CIme8QogRLE/GJhH2mzV8BuEjDJJYiSQGjgIKY3s3k1LZ3AvgxsYLfuJbp6txaqzd9/aJdPTZiXF +9t+26XKDJgP8GrqpZS+qZ8U4i3QFbM92EsiALSyxNo2mOjhgdkgDFm8xQVKSAO7yK0dgcOsemAoF +Gai6gj4yvXi/Gdm9px0Gw7BLy3gx4IbAEWSN9YBGboYRSxk706qt11KDW3euJ+KL4rT0/iekbEqy +VjY9CJWnMFsRWUKccb5i20M/iTW1F+40sbyL7RaAyChIfmb67g0yM3nQjxRC5TYWoau9QWPARKCq +D6x8JMLLSNNiDbq/8XGbRP/XmXB/n8DoNDY5C/PPtBTLoMwOnC7K9Mfa0+tg1qHiEZUGxnxhNfnA +fa0Qm1e1mSO9nmIxYs9rGBd3F59yVTy5/9AVEUgcGgWrJ4Sfw/8d1rsXgP65hoERJEWrjYoaogaR +RE5qeS2LY8VSXGFWVBYCmgV8uQwTAFpP9dvlqbdzGvYBMlMwUkoAivIyuuYjeQSmvFYNpkEvb5BO +lQmK04jKcsXYw8H5l7ll3m15z2jJkKdhHLxOW4EHLU+ztJOAvoQofAMx50/nwg5/ffaiHosH1l/Z +1yJnIShprk5FE2LJjK9Re1reimkLcoQoyNR31GjvyQnJwA/2NUzFbVJmE6R//Rg2dJVTufp+yw// +6PJ+g1Q55PJmCXjssdbQH5H9XL0sgF6fJ6HgSuKzyHXElxGynG6TGz34QVZG5bin/su0MGWzZHHQ +XGeUD/vivhlXdUXcGiN/2QdcUJEBSsTRlFnwqZnB6uR2U9f3fbIINIoEBkb0DsmqkjBmm396pNgv +19XILTy+1zP7nsbmyO22TfzmGQUUPmmzOF1ZZWeTpUGV4mIpbyHX0iUXkfTSB6heTxgzilALvBjE +Js9F1F36t/SnIH9QClfLFiveMvj68WFZC1MzQuPrTppIk5Ov8UBjVkxZc3f6VhKqmwp8F/wuWF4H +/XiR+FWSEHelJJz+5Uo1VEzd6F6Ne4qWz1UBIMA4yNhOkKHagiILIxCItyu8ceG2jfs/ZfhjuVgG +qBWdKe9AeNj9zz9yf5qGy4TN3u3KmZT33xbqfCzFcv7VwoJnYFvNpuqcIkwWqsU7rAkzSQR8eNht +Q0KZpNpeOmZ8obdeszxTJkcZ7ex279Tgvoy19pPTdqSQGeRuvsdodjij//QfwSix3A4serGWON8h +7B0Fq0y0tTt62QJAIrnStLwvz8Cw5Uq+DBzvt/LQRsAgjFVAw67/2B+IVA/7zRsRhcBK3s3A4GGa +CN8sqRRxEb9xBlG4UEa0jnu1lizpJThMAsSkf6Vy3Bxd1oQ2qbqD1ADDVyn/U7te1Rqjp/kqzJF+ +2maTyr0vB+/17P0bkBAXtqhlHhn9Sr8YLxzAS2aRjnbu2t2KuzlkPvCgkPJDliBmxh7M0taRMKw3 +NxnyPYzgTk7CH0d6+TVjGE36agfhMsh9keJ9WRcYt4Suz4m/UQkpG37R/MSkIRB31lxJ4snRA8AM +L8CNMNICN3TVibmXJoaL5wSO6MVZD3tKbVOifCVE4ID7c5LOPpnvJr4xyiBRKTXRk0G5ZmJbMhk/ +FVK5bJrqlX77QYToSxVo9hRMwReeXSHELWMgd7JNf/xqBkwdOF0gdAg4ZfoDLJJgNOvI5rtn0Bm2 +TzTAYWpPSCJKCAcOXk3P6WUyggscVt17TnBybQnxhJrpoAwo10VZ+RAl4gIgvKhkPZBiAkCFiZe9 +36Hyl9r+W8FDQUdXM5R08l9LVh9mgrGUfcBk+2tp/2apigJzFxI/aUC4Ogkl3mKQ9WhayPm0w2DE +ADLJYDNbJtYJvSuziqVTS2YWpJ6GjbYtPMY8DflDswauDiLVe/KnJUNCyTzTMJUD1/4DBzHkEikS +i6RonbBw6sIOv6fXvzjAgYIOXL0giNo6YtJ9hGzk/S0Nzqe4UpZ4aGnIHbseoKt7VFF9OLui6JT7 +mNqggppgEM61x1cPudjZ75+ahnn+D0GrT/r+Q14QTA07vRjLAZgLM9A3hSoPUZ+utU18GjH0zPvc +vSwSrVsYKLW9K4OX12PVE1Tgj0tVZ2NCUnpmsNypydJ1bhoULzCfeoIcUhmd0AsEuL/eT9o9BMYu +sbUYzv9UQrJJYRbIhjDurqJ1GCiHlvOzYG1Iq1voNEw4flg4Hc3NrEPrP+xwZ5tVW7GfySg1IfgY +sdktLv44rgSdOgNd4yuEHFwahlN2oFXGy+miD9yqyGrYtGG8IxEPqc8f9wfovRTQ6IyIDLUItCQP +sMCb3GGVbIkIsiLadDY33LrjUsiHf4e4/BUFv6K1X1UGJdYMUNJrJy/ms4y/HpVkUZSgRrHrM8Ml +hi5wgMSm/WzQ1nVr/uNKJmiUCLRXTx/JNvxf01Pk9ay5Mp47ONiCeCjXjOuI9caekIEerSPtwvZd +ntt0iWMEL/vXUwHeRdnu65Wfgh1LKjtiYKXyh8GKCF3tJc+U3S2bSbuzMpG5Fcf3/BNsWmfJ0VYl +mawbEJ3m4jF8bDZbRMTLDTi5ia36HDO21fLgv4FRzLEiUCwzJIjUo6N04P45yy0eV9aTD4IzcdUs +7z0laYRnq9sRQ2QuyXmY9dFGbx2uMaCpbHS2svWzEYvfQfMuW6aQvCMTF/e7rwCQUrw0yNiaeJG+ +qJQMP8Amph0s+pMHAigf17XseC3Ka2Bj8UL+oO8azD12lKDb6KMBDFip6yjSMk63uRVc2M60M56E +Gr84ouLCgpuMix4prrN1IwH3SZT34K9O355yh/0bs/NWm8J2wMcM0jr3OFgwkYNg04VIiL9pyYk3 +nx403Z65LOE1BEvPvwgqprv4ogZwCkHmEuUs8XAyUSl+jINymYvWQZiXWqdyjmZgLTLBqacHBMpE +pbHRZjX8PgtDWe0ofhb93kD/ddT4dBFVSxmCWnvQB7PUd0AzzOZzyc62Kt++wPUwEv4Jbubsh/SF +Km5sL9LrzbzxlFRItGilJjheTubGIBjp9FbdF9sG7sgHYjruv54VKrOOHMt8VzySucXWBuU3PvnN +H1RWeT3oivyEFLcmdErZP+j5x0fbJRTVRyYZKZUQ0Q84zVYd3qusm9sHclfXK/Uw/7rw/sYRj9+u +bxT+VBnY6Akk9mE9+QVoiiMb79XkbkrCF5wXgwdjTyl9koBnScTnng5ipYYiVI7D+d0yzjnvXSkt +yXP6QbD4f12LRHXdi8U7RPQJVEyli4AYK9kd6fDtz+B5FtQeIKX9eNdFF41hdHCgPOyBMxe14YgF +6KUJ9mSS4G5+FOy5vbC0UNHF1RNBZMSBb2NO8f5LD+VG81/7bzRT0Ka855TRqKMRR1oHKDLHIOiz +vBVcRS/r/+Y3X065IBciZliGVmiiy8nbzmnfLITOdMIw2ckcSG0sYhFe1Qckr/0P+XXp/TM8tPmF +Ov4/2qQSUsssn4APbtWBYbTNdQnTwUdvKHAiKr+XETGM5OAmxggRiiu67NpDAgOLyXsOWIEKm71X +jI/+2lV9Xng2pFuAnFHunCWo0UdPeZIilR9K0bkaJU7A2VNqAdQkJIt8CZ7P9nD4NcSoZMXu80Vf +jUTofhEOo5YOAc44JqVoQLMkC2iZCqYk0Erq0GKRVG7dxgQbHVqSLXG7u8W9ZMo5xyO6uEUYlTdR +PLFUP/4fyFtDpfHn6yx6K3QzsLWIg3DOuv7SGsVdSB5FTK9Kuk3aNplhX4/Rgnjp/lf6TE6dQ5SW ++a1drmkwULeQIG967l4X2i1iydbYjRi6/NwoFxXir1oSY2x/IROVnDqAbN1KZDkpqfLgksY3hHxx +Ho2EFll1Ph59zf3V5587AZAQ1ulkYejj7PsDkjS3a1DmP6Da67c1ast8NcCigMuODdjYTKyaxIlG +vkhJTKSowcuV5J+9xgRRjGCjBkuGIJpQKxf38koxHil9g45HmiEFL2s3k/MdhVg+nBT3w+q/X8go +LBVC2IfLCmZ9oT/UsJriG/Y4WqDI05X5uC2WpjN9VBfMjps1mwTnx4wfCATstFxh7U8bq04C+kvq +KKFuU+nLmLduJKWGPHNzk03TCltZvmpf9ImkTea6gpcJlKrdbwS9zCCGMSJRyI6SWzT3aRnZTS7x +boDU7VcSQHakiNHWBXdX4MLwCaX7kdykj4oOJlchbStPC34693kfGxo9N+ICzNunhDKmGLbzvP89 +mfpHAaRu7FvqrVT5AfjpDP2WbMLQun3A+fR3X5CwTZ0vnVOAHUXhW3OW/d5XyJ91IEItqvr1R3KM +/nOdJHq8YjADbX1Gka5018DpMZSqs55iPUyUc/IJF748a2KXaLpUJamIhb78lpsP7mtIzD0olnWc +LK2XiWr/6lsPLmifCHVY45E2SUCejttpggs5hwct77VmAPVpJ2ERFvP4QNUhu0YyhumCcAwOqNSE +iEL1njA0GasUdEuh6oo6nrStUzQmhJXx1aggeMRE2JHUUnIKogjuuSaMqwqmbBgSm7VqCsnpzzTO +opjJs1Qm3Dq1qTdGFw8MNHU5K+CZ+rWOPVUuHT7gPIRbpwbTNBQQRya8ahULrjf1IDcgSMV6Tt0g +ry2cgTviup8zJf3PvfZp91hEX3gDcaLMJ4dEOqNUpROWDgVBVBLaOvn9Dto8CAZ8dKiaxZJaL0bW +v+SkJrGcqHDpvd+9TRRSMJuCQCkIAuuyqLIOL8XJIKoctAhldry/P9l2iCJE/QklbDZH4b56/7j6 +Ult+nUXrpV4r7GqpiUB+lYqNSb56XdZusoIkyHCZIYidzq79/u94wCvmhWZwdgiOAZh71G4YppV/ +AvbQXAzstvC0vhGHOGZgvaGDk8l2TE122aDgKjIdpSE4jjgpZLZtyw15qL3h3eq6Bx+xr2E8gpoT +UYBcBZfdcKoZHdMVDvaj+P7uKlOoibt7zmLatKjUXluXruakOyAKAkcCIktGMm1qWvv2yQdeb85p +M1C0IC8v5Dw30yu//3b1feyx3pq9Z/Yi3m++tME24VGaOhUT2nRI+hf0g4zu4W5JVwReqZpCF+uQ +DHgJAepXlEDqeC4QLhDUToPn4HzM8ILDnUQeHz4RZc3y+Yq5RttoV2vGAzkRg54qjKh5JtUb1687 +G/2E6lcv6w/k8VEI2gZbtRPLpbQmB4kWUPjgh7N0BAcSkIs+xs7BD/zZw7u18y9TD1V859GcjN/A +U9tD/SpC0v91xURU3zOCqSNZX7LOz2jMTQ42strCh3Yoz1dmZHIi+7oDvIMXzfq/FNVvjg24rHJk +VC2H+j2TJ7TuxuqNAn6Oj0TZu0IHbjWLeK/bHBYG6FbIETd8Gmtt+4q/hqpujujvxuwvu5TERkgb +S6NWv9cdmMchXdO8dqoOFqtarcjMv5yZG8/68aQdb7zUpZmGg9HGMh5fv/LdECJTee48fStbdu5l +JLSLaGc9XYRViBjcXux0FnE6V9PN1dPg5NcxqQmMgp131bUMmBKzPqI0K+o05b8w76LQ3AH7GAnd +ss9/hCMZKolqhSF9wezwmqdxwjI4cf1WjOMS19kDYbe0s9z9iIxkkyr6NUyR/2tI1Dm9XCwp5JVe +VuQL5HiUSycW+hUcCIhrC20+QKhtBZ/Fqrc4FuFn6CW16WdF6sbzoBjFm3+t9ZP9fkNBCtVs5dpb +cxQnL/hAgKqJP0ghzY9rq3NH0XUfMCMeGpkjvsVUyFJgeo42b/+PCeK1Vr8DtipzrBvULQNcYxoE +Vni/zDnXpWa8GtKqavRt4tDxoUY95u59KL0vWolqgn62daARecFZsqRTjwUe+N2D3BEqO2i1KCz6 +CTdBcEivZRRtBXdKjNRa3XiSIW98O78NJWoTxo5xUpQvV1MVSItcjBVbPI6abxwkNN+esqEn5s0j +hYr+YMiDbArSb7Wm8mKkHknibErLvzyNv0I8X+eXCNNqUEVTxB/vCR9FdUT774CM09ab7R0QkdNz +9cSwlj3NqIRhxv1RxyTuAvl8orgF5j2d1PQBcHn6GamwrLHaI14auewWbnhq/t4cy1ld7c+u7GCl +26i8IFBYHCwBAaz9anpwqh9NVMtEPiEU15Ou8pJVaEGOp/PCKclkYmqap0c90kLPWQzEjNxSIINo +p+A4JcZe24GfJUr3t/vDOF4623GTKrfnJu9Rjo7C178Nb3HbJ1yqsveYpgpefa42DoDKlatr4KdY +P4Q/A5dFxhbskYsDgLC17is1FmAsfA2XqNgdGnRQq/w1eivd7ixJl1B/Up56dtnl25d/0pFvX+zQ +tkOJay5+FRwdHxt3qPhzJs42DVkxIbDWsKBuRYhONPqwlX25zFuTIhLq/VU/HxiXUMW3N9iUgAuC +OHNn/qARgba9c1zQGsWoq2XHQ1GoLUB/82mBD/J/EVuUaWIvUWnZas5bVPuFLnizF5NrjAZtoPbi +uWzQy5z3MFf5N+L2Tz33EuqEaP4/3xsLtCsoz71gOUR22ktlSvshgfNvu65MOng0qUurlfOa++uW +24Ee/IkSnYauXWZoH2H/iiMFgF5rqMWh6z9Q48BVXKZS1uUIL6gbScykb0DjAojVJCHLbPFGimRI +Z+4Ing6xFMdA7TZ+jgdj6Ce91C22GpPlbGQCvnGwT+EbEpL2TwD5Ddt2qrbuvqkyEknU6P9N7uBm +oUChrmGaNtVboAJ9oVdwTnNkbbkC2Av53O/bc6i0XftBGONok/q2QNdNgkpk4Yck2Y5FMlRqh/oX +PZ0IQEmkrpFhYqrdcoF0gKrpCfe+QfHN8Kfae0bMftT7SvXJLcVfHHcSyaT8lRCKLmNFY8L8oeQP +y5+3bS2eos+NG50lqxUejM0Ef5Vczdza/ymKfIMJV1lcyT/OQ5wmAtaeVt4yAqsBES8OdLgFZF1C +mNXrGCHEeOU/bltsSakeiehH61gwa1sH6GDokdO9ELdZhopL/n+MGT9J1nWU5T/6Mu3yIAm2uqzn +8D555GYi4X72TZQ/x2XI6Ao8Pa20wnSkLdVs9zWWYGmav5/Du5VW7bW5S2i/MG5e1aY7LirZ/oEA +EsHTC7h1iOi2xAbLtu8QzBoJ7WNANLC9ghpTqv7f47hF6QjuagXioVCjM/W9AMXoM5XTTNQ8IrjC +bL7RS3i1+zoQmv6G6zj8iOf7zfDLzlAjVOK9T6IxYINMtkAilzaCLEvDxF3UYq0sFfE/DZrtBlZ3 +bEk6jpK5q8xp5ex9KLGGT6LgmyXn3GRoG4TW//T51puDLPHzlyn90GP1Bk0jOdd/MTmtZBZnHPgF +0cjd4ScRxATc92Fc/QdW6WzDkZvdiiKY2SycF864PeQkwS1T+iHdoWvumIvrueCNEzEhz7Ej7FYc +tcz3HYTdrm/oEQH9Mrdomhl5cM7ql/7STorJAzDffRzODgYHr3AxSqCb5h0wG/TAyrFqZY7+gTR1 +abXQ6NwdL3d9RQiPpQ7i5vlPvsRJYhR5My8IJBEVLUw+gqlacheh9dJ4My86LVwzQl1A9WVOd2hT +LuMQl92zj0kFsqMxEqVt5O0YMkWuQnpve5qlMCscmVooybzvlY2LpESqgkm2ZFVAmTi+o7IqD49u +uHN/Z9AOeuKcEaLuiIGV1wh8t24cetMcQ4HY9y48YKG30z5qn7YlF5vMftbtnA4B6ueCG2lT7pVi +J4uU6LfIVklpJ+mxiKVblAnRvmz+du+dYoF4HS8pmeh09GS3avMVxmL13CXTQaCizDcCAqqqt/eq +MpTZfJIG974XHohlHxiwVGpr5edQuq0/Go+WppXAgoAL9hJ3R1zBCRC4ZHBVg0L8G2cpGe281qEV +uouVxlaylJIPvSRY0WJBw+eTPQt9ujdLKU3UtImN/874otujjoKHWPtKNZMczEOL/Tbr5tVRS0OU +1KVdxw0ea0+fhZBfgDyjBTR9+Ss90b5u7BhZvEQ8ABWkQoZqRLjK6TObT5orSjha/mvcaA5d0lJb +sgFjwMpd1FFqnxRPOADOES0bBdmu8xp4lA2FgJkx0g7qTg+R5HGX07iIfcez4C3t56P2dkWw7sf5 +Qh6FWPHy/RlVJpU+mMIeyHBRmQPvJ5amEO4HKJBG+MI3u4ExSILxsZk7pQ4tSpvXnD4VJZKPSHFM +cTL8FJQNGofabvooRwuhuEEMZh8rnpJVuf+HL3FeQxMmIfXUjbZ2dOVdwW0V85wUsy0/2F1MJORF +jF62KZNuLwcQyMXQyxOY5Uq5W01AiE+tZHXVHgOdOlGNlho8kdAmFVB+HYjTyPqKfdNWU4JZVKQS +GN7U0QQM6zXOlcOf9Dhv2kQ1J6v00AZ14WUcJrByGl0uhkSyN4c0YFYNc1sSB4DMDjG/FHR5xZDf +QrSZwZSnKeGSgm1C9gKgMOqPnOqTsT41HcrEtiy/EDRlsvd5VZ0wz4sd+0StX7D7vpESP4iEfgX2 +LYDGiumOQdelwUBq7VFVuAD0x/aiRAPxoUmjTwZe8Ja/gZy1ni1gLjkbqz6dMYjUFEBz04STNZHt +mAL9QIIH7mujRkaHCN9Q/FePvLvoy7HvF0IiGODgaHhA1yXBVZGJwXxfHtvoh7nB9AS7dMLigRsO +KXJtgAALOMTlZrKldqgik1lthUAsVjf/VxgCVd6cNvjfVIWgKlTxeXg3T8INPgGCsQzZ9aBIHXed +FcuKOvi2cMUL7klwLauORVs9oww5rsOzIcIlPPAy3aU50dcOSsdVqm4IeJqszUoIgqzxb8gA6WlB +APNXq1lUjBHksLzD7G4AAQoilexySLHu1oSSeuihQAX+6F5NZ66FVHFoLCu0Je5aTd5TDPyrofg7 +DIC2n5GOnmcf/LacRcF0WMdKNrPlIa0g2XgpbhQ7opIayflVQzJ6DDtfgpE2fSt+aQT1CI4+yRJz +SN03sntZbbHQOcPJuFid6eylfkOCvykhDMeKDEL7PffJabtU4TUcamd7EfkuQL80IJSkxy6jwhq5 +TnPoD8GSUX7k+Nq4fcFAIWh8XXbHOMbfcnYwU2Y+DMjhxU6MKXeNa+uz3BWNWkLEe0mB5YuzIVQl +kqm9KP0mgAAMLC1E1VTlfWnWVV+w7pFAqZ3Jkt9bu6iZ955/DjFt0DI0yU+Nr7BfN1jVQynYHpv/ +NEtvS4icTm6FNKOB6NPBomCnGojmlF/SHFt1PM+OEA/bzZwJhLV3YOYI0+um8/FcCzd3mNUQ+02y +kf2DK6Jr0ymsGVMQE+1jmZUN03gCzMA7RubeSZNuc1fclJAReyF7pJPHYyC65Bln7SFZRswDbtlN +D/uaxPfSI1YH6YhzeyykzXvYjQKPnm3MYmH9t34lVncpvF7qfR9WP1h9aA+FV+PrU/ZT2Swcgr+k +dgjgVLNtS7Zqwwh1nHMx4hj0zQb/001HWLRXi/BcgbZA4jvRKTDkGTu9KSc80fafc3rUKStHL8yX +Sp3J2gx4qSqgd88vnzBl/Rm5fwWlw4FdBLXpIQQ62hO6qpIMQiWdyrOpcOCaASJ2wbDCIY0VV77p +2zoDWz8Xq/q4w6Sd2W6Ut2SrYXkwVG4aJr2xlSPFNLyuo1cWnwMzvNEW5s+woTg1gpiiTI+b1Kok +PCQVtMEiJJWZbjDgEH4/lvKu2OpMKsbazaesAFM87UI/BzfqZdQ0Bjs3itn2UFdiFI2W33zI5AvU +tfmrjsFqqikLn1pKCvzIqOo0ZeByPKXw7eeq2wkWlkr2fp1OrWwQAN1YmSva1YaQEbLjBwsTEiwZ +3mk0jqYhjMU4rezA6vrv8GnQ3JAUjPNQm0bVaGVomp2zJ/4XTd2Cdh0dMNBd154aa+WVC81hrgZ+ +6Hhsu9O0om/kP3XriBKvCvJbT6+VdjmG68/JV6s+wiFNjg7v6wYDCHsI5QXXssiEjaPKw3k+z1FB +ffdpZgsllFFtHm5vzZ6IQv6PPWTkcNgqx7dk1eu438SjbruhNCzT7Zj3DnFDrKlZ1NtwFLhwgxH4 +ws2+0sraAbtWbcw9Yde9LxvOtLEGfp/6nVc8G2XOrJMOlojStJaKoJguKEnEc5F/+5JaHdpv82e1 +NypC7+xhx2FVCAoL0EFHdXQAXZRyi/4sNZkUCZ2ogTO4SYfydAHjiYjlIO3i/FVM2F5NUwQE2rg0 ++QbZfmS2Izfn7/7hlicKZeTPBJWufmb5PKXGKrKg7x5otovL2jEBwkXBsrEhpX07bpktnlSWXI4y +QTgI4ZTG8ZB8pDYCg1BMA/3iQAOBCXzG6Ua7XOYRuc+Z9SMtyfpmbeVbIXvFDj6TCyep/MTjcu6O +kh91eA1bkMBC1X/lmGOnk5qrzdlewoAB3WE7wu6p8v67m0nmIf+ri4Mvtct4z31qgYA3cXbTlDrJ +2VNJ6CZs1tu+93fAPWfiYPCNmXp78YKV92m9gbQ/U+XFICoGt7qbq8deHfLIVg8YTDZ+acfNm//S +C7P0neNaUSk9/hm2dotuY89wJCcy+CZftoNBfxm5TL3hcpipRRgckbgsWCJRUvRjwuMsSCnh7uGr +87ZHkri/I9nZ0ecGYZrCD/DiHvqfSahYx8Ei9IwAKhLM1OpmOfm5a2ofuiREBbxuDBmV3bocIH61 +rXP0kmzz6tXvE72z9h1foGwtcbEAHb+kxXIaDYnBDH+IXfVW4pn2dXTcXh7O++6Qhxb5LTgyQbV6 +wQ25Yks0wO3JFLGymLQqer04Lg4nAMNtIBjYhIhwZIOzkTjwoCZrAI8Viss69XatE9St2TdW0VTx +9rdK5U4ZkDK/g6IwENSJOE5OCSF75j3d1m/g5CqQ7yP86rZiO/e08cCyXmWQV9S46BsrgoBaQAeY +I4um+stHFqgt8DyZ/5ajJUfbCdSXnZ3AnVZUx5YXLPlzGegEEJeHOeL2UiyCo+coD3lcZ4UYSfUw +53S3U8WCHyaSpckWOaMDGecy83kG1oxMecqdEzKfdUBAK/Kq6EDDxSWJU43+S5ZcSJmNYHJB1IhR +HqLjX9pF7MeDaw+ZIT7ULySh0Op5U/RBUOBlBdUThqkd8VvrauVm5wUCTuziR2fl9oitUebepU6o +BCjVZtA7mFmhUlPDfPwrM50XzvW15/BZL2pS3PimRb6N4vX6V8zksNWGXb2rFCWrnli5wgjzz9nT +It6biwD2QhA9XgZ8C3S1A3oMctO1LLDla78TUxSpH4uDfmVTmPaNl6r3MGirzceLeDAx7Lc/VvxL +/aIiMw0nb9/vuUV7A6pGQo+QPiVrBVy/sqfJw2I6h4PGym1AtpR35LrCQUeTIyHA5ZpxJDs/i6YL +J0+N5RzwfDzmPYr5ezz1SotvtvqIyhlltT81huybnjidxGs6YiA1zACH7fiw66CNKfAxDvkI7fWH +0Kc/NB2VptBY1qE1jlV2/buNQnzfj2J1JqXiSA/RsNZiFHhQHuxITUsgdRPliSnsm+uk+s/wOjNk +wmMXnZJBHmF8m1dycaltsL15EJcIH1mmx85/pMZh+pH5tGy/oGwITAmjMdD318++thA5S01wA2xA +9ngaLffGye4A6FjRAt5WdNo8dFMjDt0PHAhvx2NF0a4JYW3S7THpx4GmO122HWClHRdbh90BmHec +bMdSMGX3O6YzBFq2kwiFiwKqeqdGU54m0KDvM70i9pxo6TnNkFkAkWZxoxjV9FqezbeanIyfpNe8 +hx7dbY5lZ91t+nXxOT5/+CS3KV+Hphja6M1V4QumjCM1i9BZBmcGQ3jblDB27y87zGsU1Kdk3g+e +gKQULtkylUI8nJ9UzcucVmjXLbv1bMNuE52DBHRS7uhUbg2GFNrG1YN0dbNHQD9KjMvKQnv3QQ4Z +mOxtoV8RZsdNr811QFxRxN0TDKWLROOho8HiNroaTuo/TU9VlLzD8VBccC9TMCoJU8qNe+/TlvBb +yrqxIhn18rq4StBFRDU9X68pVshbmC/nSAnVkZsWV59KiZALqOEn33M9htj4oBbYsEEqLEVxNg11 +laRzP5Slx22hcmQkZWsb082hFJkqe6neHyQR6YZRNWs8t4cyskDu+d2nhexZd33RFi2PudzleHyC +o2nsUWjHrIYaNHXuE6Y4X32OHtyNHhKwo/chjdUHx7fzRcLQwbPFde+6HOzk9fEr/ceIW7tc3gGi +Q8CmB5RttcI5LbZ9sMhW9n56AnKXTps2UmoVUXKpsIuoOgOHs7Z1gbLiWUd1KYsqaSKr7eTlCAX/ ++aTn29WIAuYyUicJBYvozNbtlCAT8ZRs52Ap/e1InqxZNFW+0rsg/y74zX4dMnFyGZVkcIECfL1b +FW0rd6bkqzUtUj3zAoMM3Mt+9pdvxxlH2q2JTEvbpXsmub7nU6LJAevxjRXsc9aSUF0LwGhrasAE +myDcmK5nCfVnkWsKCNOpP/sotfHbD/W4VZNQRIIAyphtjxyTm61ZtfgGUrIxM+X7w9L0e1oZC4LT +53fTEyRjj+zy3rWUxzqeCs3XcAYyISvp4WnbnIZLZCRJxdgTDrYwtWr1kHfOymKN0MaRXZNnSSzK +91ie+gj7pTyVH/lduC9P861mHkFSrTyTx8k5Q1FlnICuf77mpiZBBipUP3xtNzPYLzDo/ISFE+zI +AVwPqiHu5in9v9BL4eAlOStVjb+/wlCY78u0S0Z1QVI5aEPq3JS4W9mAPUXBMoRbYJ2AlfIbMHa1 +RX7eRFycE31nhIW95zVR41vTNG9rWtCwJX9MaHYqY74MJZ68eynMGvB3k7hnVenwtc//x+Oh6Cv6 +vFR+vX2u4Koo5w2eOH6ZjMoskSPCQJRgaPOKrk41E6QJ+2hY8sH6+gZjg0fYdTODnBotZpsbqz+4 +CLZTETL3zomDtwEnNJQUFlLnN2oGS3uzUA/STkhk9OAA7+RvY+lj9oVc+5L22EPjYSgD2ft43dos +jd85YUMZqvIqnYs0SExiPQaztd8IXfZG0XQSnUJJPHLkAfjBOPMBf0VeFXiBY4fD8SD1Z2vwPXJE +nrM90ZP36R8S720jT16yRn6NxN5K5j2/LvCLndXZ5JJ34Dn6uuKi10qlcE6bzIjKffT+eOJK85Pw +YC1UouicW2xf06uaoefNglqG8w8ljNC75Ji4klOhxjKKUHelHevw62L7Vz7euCsy+4BBjP4aTZ/5 +uk1ol3uKGkPMfCxhKczy6soO7o8S4fvxTRNaLCK8rV/I7pnptnhDD6ySWr8hq4klvshWLAVrH4mC +ylL2EqVnGm0hrCcjoDgXttdIFd6zTTaJsmqxmu4RU9h0CUUDLvTacOukuLgSyCIaRmRFYXWxFyHK +n3QJFX4O9kHbG8aRAsJWiQzVy9H/SaEHHN3HjLD0HhVV6qJwq1w3gSexTrm6PmEbXc0TFJFIAUHJ +KW24bds9eqrT5zCG5iE9C9sux78+mvxKs9THeMrSaPaLCfbIqKpgQU+o9Sh3fcunuw1NkJlFPQqo +ovqquSbEWiGfaDKGkvrEHNs8d1fCpPZqB8VaU8emG3Mn5AcbnuTWP4Y7rwReoJRWTv1iTxkuebNj +B6Tspke0qa7e1Zjd9llMwBffc3zYy9a9sBTHgrVtwPsb1ftuOZylWj8NlpnQTK40KptqgTGELV1v +6W6UAr6qGr8mEi9NzOIkJ7tvsR0wHufnvnH9KCF0hkSqzIbjZRX9aRJL74FpSY7Irn9wXlTZUIN6 +zsb2Z4T1aPWccQTAmoUOFVCv8+74CNxP5UGG2aoqyVaN1K+RwmtiTIhEvnGRe/L/pUl8d63ZVXTq +jHe0ztXWzYvsu2ecm81f9txFOd3H18nrqFlncKeX550Rcgq5iX1vU4nzGen/UumdGKQrIxd5+tNf +qHSuIuluIajz3DJuCsBIndNLrD+E9YHWPzGHvlkplDHGJfJLhfC8kprZftL8wxVdmu/GbeKgddxH +I/N1SqQP6HaQMBhMPdmpAWrzVWHU3poWx3fXNIY8ssdqFbpuC9Rp6murVCO+iC5anjyzaO+M2ZLY +fDKDHDeUw6Kik07AQIGlDvfUflcrCywYLFMVG0JU4Hsq5fP0wZeawvD3LWf4tWFm5Tamx7acgR6A +OR6JXSMWcNLdoKJ9+M1T8eOGXZdoA1LO3diTGuHipZDcNmoZ7O0OYh8JAC3foyyr/OYWpSR8RZ9X +hzFqcwPTxsvESKCgZKsgzWlrzE0ujqaQR36JNktPapXYBtbSS+LFFcqNVT5cMM4SSm4AljiMGqg+ +OftmDaJz7cpVbSkpWKg2OG6iGRX5CsPKdPXqVoIwgUKrfmwBuT0T8WXcCmoIHqN9nyE2c7wldMrr +pkS4SzsGbwHEknXXbi78J35ToF3n1p9l1CH5n4fc0RLg+qmnHBAjKIG1WLAZoVU4EpVZyZpKmHnj +HHBgoDAOk7ARbaZ3ZFqSIABaTIefNE8qk2IYeJ3jtSJPtG7ZVx/dDUOE4/rDf3XoaYaDCi44wvkI +hX7mcpA4OJGtLKD4H8gEZN8WdXiDXQP9Q9IqcX/kPROakluskSeQkIuo4hgKH9TCKt+koI9Y5MIB +S6YEtbo0sT4wU7YVrTFq0NJryMrS7Ix19as81ctFZdE8JeeRHEUHqM7+ayxRx+OC1lbF3UxqapoN +IcF8fq4aLvWP6NbRIPHhQ2mcF5St0B/M6bj0K7vTYx2yiVIQxfdOUB1rjxc2elcKuOmvi55eUDH9 +iHXWr9jvGhq17pGfUSY+uhkMWhT4NHXRHI6upbEbnMmv2ZDd0kkKI9GiTCcanB5hRFo4UkglC4A5 +MOZEVnflAfcYqF/+3kkPlHu3YUzDmg0hv2Yxov2uzoPl+zmRIDmL+oxraGok/OXHUdu4SANVZgu7 +qXXYcnDEbENtSfFMEj1wgq4ZW/Ud0xnIuhlmAb6mqci6PNF8uG0H1UOBYJZeqfQ3ysBJhQQga0qq +voLn9p9OoCjqJ24X6yV5j360aQ7UPBHa+svhhQbBzz3rk2rzC1CPJMYs7r610RH+fsBGfRkxltFQ +jzNHLrfdMX9Zj/r/CGjWnlGUEYeEUOAi9oqGT8a0HisQPk3js2NLsI0JlKhqp/fMIxwvC0GwzGMS +BwY5kk6r2qpPKAYMUrRVZ0ykDr9dyUb0Z5dH8sFQIbTZv+8XW0LXAUjx/UhKQ/YjIgFrSgBPmJRc +1x7hr1CUpskoDvx0jqAwLkeuZxWnGDoj8ckcnItgLbl7fZISTgT15QN80vV54Eg3P+uRc5taRaL0 +/U5vAKqDvhE8GbRZmaH4n957TBawvCFCoGrcBCjCoBBhFnexTDmXdq+QWqC0FRsPgwRnQ8Go6YQ/ +ZLwU8qBr2qZF4zg2Ym4qp6VbS+yfUFvaToBxLQJLHujT5MzDOHXu/1RDRgX8dRWy1Yp7Psx0O9yS +GYhXlv8hA6d8ZNgy0E9J2SEmz1I6jG7plU2SJbnmE2y/4796YMs5dFmPCpUnMnTVX7ChC1g8ptS/ +kdK36+bMkh7j2eWeN16rmb8o7QfddOzBsrPFewnOL0hdA8c7+huj5KMqmjXeE1lzI6WZnSZc8Jtg +39caZ6DVgc5DM88yFbyP5EmzxaFX7R+vsp4U6uZ7ayNNdVxAQl0Fhlu5q/qbytZIvGBEe1mbjUcx +xxMuyZvVE5fONDsq8jA9p09JgULLblnoC/dUljuy5+ksE+JqUjVUnLec1BSufvIsZ3F7S/9jDzY5 +20FSoWyeG/n/7rs5kf4DpWDzVxsJl4wTPUIYNBpIGgtdQsLTmxcti8PVYnQ+OZBN1yA/r0Gt1k+E +1Q+DLhSckHPDkvp2hoW8sSSBRSAzeZjaoHkbKN7T3MZa/9SFIFEtvIq9ZrxTyZ73m6BSeihphyfu +P8Y/5V+nTDVB64sdaYbZWp34Dmk5B2zdnsUWlvUGsx6HZYP3sQH+Yb5LKZhHStVUeqjS1beIxuy+ +JLmFNKz3budirrj6x082geL1eigSoW13I6fM8tkfnAFGlHiXJFoK5RX75lGs4DD/IztvFDCIjlRF +oPgwNLTUxxchwOke6loUD70ZIfQl4A+K8cZDV0hG4hmPUmypwmSEyTuB4lp0iM3EvcKx7QBjCpVr +UcwWIsvBg3boHmhtEuqy1kFqma/ITWe483nkg4dzWfNMjfuw/PP95WOZ59SnKJ9Ij9Rfl2qu+rSp +IWHtVQZWodFQQo3TpN3I5237R/LcmaOub9kL8TcGAMldIAGsZJ3FqBXsV5rG8kRK6HUb+1qvv/eW +IeuGiHChzHUXDRhQUOl67snFj6dbvRqR4xNdtyBEskB5dOjyu1/yONOMWFsfdR2vLGqkTaGCUQAl +rl2AAz9YdYHlHZPdfveGBQywfTIGAUd9V+aFkaWi1vlAuUbL5IQttoOxdVcTRTLc8WZ0Z4iEuPAB +tzuNPazPusg+1tH61Y6y8nQQeox9OwtqJbG8JRpfFA6N34tnnozTTOxiN2AaQhTbM+5qarAPtDIK +05VI673szQPhPNb/cucTnnc5XJTxTyV5r1dDdYa9knyDMU4jcxZMbrx+zkd9SEpm2krAxo0yYnHL +AIHLC3ubIwnqIlJaMxBTHpWs0Ri11jRC07iicaYgPyTbyq6C6MJTEYtNvvxOvNWr/c3KJh1DwetJ +es/PUX63jKiJay48Unw3EjhQm1Sdo5zx4ry/IorsxTEZXfcg667rYVfGWo+FQ8UiNHSeWXuyXGqV +ce6qGcAnrJeS19e65KXYgqXMpFt2qG9YIG/HdqhKyp6hXf7XoJfXZVH9cbD9rD2EKlEpUl1tNPQc +bVRW5w5CqOd9pHEemH2kxC2t906AUn8eSM0Bt1pCCuznjqXMgwE4O7xhZj1blSj3pW+0SWmTKtRE +QWaO5XE0B/t5wlxNBNc43w7Czq9iiqgBrFqh3vBRTteWkQsLQtDXCEup5P7md+aKrcojqjJMVcJL +iwmE6+6uGBjGe2kTSVIrQG9e27ovxjL4UA/sQKskD7JrqvOocEOza3iT8JZ2YmK+duOmHKj/YAZp +grqcwQAeqc9YPfBIklOuW5QBknraPDy+7I+1I+htLD60ET6NxOcXfBPnVvNAaALNkCPNf3X/BC6o +N+/mWdHlHNCPrRMyUYetS5MdPOamlQRJ7Qoo/Sag2MVi9PxyLK0XnkNjxpyK3ex1pa94EBJDqPov +jf14j3ABsjxmA/isMo1Cx/jmw3vk65+i9hj3mzQc0RdpXge4aYvIlW/ZZNaZmZLRjiJxxX/fxrcO +cpbr74XNcUjUydns60gvWcd0YnfnNYrqshvVetatNYj+2KJM00tHbNBnJ5cDFgMZv9Ll+JfC4BSr +4D84zAmp5oswAuFOZ3sKRUZXbZqsCF3VcQYpHugIU7EE8CyV0aqGUWjv75+U+h0k2FnW3kxpYfxR +o3rr/+crdT2eOd70m+K+i3K7/NVkIcmzTflCOfb6fpegmT5wfO+FbYiyj6tzCjN4avQFV3j65QQS +nYf720vy4DD/Z0Leq3oBd4mzXMOc2G1+mjrk81iYCx/l8JwIWklT3O2cPXiX1thWet2SqRXDMqiD +NJjEhnDbdU6+e93xAg/8R2oT+ihIuRd841z/yql/s1XyP737Pyu364YfrQ9Z1uyQh3wiN6DOJJl7 +dtbFpZO4q7kD+Edhj526LzrXU/LrYev8ianuX3FkpQGf46Ukdvw0jq/qFsX4DyvHb1xAI9FwPSN5 +OeHaiUp1ahRjeH5zpy7hPRM6qIU9ol3/TdDx+Z8Q5MS8pW/N58bWjtAlPl86aJhfFqgb1dqucqa2 +cv0rzPsdRCul/We2Ziza1ICJIV3/YzgAqOKlgZlxyKKztYbj59D1TIrjpRq+dvT7Y/T3PMPOfujE +p3fM4OVjZg/3ltzaEc1bxIe1sDnp6j8gEWcMz1BoTOLqLMWf1qWa+otX0Dbg1TQm5zrjU28SyVdk +KhRjKVFB7B4SGHy79AVec/XFir7p2lJhV9Ayr6jLYM+TgxngpduVphtt6a6pJV302+FEqMQ60W7B +JmIfWJ+4jaJgtJLQNo1DVMBUqqwXoeT1FwIFbQufMACZ2NQp1k37puHOSnlGhfo64yl9LUL3ruHA +baZwQ96uVXz7HPgXXBPb6GEl0b5fZVf9CQcyfsenagTzkU0HolTRxSoNIgxdUpr2/aZqb6xCeJ0t +6+92Ch/4uWf4u+5/2EoRDC5+BC/o8L2NwgtQeXoH6AHqxbkTqEKMNZMGyjqe80foWzj8gaHNxl2a +fV/hyMtaE+i6UTLXMXmvZUueuXxv/qulSrvpPE8wy6l4pLniWMhV1fZ61u/nkBbevryfLWboxGpC +2J8WxvCKpd3QdeD8IdHpJEysTR8pyGc5WhA8JOXpoCjjjaU1Q/a8xV3lDKseubr8AYxLATI3qNnO +VCwB895HtcFhOF105oaZpOaRfuEic91yisG4PrTHGtBK6s+Vw4V920mxlNGnvdWBA6EhytQFfCaf +NRY7o7jqvuBUqIe0SBbMaihl/X2IvTZzRUEagcle8lTSDLjtWRnFOphZnPeW11u3w0xslVTeQR5y +VZz99nBbNcdnYb+fpKX42q0pKVRovYdVUKAzhZP2Yljd4JjYkTh3Q9XEpMwGbH+URUHAwPjXHG6y +Q42vRoZqudbrpfWN5F4iAtkBt0A1xxmVJBzdcQ+IojoGUq2onwygWpt6DRVFrzBSqLhY3huwtreY +GEm06FA5+xJbrFqcyX1pI16+dcazk0BpYg7fXpVPVFySzsu9lKP+3b4Hma3KqKT02BWWjyagc+7y +D4jqWz/xHTrD/EB3TLKx46N0RfxTkIWHQMZNcDzg+1c6a3/v7qRE8Omj1w6KMKVMMiamhUQv19un +Q4UaKYbbuHrkwiZMkr03YFGA1aZEJ4gdViIiZT1oEIbuwzbD1EtP0CjbMKK2IAqQmXcZ9Pz8PmYK +zdQIMC/BZ9HlUIMWmuMnu5jucdcW2k7wuZutBiYxIq+/BvMU7KWY7jgczfJJZy2azgZoFVp/djfD +rV3SyNQucIh27ILAkNcrQeHk6vCOcBYpGL4aQLUqDyfKlZAHVovEWAbrT9Xh+o1SrrBUswQpfWKQ +SZtcXCE/+ckj1mNhxsmQINFBnJFmSqQiE6ShgsjcMsINBe0sfUmkjag+ppK4MgtSTHjkgWyDBUv9 +HMjnSC5A/7Kd2fZqVewyjYiixc40j4Evd98bGJc1MFydZW1mtun2RfflF47tMah8nTGFIyaGoiVJ ++e7whBZMCb1/TEPxYjyebZA5GxaCSOo8/WeRtwzchSRJ7D4KUkgDCG/WY7BzKSvRB1nxxY+Kuk38 +YmImBKGD9bWRA/QtRttWCtvDli8gomWEXDukbA6UKxnA0mRkuUS7vX3A8RSt8CaWN/FzPzetbAJC +LkdILvA+Mlq58jNy5mpbGeYiSr5rmpQD3lxtq4FTwVlWrmTVhYYoJHX0UeHFzlMdlKjruEwO6vGK +5qGOnTszoNb+XwnCmm8n+YBjihnQVXq0lpKigpsvn1WN8GCHG1YLt9Enmup5oomMK5SzsxQOVxwI +EOjHBZPs+bpOT2RamflKta3ehmK0V2kX85c4sS0vsQZqTj2CWjFSztlYeawnd54jIvbkB4AutGxT +njKORKWDIId8yedoxWSURUkiusQkWBcFLMpilwS8WAw5gomdsRh71ZQDkdzj85d2TLx1lRJzxxpG +3JRLcBocasNW2PTRBhriLYdB2J/LXuiRDxe+tBn8G0dZwnxb1UYCVkHKGwlIt3AlfGrEDaPuvdXA +SFE58YpLm2w1j1PchSk+xOOGW8f7g4/Fsef6BiuptMLQEDsPVVfjaeYRd/DInV2QF/DbpcccJ75+ +t69vfzD9n5nhOSyjQUrUj08wWz5Ms5LNt8X4Erbe2lXFYToOM/avwCQPBU3rvRWJe/BrONAyv0mC +Rg+P1dlK29wXQY88zcvtO4j+wRLi8bySecgsEt4Eco2vHvWmYCI0iOsqMKS6MQdhvr43TbEEilfh +tACvHikKePf5RnYsS52u0zCjfHtFgV2RYgxPwcLNixSnLkPHkoQJHrT7qdsivL2rY51rU54dKG+q +9E7RKcI2e8vwOg+1kKF0N67TW0+6DNvMMzTK3KAAj8jWbCXWtPxSK9C6ZuEPS27Vd+kkeHxKQ8SP +Cq1Ohh60iem229uUFH1814rvO5Bniz+hh/iD1bD8D6ybm42eAMzPBsrLuhbqJZweB0IkAww+80UC +NAJf6Bt93RZruOo3OV6Yeu1f2bE4DhiAUNxuVoVGU7d1l3D+dASj7RpCQUWKRkM2+P+3mw++dUcg +q2YheWqMhK6k36TXa5xHo7u7KPpNgyDv7EjO7vwTRaqd85NgGRHMYFhTEWltha9AdhatLXR1osVe +KbAiyWZceVGensHVmusyJ91oMXkfZcKXRXO0DTmcQGcyvB/T+hZMOi4m9b7GjfldxJw51Hid06dz +iYj3ibnYHyfQqO+6Sz2i6hs8/CeyJXILPJYoJ93gwdrf+VN8qv2xmqCeVWEB3mZ0vIpgumIDrz5I +lw/wJa/kV3MUn8QH9SdP0wBNs09nyJTGJmUbxl1LLkJ7COuDgCxewzuTE07oz9wCQjs5Z6GInxTj +XlpdZ+I2YxWrAq3R3zmIK/7C6ap5yIHQOwskjSCN7+brnVUq80PIk29/FSRJXFE/BLvirr6YFHwl +WIrlw8d8xF5+GTYbBxyevF02GOZhuI0pUvD1RVYhs2uvIQfC/C7NHgJyz7HBXXcGSEAfRviOJcUe +HhUwYyWjcnC9WlvSUi+TQT9Sj8dqPwXAnsN4EtDhp5NjOWa2rbeHS9LjHRUhKhQ35bR1+dL+IPS0 +6i8SB/oN6LtCjfAtCu85jssnmJYPQkkM7jXUbQvIaoobaa7mlhH0UxrLNHBFArdQOUbohO27br1B +7XNV8iHrJHqU4iRZzAckHrVlA9LJa9FhXmx2alh/nYZ0eiuUdXc8YyQu2Y334zNg9g44ei2R1DjQ +pMaXjpeF2hDKqE3UciGvVjG1Y9BqUnminRsAJDrOh2ynl1OHvZE5DaFxaqWXEaQQiSj72l3iSXsC +PxUbk8q8qCw+iMQMZCGvA9qI36TN60V1YQcwo5KWscAc/YuFmjBWUu8lUJoxLyEW4zkcFsnblfgW +B4Y+FjlVp7BKXY92d1T/Jqzb1QJvJgfQOQOK0HfGbt1frUgQ4Feu3RJJnAs0+4Qr1ZeNuJoLTR1h +nPoEXgE4EP61qLtHlzPKPYXb7Ph+FmeyZuI2Iu4YK1ERwRj57OJrQ07FBJC5V3wokEooQbtC6zZ+ +gtQstUJJkqbQ5LX6huCfjEfHwitlG7ikqlVQJkJmc+EVbCpASP1u+RSczw3k99jrmgQzBa+D0m18 +Ihqen2cCi17hoQ6fvL9l16r+9D/TOtEe0s9NR5QRF7hLa2RMgwlB+C/RPScUStSPEvBoyRo58jEL +EzDvkamKV5zskTbCYxjRrgDSA7LB1qtpmO6MUISK69po4vO18yMNGotRNqxYYw3vII81TfPgnLkz +IZcbyWOPBWL2DQwQhhGQdygCeug4/h5YwIeksBGFE70ddHC13o3u3TMiKNo/Ji8YHKgn+SDVvTS+ +9IkK8iE2NiszSwPPmsX8703qRRmQu1plbO0GsZVnaQVSm1eln4GVVMQQIIAn84LR7r9bA/EPs7Z1 +GOMdT6SswWkY8zvDI9d+yVI7pGYPbRGRsm196xy7cqPlaEFadK0xDPsrllzoeqB9u/ZK6h0EhNAA +fVGCEF1FNNUSoKxRdE817TwUEMpo8VysuxRB6EbCUEvl02ucgYrIuKIF/M/bN9jGNdilML2xGPMp +bGW2zdBWJ+5QTmHA/ugZ8fla+DSXcWhtwA9h5xlsqBdhZQ+irwf2Esyc8HNSDmGt3HDGOsiuvdw4 +3EikOeawvZgh0J4yZ2rAY2jLtYTxpmY8lQw8QiWK1LnJDO/ZiqA+X6Lh8xmaFehfuRkg7RCuowKI ++tekuSTg9Gabs/A0kOD5k+Rk1AuL349EJM3LAoWbsXCDUI+DkFjEsjEw9VWcSqz9EDq2RjPfTy7A +KUp+IY1B4QOl1IsbDvOEzqq2bF95XpcxHBR4HEd2G3a2tUw2NXkfJX6qNI3IHlPT65U9W8/sjoev +GPqytEAnMfMzBmx3J1/MN50A+1Imy9bPc0sr1iJU+62EBeSc7vHFszn0UQuf99963+8ZIur8+0Za +gI6FDteATTtTSXia2GVZb7YgJ5wyFK/SBINiY5BR/SUA1TfASgeagyzwAht2s+UG6JnCdRSosHop +2GXu78Zts2En9zD4xEUAq2QP87ULyorZQekQMew+x5I8a3Uq+rh4QGi9PRV7gles5gEYI0mfn2CM +xZUlXKKvaIR4+6TKKFM4R5Z4rCI1n4I4xOjS/m8yeaItAXyB1A+lHMTh62R72N3o2r7govMas45o +0OK0DFNQ1WVW+dtD854rNUc2eidLzzLN++F/pH7Ddb/8kgFt6XfmZwL4V0uovbjP6HuVuuPPD/tJ +JmZLGstp/SHwYhvrcauTCZEY2qmNTV99OcTFGfIqfmAZCzOwYkPV1MPMzlXKd8YcXx8MzYML5Dib +tBGheziftfAtD8RWZ8wEfQRN8quln/BeYaeS73IxBWo+1Mqzi8JpG7yyzpeMMiH60QkW1JqEHAfe +5QZcgDm5rle+htoluEPDrDc3a7M3aIEpn0Sl5+BYJADZOa1EHjny7MUP2tldBNx/U5rwKmUBORh/ +QQh7/GNbvKm1q/Rdl77r5iAnvqZhTxjrjtfSsEJJCayPaoEwvmi5D4iZOUYefMxn/0dLScmxp1+x +NQdMi8HfauxjjOOXS8Khf4yypT1q8TDBpabVF7mp23t7LB3Tr8jQD3ksvSxIjz9jUHf42yHPGIfD +UhDhP1SAHEqt7yjJPxf10njKvcyrt91WHbU6utOIDDmo0dMVef2969tS3XaPlev4g/6W6xXsUKJU +lQbGNsBWYGWAhOpnhCe5G4eYf2PDEgOtfiP0Pqtpkpi0TH/z1oogG41u5BXngDbj1Es4YeqXRJdj +VyNOA/JX7jfgeNQF+LVq9NnL1jiVoNn22wIwQAiuFqc4ZeLVF7leYXMLQAFmzBoqgwtMGSRJx5pt +vpHjGx7a8t6YIlsaMk4Bv19r/vb7VH1CS7HBMjR3KCheTDeZr8xtkm6AuzJQ+FQNmA7bLZLUJ6Xt +J0DoJYIaxCF8TL9ND2iXsMAy+bkp49jsfNAV89hSREPojl/dKhPEIi+z9hecWHU6001iYHAipBmM +pVxq2D5WJEivW9Z0ODdJxF06C641+htLEzYK9qBokE6jrkLPJvm1g9wU02WeiCX8cUOr1PvZWnUQ +ruwhF32UyW1XuiytVt070EfdQy2INSPUFqt/mfF5Hy+DVfBVd5fEtKfZu9K+ptc27WpvLQ2golyD +r+krfHCCVVBF6qKXapbAO38iPDntomtZmrSAscxTfhQHWPh8+VzQNVqBQnUIpVMEMluL5EBZK7cB +IpgP7YcRwM0A7Cbbg9hoQVzTLjVOzgf91mMKSTHDeCQpAtd0KKycpEeKse9aiOogEqkZ41bPk9pc +ZFp6Na/tso9oXxppHy8HVXvDfAeLQk6CzSo1HPUDCQE8CQI5liSQx/RJDl0TqJlcirQbjJ2ihJ4V +NfRz5QdGovFSL5VFtiEknkSfupKMHM+cvSQpG1gTcUhxH3FhPzcKZEIu2LD9+jdRslZlSWGgiV1D +tH+9bK2nScGFAAyxRct1Id6wk6moijOIIwfRdNOA7X6xeqW/Lp1L2U6BtA0s238JkyYo6vIHFp8y +8frt128B0d4LUnl2ZdFLKnGNoWIS3P1efAJ+mr4Ql/u7b1VXjJZwz1U1iDaof0mRiPn7u9TmuTrv +aiwqat76JUZLJwv1Jtn213uXWD/CuENpPihehXUlnz5NGZnlBVYLeTJghLjmH4PGmkPp9a+Kz6hH +TgmLK2JcS+TATC+i8NaEjepBL9X0n+hQuBKUFayEME8baxnaf97586SnyUnBdhbfIzR721xu/L4u +t7DZR1TObk5uEXnh0e2OZwq1ti1m0vugMUvJ4dPbVzjyKqSujr+j2RcrOSfPyHlQbaYFOweT5oW5 +zs5I3KCW3PUqJBKX36ydLKs4zqgg24qeLWh6LFGyON7ICUdLW90y6vuzh0vfaPdELaDsK3OdlMve +ZhVlpXwcB546y0zMeHq0lS2JVudWor9HtIHqNnC1qCCcqgUCQgIEjCQZeRQMuSgj4gnSL0gi7XLf +PVO3V0d57Fyw5r5E/AB5q0xe1DQHo2gn8B0xHS4I/fyGyTbS3bPpXJYhMoM1wzTXz/p22Fe3HCWl +KZXzzYtbbjOh6cYuRbNoG+FqY+MXFDZt5LRvqG2NoZqGSzuU5FHs5j8FPEor/hg+nIMEdErEphwo +oQAcv9AAevym84tACenYyvj/knjiUcy8g74C0JEEc0vK7Qv3VNlOOtODT5mmg+iyMIg0vYIuSgP6 +fLyXY7KIpk4Y0IeyOxS2mtCSOsYxJYFkqiQi8wCwtTwIREISLCd3Xyjl+fLE8h6Y4Ts4+sLaS8+L +LhMUxX/OO1yT51Bf7FSSLLdJFtpAjumEveF5E+4zBNOneVxJwgF/XyZi8AMNJmrq/zVko61/IxMi +XQwFhaRPqdl7pZC/bI+eyO4aP+xOn8Btr57uwqesIQMlzKnQF2d/IrJpjlQl9rbuWOge8mMht9qP +L2rswbtQz/E46lSGNhpZ9YYr84P8a8HdHur55iAzsp38H9vbN/eJkRrGR3xp3pRbsJEStgO4mdIc +aRDjaKT9E7j0PxwWGrPL7TmWUxoNYi/w8WUj6DZYAFiL38QHQB7Tab6AGOtnq81wVeLKwN9Khl21 +jzFQBFlZXSybur4wtM/UWadmSGu0MwhT0OI5ZnkN4Y98JGAqKkW0FcKylyDEMYbYMsKODIGEgBI4 +KxwsCtumqXT0kGXxA46KIkSFXgJStFqnueQGoOPk7gkOP3TRwxj44JhGaBqVGZlTBB9LiXn/5MTG +hEM4U+fhQn1jEWmZkc4j/fy8fJRgKNhI0kUaEIFBvd3obfRVSl2RWIeXJ4/KUH+8hBhZvQZHhRkG +ZblZUwPhtU3lC2Q7kzSwzASQJjZXrp34jaSp+7RcFn+IOqfnG9O6vycgQkjBVnagiSsiH3BSYkxK +ezNk5frTfkOX0YCPNiKgoNer5T1mE+iCVkP8gUNd51iK+rjt0fovyeI+fiUHCKjrUjMV+XdrZOt2 +sYTlZ6SzwIhVuh+1db/AM1OBXaqv2bgM26dgZwjvtQ1HriVNbdCuI3IGSJYD2L4qOTv5gExSFOG3 +yTCCnOBewHdPawGYyCzAsvRrK43oB+f1BkRJsPSyxk0WxFrzHHCcC/DV1OxhxcSlslXiunYtykT6 +VMIe3V0/UvgpJbY9F5a/xxzeFQVIacCxpNR2xVRngKNFfALHgHufIMEklMl4E28EaLWHMTAEVzd/ +CACRS4affd6STT6/hkhFmPfjSzZvMWQ22K3pg1FMsBemkR84Ml9+1yQ1KBaaZHWUTkcLLHCfIZlC +AzY/u6NEze4RRZCQIqiXVmORO/qz04RaIbQ+Q4QJzvFvnPXYMjS9jiSleIIR7rABkWtXcTeKyFvO +GdJhJY3JpxjWZpMAGOoiAoZTd7ZBHmWQzbc9YoBDZd82voRYiXcKOHB/sU+7mWBVw2GJeAiC8WAJ +DBu/H8u+2YAwTAQpRMjutCNl3iKmtiNi22OndUOsEuVLffCt7f/fo/A+fDDCVAi5jXNdV1RFYYXE +Wi5dGeZ+Ocl+I7R2IBuAGjP4Zlvs/ff2GlRmeh4whAgoiZzqUsm+8A4aAXSXcYAcFC/278KdTbJB +NmM4gVW25p+6W5Xai17TdQURrlxALXXjAHVY8zq/WVSwpyimy3Zeb+daZZvX65KQvvvc5hf5dWwN +TAnUTEzRNl6bTROxXfAWxeQ/7kwI9H6BFo7UioEF4RHQ2Po4DectWqdfKf/efm0zA4KY8G35VqYY +nvGWE8wtdrBzRh1aOg6vuy0AIUtFkeaeo3Ulp6kH9K8uGR/V7vA52xqFpJKjIGOwMXTJi+Ey2gcb +NJadDiUzyN62wV5dV2dxn37JZERezOfRvKQF8gVZ3JD7nxMvqA1v07RXcPh9KOIst1vDzQV78k9A +nQRLWMCgQ3N8LnVsXV1u8XOAenkVMEIKmWp6rvGSlcnlNnIMoIpGQ7zHKyG6lpDcL/IpMmuAA3c4 +f0Hmmeb0rPMnb3Tpq29IMxhRX1uS47pP86pZlg5wUG5dsNaH5U8Qdt3zV75eCPAbA1AH7T6Sl+4V +GVG+76mghM0Guu38p0tOxM+epiMZ6C52TkZjTA/bbQGY/RAErD55XWNBVfD1pGOgFSpxpgimvSBV +oZ8cK+D54UNZe6PqpKNaE1v1oipBBi8KC+WoekkeZA0P4qyg2Bs3Fdd4LF+Uswh61MVHzhfw9K6g +Jz2O/ILIkoMOa3Jd7nHk4/PiuLRlwyIw+DL4W7l59LEOtw6GwJwL5Ed+zF3mbh51b6iaJW1/HEUr +kskNJS/hR592yPkMhnJV8xA9+MtKY2jev2ZvNBhS00EEFHISp3XQb3pjR7WHuVAQruI8FezL09KQ +2PF3ojivBqNqeeMd8+B9vEm/TVYHVhu8jTEkfGE0NAb6Fw0IZhWtmv1vdTVgGjV2E2saV9/ggZfj +IH5rX7H27T5ZpeRo9DqTT4idwOFwDA+vr9elssEW/mQZ62hYM2MmYRea+A863WKIocuUxrPkxayX +apjJH4d/fa55RCSVRqDNFcJWaGcJs6X0pt/6cbT4Fa37LuyKQ/ZcOEtlmfWkzuja+lo6cPrtQFnP +uB4LQLWiU9fs/Z/acxT0EeWBqNBzi7Fja4zpGE8uMJzemWi3d4lJozTGSwZt1xvGkDIFJfpJH73t +IX9MST6cmG6R+29T+sTbi74Z8J5aTRGxj2Tq+LKoAaV1LpgbK6U9FLf35s3tHwQtCF3Ue7fFsalC +k38jRocDxtukTcdslIDO2ExiOMfnC3REWsaYihmxHEQNMxw82MsuOp3WCEoJvIFLynwBayt/qdIl +mpwGNHIJPLI/IQDPA6f62iEGt4zcjJxlfE2u0lf3GJ9CvxKuCYOZmIHmouAiUc6Whse3w/xFH/OV +PGvgN3t9iOVy03IFhDCeqPs0ngYne3l+5nl1NkXd6oYxxr1hjY+75IgWCdxy1xIV9Gs4PTEgVsJP +ga/6ynu9rt1cruH4W00hfjwtCjbbzCjWjhZzCPHzf/KNNPkGz7q1UBMF5tpAfoS4U8rs6ouyfUHf +Q0wmCP1zPH1cKg+BeKkftOXTEjzQFUqj10hd+bk2eY6mbD8InhgIkdU0pKQIhjYI2GtLM+faKGTg +EW609Ke5Bt5UWGIUWktqcEly+u66Yq8VTf/b3Ii2ax7tSD589cXzLjeRDx5/cwdGMjxOXMl6EGka +ylBd2Fy4PZKqJzqKW9l20LGMnOKjsUHIrWpYXeY5F/lerJ9pldCvUrnkJ8vemYr4ZVK8ck718oIi +pVRCfublkX+bbOWlkO3tagwNXrkG56qYh3jUQh4rywsUVpMeDXpgHjDKqJHlIXujWi1CvLdJXHBe +Tf1170N7C00959Jdn3dFYvt8t25hYjXJhtYxLSGBlzAjnUB3aBZEYov9R+3NtUQwmvacBA/aGBuT +px03Cdp8WMXw7ybosWDuvWsJxj2Pqo53qqsWxfwD1TL5Ps7I7qqjS0Day5rZRF2T+Ada8dfnqiuC +UBSJ0kI9+Ino7WG1oOhavnfBGid3uy5+LtflhFL+OLV01iLv/h0e+JJj76P8KgaQuGi8Y7iUPgLw +obrPUunTMdWnWX4ZXKNAzI7KLU73PfMEjX8vFmm9iIeOWr8ptGqrcE2BStbQjF7wqNgdH9wcXJ63 +9l55JaBruABrUd8l82XRhEke8ghYqogHt3sDNYGU0uInspuc8BuYwp2i8jPzWrHED53oHZSn2/14 ++2mXmTFLj8lU1C6hS9CWWEETgX8mBwKTtK7/Ta5CeB02jnJce1Ic7Z9grV+lgVUjH4IZfjWZlKHE +FkDQMwfCwA1qQGHFzRNbW/kxEtUXIfYDylipRsckxVO9VwyECNesD58DIdW/m/CdBwH+gcJlTlBy +xckKqpUU5itD9aFehpf0GO5+Wr2DNCvuEV/flqa34Iorer1kTD2TkWJlccy4pI4IDDVetPDiwmx+ +rJDS7YHtj/ICytRFXlX7cWY73KjM7eWWz9WC/4DWI5Z2z8ptZ5N6eq4ICn51lkC30FxLZGGYukx5 +6NFAsjxJZjzzVlBUudNawoYNk2AcIMejGurMdCZP/yYn4PWapx2PI6oMk7cu5Y8xvyawaTlVvsba +Txvm1HCeoJFLGchE5gUIFW2Hnsta9OcyMp/R6QuvteJbagzET89mT3mLXBCjW+F7x4ACD2Jk29wH +jcE0MqtsHyMd+72uLpnJkbhgOTsy81kUouXNd+mw+1hVWG9LpeOaFltV7NOoMkaS+NnySYhd0YtL +VA3RD86JJuaLeshrkuuNG4Et1EU+MFAvs2HyIe1c0Hr/f88g6ORo9Y4eeFG2tDXUqpzwZvz8S8mw +vSUNbxMhOJNrzZn1NJCwokjLfk9RipitH3p3HTyZ4IMpOP2oaTz+/5WuAfDJq+Fl68SLnFmARjYT +KdYa9ewe4hO25zxdbhywVr0WRasLsSAjENsAlKarv4/jv6oFWnlVdM1adHa/7+0CDghvLHA+sRtL +KAXbNr9Z/Bl60vuTIb8ZJodEGw3z/hv6uAw5Li1ICwrIopiavfukmJVGuXPyDnuSeFuyx69+yu5O +g5d3BoqtljvIEW6aTKuYhZZs1GkWvwYEvgFna/60iaWDkYrXbiN5+fEP9mXXoLDShGrDxhOsSIGG +eut6J6a0KjnrNr1vJTvf45/d8PHt4L1EhAwrdAOOvJKr5JE5IS0k09GZxmL2FQ1ZnuMgkg4wNkVE +1WfsbWxw6HrQ5XObCmswc3Ms9cxcBmQ68VEpua8AEbCaZjdPnuVe6lufaDU2UR2ZEa4l1LOZNYQk +r1YbROhYql3KWfhCWswKh0UX9mQUFXdc6UYZ/I4UkBQsFXmImX52srq4/Nc3pB88hHWHP8CFViuu +NBoY4pO48M6iORg8ixVZ5b1xzmNSAA9jWnNPJHfTphNzLtYZf2CGWhQ/Zzbi6FTXPy+4UG7qbZCq +7U+UdzdHtyxZWyfL3fbSE4y5Kh5bz0ErsWrLGrbHMVskuVsf42yS6Fh0H/L47J+w9u9L88YKHx4Z +Kpn9+ks4aKFMin3sN+8cL3Nfe7Zd2mObaCIcnoc3rmRZEdArBWkisqdEtBG/vRszOnW+06oJFqw8 +sSImaxlvP05ceAJtEqCFz7oCJC/yLl6hHy2CYHB38vc/dXddsVFut9WUqiqZcyKB5skzHZiqAW2v +lwkWwFshNeiy0VFvY3p+y3kSWykepEFRV0vAWBb4VQpH9NjR7m9plx+LudP/nkPiL0zUaSpwZHHP ++thVIEmYMuhWVBje2AmPaOR1CxNR8UR6J9bhN9i7jpfxzLjub1zxtYJs9yALLgppH7srrtfd5FdI +0z+x+7RVDyM1tUBpsz7J5e0N23gwhwyDGdK9JhFAkIjw6kS8z0UFymkuXnCyf3ZAIRXKg3ohNE/e +H5H50OiNjoiELwL09WJ6oqC6y3RFgFdFiwl3p10oIwndgf/asaGHLVw1BPgR1MoaEjpZFTcb3KBd +o4WAAPeF+aCd1EhNb4PQJ4Gl0TP09n+iruqqTXIQPUK1eRgIiPsUhIM//cD30nxQPUXOTWfTIA9Q +KdHULFdnw9PEyw0iXBCVKhMsDUK5Kydgd01Iryw7QbG8ZwIaU+UtK3Hmz7lWNlJr3UR7hLovbJym +Lbn3epuIeZBgPjWKdg7RCMo8vNsPvmlaV9JjMwBU01FAasSv0XD1UEJGtlildXiqC/JIVmw9WXrk +wSoMQ2UkFtQwaqXp7FTicm5c5cowNQL5KuJV3JYQHE/UVp56WJxJsua+BZrhZpohnMIxOc9xem4W +v01MW6+2yPd6XgVkw15vHGXhcXPUFD3HigecSAnRWjQILTL1e58L6ab+stkr4yGaJ5K1XrGfg+1V ++SEVQCM+liqoXuFb1UI+vH8QurF0lk8VA1xqgbeEv5rctliOqCeBBp9xaS1dmgP3Ui6YGmZTE7dc +gQRofyNAyMqWrZ2tRzhDtQwtSrJDGEZ+RwF3QZuy4sN736iJ6EYBXVcWU2XUSSUZvxegCsU8ktAn +HwHsxR1iKr9yt0iGFS00F9xhnn5v6hNeEQ8u7PERA86KUAlBLPS3GP+O8m2l1nvhkui7BRRVPsze +MgMAUjdM3W3UUdVMKP9VU6NeQ8Qu+eOhnUZEr3oi4OISqQuUk28e2itUTvLsqKqeIq+6Z+Bx/sYe +FHziOZh/HVoT5rffR7gb0BYl5afM6JZRHKrPtDsgcYu2AiBzmra2LlRQv6F3VKYlyHH/fkTdXr6S +O/p1reZrvRNT/xeHMfucKAR6d06lZP1E4b1+pNQ23mXa3q6Bznmm4GQLQNb/SCd/XDipkvZMXB4H +WHlcIoGFEADITYIClVEqAdxu4XO1K5WreEXu6f61dU5Ng7hDFN8uYCNQuD0Ky/2ED2wKCeCmd4eY +8DbcS2qZdyFhi2BInQKXbLFQE3ZAkKNz6rwZzWrkOv7uHwHlhEKb1uwSNMisTk7jLmOLTDomibNK +KLOncm9rLNyW2CrvvScN7PxnWiaKPt0ILAWpeFIMW5vZ72w+G/2x3ZNPfAlQDRFjxdq2ePc3ePL0 +MHILIMjVJzca33mOVMh2dTHSJi2oXPO5mnP0E87Uryf5lARbIm5smcS4+oFMh5kuzGZvWiAQ4TKP +qfzRPmwwcCsNUc5eVFLtlW4a4tvfdn9z9YvnllY8YLzW90B7Cr0V2HYN0DR5rGpeE4Yvw3CkMFtZ +4wg6DVoSUrgfaUD8DqRzYkv2qyEsLydVs8C1Lnl5ZWwAh5WxYv7wo1Eg3hg5jViQxev/lBAaY8HB +MD9FQwlz2c7xgBkorGv/uMp0BIv6kzMGuUxbzCjCYzUtjzRXlTwgWT1J5maEoOjBS7/4dO2HHgFn +uY4IW9WmLsFFvl6epGpRDP/V9m2fwDyhAe55QgqlPW3NAIsUod3uqLZWTeUR11RBOcGL9TQ7sMpj +quJ9J/+UHhEZGw2N4oReh4wMzPM8BCjC+P8vo3/hvzNqMxk8HuIERCoUL0tHacbLjsRlNlM80RJf +z8S5GcozNhGcnuP2NzdUpr79XE/cPo1O1RMJVIB9cM5L2XWqHApYkbIJyjq13Ai1VuPMlzM9gvWi ++Ue7mVc705ugVCpWWjRZFcYOyBVK0WBOa0raPxK1wYOqchYLgxTPWDL8u70ABdEkoMoVf9TLqLBq +/TDAPSd5bKHALcR4uFcGmhNCcipnK2jrj5iK4IxleWRiSU5pwmsOcYx5hNXMOI6wjtMhBgP7PmdA +DHwhq5axY9BdWaGjQ5bBV8992lgZO7S4+yXTDjkWC7l9Cit7ztsUa7ayZYy8l/uXRwinzPk4tngy +jAh/utakPgmmrLChtPzNIGFlgw5cU3+Ke7moZodvn6aKKqFTHwB/Dv0VaOi8bhWMCXLxd0j9LOHF +tPEbuiR7nqAmaaTf0gjkGMMqaAOZbnWjVm86q5v6c01/vtpzQqEo++YgGx6RNNMqMxjFhQwWT20F +QoJUl/erkjOBJzeXj9xACaQ/gBm50OSPvbGNMlH937mEMRMoGkmXUtxC5KAecdgEWygjMRdIC0pM +6oa0WKS+IPzuROGxTMoDKfkN5bbcYNIZgCBwj9nHcHR/oikmGsv050LI45C6KtoWCvqmdWJjLoi8 +G+SyQjOQAzLow0V9t2e6a6Ee8f1mqdNpRLmdo3HsQkHAqltncL9VwnV+35W+H84Z2l+TC3pjZj5s +1FbiCV2FN4/x+gO5wTD1rrQaZ1Vvv+iNqRqDUKJeLDAP9EDtfXGS8KVjaVT3pxDp1/Va4vW617tV +B3XN9tC9LnQZZl0BLGpI0B1WnRjzvgMmZAEDMj7+9Osy46nENjGY4JcyfDpGIJAZtvvEyCwlJhMy +qgkmq201/85zc4h3sdG5wqtZ0V+wy5xe8oaL8V/zIs+hLQ2T14qKS4MAmVhisYzAV04n3I7qBeQ1 ++Rt38L6KH4iK/nZcZDcpWjlXzvUKdJbyePnknjpH/VZSpZae0pWA/2VC2ZyrZxHiZmrEY6SLuCf+ +FEfbi2QnkvnahD9ga3bFjdEEkc0X2g2cv1adRa3sGQRpIzDNs9EJwjnD0UTKnpKKNJasVazSn3Fa +vIQxY0A3i+OVKdxcTwPohgynwDOhvWVFn7dLnw8nYeFhNxOu1L+a9XaLVVHeCNAz3VvzruYSWLbt +/rErh8eOESMRtKbKUPWNHXoXwe9ge3h/ZkQgeTNWUej3GTAHQVbr/r62SbYuto35BiyhRq/EY1oD +EyJ59vZ9DhmtImdn4TVwN1hZ/Cv7RcfsveoQGG7WTrznHDghedmEoJofCgfWKqOmGhJyX7Lh2lr0 +GqcZJU3M6LmSHKB9CgXMgcbsh6BnGvjVBejygs6+LfLMEaRIZbNLdFTNLNynXqd6d/Iy9+1qcJ1t +B5gIdiTuOYas7K5zA2U+DrL4eUP8qWTRo9wvTQ3jo33NfeQ0pZTVvT00CC4DESwaBrltMbjJRrXP +rfCZ/WvP8zUCAfgMdTCDCG7uZgJVOUolj/b+cXyrHd18dmmq2t0Ykxkgwtk4xWYi3RYP283LhrF1 +yPjrQor4E86Kl709AUYK6/td9CoGrucC//ACSaFL7MUHZLLBq7n5H2xBZUyr3qLaVmvDuD0OxZ2I +9zpjyS+RUfWt5/g0tLEBo9J4JaCOPbW7+rn6dU+TjoWK9/mlMzDW4N88AuPEMcDvLBpw5m0ZlVUu +mFojJx/uiFpGIQKLL/PgRDNWwUxPsmmfZWw4aokJFNt8eZeJTMI72GUmEr9ivM0zBTXCoN5HrZXM +ck8+2sShOovkPmTL2y5Ma0kryGhgKk9fz/5zj9+PiuPg84nXF/5gPMnJqc5mLA6mnbbdYQXI69rR +T1+JCr+f+djl6uf+oMLJvBBdnDmjOSPeUGD58HcyMd44KtSFIxQ7Z0ZzV5jTpYJhPya+J2+Flx+l +EJ9Zvh071XDd5hahQRKgU9FWuMdIXxkbZ02T7bZ/ll2z5cHssQFA3mwugHTs7tKs+/ldQQ5kzJPN +Ff9K8VO4W+0l5gFR79Lt1kodjuvIycDYoF/h67MABLwV0r/XaHxTuijAWbkSVSXyPflZsAjUcJqQ +d99IV98UxsiVgEl21OmXA5irZDu6OS5FkMYmknbaNEfF5I7WBNm0N+qzkGnVd8XzWJJgMiWf6mWo +HeVk4WwnMF20yaQef6btrr19HiK9+gSYAHplBszwsGvBK9iztHSdw6SUJoWSEPYZzHsOxEqshz8X +WbdrmBVwwOUsYAIiqhoto2i/03eP1rKH2iaNu4oc/OO414dVrFqq03BHobVm7o8Jj6+wJ54Zh2I9 +xIvFg+TM8r3Unw+EJFJHd1UesMm3mFCkcOKVJh1MCKXQzeVwbTiZ2YXYOEkvSn3hGMygDJziKVpQ +DilEbJjXJRhqFREvFvkYwMnrqDpbfGIF4o97lF5XUgQQUOu52Qs7qOchOgTJbmNrGSn3iHndvGuj +983rDJOtI7k5QwKOkkBvKyfvPzS0KZOCZ0ysszuOj86DZjyhZjvisnM/C+prP8frfCwtjzuKYwUZ +zDKGR3Z3O6zPib/wASYG5Sb1IYKLxRAwzetx59+X2q2rgJ7TMU6qKpWivzXPmAFZ2NvppFVCbJrZ +qUKKbsaENRnhyZCUEgZH1yKrItZ4AwaSUd0HLJK0VOiTDh0d+OGSDRw7OuVwxEM5HTv+ofVcNxQT +RGTe1YvFDNWxwQxha+oX3CFHmn3U9TrP8hmHmMm5HhjvpQqCfiLF9tbpMgOE5IsKAWDDgPoaVENd +mJj3Uz9eibg4mS8dLKDa5fXt0Hk591HFd3D567LbUUmTKpgTZATA59fEEIFnwvQizfeFZ1+Eedzg +te6e+09jMa4hOHNAS1Em+PG748MHqU/YPhh3HIyUtsouc91sZVJIDj+CbspN1I6jirMZqx+deqUa +VMdeF5joUYgIc8QuvgcXB7jAxH+pySNeTznS+tQdEMyBdR45CvTsb2+z/ASRoMyz27PSa6NtQVf0 +/idnknRgaTM3JkVgYRilqP5/HkCAcplB2Ob5EUOlb5HDo5p2aNE1CdbLGfSY727UrH113TcCUe/s +LoOfGp4+3ODPhoYlvKgDMwWrc4Pyou+qa2nf85mcksSTn/TnTdNsEjmVYcNWWE7dLn9Y7gIv6A7W +QZR/yMi6GhPcPGWLZ3WOj/gi42Pqbxgpbj06zN6dxUgi1AmfASl3fk7pAONHOyYu8eqMvNlYK72i +IxsJe5a/2QoqrL5iDvYvkaKQ0VHL0Tt45cMI+L47Ex2b/euTmHy3WH/7KGIFwDx3GgLzXLyia+/e +kXrspbXFrIU6yHQ9dqgM47S25F3g3cnVOrWAjWqc2yDMczkfhjadxfjUhQBcTeSillRySuxmPQsJ +5msQuz9N06/ZuhiQnFduJJZBjqudE2jVjpmFFlnxqmqC3EU5DcyKph87FSFp/gKZI7X1Rf9AC7RM ++khX37p3pRQHI64bn9IyFftYSXRJvSOgXlCIzV+IsfgRGqTVaTgzB5bSJvCkK5HpBNXiFuJNwLg9 +52cxNKmgydTGwYSBQ3+3B4GyQPseT39ZID8Mg/o5l4+i83VxuC5QUUETtjyESW2LtzVA6K2fYK5l +rRfxmJGx2Z8nOqil0MCeIbqYoihoN/StjYblseZ+RjD1IOhVdjNux8JbbyMdpBKzCUTiGsZOlk5v +afr+hw91TF6MbDcrKfBPBISW4kp7UwxSsGm7DI6z5Czwd2acCGm8UivH7ND8+T5qGYrAKyuKP5s9 +fCH/XCZh/NR+e4NZenAeq+O7ybRP3/pe9XR8+FO6pJo2pO3KbMiOIkPB0Pj238eszIme4ab+/4Wu +fNvw7RBMuYC92xO1XuaTiimOrvKQmTS9cpE5ML/UBRyecUZDigmfAAJ0xRkv6i1UgP/dOOEIVMZD +7Aowv67s1RBWChA3MyNhw0XNqafgO7V9mbZ6Mcgq03WxnVqM0WQW/BBkWAzvmn5ZSmy6bB1up/+s +tq1jIx6oW68PgdXwaOWnGgHFoXnz8m0oXqB3XvT7D3AzSN4xkuxvcHefkHFdH5EtnQhtWbJpW0n9 +40EmrxnSEbQ0GlOQRny5T94kxIwMKkQRatCy4xwCmLaSWuTIkyOUdYUIHXdvcLJMBWA+B/u9ZAeR +ogFIW7l4Qdo1p4QvgUcMNdk/Q+nnGq/06/+m98wOIII4GpTU9uvFZLBUoB314TZ129AB6j3G0s3r +7GbQWkd1aGO46iC5sL/mVDd46O3HZJgpKKByeV2Y+Tos6U/Fb9AqWT9fvD/M0LhubM7hqkLOm+8e +MZ7XXAQH7NFHO+LYx/ZsZRIgKaO4MSdkFdPCpOGZZ5il61STgwieEqL5NfAjch+UE302owqsgUbo +dyWXYWZQ3FV60dGmqLSRNm5C/lskQvwzD+9OJ9DP8ajwdSr1/YYDe28oi8UDNwUZhhvVse0u5DX7 +CvzTv3AYkHKN+PZNT4buH92nROhoirpnEIFapWKEDHq9AOKfGpf4aSQr4vp6ldCXauWlFLM8o3L6 +xMDi2qVCKTKLHrgTaEdMlhaykQTGHqEB7UKfLjJXyh79w+AFR6M/elHblQcaFhagSXEeyTMTsED0 +vD7hDwxgaRFXd9wPTuc7kUoEwvWzZOHE9l7ShWd0EsA+2h2uVNoXsJSDuqPZmdSOpEegP7BXrjKi +ZHB1c/Goxl6HqIEXtv7vhRR1FLJpA8ooDiL49oTBsWU+GB2IM4UXsK6ViTQiwtaEtNmuJiJGRl/p +fwNI0LPaPIPBhC8i/6n6fSsBwinjAMaU/4Vzlo1DtIeY9J5Eb2kVe+sk68DowNDsiBj0wVTu/SDs +wr9VJn3eO1QgBFpNLF7rt4kUEKHbNGEAgCnH33/xp5JKC8FwqTnuSw9aNlkqVvWYDR5jK9Q12laC +qQsTKXCBSH2QVEIDceOiZYOTTbSk8XOs6dAL1HJpstweY7xqKvZ+CTujENlpzn473rkcr7UNpcWL +971aN6ho9jyDeTlK0Zvr4yffsjn9pBjE6IEdVObLDsWDL2de5s+3jqBOvdRf52BZPxoGcMsFhXyj +3EcmRleZWMR1JAlrS9022XTiu04WtFlLgx3mjRj5WhcTonoKSLphmC+ZdBRo8H8zVrDfa3z7RmLv +q4tIsprwDcdCjfXL1t5nBUQlKMDWCvgroP8an4HTlSpB8Ym2oqWQmk4eN3A3oB2HJ8RdagfuIVbw +MaNwsJMN6Ay0oW51X8zgM3syvoOhS42t6ltTv2QA0ESH3KtLhddM61YOFsFn1RGWw11JmZotTyiq +j5EK4R/nEki3xAZNkP//njJ/PySBfUP/jmnkqZUBDqhVlrfT3lWFqeDSAhQPayIlbFG6YMUZepWP +e2JwvV9/oqRVdOFKmCJPwZZAkUJdlh3dOxTtjNwKUPapztBIS111avzM8HL83/AKqtC4g4s1bWQy +N4lKrtuI12IlUFOdiyRgi9fDTnYXEXjwCV64fVS0DkuJxhOoT6+/tJJfl95AEmZaejfhahPN2wsB +frgVSZqKtSp1BUP0fwGAKO4UwXuUjfKcEzq7tQKjAVkIrLLwwdsmxZ8TAs2FL8hkizOpytHw14jV +dVxgctaFA246K7GSX08uAnvkEXuuy+JNNHvMJ+7Pgd29DW5Yp91BybvUYC6eCzOds0rGY+IyrYy0 +FoEELoNuo+4mv1WM8ENcXkVzREtPb1yVTVdETMl7t/auiuNQDovplwh2TWezdJrzmkGJQuRPTCmb +Lgz3fYsoN2S+GGsSeqttGRoLHV8zglyTiBNac2X/oEhk5DUslTU/JETKWhcQbDOvUxTGjJJWkP2V +NfgynnsSmB0FbvLZS/tjvFID0yJHkmrB0xWsXKMrQeq9XTbIXxSKg1gum7e0lEaG2g3bUvz7ekY4 +Eu7dCnUKEMVfR6k74hQIl3pOVEXStUMEMOhrNdUFMNeeQKEBgqJEvunsLvfTMCDliG4UkWsGiRhy +CCzL+5fYjQdxAbKKZo5jNEvgUgCt6ofC0mnTpr+aL88/jfvcJb7YP7E0oWZpr5uJ5fzfGH8dQwIL +geX1B7fbO3PCYBfFkSoDs1kP2i33m9/HaeCFecfPZmFIqobvgGMR+eIZd/zHc93D8Ed0MzsmLIze +Q6FfuWoXXD4nVU5xZzX366GR1wlI42RrqSMP5wAXwPT+d5snUL9wLPSiYZaiYBRk5gZupgAh6ZwI +Ol3yLzelXAvCQzRX7RnaaE96QV4IWh3wo3wEEJ/3/haaioOwKfzCWu5VMqbM9748Jt8LlWEHp6D4 +8wlxYkYif9Ep+BBULlwy0SL3mMNnK7A5wu/nSTge90NAi0YJWTuO3qid0E44lRe1jqqz4CIYVpNj +WztYeEKh4TeCb2XeWWYVnJw3/hKLAG1uive1YM7XBlSqpq5qYWJCFQE1UdRT2IJmRx+2uDIkE0E1 +joQHhaqV+ZXao7VgDPFo7gx5foQbva2LNNab9Bluca3hA1atyDlOb1Oov9pwxNy13nvGFdcdBLqW +H7T+YfSTdZGy4HlegV+IO77u5qVZt81/TfSXqXAsyxFzAHsW45VH7KDADiGGKR1RxT/fw3t/ERDz +/qVdKlOorTfqdhxI6/YKJQr0KXmnF6DaFFmo/JwmBcvVU52OyRYyhj2UOJ+BUvGs6aDjOuMulNAw +poXFHL598Z/D/Bunc0zWxOC0uklgZ7zLimRZt8D44jbUE0oL6ryOkuZ5NUKAKpmrgor1lcoqKxzx +YqtD8w62pkmAiDBdysZJ4UjZHprZ2ckzhTsEt/Htoh81yMSiK5g/0qCAUPOiNz44vc+jgcSkUMqx +DgeDSUtto6hg0Y5XFwhoLm1zE7YAHMaeuwAKvcUhLD8jxV8smIK7VKJCYsnmgsCISea6mt+d6xkq +vd5BADB5UfrqLeKUgTUUU9TsaDFsdG1cwqO4/Ml/pvxodCLw2dATT7f6HR64j7p2cKuP9YvzRUzH +8eZYfQMfw2Er1ylDULOwECVddD14xnll4DgAquaWWMC3mJICoBg3QVD2yYI4mXWbMi00WRsuRqO3 +ONqfxh+XPVQpFUPWF8p418hsovOSR7t7b+O+OlB8H6ve6nlKoeto5V2nwozb+74JqyqtndXjihCG +09KYzS7FjPk1MZnTj5KXiRIILipbl4/IxiwuiieHQ82YVMlxk8o2c0Bb7nRJVnmHwb4NbJZqLOmZ +QKkMXGNz8yom15I5gmdt6nADWg3sYgoAWLFY6d3+az5e4j7nbK9aygyIZ56TWANjbayyBwQTYLoV +GWRhX13MZqCh/LHPEFwTUWik2R7c00Scc/fjxOnvmY0r2myW4hleYrCMVFbHznD/FuPTwg0fjInc +mpFAq7e27dud7EVRQxnq6zuONXOltraBZ0WOi12Q4xgdtjFd7h+DqaLhe7bHg2Y/M/w0MO7LGY7r +dzg7//tT68cFymCoKFZ/Khj5Dok3nu5rsz4qAUKYQ3K60bKbQwFJjTtVIYggM7dHgX7yszt2Yu5r +fx5QoH0BRCFjhwYR257DeqJUmQMc2qLqWwnOBYnIoglDnI9KTcIvXh9KAmiqdytu3k7IRmilI5n+ +EHewBUR+kKaDVP2aRYLGY5+gX+eqs98Zyhba03f8i3DkrveL7EcLV7nNIFEXo9Uj63UAtzs1w3iN +++r8lMn2AWxtfTNeDQNIF/E/QslFIoEiGEMH/WzsmyAUSZvIYqDOEMqRoBea/VNVGNdcqGdXaEn3 +IeuvghipBD0SOfpzeSRl3OeTx/FJ04ZVEiPSGgMW2jr4G2tZtaIBDO5ECBc2Ffsrwhgbio+mg4F2 +Cb3MzqDGhvk190OtBg9cRtX2dhbnXrht8+9ur3BmSMFP4kMymPQ8CVxneOhkIdA3NIiFQZIKGs7a +/3gCSaj5sYzwoi6avgtunziMstldKz9JUC/XWtSL+jxi3QzvkJgrMZcKc+JSLY5R+fpdIQ8Drq/g +q8hzykQfndhOdh6lnHXLOjiY6gyvlFCzVBEV4dnuUnjkaYulxy4/GHp93XrXVVsRfPw5gg8iHKAi +nFPiQVKnHiGsYa37xh8rZA9DBfi6p9qclIrPuGiDK5WGJ7/i126UKmTj4OEqaIxJg+XMUR4iwYHv +b7aZ+AqG0hRKF7DF5W4URVtt9+Q6j0XyNF36b1/W5bYe6etXc3eHU07ooJ1f0cLH2MMVRBynARC+ +nuhkOsDZfF4qBR9Ixhw02rZWATJ6JTLtxFDZzCuCO6xPMDy5KXNYqcCbgPa1WYhttlBHS+TyVuQP +OZibLdrTcLzXfQ9I/ncbU9JUYO4yV8tzFeqRYojgb/13Xqr0VMLzB7m0zee3HRYksSWoTY03ud8o +2d8dUXYu+WwnJP9bLk4TLUATCypi9riPdVbIO+8AEyHh+6Sg5UfSNH68A6TvlqXm/JKftB9fQ/6X +HVR9064lkRRW3oT/xGJ5yJMNtns/yw1LkMU/2Hg9IOqsmqRRPHxfAbmbWY8SwvalUVJgngQezIof +7dkLPDPAcMS0VY0qWgjsi7q0Td80kM/Y6AAYrFwEIy+bU1dAiUIWCZzN7L8X8p5+UAIsy63ojr/7 +ga9ZftbEoDLCx6d8fw8EJFRqTBZMYs3wD+5cfyS4Ajcy0XpukqRCpCcC/lyH3qSfsPUeuzLlEX1K +Jiq2YYW859B3NMhlEQGH4FBRctlwB1T/2Xt3pPgNCCM1MJ+kwShXhmZBDD3dzLqqn76YJnIZt6V0 +3Ml0I49dyh+KrTGPbhz/+VnWaf7zTKXmfhAxGYD99HAYW+RPfXWN4tTnj7kYHpQwvK8kJhYWKVQc +IP07PWJ7yly8hlBB7+nG17RzxF7j0JEHynHNegHt93lOTY4zy0AD1cgK6d4UPRNL9fzOOvVEr7LQ +/TKyvA9l/YrVpATadbTbEhrdhfNpuHVE801Swz1rI/WDX9wU0o110G2sTYL9s3LtVsN8rCB14K/w +4+APyJgaawaXzUqHHOwWTHf6pquWBppQILGgoRC9JIo9HEfMsPvrYixuuQxDk8GOK0yqVPdISr+E +CH38UKOFXpgFnlM4Pg7ofJnvpB+6Xr0qujh1LUNjq/bV4JYOQqovmK2e8uUWl88rOvofo/yq/BCP +Mjr6kDk5nfJO+xEwlfF1ba5MDSuoysGcBeOWBjPGFKqLvPbWXXGeEHHaupL8EfDnEdCQp2vRNLZ0 +YrfCCO8e3q4lG2MWBesL9VsRxC25fvZyXVIbtQpsDvO1ztAyqQuqu6ts/Fq4LDAvcbDEx11yThHx +h81CSyHedtYa2uhIUFEEn3HayDdOvzjHMUcXrOUOAoyUQXCNhfIuBrhRl2WpR+IyCP4hZxcjwUcR +qQM250zJlRhSkfTF+sOJjUjs0bk2S6xbahXCz2mzjtfy2djAU/ICS9AAt33q1MIp9bIKxTqq03ig +5KxeYEVGM/QHndlTW5v1WK1b/1v+S56SXe5O+H7bpn3zMVK9BeOq1p1Rz829dH7ox0hNvgAwrBUe +hw7yB6hMZeQEXaFNtJsQXpu+lvxsnhuT7tIBFgilPOyQANGtbor14pzuyA8B7M3C2hZLWdVboB4f +zaJ4pKQ9uvw/7GvgEeu0tplMB8b3x2g6qRQP27Aa3yFiC/npJnUJA9YixdpSeupFjHsyeH8xBZkq +za23dTksO3/noEBWHeCBu/3m4DUAL5c/vgqpo07/tw3kG6gppbJIXu3yrHtj5U4rJHc27LodrrDd +DXz1+f/JVdY0q0YOVG2lBNua5Ke7f9LjVVP5ivtRx6uYezKcF8Kpk3/bEHFR50NXNQLcu8Ip3aiC +s+Z92bhSCa2CzUjoDgytoGbU7yq72WFx8vnIzzFfHl8rZSr7qjHeooiclgxlUJ3Ny2rE/T8sA1aR +izMiPDT6c8IiybjxpdBG70zIduGfzlpkOy9XASxNFVzaZEI/Cmbk2Puv6C0aKMSRTbJ40Kk11ste +LB0gKEvKu6gVKADTPGb4cy8SiClaHRavWvYQMyJuGLm/47zjKSdH0Hec1GB0i2LSGFYQXsCTRnRl +G4LTvmJbdl8eU7vlgI0Mvd95u29E/oPzYOVbmw1Zl8af8oDyimSNI8P7Z09PkoI0FEaop4TBSXS8 +alFQxKTS7frUedQ/+s6h7x+QPtEF8fNogZwAeqrQoDcCXMEY88JYm5EqY5tbjn9aO0nwJtxE7gTa +Ld41k+f0uVn/8snbAgKnJrvz66d7Ndj4cORM4yVI4SLKCh9S2KOlYXZHj/BYz9R789H5sVXNBizy +5XgRV2VeWhuFmDX/dRYkLk4YYtwdnl2dQ8YFh8e2NGKq6kEQCq36Jp1JkMseWqpFYahx+R+YjuQh +lhrUbVVVHB6p/t6aN5fU88S+ZHw0JzcsThU0u9uK8MaVLQdrwHGuZDQUou4mwFUqn3Mu8EUGCeWx +7XnDdepIX/qDrrXyoojZB7/xOs7I8T8hjAwa3OLc+LOK6rbdfb5LgO4UaTbhVw0KGry1iYnHwNWG +wartkFZhVOQKZSOeo01TvBYVfHNS2yCJx0vUcf2QKpoukt0Z6jdO+yAPXw0POt70spJLfC+Ev1IB +HRMFiqKXkZhHo0Xt4+4i4JeV+Fckqdf8ZJSA2gjL7E7k2IiVZljqjuZyL5aWIZ2r0yYGPFTmc/p5 +hpQwMdZxW/06v9E+tMD/CGAqfOQstl3Jum3o3mXEWR1+iu9d1g1kS6COWwiYiHjsaguuj148qxpq +mNxcO6/5USTkD/YEuvqU4zFVq+B6+ejjzPO72jJWX1IwZqNnBDFV+XK5WTbGzhqLHNPbesVc61aF +pHc5SEovsdl+NwjW1K6qf4XqiptRzvOXNdViUMv9so1a/+g4q2ApX2Rwv8g96E+US0upQ8FTCFfE +sDnY3/mWKxRedFYMPECzXd6eTAQgZwL3JYP/cljP/jTJfFZsihJrZsEJ0vUwSNznjOe3VrH7Xsdl +N+If5l7AOyy48hN87SO/qqpL2KWwVO7M+gcaPe1lE2vvl0fNheuxKcmDgDZji7KgKb9G7dvW7KpX +htFZwgZI6Aw2Hh9ZDAyljoTfYH897fw2zDKmqNQgIITD4zDFN7TNMEcacTke10sc5Q9Qq3Gsn0uA +uD3iCWniqugWUZfSdQ9meiUlvgoFWRkigJEVqC9LLgtCDVh2LcIDmooKf1FtHnXeg2e8oof8e6p2 +DIXbbrAiMOZ+MMqF7mQkZl+W173y+GQUKK0k0MaXyqCj0UIUbcV8EoRFzyx2sP1l6ppWIsSNiaUC +9kgRkmmlQxwsMuLwstDnm7Nt2W1dt4+WlAPkx4QtWMkj5hJeoM/qJma8C7eQS4U4OfFdYynCBECR +5PVyOuz1q9EiXAxj0uWrArWZvLm4Jbv6seFIGLhw9Sc36RrveBFPDqdMVD+I+ixEsZk0f3pzbd5d +4eK+Thj7MuNKAbDNgfbKnshgAJAVl9F+0WW3OQKNUDgYu3rXg8ifbdXloz1GRvfnLpTXKZa6tk2u +Mw5bak9tGLVGeAjfrmtfjYMGOaPY9CCOJFKn64NfmoA8TcCjfHX96itD8Hm+0k4HSGg0pqJYNhqa ++ewfUV2XhZTGuvIj2OjIfNStHgh3ozZF5A56fmVMiftwMvKoHkhuqqNM31btAaLEf+rnuyrSQSPh +L47TrpPwJwRapAT8aQNzv8ALlL+yNhp5sDhwTdQ48VohEKTCVmSFzmfF5u54J3gvCE/GlxUgZldg +yNvxh3F4ogS9ggWuT6PAU7S82W/t8x/syB/j3rfSQ3GEENeH9PAiWPJC7mAxbP7O3JsUuXjMx7Ac +cE99XwTYxkCB2zxTQ6G9r04ru6WR5RAwOQ5cG03fB/AWNwLeSesRdrJCa4SrzyfZ5mUMqMrVFO9D +nZTfTcn082oG7tV7e9pSksBKoCjQPCkwxY4s5wyfYKnybnQjCyPSwoPaVXhfiPvP6Bz4mg53eCXR +0ArhWji3gtjSObDU1y4N7YeSV1ukdQUAQDitwD+xCtlfTTJMJj9bQSwrJrgdoZZy23lYoAbCtWOu +YSquHj6/izbmThUUp0RvU8UKtTp/0jYRjntdMBQkLdfnqPqvxwILwe3hwZlT9ir/KzhVoltI02Cp +cmcYCuH/2kRy9ippv3bnFV0pc7K49NTbT38sokpc5k8XDNwI63MH0ZS2iHpObMQT28vguBKz1t7H +PbhbHVHscvZL5HBFS6mIIpXjDbSacmNQ/7sGH+SjsF9cYAn5QaEsnuoTtkcy87jAv/iJL6dFl0dT +cXPA3lS3cz9kJ5To7cZlaMk48J5hkqdoADASq1nPq3JFB4YnSxiEnlRv3yDcsFlYmwDRb2fGRKVH +yGhUbooZV5f2TnW+wcIA9tsWALOMKTtkUvqMdEXDk3cXw46VUmvlanO2snvFqD60KRp/CYp8KSgI +qDVoS4/hNINQaDajHyqv/ZMGnUjmlNNpFrzAKV9Q25Az2+zHBcAZsYEx0mo1ayAGpT1tlNG7ERmW +7GVgDpbpqVmUZ6kwS4Zw6uhqPsNvSvc6SXRQ1dNi6hSUxvSGN/jfIXLET8gVr3L0LQkP2XJN41bF +B6HReYkx4FT1f6Y09djSBQatsBJy81jN8lDdMvD3bXi89eC27kJBxBz8dXxvQFxuIDWEK6ZU0GN/ +NK3SLUeA9XVFu9fCWAbfgxl3jNm9GXtQhIOYe5kPmvtH0D03gNAR+lQichrni2u0kulgqDm5uy7k +JqRuheYJkbdpR3FbNGp+Y67kxKpKWioXe8QTCDYQ7EGOkJsTpUh1VGbDKAVP6DdwWURwOAkBZJ1C +Vy34h++eAY3aGdRIJQUa5i0FFA4ByyMsJoi5xF/Nwhnw7IcuvEJSM00zhE0KuoSKgV3eey7Rdf3u +qNFAzZIsaywXOwdNP4ovKfK51u7YXpE5EefBWdEaRv8hkXxIefqbEgRwfMPuSC567Qv0o2Zls/iu ++MgctdS/AtHVIJzpbedkqbZPevlT1hbsDn9LYTMyQGMRgbUmm1s5kFzyGclFJjY4L+ZLwCiGioD/ +1zLfrnbTEgxP4rFwolPP1//s3UPbYeGdbmmeHsQs2n+INL/HGSM4OXR7F10U+ioEB2X0h1FkcXGB +IlFqu6ULluWOkPW4BrXrqdvzJZUacaFUt3ZD93xmUtEaqqR/hn/BRxnyVem8uAmffrV64GA0Z4bt +1u/RRe78RWP+m4p3Cw+mkSEOMq53YPc1s/asU7oVwox5PGfCl3Vzf+/nFpVTwchXfg93EFbwcPcI +72HVt3iW3Ka6aITp8foGPXFAZbYp0bH3YsFZa7CZai4LPm0NQFQ3lUJnrAb7jgvBxOQcGlFh1KM0 +062gigu4egs1MFnsY7VabYa1GrVFR57rUgEsCFhBfrr1SYenvfEpZp/GO4ToHRwxOxL0DIAimZgM +7IPVjodOzw92q/rSx/W53trWD1PRd5eTgswOwNTfUnA/mEFNUzmyQga6zcPe7K3G3aoea1Ghf0WT +Gmwzj63exz4Zb9SBVuqIkHcYyvwaLFUA94kfGD5mp78rD8kTca3Vqqi7Q9OEGJe0/mxjSp8AHQCT +pyI9qvxq5F6w88eHaIIca9Llb4+p4F4ETJp3TuB3rbd2pjd6sF0U6U1TN2PBsmNDC9h0C70nPAuY +nlY5KDbhxR5ALxVj12b2bq3jfWwwukC6i/Qdj2xnphaFQi3KZ6pRPted4IgHzgQ9A+bpX3Yh9vql +jpEOyviStMOCjVXzaKpTomXpUGu5owUPGCztZJwTg7HIKg2kaElufoABmNgBJA0tW66KL9QXI+PP +duEndPeWXhhQIK6GhHz8O5TLYFR/vVo6r2K+28SRHDU91jlH9TzszSYtLU1RDBCUDUC+bUtqFpsd +PlatrVFDMiEytIES06SZ4t9C7ciurkti82XHgCwcI8u2ullzSoj6qkLQmakUpgVgLYWToboonw31 +5N5WXtwfZw6kW9NkdfLkOdltyCCUSN/oi39Pz9cAMuMFYyr+saAQqB41bMWGrPzvlJnAjAFGEMyM +0YQVrhbU8MmPGrDOw4cGch3t5wnPoudMVuv8QOVpONo9KyBr5FEG/T3OqSS8Nyg5paItZ+M+09FJ +VfXuYhKhnfITnKUEH/u9xabqpJNVGt5tfK4YTs5uuI8LaRhrYJo3fQM7vhNbBof5LMvITRHXgVDl +uj8qMFaHByLBdl3smoUTrSUw5m7AQpt39AwWmpRJWMedSAF7BibogSye5Fd3/Jsj9topWGDZjYkU +eLKr8RIO2Dv8n88XXDRCDrWudqZc7zlvg0DaO4cYB33cHikTqTe10wTXehXGIPNtEDnL2AaeMaXf +059Ztnb9NHx4jBEoaaAkd05p435LZ2LzYaGmaIeWIhqQb67O+DbK22hy+6r86iLqqVhBzfviUlkd +0MBvWWkPege2hmSgn3R6KaeCBLsPXiJmJFuE9AhrjBt0s6vOr0Pv0VQPBHhBWjF+yjdPTb1B4ySN +EMEYx4/DcaWWkwD+Zv2BO5kWMOXs+PZUwnBKX5RyXTZueboyzcYKwtIbZmL5fnRbaJGG8yAuSssr +KtIhw4Gg7LI0u5erwkY0gODp42yvHKrqnz2jKjYhgjELRppnNQ/UF5lt4gVXs/PjwwZ7ZYaxvaJl +OGSLE+5am69REf7HRltXHEzJmtOWh1BFMCKBSD9thaXFY5BgIpQJ535OyuWHIvDXwVY8s0VpIYaG +NPw7SXFGh43nybTpgFBtktPh6xMv0+guTyoh3bbbOdVrIm1gfA1LtlyaigH6i14nv/lND1HjU/tZ +Wn46V9u2rUvVm/M5vVaWNXYUdHxoLNf0nEQWuUnQfp0a6W4j9i6UoBqaHZzbaUAKFwRN2VdkVSiZ +kwyhcL/BxQN/+r/7JJdPaF9tyXzIH/lCt/LNCqd8nHiY33pBW8E9P2oT8JOVyQYRfPN6IhOA5m9e +KzB9lCdDsvqJAPWCe7NuVhvKRazOtk37YMKoYR3RaXnmgF9v1kuk2vBEluK8Jy4J1oud+wTt+9t8 +QUlJlHEeF9h+oqkZSM+wjOYX9kPPk1IVwiyfBxaLR1AMgy/1tVZShue19B5/vrLDG+LpCBXWWrtl +yR7BLX/O8R45fnleii3mLoq/hCBS6PooD+21zW6bY6RA+A33BgAkLByuZ1VrDQ1KftkgR/MEM4kb +LEgU0iuH1ygGhDWpsiXbqOZxvRcav3LLiMmvPKjHVAXwNzFl3H5eqvoGBCh+j1ggAgko3z6jg21R +mOXPBsdBL3PgwDwByteiEAlBt1Xw56Ns8xeYtPCZ86TdtQBsN3xPLaLJpwhQjNjycJZ06GB+4OYY +rA4MPMnVIxji6t4e+Qvpxchpu82d7U+sbuPX8vv9K9RBIrcE/bKEM0TpnkLY14mzpkcdUfdyouGn +NyFD08YLD2TvJiFd3mUYIVasb0ekB+c68a92kqW1O6V+U0cl9OUTnqNnGuatngrtRmx5beihPv5b +0lho9h9ATlcgw/iP24fDUPbAY7jq+VaQT4vQlyhYpMz5WzFGeH8zli6XRUKOC25BYWvoUIX99Pd+ +kit24ZbvtPnnCfU763z9cE0/KpDUg3cla1IVJKkTOuOHEJXQLsbqKaRalTlQWKidRWrWhAd/HWSF +WsHkFCMp6E9G6A0h0pZlvHwO8rWjzZXpu1Z0XbUDy28wHXs1KHO0/uDxq7U4tTZmbVT7ifsvV3bi +gUlsXppd/M1JIhYRWn2ZURQZ00zdb5OFexyRMvxBCM/jcVEp39aDSS6IinNymub6D3IFowGZWdj/ +JLDXYZVBX+B394HVzgp7DAtBmx6IEchC0ArnRtn/vYRxh3XEozSbld+ZbcMO4SHQ8OPxa6Gp61Ow +540x3CXZ8DS1d3AYZckwSKq8Jq/zR5shS+PTxvWObLotmjErAoF40nzZWap2PYbeI+FTjwsDgG8j +BN7zLe//f1Zqj8lO8EfbqX8ybAzL1rO11I8heni1UVOXyQ80wjZRMlSeIyNLeOxatOg69eRwAVFK +FZ7gGurUYNinEfoBIQnAzG0RBflOoMRmIvxJVg525j8JpUFavUUDXwuJ/FmvS6dMnQkEw3+9+e5b +CUkdsBHH3ghrv1fN4J4LsaUoluTlJywkbivg/bZEgeJ7aB9nQ8w4IKCl/izZrKg8j7E/8sqT3j5y +Gs5+E0Imgv7Lhqz9elcYYKo9rxFHyWGhGZHDAJffv64l94bPkBEtJD0SfboD43hDo6cFFmasU2nx +MYdmwIpnRsymGOsTKvjhzbWSOO1Vk5j4SDzZjg1bDkmjmwU4OoeShrohkWyKaTpMhfBWtlY7JXav +svQAkKnhvizN8+gB99FHG6ZrOS9Kve0Majv3P4mjg6mQNjTEEMEP2CFxnfCtTCAxX79DQUgjMfvo +U6e0lYhXptuZSm2xp9uOvOiPopw/TIyU+9M9klPAqtHqAm/lV8VPu4TvNRnnJfV9O/XqP+42ximg +nW/QCa1V6h7rwU0dEgkVadps5Zakgd4ewhGGB/BSxuOBxHkqCaklRc6U7721Cz9XI8Z+rIpXJO/O +Y5zakK8NuK7yyvhfnxysGY1ZBuMVfExNhoUDnY9y5R56v6ksOHSo615XYHY1PGOPLhNON4SGUdt6 +jchCsFb8DtaOIJPaLsex1yYYo2xbmORrrMA7jtZUKPD3iQ5lWQScQbv1oAYzZOoUpKL7u05Yg49n +aZaFxnNs5w6tlhRjnZSIllvOw9GjuZm9XQdor/DOsnjpngZOUoK0lmLcZi/x58DMghoSE9R3uQWY +EVyv1WKb9GoaESbrFjeK6a6v7ivckMvdoPRI+qXGBJaPlNJF99VmnFBa5z3ASrqMXLsbiHKmP3+7 +Tg3XAJW0X3syuGgumi9y8baUDUyopbz35ZmT66uEbkkXtfrVYOUi7wRCov4kuQkcY61D/Ae7xAmR +0TC7T58ZK/MsA1CvcSGN0RRTksI3N09wGe04qfgle1YbYYIJlb9ji7VMbbnGVS/4uVvpEOGxbF4R +AEUXO9mc48vaAk3HVUFsEQeEtv+YoXQAnVFyWCtnKY98KoXJpBTmBY/0VZl3qI0TvxRELmG9It50 +J27CMJZpcc1E/ZZzFno0Ym6QpGR0RC2uO4SNkjo0q91PLdNE62wQFc6XIpdCM5DPdogrMMp5s+mp +BUM/ceV9XprKEzbbiFsGCF3oc3vLcoV39F16O42mEWaghyookcO2rXmDTZHN14efQ3VRtx+bWQ5y +hYA8+4oPWrJ3PG1ynkwTOfl4qrdigtyvImF+hN94c1pkWq/h6ey4JO6/OpBMzbNBDgv4RBjIg9OR +Pj1vPkbVZyrGbH+h8oqY05JrtU0lHaNXLxljde76+tD2/lUkQbZfItKhl35wdl3NbbVLkjaMxlJF +e439IIBcUrAqbklfbWJXYfqM8Xp3Hsf5F3mNHC7EmY9Z4uBSL0hpyR7O5GbKBlvwTzH18C81gu2N +DQKOvmqQ7yXzP4XTtG2UZNVvefXHerpI3B0VXL+m7zF2AOxG0z/NFxeafetfnIBUcTVV9soXcV01 +lZVQXgrjYeFm2lxCr3PjkYFJ7e7eA6yV0K5tTnyUtP5t9+j36uvZoN6AWKlnwFFaJzIJj+PgOMei +7DEb++O9H4sBMEpnBMLQXU1o53gF38x3cj6r0Aqd2YhqUKPobFnRdC6qdGF0PhN5eV7OB5fe7FzZ +W/zTumX4Lf0Ko90enfj+PIIsDJjMXLsksUk3cg01peUmCgtBezvAjaL8i8lh+5erpdZhiXzaNSb0 +DSIbkLAyUKhqHsmKnkdXTT//yd28+pLSFZJ+aK0aV54I/xqPcTEOiCyMdC/93k2uIjz25KxbE3Ly +9aM/XM4TIqSKvnZEhz2+fv3zRSAmJoGEBekiDtZLAe5KDa0rkvp7EyOC89pWMG3V3w4HfNUKDTDj +iNVpVZ1TqUKACrWg8lu+RDyEPXMDxk2eibbA9VIfJlukxazWs13EOas2DISt0htIUYsToWiOyYG0 +yXPgG/LaEdafP7n55Pqs5DKejj1qYYgydpuOPf9HG8s7jEHRA32BLeJ4jGu2GkMGkBNK0k4HBfM9 +wn+NJTugRktqf1uoZUZe6JZDRYZ5hJiXP+qeHmRTZ1TPwXCn1zeyDldpI4MfLlyxuehzwSF4BKv1 +bCIbI/ZzqEwGI8HikidlBXiKD3flmwZw3wr5OebA+SaDEqGSTwRWWNLkv9bqBt5306EM38LrCtWh +Gh9wNfTSszhOUMyT72lSbcgNvG4BJfl06BJ45b3C6GMVxcw+tFcPHX+lFdL6e7izIAqIR5B25+yN +HtctcHqv7j719c+pRZEgnTVby5KpEYLrvZQSqjHJqimziYeYk6n3A3p+2HNMoySKfhu35+XFlCLr +h6iN44zgN/SeaZO+c3Iicssz0QSb/s/AcUubaQvePegu5/IMYfNT9B4Pwktpb2n7BVT553OIlxfe +QkRLcoqn6Ivx89pZVUo8wkCHvHzpuDF9G1SglX5DW/9ky+59q6CxH7TcEnpypPbZUJ5QiXLoZCOm +dhp/rukNvec1YlRvqkkNcTW1wniqoM93JzJdbBqVmUny1q3ex0J6FxxNdnGFtWY1/zmC8+2VZ7/e +gTSEp41EMnPNZESzhD7W0AbSH62EvEIgwiF78HqtIlwiOnieNI6XYzuYEPQk9eH0UUwhqk1CR3cr +mvqGLA3+eJGKIs01uC1NLVKZqmgPQGuzcDUSHGtsWsScGjLjpQ6GUeV42K//9mRDRKzACr+ff8MX +x2ImxSwYu8aQj0B7n/UuQk6nc6aVBxb47E99ig6AsMrHCCbIlngGitQgqefSfOuznoKpI+mX7bIm +T5ENPNo1vlR7UnU8ylEwsWvkgSxgvdsNjNdmcu5GRUvX3pR582aPgOSfbLqT6Nf8FrzW9IHAKKk6 +T6ZHNOYqTZVoAwJKPrm3clYiLqdYRJWwtVMjULXldOehuCQLuQHOFp/S7OUipoNMBNzQd0GfMp8I +IS0poHIeGczpKhO8azGxxIf2NlLK1/EpIvQ5qz2AI8ZJJOiRk63ObiWCn/bcDoGOS4M9TUbRz3IS +RwC+dwNtHKz/psRdEi6Vt1yPxXJK/Aphgvo5YGIuGG1q2+DF8v6GX8U24QoMf/UgG/Liqf6YkHc5 +gBJ8nTKbFKa6glUD8NDPs3vR+wzA/dHeM4BO8XxtAqeId/XVkN972gNHTIBVsi1CUk4IdqMFBc4a +7lhFzu5xp4PDAD7byVQSznjatYcPq6pU3cVaYy8Ge5YdM/ZdMrsSq2po98fySghrZR3hinTLQwCi +Eweh8JCRJATfZvkAKxhBaWXI+3TflZOlcFqR4GtPj+aoQKT4317aIDgomRFO/DcWaCpmOYf29dFd +4LgLBl+gFo6WA17hPd8wgxdKa7t/FSQ6NPz+GyvhLbkGVmu2bTqKs5JcCN3zMcbcklw3g7oiZk/q +6AQYFD7SNpIlXGWXhhGLly7UibyqiNFx3VLQWdnC/xT8WaL3Nvgn3ui8/+3bJRfusPR4vqH7TXZb +/ZLVkwEw2/eOIrjnhyGNcAzvWycVKaxdKrEIX8m2HmN7RhfvUOipXZdLRVcvJeLqs9+1k2e8oqmn +D0sw6V2jm0FHyRMMbA22qCTaeVGYjxhCX68icQ8Ph8LFbSGYV8XtqvdfskyRp4Gk5dLcsk0sN9eX +6hksfCs+hvOfNCaUbtzRhVDmdj31Z+MUXBK3FxZWAlfSuPO/OYJQf6GkgoCNYREn4xkOcwxaI0D7 +wcvi5K9H2z3nw1Ap7OqFnP9FA0ZuqU8fos5c1EMg8dgruyNN8folAauLH5BYd46nRHKjOI38iKlm +tpAUliUHQouTsk+B+DRjwhjMMuH7omGdLSC3Mu2Yhsnz7bet90wN1LaL9kqpIZc85876kg2lBSPN +BVLbUT5lHF0QXk2NHj6SIjW2rXkPyZzjjCvfmdtxtn5S9jIlbMlQQV0byOcum9okko/YBcdTgoZO +sFC72L2WGYMBU7h3FTTPD9BHnIwTgbkMCuyRfE3tG3aD85GMBOGn6+R63hrXziWlDUNoe82tkwnO +WqVDJ9I4tYedhIlnGgCocE/hDoffGC767Vd+bFaHW2bpJnkPkIIHRVzZF1rt4Vgi0HKSt93yYNib +1K7YsbZEB1kmavMQ06BrdkUJ1RgcSwyfIR4A49ED0ahVVopmcpIRx9/dYJaPnXKbJele1IIdoMXd +fMXA3FZRuq/BXYMdvIPcrdMdEEBcEmSk134S8jch0TmcjumXJQeW35c5pJ3+knINbra5WwWgjFOI +qaZIQYUhqKvGXzrix5Lm70m7jElgVyAwUNQDrgDG411OoY1OYNGc6DbKjTxnLFpzwUSTjNt2zcKP +ziMCilxG0eKWaq/42IoG1c6j8x4SHHmTyIhJTINEoQ+oiFH+TfiLUJtOqzbzUb+S9IHC2Smxguqr +7dHiplYY/VCOLs0ma0rsYxM08g/PdUxDs1YwRIqy/BsX5zLbKFpBnzJ93gkvJpf52GHYJ5GepR0F +fHocywZ+kEUBB6kNWYBmdXvAVAHJxTMGNFl5xfSf1/B6K18D3uLDbHCMZkriNY6sCJp1DD5oVL5s +wvrzVkdaojGqpPDR/uBmdNCLWZ51nEOpDcf3m7OFsccamrZvesG8uBscYiVgpHsaBC3J1VD70P0N +kwWbT3FQTYFfIs0vqYcCgkLVGE6l1gzBXgYmjXjoWNCGZ0XC335l0XqUySLo88ssFNGgOZQe8Xk4 +V3AY50I2m5OSLO0rGe+eXLZ+udKSbxaVUEKEn//EX9I4vjiuqNe/0s/V0jgzSFEmogPMfkTQdSl0 +QjtT2KgmUB1uKxtAjx8+MiXOBt0ZeVYqd0gmHgdl3EqWgYlu6SVji6K4uf3n2WyqOTS8lZIMvDjd +G1GJ+X+hhM4knGxqc4YAa9RVDCm8a1gjQ3oRNpUQ/a+l1Ykal7X/eUO4U1hWCV5zKbZkYZ2yu9Pu +qnUFzdIJ5E6iZkFq2aN1CgCxibkqFqAGIuPqn9UaBF7+HWHR6NjiBoJo0XHlCqFomwkMjXScPx2e +NM8y9wf0L8b204+R0kIuHqxl1XMhyJdeFiFtkzt2tg/OFf8Hg+VvWSXMAabBifkxchV1o3Dc/8YK +F/5NiOyqOgK1x7Y1yVZJrBpYNmuhHlsvErHT/kfTToluR5XHuO/U7/9TNTUqaoKBam+Gp92h2yHN +OeqzobK5187yvFyKh63TjQyC7xHMJZoN6EHEnBLHKeWJDJZOJ/QtT1kkEiaQKlFuvkYz0dHYRTqi +gDGGJdq6Vbs8a4HC+8EkM+DX4ATBaZh9IyyUxU1bK1ltjJ8HGymykD2BJRr1XpG+wUZNZek3EWgw +FevFwOAyzfrF46zCDoRVVgLuvtMvaTPWp804ph6fLoW4/zRO30nXagB6e88KJE4n1epaPvTF0esO +scShOLG/elnHNoyg372lNpjCAlo2m7OSmW7xoUNXEcx0fgcNsNGJhZI00Owb/Ow7N7H/KYB2L5oM +L+ph/xsSppR/BZxsIDH+jtcVgB9udawDy/J6Cc1yaPuhtLbIqGQt3/+/Z86hrZsxG2zTkwwV2/aN +L+Na2zanv4zyH613z8BQ46VwsR0O9Ht2G+SGPrFX3dTPDWkbbFKJImnDl2r5QGVU6OiFVMY5UiHy +ToTrIdLVA1EN/Y5axkDVVu+wYB8AUdTuUIE5ySChKZIu2WAfOQGzodonZJ25wsBPzR5R2N8XK48f +cWysJgXbtc+XK9DWCDeIS9c05Ao5L3NxwOQwJL0JSL0c0whWm07wg5ZrpzOERFVOYp+YGNfmY/NV +SlPZvLCPCNAEznGTt+fem4Dm3qQfWULakyq/ZnPVLaNCj9XRP9D1tzYOszyMtHlaFSLgQL3Ytwef +WJxV/HM3IGp0K1G2F6FsIduI/4+f9TVDgS4lJmJqbc0DTz+qV4IU0wjN8+e2FRZs+omlQZ8AJPaQ +ii4skcKvJ6R8hshPP61n7dh8jDob/dJtRM47xW836UDcE+raSeHOP7wJidV4T3MLwKwdCK66/q9/ +MtzaNelG56OlRsH9ibab7kfFvSdyXdhH7v2nuVKodX8ZgIeCnB+49GIWj1zB8z4d1AETUatEf0iO +VRfPZw0Qyc3zGeW5WK7eWWnfl4Kg/8QJLIPZvSDPbpIjT7hsVsT2LlkyQMyBnkD1V0nEYr+Uw6kq +HawDZzoku8jHMX4K0/q/RwJB0gGrX+wFDlIvC3I/aqCi5CSI2hZgeGpu0tDGm6a+Mk6+lnu7f9kD +gp9Tge05Z3xMmzdewx5shaX0gkOaxX6rBtcct+Yj/l5xCqq9d7TqG+hI7iptoE38vyZKjJ3X7Zgy +H/qbWtXp2fDigWoZoht21L0dkIslb4k7/YOkJZs98OFN672wg1OVffCz9p0sqiLOHx0Qg0UDcpuw +Thj3O8pT+iPBdz9Ta7ToDB64kajXZUvy7oAtFygEU5gFNnaE7OXgelncumd9caHs0xyPbYRSGTym +9s0ysnVpjd7B3xs4wP7Nz0TvbP3+FnmgyNbfU5IGFus/KYc/nSHwBNLP54urtdQUi43uY56+91Xh +cAgczgjFNBUUGC47Pslh4zUSm7rlJDSuCKhElhj6dVu6XQ+N2u3l43xDEtYI65nqqvzQ2di/QGV+ +qsUZCdZoEFs20Iu8xxBR3DaV43QqfwkpdEmsUhMBd4pSNQ8oxid92Ih3utSKzACMcvxwAqObJ0EZ +rnaXb5Cv+8Xv6qlK50wJMr8AuSDmrYhFusG+c2amr4+Goafpg3qmrbWpYQeoNnx/5yfYoRaZQHv/ +F/7++6RNfTBYa6nxvxqtklbcTFj+jR5azTm54PwNQBnKoU9L2RGjAVHwg+6PtFyhD9MuC0mNBLsc +rGS9iIOvAbQ5Q5ouR8XUFVEHnVgB9Pl+pbEzW4gvy3HtLThYnEjoruPZEeFwU9bQX/aUBOspRnCB +18XGCRuiUYd4FeUmjbfhnCnUubXqfc9eWVLx6rOuRXPg8iZB0yxpI341YqGosFlE9MD5r2NbhzyJ +VAxXKXQj8FGUIlQW1lmJqEZJa7KqOaYOTr70nywOyC2l1/sZhufuvXH+w+0jz+0vI7a1H3XcPlLB +5ss5qCk4LBFUc6VX650h1hCiDpSsTtV7Zg8/Zy0XlWd36DH6bn+JBzdVUrTvknC7W6rv30TVcNNF +G413xPnJ6S0GsutNYuW8w7ZOcnRsGN3/fchAt3Eg9sC73TwT9ePnl37coGh3+UM+Ct+6D7JQ6uvq +K0YrH6duAgRk3sglsCKOVtPwVSFZ/NLMm0CMUUpFLNO7gHIvNEtnKu6KjBJSdqu/yXoM4Icc53/i +mv0SDxCbnhaf4gOxwWeRR8nZQa4LS3BXW0ogmzxELNrIfoCpjydK5OYU9pCb6C/5vje52UgArZfI +fLzRqUJw4KJiVjcRFziESZn7uhTqPfdntKboclLRecwo/K/rbHget9Pc+U0P3a0uMbCHUja2cG3g +DvTto7tVLm5lSipbyvAValLTELvJdBVx+FWwsGbfZ/EWPrm2Wvqfw1pbaKYKbMsggbfoDU13qWwV +iGAl5NvJQL8dpkR+uhSnTULix4nQZVUIRArmGQCklcG7rStLJAxDDU7PX7LqFkkDsypdNsxXuJO6 +EyKdjbGZQdioX4c/SYDXQV0Tf3WdrOcka2LvBPYY5Fanh+mITZAvuiI3Pist7gpZcQjq4FAM69KO +Stn6H+o9w2Dh3NJ2yXYZq/1mLEeA9r4fqkqYiD648cmoNCeSEZkQsl9udRTEWDQHEhTYat3BxMsx +uEMt2IdvBMpcW1blJOuDcM9iE3Z2Z+qg8m/EDaKQGMxWqg8Jtuj6X6iZ0aT9BPQxWtYNkD0eZrBG +8Ah/HdfVg80ByVkOREBLZLbL0Oxmr2NknLtNx89pAH77pCVZBLS8jmRo62FqPP1FGSZaw3Y+0Uhd +PeklBw3qQHGheUSYxZtwGvmVzYIWkqUOa5Kv0EIAv3RhSpX5CYHU8M7+jsOdfO+ILkdDPoh3cF6g +b6nnJXDSJi702rYYXr7xA+xNuPrA7rhszllBA/UJM5jnccmUArbA9nR6L2ZiNowYzUgowHFdjRSH +6Oy4a+WaLEDDr+tS/tqnuB7+ZcXhVtbWTzx5FcrIQZkohpi3ux8oeBs07KWMf9kO626Iaog58bqw +2C3Kn0jqRoCm9YlSBiG6t0Q+EQ/thQyTG/BxkLEaBdxjZ5QZ37rJGHwOo83mD0h2e4fU3dun3ERR +HdYujHa7PiK14GuQd+4yfJsNcUxoPhizA2g91rLuDz3DDMXdvk8md98jogl4QnB4U1uadb5xDg3m +FXYLORRkSaEMNU7HqiqL3Z4rBL6hYQ5WJKqcQBk316atbFvYAIHg48ZojAEj39Kpc2QepV+nZfbx +Kmh5AyP180vZb3zd/1lMYG4U5iK3Nqrzg0kgfXToWyGvo2ysTSraxiqMM5/KGnOUWy7GmEJJ+k5O +YgUU+ydOP7Xu7cnkM9DDtf1Yjxe+vUErTR6G22bZ8s7UgJXQguxsRGcz+tligfiBGmunPPivMIsN +FH1xU5mcbJwiRK6CSgi1L6zgJm4O5WIvHhD7oGTQJFMyasJSiKadePYID4h2id+xgzcqpuLoTDui +jvHCaxfAVFVi1I4ltcOzaFbeq5tZ26Rf1j4Q0CzSCJ+k2qR/ni9cNiLvoF/JQfUvaCieLqBdzIeA +2OPnL8VcvJ4IlblabUnqyR7QQfis4L2htZ739AYp/Czzx0LOem7OBZI+3TLydTSonbUy1VxC67pD +lXhKW2vXznVuBJdku7+K671wGGBFj9FqATN99qbGkWsc+XBCp9Lc8+XlFYKMzMwwFph3dj5L+32n +hJslUsT7GieeoR5690ybY501dxs2rXDg90pki9zvMw7FkF+Dko/IaEdvdPfKkppudMRew1Bedgi8 +rHwmrG6cBmVo1EqENYR8g+qshn5V25TgQc4OhVt1/dPqBFaWbWWG5MSt+SNpBoenzd+pLmWqvtrF +NhnETG9BjDIRByWWd4PTz9U4Obdpc4ZUAG52Qtob1YtJoVRm/KAaKc9uAXKDm+cjpfXv0iacozhC +vFqXuwhcZye+ggOu9frSBGtdu9grXQUkrMzO3pIcKpjTQGTQwwsfO40yOWHuDTXemJyk3mgnxrpI +DaRaHqF+B+q7IRsP1thE+Va3yhjbzSzDDaQfmR2JyGHOez3Rb2pGT8peNS7s6pcUQMQNqXrcSRpy +xQm7n1xAuPp57X/x35opUGChGv10I+5joSVpSN+LzjNGf8Pw+NCNNyyP8kH4KM6bZ4mvr9rsWBZ5 +V/3AgwWkd4L7/ma/YQ1Ym1nq9Vj0jBX8cMY+QKC5lHVpDj4Y59gFU6A5LlC/isYmTzqaiiiEgRN+ +RIveLPjs6oDFFtvhdB0KRMTDOg640Ma2bt5MArm0MwFf2cv0d8u69i2rwTNd/Gbji05ooGmHJTuc +QyaoWDCRvJBrxSv1CM/Mb58aOBoaYxw3xZloEzm/HfeBoNxk0t7Mbn3RyuVq1Ta/a9iItWT5qoc7 +cIcq6yH0kfj5zruKk2G7NJ2Nio+atW7x3DLm+4ROip4gGM70Pvc59W+23neXHDpweQgrzwVDD2tN +bYMAb5lsVTKxWaJbYrAdME4VHh4Xmhtxf/xHTqrgn6eOhuxx54LpGaXM2MN8dutnG2HyMB57j0HG +5sc6W09Pr5QI3H3tmgSkF47PIaS9znZNDw0N/5fkWPvxFBAnX3+eF56BDZZuirK0jKx+ovfC8C6q +s6qj0QZF/TMCHXcM/lMdBV34ZPXJZzYJCheCNCUJ/Hd2VvTk0OLiH9uGZ08gzgtp5QRDS2SL0AXM +Fz0EfNvvCmF0lRlN9CEQ5XZPqItd5K0EYK6yzbcTmiElNMS303Ww+qOrOCUG1JCuku+Mtufo2K5V +ypSiqYxCEAvQ5KjAmAW39SsEtp0+UpZMIKhB+D1G4X22rfm7DZRVNfOv2KpULus+GD3iINE8b/jz +vDOyRdf8pwSAexrtbqPXpSE7AAMspem0/3G6QFuoa6653vUGUrHrDKRj6U9Ht75VnvV5ghw4THPz +ITqAsmrYuyyOirqfAwii5eaaMhFmwJk2rjZuOkIhFxzvXB1aIyaN/wYtThjKr9kivOU/NJ658m2U +9QV9NCALiq7dxBnRtlLIE2l5xKZP/gKaIVkjPZYv7HIEvpKYkVhugla3HNk9GyooXPDcnYfWvqeU +LoRB64S1IbLpSVImkn90x3pOWlNB1OddUI47CimSdMyw9SZ/3AqcmYc+2YPnzrMBifAs0D3qH8GY +JAzZqYFTiHbFsquDZQktnkyImYqoR4EdiqbitWfxX6qkLIzzjBSpbCmHiTteET++Kb0NGp58xDiS +O//aKo4NJLaSmXBpNh2i5ag/Y4D+70cJL2QrAqGR8LIetgUpH3LLOctXWYgkM6KDy+8g1ChrHJ39 +sxg9pxWLr/xYBPOX/Lwj56QEJihhir7exVk2e/R72hYg3dSZ8+2I56vSTA0MZI4nWmPQW9zjrbiR +iKNP2ZxWUaibxymXI4b9iJJafrrKlWIo37lSRxF+J4ViNcCM1jJ9I7rvczvikmO1piQRRw1jOhYi +OuaaXw2DqYczqBELSJI0JfKEqwvoWnoEdNKIBa6umu5eEsHO1KSfmcNuyVROmOfYVXuioBahJnB7 +g5+kOiq9cvwoK/KDZPeMU2d+YD5s1hFtVej8116JZYdrnwPeDKJF0Cp3tyqx1+ISI/pKeDYmgszY +rFTpDrjIBtq5SAsrDqXRxwEY4BlIh6MTV+3keQ1Przv5y1MVMOhwGvn3OYFTrrvpwxWkcsZHCX4k +E0DLczGIyQwschpnIqpJ+gm+N941QHQdC1H0vTuzPu/HKCViIC7wdJe+9TyjcZBDaMAH0uJ5X/jP +/MR8THNlDRY78G6/VZQvBGAKZiK19vGti/Bex9fADtEw2j682Y7j5ydIlOYy7ShIJCDhD6Hfqp9w +u6ydc3POVWnYCFAj8z8Z5PKrz+YmrJAziBVAbeCz3aAMpD9V0WxK1HB2WXUOHxRbeeMr1kGpJvPW +icG0Sd9P5FfdwIHME750sOodTffFlx6lnrXDtoeyRmqkbmXlfJR2ZfG7JaIZvguSxq8hlHxfrlVM +bM0qkNEUhiObvo5wsLW4D/9S6aBHYLNG6SOVIebolBXHl1PdI1SpHyC76PpUjMDecHgcA8KNS8PU +MsPLPagSI46+wNCVSgVzAqZ6gHv/Z2NcsnOPAkBPB4S9tu1C7dHaFXOfvBE6F/I121PGGLk0WD4b +wzp94mxEWHh1wTPVcPMjBWahAMTYj0JQYs9vsRiahXdapuIZhoQEbGSekZ2Hb6q166psOR5y0jwI +dj88iQAzKXePM22USHMr5IO3z5q/pbedEPI0lnwl4+aoiI40gIijLkJ4vc/FEfPoZmcM2r5a/Ips +yQKDksNhMx8/3RjZD/VpKUhO3tIek0/u7RBVQnD9mJ//QCH3hjIlWEbSdos4az6sZ7fm1RWZwA9x +x5IwidK93v3KSd/wIl3zxhL20e7m20v5rQEUdl2gJ5wTT79zlbaMhXFAfqgE/Kz9YcJ5jeJ7u+n1 +hb05awhb2KUlFVhZdjIpf9fnRDLFZHkxqUX7Ug59YpWQl0BS9JjKgiaqYtYxcGSmbIGKMk4FWsOD +7gvUDEulKv6iUAHiSQCxfh9hgRL/qcmbW1Lugh6pKE3qxrMg2z7npUM5JdRjomykOJbcyvJk10dF +i3TzdC9HTpZc8rRfb3HprvSZ2NbBIT2uSaUFNhvwGhFDcxEaVTgA+YYsOOFvu/LDl5LWrS1lEHeY +waSWQ5r5T29jzSmfryosDOepDk4vD2dL782w2k856XgtjBTVOV1cf8IdS4WOGNIZt7EdX6Mkx/6S +Q17LpZMqQuR6nCdq5stOgfNIEEVoEf7WCQOGxmqy85JizYTfdR5qdLAwpIOOt/NkOppbS/d5NdvJ +X0CyOOrEchjZDt1CxAnTy06g/8hagvDR5HIPHhArrcApGXOH2kLSYSLQ1Nmobl27lKC9QzlYkZub +XOor0PUZocCbLBPjSvvRDec6aaj5cbFerSUiAJ/N9tqjOtdflcoBmpvXz708vAA32xmTmmjveO/F +uPhhSG1oVrYf59hYVg63DZ3oc9C5TTZAhEFUIfVhgXCI6/5hsQv/ug2GMOnDNQr4uY9uCIC0Dzs/ +FJ1jsCAiV+fghc4UJjRns535uaSRWjxGr1p6f1ImFBsY/KtPAH4brPCwMhB2Vax8Xp3UOMVbtx++ +cM872jezpbZZn1sNyYJDkxKtpklb4Cd6EupUNumnpJPlLcNrVYPSMeBdvN3/9kk+4u9lDUq1Xv6a +fWNz6B4RjbAXLLIS+9yyZaVoh4jHADB97mWyLk0m3nsBlm7epjYF9bhwOGDEHTCLyRbshNNOu/fV +CL4QGjs7XAFdExvh/PrEA76CJbXZZr6TQvE6GAjClhQnxqwdxWa/WBiph+wAuhceXQRMKdL+/k4j +kNd/IYNDubG5vGIBLx6jUVeDVi735t11NtmyCvLoLW+YwN9pGug5A0mqRf5kPCS3lg681BMu004U +TOulTvkygBcKVgVLYzT94oOgBxT2E38cpzPOAO3U3NYnOdOfJ7V/hcqVamhTcrDenOLm6+kOOUMz +AYcxIbJb2nOaueKWTCpXxhzkmqR+tDUJD7ayDaIUt3HaW0oV/oaIg1B2jFvW+J13jm1VR0OCr+3z +j7scKd++5uwxm0qiuyybGckNR4lru7HZGkCFjeKJS9cN8T+erBSiWfDut848CqDh5zN5Qyt6ifVc +IGb72rCv0/609LteCtLNpdOtkykTappQHBlU+XK+vV/FcW/K+79PJfyGmN+Ab9IwnAoiCLbcBu+D +8mdumO9xxQ9UyCZ0zeSPGg+5iLAmW9KbP/4yLonOyVeJc1luhyeROGNjkOa2HtGzGmgMp2tsXhAH +YB57JfEWlcLyMjJ72Zja94aY9hb3aS2o75KxCSWTopjs9TWk3zmC/lJYNeIoi+YicRc+Kx24YcWl +hdpitKUErGE10KIZUiKPeBCqc6O/vsyw+kB56yrk8DjK1R1Pg9XYw2j8FxuYfIRuCBBjvZkF1BT0 +6IHMH3+UO4M5f83BF/FWVIP+cafb72Bw/mksdideRODHS9cCYAiNSOEKSDFQDVGvUmaIIQhXsLro +fNNMNaZIe1Cm/pAp0rYg6xiQTUOJHhixLMgPurOG/bsi5Vg2Ic/5hlUKgnESomjRkkpUDlr68SKR +hZrrGaWdPc/UbU/9mOqZ7EC5VIpc/UdsIdl1ZxaAQCi3C8l4XLDEsd+hGd1i/nB+de9SFIZxfdJ0 +Qn97Lhga4z7y2tpNoHVAtzpDrl7cGMn0vuFw8nZ65Yqx2R6OLfz7kO0/uxm5Ol1wZDwCvY7vFCEV +N8lXByNunvj+iFYAX0Hs4gr4bbjOMhAvbEqjf57WQkDNyYy+fzP3KKVKXSZV7YFkxSjWGsPhJ8mv +pViGCPqmCCbZXI40bijNDLeWNwDhX1ZrwbpQhrYyijWubYoFQxZ/VgMr6lNAjHIHFhMoagS3nVVG +f2gMBzRUn4Sbfq/8CwDKTdbjAytbDt3kT55fPbnOZrvfYOyL9BCo1BZ1KAhD98f0U1NQPkOoHWg+ +wghD+vi3rf9H0Li6IWME4k/aCNAgHA2pELo8hZCvgREb2gZ0B3u+sKBNOVQdFRCU+Ifdl8UJpIDD +gQzn+WmgganI3wYC96L5j2s6gEoC49xzl9UCTBbfpw2zhYn5aUXzYXwHBUGU8EUYzcCA704kSnGb +Qpf9l1ZXfKL3+tdLDRUyuuMUSdP28sFi/ojFeYfvAEZbbtIrctkVYmYXkY2pzt5wzfPi2TNl2OnY +YNZVywdpAQgmK7F2ZPjH1izcIndg1KwX1h9L/zevtUkGDoun+YNm+ejWZsfB+Tu8GLt0VxKB7VuA +ZYkcPWGEBp9/hMmQAiYoB4o5GYLMuGejRa6aB5YAVuw/KNAA3JQRM9rfdh53zjRkCFrAjzvf6+ar +afP7okWZALCkmTcTrYkpLZ9/NiLiGOyEmf+KcYQyLuF1NrMaepmBDZi9oB2HZ50WAW4aFPxnzH7u +AofqK8NYdhjrZUJjVRmhOX0oUqxFetw8S1VPRXhglCzO1hBpwX/VWihyAZ1gF1QaD+8EyyqyMIQy +benKzXuVw/BdvlzUTEgo/3ko648SQhqBPl7UIX3x2xbMZ+OQ66iMkCuuPQsSVz4FTszzSyL7wZOH +LG91m+Z6wmOEcCFGB6ZANgihKAKop6CyhXvZ5LQ6HJu9mihT3VJp1vDn8v6Su2Xa9AXbjCsKgKVJ +CJdGDF8ybZOFq+Y9noFT7JofwEiVuWGsgAtdVfuY+iEF0pbbXI1asZlLAN4Z3YTR7AILKNb0m2Ay +HQbBB6VXIWmnJcNyY7GLssZTszs+IIRkKPELYfGOXKdJWaaLbvbw84q99KyHzFEsmmSFZbCkBCvF +zWGoTQjYHgk437dxcMapFC7XEHmETnXqHsJGYiIfo23ZySdW2N7bQt6tbVnZ8OJ522Tb2WgqYGzy +Y5RJ2s6bT54gDrz5QIYAJjkRULbbsE6VTNEMeSOwMkm3C3cyUidBiEz6txf+PxFCDNk0Smh7sjrE +Y6go41uYyvzUOxvELwPNU067JfxwJnDGGGSnnsG+69y0CmPIAGGRcJtjlJwS4vjV6O6fbZgEtRWg +BSOc/o7a85xCndLd1Pv0e1Toe8cPfdX2HWeEwJPtWxPNhnL/hp4noQ1abN6v6hUTpbxOGtIhMZcA +BdU3z41bmSm7IiECPZCuKvVdxxEST3PCyZuQefpKXlo4nZqRSb64c2aMTEas/h9S6HaXXOuJrtn5 +4mGLOfJCcln3ICpe5OUDSU2KhP7+WwwJH8lQE5H3536g5q/Da2SftpsnJX7PeqWlZtllrpjLja+G +caiaVu0N7hcPmKNd/VjV6+hAPLKKP/8vZi2nA35aa5kYzZmNVaIXaoXRlvnvN5uUNA6HMgcLeSE5 +eOS0h/v3ITZwety0KTF9z3Rsg7NDxj5FiUvK86OVrTqK/hWV15/aKmZCOYS09xfdbW28g5TM0fWS +UKmLNPdMRCw6so3UHJM49zYXPf5COPEL7SurIcSHMG0Hovw0sK0mhLraJgjIbYA52Ht/KAxzsRKT +/arsvtjAy6JTBQL4a3QiK1jTfAhLqBJ0qMrUFqZp71OXZQJKTQX41KgN2o5m3dL8StIUO/NMM2Hk +reuI+wBUBYv0hvSqt7j6lKeV6X/6Ou6OdXEFzueuIvvaIGD0hAdpfiuvroMWkXd7fYwXyCbQFmzV +9MjeiDEZGv7BQNEpN/FZo3z106HaiclPaspz7EiqXoBFfz4SXrwhOhejrz+sOKzDWkXDDnAwGohT +1tU41xXndZgfh0dAWB9JLltY4iY650VsZE91kYrjcHzb78hsZBF62xJw4W6YaURbg/m+KUGZZaH9 +4B1Kob4CEXAfOxZyJ85228hcyiI4MjmOz4aA6X7YatW8aDCu09USLClV2Km8WmevFSouYAyJIyTt +j2qxRs+Qg4lgH+44kwo0p41r0NblvEmTt6P2OAPtsOvXMd7WkjviwE2wLbeKCQLNkctkAU1FWxno +8N7roSczb4VcvNKaTrGTQb9gSr1h8aiScnQ/dWdUcXe1ZBwCRVbNIqQ5+latzFINkgkVR1AdCzY6 +2tMDFPtyIKUpq93p7oog6j/Aehgn+Tty31PDCmE20eqALLtBIGSHSDbdQRTfJpVgqN1OUnEykx9q +I6bQwQ2c+/V9mVnVBOcaeMvDce0FyJrkCWaC29e5P7yIrwIJmHsj5knfQiy/J9ocWVxlmcgm9WgK +r+n0UslJ1ba+yloKa9xNHA2bAsmUdVJwLTRzSUlehxjswU0peORUnvsHyqtn5GLTXGhe+jvmQuaU +893P6sc7tcE6795gnfnmpWiFBHORQxi5Ow2ojUfbl2RMMAwMKxaXL3JViSDczGLz/FMrl00FRrZU +MfY5gdTe4fNRoNHIBQx0DiO2AC+yX0SDVKvU2/DtX+TyZH3YcB7Tvn6JJqOMeJbdRphFkTPz13ii +V12GykLXcnd2Kqdh/biGsG2hqH2tEdYjP++deMzbqP50XLUTG5ga+Jrf+LYHamHfpgsuLBfdbVCd +YfhDZUGiaEqxGqxUHkXtM44utxG8Y2VE5hcIP/C2MNeb9tqn9EXBOKny6biRpsHipG7qu8XJ/SA1 +XxH9RImhTWqVNZ35GlJmiTf0XSTLHumvEbOPaUVGNcnd6T4oWxBfc5NCzaZ3tN+smCuBXcrLFJ3I +YJ/eO3k8lR3XMafOuCCRobYzuMRNzGRrXRkgG7nQdNmGhypqJY16/Gjuryp8p6O8oW64UWdgNlsQ +gPPRrHU72/Bj2VnYk0AMunBAsNWRQ8LOo9/5N+LWby9fuvkWtivWkCSgRwbE4gJgtECiYKzLIvTO +t3Czz2R3y2f8yDMRJuPrak0lQtp+XcIMMYJxpQHXPQWrF7jX0618n0yeVTGl4EQCcJoAsVuh+icH +i+J0vhQUupXOtr4WkxfuU5F2q9eDmjy1hEH/uvGyt0JpUuQJbDVtmTehLie27ur06XNeXRGB2To7 +zUjhMTBwyFq9BOHqFaMiHBniOEmaV0ljGRwbvjEyhNnlDkTBwKRs6BG8UMf8Y4A2TKFeKK1wItcP +VoSMTEKIc3yPpR6js4h+QdhqJlvg1oPzDmSB0FqwjI9wEQvT5CZMuwc1aDUvmE2L1m2xrhP00t4V +tA6PvC58Ce9Q4Vy8Bnvw0C8geCI7c73qnoQg80VsYS93FpuULT7NSeDkOQF7Qi981LEY/tG42Eg2 +4G7FHtJROhleZ8jwbSTCHmaM0ae4wpBwfVKTaht1tRDdv2An4OTpELHNc9Tv7uIGv2XRMbaS5E/i +z5B+NAJjHb8tyg4m2IUwjI3cDzi4wzn+udLQrpcm20DGTEFbRHO0AGSDSMqfk1I+PZF3VZS+djwo +b6X4iWDP91hhRayZXdY2WGbGoVVPz68snDyswiEHng5gBA3DC331k/5rLrQSO91HsRZXrya6sL18 +UttYN9BJ5/VgBXRJQZWo7Qu3d4atGaT/iAbPMBUJoOOGzzSLZjDhRRrKJi1GdypXJe+Ugz7ecQ/C +Ji/KTPWuEom9iV9x6SDQz5P8Fkxj69Nen5KzgkUDNoUm2jyEAktx0aci7p0Ul6p8pk+fz4skzzcj +t2NtG/F42VsDSyhk5I++lzM8sWTyw2p6zI7AdlNKnFMUUphWExGqC8qB+DFA3TIf/1thp1C7Oe3d +crtW7ZzUSyV5PpjT/hgf9drAaC0axpNB0G9IMwOsLrr/M+p2QzpzT+QD+oRmWCDgcY59TAOX65Gm +BnvYtBgSXbUYwbT0rA13J3RKK7KubKi7pFxjtWdETUk4njetGi3UV72MU37x9mHC8cKGVm+aQyqi +gn+bsHTi+PdfZ8UP7DNG1YtdNGY6NNW3Qq2CKoKV5L4yBYUCHadsj9i/JHCdb0DLUc516Bx5ixwq +us5vBX/WRSNMlG7bfvKxYPSENX47DQvZTrH/3jfOh5y6NZxjQHE2YP/1IWiq4TVCfUJTurwPavYM +vN7cbkcvLydXOpEkwOTe4hqxkLTv2+mYzJ5xtS9ecjd11CKfYLKSt3BQj3FAVa4RAsYWJ7JHD48M +sTGNZzdTh3oitpQyX9qK2Ef/hgPSlPzkiJ8Din/UnbyezW3Ad0M4MdhiF5OzYIeTSdIv1LFRqGX5 +rbl1Ld/Wp09jI7U/ldCJTg2QOwQwkRiSE+ukF3j1VB5Alr7Ye6jIPpSdTvx/G545P6x2aC2FEmCt +7zJd+W2ZbYhmkMf8muJeY5jlLKO32EP3KQ8m5ukyuv47ksOpm+tKHdLCWMq+uIfGsXLwBU5tjk+2 +ES4lA+YeP6qq8TpUJmNcXNiME7tBllf9Pa+StkQDHYtoGbndrri3hdBLSjhpdV6WOmZeRcJLg5xt +fN3sV3YEdMAtg0QSzKyKXo8veoAfR5PU1Sh+u9dekiOjCiA55Bd7AH3Ae7W/2wdl5uC3EDYS/Osf +uHX5b21ak92id0//KImee5GrplMI/3yk+9a74dQmaLgo0UkhliZOeos8LhGJF7wplALv8tL0RpVb +hrmySCJ8canuiWGJBXLoy7gLApGvVjnMrJQ+dK+94iC99Ooy4fz9QHCjlXSGgY5UnBQwfNRPi6Jk +D52+xR1DZrWgKKZBG4nlVxXQfKjxUIZZKNg6Z0M+meHnw+ji43OvRLFQHF3fROdYna6EPTt1g1cC +BZ2c2j72syZVUUssQo4ZmwMEu5MoSCCaZQLp4vm+ScGyN7Jo5s45/lvy53eXCCoHzelcxSlQ7r3P +Tthc3digjMpQ+cnQoMAL7c622x7DN9o7uLihQ/GpeEzoTMvPmiIhz5ving7UF1mOp5bJY2nkWEBi +aC1qCHL8xIy3pGC1+sdEtxE9X8rCJbFiPvuX/yZ7Y3hjqiT3R3SV4UzeErTr8xWSZUuDfAJmXh0w +tsNwHynRIDwUc/tIV/CmjaqgFeKtfleK16fEUeOAXZZtvzXHZoDpQrluUoyQdIJvrrBuAqXAhGH9 +s3SLh3HTUbFeql/sU6BA7l5lvt3+pAvqVfCfD3wa74+QXwfTFGgbwaPv3gpQmZQ6mwXSMgUFx5Hr +FDhMK5oA/B4K8IrZIeXYsM7/74tsB3iuGrvHnOZAMnbU0h01nX612N9muNB+50SU8VdrV47S+8jU +o3MbmWUxqKTfbdwq66CgeE3J6EGcFC6o1qIWfA/ONatlOdJeNlFm+//ULCUipL38JyCAl4+kue9i +gwifwYTcA5THYSTN3OMZCoOsI5qRjFNlAxfrwH0nSJGkaECrPvZFZHCzniBGtilA+FZFCn5zYr1B +eSOb36w8mvbYkWurUMm/QypMFiwzOYWBvHpe35/ivJssnvIqTsf5iWt2duOHZkCmhUqPKOkslhi7 +Nwwh5dKEY048acbJXQYgK0LpNZn2/I/O7pZgMBVkG5IjjPNztlz1MnawM8RDsmfUMwuN0W8ZcP6Y +MnGLsJG7NtH5u0fTT9MK2fyXsyGHw5kbWDBXNmdQ7F/O4DEE2dDp87NS88usePw4xg84VZGW3rgw +p7bZ9sFhCswYZJw79ewQ2Fgr6pAX4cLo7FF/ZMow9B4++12gT8CXazJWs9cyoJDM7N9rZEdRWPxr +I0nNNAKcpwh70N9ZE+phhUeMBrUlHpb+eiI/zplrbqVxInjb8Z/NSoSh9pgzy/uc8yJIm/fOWQIg +aeaoZZsmnMLF5qTKu7eT9ajFaeCRvKvt89V8jxHID7XaxaoqWQ4VNz7HwxfyPYIAYbty2rDlE5fN +WONxoZSNZrGVmBoViN2SzmW/iC7Xr6dkLTk7Fvijfude34onh1YFWmrMCjg+zIAGoEyq2K1mf3fR +7z57y5/UPMPxsZc3/tDmPzkwot0zuYibJdgMuIeXvoZiIrbloDz87k/gTsoTbIScwEAIfcyMYkov +We5+G106zXajWVpAjFFogB3EU2w0jUPhdYKD7PrRgOFjn1rT4QuFgI89JEFwo8coKjFaX3G0vrVp +NO5rVhHjUHwtzAkYpTef5DymoI6h+H7A++Xa63bWK090J6C5MYp18PbqVDRCqQIRVH3uyfU36Atx +/OGI1QkP4AnEqH+WiasZdQrx8mq4adySwabUzGA2XJFjQC2p+0yTELjWgt7ODUf4/pyOlCzm97wG +BrtiBQ0aWoBCBBuXE6zGe3DrQ4m0hQlozFmo1e1MzWQD78JGZJKh/7t7UGVENrhPz6+xjz2weRKl +/og6jDXGOxgWXfn0Woz+rssFhg/wstRTzWLlmHqfll40WXqzyxJsJMRmfBXEE+g2cHcN+F8LBL1u +0NE/AqqNDT7B70wGeCJfayttoBS7ge3WXr1kMnFhZ4dMSeGDBbVSer9C5BeWlB++qSvQ+QMtH644 +GxRryyNXyBlztJFx7maggF4Uk7Da3hApHgjRt/ub9dh4sjHeydeAj4A67aOz4pkhXZ36N/wjnU/v +oDF0h0W0J55fWlod4Lf5R9P/OYUMIqQsnxeGauAY+vesbJ6ZzAEsH7iVnQd6V5656UOzCI6cD5CK +HtoTY9SINMkelDJh9peqJCFCgQAwktlCKvXYQ0H4E19+ojwu1q1thdT2/Ts5SFjcTFMRId7LZbmU +pIY6HK4Jip0X5tf9F9jt06kmZ6Dtp1YHPwWYaswB2qrBzIAsip5XSnKfLfRJ+RMyolAlsvGX/Ryh +ouRj1fzAdv10tvZRErsPM2aL0oSSZGZCOtMnLOGP9Qo63vglRwZ6JQz4LrXs5Dnk1I4MJOjf1c6u +iWv3f85/cZtFcO63c32nTUr4fpCcEYXXt7ATeUr0rO9s4LTlRAFtlcXYDEkC5zEhEh8Foy73aM6g +0oxjo2WLiFZPPxvdac4vqraP44TGPkiiPOdmxk+j19nxnA/61lQ3bKljqzbvZ6wRWO81iHrupOJS +3dZMmOtOROP+sBkgIA6BYUOUka6hZAqPKhC5jsA/Ns0nPkyY+vxNcfNsI0zl1PiS6y45RYH9MeY8 +ADSIs1YtZZK1Rz41sx53aKXUuC+w2YgYuKr20aFY5ai4oSfEeYvKgP0juvCT0ghpYCrBNFJx1QpF +2/V6BYkWyI7H19pCppc/ML4PJPElLfPeweqo8EblxTfNnlwJWshaGK8Ws9vqA9YecF/LCv+B/wgf +C4cmJLZWrLrUgN5tSGuOb4UkpqpGYJ3T3h9lr0DeyUBpor6T83sgPU3Ei18X26PWHSX1oZZaYt5a +veXufsRUGSRmKfalN4ezO2tgQFQh4uhFOC4FtCqLMqKl/2VhKKVoGPUQaEGaFx3nQ+ojo5uCf2Uy +bRq/V7xEmGBEX0mXkGABvqXinTFG77xmEuAIbENcsz5Qyk1uzizctMnHvJvEzGcKdHilo8Ad6MV/ +iG4ZkYEqQ9Je0hoDqOJr32eQGfpx6zUvSFzIB/3CgZTqMxNtYImQsYYglor6emm4TZ7sqDKpRaTv +/pVkB3kNtJeBLvvNMGELLfx8P8snshCaayKjXNpUCUdn+X2txZGwzCjoYX6Z74oDgjHHnmRPjYRg +y2JHaBRiIhylgyX6I4cXI96/ZZjAWwvyJaAteiH7Nvu9EllBBxH0tyQLi6FWHgUkdXhSqWGNIoSQ +xRecz1XJ5r7X+t5+NgR8Wzk9PxG/C60IM+44NDDFIc6km3WOMLx+NGtdqnPOsHRkJbmuguVRa/Db +KVsfHePllCGQ71D2a8aTtmEAF6OfFFz7o8ifNVFITnVkvRBVGfju4xXtLN+/zDW7A9nvlD6Iw35r +AM4QTjkhMtjrPPtlKWVAqXWC59TZZU5TM1Ht/1SKGp1/vg+IuuGxy0pJFtaSTtPBncuKn0LP+ukp +qzZwEqvh+zXtiDO/wYWdb0rhotXDp5QE7jQcbLzUg5xJwHrb4VCe5luOKERXyb3BAHzIPQ4jRCEL +OXDcaQ7FU/m7QC7O3xAp8IG7vgI4ImCj/AzryPW+c5XFYuBFFUNKSgXNgZdeEWZNZc2sxD20KM74 +SXt2UYux28Ln9bWzDzwMlgpTvYUTuLB5jMIqi87utTS9iERM9ddyW0tFS9Toi0Sxovuut759m/Ri +ZcMz4nPk9WE3FjIyPSnkasm+ISj5q/vMFEklR+i+0zila8D0+sixfvYPspGwAjr2mFQKA26U7lXC +92UnejyyW7f9u+j5vwXG1xyzw+qL5x5/x87+X19y7/QcV5GeYdj6sbVUcPFXKSLC0ZpXrBpxDYQS +ldL/aXrPG12RcYr4xGPWT2GrE3VgGK17Ojtcjy0iGnh11U7LLw/G3F/Lm98n9JRv9S+BOEPaKRC7 +mx6E/0YM+jc4IRolE680M0k3Cjqgv6hy971zEDqdqdPK+dWnT8DcJQleJTB/MBl0Yq6/vA28hdlM +/oZoclp+Kux5KSFwR1wX5xsz2I9ac/vOhIdOyxub+ITXpoB1lEc+//PHewTmBfhn3R5v0jZ5c/Zx +rNXIJnVENeuphmoQpUQ6rQKR+u8VANB0k0vOvRlrMnMIrHv0VpEvqZBfNn/BqJQDe4pPGTh7k+w1 +hD2Rz8sNsKhWMeZBjJmzHO7apoKEgSeG29wuGLk1dwB4q0ku8nW7Ie4uXsL/wVv1jwrPXRjLetBb +WAqNPRXSrYNmsLgXAtQtB078tTvQXzD1rbC4jdyibWUdtjosZEco1jDwz8/FA3pPQTwe2AyhLcn3 +qAX6a+peuo2omfzwXKKfpMoYg/GmfDKW74gsiBfSUJVp3DSRGY8YFgccVvlL7GYyE4q/0fAmCIbp +/E+1H9+7b5DeT5QIssRFRBYtlBmsW50x9lZYpfPjgLHWL5gwjbsr4mH3UsIz2AbN8ARBRGjCy4Sr +jc1bTEZoUeQpHH6IkjjWpdN9sobL5kujVRHQUsDJqao9Y3nTQ/Orhgkz7kcQyOFIRSkKW28dbDmD +wCDdJ3PZBhHfoKvEeeKjSN3ARgbMn74Xy0g6t149eV/SMVqCfHqFS6m3MPUAS2R1lNL5Sh9zsMUO +H+GzVW1V4lIPmehFUaNNemJN/eygNAK0lhT15GP06UkoI3tEh6hYMY/m6EF5PqymVwc4+RWJdTyo +nq2ngQ29heH+rqtCkgxh53WA4y+ZqKSGL/WO5soVb6hs1scFObKsFxeoW2zO8vV4gXa8YYj0JZ+q +Ybuv2PoQbcvHGOo4jI/tOTypzsraXSqU+jTi0rVtbFz3C5A8yjCKj16CZezQuf8tJhYIo5si0oh4 +AQDn1BhTq0c5MYgswSHf6d7ckNfMk2W1ul++KxjRyXp9hxxXuSGO27wkFPAPm/4sQy3w7xgja69M +rByItCpmhbJlkQL6p/iRc1gRvhQQ5FQvLlDhffC6tbfnwkE2BYm5byEyy51LWPYmYKtAM3wB3cTQ +uQBWruIDgP2T0UPZ65GHK7O0KoDmwha75+laHyKzTyRs4jkAFVy0qktXcqTNw3YbH0CGNv3Z1AaJ +zTEw8yNsRXHmsChDmVUUdeAq1o1dipRrWq30aLUCmlXMC5M81s9o0z90p96kgbOdNv2koGxO+zn9 +NCXIx93/U0NoTNhTltifElohp9TcykpHhcez1B2INn5P8s0XssMJdIapkojqXvsKMIJAW9hO8xz8 +Uy8zcwYvUj9b7xr0poPyWIqyrxf5qNVDbq5WxkUQu1ab7tFBOjyf2g24Aqo1By8zYaJ2abvTdTdN +NTbZnGHmJlrYVz4EuWoza66r32pTB1Ub+EMmWlRKFulZFet3RhWTvwJ35dzmqz8LqxDiINGRkDY9 +IywHJZs+ZPP/EuwHWhinNZct1uB7IrQFAe39psVan09r+A5laBskcIR3hpxIwLNUPUwPyAAILYOm +ax0CRjgWxfIoLmTrmtNAuCHX8g0eLHLZ65KAzJ8zbDnej/mwHnNc2lAZMEcnsns0o/gjpS7mbbY/ +bXAwsnaFC7J2HYvK8enAh01bF4p8oF+yeIz/r/vRRBR8tZfEuzpyA1dT5gHTY+YAudLtQW7+C8M1 +uhcCit3r5ILGdE2oK6+oGGqd2BXmZuLuiuWfRPXskuxh+bsRSZDaqfto7JBREwtMy/0d9RqncXUY +2GF+7k3/DiK8mhDpVVRP3gRW4m0Aud4PP8dwz7Z+nlB336HerRj5ldeZuADrpR3bTcCfQCe+FIqi +HppmFWzCG2MmXGZwarAkRT0DNNsHNU/OuGBTYd89dJaWd8LaAq3JEcEuklfIGkuCU13iTH6SMgJe +Y+5CQFgk5EcqUtdZkHIfc1RmH5ZDRr+mkV19o9nYIAHgVF2RQSg48wg7DYvTDgo3kles2880ylIZ +QBFWEug6o5UFVmwKowb/oyjqcyhuSVxashCycaydwBm2GS1WsYYSjU7kBCbOniCsEeIkNPkw00kU +mHB7sRxPROsloiKqj7PVcs58r5E0CnAxgfRjsIPEndbphU0XMPaXm+8UFRi34kYyfq1FnuuH9pr2 +aDgsTMBjiikbx3HUlAIwNMJsFxfSvsidnR7lRjbS8ZGxWGsOfy8OoQMuoU5Jv2c4vrSv8rN+aWNS +zqX2PNGeZKq5nd5LYnJPkDja+icNiUNArJpN+2C5MXFUHMJGSdsVp66mcm3IFR6cU4IJvPkrk+8Q +gTOQypG2ITTdbfdJNJh2Bn1wqOsi05bfT6cOaT182ORAh1dPcpIigPn4wuzbo3gAGNw0dAs0sWDa +j4JJLlMc7kh/QW3hBjMbptj3fcWrSR8o1f0oLHhOaZ49iCYD+q2FmR8vVG3IY+wXaSRzTLp2L2/s +MKdKUTm4hB/pJtEcp9/KcqSiHA5zVj7C8MyobubyFSvwZQienFVUSOGCuMmnMXzIgCldG73irlCa +Y78ykOunIlf0TKKqcL0yaIjqXRT/QKdzXFvQe+AmPqvAU92j9fb18mBMw2AXePD0NI5RQYwv6qix +ctJrS3ZYVcyvVFOA8+8ijTLB3HyZp5mHoKKVTqpzuUTNWRrhpQEbXQDNplC8tuNIs6/Wb2ErZSv2 +c3OdGyivaITS6WT7JcGQ9puEdgiyBkT4k6UZTDxZEQUkJ4XpFsO2a5CfDi+sOMOwLa8GgoxFSP2F +9+nBT9Q8gXLOXieDvAqcdMT2C0bd2St7pddDdEfYv3VP/ieNff9BsSMFibji2rjEd1Q/eJT+bIZ3 +ES6GIWI/ULFUEqcum9NKYZI0hNBIgIOYGUM2NzsHvwexFuVgrwC0/cbS1O3uUMCzqgQqD9dEemWM +BYkrzWaZbua97EWwyv3v1wL/7tXgTexj/bQbvmJoj2/7Ev57DQYY4kEtZcvqpeKhuo1XE1do5giW +z1wp0t7TGk5IsWv3lSSXKc7Tw2C/80oQLGk4SW5ZUvBXQEJY41vysLHLH386bJNCayYTUqT9yr8E +ZER0vipwMJ4OoI+iRw9KG7UI929JKl91kZHqZrZDRV+zl4PZGB1+sejN7OL/jrtH1/zrkWPi3m8y +W3k41rWEFcjiVIo3Z45BZIPGV1JgUYgLDIUt360nc75bLo7yle0K6LAOxS1jcw/r4vluMwI+W+Dx +Ocg2zt2O/iFbpRNCb4YIr+pQoE9LxsZdChyROw8qQugeV9TIXqJUo2LvlotFhT57c0QlPw8Oz+Nx +9xpbG6fHQxLqtJ3XpFZIiI0zg3h8rUF2qpaqx7l7WqoQNjz8QTWQSOe5851Q+heeD+e4KE7yyZY4 +eldoU7eCO9WRyuqe8uJAprligBFWtB7E4RzU5qGlW3jplMNLZoq7hKNsTH/qNyYd/wsH+p22/wVO +KEz4dr2UXDBaFhpxgW1dxzaZpGwTYMIS59kAgwMLIqJS0HnLV4guEsxQoyyFGXbgU4mxKNNSYP+2 +rGBTcJuImyMY+TaUfyrBjG8SkzH3tCRs2zuIRpX62F8zZ0F0wlFJkbo/jTuixgnGCgnTxwNW/A+3 +0d1OcroakDXI90JsW+U4dsObZk3CbAkaT05bV/Yn0HE2HihhaNbnwihpBrRYg76Eb90rSt1zkb2k +ouuOlituVB1gUu18Uqz+zkWvy/UyUArHP1h4IxnD7TYy2anHIAdVCztbpTZ6p0jmOtsIueEgP5Qm +99DIZKpxqdjjk6CD+wxnTMisB4EYpWsNuOWpC83WEsErheS1FXH9Zh2hZKFdrmNEx+YsR2Qsj+bM +t0wtyHeUAs1RjDz8nGzwXUd/iU4D4yVyIfhn8FWpaF6fbfG+YBWJYsKP/ghGuMASzMJqAa9Eg0Mw +BA1m7ojVHwcVTrfqBjCBzbueE4U/T2CpAO+UgOAC5OVnnBJunDmhMQuIIpJK0XtTi5kbdmbaP17p +SVfxYPf1FKqm/zGztKzPu9ppVCXgIe0ossd8Y7/W8dSnHWPz2mAvBoKO7fitB3L0tUZVKUDiYnGh +TrXOLXYCfwdH9FB2mQgSvwibTjUhXsryM8nGQYx3Ewir9NtUTK6XZsMywKLV83VTZOR0kq/5laXk +eZNIbi8n7lGOiIL1YXu9y1iuiHymQHxaCoo2Z9M4mc8njF98I7yAf5ptwas0OVZfHjB4ElU4Qelh +lH+VzqYXgWx4AIkeT9HtcyDYqlmipDuO0qODH2a+Hs9vT/CoymC38A85KHXZ9jt5IGLqtKJAx6ID +sNtxnmQiD4JEyIR/hakulzoeAwBNMu1U4o3OHi+dmYgwGxa32z9SAoRReKG799fHBfUsj7r+QXVK +vR0kr88NBC2D+37SfUKBB6OyPvOBiw2FWqxZLdhPcf3yVLh77VZdT6GumYUOPqBGETIOpTontN6z +KJR0MlqTf5HONyZyrnzjDl4efD1BSI1+hFKUBYSl8MNSVo2YfHbZJ/4McH7+aKzv+LszhNtMjWQl +/YHP10RbxAeutpiy31sAfLHePfdxNPmDcEb9Sm3mfhrxVT7p4ICekBSl808zRSLRVReBctqyWMMG +9xQFknFgt8wH5GayvLNLiuf5MZRIcVylMfFRV7MxWQR3IQtBgSwaz52is2jhontDba/GMRpOu0LW +X9xwFpHXoqd9Ll8MFl+ZqaEOe/MdUStxz9kaVecKhUTMTz8CFkNad+vAuc2H/2kAsdxtW24HJ5Kb +7LvJGe3/3NMsFGGLyRfznY3rhSc+4I2Gnz2wCYsLME0/lpl+tBlModiUjX0OdWoNKesi+gN2VFiW +1SDAT3zOZ16HZpqO6ibx9SZGOjZuW7QyQ0n9JiG/YCwJw1kC+toDDGfk7fb5o4kMnceev4/xoH+S +ojS2+AIWmHaBcrQ/v8+7/y6KsHWgK5miapD3hHFy2lPkewVeYGoVthX5friOTSwK/jhsk1i549CA +lQW3I0BiAtZYcvQjlH7E66Fm+Pa99YAbparRAltsw5et/IjO2NKTAdGuUdHl7X6hRUlQBAE2N3gw +/0F2n/ulxaHBIKv0/aCIRiP2eoi1MJiUSecmKS9PnGO0f4xIL5mA9mPUMvPJ7rqsFqF5KlXi0LHy +kyFmMCp6hlYTKAbJeE30JSh05fD9rCgbub1kJ9kguIcGseCDoHpHrOJ4GGn2SK1ILndAoGnoVik4 +w5dEUc558JmhuUALb2efIsaue7pWTpSwhq8pvc02wAuJg9V4vPj7/rOqGTFUWEHGBEmz/hwAMwmi +pYAzPBr5QZ+z5N4dIYCrVfI+dasjX43ImFohCO3XVptJ0a/sgv1B4YI45D4a/nH922qRz2+8kVkr +gL2IR7xJ1ifBxEaGvqSIuO3suMpZioU3X/aOGC3liAJPmglOshOUn3fBAa/TDLqLuNWX42p4GzmT +VnhE31ZyNFXFAuK6hxmMtaqQJjj49T2gIi0/uHTI0y+lcVqhFF7R9pW8aN97SmdVGNJRF/BqhQwH +5jM/vtey6wptiMu0WY1kgrcyiW2i5Zfrgp6qlnuj3i3K9kjnrG3dmsIxmsieX79Y3EyUe1Kx5hQn +j4SW9RvBlSFqnztV9uf5LtNVf44Jcc3Ne5mzQWopOAomyDWhNk/AxaxMWS1NvR4IRSI5YB89F0Q3 +unqn7/XntwTb7bzaF27hQaU84238hAGZ0c1uAHTQnlDQvgPz0/qPal98N+PLGaUwjqLXSOjqs5pC +i5kxxmXy9s4TuzCjrUcexDEQe3VymphIBd2uSs9Ks5P8XdoCG3Uv26IYlAXDQPakL5lRPc8rYoPp +A4uu/7YCu027OZtJHyaCNLnLD4Vafk08sRCxJ4GtBeYq/vxmPAGC/idqM38/r8ethY4E4FBa0CcS +H3PhpZtO4V97qQq0ZzMy1NWXS1gHwoam8HJrGufJKCrAKQw01ohjCPJyn30L8iOWfE3qZKsKGqSx +nL9p9aIElPd9XBCdqBpyTsS0lXX3ncWVo0v8A2OXJ0EVwOl1IIMBq+Gvqc9jnWObZKOhZtAou0CD +KA6iZM8wGCZpJ72UGp/s1WHkNMEM6bk5SQQFuO2cDQMVWKOzi4TP3lXcBQgAOpHZAH5WedWSuwEn +HBjiaLXiou0TQNI9XxjnqoBTnxJqeqkhLq7wLQCkm8FMAACQYYwPSY5vXzK8q/75TVbmf2AHNr9a +XQkFwr4iNznNiNzlEOkTZSbSKDoKkUzT0U6EiFp4EJz+sRNiXjemtDRpe7sVW7Nrh+o+6GC9itUJ +X+HnBvTYT3urgJI8DLzNvnPBHIDnzFdQzPHHCVqd0sPJfPai7T2rSv2R2Lrtlytz4Y1ehCfCSGkd +IARQvmMfuHjuNcQ9rYNsVDdFQzomCCXPokncE47Vu/YxQKs6sEUlRd+g5alylQTYocUt+JoE6rsW +law6qKIH1I2sDgQVSuWGnE3mOLh/JCFhkCy5bRaCutCDggM9B0Bp7f5R0Tq/VrB1yB0w/scMAuym +CLhkkt5xF3KLetTcxyZXuIIvZqbKgnRi1sraOAujsohb4oE8fOTRmFkhR/OH9KZ+gJWhkCbJt42Y +W4MXt7wGjqI8VT2DSVczw6I2V6iX11ujWcIX4Bzj/hWvYRaVejNt8OVcXJLlN+rNlz/kME7ERK44 +fwr5TEqZNkY7/sxM26uAZ2c3HTn7wiOrU8rq4EzqHpZmKdAFbjMAvsd7Bdr59pxQkd8/jpVij9YL +uhKp7++gN13yDPp3gRtORJG5NfH8j393mCAzZOtFcmtqGVhxtZMrk7KNk5CqaFrwnny6+hfHWdrx +80X4uBQTKq6lhZ+NWLIojBqJVh90RnLHys1JnwD2IBptoBtz02PfrLk= +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_reader_top.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_reader_top.sv new file mode 100644 index 0000000..3f43d63 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_reader_top.sv @@ -0,0 +1,67 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +ClZ7BW3AW/Vbd9uJLdpTjN3dr17sPupUvTUAAYZlBQ2uO/TfM+ZgMDXsmzzqQWFIziW75QxsJ+G+ +V5O6FaJZGPu2HCuFRegyxGjZCMXBwQ1Qaa/FpVQixlnCuWTUYZ2x5z8HSex+i0WBtelPBy9BQU/e +Gx2nm2YpdDeEMYAHJiVBJAQN7hyq5rOrvRKE55wvCkO//2lgL7O8qjRZrWDeesiF6UaZq4YyXmkW +bR9vrdLk3K3R0SyzxMIqS9XOgcKyfdEeQTW6n/nSXZWqqwRsTfQoMwvvZNXWer7PoX7M7npHGjpf +bHbHC06FenEOJKbG+4cyYElMURo74LTsNM2/Mg== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 2608) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_writer_addr_gen.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_writer_addr_gen.sv new file mode 100644 index 0000000..25f5c0d --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_writer_addr_gen.sv @@ -0,0 +1,108 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +ExgOsG8hXGsZOKQ1dmyK/jbmR4RhmxNu2e52PzyzYLVYLDkAYWIvX3lxmDIx8NuKBRh/hkmQFO22 +exn1rVHuN00goYFynwoljiCQYtZvsHgPLsd6LL50f8Xjz4P7TWRDzVbNT316G9ae5bxkYEDJptdP +u8Do+UqakzN//28Ih5UMGppR3nb67FZ5vqNvc7To0kaCFUUKlkckCWGrR3Xi9m3LtoTMkOwBjGEG +l+D7I25CF9qPdUsh++aL24Die6KfWjLcWUkAvCpyRxiqVz2y2nKDYvwzI3XyXhjMY3cisgA4pB2R +Fkul9xkgSMZIpd0yvkZpw8FUIbVKuH7To+sMUw== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 4928) +`pragma protect data_block +oEOAHuU5YmlYDoCcAwKxjOds3DSyRDwicG4frpN3kZsUOhkGE1DHQGvUN6uS7p5xp5+vC5tEEnl3 +ovrkTcVVxrgdmWo7SbFeOec90NeawmMQ1e3lqZ/k71WeE2o4hXhWW5l+QT5QeSUDqQgUAhR8OGbV +Qv54dYx15l2r2Ss79heVwI9jnKx0SO0hvsIujC63yXKoWh53AROeDmdllYX8rRz0jc+oxAvGW5Fz +WDRAR7Wz77MYgp4XaYzGZs8aduny57oqEYAkLQQxdEtjI1YAvWL+cV+48+WyC5uPow0BmL/N/BXA +6+NrDJgwiXrIagiEIhS1t4YxMk/onUD+F0opvM5dgznkgNwOXG2qwpO06UnTm/rG83v9OwTpqxnb ++0dcUIs/ut5tCXOf4kyOr3xevPaDo2HE1ixfPaltNt8Kr1sTDA5Kfs4OYYLPQIfHYbX8eoVsg973 +6MbkE69U1ZMoQ+hLW+S8gq3y2J2lgd42EHPhusfoKXStjQJhQKZyu7jCng0jtLnqFeev3IsUPz9Y +C+vR0QDLxzlQDQEvPk133xg1/eklPHhXEnFllA3vVLR28mQt2fV2hCYTB0xp5Yq4JImZtclfaq2Z +G+4/CZw/Gk8GVtCW/fw4ccG3Ii32HfUNrN74SDIb8ojYjxtn0Recr+oMTvKniRdVXgnuD8ruCaqi +FjXRo8gDg7r/jlVJHGcpKJETQpqfgNtqS91Ik3aTwFgOvxwcmTXoxUOxCXOGrw75/sBQCmIiOjie +2APQW3pOHHO14tmp64sH+hSf66jGPhsLjvDD1OD12gjs5lc6ORVYESlCiWBo6KorL8oTHUyJsz+t +TYX1Zc0veTahpao8oNh/+rEh7hDqzqIDdGMKFC1WzyuyGup/E+/uy0pwHMadmZcTNkSzhzhM5tGk +7LvXnobhdqAeS85Ieyzj1HnBZuYhAsknVfJGNHHUmbRl8i2Zf8j2iQnzWOPNQTTtD6w3t0UL28l2 +DIQNel3WiXfXUmF82EN7k1h7oEPSCZ2844LQoJEftj0C0dlc24UIaIfvc38lBU4VVbLxiVNze8Wf +mW+h9DWptzUrouc1kCLdpDYs6hYZ7wNIBg1jQy3SUuFENhv0kY6YUVRcb5UdF1VmYA4Qxtihcl0S +SHRbd3aLWC5y3P4LQ9YzJ5NVqgjMvSDiC8ob/CCgGK+eCxEvfpb0TkYjaMhS97JkRVAv9IMT8m6b +O7ZTy+FYcB6YZ+w70RO7506D8Uiqx0jye4qpd+ShuCcVoFKp3cf8PDLrbEDyj81ONieyqnnHLpzu +/ZpQiNEBIr9+9ml4un7KnM1sfcagFf9UdGsV/izJfT91hM4jl5ZdGbeWSn1YltFaa5IN3DRyQTaP +ZhbdgTGJoWTiv5omQPWFahYZikBIi0YFe426OqdClLtTt7TIUhuMw/zQspgf7FaHgFd3xhiiVeMR +xJn7wtzMTBKAt2PrBBg+UX4PN5JCFANbI/jfE61zq+0WV7q2Og4x1nfXB2Etd06Z0Xp4s1eb5u5u +PMmEyuPfk62pfJE+yzoBZ8ELsD8fs8wUJI+zROGqKufJiv2dBXT3wdB3wjZsuFmvanUDad7hn5zH +/cfJ4Stfof+vjOJlR3KtaKqZX1HesbfJVWzaVC8UMRrO1ejS5uZhUWuVuHLXgCq6hZf8p1/oxR7Q +r095QlqxRB/L30Q42dIkQ8z+0znHgGv1Av787WlWF8fvQN9Z+mbyH20nruGwO0gJDn61eYva4Fvm +CawgfqJmKj6+N7l9z+/P0Uetbt7H4awgcpE/wraaXfSXsOzlPBKo0LoR3X9gd2Ll4mKJw0KJfl66 +p6WZRcWff5KtP5Is+iaOOFR7WVP4pfTo+8bamPGFKCwaEPIXFObJY3Wnd78wk9BimbcUzGVr96H+ +SYahPbZw2zIcnAkssehB5PGOc6+dHF5gYHSvrl/Hkqt/l0DscPF1nZMF390FjCnchGNxdXOWYac0 +WVONaYtLHyQMxDYgz9BvPpuKMpm1GDSy2e7xaWWlHuXwCgqg8hIKUb/1Jdi7Z/cpzN50QCHtjKq3 +HvZmk+jLFky+0Qo3bzPYH7mqljQ+PP1uc87xwq+5RZ0p6fhC+evDqJ4oQL9q63Kucj/78eBd6bGU +AlO44Ei4IQgN6RkinGBmJSshO5Zxm0W9drwwN3AXAo1F4HHewRNkm4po4LhmQ1BW3jT4IGWOK0+O +1qmmeUpDCu38rQBUycIssvkio/iJJaqe7I8ojUOju5C3NtLNyU+GM7qLZ2DWCSmZMKSINEwNreID +TniU/cFgpjXo5kalVMJquYbRiz3Qt/Ajpum3XoClo/c3TgCiTHL+5syW05YyoI3SU82QXI4ivaxc +442OXhs37hNSn1tjWqZ+UWt4dnNwyHVnSCOdgeGwOKD3F/kv5gEHc36iUIwgVqNRYrBVV8Qq8apl +XxEw4grYuPK3CiQFmutXHkldBrebRpQ61eJjjons2y5T9XzONqfiSbiqwcVGa16OZIIGq6UWOn+0 +H1zQa8E0MLdtcIxvlz+UFg1LpQaubv0XPhLjvQ8pRppPdKvZp3c95CxsJSRoCAisbZboxbzhGCpM +nUVXGnaEr0ZtwSTKTnuJ/xIICre3O+xKoBtotPsBOyJahmkjuMiM983Tnfk1DbcUgnnR1Qr6hDOT +oP6q8JA7yg6eeR9UdMDDPZxP+KkyD69PCtHj1a/KhIWHDVxZya3Gx+6eALyrhAtK2wqiDQtCi67z +OSh40VFdwb2jJcKYfPJV5KguX1WgdqHtLPeaAsXGC6kQ8C+ax3LcOYwV1T6ynjjOBMHGzuaNi42P +HGUq49EnZTUBEcLgNd4EqUOd6Pkcc3Y0k/aX/duOfaRnnDldhhVQxzuYI1x1nIGsWBpb4BrZvAd0 +DCAGGZPNqrg5pZDrs8uetUgc6m6P9lwDHoOEDg4ZRs+XJN5VXEeOEd4rckAKmLwHYu+IOOHkbGNm +Owk67cPBMMp9J60ruZ4FtKYFa1r+HlMiz+Tvhsy6Ia4Y+Bm/VA1YOQ5Wa8cnEtMRz85QATR6+FsV +TtAvIzZBsL5F23zxNV+sX7gXxashv8Gd+lwWagHcFLTudW5/cohfuY7OY2qHMy/TFa9a4LEiQE9k +rWv5qqm3LUHeig545oHHCmDvlM0IiAFEYpSAg9IOkzTT+p3jTBd+/U7Uz4Bog+FmA4FuR7uDI+cN +KNjnzyxXFp7BDmQ29byDTmHKFio73Z7Hj3OFvsEct9OKoQb0/uS3w9SWduQesRrfqb0YTB38DiZH +nmdq2vzM8+v/iKmvcRCvgfK/0SlnKZQ8N/fZWE8x8GnotBfwfoxL/6OuPYjGAQ+DsFKJ9L/gTN7Q +T8v8fcTbi6zFxXRt0G/nTOfABh6ayF+wr9EN15e7YaKgVEitms4wOnZ01vZ4rVQrvIPheDyZIxf7 +TD/I7VaxRtCdDhBTFZoeeoiWkjjMa/pTPVp/xRkXU0RcYYadT55mDOIVra8eiylOl6n2bVCh9t7r +19Ene5x2jiSsLk4K+ZpQqmV3oySfIywbHBubd3lGAysWt+ns0FivlwxRrm63iJiPq9ctCfBs5th8 +n+qxKkTpmhwFC1oJGxQPFpwgAYYZJMNf1bMLWJdZouGfICStvfWmiMEPCl0vshDCzdI2DT7SkBpN +zqmMeM0ez+3766QwydwhFc7XGizeGiiyqtVZhLW/EzbMrptzsDjpvIuIbIJwMT5HhEqyGEPJh/R6 +CXRJoDoxiShmNphqRfzL90726AU1uJPgzjp02TBC9+ZMZsC8jHQwCOzYfSBNRVWhOuafHC2jGWlY ++THZoUWsuBGUosRsyMCsWvgGUDN8OnNnqHC4tTXRguhJvGXfsShRwQ2K5P+UsA0RFUym3CPH14cn +yu1CS255yxu7jTZwQ2CizZc5zLogBcdJdhr6/+sdxsf5QJOrLFDbZxjmTNogeR53tAXPkopdLmHp +m+88dLpF8Q63wPgDwNRD+45tfB2crYs8VQjS2SUY4XGCJaraYNYWTUNRJTsSI+y/3vQY6mj3uAu7 +mBMTEXvGuQ+hI6/c9HPD/NAYpxNEFWMXZ3ERXur6umt9GmOVCCev3yv7QYhiXdy6MVEcYPUzfpJ1 +faAuEGMACRrcgYp9wG8D4zrB5yvquDbSEG+X9NuyQYQnRaEd1+zfT4h/aEyuMFPm5f3jDx+bYLOH +d12wnvOilc2dAWFLaJu6EBAmzVE4R068TEgwUV2o4Dmrre/H5b4cgUrw60RPRTSEbapKwJHCKdRn +YnkH1yZceyTK6ew4SBgUdXOoSpRSnsKFmF4g8j4+h1437nucV1jNE7WEmKQqK5whgouEAP1cxsex +DyWCqBeOfN8FrxXPCKIHchaqqmua8n4LpoMP728RSWkYQDq85qM16bvElZjajxjMVd6cj/WdKsLh +GWFuhIPtH9qWODbHbDKwetAMWPyt9V+kExn0HKkY6FO+wN/gBO8uRDsNSxNQoVX8BGcxl9iVOcWK +a6BHOzSgVVj+LJEzddYlSdkCfuRTFEw05Bz08WqeePTVCkRJE/tmNDdSkfVVxD8e4QVkvje6ISzj +AHMI8S9JGi3WZI6ja+YslftSUJb2oxof+jKqEEoN2u5aN2ZZSLqN5b3AJhq0utwtkCJ7QC0f1VwS +QHPV3fbMrniEtTMiLLcFtwnETBxHEF+mcZ0TIv9M/47g5akfESu/u7k3WD9lLIOueN2Snjq3mSRi +5nGpbEFemJimTGCMo79JuzTjoDZlY8oErIHD9t1GzoZF6/xz02dlbisilcJKmsdeA++OidsfME00 +DyAlVGUVcXx0i8VAWiI+CkRY211BFe/wayC/5DKPI3ZdxVIS3mUCTj9lPiAlUHIhJHRTEJ1N6/oQ +axzqU1viMY/IdvZXAt+fxLpCy6KxilJqFk5vtLuvZAkfTcJ4x+MKSl7OTRzvPXTudjdRmDzdbufg +iH2/zEu7TQs6Q/worhJ7wt+HmwZHQyfNtIkqdR+v8wlpzoGX8JILIwcvOOvI82AAYD+J0Y8aDyJz +M+5iX79/UMXNXPsGjXcHIaod8LEIRr0s8pGjbqDXQ03MyGSzsBb7KWkRlPBL/XGYj4S0DOctvloR +OCY7dVV4JWtWrEW8+/BlEZ4oFvVMQfcoS5DlloaVqBPzlMVbOfyV5fTPlmumimJE61dDIIU5QXUy +dh9i0DPpEmo+8BnNYnWXExohEoB+SZvyv7JjAAIdncQVSarnI6S+nJiy7X1tO+s2aaglecWvPAL4 +yFX2E+X9EZyTW5Cek7QsTbP0QMGbaRxLIVomQoDSno5auCvv/fAzf7a4x4wxLf9NfspZp52qLz0A +IpCntr3UJpQVR0KYrhHwQXzTYuZ4lxp/XPuyFNRjbPeNy8zVnVzXHvv9MMRGV6fWiKS/ezT2LvOM +Izop2/MC1RJrsn1IYq/wL2vhNDLycdZ1g7vX1z3IkFCZWNcc/9UTVmGwdrGqbATXdw9DTquza/8Y +s0pg76XX6ktGqFOnsgk+jnhrRtLIZ4ruC63+JqQpph1/RcL9+r6/STaAZyuIqZO9PKflAnsn6aaN +DFR3PuJw2m8sBwGpvJ5RjPmVniQpInHOisIlSlWF642zvnzNWcm/3aMGseH3NSmFtw+rfqvQwCcm +Xp+aa58NW8f3JtfilAZLzzOt4daTMjWHulT+Jydj3huxnJ5H/2E/FSERznuXdnNRVS0DpFtvP4XZ +eyiqJcYenFbYR39izAGnTwlOL8eCUfEgr3EhEEj1pSJ5KTJlyTM3sZbh2sSEKaiVWdjimRTM5gWv +p3KGm0T9maUBRP7y5VzZ9OJK4Ejib3cvBH8G1v9q5jjtZ2KiHN4WfCLUHOvxOhXQRYlKJIDTEsvw +C0qSoX1pLpomBcEuQDu/aDhMoz04s3VUn5gFwkhGhNV7M42rA8oXNgX3+W41uffEShEvLDKom7xE +Ry5IvbtyrEuT7Eb1hptv14lvizn1OxrHrUbcU5cNwYKkCECOe3M8FHEF8PGd8V9s3Y20aVtLX2Ce +tsCswWtGKBZvu5TXmoXYEVsr39nN0fBXcmStY3nzbv+yp0YNErxePg883Abyk30aQV6pviApqS/5 +fp73ju3Ii+KXRA3UNRJ1e+ahw+h3wyxttMQ9MhxXSwr2oZpOiCIOTjop40LYmbnMNEyqfLJlRCMf +P4WrTqEMn2HoU9GyftgWl79c5q7vHZnI5nVbtUAekxXkRwx4VIth+FWJpSG8DruP7GDltLHKqrms ++yrFjNKe+w5t6OqHv0t0vzMdPZ0/nfmWFxx31HUapf/F8Ti1xM5ZQstffPkF0gTXE/5PU/4RRhG+ +rYWOmFZ2HG9Mz8v2sG7iMXeVXlEcVdE6OkgRfs6jXXZU7Pokqp9PlPTZpDZT7JDw0c2NiX544NLO +n3s27a8DBhxThnVUNPf26OUm4uslhSG7C5x0EiWINnq6tUhvWJKJ6moTriEjDZzxfhuwqKBuLRSH +VvcPNqAnTduOFtre0QQBUFqpEKx3v36oaXG6z5pgmA/dEBGVGOLHgSyro4T+OHgzfrY8fFIVa/Qs +eBenODe7mSDD1TLBzsPYgXIFqojqempQ1K4= +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_writer_addr_gen_pipeline.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_writer_addr_gen_pipeline.sv new file mode 100644 index 0000000..2773d16 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_writer_addr_gen_pipeline.sv @@ -0,0 +1,190 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +wFK0L3mhsRo/DN9pk9ch3npKLzto/ExJwGVymI9V8t5GSNE5eBZy4FNOz/MfRO7jU9CwjaSPk380 +VZFqZK22ASWMNTbNa9+Ip0ZbeoqWzx/T+LnHo56CaSHHpmkraaANVk1ozthA/hWzP4rOVQTjU+lN +eLOzl+sD2QVDtDNI53cnRkWTOa+KJiHqt8bgEGEt07hdSBmmDQBPjtaGe5nsyXFKKGUuNaFK87fr +5b/hMjmo34tKAik7f25b2TU2JYG9qgjy1FTjGVuwHXL2JPnk0Yw1NEUJJz9ckay0W/9xvmDDCilF ++PEc00MFY1ccdblt7dBtDyfCn79hoXKDcM+C/w== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 9584) +`pragma protect data_block +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 +BIFqFES8sjI= +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_writer_addr_offset_gen.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_writer_addr_offset_gen.sv new file mode 100644 index 0000000..d158b22 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_writer_addr_offset_gen.sv @@ -0,0 +1,73 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +zFo0hDOf1rEHXt9goIcnKHHlw8BZS62k2CxMPB8aD8+NoXmm2xnRpQoPZ6LU8gfFhUgLnEVw0YUd +Iya4118FLkS+9zriWKAolctphi3R/So17wEUZX9uFGS+h21ZqekwUWGuelsSiHcaYnXquj8PYyM7 +kaqy3dt7EDTI3Pp9kcwPv17NdVD8+KKcKtumyRZLdGPxQKDF8IrZzWmKhadYiKUnIxzFUH2AEXcl +Dn5QBPRYfcrWkSDcuEov60K2VKX6ZW7weZZZwrUUkFo4FpTpwdSf1PyYfhFHtksK+M5XS5ualfgQ +wXysfrtupmhPP+lMnUgbWmCTSPGfinbD+Loj7Q== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 2944) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_writer_block_align_mantissa.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_writer_block_align_mantissa.sv new file mode 100644 index 0000000..634cf7b --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_writer_block_align_mantissa.sv @@ -0,0 +1,555 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +eMKZgFCp/4n9CQ762IR8Z3WxIlhqKSihujcbXMXPL25evZPW9RHoY+Lp5DluM3HtCDqxeD9LlRw/ +R/5WSwtDPCm5lh/DriJKhqC1QVk4OoBtv1MYz4OeUGud2dEdXAyKTqu95M4NHBDy/bHpVNj9Ddy0 +oZTH6Phx4bVjnrdW2a4KRb/U5njIST1Cdlxubom1c99IEEM0ueGdeo1aXegKt+PlszGB9lxZHNK/ +DqgD6r04G6mSlka14vYAaDP3+9YKfq3WYt5b7Fl6xbZwKL0D6ECYCFv3QdEpt5iFkkLeNmBoI6p6 +Gy4/kiDk/GGk1j2bp8xZM5uJfymnwJGpb9BBEg== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 30432) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_writer_coord_gen.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_writer_coord_gen.sv new file mode 100644 index 0000000..b25a0f7 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_writer_coord_gen.sv @@ -0,0 +1,143 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +cLyRXxm2vftvjgUv/YRI1Ysgc7zoEZzGXHRd4+v/PP7FrrOGn1uIiZtWsLEFXOblekbb21B/0X8Y +7vju9E1ITPgWZMppiphJfCnhBBHmLAm9Y46UVJKN4GJo90xKtcznv1lpmjwCgPO19A3e6F61ulYj +AolBhjhKcI1Q8z7VY297QNZZAl2TpryxHxAB+Bl+ApXei9uWFWWSA3e653HIUQtwchSubP+UZ6Qc +otgGm+v8yu6lFUZ+mUqPp+AwyLs3uYrVW4wMb4k9CIJPctBE5k6qJODdhA/YL08t/F8LfwEwqmqE +3Om94UGcvrPOeFlLFgyBGVFVoGE9qWHNHVCO+g== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 6912) +`pragma protect data_block +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 +0uebOBHh+RCQIXkSFzxP +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_writer_coord_validate.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_writer_coord_validate.sv new file mode 100644 index 0000000..b1ef31c --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_writer_coord_validate.sv @@ -0,0 +1,149 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +riWf4lWSOT0b84l5IpjlqfQe0XsHn5WsRc/PmSLRg1mFazsgQW558STIutT10377sRHaag97g23S +XqQlDys07pLEElAABAnmdIpD6hTkfIxRBDPLqm2W9DYEtFraEcxLVsb1i+GNfv/XCMbCSyucdN4d +FtPacBCtfXpFb47gBp2q7OwD/nqmkXNzZ+S6XDuZixtgQSHvz0yTfgAX7/pWq3R7TcV5Q7RWFsQp +4odvTXDWhFMOmGSpxEWxNzGrioXUyZc9gxS+uWNVTYnM/bpksvmSR2wXJdzpmnPUvK7Avtp/lQe2 +6gArL4LJx34dOHUV+E0occxwxFq5RsMpXh/EYw== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 7296) +`pragma protect data_block +yVDxvP/hvzxbIBZzZZq+C/o47ND2FaDdRIn7qnwMmcMuBvt1kwUI0+Sn2Vw3N6NRy67PFBSKmk50 +zfaubMSrtbopC4PyFgAHI8ip15i30dtPjQcekVEWdeJR/0QS3Uq87dMBna8/NgBKqIkn+NYPrdl2 +wuVMyYhj4ubV6fWY6KZSC9F64i8mgaMzs69yxzVIyw6DSCMXRowIikYNe2IKonuHw8GXMxuFU3+g +UsKuVCewNiwaH0SBN4g1DZiyveqIZ2qUaoAQ17DHRuh3wwAu16TG0qpM4hnSy2FjEi+tbmkpmq+h +i9/EpQXeKsQ31v4BpWtM28E+0I6VAWXgDE4Vhw/nVez7Az4SJfnvSvoQI4FeqZ1G18qQbaBgkMM8 +Uz1u83aUJjmAGoKKf2JKQo21QxKZ1sWQ3O5rEPdHkCDYBMbS158CwGIZ3jJdv7aTC3TW0iF0r8yw +q3O9raeBfwUtzhoUVmvfQpdmZ0frHw579o313vDsRoeVXUn9PK/D2/uncklyNn2MS0l/Pp3EI9jq +IB2QUckIfzdcDcqZF5QA5A3kxNSK2E6fdK/4k5mkh+TSh37PSR60sD3HBx3sOde0Mls8MFT+QP0p +pYqyaifQG+K3tsfYXQRkjMXN9J25dVuuAK7uNTkPaxMvbkfcf5iUJOJSVD9n3V+f5m9bLDC2IhWY +b6jAGE65tIgOvXv71ESRHJzrONjcnE7gWXz1o9sgRk4gdnQP/8uJC6BJqQnzjoKigY31c2h4QqMh +x7zGx+dmYDV1/EuK3bW4rQR/32EBkAfznodcVJayIkNaJ8vHiQdtHqvHhVbY1pmDBtB23+ITu5xC +nK9EZK+jou8IoLJkGDtsQ81wDyRwTpe6VaLBQjYKzyJgn5jRBPnLpEoFX+r4XfQt2tjp6xUv9LYb +zkZpD7+LaMnlzOXXZNJW2KoZzv2NWM0KyXuoy/HQj82CDkIhqlxNkZiZHSVqbWSBlZP0l3GMpt80 +ggjoM+SAtKD/LghJ1D4KnnOinBKCZA0XGdrW92S04nk05LO+x0cI1wkV8muzbOqFqummMF8EADwe +yG19v2EgX76nY+3qz5ELZfEW+eDfMGAjTbkSr/UW9om9dl5k8/yFJm/cmho1tD/uSuyWigrzSrHo +xCn+9OjDQX7yY3JKtgf/pM4Hp+YcWYHn1ikzDLEBHWE5l3A8s258mLns2HNGs3xnuI6GTsX6aNqf +E6fjakOiF2bNrNFikHoLSzG7ikpwTuzwdbH8IK+gd3mY283vS5P2a/R/6olZ+rTeGVHiHGNRzpjG +Wt09FcAGG0trLVTp+kohnJRvmsv95JVxpSsM7Lp5Vs4zygfS11MKPdjldsrLiZ5uzbH70a4x2vFL +YQQy2U2qRQd2egWU1cYNyepRrlppYaq5zdIEXfPMuPfS1ay6FicUuU3dK6u0626O9d9gqkxvMRUJ +SDk+8duixSYpzSQyT47boNYg5+1wrsOu11aG8z9zK9qGeqiIdgpDVV+124JHzkpjHHzSHLAMmMlc +14zXesr8QOguKQQebcFbojUl4FqSUq2Dd61kEUNY4kcTgPUXuy5UIsYJ7sNclGKi+qV/Ti3oq/TY +nGzSYQoqxyffST0U5rZA+z2zkBGM8AiX4018xKJDYPi6S2LUjiusZ774YhFJRSJhJrAoX6Y3XL1o +HRIFHGGv49iotUwu6kbRvUu3fVosDck9xPC4m38ltbfB29DJfvI5vY8u551iBhSHwPsZ7TGu1V++ +AEqeW55jkvnnYsQnxG51hmhlj7u1+c4FX/CBSxzcRwJVs9UQsu7rkcO2eWYwPGPRK/YbbHUTcxvW +kxrWoKMcPbJdpnLQ2tDD+qBVHXS3PsBSsEMTeCrKSVbU3XZrpVWVsLp/IyVVkV/GltiGTzTcRrtQ +xCXgoU3c61cIhT6f/fTsEN7aZiwNeNfo4F8ciBVASOyfZQ1eoC3fYfm0OTlPynf5XUDqXcm0/Pa6 +3Mv2RF3SWSPr5/yaSkCBUY7xbLHUBfR4wdAFRgSTRDHFf+OLUX3gAMxLouLQxDVzZwgZ2V8l6nuS +XZMvCik8kF6hdKVUZG8vo8mFjm65Rltyyl1/7k0dv4G/jR9xO21Tix8Sd4H1ekdHvMIuVKWuxVbg +QIo4wUM7W7A0wVo4rFwg7U433ZcmQHDbYFusXf5B7YWZ0Gn5MTY1vQRbjt8+VFUX7roFdtu//0Bm +Oz7jvlDFj1kvYCURA3BhYQnjqb+FEb+3s6tRwmZBxEdqW/cxzwVfNwER1cjmbslgc2A6mPS6TUc+ +5KqeUJI74aBMoBPYYSmgIX5ZTwIvR7O9Hh94cR+YeyKhnyht60mGnZTKR/XheMqYshlXadJ30pcu +KAXDX166kls0E6skA5qLYQDKLRzoXYA2VzuMQWQXqM5dessTxDSreGY4fMgb37V63JspBKE6HIMl +fx6wfw8xWLyBTek3VNoRc6O9W4g0Xymfsm5mxnxD20Hl4Oko6iPq4q27cRk0xNhSkO3+D9fylsxM +4YdF64XPcKsmqS2kSx23ABmK+rd/POQLnaddaH82bBbpzRgUqEpQW+cAeShHggtmDW45jl39ppC3 +3lghrI1HWfm4THOnCic+yrRLBIN0cbIiVQOStJ3c5UHkQHzMqVf5kExkWGFfmjHEX5sF8KBkMUhd +jqTgh0AJ7oDAnEazVZincCIR0Ben9EsjeRLm0tFNuUuj827Sj7+UM5rN8WAI1oLC48tqciNJmYDR +LG70LiYJILjbOp3b57vRmACYOouItXIg6db+EHkCdVpb73EVTXAFrOB8nKW7nu+cgNHJCHQP4upB +GjKQV9QRG3yWM12FJogiqAa49sk4AkxerQpYtVZMzq2YyxtLFThfrkc38UUyxKJi8xVbfIWQEICn +n/csLnjlLZ1JFnpgRXO6LCp6JYbMsW/4nckIvggixkGWeduHEWdaY9er4p8W9+oVjisE/seJK8Uf +mjkwkkjvZ29NeFSAPhwuHyqvON+2q5SD3wzSc15e3/kqzFqUHkGyC3F01bun89q4zqctVbzTJFTT +LrnbVXq5Z+eCqqPqVhyHWhcrJ43/ii6SeeVU5Ql6kdxIuf4n1yVDmF9tBfF1VC/QDLlJ2ULbM27F +HA/vTcqqY1RB725EXV4C6hSqdcm7aCUcdNBcHzYMCVSD8PQpnSHAC9z8d4gHBivBVmwbakXB+t/R +CIG+kK0whosYwHEoPCjnxSEpsGTUtcxTg3iOx0p3limtsTq/DK/G1kZP0YOedLOh/7B2g+Jxx2/4 +6nQzPAr7VairsTQhVoMB0uIoJLA4K2Q/iu/rGq1rXHMKOKDWJFRdVXIJqcNZyDEBF7gl81WDbTgl +OTXOWPUAlWhTD13bZq3juOzcS4zSQlN+DqGnZmqJ3sCssyooC579xV3ZgUFC4G7VkpQEriRo4O2W +96ny48hyWQ4ug1GiwL0EEAt8i0Dt678qYnLb/ncRIJjLF6+1WZL2QetUJTm9rsnSKjfIpP672Mwf +vFUmiKy2f6GmuvzWBljNqRVgG3CMOWiOxY5Uj7RRDc7a/O5srmlo4KCAiXzH6Ua6I6XdxY3WcABz +mqdEx28aGgrioV1FZGm1eHMp4KI6FQHL2G2W5G7wVwo08Lo5UcS3sPIueSkrTJETlgrXs4n+uEVS +lxMZQx3YnAi+4wXYpSNNZuBf9XkN5d/XuUNjziebJOBq1huB3yNMwkFXEwN6knqgCPsCUti/4Z4G +sZAtD4dCMQNqsa2PQGe5AKXqgfHBDKGjJd1ejIYy0x/yS1dhNmR8mbiZlNQDA7NlJa3PRtniTS2p +oacP1lh899yCApnrsTtarAXFd+fUt9zmz2gvJd+KuHj724Sx9w+o33jwdUg7mqcj2UmPgdVH8xoF +UiWjQxlIQEpao9M5KIQ8LGGqs0kyH9IiYdNU4gW33zIht9Ak2zruQFUyOBY37e73YgK85kdo59HG +2aLIqhgwEm2GnoXA5kKZKtD0P31faeFDJ7d7hODVL+KPuOrDxXLX5lXqJyzMWzBeQ1FZCitrSNJK +W8f16wkf0nJhQJIAZU4BYC46IW8yeiEhWHw40xGVNxSOWWiW7CWu/N2VHDpRm6FKitOm0s2uY4oA +M2jRHjfjV6aks2RmcpMGqo8IjqkMznfmeGPJ+/vxOX3n1c3KWwBQpnrJA3bNb6Uw72KzxZzMQPue +O0c4eB85WCybIsSS5eQLXG9xqbDSwCNWkuw5kg7YQ12SY1yVNv8UGiyeLPSjeBZTENzYZspP1TgR +G66tw+61Z+SwoUHrwbvdUpNfbnqbPavZWuXmzRFkAmMBgnra7pRffJLlI85a31BDs5KRgaya5CIq +Qr9gKU4MjoetqZBeXLPjlr+y87vWK5F0el3iicvro6r3AuzAeTkrYyGvA6ntmeHKKzP2GLxvLhLj +j9klsTpEDAtcIdDza9EhET1aXFG2I1NY70B+foxWzXSfVFMs/s5rvEHs4Qipcm4FzCfH6eSc2tvW ++sOETt5E7IN6wpKXiFoyOZStYSKdAD1fwC9gQIdN1Faagb2JSpb+XJnF0FA0NwEBbck/IwXahE11 +foxInCTZBPQAALO/ibr6MIC+zrNSakvpWbd+d94Kodi7bZ2Nl2wk1aCO8QLft3GB4D9S+L3lAbmM +aQ9Vg86f33NJAO7rOHntyEau6xlQJy3p4KyTXOfrikGk+H03MfUQj0kQzkd+e8d1gERdeubYwFZS +Z0hm5e2pcfSvDyOCzwuwdv+mRbF58cgQ0pbEdGpQbZZrhDfJyFdiGx8Xljl3L6SsC3qALfgyo65m +rmZs5dJpxOOfMypiILdkdJbaafQt6xVfsOkJu6zBtdFEHWQL11xZVvlP2K+oZo35+cA184Ja03jK +nRvdzvajiEO23qfaH/zU3UHLdngwxdBgukGyr0SotWiyq8pcu34B8PEgb+VQ1utEUaOoN2UH/ryJ +cmTujZJYC/Yod2Gg8PlgJwpUlqSFGq6zRX8ENefUSRSm9dHIlvO0QZWKoM5muPaep8Fk13UO7q8O +p+B3x1lpnrZIELM2KPOn6ZUryCrlL3OPHYYHZ14b6yfesAmDnmF5YHJ6BnrkPI5jj9CqNsyengeY +n869VkJIGqboJFHxHLdZkUbtjzGthwkWg0Q4i7rIZ1Ipe47uAzVoZoymSxIFzH6ysT2GW5sW/kn6 +R/3Lrj92VClyvZXento1jIEq+vGU+GL/fdTOjEmh3xuNHMTqX+R81l17FJb8XNsRZ8DM/L0sbPa4 +uYoUOtSal3G3KolgD2olzRHXsUzHNSGg455QVx4QfNp2NkGs7fmty1j5kDZiiO5MS7hcK3uH8ubC +SmYEzk+A/3NokKAhlJDUIvc69s7lyOjjXCv2CrFTTVrG3jdW25G4WCJqDwyUzeS00kGENTgDAhJV +fK5GA3lHntARvcGkYDwOdxBM4uOQMDyXA/PitpsWTDiDPSovau2ukcLxrVq5DOdeoTazRCpj9gma +cbD6lw/Czt1PXfuRSuiovcyxW+0mSwGFWIVF1FKwluc3x2tH2iYprrq3m7KMJ+B08eJguEsLzGL7 +KbMUzAkZX+m+vVHkKDpQ9t/jF0rlaOrofYJOjyaDfzB7lPXdXpwUG7dvu7C8BoIDZAw9buO4TQlQ +Vu+Ff1SBPVJAROSXomz17NnEBIiMgnja8kGbUaFa80GS1KVR0Old0F/8NyUdwpIguju1BEx19u91 +m6QZ7bg5YCUQK1JMOrqxY9o9vKff0e6ZjggUuRL+Ets+hiGm1x4mbx+c/1Q+XjsY5zi0G7B+/cV3 +cjVFaSIgRMbWMUFtwGvQgnesONzE3gRmgHPIQZQflHua1KoQ+uDaUp+s0TprmyjP/A1oRbo0Oxo5 +OWdDBEBp10mXwywj8iVRO4HoiPEWSkLCSrHNXGSO7cIOrkkKBPxZLJbmnG3+Jfr/zm0T4UlrmC+m +jYgHnXKELU4kNJpOODGWngWqDhS4ZufFoc9f9fgE2HwmSkkFeVJemJW9ZwFT5WHVxMRXZmI2Y3uY +4Mct1bBoYJK6YT8yben7FF9NtPM5dZ27aLhFDxCi3y47HcTAKE1J2hYrceoOlpUsYBLB1gnUYv/F +g07W9qsTjNUmZlyGhYPmPI8cq84OOWwJP1vn8pxJm7ajbKZ1hzhEjiVqCiUZ5xvag06L3Y3v2vEa +5e3xT1P2Ga8RQ2Ncqk230vtuu377e8yCNghZ8VJYhtdrlMDkPbIX5K/MoegTAIgJYtOp6TQwpsI0 +1KUXe3owc56jmdnORcSBouUAZyj/leN5wGa/BgTqLHsBf1lJl0hCfQT3ENyVDf/R7cTfZEDL/z2z +pu2F30JAnMiAmqN5rY89OwJyqY1g5/QIjOBZ551Tx78UddctUm279YjGCDmz0iwFXfIm7UJHW4CL +g/wf1TVlOiHkwWNjgVAt/xXeJLAC22FFBRAdIKsl0tuzjqmdku6s0qVCf6ys31E9+gx5aT0FdTVR +gff9se8447bGmz9Hs8LOb55tnosRw2Dn8PWyzKByOL45aNdY1g3+KQpH92El/6hr6sTcbzBnjoE2 +RGEGxtXUZufj9YpyjS2P/96KX5khSfuhoP5PhxzHcQQqwh5lov8vSvBxhTUUbRAFY2jfvLaa/7VA +C1voJBArunbKlhvAzngoBYe9mieuGR2Rvbf941G2Wr9ZYk74c8FJ8iBcwc/wgwCTQiJb86+j7Ud4 +7PcHiJ964mh0+skLvQaAaBNJJL+mpytBCxrlYmxeyhLwRCQ+Hgc4o7UIzFFomE1GXwp2kuJkX4gH +E1OrL2erhKz0q8V5eiWXy3zPbmRAuX0frGxmogU3ocST51wznBmEIAjbvHdIjLcPrNvRgAdF2Mfc +0hpOSe1k2i9U7FVuBWog13I8sXJyStSf4NYH37E5nIQZFliGwgaFPVH6ht1O/DsBLvWbS26AWGtv +JOFKPt/4xeeIxfzVRRHK5aPoW7+eEDJxP+yar/F8l4FBriYr0QXdl/IPsBCmy8hRXzxZDYsd14RV +yJzQRaN0rFACXopYiIlJnwurcjYBfoBf4IS+DtRE5s/e7xBL0Xl2f2fRI8zqmWpZH/W4kUr6cH7F +p+ACXuLLJoq2CTirR162GeUx9wRrWi0h98EsrSk1gWrPaT5QIjozbKVWwxJliSC5XlCrVA88TfpT +fX+gJoPqYiABlUwonHqdR4ukDTza8zFn4W018xeKswWD71MLCTz9jQfcrrZEmpHkC2nUvkzct6Au +DjGhKIcsGlbAXmM7GqBp5d7eGYE0hQC34jx/Hgih0gZf7ZbZkX847MXjpoLivMC6Zt8bOw0E/eAh +dPMg1EbUUFjWftAE5k3OsQNqabfJqbUZprFdXkUnBiqEqenGZSkAxj5kHZN4FjpsQ5aEOAW+CfbX +/275LvGif7ywNPn8gegDxKWCgAFGfkhiZ5GmAS/hM7LYejw1m8AJF0H3NkyQNx8ju0nDGJ6TvAwy +rENgpK1vy7k+7gTsAsM6Qbijlrt83DiYx+/GJIWqbDv+xmrWW9pef4yuzNgJZrip0Ebh1hqf4Tw2 +zRwckuHrMmyj5s0bLlBQmBT8aGL45MYwmj5VOos8gMeKUg82kNVUxZN+FbKMJ1zB/fnqAaUjwnrE ++JY9JZGfGzrKqaO0C4tdxbwcFoC6HBDSqmZBqRsCq4iS8L4f1TZqWe4Zay+TUNdB4YSJVcww/qBp +MXauy1dR8nhR4yGAdm6MLwZ6g8UEw5IpQbS0G3qCOZaZh27/mEKEi8FuIORdGIdmILycA1OT51JW +eMrVGwTV8JL9ryigKAieZ6+saIdQvJaktP9SrXjUXH1SZ5064GiWY7ylHp0xpBufZFdB0+RzBW7m +psJWRwRkOvJFByhxbqeq9fEUL8wumZHP8QthJ7B9dsowaBNSEreyu3jrFt1+eQWpRGtXBh9NIfAQ +4VnUjqCz2DvEAbqYuPbIihKxHjoUML09G/C8EbMrvbSy71WJLCkXPlTwDUMnqI0g1LjosyEsPNtc +LYm9CUdiyaTQgnZyiLGYPIVaxM2jtHAJnU+0GnWb14FNDacT6aeus3pM7U8Z7lgMrmR9opUXT+NB +D7B32Xu94FWCTC8xf4VxKc/kXM853Xnsv6ZAu6DCSTIQcRH5btuRBZCj9K/PQv0gnZHjGr6u0RqI +44QJWjVfsgjAmpZNBNn3WvnHqt0TeOvWoFK05jMtQrDp7h9zXr6fEcsaL8cdNjWK55YTsUs25gZn +d2M3iX8IaOVtAZaeO85sVjE2W+szVgRl1xpJFF5Q+Owu9fUkCfPoxCwjWREt2fKG1BqfrnNSpyRq +V/Oj4yFFAuSxgVkZauJ2bqFQwgE0pm8rR+hMe+WR1B8qeyEjxS6BDKyb79aa8SPgJWj5i+Vmz8en ++AYd0dUSu1pGciUHLOF19sPjTqIM98u8xIFrppP/EcTNXGKDerhA//Vt0CiNmMMz0sp5pDMwFuwy +pOCYocirEH558zTIvMoINiX3bdcwlct5aiDsP17SCSEU9Tho9aKa0acxDzs6tBuIfavUVLXWI9V0 +qp+gVYtwKMAFoapcNPKaCaly6xj2yunycMN9NbkXPOQWu3G8CarTtKHldLExh3z8d7xVnLMMYS0H +NanYxOYzrXTopaH3lCD7HfeyH/vXyFHR2ui+f1NddjPKiXVy5v9hLlESoOnDz001Kl+Z4+uQ+4jt +d4u22KctdEHELGUYVbaJ0FyOZH7vcKv9kddkcoWfyYUYYk/ThNycDN2C0bJSabnhmuzb67MbOsr6 +NOGq1qAlrMd6bZtCbyokqaM9C+oa54N5CI7tXTtXjyZZTG0HserAmOIkfLir2aP45xjd17ay069+ +K4ovGNdS/7gr6uHqhBwKT2ZWS5s+EnKH+7pC8rGsSOegqeo9205SeJwejNC+WjaW+D6NId2pIztE +v/fCVKPqz6ie9PtesnEcfZcXGJ9YlMoI392tlKC4x6RJaJHRlXmeOr/vxsknULKqrnxsmY5T4YXW +hZTQPP7Wqo/0mbGYpcl+6rQ4WMCEqCVReSKnlVgBYlj0AKr+ehpCYj6oIQFwc9J83I2gkBz51MU3 +5fnY85z+HmFilrKZpDI2HfZISXuBIHdlmr2qSiBYNagJknPxPI/qQ8PtZVHkCGeofr3DuSoO45RQ +57Fdz64uGq7hjQmNIrMIuPaUVdrAqjLg2N8LUqJg0u38xu1tjZt1gSjIee7v9GR6QP+sa5F7igTe +4TrXdqTjEGL1LT/jI1Tc0GdRaktnu5zqOf1eL5rOwBlf+23Ho+MAv1uAkaEQIjqSYfpCjIxMRFEK +I2tzqElOyCLG6m6+rWftjr/qAb8kbaqfF3cibBH8cYt/Sm77f8M5SYALRLia9R4XgMF+f8RE8j8F +KMS7yIUXJk6HVW+HwQIykNWk641JXf+e8+wF3Hxv1rXOg6E6crAk6IjnsqtFCKPFerv92a8jia8A +aNhvJYx1nP3osuxKt8jvtc3lMPcZi3CqGIFcJdEGO409cup4s83tcIvLQlkf6/qb29iJubNjPgJA +Y+IZnF6KcspWJoHx9PN0aPXjNtuUd53Xo6WrCSJx5tsTLVVuFQe5onXR8rd70epQDEQXx97f5od7 +zWp39WbJZ99hKI+nBDFmFutRtAmivgGwMJy9X3CvISYtgbg6+wqfDstjwGnZAHCYMnS6bTEGAUbG +5pBA6Qp2NbWNHejpIT7lUIMApvKZ+G2Ui70X+D4ko/9YCgeUh1eit20NB9aHNY1eHiY1IPaOss6Y +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_writer_coord_validate_dim.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_writer_coord_validate_dim.sv new file mode 100644 index 0000000..e3f5862 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_writer_coord_validate_dim.sv @@ -0,0 +1,67 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +Qfhg77ZBa1uT080KqNJD2XQUtaKS2jdnOsI1Bnk+BkoUiJNx02KZSe2gLnlYv3QnpC0kBRjpt8tx +bDgbvClw2kf0mVFdtrRlsdA9f+efZr8qIDykkypYnbFTVzpdIAGxzrWe2Z5q/a9Y/HGlMLQqA8Os +aCSzWtAKIRffvopzXaQTPUoE0k93kO/j9ghxcOpGODfJLwLAblMh0JnGvXNTmzYSZvYPuUtL8zuD +olMlGMJdpvJx3L2dzmdEzaEVDISgrN/yyp5qAGpwCoY8EUwe7k7flIXX7nsvobo3EvWaTYVavlWq +3N4fu/ax+jLwOD3yE1oJFcQLR2UAUehpgJk/1g== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 2576) +`pragma protect data_block +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 +99SRiAWwdMDDNBs= +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_writer_data_split.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_writer_data_split.sv new file mode 100644 index 0000000..20248c8 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_writer_data_split.sv @@ -0,0 +1,126 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +aVbKEbsf7y1tVh9JImTJ+uKk2skrLs3GwNzJlCcKxrelxNwDiVWXtND4utq8kHggM6ymYBSL/jGw +V89g5MCAsDtGgZRm8jWcVmzxzqKBg/ic1Mnaf9W9AAIv71ABXbdZv33NhH28tJ1IbOpMCwxEt9OM +KuHVnyKCn4qrgLyfehsJC0LlPFIm+g6CwhNPjw8zDY5+BHAEvnEmBjGXhEjcZOP8Xr/2j9kjNJnW +hdc/4ooyw1ct2pclwCmsX4JZ0Bit1r7OstwceXRZPimHQy2Oo6pfh2Hp+5wEX5cNISqeAPwYwGkh +0cicVTERv4Z2cO7uHgoC3vBtz/YAv4mLW0qpOQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 5984) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_writer_fp_conversion.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_writer_fp_conversion.sv new file mode 100644 index 0000000..f3839a5 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_writer_fp_conversion.sv @@ -0,0 +1,210 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +5WbmjrSWMM4eJd9uG5m+F9NLyC8jzSbn3B4knS/S2ctHLUGNwm6rFpFn7npEeU7+gzThA/8nDcv9 +fDeiquMMZvCrgDtPSW+QbGwOVq0tZR1w3sc46ZX8zCPRcE+NaC1dd81qCkixDaaQZGMaq6+4NTle +UscwY1hQz9qCBKHP/4QCLE8XXj9ssmnw4oAZGxW0ZpYObnu67kYY7iUXTNNfw5D3Qy8g5ew0NRCU +BxVat0RCT12wkvOCX1WBuw7tU5HVNNwkGTjN6RtQgRriau0hSYzHF0zMaCjYIYYmfMuYuvOyqisZ +GQwtJy6EKWoRMtmxLDYObmuzucqPQv47v+LRTQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 10736) +`pragma protect data_block +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 +flIGoP2OQV1r3Cfd/80/pqfFvyw= +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_writer_fp_top.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_writer_fp_top.sv new file mode 100644 index 0000000..339cccf --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_writer_fp_top.sv @@ -0,0 +1,361 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +HuUAPO2ERXXR/l+hWsk84DCMuhv73Gmrl41eb44VfwCNiop9CXLWK37QgxiE5Ygp9A50ZnC3XF+C +8Atk29SjyGOQ5TBJ9ygVtsojDMnJQtvpvJG7Ck93rgTWaE9+npf/eJZLrPqV/+qA6PRzbkWXK/SH +uKyl/ztZSDYvUffDiC3nLfRzpTiwHtv1Zi3rgcL/qa4GA47lMTj5vaR60HoOV7yu+2XYuIb0xMHD +FmySnqa7f+3/Bwwg1Aqn+qxl+nUdj8jYl83SXVcWaeef3h8WY9sIAyfHc2m1+vp4lB9xB5yJX17u +ly8a3yZT2M08Hcs/r0IIn5WmzkpA1Tm6kTQQ/w== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 19360) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_writer_input_mux.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_writer_input_mux.sv new file mode 100644 index 0000000..15dfed0 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_writer_input_mux.sv @@ -0,0 +1,171 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +LVFTVVSmJff7WuptyZGCzOdaPbqUXQgs5SkxBorN9HINhtKUG0BWk8FNhaLfBvt2qfqSOJYCK/+C +O3fprWaGZzAFQ1qsWmy4yR7LRItirQII6GjfQ49LkuhlU+1/Ut8+0dGoENQRaNoHMghfxCCQa7A7 +sf3528sdAMDD1lclyybCMai0RNqx5lTY6TWUWpeZ7V5YyuKOx4BeIx8MKUnORgCKc9tt2d6Rva12 +jLMPUT/dVB84+xrOEc313Zx8UdNyNUQIV9tXZG23lUo44elXymKp8/OSG+w79Dbt6WsvIT9fJLfv +xqqXyFq8zTkXH0Hpb9hn8ggBpJzwr5G4QN6NKg== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 8512) +`pragma protect data_block +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 +CfKTNwV3Q/H8SVzfkKXpgCFvxw== +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_writer_max_value.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_writer_max_value.sv new file mode 100644 index 0000000..03ca49c --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_writer_max_value.sv @@ -0,0 +1,100 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +MqCk5u+2t+/fJwMOL02e/w35uPMO852bcxYLmlKv8BIG+YKYcmloTAE4XdFPPb2qxKcBgjLJHRWO +H2/gb7xjVLLyLNneub/MiXN339rs8r6qY+7yVG+LqMiO82mGbHzU79HsNzGILExWMcseP4+lMwoi +nN4TlfeIPGRh/z2A0dNf0DEHVZiyg4Cep1a9AGTtMSsLSKvZREPjyjDU3jR8y5BP0iCnoU0mqFDu +cHrRKWLzXiaSknpzc0nhlZLlRuU2O6zTZTEW4PoDrLX8SloUmCcX16cpKAaSYbfTsD0dhq69UTOr +Mv/VkAdKzMCXEo5ynt3nKGQ8cVWNNJxHpzXpvw== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 4448) +`pragma protect data_block +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 +Rsg= +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_writer_top.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_writer_top.sv new file mode 100644 index 0000000..4b7c2cc --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_stream_buffer_writer_top.sv @@ -0,0 +1,528 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +MTiGkO9ZsP+e/BIRk8lEssztYNoIBUR/bNS1l5UQFVDVQdBPe+H0Ocm0EPn9q5awrPoo0uoM2ii5 +KbEXnOX4yuuZPwKyo9BQP6MvDqsYIyWQ7agywOR7E7VBPCzipxd2NlZDLI+ykDwXUfPcS/8dl/ob +REwFz1ASdo7VNWsPRGDeJ+fwli2bhNGHnD+j9MSqRIGhavi/b/1gMAlyEfjx5ZGl502T2kuw+bZL +wyWvIVlpPhQ8tfCOHjGAP3deUz2loQnFXTQF4kJqnTPwbH8sYTivjJn3V9t+EnkxeSZ/PaBJY8vv +zzMdKfNL+23aO/VpLTWhvZLKU22zhRPTLNYyaA== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 28848) +`pragma protect data_block +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 +1x1P+/AD +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_streamer_fsm.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_streamer_fsm.sv new file mode 100644 index 0000000..9286e39 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_streamer_fsm.sv @@ -0,0 +1,136 @@ +// Copyright 2024 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +/* + * dla_streamer_fsm.sv + * + * This module implements a state machine to produce the correct AXI-s o_tready signal for CoreDLA + * input streaming. The goal is to make sure that the o_ready signal goes low as soon as the last + * input transmission for the current frame is received, and does not go high again until the next + * move instruction is configured in the input feeder. + * + * To accomplish this, this module implements the FSM as shown below: + * + * ~i_dla_ready | ~i_stream_en + * ┌────┐ + * │ │ + * │ │ ┌───────┐ ~i_tvalid + * ┌─┴────▼┌─────┐ │ ├────┐ ┌─────────────────────────────────────────────────────────────┐ + * │ │ └──────────►│ S1 │ │ │ │ + * │ S0 | i_dla_ready │ │◄───┘ │ S0: IDLE ("Wait for input feeder to become ready") │ + * │ │ & i_stream_en ├──┬────┘ │ o_stream_ready = 0 │ + * └───────┘ │ │ │ │ + * ▲ │ │ │ S1: STREAM_FIRST ("Accept first input") │ + * │ i_lt_done_frame │ │i_tvalid │ o_stream_ready = 1 │ + * │ ┌──────┘ │ │ │ + * │ │ │ │ S1: STREAMING ("Accept AXI-s inputs") │ + * │ │ ┌───▼───┐ │ o_stream_ready = 1 │ + * │~i_dla_ready │ │ ├────┐ │ │ + * │ │ │ S2 │ │ │ S2: WAIT_FOR_NEXT_FRAME ("Downstream is digesting inputs") │ + * │ ┌──────────┘ │ │◄───┘ │ o_stream_ready = 0 │ + * │ ▼ └───┬───┘ └─────────────────────────────────────────────────────────────┘ + * ┌─┴─────┐ │ + * │ │ │i_lt_done_frame + * │ S3 ├──────────────────┘ + * │ │ + * └─────┬─┘ + * ▲ │ + * │ │ + * └───┘ + * i_dla_ready + * + * + * Note: This FSM assumes that the i_dla_ready signal from the input feeder goes low between every input frame. + */ + +`resetall +`undefineall +`default_nettype none + +module dla_streamer_fsm ( + input wire clk_dla, + input wire clk_axi, + input wire i_resetn_axi, + input wire i_resetn_async, + input wire i_dla_ready, + input wire i_lt_ready, + input wire i_streaming_enable, + input wire i_lt_done_frame, + input wire i_tvalid, + output logic o_stream_ready, + output logic o_reading_first_word // Used to start the 'active jobs' CSR counter +); +enum { // 2-state ints + IDLE_BIT, + STREAM_FIRST_BIT, + STREAMING_BIT, + WAIT_FOR_NEXT_FRAME_BIT +} index; +enum logic [index.num()-1:0] { // 1-hot encodings + IDLE = 1 << IDLE_BIT, + STREAM_FIRST = 1 << STREAM_FIRST_BIT, + STREAMING = 1 << STREAMING_BIT, + WAIT_FOR_NEXT_FRAME = 1 << WAIT_FOR_NEXT_FRAME_BIT, + XXX = 'x +} state, next; +logic axi_dla_ready; +// move the ready signal from input feeder into AXI domain. +dla_clock_cross_full_sync cc_dla_ready ( + .clk_src(clk_dla), + .i_src_async_resetn(1'b1), + .i_src_data(i_dla_ready), + .o_src_data(), // in streamer, sort out resets and pass in the appropriate resets. + .clk_dst(clk_axi), + .i_dst_async_resetn(1'b1), + .o_dst_data(axi_dla_ready) +); +always_comb begin : fsm_combinational + next = XXX; + unique case (1'b1) + state[IDLE_BIT]: + if (i_lt_ready & i_streaming_enable) + next = STREAM_FIRST; + else + next = IDLE; + state[STREAM_FIRST_BIT]: + if (i_tvalid & i_streaming_enable) + next = STREAMING; + else + next = STREAM_FIRST; + state[STREAMING_BIT]: + if (i_lt_done_frame) + next = WAIT_FOR_NEXT_FRAME; + else + next = STREAMING; + state[WAIT_FOR_NEXT_FRAME_BIT]: + next = IDLE; + default: + next = XXX; + endcase +end + +always_ff @( posedge clk_axi ) begin : fsm_state_logic + state <= next; + o_reading_first_word <= 0; + if (state[STREAM_FIRST_BIT] & next != STREAM_FIRST) begin + o_reading_first_word <= 1; + end + + if (~i_resetn_axi) begin + state <= IDLE; + end +end + +assign o_stream_ready = state[STREAMING_BIT] | (state[STREAM_FIRST_BIT] & i_streaming_enable); + +endmodule diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_tensor_block_dot_and_convert.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_tensor_block_dot_and_convert.sv new file mode 100644 index 0000000..2f16a0d --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_tensor_block_dot_and_convert.sv @@ -0,0 +1,96 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +ABBy27eDH9BNqI96y59O+xfOW1tz73bt5yJCCiKxyBaROJn8bGEB61cavxrI5jJ7hg/U9BfCwFBs +jm7Qk/v7GXp/nlCfd+xgWmr+QxAyxGOtYQmon96QsVd3ojNGIP049Sg7DyhriuQG3bEMgmoOevv/ +lXZP2bVs2VgwxVh9ceXnZg3z2Bz0ZKtCGO+XwGA0zcSYHoW30sWJVemqiLpTGMSkW1hBPNZrAPMi +p4u69jia9GVC8B7BcoFbiyL9dKpUoQqZmI1FW+nmplIRdNWS4kk3W+8Kr32ls+L6zzUJmaNazZJh +Y54lGq0MkmLGuTHro7Rl6fDVaRP0vpUeNjqZeg== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 4240) +`pragma protect data_block +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 +1nGfKh0bm0a9j5KAuD7uQZGXcSHDzg== +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_timer.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_timer.sv new file mode 100644 index 0000000..b3134c6 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_timer.sv @@ -0,0 +1,126 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +BT1XSnzyPtLC0Fan4ZgHNoNLIz6SzR4jwO4vUardDgIFvrNkG+7DU54z0AodTPZysKGzEgWZum4D +EnupHqPm9YiayVjZ0AP/pWFIe4Bntc1yXiODE7aLpyGkFZoIrAwFPxB1saJb3bmPGhNf5ZOLdbRY +eZABGnYf6LL8WQocjQVWYEH+zLd+fr5/TDdE6zuPaz+7IZdHkPCyJ31dTNXGsCMArDXNyzWMLtoO +bC6kEcZbCOxBj9lm4H9NBKL+M6ybHQzHFC+iChhzhZ5Gj8XRaIUo/wVfljl0a2xtovD56cOzAyTg +1gCSCr1xnS8SVMOqV9uAjdD/qLPvPp1mBCwvGg== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 5984) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_top_derived_params.svh b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_top_derived_params.svh new file mode 100644 index 0000000..df6bdfe --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_top_derived_params.svh @@ -0,0 +1,221 @@ +// Copyright 2015-2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +// --- dla_top_derived_params.sv ----------------------------------------------- +// This file contains derived parameters that are calculated based on the +// top-level parameters to dla_top. +// ----------------------------------------------------------------------------- + +localparam int BYTE_WIDTH = 8; +localparam int FP16_WIDTH = 16; + +localparam int FILTER_READER_WIDTH = FILTER_READER_DATA_BYTES*BYTE_WIDTH; +localparam int FEATURE_READER_WIDTH = FEATURE_READER_DATA_BYTES*BYTE_WIDTH; +localparam int FEATURE_WRITER_WIDTH = FEATURE_WRITER_DATA_BYTES*BYTE_WIDTH; +localparam int CONFIG_READER_WIDTH = CONFIG_READER_DATA_BYTES*BYTE_WIDTH; +localparam int CONFIG_WIDTH = CONFIG_DATA_BYTES*BYTE_WIDTH; + + +localparam dla_pe_array_pkg::pe_array_arch_t PE_ARRAY_ARCH = dla_pe_array_pkg::pe_array_arch_t'(PE_ARRAY_PARAM_BITS); + +localparam int PE_ARRAY_OUTPUT_DATA_WIDTH = + PE_ARRAY_ARCH.NUM_LANES * PE_ARRAY_ARCH.NUM_RESULTS_PER_CYCLE * FP16_WIDTH; + +// The input_feeder accepts input data that is sized to be stored in the stream +// buffer and then sent to the PE array without having to be resized further. +// Therefore, the input width of the input_feeder depends on the PE array block +// size (C_VECTOR). +localparam int INPUT_FEEDER_INPUT_DATA_WIDTH = + PE_ARRAY_ARCH.NUM_LANES * PE_ARRAY_ARCH.DOT_SIZE * FP16_WIDTH; + +`include "dla_pe_array_constants.svh" + +localparam int SCRATCHPAD_NUM_PE_PORTS = PE_ARRAY_ARCH.NUM_PES * PE_ARRAY_ARCH.NUM_FILTERS; +localparam int SCRATCHPAD_NUM_READ_BRANCH_PIPELINE = 0; +localparam int SCRATCHPAD_NUM_READ_PIPELINE_CYCLE = 1; + +localparam int PE_ARRAY_LATENCY = PE_ARRAY_ARCH.NUM_PES; +localparam int PE_ARRAY_EXIT_FIFO_ALMOST_FULL_CUTOFF = PE_ARRAY_EXIT_FIFO_DEPTH - PE_ARRAY_LATENCY; + +localparam int SCRATCHPAD_MEM_ID_WIDTH = + dla_filter_bias_scale_scratchpad_pkg::calc_mem_id_width( + .NUM_PE_PORTS(SCRATCHPAD_NUM_PE_PORTS), + .NUM_FILTER_PORTS(SCRATCHPAD_NUM_FILTER_PORTS), + .NUM_BIAS_SCALE_PORTS(SCRATCHPAD_NUM_BIAS_SCALE_PORTS)); +localparam int SCRATCHPAD_MEM_ADDR_WIDTH = + dla_filter_bias_scale_scratchpad_pkg::calc_mem_addr_width( + .FILTER_DEPTH(SCRATCHPAD_FILTER_DEPTH), + .BIAS_SCALE_DEPTH(SCRATCHPAD_BIAS_SCALE_DEPTH)); +localparam int SCRATCHPAD_FILTER_BASE_ADDR_WIDTH = + dla_filter_bias_scale_scratchpad_pkg::calc_filter_base_addr_width( + .FILTER_DEPTH(SCRATCHPAD_FILTER_DEPTH)); +localparam int SCRATCHPAD_BIAS_SCALE_BASE_ADDR_WIDTH = + dla_filter_bias_scale_scratchpad_pkg::calc_bias_scale_base_addr_width( + .BIAS_SCALE_DEPTH(SCRATCHPAD_BIAS_SCALE_DEPTH)); + +localparam device_family_t DEVICE_ENUM = PE_ARRAY_ARCH.DEVICE; + +// Parameter checking. +initial begin + if (DEVICE_ENUM == -1) begin + $fatal(1, "DEVICE was not set to a valid value"); + end + + if (PE_ARRAY_ARCH.DOT_MODE == -1) begin + $fatal(1, "PE_ARRAY_DOT_MODE was not set to a valid value"); + end + + if (PE_ARRAY_ARCH.CONVERT_MODE == -1) begin + $fatal(1, "PE_ARRAY_CONVERT_MODE was not set to a valid value"); + end + + if (PE_ARRAY_ARCH.ACCUM_MODE == -1) begin + $fatal(1, "PE_ARRAY_ACCUM_MODE was not set to a valid value"); + end +end + +localparam dla_aux_depthwise_pkg::vector_dot_arch_t AUX_DEPTHWISE_VECTOR_ARCH = '{ + FEATURE_WIDTH : DETHWISE_VECTOR_FEATURE_WIDTH, + FILTER_WIDTH : DETHWISE_VECTOR_FILTER_WIDTH, + BIAS_WIDTH : DETHWISE_VECTOR_BIAS_WIDTH, + DOT_SIZE : DETHWISE_VECTOR_DOT_SIZE, + DEVICE : DEVICE_ENUM +}; + +localparam dla_aux_depthwise_pkg::vector_dot_arch_info_t DEPTHWISE_VECTOR_ARCH_INFO = dla_aux_depthwise_pkg::get_arch_info(AUX_DEPTHWISE_VECTOR_ARCH); + +localparam dla_filter_bias_scale_scratchpad_pkg::filter_bias_scale_scratchpad_arch_t SCRATCHPAD_ARCH = '{ + DEVICE: DEVICE_ENUM, + NUM_PE_PORTS: SCRATCHPAD_NUM_PE_PORTS, + FILTER_DEPTH: SCRATCHPAD_FILTER_DEPTH, + BIAS_SCALE_DEPTH: SCRATCHPAD_BIAS_SCALE_DEPTH, + NUM_FILTER_PORTS: SCRATCHPAD_NUM_FILTER_PORTS, + NUM_BIAS_SCALE_PORTS: SCRATCHPAD_NUM_BIAS_SCALE_PORTS, + NUM_READ_PIPELINE_MEM: PE_ARRAY_ARCH.NUM_FILTERS, + NUM_WRITE_PIPELINE_MEM: PE_ARRAY_ARCH.NUM_FILTERS, + NUM_READ_BRANCH_PIPELINE: SCRATCHPAD_NUM_READ_BRANCH_PIPELINE, + NUM_READ_PIPELINE_CYCLE: SCRATCHPAD_NUM_READ_PIPELINE_CYCLE, + ENABLE_SCALE: PE_ARRAY_ARCH.ENABLE_SCALE, + ENABLE_DDRFREE_FBS: PE_ARRAY_ARCH.ENABLE_DDRFREE_FBS, + BLOCK_SIZE: PE_ARRAY_ARCH.DOT_SIZE, + FILTER_WIDTH: PE_ARRAY_ARCH.FILTER_WIDTH, + FILTER_EXPONENT_WIDTH: PE_ARRAY_ARCH.FILTER_EXPONENT_WIDTH, + BIAS_WIDTH: BIAS_WIDTH, + SCALE_WIDTH: SCALE_WIDTH, + + MEGABLOCK_WIDTH: SCRATCHPAD_MEGABLOCK_WIDTH, + NUM_FILTER_BLOCKS_PER_MEGABLOCK: SCRATCHPAD_NUM_FILTER_BLOCKS_PER_MEGABLOCK, + NUM_BIAS_SCALE_BLOCKS_PER_MEGABLOCK: SCRATCHPAD_NUM_BIAS_SCALE_BLOCKS_PER_MEGABLOCK +}; + +localparam dla_filter_bias_scale_scratchpad_pkg::filter_bias_scale_scratchpad_arch_info_t SCRATCHPAD_ARCH_INFO = + dla_filter_bias_scale_scratchpad_pkg::get_arch_info(SCRATCHPAD_ARCH); + + +localparam int SCRATCHPAD_LATENCY = SCRATCHPAD_ARCH_INFO.READ_TO_OUTPUT_DELAY; + +localparam int PE_ARRAY_VALID_LATENCY = SCRATCHPAD_LATENCY; + +localparam int PE_ARRAY_FLUSH_LATENCY = 0; // Deprecated + +localparam int PE_ARRAY_RESULT_ID_LATENCY = 0; // Deprecated + +localparam dla_sequencer_pkg::sequencer_arch_t SEQUENCER_ARCH = '{ + ELTWISE_MULT_CMD_WIDTH: PE_ARRAY_ARCH.ELTWISE_MULT_CMD_WIDTH, + RESULT_ID_WIDTH: PE_ARRAY_ARCH.RESULT_ID_WIDTH, + + SCRATCHPAD_MEM_ID_WIDTH: SCRATCHPAD_MEM_ID_WIDTH, + SCRATCHPAD_MEM_ADDR_WIDTH: SCRATCHPAD_MEM_ADDR_WIDTH, + SCRATCHPAD_FILTER_BASE_ADDR_WIDTH: SCRATCHPAD_FILTER_BASE_ADDR_WIDTH, + SCRATCHPAD_BIAS_SCALE_BASE_ADDR_WIDTH: SCRATCHPAD_BIAS_SCALE_BASE_ADDR_WIDTH, + + NUM_BIAS_ID: divceil(SCRATCHPAD_NUM_PE_PORTS, SCRATCHPAD_NUM_BIAS_SCALE_PORTS), + NUM_FILTER_ID: divceil(SCRATCHPAD_NUM_PE_PORTS, SCRATCHPAD_NUM_FILTER_PORTS), + FILTER_CACHE_DEPTH: SCRATCHPAD_FILTER_DEPTH, + BIAS_CACHE_DEPTH: SCRATCHPAD_BIAS_SCALE_DEPTH, + + NUM_RESULT_ID: PE_ARRAY_ARCH.NUM_RESULT_ID, + NUM_INTERLEAVED_FEATURES: PE_ARRAY_ARCH.NUM_INTERLEAVED_FEATURES, + NUM_INTERLEAVED_FILTERS: PE_ARRAY_ARCH.NUM_INTERLEAVED_FILTERS, + + PE_ARRAY_VALID_LATENCY: PE_ARRAY_VALID_LATENCY, + PE_ARRAY_FLUSH_LATENCY: PE_ARRAY_FLUSH_LATENCY, + PE_ARRAY_RESULT_ID_LATENCY: PE_ARRAY_RESULT_ID_LATENCY, + + ENABLE_DDRFREE_FBS: PE_ARRAY_ARCH.ENABLE_DDRFREE_FBS, + + DEVICE: DEVICE_ENUM +}; + +localparam dla_input_feeder_pkg::input_feeder_arch_t INPUT_FEEDER_ARCH = '{ + STREAM_BUFFER_DEPTH: STREAM_BUFFER_DEPTH, + CONFIG_WIDTH: CONFIG_WIDTH, + + C_VECTOR: PE_ARRAY_ARCH.DOT_SIZE, + FEATURE_WIDTH: PE_ARRAY_ARCH.FEATURE_WIDTH, + FEATURE_EXPONENT_WIDTH: PE_ARRAY_ARCH.FEATURE_EXPONENT_WIDTH, + FEATURE_EXPONENT_BIAS: PE_ARRAY_ARCH.FEATURE_EXPONENT_BIAS, + + KVEC_OVER_CVEC: KVEC_OVER_CVEC, + FILTER_ADDR_WIDTH: $clog2(SCRATCHPAD_FILTER_DEPTH), + BIAS_ADDR_WIDTH: $clog2(SCRATCHPAD_BIAS_SCALE_DEPTH), + + NUM_INTERLEAVED_FEATURES: PE_ARRAY_ARCH.NUM_INTERLEAVED_FEATURES, + NUM_INTERLEAVED_FILTERS: PE_ARRAY_ARCH.NUM_INTERLEAVED_FILTERS, + + NUM_LANES: PE_ARRAY_ARCH.NUM_LANES, + NUM_FEATURES: PE_ARRAY_ARCH.NUM_FEATURES, + FEATURE_READER_WIDTH: FEATURE_READER_WIDTH, + + ENABLE_DDRFREE_FBS: PE_ARRAY_ARCH.ENABLE_DDRFREE_FBS, + ENABLE_MIXED_PRECISION: ENABLE_MIXED_PRECISION, + DEVICE: DEVICE_ENUM +}; + +localparam dla_exit_fifo_pkg::exit_fifo_arch_t EXIT_FIFO_ARCH = '{ + NUM_LANES: PE_ARRAY_ARCH.NUM_LANES, + NUM_RESULTS_PER_CYCLE: PE_ARRAY_ARCH.NUM_RESULTS_PER_CYCLE, + NUM_FEATURES: PE_ARRAY_ARCH.NUM_FEATURES, + + FIFO_DEPTH: PE_ARRAY_EXIT_FIFO_DEPTH, + FIFO_ALMOST_FULL_CUTOFF: PE_ARRAY_EXIT_FIFO_ALMOST_FULL_CUTOFF, + GROUP_DELAY: PE_ARRAY_ARCH.GROUP_DELAY +}; + +localparam int LT_ELEMENT_WIDTH = LAYOUT_TRANSFORM_DO_U8_CONV ? 8 : 16; +localparam dla_lt_pkg::lt_arch_t LT_ARCH = '{ + ENABLE_LT: LAYOUT_TRANSFORM_ENABLE, + DATA_ELEMENT_WIDTH: LT_ELEMENT_WIDTH, + CNT_BITS: 20, + DO_U8_CONV: LAYOUT_TRANSFORM_DO_U8_CONV, + DDR_BYTES: LAYOUT_TRANSFORM_READER_BYTES, + CONFIG_BYTES: CONFIG_DATA_BYTES, + MAX_CHANNELS: LAYOUT_TRANSFORM_MAX_FEATURE_CHANNELS, + MAX_FEATURE_HEIGHT: LAYOUT_TRANSFORM_MAX_FEATURE_HEIGHT, + MAX_FEATURE_WIDTH: LAYOUT_TRANSFORM_MAX_FEATURE_WIDTH, + MAX_FEATURE_DEPTH: LAYOUT_TRANSFORM_MAX_FEATURE_DEPTH, + MAX_STRIDE_HEIGHT: LAYOUT_TRANSFORM_MAX_STRIDE_HEIGHT, + MAX_STRIDE_WIDTH: LAYOUT_TRANSFORM_MAX_STRIDE_WIDTH, + MAX_STRIDE_DEPTH: LAYOUT_TRANSFORM_MAX_STRIDE_DEPTH, + CVEC: PE_ARRAY_ARCH.DOT_SIZE, + MAX_PAD_FRONT: LAYOUT_TRANSFORM_MAX_PAD_FRONT, + MAX_PAD_LEFT: LAYOUT_TRANSFORM_MAX_PAD_LEFT, + MAX_PAD_TOP: LAYOUT_TRANSFORM_MAX_PAD_TOP, + MAX_FILTER_HEIGHT: LAYOUT_TRANSFORM_MAX_FILTER_HEIGHT, + MAX_FILTER_WIDTH: LAYOUT_TRANSFORM_MAX_FILTER_WIDTH, + MAX_FILTER_DEPTH: LAYOUT_TRANSFORM_MAX_FILTER_DEPTH, + MAX_DILATION_HEIGHT: LAYOUT_TRANSFORM_MAX_DILATION_HEIGHT, + MAX_DILATION_WIDTH: LAYOUT_TRANSFORM_MAX_DILATION_WIDTH, + MAX_DILATION_DEPTH: LAYOUT_TRANSFORM_MAX_DILATION_DEPTH, + DEVICE: DEVICE_ENUM +}; diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_top_pkg.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_top_pkg.sv new file mode 100644 index 0000000..57b4e93 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_top_pkg.sv @@ -0,0 +1,25 @@ +// Copyright 2015-2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +package dla_top_pkg; + // Width of various axi signals from the axi4 spec + localparam int AXI_BURST_LENGTH_WIDTH = 8; + localparam int AXI_BURST_SIZE_WIDTH = 3; + localparam int AXI_BURST_TYPE_WIDTH = 2; + + // Maximum number of modules connected to the config network + localparam int CONFIG_NETWORK_MAX_NUM_MODULES = 255; + + // Maximum number of modules connected to the xbar + localparam int DLA_TOP_XBAR_PARAMETER_ARRAY_SIZE = 17; +endpackage diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_value_counter.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_value_counter.sv new file mode 100644 index 0000000..da25970 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_value_counter.sv @@ -0,0 +1,86 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +hLCescE3hRwi9tFqCN1s0B+bxESh64eqh2mm27wqE5wXDKFh9z9TYBiFMoNsJui1qE06Vqrv/cNb +pOAUvxA6CZoFtKAeETN151AMRH3rtEsD5ekIWnFWKhjoD+7vGzFGrBIobTtxN09OslMbmjxUjIZ9 +fFAFAkmDrmpnXYvdtqH4xSkPLyJTULcya6/iZC0/FXeReAMGlItmaNSxq4G9AlYABgmcotLmKDUC +QOY/UNuiiHhYUl/eh6PbjMSN3crFc2aHajcmaYzbpRC4ho6Dt05DMdY1RHBmK66LNPAGSKvKRD6Z +3Ov3jMVYFstJA0H0/oV6t6r9hUuW1kXQ4K/+3w== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 3696) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_vector_dot_arch_info.svh b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_vector_dot_arch_info.svh new file mode 100644 index 0000000..7039102 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_vector_dot_arch_info.svh @@ -0,0 +1,62 @@ +// Copyright 2020-2023 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +// This header file contains all the derived parameters from the vector_dot_arch_t arch + +//import dla_common_pkg::*; +automatic int DOT_OUTPUT_WIDTH = 32; + + +automatic int DEVICE_DSP_MULT_LATENCY = + (arch.DEVICE == DEVICE_A10) ? 3 : + (arch.DEVICE == DEVICE_C10) ? 3 : + (arch.DEVICE == DEVICE_S10) ? 4 : + (arch.DEVICE == DEVICE_AGX7) ? 3 : // in FP16 mode, the latency is 5 clk cycles + (arch.DEVICE == DEVICE_AGX5) ? 3 : -1; + +// These are delays inside the DSP itself based on which pipeline/input/output regs are enabled +// These numbers assume all intermediate regs and output regs are enabled (input regs are not) +// check https://www.intel.com/content/www/us/en/docs/programmable/683037/21-2/floating-point-arithmetic-52200.html +automatic int DSP_ADDER_LAENCY = 1; +automatic int DSP_CHAIN_ADDER_LAENCY = 3; +automatic int DSP_OUTPUT_LATENCY = 1; +automatic int DSP_INPUT_LATENCY = 1; +automatic int DSP_CHAIN_LEN = arch.DOT_SIZE/2; + +// This delay is due to chaining of DSPs to avoid using adder trees +// Currently only mult_FP16 is suported +// automatic int DEVICE_CHAIN_ADD_LATENCY = DSP_CHAIN_LEN - 1; + +// DSP in chain mode dot latency +automatic int STANDALONE_DSP_DOT_LATENCY = max(DEVICE_DSP_MULT_LATENCY + + DSP_ADDER_LAENCY + + DSP_INPUT_LATENCY + + DSP_OUTPUT_LATENCY, + DSP_CHAIN_ADDER_LAENCY + + DSP_OUTPUT_LATENCY); + +// DSP in chain mode assuming input data arrives before chainin for best efficiency +automatic int CHAINED_DSP_DOT_LATENCY = DSP_CHAIN_ADDER_LAENCY + DSP_OUTPUT_LATENCY; + +automatic int DSP_DOT_LATENCY = STANDALONE_DSP_DOT_LATENCY + CHAINED_DSP_DOT_LATENCY * (DSP_CHAIN_LEN-1); +// CHECKME, do we have any extra latency for the FP16 mult DSP +automatic int EXTRA_LATENCY = 0; + +automatic int DOT_LATENCY = DSP_DOT_LATENCY + EXTRA_LATENCY; + +// CHECKME: Might need Accum latency +automatic int ACCUM_LATENCY = 0; + +// Total latency of the PE Array with no accumulations: +// DOT product generation takes DOT_LATENCY +automatic int TOTAL_LATENCY = DOT_LATENCY + ACCUM_LATENCY; diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_width_adapter.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_width_adapter.sv new file mode 100644 index 0000000..005758d --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_width_adapter.sv @@ -0,0 +1,290 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +bPHVGogXRVTY2zlrUsgY1z1+oaWV25jY5+0s0XRlsv7+7qvzv9y3Y6xbQhZuJTd8tW0LIaQpnKgv +izmDV9tz+TxZYk8uAf3I3iTS+CM3VjhhmQMXfZuqyDSY+gLmNdw4fan9qpVCbGLIlX6mNsw2EakI +LdOFRUlDPd1gxHS3RyAfrORCmaCsbbSnN5w0PCCAz0NYgSKgpTM0FaFtpo1LAGTpFLIy9JllTEwC +ZMGl30NxIzcF7adhm/FP7R6M5gSe/OUCJGhESMauJxcKZ+1vyfcFqkvR7NWK4/6OEWgUbCVtDvVl +keglzjmZ9H/u9e4CkSwy5WfLVwetl3KJ7cbC1w== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 15328) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_width_adapter_pkg.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_width_adapter_pkg.sv new file mode 100644 index 0000000..fc3211a --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_width_adapter_pkg.sv @@ -0,0 +1,43 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +VSEmcCmX/Wa8Wx2CW8T2f7kdr/rXsLMibKLrG/9LFrYn1iuSAx/wDbzz2HgHNzuKREgL4yuFxoYb +6egaK+Sdr3VJ49bnpzDDBK++3TjRsPhaWTcO/zYtQFQ8ObJOkvnFm16EyV7Saz7/CmkOC0U9DMet +on/fkt+VphosMXxFEMFR7iRkT8dULud+v1j0JVkDdnU5Mw2O84VKqZfzzuCnMlSNvEqSCroEHvGL +JDRxltRug2ebFR66+rVRfIpLfgBBMtivSzRfrT+vJpNPO/Eghr1UeQoqvoFwnT1JIMS536z6C088 ++w+ubMIepOOP+s5MHJm4rUYU/ZMXkr3izpS0kg== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 1216) +`pragma protect data_block +imFFlzgtVTpDuaJeBrV5mO+2thZ9WqezEwTsK6GX7MoHjoqeN2UbPdd9Hoa6JdlFNKLhk5fCTiXr +sLE9Yxah8a+XtWRZrYjJ18CXYrRfmVWPjjlonutCISbK8J16+9VwWbpbsIevmDFqTza0dWOZs/EU +zm7bu8zijuWlxFC/DGsoBReT7TFhA/wcME0dfCdvA6Vb0sCje3HnuBaxH+9tqoVdH4ZEDpF/RDzQ +mW6xY2+ySKr/J8GWsN4wELImu6boC9idHIdkEAoMId6heCuKNF6vQg1tMLuAbl4n05jj6Aps9P12 +PSkfD8Y+elyrGoCYOsw75Eo11UlY1L1381oAFszmvkYZ2dVPMR34OMtTkzgJWMk6htLS9fLy2Dh1 +OuQe9NFluG6HwvGmfAOu0lr+IsDOdb1ChfBill/ALtWm+GBZ13nOxILQf6D5/JpqwJYO9M5qvigs +iPRx/8uEH7LeS+OCzMF/yLtuOAtKb3rQ204ImwKXJRNxFp7JDSZAvmSOgr/JjRSYpaqYeHR0gpeq +cpqoTIOAgfhUdEX/N7LNpvJHsT8daA4r4zGUgQ8gZNfLRF5MbfvhifIkLMdGdC799Y3PvklxFGY2 +fcZ9JkY6cOL0lhU3CUSX0GjmylBRKoOVF9wm3ozi+j3NWnvgV7QVu44lxizDRdUTlM6Xm636AobT +fh8gCgpUirspbOPcX2HgUJey2rK3xz1xU9qq26K2ZHT+KfY/JaTRqGr5FsW77srtTGF3JlP89a2l +I0ll8iPKs6KIp3E+gv+mbSYwyReon1eHsWb2o2laDlT8DNEVL7BQWsCIVQ/Ag/udkJM5d0y82jDa +Q7a9eYYNp350kcEo3NsyRx27C32zKOrDYEJBKZggilHekEIO1MiwxxbLYH8YhXzZ4MQGJKFPSsfE +a0FAUaJ/cc2e5SsU2Ts9TE1RYpSS1KDK6zmQc5atIucB53nLXgAgVYmXhs0jpVEkvYAG9luZTROz +JPjW7zHOU0+i0rN8LwMYAEZUoe7YFYb9Z2Ov0+3TMqnZN/NwdHSv9PSnHgYcoMKs/vMCXjS8Sv9X +9BBgndTgysyng4T000jDVkiVp1WGtvkPpFbLL88/C2koMYjdguLi9sS6NRH/wJ02/V2/uuxekCIc +j8Xxo0mUTPOAoPL4qNOSXHNQmBFa9X2aCLxu98FN+8/2XLyH+b15Ew9gHQEI0S1GRSc+CGaYDv+0 +Kg0K0B3UKo2CL+pcum5t3e+UjAfsJxTYCgiWDVT3Jg3bl/AlivIL0VINseyGM1Lc0hVG2zgPxB5z +gbo60EruxzktEp9Vpgh3uUQFukSbWLQs6hVk4JRJVrqgGCZOPRJBbkjzzzM5aU8TzVHA2rOgLM30 +dKbRs6X/a+Z6MsZyb2F8Aqh3WBx6FpxZ3hqE+HD4AXVkZBGO/SNnug/70ZgP+BQ6fVsEKQ+37y4Y +IQoVQ1aZ5fFUjApYv170no/FLtUjg+GQGPnDm9r+VKR5En4aNHb4RslYHdUYQFvjhQlfusUPperF +NAqbE0YCb5FB2fBLTnJYkuMXUBJED5iksQN5RyazSIkf6wVeIqE7Ck1/oVDuroEN17+xpRoUIGf2 +oUK31CLItP7Cf151XFWdXUDjpA== +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_xbar.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_xbar.sv new file mode 100644 index 0000000..feebd56 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_xbar.sv @@ -0,0 +1,845 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +lZ+IGnuuVCMxGPTkECHKzO2tWogz/epStTs77jKMTTFh77mtouUYXos/4EhB5F4N29dZ6a/V+Wax +Jn9ht+bFsESxs0x1eRG/VK1RSmNNUJ3Ltjjj3kVMWbw/+hOxli8R/vKHrrkLk6K83I8AN2SAVywH +GSE4hQ5sPKwGE9MYbXlpxzOI/VoUOIT5bwyUV4bAOtDSzl3ds2P1r+XIPfmcNMMJqzoXk+AK24wh +dkmje+0zv/oR/AvqfUpUEWIfaV37TpuBNKSGIAbLn/1a7GszvZWOnNQoiFuUuhE8y6EPMSgTzg59 +VofYar4Id0GVULLZ/bJo1Rc75lGh63JagCy/Dg== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 46960) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_xbar_config_handler.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_xbar_config_handler.sv new file mode 100644 index 0000000..1e303ad --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_xbar_config_handler.sv @@ -0,0 +1,210 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +2QbBKCBT9JHSDoIKtnOeU8+J50gHAgYbzjvBdKQSC690wIS2daDT/wQ+2eNOHfaYDRKiKWQsErzA +aTojicm6ul5Ew4Xcs5AvqsY3gbZ/xnqOVQ4S88tDor0uOGEW/uFaq6y+nqGQ91PaQpitklu/f5Rb +wQzU0R1qdpboM2rshGwpzzuqp16LpG8QLjmEmaGcJE0kKtdISb1nF/Z/gD5G1qWOVOnleSvBwunZ +OLzWBjwIq5DfKbgto91sCX4xV7gskMMqEWPiQ82dmLhKBn3FJ2TxDq8TVFrFUq5AzkDHmxxXmALt +Eo1ulA6zcCDJoe5g+QdeCzIHfZ0vvdNs85P30w== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 10736) +`pragma protect data_block +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 +kILHsRt77gCIPpd/ymfuZA/EP20= +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_xbar_if.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_xbar_if.sv new file mode 100644 index 0000000..4baf1b4 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_xbar_if.sv @@ -0,0 +1,169 @@ +// Copyright 2021-2021 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +// Xbar PI ouput specific beat(s) +interface xbar_config_beat_pioutput_if #( + dla_xbar_pkg::xbar_config_parameter_t config_field_param +); + typedef struct packed { + logic [config_field_param.OUTPUT_CONFIG_WORD_ORSEL_WIDTH-1:0] output_route_select; + logic [config_field_param.OUTPUT_CONFIG_WORD_RESERVED0_WIDTH-1:0] reserved; + // NOTE:: One can't use the MUX-select signals assigned for valid/data for ready + logic [config_field_param.AUX_KERNEL_SELECT_ID_WIDTH-1:0] inp_mux_select; // MUX select signal for the ready signal back to PE Array + logic [config_field_param.AUX_KERNEL_SELECT_ID_WIDTH-1:0] opt_mux_select; // + } Type; + Type data; + modport sender (output data); + modport receiver (input data); +endinterface + +// Kernel's specific beat(s) +interface xbar_config_beat_kernel_if #( + dla_xbar_pkg::xbar_config_parameter_t config_field_param +); + typedef struct packed { + struct packed { + logic [config_field_param.KERNEL_CONFIG_WORD_BYF_WIDTH-1:0] bypass_flag ; + logic [config_field_param.KERNEL_CONFIG_WORD_NCF_WIDTH-1:0] connection_flag; + logic [config_field_param.KERNEL_CONFIG_WORD_RESERVED0_WIDTH-1:0] reserved; + // NOTE:: One can't use the MUX-select signals assigned for valid/data for ready + logic [config_field_param.AUX_KERNEL_SELECT_ID_WIDTH-1:0] inp_mux_select; // MUX select signal for ready signal back to kernels + logic [config_field_param.AUX_KERNEL_SELECT_ID_WIDTH-1:0] opt_mux_select; // MUX select signal for valid/data signals to kernels + } [config_field_param.NUMBER_OF_AUX_KERNELS_ONLY:1] kernels; // Array addressed from 1, because 0 is reserved for output_fields in this case! + } Type; + Type data; + modport sender (output data); + modport receiver (input data); +endinterface + +// Xbar input data count specific beat(s) +interface xbar_config_beat_idatacount_if #( + dla_xbar_pkg::xbar_config_parameter_t config_field_param +); + typedef struct packed { + logic [config_field_param.IDCOUNT_CONFIG_WORD_RESERVED0_WIDTH-1:0] reserved; + logic [config_field_param.XBAR_INPUT_COUNTER_WIDTH-1:0] count; + } Type; + Type data; + modport sender (output data); + modport receiver (input data); +endinterface + +// Xbar output data count specific beat(s) +interface xbar_config_beat_odatacount_if #( + dla_xbar_pkg::xbar_config_parameter_t config_field_param +); + typedef struct packed { + logic [config_field_param.ODCOUNT_CONFIG_WORD_RESERVED0_WIDTH-1:0] reserved; + logic [config_field_param.XBAR_OUTPUT_COUNTER_WIDTH-1:0] count; + } Type; + Type data; + modport sender (output data); + modport receiver (input data); +endinterface + +// ----------------------- Config Packet ----------------------- +interface xbar_config_pkt_if #( + dla_xbar_pkg::xbar_config_parameter_t config_field_param +); + typedef struct packed { + struct packed { + logic [config_field_param.ODCOUNT_CONFIG_WORD_RESERVED0_WIDTH-1:0] reserved; + logic [config_field_param.XBAR_OUTPUT_COUNTER_WIDTH-1:0] count; + } odcount_fields; + + struct packed { + logic [config_field_param.IDCOUNT_CONFIG_WORD_RESERVED0_WIDTH-1:0] reserved; + logic [config_field_param.XBAR_INPUT_COUNTER_WIDTH-1:0] count; + } idcount_fields; + // Array addressed from 1, because 0 is reserved for output_fields in this case! + struct packed { + logic [config_field_param.KERNEL_CONFIG_WORD_BYF_WIDTH-1:0] bypass_flag ; + logic [config_field_param.KERNEL_CONFIG_WORD_NCF_WIDTH-1:0] connection_flag; + logic [config_field_param.KERNEL_CONFIG_WORD_RESERVED0_WIDTH-1:0] reserved; + // NOTE:: One can't use the MUX-select signals assigned for valid/data for ready + logic [config_field_param.AUX_KERNEL_SELECT_ID_WIDTH-1:0] inp_mux_select; // MUX select signal for ready signal back to kernels + logic [config_field_param.AUX_KERNEL_SELECT_ID_WIDTH-1:0] opt_mux_select; // MUX select signal for valid/data signals to kernels + } [config_field_param.NUMBER_OF_AUX_KERNELS_ONLY:1] kernel_fields; + struct packed { + logic [config_field_param.OUTPUT_CONFIG_WORD_ORSEL_WIDTH-1:0] output_route_select; + logic [config_field_param.OUTPUT_CONFIG_WORD_RESERVED0_WIDTH-1:0] reserved; + // NOTE:: One can't use the MUX-select signals assigned for valid/data for ready + logic [config_field_param.AUX_KERNEL_SELECT_ID_WIDTH-1:0] inp_mux_select; // MUX select signal for the ready signal back to PE Array + logic [config_field_param.AUX_KERNEL_SELECT_ID_WIDTH-1:0] opt_mux_select; // + } pi_opt_fields; + } Type; + Type data; + modport sender (output data); + modport receiver (input data); +endinterface + +// ----------------------- Config Handler FSM - State Variable ----------------------- +interface config_fsm_state_var_if #( + dla_xbar_pkg::xbar_config_parameter_t config_field_param +); + typedef struct packed { + logic config_ready; + // Note:: Config is collected in a packed array // (each array element consisting of a beat worth of information) of size equal to total-beat-count + logic [(config_field_param.CONFIG_DATA_WIDTH * config_field_param.CONFIG_BEAT_COUNT)-1:0] config_pkt; + logic config_valid; + logic [config_field_param.CONFIG_BEAT_COUNTER_WIDTH-1:0] config_beat_count; + } Type; + Type data; + modport sender (output data); + modport receiver (input data); +endinterface + +interface xbar_ctrl_fsm_state_var_if #( + dla_xbar_pkg::xbar_config_parameter_t fsm_param +); + typedef struct packed { + struct packed { + struct packed { + logic [fsm_param.ODCOUNT_CONFIG_WORD_RESERVED0_WIDTH-1:0] reserved; + logic [fsm_param.XBAR_OUTPUT_COUNTER_WIDTH-1:0] count; + } odcount_fields; + + struct packed { + logic [fsm_param.IDCOUNT_CONFIG_WORD_RESERVED0_WIDTH-1:0] reserved; + logic [fsm_param.XBAR_INPUT_COUNTER_WIDTH-1:0] count; + } idcount_fields; + // Array addressed from 1, because 0 is reserved for output_fields in this case! + struct packed { + logic [fsm_param.KERNEL_CONFIG_WORD_BYF_WIDTH-1:0] bypass_flag ; + logic [fsm_param.KERNEL_CONFIG_WORD_NCF_WIDTH-1:0] connection_flag; + logic [fsm_param.KERNEL_CONFIG_WORD_RESERVED0_WIDTH-1:0] reserved; + // NOTE:: One can't use the MUX-select signals assigned for valid/data for ready + logic [fsm_param.AUX_KERNEL_SELECT_ID_WIDTH-1:0] inp_mux_select; // MUX select signal for ready signal back to kernels + logic [fsm_param.AUX_KERNEL_SELECT_ID_WIDTH-1:0] opt_mux_select; // MUX select signal for valid/data signals to kernels + } [fsm_param.NUMBER_OF_AUX_KERNELS_ONLY:1] kernel_fields; + struct packed { + logic [fsm_param.OUTPUT_CONFIG_WORD_ORSEL_WIDTH-1:0] output_route_select; + logic [fsm_param.OUTPUT_CONFIG_WORD_RESERVED0_WIDTH-1:0] reserved; + // NOTE:: One can't use the MUX-select signals assigned for valid/data for ready + logic [fsm_param.AUX_KERNEL_SELECT_ID_WIDTH-1:0] inp_mux_select; // MUX select signal for the ready signal back to PE Array + logic [fsm_param.AUX_KERNEL_SELECT_ID_WIDTH-1:0] opt_mux_select; // + } pi_opt_fields; + } config_copy; + logic [fsm_param.XBAR_INPUT_COUNTER_WIDTH-1:0] inp_counter; + logic [fsm_param.XBAR_OUTPUT_COUNTER_WIDTH-1:0] opt_counter; + logic primary_input_e; // Enable for PE-Array input + logic primary_output_e; // Enable for the last aux-kernel in the pipeline + logic input_counter_done; + logic output_counter_done; + logic config_serviced; + } Type; + Type data; + modport sender (output data); + modport receiver (input data); +endinterface diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_xbar_pkg.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_xbar_pkg.sv new file mode 100644 index 0000000..b68801c --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_xbar_pkg.sv @@ -0,0 +1,283 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +F7k8uDqDvNyiINVwYW6G1j4hYE6jeFw8mGfodOcDqsLk/fFTVZhvii3XMpXh40irgOe2P+p0b5cc +V08VFlJtRcI+CQG6wLrK9vS8ko2PmbtbY05yunSbBTuPOtd/nFaA9fgo4fVhMYFUkvmGIliHIWhd +Eg0WUPNqUNypqmO31Oo60YMOfsiNaKEyS1xgBzvIMA0IwMGi0ZTlqgeuIlbkCfzHZaiQ+deAzK1w +7369kieOZjjljvXR6QfjshNva43HG3xiUpufU3MU9fo27hFkT/qRybA+8dkFpyPUbnp7Egg8ZrOq +3LMF5u0z2Q2MDul01CqAIzGw9FEKXL4KkRZDfA== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 14912) +`pragma protect data_block +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 +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_xbar_wrapper.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_xbar_wrapper.sv new file mode 100644 index 0000000..a30e07e --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_xbar_wrapper.sv @@ -0,0 +1,194 @@ +`pragma protect begin_protected +`pragma protect version=1 +`pragma protect author="Intel Corporation" +`pragma protect encrypt_agent="Quartus Prime Pro Software" +`pragma protect encrypt_agent_info="17.1" + +`pragma protect key_keyowner="Intel Corporation" +`pragma protect key_method="rsa" +`pragma protect key_keyname="Intel-FPGA-Quartus-RSA-1" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 256) +`pragma protect key_block +X1jVmizm9hgO3FeIP3VxvVPucPYyOGq8Czjk5VC16LrB4J8srBYevkFP1mqfXLP7JGKgq9vMFxEB +IsTIAZmBpynXe8p0gAa5SFU5DTwHOngIW6bphyUKcXReoDrF9xlyNZ2Q0W52KBFbYkbiDnEzjv6U +53jewnMwkcHw97fBgWfT5aeDnK5zFm/reJd2m7kTRU3lgNkuHdQaSjtRTZEh4krDD9MwAEIo/2nh +M1xeULndok4W6bP0AJhnX9hwzMmz4TOrR88jNH2/Qf6hALqpUZSd2p83TtMItmTBjfPxPG141Og3 +wV7wjkkjMVL561D74pFMdajsiAuqQ0MMBrHrjQ== + +`pragma protect data_method="aes128-cbc" +`pragma protect encoding=(enctype = "base64", line_length = 76, bytes = 9824) +`pragma protect data_block +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 +oMqEmpvKeAz0po4fMkgdoL+mEhU= +`pragma protect end_protected diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/intel_ai_ip.sv.terp b/python/openvino/demo/ip/intel_ai_ip/verilog/intel_ai_ip.sv.terp new file mode 100755 index 0000000..18401cf --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/intel_ai_ip.sv.terp @@ -0,0 +1,166 @@ +// Copyright 2015-2020 Intel Corporation. +// +// This software and the related documents are Intel copyrighted materials, +// and your use of them is governed by the express license under which they +// were provided to you ("License"). Unless the License provides otherwise, +// you may not use, modify, copy, publish, distribute, disclose or transmit +// this software or the related documents without Intel's prior written +// permission. +// +// This software and the related documents are provided as is, with no express +// or implied warranties, other than those that are expressly stated in the +// License. + +`default_nettype none + + +module intel_ai_ip #( + // CSR AXI4-Lite Slave + parameter int C_CSR_AXI_ADDR_WIDTH, + parameter int C_CSR_AXI_DATA_WIDTH, + + // DDR AVLMM Master + parameter int C_DDR_AXI_ADDR_WIDTH, + parameter int C_DDR_AXI_DATA_WIDTH, + parameter int C_DDR_AXI_THREAD_ID_WIDTH, + + parameter string ARCH_OPTION, + + // Width of various axi signals from the axi4 spec + localparam int AXI_BURST_LENGTH_WIDTH=8, + localparam int AXI_BURST_SIZE_WIDTH=3, + localparam int AXI_BURST_TYPE_WIDTH=2 +) ( + input wire dla_clk, + input wire ddr_clk, + input wire irq_clk, + input wire dla_resetn, + + // Level sensitive interrupt to host, runs on irq clock + output logic irq_level, + + // CSR to host (PCIe or HPS), runs on ddr clock and dla_resetn + + input wire [C_CSR_AXI_ADDR_WIDTH-1:0] csr_axi_awaddr, + input wire [2:0] csr_axi_awprot, // required by AXI standard. not used + input wire csr_axi_awvalid, + output logic csr_axi_awready, + input wire [C_CSR_AXI_DATA_WIDTH-1:0] csr_axi_wdata, + input wire [C_CSR_AXI_DATA_WIDTH/8-1:0] csr_axi_wstrb, // required by AXI standard. not used + input wire csr_axi_wvalid, + output logic csr_axi_wready, + input wire [1:0] csr_axi_bresp, // required by AXI standard. not used + output logic csr_axi_bvalid, + input wire csr_axi_bready, + input wire [C_CSR_AXI_ADDR_WIDTH-1:0] csr_axi_araddr, + input wire [2:0] csr_axi_arprot, // required by AXI standard. not used + input wire csr_axi_arvalid, + output logic csr_axi_arready, + output logic [C_CSR_AXI_DATA_WIDTH-1:0] csr_axi_rdata, + output logic [1:0] csr_axi_rresp, // required by AXI standard. not used + output logic csr_axi_rvalid, + input wire csr_axi_rready, + + //global memory, AXI4 master, runs on ddr clock and core_resetn + + output logic [C_DDR_AXI_THREAD_ID_WIDTH-1:0] ddr_axi_awid, // required by AXI standard. not used + output logic [C_DDR_AXI_ADDR_WIDTH-1:0] ddr_axi_awaddr, + output logic [AXI_BURST_LENGTH_WIDTH-1:0] ddr_axi_awlen, + output logic [AXI_BURST_SIZE_WIDTH-1:0] ddr_axi_awsize, + output logic [AXI_BURST_TYPE_WIDTH-1:0] ddr_axi_awburst, + output logic [2:0] ddr_axi_awprot, // required by AXI standard. not used + output logic ddr_axi_awvalid, + input wire ddr_axi_awready, + output logic [C_DDR_AXI_DATA_WIDTH-1:0] ddr_axi_wdata, + output logic [C_DDR_AXI_DATA_WIDTH/8-1:0] ddr_axi_wstrb, + output logic ddr_axi_wlast, + output logic ddr_axi_wvalid, + input wire ddr_axi_wready, + input wire [C_DDR_AXI_THREAD_ID_WIDTH-1:0] ddr_axi_bid, // required by AXI standard. not used + input wire ddr_axi_bvalid, + output logic ddr_axi_bready, + output logic [C_DDR_AXI_THREAD_ID_WIDTH-1:0] ddr_axi_arid, + output logic [C_DDR_AXI_ADDR_WIDTH-1:0] ddr_axi_araddr, + output logic [AXI_BURST_LENGTH_WIDTH-1:0] ddr_axi_arlen, + output logic [AXI_BURST_SIZE_WIDTH-1:0] ddr_axi_arsize, + output logic [AXI_BURST_TYPE_WIDTH-1:0] ddr_axi_arburst, + output logic [2:0] ddr_axi_arprot, // required by AXI standard. not used + output logic ddr_axi_arvalid, + input wire ddr_axi_arready, + input wire [C_DDR_AXI_THREAD_ID_WIDTH-1:0] ddr_axi_rid, + input wire [C_DDR_AXI_DATA_WIDTH-1:0] ddr_axi_rdata, + input wire ddr_axi_rvalid, + output logic ddr_axi_rready +); + +@@ set count 0 +@@ set condition "if" +@@ foreach arch $archs { +@@ if {$count != 0} { +@@ set condition "else if" +@@ } +${condition} (ARCH_OPTION == "${arch}") begin + dla_top_wrapper_${arch} dla_top_inst + ( + //clocks and resets, all resets are not synchronized + .ddr_clk (ddr_clk), + .dla_clk (dla_clk), + .irq_clk (irq_clk), + .dla_resetn (dla_resetn), + + //interrupt request, AXI4 stream master without data, runs on pcie clock + .o_interrupt_level (irq_level), + + //CSR, AXI4 lite slave, runs on ddr clock + .i_csr_arvalid (csr_axi_arvalid), + .i_csr_araddr (csr_axi_araddr), + .o_csr_arready (csr_axi_arready), + .o_csr_rvalid (csr_axi_rvalid), + .o_csr_rdata (csr_axi_rdata), + .i_csr_rready (csr_axi_rready), + .i_csr_awvalid (csr_axi_awvalid), + .i_csr_awaddr (csr_axi_awaddr), + .o_csr_awready (csr_axi_awready), + .i_csr_wvalid (csr_axi_wvalid), + .i_csr_wdata (csr_axi_wdata), + .o_csr_wready (csr_axi_wready), + .o_csr_bvalid (csr_axi_bvalid), + .i_csr_bready (csr_axi_bready), + + //global memory, AXI4 master, runs on ddr clock + .o_ddr_arvalid (ddr_axi_arvalid), + .o_ddr_araddr (ddr_axi_araddr), + .o_ddr_arlen (ddr_axi_arlen), + .o_ddr_arsize (ddr_axi_arsize), + .o_ddr_arburst (ddr_axi_arburst), + .o_ddr_arid (ddr_axi_arid), + .i_ddr_arready (ddr_axi_arready), + .i_ddr_rvalid (ddr_axi_rvalid), + .i_ddr_rdata (ddr_axi_rdata), + .i_ddr_rid (ddr_axi_rid), + .o_ddr_rready (ddr_axi_rready), + .o_ddr_awvalid (ddr_axi_awvalid), + .o_ddr_awaddr (ddr_axi_awaddr), + .o_ddr_awlen (ddr_axi_awlen), + .o_ddr_awsize (ddr_axi_awsize), + .o_ddr_awburst (ddr_axi_awburst), + .i_ddr_awready (ddr_axi_awready), + .o_ddr_wvalid (ddr_axi_wvalid), + .o_ddr_wdata (ddr_axi_wdata), + .o_ddr_wstrb (ddr_axi_wstrb), + .o_ddr_wlast (ddr_axi_wlast), + .i_ddr_wready (ddr_axi_wready), + .i_ddr_bvalid (ddr_axi_bvalid), + .o_ddr_bready (ddr_axi_bready) + ); +end +@@set count 1 +@@} +@@ set fatal_command "\$fatal" +else begin + ${fatal_command}( 1, "Architecture Chosen is invalid" ); +end + +endmodule + +`default_nettype wire diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/my_division_flt_i_sfc_logic_s_c1_in_wt_e0000113_invTables_lutmem.mif b/python/openvino/demo/ip/intel_ai_ip/verilog/my_division_flt_i_sfc_logic_s_c1_in_wt_e0000113_invTables_lutmem.mif new file mode 100644 index 0000000..a9c9c44 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/my_division_flt_i_sfc_logic_s_c1_in_wt_e0000113_invTables_lutmem.mif @@ -0,0 +1,537 @@ +-- Copyright (C) 2019 Intel Corporation. All rights reserved. +-- Your use of Intel Corporation's design tools, logic functions +-- and other software and tools, and any partner logic +-- functions, and any output files from any of the foregoing +-- (including device programming or simulation files), and any +-- associated documentation or information are expressly subject +-- to the terms and conditions of the Intel Program License +-- Subscription Agreement, the Intel Quartus Prime License Agreement, +-- the Intel FPGA IP License Agreement, or other applicable license +-- agreement, including, without limitation, that your use is for +-- the sole purpose of programming logic devices manufactured by +-- Intel and sold by Intel or its authorized distributors. Please +-- refer to the applicable agreement for further details, at +-- https://fpgasoftware.intel.com/eula. + +-- Quartus Prime generated Memory Initialization File (.mif) + +WIDTH=31; +DEPTH=512; + +ADDRESS_RADIX=HEX; +DATA_RADIX=HEX; + +CONTENT BEGIN + 000 : 20000004; + 001 : 1FF00800; + 002 : 1FE01FE4; + 003 : 1FD04799; + 004 : 1FC07F06; + 005 : 1FB0C615; + 006 : 1FA11CAE; + 007 : 1F9182BA; + 008 : 1F81F823; + 009 : 1F727CD2; + 00A : 1F6310B1; + 00B : 1F53B3A8; + 00C : 1F4465A2; + 00D : 1F352689; + 00E : 1F25F648; + 00F : 1F16D4C8; + 010 : 1F07C1F4; + 011 : 1EF8BDB7; + 012 : 1EE9C7FC; + 013 : 1EDAE0AE; + 014 : 1ECC07B7; + 015 : 1EBD3D03; + 016 : 1EAE807F; + 017 : 1E9FD214; + 018 : 1E9131B0; + 019 : 1E829F3E; + 01A : 1E741AA9; + 01B : 1E65A3E0; + 01C : 1E573ACD; + 01D : 1E48DF5D; + 01E : 1E3A917E; + 01F : 1E2C511B; + 020 : 1E1E1E22; + 021 : 1E0FF880; + 022 : 1E01E022; + 023 : 1DF3D4F5; + 024 : 1DE5D6E8; + 025 : 1DD7E5E7; + 026 : 1DCA01E1; + 027 : 1DBC2AC2; + 028 : 1DAE607B; + 029 : 1DA0A2F7; + 02A : 1D92F227; + 02B : 1D854DF8; + 02C : 1D77B659; + 02D : 1D6A2B38; + 02E : 1D5CAC84; + 02F : 1D4F3A2D; + 030 : 1D41D421; + 031 : 1D347A50; + 032 : 1D272CA8; + 033 : 1D19EB19; + 034 : 1D0CB593; + 035 : 1CFF8C06; + 036 : 1CF26E60; + 037 : 1CE55C93; + 038 : 1CD8568D; + 039 : 1CCB5C3F; + 03A : 1CBE6D9A; + 03B : 1CB18A8D; + 03C : 1CA4B309; + 03D : 1C97E6FF; + 03E : 1C8B265F; + 03F : 1C7E711A; + 040 : 1C71C720; + 041 : 1C652864; + 042 : 1C5894D5; + 043 : 1C4C0C65; + 044 : 1C3F8F06; + 045 : 1C331CA8; + 046 : 1C26B53D; + 047 : 1C1A58B7; + 048 : 1C0E0707; + 049 : 1C01C020; + 04A : 1BF583F2; + 04B : 1BE95271; + 04C : 1BDD2B8E; + 04D : 1BD10F3A; + 04E : 1BC4FD69; + 04F : 1BB8F60D; + 050 : 1BACF919; + 051 : 1BA1067E; + 052 : 1B951E2F; + 053 : 1B89401F; + 054 : 1B7D6C42; + 055 : 1B71A289; + 056 : 1B65E2E8; + 057 : 1B5A2D51; + 058 : 1B4E81B9; + 059 : 1B42E012; + 05A : 1B37484F; + 05B : 1B2BBA64; + 05C : 1B203644; + 05D : 1B14BBE4; + 05E : 1B094B36; + 05F : 1AFDE42E; + 060 : 1AF286C1; + 061 : 1AE732E1; + 062 : 1ADBE884; + 063 : 1AD0A79C; + 064 : 1AC5701F; + 065 : 1ABA4200; + 066 : 1AAF1D33; + 067 : 1AA401AE; + 068 : 1A98EF64; + 069 : 1A8DE64A; + 06A : 1A82E655; + 06B : 1A77EF79; + 06C : 1A6D01AB; + 06D : 1A621CDF; + 06E : 1A57410B; + 06F : 1A4C6E24; + 070 : 1A41A41E; + 071 : 1A36E2EF; + 072 : 1A2C2A8C; + 073 : 1A217AE9; + 074 : 1A16D3FD; + 075 : 1A0C35BD; + 076 : 1A01A01E; + 077 : 19F71315; + 078 : 19EC8E99; + 079 : 19E2129E; + 07A : 19D79F1B; + 07B : 19CD3406; + 07C : 19C2D153; + 07D : 19B876F9; + 07E : 19AE24EE; + 07F : 19A3DB28; + 080 : 1999999E; + 081 : 198F6044; + 082 : 19852F12; + 083 : 197B05FD; + 084 : 1970E4FC; + 085 : 1966CC06; + 086 : 195CBB10; + 087 : 1952B211; + 088 : 1948B101; + 089 : 193EB7D5; + 08A : 1934C684; + 08B : 192ADD04; + 08C : 1920FB4E; + 08D : 19172157; + 08E : 190D4F16; + 08F : 19038483; + 090 : 18F9C194; + 091 : 18F00640; + 092 : 18E6527F; + 093 : 18DCA648; + 094 : 18D30191; + 095 : 18C96453; + 096 : 18BFCE84; + 097 : 18B6401D; + 098 : 18ACB913; + 099 : 18A33960; + 09A : 1899C0FA; + 09B : 18904FD9; + 09C : 1886E5F5; + 09D : 187D8345; + 09E : 187427C1; + 09F : 186AD361; + 0A0 : 1861861C; + 0A1 : 18583FEC; + 0A2 : 184F00C6; + 0A3 : 1845C8A5; + 0A4 : 183C977F; + 0A5 : 18336D4C; + 0A6 : 182A4A05; + 0A7 : 18212DA3; + 0A8 : 1818181C; + 0A9 : 180F096A; + 0AA : 18060184; + 0AB : 17FD0064; + 0AC : 17F40601; + 0AD : 17EB1254; + 0AE : 17E22555; + 0AF : 17D93EFE; + 0B0 : 17D05F45; + 0B1 : 17C78625; + 0B2 : 17BEB396; + 0B3 : 17B5E790; + 0B4 : 17AD220D; + 0B5 : 17A46304; + 0B6 : 179BAA70; + 0B7 : 1792F848; + 0B8 : 178A4C85; + 0B9 : 1781A722; + 0BA : 17790816; + 0BB : 17706F5A; + 0BC : 1767DCE8; + 0BD : 175F50B9; + 0BE : 1756CAC6; + 0BF : 174E4B08; + 0C0 : 1745D178; + 0C1 : 173D5E10; + 0C2 : 1734F0C9; + 0C3 : 172C899C; + 0C4 : 17242883; + 0C5 : 171BCD77; + 0C6 : 17137872; + 0C7 : 170B296C; + 0C8 : 1702E060; + 0C9 : 16FA9D47; + 0CA : 16F2601B; + 0CB : 16EA28D5; + 0CC : 16E1F76F; + 0CD : 16D9CBE3; + 0CE : 16D1A62A; + 0CF : 16C9863F; + 0D0 : 16C16C1B; + 0D1 : 16B957B7; + 0D2 : 16B1490F; + 0D3 : 16A9401B; + 0D4 : 16A13CD5; + 0D5 : 16993F39; + 0D6 : 1691473F; + 0D7 : 168954E1; + 0D8 : 1681681A; + 0D9 : 167980E5; + 0DA : 16719F3A; + 0DB : 1669C314; + 0DC : 1661EC6E; + 0DD : 165A1B42; + 0DE : 16524F89; + 0DF : 164A893F; + 0E0 : 1642C85D; + 0E1 : 163B0CDE; + 0E2 : 163356BD; + 0E3 : 162BA5F3; + 0E4 : 1623FA7B; + 0E5 : 161C5450; + 0E6 : 1614B36C; + 0E7 : 160D17CA; + 0E8 : 16058164; + 0E9 : 15FDF035; + 0EA : 15F66438; + 0EB : 15EEDD67; + 0EC : 15E75BBD; + 0ED : 15DFDF34; + 0EE : 15D867C8; + 0EF : 15D0F573; + 0F0 : 15C98830; + 0F1 : 15C21FF9; + 0F2 : 15BABCCA; + 0F3 : 15B35E9E; + 0F4 : 15AC056F; + 0F5 : 15A4B138; + 0F6 : 159D61F5; + 0F7 : 159617A0; + 0F8 : 158ED234; + 0F9 : 158791AD; + 0FA : 15805605; + 0FB : 15791F38; + 0FC : 1571ED40; + 0FD : 156AC019; + 0FE : 156397BE; + 0FF : 155C742B; + 100 : 15555559; + 101 : 154E3B46; + 102 : 154725EB; + 103 : 15401544; + 104 : 1539094D; + 105 : 15320201; + 106 : 152AFF5B; + 107 : 15240156; + 108 : 151D07EF; + 109 : 15161320; + 10A : 150F22E5; + 10B : 1508373A; + 10C : 15015019; + 10D : 14FA6D7F; + 10E : 14F38F67; + 10F : 14ECB5CC; + 110 : 14E5E0AB; + 111 : 14DF0FFF; + 112 : 14D843C3; + 113 : 14D17BF3; + 114 : 14CAB88B; + 115 : 14C3F987; + 116 : 14BD3EE2; + 117 : 14B68898; + 118 : 14AFD6A4; + 119 : 14A92904; + 11A : 14A27FB1; + 11B : 149BDAA9; + 11C : 149539E8; + 11D : 148E9D68; + 11E : 14880526; + 11F : 1481711E; + 120 : 147AE14C; + 121 : 147455AB; + 122 : 146DCE38; + 123 : 14674AEF; + 124 : 1460CBCC; + 125 : 145A50CA; + 126 : 1453D9E7; + 127 : 144D671D; + 128 : 1446F869; + 129 : 14408DC8; + 12A : 143A2735; + 12B : 1433C4AC; + 12C : 142D662A; + 12D : 14270BAB; + 12E : 1420B52A; + 12F : 141A62A5; + 130 : 14141418; + 131 : 140DC97E; + 132 : 140782D5; + 133 : 14014018; + 134 : 13FB0144; + 135 : 13F4C654; + 136 : 13EE8F47; + 137 : 13E85C17; + 138 : 13E22CC1; + 139 : 13DC0142; + 13A : 13D5D996; + 13B : 13CFB5B9; + 13C : 13C995A8; + 13D : 13C37960; + 13E : 13BD60DD; + 13F : 13B74C1B; + 140 : 13B13B18; + 141 : 13AB2DCF; + 142 : 13A5243C; + 143 : 139F1E5E; + 144 : 13991C30; + 145 : 13931DAF; + 146 : 138D22D7; + 147 : 13872BA6; + 148 : 13813817; + 149 : 137B4829; + 14A : 13755BD6; + 14B : 136F731C; + 14C : 13698DF8; + 14D : 1363AC66; + 14E : 135DCE64; + 14F : 1357F3ED; + 150 : 13521CFF; + 151 : 134C4997; + 152 : 134679B1; + 153 : 1340AD4A; + 154 : 133AE45F; + 155 : 13351EED; + 156 : 132F5CF1; + 157 : 13299E68; + 158 : 1323E34E; + 159 : 131E2BA1; + 15A : 1318775D; + 15B : 1312C67F; + 15C : 130D1905; + 15D : 13076EEB; + 15E : 1301C82F; + 15F : 12FC24CD; + 160 : 12F684C2; + 161 : 12F0E80B; + 162 : 12EB4EA6; + 163 : 12E5B88F; + 164 : 12E025C4; + 165 : 12DA9642; + 166 : 12D50A05; + 167 : 12CF810B; + 168 : 12C9FB51; + 169 : 12C478D5; + 16A : 12BEF992; + 16B : 12B97D87; + 16C : 12B404B1; + 16D : 12AE8F0C; + 16E : 12A91C97; + 16F : 12A3AD4E; + 170 : 129E412E; + 171 : 1298D835; + 172 : 12937260; + 173 : 128E0FAC; + 174 : 1288B017; + 175 : 1283539D; + 176 : 127DFA3D; + 177 : 1278A3F3; + 178 : 127350BC; + 179 : 126E0097; + 17A : 1268B381; + 17B : 12636976; + 17C : 125E2274; + 17D : 1258DE7A; + 17E : 12539D83; + 17F : 124E5F8D; + 180 : 12492496; + 181 : 1243EC9C; + 182 : 123EB79B; + 183 : 12398592; + 184 : 1234567D; + 185 : 122F2A5A; + 186 : 122A0127; + 187 : 1224DAE1; + 188 : 121FB785; + 189 : 121A9712; + 18A : 12157984; + 18B : 12105EDA; + 18C : 120B4710; + 18D : 12063225; + 18E : 12012016; + 18F : 11FC10E0; + 190 : 11F70482; + 191 : 11F1FAF8; + 192 : 11ECF440; + 193 : 11E7F059; + 194 : 11E2EF3F; + 195 : 11DDF0F1; + 196 : 11D8F56B; + 197 : 11D3FCAC; + 198 : 11CF06B2; + 199 : 11CA1379; + 19A : 11C52300; + 19B : 11C03545; + 19C : 11BB4A44; + 19D : 11B661FD; + 19E : 11B17C6C; + 19F : 11AC998F; + 1A0 : 11A7B965; + 1A1 : 11A2DBEB; + 1A2 : 119E011E; + 1A3 : 119928FD; + 1A4 : 11945385; + 1A5 : 118F80B4; + 1A6 : 118AB088; + 1A7 : 1185E2FE; + 1A8 : 11811815; + 1A9 : 117C4FCB; + 1AA : 11778A1D; + 1AB : 1172C709; + 1AC : 116E068D; + 1AD : 116948A7; + 1AE : 11648D55; + 1AF : 115FD494; + 1B0 : 115B1E63; + 1B1 : 11566AC0; + 1B2 : 1151B9A8; + 1B3 : 114D0B19; + 1B4 : 11485F12; + 1B5 : 1143B590; + 1B6 : 113F0E91; + 1B7 : 113A6A14; + 1B8 : 1135C815; + 1B9 : 11312894; + 1BA : 112C8B8E; + 1BB : 1127F101; + 1BC : 112358EB; + 1BD : 111EC34B; + 1BE : 111A301E; + 1BF : 11159F62; + 1C0 : 11111115; + 1C1 : 110C8536; + 1C2 : 1107FBC2; + 1C3 : 110374B8; + 1C4 : 10FEF015; + 1C5 : 10FA6DD8; + 1C6 : 10F5EDFF; + 1C7 : 10F17087; + 1C8 : 10ECF570; + 1C9 : 10E87CB7; + 1CA : 10E40659; + 1CB : 10DF9257; + 1CC : 10DB20AD; + 1CD : 10D6B159; + 1CE : 10D2445A; + 1CF : 10CDD9AE; + 1D0 : 10C97154; + 1D1 : 10C50B48; + 1D2 : 10C0A78B; + 1D3 : 10BC4618; + 1D4 : 10B7E6F0; + 1D5 : 10B38A10; + 1D6 : 10AF2F76; + 1D7 : 10AAD721; + 1D8 : 10A6810E; + 1D9 : 10A22D3D; + 1DA : 109DDBAB; + 1DB : 10998C56; + 1DC : 10953F3D; + 1DD : 1090F45E; + 1DE : 108CABB7; + 1DF : 10886547; + 1E0 : 1084210C; + 1E1 : 107FDF04; + 1E2 : 107B9F2E; + 1E3 : 10776187; + 1E4 : 1073260E; + 1E5 : 106EECC2; + 1E6 : 106AB5A0; + 1E7 : 106680A8; + 1E8 : 10624DD7; + 1E9 : 105E1D2C; + 1EA : 1059EEA4; + 1EB : 1055C240; + 1EC : 105197FC; + 1ED : 104D6FD7; + 1EE : 104949D0; + 1EF : 104525E5; + 1F0 : 10410414; + 1F1 : 103CE45C; + 1F2 : 1038C6BC; + 1F3 : 1034AB30; + 1F4 : 103091B9; + 1F5 : 102C7A54; + 1F6 : 10286500; + 1F7 : 102451BC; + 1F8 : 10204085; + 1F9 : 101C315A; + 1FA : 1018243A; + 1FB : 10141923; + 1FC : 10101014; + 1FD : 100C090B; + 1FE : 10080406; + 1FF : 10040104; +END; diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/my_division_flt_i_sfc_logic_s_c1_in_wt_e0000116_invTables_lutmem.mif b/python/openvino/demo/ip/intel_ai_ip/verilog/my_division_flt_i_sfc_logic_s_c1_in_wt_e0000116_invTables_lutmem.mif new file mode 100644 index 0000000..7e24eb5 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/my_division_flt_i_sfc_logic_s_c1_in_wt_e0000116_invTables_lutmem.mif @@ -0,0 +1,537 @@ +-- Copyright (C) 2019 Intel Corporation. All rights reserved. +-- Your use of Intel Corporation's design tools, logic functions +-- and other software and tools, and any partner logic +-- functions, and any output files from any of the foregoing +-- (including device programming or simulation files), and any +-- associated documentation or information are expressly subject +-- to the terms and conditions of the Intel Program License +-- Subscription Agreement, the Intel Quartus Prime License Agreement, +-- the Intel FPGA IP License Agreement, or other applicable license +-- agreement, including, without limitation, that your use is for +-- the sole purpose of programming logic devices manufactured by +-- Intel and sold by Intel or its authorized distributors. Please +-- refer to the applicable agreement for further details, at +-- https://fpgasoftware.intel.com/eula. + +-- Quartus Prime generated Memory Initialization File (.mif) + +WIDTH=21; +DEPTH=512; + +ADDRESS_RADIX=HEX; +DATA_RADIX=HEX; + +CONTENT BEGIN + 000 : 100002; + 001 : 100FF6; + 002 : 101FD2; + 003 : 102F95; + 004 : 103F44; + 005 : 104ED9; + 006 : 105E58; + 007 : 106DC1; + 008 : 107D14; + 009 : 108C4D; + 00A : 109B6F; + 00B : 10AA7F; + 00C : 10B977; + 00D : 10C85B; + 00E : 10D726; + 00F : 10E5DC; + 010 : 10F47E; + 011 : 11030C; + 012 : 111181; + 013 : 111FE1; + 014 : 112E2F; + 015 : 113C6A; + 016 : 114A8D; + 017 : 11589F; + 018 : 116699; + 019 : 117480; + 01A : 118258; + 01B : 119016; + 01C : 119DC3; + 01D : 11AB5F; + 01E : 11B8E3; + 01F : 11C657; + 020 : 11D3B8; + 021 : 11E105; + 022 : 11EE3F; + 023 : 11FB69; + 024 : 12087D; + 025 : 121581; + 026 : 122270; + 027 : 122F53; + 028 : 123C1D; + 029 : 1248DD; + 02A : 125585; + 02B : 12621D; + 02C : 126EA3; + 02D : 127B19; + 02E : 128781; + 02F : 1293D4; + 030 : 12A016; + 031 : 12AC47; + 032 : 12B86A; + 033 : 12C47C; + 034 : 12D07C; + 035 : 12DC6A; + 036 : 12E84B; + 037 : 12F419; + 038 : 12FFDB; + 039 : 130B8C; + 03A : 13172B; + 03B : 1322BD; + 03C : 132E3E; + 03D : 1339AF; + 03E : 134511; + 03F : 135063; + 040 : 135BAA; + 041 : 1366DD; + 042 : 137205; + 043 : 137D1D; + 044 : 138824; + 045 : 13931F; + 046 : 139E0C; + 047 : 13A8E8; + 048 : 13B3BA; + 049 : 13BE78; + 04A : 13C92E; + 04B : 13D3D0; + 04C : 13DE67; + 04D : 13E8F2; + 04E : 13F36E; + 04F : 13FDDD; + 050 : 14083A; + 051 : 14128E; + 052 : 141CD4; + 053 : 14270E; + 054 : 143137; + 055 : 143B56; + 056 : 144567; + 057 : 144F6D; + 058 : 145962; + 059 : 14634D; + 05A : 146D2C; + 05B : 1476FD; + 05C : 1480C4; + 05D : 148A7B; + 05E : 149428; + 05F : 149DC8; + 060 : 14A75B; + 061 : 14B0E4; + 062 : 14BA5F; + 063 : 14C3D1; + 064 : 14CD34; + 065 : 14D68C; + 066 : 14DFDC; + 067 : 14E91D; + 068 : 14F252; + 069 : 14FB7E; + 06A : 15049B; + 06B : 150DAD; + 06C : 1516B6; + 06D : 151FB5; + 06E : 1528A7; + 06F : 15318D; + 070 : 153A69; + 071 : 154339; + 072 : 154BFE; + 073 : 1554BE; + 074 : 155D6F; + 075 : 156614; + 076 : 156EAE; + 077 : 157742; + 078 : 157FC6; + 079 : 158846; + 07A : 1590B7; + 07B : 15991D; + 07C : 15A17C; + 07D : 15A9D1; + 07E : 15B21C; + 07F : 15BA5B; + 080 : 15C28F; + 081 : 15CABB; + 082 : 15D2DD; + 083 : 15DAF7; + 084 : 15E306; + 085 : 15EB0B; + 086 : 15F307; + 087 : 15FAFC; + 088 : 1602E3; + 089 : 160AC2; + 08A : 161298; + 08B : 161A69; + 08C : 16222A; + 08D : 1629E5; + 08E : 163198; + 08F : 16393F; + 090 : 1640DF; + 091 : 164878; + 092 : 165005; + 093 : 16578A; + 094 : 165F09; + 095 : 16667C; + 096 : 166DE8; + 097 : 167548; + 098 : 167CA5; + 099 : 1683F5; + 09A : 168B3F; + 09B : 16927F; + 09C : 1699B6; + 09D : 16A0E6; + 09E : 16A80F; + 09F : 16AF2F; + 0A0 : 16B648; + 0A1 : 16BD55; + 0A2 : 16C460; + 0A3 : 16CB5D; + 0A4 : 16D255; + 0A5 : 16D945; + 0A6 : 16E02F; + 0A7 : 16E70C; + 0A8 : 16EDE6; + 0A9 : 16F4B6; + 0AA : 16FB80; + 0AB : 170240; + 0AC : 1708FA; + 0AD : 170FAD; + 0AE : 171657; + 0AF : 171CF8; + 0B0 : 172398; + 0B1 : 172A2C; + 0B2 : 1730B9; + 0B3 : 17373E; + 0B4 : 173DBC; + 0B5 : 174434; + 0B6 : 174AA2; + 0B7 : 17510B; + 0B8 : 175770; + 0B9 : 175DC8; + 0BA : 17641D; + 0BB : 176A6C; + 0BC : 1770B2; + 0BD : 1776F1; + 0BE : 177D29; + 0BF : 17835B; + 0C0 : 178988; + 0C1 : 178FAC; + 0C2 : 1795C9; + 0C3 : 179BE1; + 0C4 : 17A1F0; + 0C5 : 17A7F9; + 0C6 : 17ADFB; + 0C7 : 17B3F9; + 0C8 : 17B9F0; + 0C9 : 17BFDF; + 0CA : 17C5C9; + 0CB : 17CBAD; + 0CC : 17D18A; + 0CD : 17D75F; + 0CE : 17DD32; + 0CF : 17E2FA; + 0D0 : 17E8BD; + 0D1 : 17EE7C; + 0D2 : 17F431; + 0D3 : 17F9E4; + 0D4 : 17FF91; + 0D5 : 180534; + 0D6 : 180AD4; + 0D7 : 18106F; + 0D8 : 181605; + 0D9 : 181B90; + 0DA : 18211A; + 0DB : 18269E; + 0DC : 182C19; + 0DD : 18318F; + 0DE : 183701; + 0DF : 183C6B; + 0E0 : 1841D1; + 0E1 : 184731; + 0E2 : 184C89; + 0E3 : 1851DF; + 0E4 : 185730; + 0E5 : 185C7A; + 0E6 : 1861BF; + 0E7 : 1866FE; + 0E8 : 186C39; + 0E9 : 18716D; + 0EA : 18769B; + 0EB : 187BC3; + 0EC : 1880E8; + 0ED : 188607; + 0EE : 188B20; + 0EF : 189034; + 0F0 : 189543; + 0F1 : 189A50; + 0F2 : 189F55; + 0F3 : 18A453; + 0F4 : 18A94F; + 0F5 : 18AE46; + 0F6 : 18B336; + 0F7 : 18B821; + 0F8 : 18BD0A; + 0F9 : 18C1EB; + 0FA : 18C6C8; + 0FB : 18CB9F; + 0FC : 18D074; + 0FD : 18D543; + 0FE : 18DA0B; + 0FF : 18DECE; + 100 : 18E38F; + 101 : 18E848; + 102 : 18ED00; + 103 : 18F1B3; + 104 : 18F65F; + 105 : 18FB06; + 106 : 18FFAB; + 107 : 19044C; + 108 : 1908E6; + 109 : 190D7C; + 10A : 19120D; + 10B : 19169A; + 10C : 191B24; + 10D : 191FA8; + 10E : 192428; + 10F : 1928A5; + 110 : 192D1B; + 111 : 19318C; + 112 : 1935FB; + 113 : 193A66; + 114 : 193ECB; + 115 : 19432B; + 116 : 194787; + 117 : 194BE1; + 118 : 195038; + 119 : 195486; + 11A : 1958D7; + 11B : 195D1E; + 11C : 19615F; + 11D : 1965A0; + 11E : 1969DC; + 11F : 196E13; + 120 : 197247; + 121 : 197678; + 122 : 197AA5; + 123 : 197ECC; + 124 : 1982EF; + 125 : 198710; + 126 : 198B2A; + 127 : 198F43; + 128 : 199358; + 129 : 199766; + 12A : 199B72; + 12B : 199F7B; + 12C : 19A37F; + 12D : 19A780; + 12E : 19AB80; + 12F : 19AF7A; + 130 : 19B36D; + 131 : 19B761; + 132 : 19BB4E; + 133 : 19BF38; + 134 : 19C31D; + 135 : 19C703; + 136 : 19CAE0; + 137 : 19CEBD; + 138 : 19D296; + 139 : 19D66A; + 13A : 19DA3B; + 13B : 19DE0B; + 13C : 19E1D7; + 13D : 19E59D; + 13E : 19E960; + 13F : 19ED1F; + 140 : 19F0D8; + 141 : 19F491; + 142 : 19F84B; + 143 : 19FBFB; + 144 : 19FFAA; + 145 : 1A0355; + 146 : 1A06FE; + 147 : 1A0AA0; + 148 : 1A0E45; + 149 : 1A11DE; + 14A : 1A157A; + 14B : 1A1912; + 14C : 1A1CA6; + 14D : 1A2037; + 14E : 1A23C3; + 14F : 1A274F; + 150 : 1A2AD6; + 151 : 1A2E59; + 152 : 1A31DA; + 153 : 1A3559; + 154 : 1A38D5; + 155 : 1A3C4C; + 156 : 1A3FC0; + 157 : 1A432F; + 158 : 1A469E; + 159 : 1A4A07; + 15A : 1A4D70; + 15B : 1A50D7; + 15C : 1A5438; + 15D : 1A5796; + 15E : 1A5AF0; + 15F : 1A5E48; + 160 : 1A619F; + 161 : 1A64F3; + 162 : 1A6843; + 163 : 1A6B92; + 164 : 1A6EDB; + 165 : 1A7221; + 166 : 1A7567; + 167 : 1A78A9; + 168 : 1A7BE7; + 169 : 1A7F21; + 16A : 1A825C; + 16B : 1A8591; + 16C : 1A88C4; + 16D : 1A8BF5; + 16E : 1A8F21; + 16F : 1A924B; + 170 : 1A9574; + 171 : 1A9898; + 172 : 1A9BBB; + 173 : 1A9EDB; + 174 : 1AA1F8; + 175 : 1AA513; + 176 : 1AA82A; + 177 : 1AAB3F; + 178 : 1AAE56; + 179 : 1AB164; + 17A : 1AB46F; + 17B : 1AB77A; + 17C : 1ABA85; + 17D : 1ABD85; + 17E : 1AC089; + 17F : 1AC38B; + 180 : 1AC689; + 181 : 1AC983; + 182 : 1ACC7B; + 183 : 1ACF6F; + 184 : 1AD263; + 185 : 1AD554; + 186 : 1AD842; + 187 : 1ADB2E; + 188 : 1ADE1A; + 189 : 1AE100; + 18A : 1AE3E6; + 18B : 1AE6C7; + 18C : 1AE9A8; + 18D : 1AEC84; + 18E : 1AEF5F; + 18F : 1AF237; + 190 : 1AF50B; + 191 : 1AF7DF; + 192 : 1AFAB3; + 193 : 1AFD81; + 194 : 1B004D; + 195 : 1B0316; + 196 : 1B05DF; + 197 : 1B08A4; + 198 : 1B0B66; + 199 : 1B0E28; + 19A : 1B10E6; + 19B : 1B13A2; + 19C : 1B165D; + 19D : 1B1914; + 19E : 1B1BCA; + 19F : 1B1E7F; + 1A0 : 1B212E; + 1A1 : 1B23DB; + 1A2 : 1B2688; + 1A3 : 1B2932; + 1A4 : 1B2BDA; + 1A5 : 1B2E80; + 1A6 : 1B3125; + 1A7 : 1B33C9; + 1A8 : 1B3669; + 1A9 : 1B3905; + 1AA : 1B3BA0; + 1AB : 1B3E3A; + 1AC : 1B40D1; + 1AD : 1B4365; + 1AE : 1B45F8; + 1AF : 1B488A; + 1B0 : 1B4B18; + 1B1 : 1B4DA3; + 1B2 : 1B502E; + 1B3 : 1B52B7; + 1B4 : 1B553C; + 1B5 : 1B57C0; + 1B6 : 1B5A42; + 1B7 : 1B5CC1; + 1B8 : 1B5F41; + 1B9 : 1B61BD; + 1BA : 1B6437; + 1BB : 1B66B0; + 1BC : 1B6927; + 1BD : 1B6B99; + 1BE : 1B6E0A; + 1BF : 1B707B; + 1C0 : 1B72EA; + 1C1 : 1B7556; + 1C2 : 1B77C1; + 1C3 : 1B7A29; + 1C4 : 1B7C91; + 1C5 : 1B7EF5; + 1C6 : 1B8158; + 1C7 : 1B83BA; + 1C8 : 1B8617; + 1C9 : 1B8873; + 1CA : 1B8AD2; + 1CB : 1B8D28; + 1CC : 1B8F80; + 1CD : 1B91D8; + 1CE : 1B942D; + 1CF : 1B967E; + 1D0 : 1B98CD; + 1D1 : 1B9B1E; + 1D2 : 1B9D67; + 1D3 : 1B9FB5; + 1D4 : 1BA1FD; + 1D5 : 1BA444; + 1D6 : 1BA689; + 1D7 : 1BA8CD; + 1D8 : 1BAB10; + 1D9 : 1BAD4E; + 1DA : 1BAF8C; + 1DB : 1BB1C9; + 1DC : 1BB405; + 1DD : 1BB63F; + 1DE : 1BB877; + 1DF : 1BBAAD; + 1E0 : 1BBCE0; + 1E1 : 1BBF12; + 1E2 : 1BC141; + 1E3 : 1BC371; + 1E4 : 1BC59F; + 1E5 : 1BC7CA; + 1E6 : 1BC9F5; + 1E7 : 1BCC1C; + 1E8 : 1BCE41; + 1E9 : 1BD065; + 1EA : 1BD28C; + 1EB : 1BD4AB; + 1EC : 1BD6CC; + 1ED : 1BD8EB; + 1EE : 1BDB08; + 1EF : 1BDD23; + 1F0 : 1BDF3D; + 1F1 : 1BE156; + 1F2 : 1BE369; + 1F3 : 1BE581; + 1F4 : 1BE793; + 1F5 : 1BE9A6; + 1F6 : 1BEBB6; + 1F7 : 1BEDC2; + 1F8 : 1BEFD0; + 1F9 : 1BF1DD; + 1FA : 1BF3E7; + 1FB : 1BF5EF; + 1FC : 1BF7F4; + 1FD : 1BF9F9; + 1FE : 1BFBFE; + 1FF : 1BFE00; +END; diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/my_division_flt_i_sfc_logic_s_c1_in_wt_e0000119_invTables_lutmem.mif b/python/openvino/demo/ip/intel_ai_ip/verilog/my_division_flt_i_sfc_logic_s_c1_in_wt_e0000119_invTables_lutmem.mif new file mode 100644 index 0000000..5db6b9f --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/my_division_flt_i_sfc_logic_s_c1_in_wt_e0000119_invTables_lutmem.mif @@ -0,0 +1,489 @@ +-- Copyright (C) 2019 Intel Corporation. All rights reserved. +-- Your use of Intel Corporation's design tools, logic functions +-- and other software and tools, and any partner logic +-- functions, and any output files from any of the foregoing +-- (including device programming or simulation files), and any +-- associated documentation or information are expressly subject +-- to the terms and conditions of the Intel Program License +-- Subscription Agreement, the Intel Quartus Prime License Agreement, +-- the Intel FPGA IP License Agreement, or other applicable license +-- agreement, including, without limitation, that your use is for +-- the sole purpose of programming logic devices manufactured by +-- Intel and sold by Intel or its authorized distributors. Please +-- refer to the applicable agreement for further details, at +-- https://fpgasoftware.intel.com/eula. + +-- Quartus Prime generated Memory Initialization File (.mif) + +WIDTH=12; +DEPTH=512; + +ADDRESS_RADIX=HEX; +DATA_RADIX=HEX; + +CONTENT BEGIN + 000 : 7FA; + 001 : 7EE; + 002 : 7E3; + 003 : 7D8; + 004 : 7CB; + 005 : 7C0; + 006 : 7B5; + 007 : 7A9; + 008 : 79B; + 009 : 792; + 00A : 788; + 00B : 77B; + 00C : 771; + 00D : 764; + 00E : 75A; + 00F : 751; + 010 : 746; + 011 : 739; + 012 : 731; + 013 : 728; + 014 : 71E; + 015 : 712; + 016 : 708; + 017 : 6FD; + 018 : 6F5; + 019 : 6EC; + 01A : 6DF; + 01B : 6D7; + 01C : 6CE; + 01D : 6C2; + 01E : 6BA; + 01F : 6B0; + 020 : 6A6; + 021 : 69D; + 022 : 695; + 023 : 68A; + 024 : 682; + 025 : 679; + 026 : 672; + 027 : 666; + 028 : 660; + 029 : 653; + 02A : 64C; + 02B : 644; + 02C : 63C; + 02D : 634; + 02E : 628; + 02F : 620; + 030 : 619; + 031 : 611; + 032 : 607; + 033 : 5FE; + 034 : 5F7; + 035 : 5F0; + 036 : 5E8; + 037 : 5E1; + 038 : 5D7; + 039 : 5CF; + 03A : 5C8; + 03B : 5BF; + 03C : 5B8; + 03D : 5B1; + 03E : 5AA; + 03F : 5A4; + 040 : 59A; + 041 : 594; + 042 : 58B; + 043 : 584; + 044 : 57E; + 045 : 576; + 046 : 56E; + 047 : 569; + 048 : 55F; + 049 : 55B; + 04A : 551; + 04B : 54D; + 04C : 545; + 04D : 53E; + 04E : 537; + 04F : 52F; + 050 : 52B; + 051 : 523; + 052 : 51D; + 053 : 515; + 054 : 510; + 055 : 509; + 056 : 502; + 057 : 4FB; + 058 : 4F7; + 059 : 4F0; + 05A : 4E9; + 05B : 4E4; + 05C : 4DC; + 05D : 4D7; + 05E : 4D0; + 05F : 4CB; + 060 : 4C5; + 061 : 4BF; + 062 : 4B9; + 063 : 4B2; + 064 : 4AD; + 065 : 4A8; + 066 : 49F; + 067 : 499; + 068 : 495; + 069 : 48D; + 06A : 489; + 06B : 485; + 06C : 47E; + 06D : 477; + 06E : 472; + 06F : 46D; + 070 : 468; + 071 : 464; + 072 : 460; + 073 : 456; + 074 : 451; + 075 : 44D; + 076 : 44A; + 077 : 442; + 078 : 440; + 079 : 437; + 07A : 434; + 07B : 430; + 07C : 42A; + 07D : 424; + 07E : 41E; + 07F : 41B; + 080 : 417; + 081 : 413; + 082 : 40E; + 083 : 408; + 084 : 404; + 085 : 3FF; + 086 : 3FB; + 087 : 3F4; + 088 : 3F1; + 089 : 3ED; + 08A : 3E9; + 08B : 3E1; + 08C : 3DF; + 08D : 3DA; + 08E : 3D5; + 08F : 3D2; + 090 : 3CD; + 091 : 3C7; + 092 : 3C4; + 093 : 3BF; + 094 : 3B9; + 095 : 3B5; + 096 : 3B1; + 097 : 3AF; + 098 : 3A8; + 099 : 3A5; + 09A : 3A0; + 09B : 39D; + 09C : 39A; + 09D : 396; + 09E : 391; + 09F : 38C; + 0A0 : 388; + 0A1 : 386; + 0A2 : 37F; + 0A3 : 37D; + 0A4 : 378; + 0A5 : 375; + 0A6 : 36F; + 0A7 : 36D; + 0A8 : 368; + 0A9 : 364; + 0AA : 360; + 0AB : 35D; + 0AC : 359; + 0AD : 354; + 0AE : 352; + 0AF : 350; + 0B0 : 348; + 0B1 : 345; + 0B2 : 341; + 0B3 : 33F; + 0B4 : 33B; + 0B5 : 338; + 0B6 : 336; + 0B7 : 333; + 0B8 : 32D; + 0B9 : 32C; + 0BA : 327; + 0BB : 322; + 0BC : 31F; + 0BD : 31C; + 0BE : 319; + 0BF : 315; + 0C0 : 310; + 0C1 : 30D; + 0C2 : 30A; + 0C3 : 306; + 0C4 : 304; + 0C5 : 302; + 0C6 : 2FF; + 0C7 : 2FB; + 0C8 : 2F7; + 0C9 : 2F5; + 0CA : 2F1; + 0CB : 2ED; + 0CC : 2EA; + 0CD : 2E9; + 0CE : 2E3; + 0CF : 2E2; + 0D0 : 2DF; + 0D1 : 2DC; + 0D2 : 2DB; + 0D3 : 2D6; + 0D4 : 2D3; + 0D5 : 2D2; + 0D6 : 2CE; + 0D7 : 2CB; + 0D8 : 2C6; + 0D9 : 2C5; + 0DA : 2C0; + 0DB : 2BC; + 0DC : 2BB; + 0DD : 2B8; + 0DE : 2B5; + 0DF : 2B3; + 0E0 : 2B0; + 0E1 : 2AE; + 0E2 : 2AD; + 0E3 : 2A9; + 0E4 : 2A5; + 0E5 : 2A2; + 0E6 : 29F; + 0E7 : 29C; + 0E8 : 298; + 0E9 : 296; + 0EA : 294; + 0EB : 293; + 0EC : 28F; + 0ED : 28D; + 0EE : 28B; + 0EF : 289; + 0F0 : 286; + 0F1 : 281; + 0F2 : 27F; + 0F3 : 27E; + 0F4 : 27A; + 0F5 : 277; + 0F6 : 275; + 0F7 : 274; + 0F8 : 26F; + 0F9 : 26D; + 0FA : 26B; + 0FB : 269; + 0FC : 265; + [0FD..0FE] : 262; + 0FF : 260; + 100 : 25E; + 101 : 25D; + 102 : 259; + 103 : 256; + 104 : 255; + 105 : 254; + 106 : 250; + 107 : 24D; + 108 : 24B; + 109 : 249; + 10A : 248; + 10B : 245; + 10C : 242; + 10D : 240; + 10E : 23D; + 10F : 23A; + 110 : 239; + 111 : 238; + 112 : 235; + 113 : 232; + 114 : 231; + 115 : 230; + 116 : 22F; + 117 : 22B; + [118..119] : 228; + [11A..11C] : 221; + 11D : 21E; + 11E : 21C; + 11F : 21B; + 120 : 218; + 121 : 215; + 122 : 212; + 123 : 211; + 124 : 20F; + 125 : 20D; + 126 : 20C; + 127 : 209; + [128..129] : 207; + 12A : 205; + 12B : 203; + 12C : 202; + 12D : 1FF; + 12E : 1FB; + 12F : 1F9; + 130 : 1FA; + 131 : 1F6; + 132 : 1F5; + [133..134] : 1F4; + [135..136] : 1F0; + 137 : 1ED; + 138 : 1EB; + 139 : 1EA; + 13A : 1E8; + 13B : 1E4; + 13C : 1E1; + 13D : 1E0; + [13E..13F] : 1DE; + 140 : 1DF; + 141 : 1DD; + [142..143] : 1D7; + 144 : 1D5; + 145 : 1D3; + 146 : 1D1; + 147 : 1D2; + 148 : 1CC; + 149 : 1CF; + 14A : 1CC; + 14B : 1CA; + 14C : 1C8; + 14D : 1C7; + 14E : 1C6; + 14F : 1C3; + 150 : 1C2; + 151 : 1C1; + 152 : 1BF; + 153 : 1BC; + 154 : 1B9; + 155 : 1B8; + [156..157] : 1B7; + [158..159] : 1B5; + 15A : 1B2; + 15B : 1AF; + [15C..15E] : 1AE; + 15F : 1AD; + 160 : 1AA; + 161 : 1A8; + 162 : 1A6; + [163..164] : 1A3; + 165 : 1A2; + 166 : 19F; + [167..168] : 19D; + 169 : 19C; + [16A..16B] : 199; + 16C : 197; + [16D..16E] : 196; + 16F : 195; + [170..171] : 193; + 172 : 191; + 173 : 190; + 174 : 18E; + 175 : 18D; + 176 : 18C; + 177 : 18B; + 178 : 185; + [179..17A] : 186; + 17B : 185; + 17C : 180; + 17D : 184; + 17E : 181; + 17F : 17E; + 180 : 17D; + [181..183] : 17C; + 184 : 17A; + 185 : 179; + 186 : 178; + 187 : 176; + 188 : 173; + 189 : 172; + 18A : 170; + 18B : 16F; + [18C..18D] : 16D; + [18E..190] : 16B; + 191 : 16A; + 192 : 166; + [193..194] : 165; + 195 : 164; + [196..197] : 162; + 198 : 161; + [199..19A] : 15F; + 19B : 15D; + 19C : 15C; + 19D : 15B; + 19E : 159; + 19F : 157; + [1A0..1A1] : 158; + 1A2 : 157; + 1A3 : 156; + 1A4 : 155; + 1A5 : 154; + 1A6 : 151; + 1A7 : 14E; + [1A8..1A9] : 14D; + 1AA : 14C; + 1AB : 14A; + [1AC..1AD] : 149; + 1AE : 147; + [1AF..1B1] : 145; + 1B2 : 143; + [1B3..1B4] : 142; + [1B5..1B6] : 141; + 1B7 : 140; + 1B8 : 13E; + 1B9 : 13D; + 1BA : 13C; + 1BB : 13A; + 1BC : 139; + [1BD..1BE] : 13A; + 1BF : 138; + 1C0 : 137; + 1C1 : 136; + 1C2 : 135; + 1C3 : 134; + [1C4..1C5] : 132; + 1C6 : 130; + 1C7 : 12F; + [1C8..1C9] : 130; + 1CA : 12C; + 1CB : 12E; + 1CC : 12C; + 1CD : 129; + 1CE : 127; + 1CF : 128; + 1D0 : 127; + 1D1 : 124; + 1D2 : 126; + [1D3..1D4] : 123; + [1D5..1D6] : 122; + 1D7 : 120; + 1D8 : 11F; + 1D9 : 120; + 1DA : 11F; + 1DB : 11E; + 1DC : 11C; + 1DD : 11A; + 1DE : 119; + [1DF..1E2] : 118; + 1E3 : 116; + 1E4 : 115; + 1E5 : 114; + [1E6..1E7] : 113; + [1E8..1E9] : 114; + 1EA : 110; + 1EB : 111; + 1EC : 10F; + 1ED : 10E; + 1EE : 10D; + 1EF : 10C; + 1F0 : 10B; + 1F1 : 109; + 1F2 : 10B; + [1F3..1F4] : 108; + [1F5..1F6] : 106; + 1F7 : 107; + 1F8 : 105; + 1F9 : 103; + [1FA..1FB] : 102; + 1FC : 103; + 1FD : 102; + [1FE..1FF] : 100; +END; diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/my_exponent_flt_i_sfc_logic_s_c1_in_wt_e0000ock_rsrvd_fix_lutmem.mif b/python/openvino/demo/ip/intel_ai_ip/verilog/my_exponent_flt_i_sfc_logic_s_c1_in_wt_e0000ock_rsrvd_fix_lutmem.mif new file mode 100644 index 0000000..da0d03a --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/my_exponent_flt_i_sfc_logic_s_c1_in_wt_e0000ock_rsrvd_fix_lutmem.mif @@ -0,0 +1,281 @@ +-- Copyright (C) 2019 Intel Corporation. All rights reserved. +-- Your use of Intel Corporation's design tools, logic functions +-- and other software and tools, and any partner logic +-- functions, and any output files from any of the foregoing +-- (including device programming or simulation files), and any +-- associated documentation or information are expressly subject +-- to the terms and conditions of the Intel Program License +-- Subscription Agreement, the Intel Quartus Prime License Agreement, +-- the Intel FPGA IP License Agreement, or other applicable license +-- agreement, including, without limitation, that your use is for +-- the sole purpose of programming logic devices manufactured by +-- Intel and sold by Intel or its authorized distributors. Please +-- refer to the applicable agreement for further details, at +-- https://fpgasoftware.intel.com/eula. + +-- Quartus Prime generated Memory Initialization File (.mif) + +WIDTH=32; +DEPTH=256; + +ADDRESS_RADIX=HEX; +DATA_RADIX=HEX; + +CONTENT BEGIN + 000 : 00000000; + 001 : 3F317218; + 002 : 3FB17218; + 003 : 40051592; + 004 : 40317218; + 005 : 405DCE9E; + 006 : 40851592; + 007 : 409B43D5; + 008 : 40B17218; + 009 : 40C7A05B; + 00A : 40DDCE9E; + 00B : 40F3FCE1; + 00C : 41051592; + 00D : 41102CB3; + 00E : 411B43D5; + 00F : 41265AF6; + 010 : 41317218; + 011 : 413C8939; + 012 : 4147A05B; + 013 : 4152B77C; + 014 : 415DCE9E; + 015 : 4168E5BF; + 016 : 4173FCE1; + 017 : 417F1402; + 018 : 41851592; + 019 : 418AA123; + 01A : 41902CB3; + 01B : 4195B844; + 01C : 419B43D5; + 01D : 41A0CF66; + 01E : 41A65AF6; + 01F : 41ABE687; + 020 : 41B17218; + 021 : 41B6FDA9; + 022 : 41BC8939; + 023 : 41C214CA; + 024 : 41C7A05B; + 025 : 41CD2BEC; + 026 : 41D2B77C; + 027 : 41D8430D; + 028 : 41DDCE9E; + 029 : 41E35A2F; + 02A : 41E8E5BF; + 02B : 41EE7150; + 02C : 41F3FCE1; + 02D : 41F98872; + 02E : 41FF1402; + 02F : 42024FCA; + 030 : 42051592; + 031 : 4207DB5A; + 032 : 420AA123; + 033 : 420D66EB; + 034 : 42102CB3; + 035 : 4212F27C; + 036 : 4215B844; + 037 : 42187E0D; + 038 : 421B43D5; + 039 : 421E099D; + 03A : 4220CF66; + 03B : 4223952E; + 03C : 42265AF6; + 03D : 422920BF; + 03E : 422BE687; + 03F : 422EAC50; + 040 : 42317218; + 041 : 423437E0; + 042 : 4236FDA9; + 043 : 4239C371; + 044 : 423C8939; + 045 : 423F4F02; + 046 : 424214CA; + 047 : 4244DA93; + 048 : 4247A05B; + 049 : 424A6623; + 04A : 424D2BEC; + 04B : 424FF1B4; + 04C : 4252B77C; + 04D : 42557D45; + 04E : 4258430D; + 04F : 425B08D6; + 050 : 425DCE9E; + 051 : 42609466; + 052 : 42635A2F; + 053 : 42661FF7; + 054 : 4268E5BF; + 055 : 426BAB88; + 056 : 426E7150; + 057 : 42713719; + 058 : 4273FCE1; + 059 : 4276C2A9; + 05A : 42798872; + 05B : 427C4E3A; + 05C : 427F1402; + 05D : 4280ECE5; + 05E : 42824FCA; + 05F : 4283B2AE; + 060 : 42851592; + 061 : 42867876; + 062 : 4287DB5A; + 063 : 42893E3F; + 064 : 428AA123; + 065 : 428C0407; + 066 : 428D66EB; + 067 : 428EC9CF; + 068 : 42902CB3; + 069 : 42918F98; + 06A : 4292F27C; + 06B : 42945560; + 06C : 4295B844; + 06D : 42971B28; + 06E : 42987E0D; + 06F : 4299E0F1; + 070 : 429B43D5; + 071 : 429CA6B9; + 072 : 429E099D; + 073 : 429F6C82; + 074 : 42A0CF66; + 075 : 42A2324A; + 076 : 42A3952E; + 077 : 42A4F812; + 078 : 42A65AF6; + 079 : 42A7BDDB; + 07A : 42A920BF; + 07B : 42AA83A3; + 07C : 42ABE687; + 07D : 42AD496B; + 07E : 42AEAC50; + 07F : 42B00F34; + 080 : C2B17218; + 081 : C2B00F34; + 082 : C2AEAC50; + 083 : C2AD496B; + 084 : C2ABE687; + 085 : C2AA83A3; + 086 : C2A920BF; + 087 : C2A7BDDB; + 088 : C2A65AF6; + 089 : C2A4F812; + 08A : C2A3952E; + 08B : C2A2324A; + 08C : C2A0CF66; + 08D : C29F6C82; + 08E : C29E099D; + 08F : C29CA6B9; + 090 : C29B43D5; + 091 : C299E0F1; + 092 : C2987E0D; + 093 : C2971B28; + 094 : C295B844; + 095 : C2945560; + 096 : C292F27C; + 097 : C2918F98; + 098 : C2902CB3; + 099 : C28EC9CF; + 09A : C28D66EB; + 09B : C28C0407; + 09C : C28AA123; + 09D : C2893E3F; + 09E : C287DB5A; + 09F : C2867876; + 0A0 : C2851592; + 0A1 : C283B2AE; + 0A2 : C2824FCA; + 0A3 : C280ECE5; + 0A4 : C27F1402; + 0A5 : C27C4E3A; + 0A6 : C2798872; + 0A7 : C276C2A9; + 0A8 : C273FCE1; + 0A9 : C2713719; + 0AA : C26E7150; + 0AB : C26BAB88; + 0AC : C268E5BF; + 0AD : C2661FF7; + 0AE : C2635A2F; + 0AF : C2609466; + 0B0 : C25DCE9E; + 0B1 : C25B08D6; + 0B2 : C258430D; + 0B3 : C2557D45; + 0B4 : C252B77C; + 0B5 : C24FF1B4; + 0B6 : C24D2BEC; + 0B7 : C24A6623; + 0B8 : C247A05B; + 0B9 : C244DA93; + 0BA : C24214CA; + 0BB : C23F4F02; + 0BC : C23C8939; + 0BD : C239C371; + 0BE : C236FDA9; + 0BF : C23437E0; + 0C0 : C2317218; + 0C1 : C22EAC50; + 0C2 : C22BE687; + 0C3 : C22920BF; + 0C4 : C2265AF6; + 0C5 : C223952E; + 0C6 : C220CF66; + 0C7 : C21E099D; + 0C8 : C21B43D5; + 0C9 : C2187E0D; + 0CA : C215B844; + 0CB : C212F27C; + 0CC : C2102CB3; + 0CD : C20D66EB; + 0CE : C20AA123; + 0CF : C207DB5A; + 0D0 : C2051592; + 0D1 : C2024FCA; + 0D2 : C1FF1402; + 0D3 : C1F98872; + 0D4 : C1F3FCE1; + 0D5 : C1EE7150; + 0D6 : C1E8E5BF; + 0D7 : C1E35A2F; + 0D8 : C1DDCE9E; + 0D9 : C1D8430D; + 0DA : C1D2B77C; + 0DB : C1CD2BEC; + 0DC : C1C7A05B; + 0DD : C1C214CA; + 0DE : C1BC8939; + 0DF : C1B6FDA9; + 0E0 : C1B17218; + 0E1 : C1ABE687; + 0E2 : C1A65AF6; + 0E3 : C1A0CF66; + 0E4 : C19B43D5; + 0E5 : C195B844; + 0E6 : C1902CB3; + 0E7 : C18AA123; + 0E8 : C1851592; + 0E9 : C17F1402; + 0EA : C173FCE1; + 0EB : C168E5BF; + 0EC : C15DCE9E; + 0ED : C152B77C; + 0EE : C147A05B; + 0EF : C13C8939; + 0F0 : C1317218; + 0F1 : C1265AF6; + 0F2 : C11B43D5; + 0F3 : C1102CB3; + 0F4 : C1051592; + 0F5 : C0F3FCE1; + 0F6 : C0DDCE9E; + 0F7 : C0C7A05B; + 0F8 : C0B17218; + 0F9 : C09B43D5; + 0FA : C0851592; + 0FB : C05DCE9E; + 0FC : C0317218; + 0FD : C0051592; + 0FE : BFB17218; + 0FF : BF317218; +END; diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/my_exponent_flt_i_sfc_logic_s_c1_in_wt_e0001ock_rsrvd_fix_lutmem.mif b/python/openvino/demo/ip/intel_ai_ip/verilog/my_exponent_flt_i_sfc_logic_s_c1_in_wt_e0001ock_rsrvd_fix_lutmem.mif new file mode 100644 index 0000000..5d30198 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/my_exponent_flt_i_sfc_logic_s_c1_in_wt_e0001ock_rsrvd_fix_lutmem.mif @@ -0,0 +1,281 @@ +-- Copyright (C) 2019 Intel Corporation. All rights reserved. +-- Your use of Intel Corporation's design tools, logic functions +-- and other software and tools, and any partner logic +-- functions, and any output files from any of the foregoing +-- (including device programming or simulation files), and any +-- associated documentation or information are expressly subject +-- to the terms and conditions of the Intel Program License +-- Subscription Agreement, the Intel Quartus Prime License Agreement, +-- the Intel FPGA IP License Agreement, or other applicable license +-- agreement, including, without limitation, that your use is for +-- the sole purpose of programming logic devices manufactured by +-- Intel and sold by Intel or its authorized distributors. Please +-- refer to the applicable agreement for further details, at +-- https://fpgasoftware.intel.com/eula. + +-- Quartus Prime generated Memory Initialization File (.mif) + +WIDTH=32; +DEPTH=256; + +ADDRESS_RADIX=HEX; +DATA_RADIX=HEX; + +CONTENT BEGIN + 000 : 00000000; + 001 : B102E308; + 002 : B182E308; + 003 : B1C4548D; + 004 : B202E308; + 005 : B2239BCA; + 006 : B244548D; + 007 : B2650D4F; + 008 : B282E308; + 009 : B2933F69; + 00A : B2A39BCA; + 00B : B2B3F82C; + 00C : B2C4548D; + 00D : 34F2B4F1; + 00E : B2E50D4F; + 00F : 34F0A965; + 010 : B302E308; + 011 : 34EE9DD9; + 012 : B3133F69; + 013 : 34EC924D; + 014 : B3239BCA; + 015 : 34EA86C1; + 016 : B333F82C; + 017 : 34E87B34; + 018 : B344548D; + 019 : B50CC82C; + 01A : 3572B4F1; + 01B : 34E4641C; + 01C : B3650D4F; + 01D : B50ED3B8; + 01E : 3570A965; + 01F : 34E04D04; + 020 : B382E308; + 021 : B510DF44; + 022 : 356E9DD9; + 023 : 34DC35EC; + 024 : B3933F69; + 025 : B512EAD0; + 026 : 356C924D; + 027 : 34D81ED3; + 028 : B3A39BCA; + 029 : B514F65C; + 02A : 356A86C1; + 02B : 34D407BB; + 02C : B3B3F82C; + 02D : B51701E8; + 02E : 35687B34; + 02F : B5CC03D7; + 030 : B3C4548D; + 031 : 35B37946; + 032 : B58CC82C; + 033 : 34CBD98B; + 034 : 35F2B4F1; + 035 : B51B1901; + 036 : 3564641C; + 037 : B5CE0F63; + 038 : B3E50D4F; + 039 : 35B16DBA; + 03A : B58ED3B8; + 03B : 34C3AB5A; + 03C : 35F0A965; + 03D : B51F3019; + 03E : 35604D04; + 03F : B5D01AF0; + 040 : B402E308; + 041 : 35AF622D; + 042 : B590DF44; + 043 : 34BB7D2A; + 044 : 35EE9DD9; + 045 : B5234731; + 046 : 355C35EC; + 047 : B5D2267C; + 048 : B4133F69; + 049 : 35AD56A1; + 04A : B592EAD0; + 04B : 34B34EF9; + 04C : 35EC924D; + 04D : B5275E4A; + 04E : 35581ED3; + 04F : B5D43208; + 050 : B4239BCA; + 051 : 35AB4B15; + 052 : B594F65C; + 053 : 34AB20C9; + 054 : 35EA86C1; + 055 : B52B7562; + 056 : 355407BB; + 057 : B5D63D94; + 058 : B433F82C; + 059 : 35A93F89; + 05A : B59701E8; + 05B : 34A2F298; + 05C : 35E87B34; + 05D : 36541CE1; + 05E : B64C03D7; + 05F : B5D84920; + 060 : B444548D; + 061 : 35A733FD; + 062 : 36337946; + 063 : B66CA773; + 064 : B60CC82C; + 065 : B533A392; + 066 : 354BD98B; + 067 : 3612D5AA; + 068 : 3672B4F1; + 069 : B62D6BC8; + 06A : B59B1901; + 06B : 34929637; + 06C : 35E4641C; + 06D : 36521155; + 06E : B64E0F63; + 06F : B5DC6038; + 070 : B4650D4F; + 071 : 35A31CE5; + 072 : 36316DBA; + 073 : B66EB2FF; + 074 : B60ED3B8; + 075 : B53BD1C3; + 076 : 3543AB5A; + 077 : 3610CA1E; + 078 : 3670A965; + 079 : B62F7754; + 07A : B59F3019; + 07B : 348239D6; + 07C : 35E04D04; + 07D : 365005C9; + 07E : B6501AF0; + 07F : B5E07751; + 080 : 3482E308; + 081 : 35E07751; + 082 : 36501AF0; + 083 : B65005C9; + 084 : B5E04D04; + 085 : B48239D6; + 086 : 359F3019; + 087 : 362F7754; + 088 : B670A965; + 089 : B610CA1E; + 08A : B543AB5A; + 08B : 353BD1C3; + 08C : 360ED3B8; + 08D : 366EB2FF; + 08E : B6316DBA; + 08F : B5A31CE5; + 090 : 34650D4F; + 091 : 35DC6038; + 092 : 364E0F63; + 093 : B6521155; + 094 : B5E4641C; + 095 : B4929637; + 096 : 359B1901; + 097 : 362D6BC8; + 098 : B672B4F1; + 099 : B612D5AA; + 09A : B54BD98B; + 09B : 3533A392; + 09C : 360CC82C; + 09D : 366CA773; + 09E : B6337946; + 09F : B5A733FD; + 0A0 : 3444548D; + 0A1 : 35D84920; + 0A2 : 364C03D7; + 0A3 : B6541CE1; + 0A4 : B5E87B34; + 0A5 : B4A2F298; + 0A6 : 359701E8; + 0A7 : B5A93F89; + 0A8 : 3433F82C; + 0A9 : 35D63D94; + 0AA : B55407BB; + 0AB : 352B7562; + 0AC : B5EA86C1; + 0AD : B4AB20C9; + 0AE : 3594F65C; + 0AF : B5AB4B15; + 0B0 : 34239BCA; + 0B1 : 35D43208; + 0B2 : B5581ED3; + 0B3 : 35275E4A; + 0B4 : B5EC924D; + 0B5 : B4B34EF9; + 0B6 : 3592EAD0; + 0B7 : B5AD56A1; + 0B8 : 34133F69; + 0B9 : 35D2267C; + 0BA : B55C35EC; + 0BB : 35234731; + 0BC : B5EE9DD9; + 0BD : B4BB7D2A; + 0BE : 3590DF44; + 0BF : B5AF622D; + 0C0 : 3402E308; + 0C1 : 35D01AF0; + 0C2 : B5604D04; + 0C3 : 351F3019; + 0C4 : B5F0A965; + 0C5 : B4C3AB5A; + 0C6 : 358ED3B8; + 0C7 : B5B16DBA; + 0C8 : 33E50D4F; + 0C9 : 35CE0F63; + 0CA : B564641C; + 0CB : 351B1901; + 0CC : B5F2B4F1; + 0CD : B4CBD98B; + 0CE : 358CC82C; + 0CF : B5B37946; + 0D0 : 33C4548D; + 0D1 : 35CC03D7; + 0D2 : B5687B34; + 0D3 : 351701E8; + 0D4 : 33B3F82C; + 0D5 : B4D407BB; + 0D6 : B56A86C1; + 0D7 : 3514F65C; + 0D8 : 33A39BCA; + 0D9 : B4D81ED3; + 0DA : B56C924D; + 0DB : 3512EAD0; + 0DC : 33933F69; + 0DD : B4DC35EC; + 0DE : B56E9DD9; + 0DF : 3510DF44; + 0E0 : 3382E308; + 0E1 : B4E04D04; + 0E2 : B570A965; + 0E3 : 350ED3B8; + 0E4 : 33650D4F; + 0E5 : B4E4641C; + 0E6 : B572B4F1; + 0E7 : 350CC82C; + 0E8 : 3344548D; + 0E9 : B4E87B34; + 0EA : 3333F82C; + 0EB : B4EA86C1; + 0EC : 33239BCA; + 0ED : B4EC924D; + 0EE : 33133F69; + 0EF : B4EE9DD9; + 0F0 : 3302E308; + 0F1 : B4F0A965; + 0F2 : 32E50D4F; + 0F3 : B4F2B4F1; + 0F4 : 32C4548D; + 0F5 : 32B3F82C; + 0F6 : 32A39BCA; + 0F7 : 32933F69; + 0F8 : 3282E308; + 0F9 : 32650D4F; + 0FA : 3244548D; + 0FB : 32239BCA; + 0FC : 3202E308; + 0FD : 31C4548D; + 0FE : 3182E308; + 0FF : 3102E308; +END; diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/my_exponent_flt_i_sfc_logic_s_c1_in_wt_e0002ock_rsrvd_fix_lutmem.mif b/python/openvino/demo/ip/intel_ai_ip/verilog/my_exponent_flt_i_sfc_logic_s_c1_in_wt_e0002ock_rsrvd_fix_lutmem.mif new file mode 100644 index 0000000..f7785b2 --- /dev/null +++ b/python/openvino/demo/ip/intel_ai_ip/verilog/my_exponent_flt_i_sfc_logic_s_c1_in_wt_e0002ock_rsrvd_fix_lutmem.mif @@ -0,0 +1,537 @@ +-- Copyright (C) 2019 Intel Corporation. All rights reserved. +-- Your use of Intel Corporation's design tools, logic functions +-- and other software and tools, and any partner logic +-- functions, and any output files from any of the foregoing +-- (including device programming or simulation files), and any +-- associated documentation or information are expressly subject +-- to the terms and conditions of the Intel Program License +-- Subscription Agreement, the Intel Quartus Prime License Agreement, +-- the Intel FPGA IP License Agreement, or other applicable license +-- agreement, including, without limitation, that your use is for +-- the sole purpose of programming logic devices manufactured by +-- Intel and sold by Intel or its authorized distributors. Please +-- refer to the applicable agreement for further details, at +-- https://fpgasoftware.intel.com/eula. + +-- Quartus Prime generated Memory Initialization File (.mif) + +WIDTH=32; +DEPTH=512; + +ADDRESS_RADIX=HEX; +DATA_RADIX=HEX; + +CONTENT BEGIN + 000 : 3F800000; + 001 : 3F808040; + 002 : 3F810101; + 003 : 3F818242; + 004 : 3F820405; + 005 : 3F82864A; + 006 : 3F830912; + 007 : 3F838C5D; + 008 : 3F84102B; + 009 : 3F84947D; + 00A : 3F851954; + 00B : 3F859EB0; + 00C : 3F862492; + 00D : 3F86AAF9; + 00E : 3F8731E8; + 00F : 3F87B95D; + 010 : 3F88415B; + 011 : 3F88C9E0; + 012 : 3F8952EF; + 013 : 3F89DC86; + 014 : 3F8A66A8; + 015 : 3F8AF154; + 016 : 3F8B7C8B; + 017 : 3F8C084D; + 018 : 3F8C949C; + 019 : 3F8D2177; + 01A : 3F8DAEDF; + 01B : 3F8E3CD4; + 01C : 3F8ECB58; + 01D : 3F8F5A6B; + 01E : 3F8FEA0D; + 01F : 3F907A40; + 020 : 3F910B02; + 021 : 3F919C56; + 022 : 3F922E3B; + 023 : 3F92C0B2; + 024 : 3F9353BD; + 025 : 3F93E75A; + 026 : 3F947B8C; + 027 : 3F951051; + 028 : 3F95A5AC; + 029 : 3F963B9D; + 02A : 3F96D224; + 02B : 3F976941; + 02C : 3F9800F6; + 02D : 3F989944; + 02E : 3F993229; + 02F : 3F99CBA8; + 030 : 3F9A65C1; + 031 : 3F9B0074; + 032 : 3F9B9BC2; + 033 : 3F9C37AB; + 034 : 3F9CD431; + 035 : 3F9D7154; + 036 : 3F9E0F14; + 037 : 3F9EAD72; + 038 : 3F9F4C6F; + 039 : 3F9FEC0C; + 03A : 3FA08C48; + 03B : 3FA12D24; + 03C : 3FA1CEA2; + 03D : 3FA270C2; + 03E : 3FA31384; + 03F : 3FA3B6E9; + 040 : 3FA45AF2; + 041 : 3FA4FF9F; + 042 : 3FA5A4F1; + 043 : 3FA64AE9; + 044 : 3FA6F187; + 045 : 3FA798CC; + 046 : 3FA840B9; + 047 : 3FA8E94E; + 048 : 3FA9928C; + 049 : 3FAA3C73; + 04A : 3FAAE705; + 04B : 3FAB9242; + 04C : 3FAC3E2A; + 04D : 3FACEABE; + 04E : 3FAD9800; + 04F : 3FAE45EF; + 050 : 3FAEF48C; + 051 : 3FAFA3D8; + 052 : 3FB053D4; + 053 : 3FB10480; + 054 : 3FB1B5DD; + 055 : 3FB267EC; + 056 : 3FB31AAD; + 057 : 3FB3CE21; + 058 : 3FB48249; + 059 : 3FB53726; + 05A : 3FB5ECB8; + 05B : 3FB6A300; + 05C : 3FB759FE; + 05D : 3FB811B4; + 05E : 3FB8CA22; + 05F : 3FB98348; + 060 : 3FBA3D29; + 061 : 3FBAF7C3; + 062 : 3FBBB318; + 063 : 3FBC6F29; + 064 : 3FBD2BF7; + 065 : 3FBDE982; + 066 : 3FBEA7CA; + 067 : 3FBF66D1; + 068 : 3FC02698; + 069 : 3FC0E71F; + 06A : 3FC1A867; + 06B : 3FC26A70; + 06C : 3FC32D3C; + 06D : 3FC3F0CB; + 06E : 3FC4B51E; + 06F : 3FC57A35; + 070 : 3FC64012; + 071 : 3FC706B6; + 072 : 3FC7CE20; + 073 : 3FC89652; + 074 : 3FC95F4D; + 075 : 3FCA2911; + 076 : 3FCAF39F; + 077 : 3FCBBEF8; + 078 : 3FCC8B1D; + 079 : 3FCD580F; + 07A : 3FCE25CE; + 07B : 3FCEF45B; + 07C : 3FCFC3B7; + 07D : 3FD093E3; + 07E : 3FD164DF; + 07F : 3FD236AD; + 080 : 3FD3094C; + 081 : 3FD3DCBF; + 082 : 3FD4B106; + 083 : 3FD58622; + 084 : 3FD65C13; + 085 : 3FD732DA; + 086 : 3FD80A79; + 087 : 3FD8E2EF; + 088 : 3FD9BC3F; + 089 : 3FDA9668; + 08A : 3FDB716C; + 08B : 3FDC4D4B; + 08C : 3FDD2A07; + 08D : 3FDE07A0; + 08E : 3FDEE616; + 08F : 3FDFC56C; + 090 : 3FE0A5A2; + 091 : 3FE186B8; + 092 : 3FE268AF; + 093 : 3FE34B89; + 094 : 3FE42F47; + 095 : 3FE513E8; + 096 : 3FE5F96F; + 097 : 3FE6DFDB; + 098 : 3FE7C72F; + 099 : 3FE8AF6A; + 09A : 3FE9988E; + 09B : 3FEA829B; + 09C : 3FEB6D93; + 09D : 3FEC5977; + 09E : 3FED4647; + 09F : 3FEE3404; + 0A0 : 3FEF22AF; + 0A1 : 3FF01249; + 0A2 : 3FF102D4; + 0A3 : 3FF1F44F; + 0A4 : 3FF2E6BD; + 0A5 : 3FF3DA1D; + 0A6 : 3FF4CE71; + 0A7 : 3FF5C3BA; + 0A8 : 3FF6B9F9; + 0A9 : 3FF7B12F; + 0AA : 3FF8A95C; + 0AB : 3FF9A282; + 0AC : 3FFA9CA1; + 0AD : 3FFB97BB; + 0AE : 3FFC93D1; + 0AF : 3FFD90E3; + 0B0 : 3FFE8EF3; + 0B1 : 3FFF8E01; + 0B2 : 40004708; + 0B3 : 4000C78F; + 0B4 : 40014897; + 0B5 : 4001CA20; + 0B6 : 40024C2B; + 0B7 : 4002CEB9; + 0B8 : 400351C9; + 0B9 : 4003D55D; + 0BA : 40045974; + 0BB : 4004DE10; + 0BC : 40056330; + 0BD : 4005E8D6; + 0BE : 40066F02; + 0BF : 4006F5B4; + 0C0 : 40077CEE; + 0C1 : 400804AE; + 0C2 : 40088CF7; + 0C3 : 400915C9; + 0C4 : 40099F23; + 0C5 : 400A2907; + 0C6 : 400AB375; + 0C7 : 400B3E6E; + 0C8 : 400BC9F2; + 0C9 : 400C5602; + 0CA : 400CE29E; + 0CB : 400D6FC8; + 0CC : 400DFD7E; + 0CD : 400E8BC3; + 0CE : 400F1A96; + 0CF : 400FA9F8; + 0D0 : 401039EA; + 0D1 : 4010CA6C; + 0D2 : 40115B7F; + 0D3 : 4011ED23; + 0D4 : 40127F59; + 0D5 : 40131222; + 0D6 : 4013A57E; + 0D7 : 4014396D; + 0D8 : 4014CDF1; + 0D9 : 40156309; + 0DA : 4015F8B7; + 0DB : 40168EFB; + 0DC : 401725D5; + 0DD : 4017BD47; + 0DE : 40185550; + 0DF : 4018EDF2; + 0E0 : 4019872C; + 0E1 : 401A2100; + 0E2 : 401ABB6E; + 0E3 : 401B5677; + 0E4 : 401BF21C; + 0E5 : 401C8E5C; + 0E6 : 401D2B38; + 0E7 : 401DC8B2; + 0E8 : 401E66CA; + 0E9 : 401F0580; + 0EA : 401FA4D5; + 0EB : 402044CA; + 0EC : 4020E55F; + 0ED : 40218695; + 0EE : 4022286C; + 0EF : 4022CAE6; + 0F0 : 40236E02; + 0F1 : 402411C2; + 0F2 : 4024B626; + 0F3 : 40255B2F; + 0F4 : 402600DD; + 0F5 : 4026A731; + 0F6 : 40274E2B; + 0F7 : 4027F5CD; + 0F8 : 40289E17; + 0F9 : 4029470A; + 0FA : 4029F0A6; + 0FB : 402A9AEB; + 0FC : 402B45DC; + 0FD : 402BF177; + 0FE : 402C9DBF; + 0FF : 402D4AB3; + 100 : 3F800000; + 101 : 3F7F0080; + 102 : 3F7E01FF; + 103 : 3F7D047C; + 104 : 3F7C07F5; + 105 : 3F7B0C6B; + 106 : 3F7A11DC; + 107 : 3F791847; + 108 : 3F781FAB; + 109 : 3F772808; + 10A : 3F76315B; + 10B : 3F753BA5; + 10C : 3F7446E3; + 10D : 3F735316; + 10E : 3F72603D; + 10F : 3F716E56; + 110 : 3F707D60; + 111 : 3F6F8D5B; + 112 : 3F6E9E45; + 113 : 3F6DB01E; + 114 : 3F6CC2E4; + 115 : 3F6BD698; + 116 : 3F6AEB37; + 117 : 3F6A00C1; + 118 : 3F691735; + 119 : 3F682E92; + 11A : 3F6746D8; + 11B : 3F666004; + 11C : 3F657A17; + 11D : 3F649510; + 11E : 3F63B0ED; + 11F : 3F62CDAE; + 120 : 3F61EB51; + 121 : 3F6109D7; + 122 : 3F60293D; + 123 : 3F5F4984; + 124 : 3F5E6AAA; + 125 : 3F5D8CAE; + 126 : 3F5CAF90; + 127 : 3F5BD34F; + 128 : 3F5AF7E9; + 129 : 3F5A1D5F; + 12A : 3F5943AE; + 12B : 3F586AD7; + 12C : 3F5792D8; + 12D : 3F56BBB1; + 12E : 3F55E561; + 12F : 3F550FE6; + 130 : 3F543B41; + 131 : 3F53676F; + 132 : 3F529471; + 133 : 3F51C246; + 134 : 3F50F0ED; + 135 : 3F502064; + 136 : 3F4F50AC; + 137 : 3F4E81C2; + 138 : 3F4DB3A8; + 139 : 3F4CE65B; + 13A : 3F4C19DB; + 13B : 3F4B4E27; + 13C : 3F4A833E; + 13D : 3F49B920; + 13E : 3F48EFCC; + 13F : 3F482740; + 140 : 3F475F7D; + 141 : 3F469881; + 142 : 3F45D24C; + 143 : 3F450CDC; + 144 : 3F444832; + 145 : 3F43844C; + 146 : 3F42C129; + 147 : 3F41FEC9; + 148 : 3F413D2B; + 149 : 3F407C4E; + 14A : 3F3FBC32; + 14B : 3F3EFCD6; + 14C : 3F3E3E38; + 14D : 3F3D8059; + 14E : 3F3CC337; + 14F : 3F3C06D2; + 150 : 3F3B4B29; + 151 : 3F3A903C; + 152 : 3F39D609; + 153 : 3F391C8F; + 154 : 3F3863CF; + 155 : 3F37ABC8; + 156 : 3F36F478; + 157 : 3F363DDE; + 158 : 3F3587FC; + 159 : 3F34D2CE; + 15A : 3F341E56; + 15B : 3F336A91; + 15C : 3F32B780; + 15D : 3F320522; + 15E : 3F315376; + 15F : 3F30A27B; + 160 : 3F2FF231; + 161 : 3F2F4296; + 162 : 3F2E93AB; + 163 : 3F2DE56F; + 164 : 3F2D37E0; + 165 : 3F2C8AFF; + 166 : 3F2BDECA; + 167 : 3F2B3341; + 168 : 3F2A8863; + 169 : 3F29DE30; + 16A : 3F2934A7; + 16B : 3F288BC6; + 16C : 3F27E38F; + 16D : 3F273BFF; + 16E : 3F269517; + 16F : 3F25EED5; + 170 : 3F254939; + 171 : 3F24A442; + 172 : 3F23FFF0; + 173 : 3F235C42; + 174 : 3F22B937; + 175 : 3F2216CF; + 176 : 3F217509; + 177 : 3F20D3E5; + 178 : 3F203361; + 179 : 3F1F937E; + 17A : 3F1EF43A; + 17B : 3F1E5595; + 17C : 3F1DB78F; + 17D : 3F1D1A26; + 17E : 3F1C7D5A; + 17F : 3F1BE12B; + 180 : 3F1B4598; + 181 : 3F1AAAA0; + 182 : 3F1A1042; + 183 : 3F19767F; + 184 : 3F18DD55; + 185 : 3F1844C4; + 186 : 3F17ACCC; + 187 : 3F17156A; + 188 : 3F167EA0; + 189 : 3F15E86D; + 18A : 3F1552CF; + 18B : 3F14BDC7; + 18C : 3F142954; + 18D : 3F139574; + 18E : 3F130229; + 18F : 3F126F70; + 190 : 3F11DD4A; + 191 : 3F114BB5; + 192 : 3F10BAB2; + 193 : 3F102A3F; + 194 : 3F0F9A5D; + 195 : 3F0F0B0B; + 196 : 3F0E7C47; + 197 : 3F0DEE12; + 198 : 3F0D606B; + 199 : 3F0CD351; + 19A : 3F0C46C4; + 19B : 3F0BBAC3; + 19C : 3F0B2F4E; + 19D : 3F0AA464; + 19E : 3F0A1A05; + 19F : 3F099030; + 1A0 : 3F0906E5; + 1A1 : 3F087E22; + 1A2 : 3F07F5E8; + 1A3 : 3F076E36; + 1A4 : 3F06E70C; + 1A5 : 3F066068; + 1A6 : 3F05DA4B; + 1A7 : 3F0554B3; + 1A8 : 3F04CFA1; + 1A9 : 3F044B14; + 1AA : 3F03C70B; + 1AB : 3F034385; + 1AC : 3F02C083; + 1AD : 3F023E04; + 1AE : 3F01BC07; + 1AF : 3F013A8C; + 1B0 : 3F00B992; + 1B1 : 3F003919; + 1B2 : 3EFF723F; + 1B3 : 3EFE734D; + 1B4 : 3EFD7558; + 1B5 : 3EFC7862; + 1B6 : 3EFB7C67; + 1B7 : 3EFA8168; + 1B8 : 3EF98764; + 1B9 : 3EF88E59; + 1BA : 3EF79647; + 1BB : 3EF69F2C; + 1BC : 3EF5A908; + 1BD : 3EF4B3DA; + 1BE : 3EF3BFA0; + 1BF : 3EF2CC5A; + 1C0 : 3EF1DA07; + 1C1 : 3EF0E8A6; + 1C2 : 3EEFF836; + 1C3 : 3EEF08B5; + 1C4 : 3EEE1A24; + 1C5 : 3EED2C81; + 1C6 : 3EEC3FCB; + 1C7 : 3EEB5401; + 1C8 : 3EEA6922; + 1C9 : 3EE97F2E; + 1CA : 3EE89624; + 1CB : 3EE7AE02; + 1CC : 3EE6C6C7; + 1CD : 3EE5E074; + 1CE : 3EE4FB06; + 1CF : 3EE4167E; + 1D0 : 3EE332D9; + 1D1 : 3EE25018; + 1D2 : 3EE16E38; + 1D3 : 3EE08D3B; + 1D4 : 3EDFAD1E; + 1D5 : 3EDECDE0; + 1D6 : 3EDDEF82; + 1D7 : 3EDD1201; + 1D8 : 3EDC355D; + 1D9 : 3EDB5996; + 1DA : 3EDA7EAA; + 1DB : 3ED9A498; + 1DC : 3ED8CB60; + 1DD : 3ED7F301; + 1DE : 3ED71B7A; + 1DF : 3ED644CA; + 1E0 : 3ED56EF0; + 1E1 : 3ED499EC; + 1E2 : 3ED3C5BC; + 1E3 : 3ED2F260; + 1E4 : 3ED21FD7; + 1E5 : 3ED14E20; + 1E6 : 3ED07D3B; + 1E7 : 3ECFAD26; + 1E8 : 3ECEDDE0; + 1E9 : 3ECE0F69; + 1EA : 3ECD41C1; + 1EB : 3ECC74E6; + 1EC : 3ECBA8D7; + 1ED : 3ECADD94; + 1EE : 3ECA131B; + 1EF : 3EC9496D; + 1F0 : 3EC88088; + 1F1 : 3EC7B86C; + 1F2 : 3EC6F117; + 1F3 : 3EC62A8A; + 1F4 : 3EC564C2; + 1F5 : 3EC49FC0; + 1F6 : 3EC3DB82; + 1F7 : 3EC31808; + 1F8 : 3EC25552; + 1F9 : 3EC1935E; + 1FA : 3EC0D22B; + 1FB : 3EC011B9; + 1FC : 3EBF5207; + 1FD : 3EBE9315; + 1FE : 3EBDD4E1; + 1FF : 3EBD176B; +END; |
