diff options
Diffstat (limited to 'python/openvino/demo/ip/intel_ai_ip/verilog/dla_xbar_if.sv')
| -rw-r--r-- | python/openvino/demo/ip/intel_ai_ip/verilog/dla_xbar_if.sv | 169 |
1 files changed, 169 insertions, 0 deletions
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 |
