<?xml version="1.0"?>
<lsccip:ip version="1.0"
    xmlns:lsccip="http://www.latticesemi.com/XMLSchema/Radiant/ip"
    xmlns:xi="http://www.w3.org/2001/XInclude">

  <lsccip:general>
    <lsccip:vendor>latticesemi.com</lsccip:vendor>
    <lsccip:library>ip</lsccip:library>
    <lsccip:name>i3c_target</lsccip:name>
    <lsccip:display_name>I3C Target</lsccip:display_name>
    <lsccip:version>3.8.0</lsccip:version>
    <lsccip:category>Processors_Controllers_and_Peripherals</lsccip:category>
    <lsccip:keywords>BusType_AHB-Lite,BusType_APB</lsccip:keywords>
    <lsccip:min_radiant_version>2023.2</lsccip:min_radiant_version>
    <lsccip:min_esi_version>2.2</lsccip:min_esi_version>
    <lsccip:supported_products>
      <lsccip:supported_family name="LIFCL"/>
      <lsccip:supported_family name="LFD2NX"/>
      <lsccip:supported_family name="iCE40UP"/>
      <lsccip:supported_family name="LFCPNX"/>
      <lsccip:supported_family name="LFMXO5"/>
      <lsccip:supported_family name="UT24C"/>
      <lsccip:supported_family name="UT24CP"/>
      <lsccip:supported_family name="LAV-AT"/>
      <lsccip:supported_family name="ap6a00"/>
      <lsccip:supported_family name="LFMNX"/>
      <lsccip:supported_family name="LCMXO3D"/>
      <lsccip:supported_family name="MachXO3D"/>
      <lsccip:supported_family name="LKH-CT"/>
      <lsccip:supported_family name="LKH-MH"/>
      <lsccip:supported_family name="LN2-CT"/>
      <lsccip:supported_family name="LN2-MH"/>
	  </lsccip:supported_products>
    <lsccip:supported_platforms>
      <lsccip:supported_platform name="radiant"/>
      <lsccip:supported_platform name="esi"/>
    </lsccip:supported_platforms>
  </lsccip:general>

  <lsccip:settings>

    <lsccip:setting id               = "FAMILY"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "string"
                    type             = "param"
                    title            = "Device Architecture"
                    value_expr       = "runtime_info.device_info.architecture(1)"
                    editable         = "False"
                    hidden           = "True"
                    group1           = "Initialization"
    />

    <lsccip:setting id               = "INTERFACE"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "string"
                    title            = "User Interface"
                    options          = "['LMMI', 'APB', 'AHBL']"
                    default          = "APB"
                    group1           = "CPU Interface"
    />

    <lsccip:setting id               = "REG_MAPPING"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "int"
                    options          = "[('Address offset in Bytes',0), ('Address offset in DWORD',1)]"
                    title            = "Address Offset"
                    value_expr       = "1 if (INTERFACE != 'LMMI') else 0"
                    editable         = "(INTERFACE != 'LMMI')"
                    group1           = "CPU Interface"
    />

    <lsccip:setting id               = "TARGET_NUM"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "int"
                    options          = "[1,2,3,4]"
                    title            = "Number of Target Devices"
                    default          = "1"
                    group1           = "CPU Interface"
    />

    <lsccip:setting id               = "MEM_IMPL"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "string"
                    options          = "['EBR', 'LUT', 'HARD_IP']"
                    default          = "EBR"
                    title            = "FIFO Implementation"
                    editable         = "True"
                    hidden           = "False"
                    group1           = "FIFO"
    />

    <lsccip:setting id               = "FIFO_SIZE"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "int"
                    options          = "[64, 128, 256, 512, 1024]"
                    default          = "512"
                    title            = "FIFO Depth"
                    editable         = "True"
                    hidden           = "False"
                    group1           = "FIFO"
    />

    <lsccip:setting id               = "EN_FIFOINTF"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "bool"
                    editable         = "1"
                    title            = "Enable Direct FIFO Interface"
                    default          = "False"
                    group1           = "Optional Interface"
                    />

    <lsccip:setting id               = "EN_FIFOINTF_M"
                    type             = "verilog_macro"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "int"
                    value_expr       = "EN_FIFOINTF"
                    editable         = "0"
                    hidden           = "bool(1)"
                    group1           = "Optional Interface"
                    />

    <lsccip:setting id               = "TXDWID"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "int"
                    options          = "[8,16,32]"
                    title            = "Tx Data Width"
                    default          = "8"
                    editable         = "False"
                    hidden           = "not EN_FIFOINTF"
                    group1           = "Optional Interface"
                    />

    <lsccip:setting id               = "RXDWID"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "int"
                    options          = "[8,16,32]"
                    title            = "Rx Data Width"
                    default          = "8"
                    editable         = "False"
                    hidden           = "not EN_FIFOINTF"
                    group1           = "Optional Interface"
                    />

    <lsccip:setting id               = "EN_IO_PRIM"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "bool"
                    title            = "Enable Internal IO Primitive"
                    default          = "True"
                    editable         = "True"
                    group1           = "IO Primitive Enable"
                    />

    <!-- Bus Characteristics -->
    <lsccip:setting id               = "HDR_CAPABLE"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "int"
                    title            = "Bus Type"
                    options          = "[('SDR-only', 0), ('HDR-capable', 1)]"
                    default          = "0"
                    editable         = "True"
                    group1           = "Bus Characteristics"
    />

    <lsccip:setting id               = "HDR_MODE"
                    type             = "input"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "int"
                    title            = "HDR Mode"
                    options          = "[('HDR-DDR', 0)]"
                    default          = "0"
                    editable         = "False"
                    hidden           = "not HDR_CAPABLE"
                    group1           = "Bus Characteristics"
                    />

    <lsccip:setting id               = "IBI_CAPABLE"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "bool"
                    title            = "IBI Capable"
                    default          = "True"
                    group1           = "Bus Characteristics"
    />

    <lsccip:setting id               = "IBI_DATA_PAY"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "int"
                    title            = "IBI Payload Size (including MDB)"
                    value_range      = "(0, 255) if (FIFO_SIZE &gt;= 256) else (0, FIFO_SIZE)"
                    drc              = "ext_check_ibi_payload(FIFO_SIZE)"
                    default          = "1"
                    editable         = "IBI_CAPABLE != False"
                    group1           = "Bus Characteristics"
    />

    <lsccip:setting id               = "HOTJOIN_CAPABLE"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "bool"
                    title            = "Hot-Join Capable"
                    default          = "True"
                    group1           = "Bus Characteristics"
    />

    <lsccip:setting id               = "MAX_D_SPEED_LIMIT"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "bool"
                    title            = "Maximum Data Speed Limitation"
                    default          = "True"
                    editable         = "True"
                    group1           = "Bus Characteristics"
    />

    <lsccip:setting id               = "FIFO_STAT_AUTO_CLR"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "bool"
                    title            = "FIFO status auto clear"
                    default          = "False"
                    editable         = "True"
                    group1           = "Interrupt Signal Characteristics"
    />

    <lsccip:setting id               = "DUT_INST_NAME"
                    type             = "verilog_macro"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "path"
                    value_expr       = "runtime_info.ip_inst_name"
                    editable         = "0"
                    hidden           = "bool(1)"
                    group1           = "Bus Characteristics"
    />

    <lsccip:setting id               = "TGT_BFM_PATH"
                    type             = "verilog_macro"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "path"
                    value_expr       = "get_bfm_path(INTERFACE)"
                    editable         = "0"
                    hidden           = "bool(1)"
                    group1           = "Bus Characteristics"
    />

    <!-- Device Characteristics -->
    <lsccip:setting id               = "DCR_tmp"
                    type             = "input"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "string"
                    title            = "DCR (HEX) [00 - FF]"
                    drc              = "ext_check_hex_value(DCR_tmp, 'FF', 'DCR Value')"
                    default          = "00"
                    group1           = "Device Characteristics"
    />

    <lsccip:setting id               = "DCR"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "int"
                    title            = "DCR (HEX) [00 - FF] (param)"
                    value_expr       = "int(DCR_tmp, 16)"
                    editable         = "False"
                    hidden           = "True"
                    group1           = "Device Characteristics"
    />

    <lsccip:setting id               = "PID_MANUF"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "int"
                    title            = "Manufacturer ID"
                    value_range      = "(0, 32767)"
                    default          = "414"
                    group1           = "Device Characteristics"
    />

    <lsccip:setting id               = "PID_PART"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "int"
                    title            = "Part ID"
                    value_range      = "(0, 65535)"
                    default          = "1"
                    group1           = "Device Characteristics"
    />

    <lsccip:setting id               = "PID_INST"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "int"
                    title            = "Instance ID"
                    value_range      = "(0, 15)"
                    default          = "1"
                    group1           = "Device Characteristics"
    />

    <lsccip:setting id               = "PID_ADD"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "int"
                    title            = "Additional ID"
                    value_range      = "(0, 4095)"
                    default          = "0"
                    group1           = "Device Characteristics"
    />

    <lsccip:setting id               = "STATIC_ADDR_EN"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "bool"
                    title            = "Static Address Enable"
                    default          = "True"
                    group1           = "Device Characteristics"
    />

    <lsccip:setting id               = "STAT_ADDR_tmp"
                    type             = "input"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "string"
                    title            = "Static Address (HEX) [00-7F]"
                    drc              = "ext_check_hex_and_valid(STATIC_ADDR_EN,STAT_ADDR_tmp, '7D', 'Static Address','','','',0,0,0,0)"
                    default          = "08"
                    editable         = "STATIC_ADDR_EN"
                    hidden           = "not(STATIC_ADDR_EN)"
                    group1           = "Device Characteristics"
    />

    <lsccip:setting id               = "STATIC_ADDR"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "int"
                    title            = "Static Address (HEX) [00-7F] (param)"
                    value_expr       = "int(STAT_ADDR_tmp, 16)"
                    editable         = "False"
                    hidden           = "True"
                    group1           = "Device Characteristics"
    />

    <!-- Device Characteristics 1-->
    <lsccip:setting id               = "DCR_tmp_1"
                    type             = "input"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "string"
                    title            = "DCR (HEX) [00 - FF]"
                    drc              = "ext_check_hex_value(DCR_tmp_1, 'FF', 'DCR Value')"
                    default          = "00"
                    hidden           = "(TARGET_NUM &lt; 2)"
                    group1           = "Device Characteristics 1"
    />

    <lsccip:setting id               = "DCR_T1"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "int"
                    title            = "DCR (HEX) [00 - FF] (param)"
                    value_expr       = "int(DCR_tmp_1, 16)"
                    editable         = "False"
                    hidden           = "True"
                    group1           = "Device Characteristics 1"
    />

    <lsccip:setting id               = "PID_MANUF_T1"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "int"
                    title            = "Manufacturer ID"
                    value_range      = "(0, 32767)"
                    default          = "415"
                    hidden           = "(TARGET_NUM &lt; 2)"
                    group1           = "Device Characteristics 1"
    />

    <lsccip:setting id               = "PID_PART_T1"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "int"
                    title            = "Part ID"
                    value_range      = "(0, 65535)"
                    default          = "1"
                    hidden           = "(TARGET_NUM &lt; 2)"
                    group1           = "Device Characteristics 1"
    />

    <lsccip:setting id               = "PID_INST_T1"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "int"
                    title            = "Instance ID"
                    value_range      = "(0, 15)"
                    default          = "1"
                    hidden           = "(TARGET_NUM &lt; 2)"
                    group1           = "Device Characteristics 1"
    />

    <lsccip:setting id               = "PID_ADD_T1"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "int"
                    title            = "Additional ID"
                    drc              = "pid_check(check_if_enabled(TARGET_NUM,1),PID_MANUF,PID_PART,PID_INST,PID_ADD,DCR,PID_MANUF_T1,PID_PART_T1,PID_INST_T1,PID_ADD_T1,DCR_T1,'Target 0','Target 1')"
                    value_range      = "(0, 4095)"
                    default          = "0"
                    hidden           = "(TARGET_NUM &lt; 2)"
                    group1           = "Device Characteristics 1"
    />

    <lsccip:setting id               = "STATIC_ADDR_EN1"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "bool"
                    title            = "Static Address Enable"
                    default          = "False"
                    hidden           = "(TARGET_NUM &lt; 2)"
                    group1           = "Device Characteristics 1"
    />

    <lsccip:setting id               = "STAT_ADDR_tmp1"
                    type             = "input"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "string"
                    title            = "Static Address 1 (HEX) [00-7F]"
                    drc              = "ext_check_hex_and_valid(STATIC_ADDR_EN1,STAT_ADDR_tmp1, '7D', 'Static Address',STAT_ADDR_tmp,'','',1,STATIC_ADDR_EN,0,0)"
                    default          = "09"
                    editable         = "STATIC_ADDR_EN1"
                    hidden           = "not(STATIC_ADDR_EN1) or (TARGET_NUM &lt; 2)"
                    group1           = "Device Characteristics 1"
    />

    <lsccip:setting id               = "STATIC_ADDR1"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "int"
                    title            = "Static Address (HEX) [00-7F] (param)"
                    value_expr       = "int(STAT_ADDR_tmp1, 16)"
                    editable         = "False"
                    hidden           = "True"
                    group1           = "Device Characteristics 1"
    />

    <!-- Device Characteristics 2-->
    <lsccip:setting id               = "DCR_tmp_2"
                    type             = "input"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "string"
                    title            = "DCR (HEX) [00 - FF]"
                    drc              = "ext_check_hex_value(DCR_tmp_2, 'FF', 'DCR Value')"
                    default          = "00"
                    hidden           = "(TARGET_NUM &lt; 3)"
                    group1           = "Device Characteristics 2"
    />

    <lsccip:setting id               = "DCR_T2"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "int"
                    title            = "DCR (HEX) [00 - FF] (param)"
                    value_expr       = "int(DCR_tmp_2, 16)"
                    editable         = "False"
                    hidden           = "True"
                    group1           = "Device Characteristics 2"
    />

    <lsccip:setting id               = "PID_MANUF_T2"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "int"
                    title            = "Manufacturer ID"
                    value_range      = "(0, 32767)"
                    default          = "416"
                    hidden           = "(TARGET_NUM &lt; 3)"
                    group1           = "Device Characteristics 2"
    />

    <lsccip:setting id               = "PID_PART_T2"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "int"
                    title            = "Part ID"
                    value_range      = "(0, 65535)"
                    default          = "1"
                    hidden           = "(TARGET_NUM &lt; 3)"
                    group1           = "Device Characteristics 2"
    />

    <lsccip:setting id               = "PID_INST_T2"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "int"
                    title            = "Instance ID"
                    value_range      = "(0, 15)"
                    default          = "1"
                    hidden           = "(TARGET_NUM &lt; 3)"
                    group1           = "Device Characteristics 2"
    />

    <lsccip:setting id               = "PID_ADD_T2"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "int"
                    title            = "Additional ID"
                    drc              = "pid_check(check_if_enabled(TARGET_NUM,2),PID_MANUF_T1,PID_PART_T1,PID_INST_T1,PID_ADD_T1,DCR_T1,PID_MANUF_T2,PID_PART_T2,PID_INST_T2,PID_ADD_T2,DCR_T2,'Target 1','Target 2')"
                    value_range      = "(0, 4095)"
                    default          = "0"
                    hidden           = "(TARGET_NUM &lt; 3)"
                    group1           = "Device Characteristics 2"
    />

    <lsccip:setting id               = "STATIC_ADDR_EN2"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "bool"
                    title            = "Static Address Enable"
                    default          = "False"
                    hidden           = "(TARGET_NUM &lt; 3)"
                    group1           = "Device Characteristics 2"
    />

    <lsccip:setting id               = "STAT_ADDR_tmp2"
                    type             = "input"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "string"
                    title            = "Static Address 2 (HEX) [00-7F]"
                    drc              = "ext_check_hex_and_valid(STATIC_ADDR_EN2,STAT_ADDR_tmp2, '7D', 'Static Address',STAT_ADDR_tmp,STAT_ADDR_tmp1,'',2,STATIC_ADDR_EN,STATIC_ADDR_EN1,0)"
                    default          = "0a"
                    editable         = "STATIC_ADDR_EN2"
                    hidden           = "not(STATIC_ADDR_EN2) or (TARGET_NUM &lt; 3)"
                    group1           = "Device Characteristics 2"
    />

    <lsccip:setting id               = "STATIC_ADDR2"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "int"
                    title            = "Static Address (HEX) [00-7F] (param)"
                    value_expr       = "int(STAT_ADDR_tmp2, 16)"
                    editable         = "False"
                    hidden           = "True"
                    group1           = "Device Characteristics 2"
    />


    <!-- Device Characteristics 3-->
    <lsccip:setting id               = "DCR_tmp_3"
                    type             = "input"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "string"
                    title            = "DCR (HEX) [00 - FF]"
                    drc              = "ext_check_hex_value(DCR_tmp_3, 'FF', 'DCR Value')"
                    default          = "00"
                    hidden           = "(TARGET_NUM &lt; 4)"
                    group1           = "Device Characteristics 3"
    />

    <lsccip:setting id               = "DCR_T3"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "int"
                    title            = "DCR (HEX) [00 - FF] (param)"
                    value_expr       = "int(DCR_tmp_3, 16)"
                    editable         = "False"
                    hidden           = "True"
                    group1           = "Device Characteristics 3"
    />

    <lsccip:setting id               = "PID_MANUF_T3"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "int"
                    title            = "Manufacturer ID"
                    value_range      = "(0, 32767)"
                    default          = "417"
                    hidden           = "(TARGET_NUM &lt; 4)"
                    group1           = "Device Characteristics 3"
    />

    <lsccip:setting id               = "PID_PART_T3"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "int"
                    title            = "Part ID"
                    value_range      = "(0, 65535)"
                    default          = "1"
                    hidden           = "(TARGET_NUM &lt; 4)"
                    group1           = "Device Characteristics 3"
    />

    <lsccip:setting id               = "PID_INST_T3"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "int"
                    title            = "Instance ID"
                    value_range      = "(0, 15)"
                    default          = "1"
                    hidden           = "(TARGET_NUM &lt; 4)"
                    group1           = "Device Characteristics 3"
    />

    <lsccip:setting id               = "PID_ADD_T3"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "int"
                    title            = "Additional ID"
                    drc              = "pid_check(check_if_enabled(TARGET_NUM,3),PID_MANUF_T2,PID_PART_T2,PID_INST_T2,PID_ADD_T2,DCR_T2,PID_MANUF_T3,PID_PART_T3,PID_INST_T3,PID_ADD_T3,DCR_T3,'Target 2','Target 3')"
                    value_range      = "(0, 4095)"
                    default          = "0"
                    hidden           = "(TARGET_NUM &lt; 4)"
                    group1           = "Device Characteristics 3"
    />

    <lsccip:setting id               = "STATIC_ADDR_EN3"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "bool"
                    title            = "Static Address Enable"
                    default          = "False"
                    hidden           = "(TARGET_NUM &lt; 4)"
                    group1           = "Device Characteristics 3"
    />

    <lsccip:setting id               = "STAT_ADDR_tmp3"
                    type             = "input"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "string"
                    title            = "Static Address 3(HEX) [00-7F]"
                    drc              = "ext_check_hex_and_valid(STATIC_ADDR_EN3,STAT_ADDR_tmp3, '7D', 'Static Address',STAT_ADDR_tmp,STAT_ADDR_tmp1,STAT_ADDR_tmp2,3,STATIC_ADDR_EN,STATIC_ADDR_EN1,STATIC_ADDR_EN2)"
                    default          = "0b"
                    editable         = "STATIC_ADDR_EN3"
                    hidden           = "not(STATIC_ADDR_EN3) or (TARGET_NUM &lt; 4)"
                    group1           = "Device Characteristics 3"
    />

    <lsccip:setting id               = "STATIC_ADDR3"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "int"
                    title            = "Static Address (HEX) [00-7F] (param)"
                    value_expr       = "int(STAT_ADDR_tmp3, 16)"
                    editable         = "False"
                    hidden           = "True"
                    group1           = "Device Characteristics 3"
    />

    <!-- Timing Characteristics -->
    <lsccip:setting id               = "CLK_FREQ"
                    type             = "input"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "float"
                    title            = "System Clock Frequency (MHz)"
                    default          = "25.0"
                    value_range      = "(0.8, 50.0)"
                    group1           = "Timing Characteristics"
    />
    <lsccip:setting id               = "CLKI_FREQ"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "int"
                    title            = "System Clock Frequency (MHz) (param)"
                    value_expr       = "int(CLK_FREQ)"
                    editable         = "False"
                    hidden           = "True"
                    group1           = "Timing Characteristics"
    />
    <lsccip:setting id               = "SYSCLK_FREQ"
                    type             = "verilog_macro"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "float"
                    title            = "SCL Clocking"
                    value_expr       = "CLK_FREQ"
                    editable         = "0"
                    hidden           = "bool(1)"
                    group1           = "Timing Characteristics"
    />
    <lsccip:setting id               = "CLKI_FREQ_BYTE"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "int"
                    title            = "Frequency Byte for GETXTIME"
                    value_expr       = "int(CLK_FREQ/0.5)"
                    editable         = "0"
                    hidden           = "bool(1)"
                    group1           = "Timing Characteristics"
                    />
    <lsccip:setting id               = "MXDS_W"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "int"
                    title            = "Write Maximum Data Rate (MHz)"
                    default          = "0"
                    editable         = "False"
                    options          = "get_mxds_maxwr()"     
                    hidden           = "MAX_D_SPEED_LIMIT == False"
                    group1           = "Timing Characteristics"
    />
    <lsccip:setting id               = "MXDS_TSCO"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "int"
                    title            = "Clock-to-data Turnaround Delay (ns)"
                    default          = "0"
                    editable         = "False"
                    options          = "get_mxds_tsco()"      
                    hidden           = "MAX_D_SPEED_LIMIT == False"                    
                    group1           = "Timing Characteristics"
    />
    <lsccip:setting id               = "MXDS_R"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "int"
                    title            = "Read Maximum Data Rate (MHz)"
                    default          = "0"
                    editable         = "False"
                    options          = "get_mxds_maxrd()"      
                    hidden           = "MAX_D_SPEED_LIMIT == False"                    
                    group1           = "Timing Characteristics"
    />
    <lsccip:setting id               = "MXDS_RD_TURN_tmp"
                    type             = "input"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "float"
                    title            = "Maximum Read Turnaround Time (us)"
                    default          = "0.0"
                    editable         = "False"
                    hidden           = "MAX_D_SPEED_LIMIT == False"
                    group1           = "Timing Characteristics"
    />
    <lsccip:setting id               = "MXDS_RD_TURN"
                    type             = "param"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "int"
                    title            = "Maximum Read Turnaround Time (us) (param)"
                    value_expr       = "int(MXDS_RD_TURN_tmp)"
                    editable         = "False"
                    hidden           = "True"
                    group1           = "Timing Characteristics"
    />

    <!-- Simulation -->
    <lsccip:setting id               = "SIM_TYPE_tmp"
                    type             = "input"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "int"
                    title            = "Simulation Type"
                    default          = "0"
                    options          = "[('RTL_SIM',0),('GATE_SIM',1)]"
                    editable         = "bool(1)"
                    hidden           = "bool(1)"
                    group2           = "Simulation"
                    />

    <lsccip:setting id               = "GATE_SIM"
                    type             = "verilog_macro"
                    conn_mod         = "lscc_i3c_target"
                    value_type       = "bool"
                    value_expr       = "True if(SIM_TYPE_tmp) else False"
                    editable         = "bool(0)"
                    hidden           = "bool(1)"
                    group2           = "Simulation"
                    />
  </lsccip:settings>

  <lsccip:ports>
    <!-- I3C inouts -->
    <lsccip:port name      = "scl_io"
                 dir       = "inout"
                 conn_mod  = "lscc_i3c_target"
                 conn_port = "scl_io"
                 dangling  = "not EN_IO_PRIM"
    />

    <lsccip:port name      = "sda_io"
                 dir       = "inout"
                 conn_mod  = "lscc_i3c_target"
                 conn_port = "sda_io"
                 dangling  = "not EN_IO_PRIM"
    />

    <!-- I3C system reset -->
    <lsccip:port name      = "rst_n_i"
                 dir       = "in"
                 conn_mod  = "lscc_i3c_target"
                 conn_port = "rst_n_i"
    />

    <lsccip:port name       = "clk_i"
                 dir        = "in"
                 conn_mod   = "lscc_i3c_target"
                 conn_port  = "clk_i"
    />

    <!-- LMMI inputs -->

    <lsccip:port name       = "lmmi_request_i"
                 dir        = "in"
                 conn_mod   = "lscc_i3c_target"
                 conn_port  = "lmmi_request_i"
                 stick_low  = "INTERFACE != 'LMMI'"
    />

    <lsccip:port name       = "lmmi_wr_rdn_i"
                 dir        = "in"
                 conn_mod   = "lscc_i3c_target"
                 conn_port  = "lmmi_wr_rdn_i"
                 stick_high = "INTERFACE != 'LMMI'"
    />

    <lsccip:port name       = "lmmi_offset_i"
                 dir        = "in"
                 conn_mod   = "lscc_i3c_target"
                 conn_port  = "lmmi_offset_i"
                 range      = "(9, 0)"
                 stick_high = "INTERFACE != 'LMMI'"
    />

    <lsccip:port name       = "lmmi_wdata_i"
                 dir        = "in"
                 conn_mod   = "lscc_i3c_target"
                 conn_port  = "lmmi_wdata_i"
                 range      = "(7, 0)"
                 stick_high = "INTERFACE != 'LMMI'"
    />

    <!-- LMMI outputs -->
    <lsccip:port name       = "lmmi_rdata_o"
                 dir        = "out"
                 conn_mod   = "lscc_i3c_target"
                 conn_port  = "lmmi_rdata_o"
                 range      = "(7, 0)"
                 dangling   = "INTERFACE != 'LMMI'"
    />

    <lsccip:port name       = "lmmi_rdata_valid_o"
                 dir        = "out"
                 conn_mod   = "lscc_i3c_target"
                 conn_port  = "lmmi_rdata_valid_o"
                 dangling   = "INTERFACE != 'LMMI'"
    />

    <lsccip:port name       = "lmmi_ready_o"
                 dir        = "out"
                 conn_mod   = "lscc_i3c_target"
                 conn_port  = "lmmi_ready_o"
                 dangling   = "INTERFACE != 'LMMI'"
    />
    
    <lsccip:port name       = "lmmi_error_o"
                 dir        = "out"
                 conn_mod   = "lscc_i3c_target"
                 conn_port  = "lmmi_error_o"
                 dangling   = "True"
    />

    <!-- LINTR output -->
    <lsccip:port name          = "int_o"
                 dir           = "out"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "int_o"
                 bus_interface = "INTR"
    />
    
    <!-- Target Reset output -->
    <lsccip:port name          = "tgt_rst_o"
                 dir           = "out"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "tgt_rst_o"
    />

    <!-- APB inputs -->
    <lsccip:port name          = "apb_penable_i"
                 dir           = "in"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "apb_penable_i"
                 stick_low     = "INTERFACE != 'APB'"
                 bus_interface = "APB_S0"
    />

    <lsccip:port name          = "apb_psel_i"
                 dir           = "in"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "apb_psel_i"
                 stick_low     = "INTERFACE != 'APB'"
                 bus_interface = "APB_S0"
    />

    <lsccip:port name          = "apb_pwrite_i"
                 dir           = "in"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "apb_pwrite_i"
                 stick_low     = "INTERFACE != 'APB'"
                 bus_interface = "APB_S0"
    />

    <lsccip:port name          = "apb_paddr_i"
                 dir           = "in"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "apb_paddr_i"
                 range         = "(31, 0)"
                 stick_low     = "INTERFACE != 'APB'"
                 bus_interface = "APB_S0"
    />

    <lsccip:port name          = "apb_pwdata_i"
                 dir           = "in"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "apb_pwdata_i"
                 range         = "(31, 0)"
                 stick_low     = "INTERFACE != 'APB'"
                 bus_interface = "APB_S0"
    />

    <!-- APB outputs -->
    <lsccip:port name          = "apb_pready_o"
                 dir           = "out"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "apb_pready_o"
                 dangling      = "INTERFACE != 'APB'"
                 bus_interface = "APB_S0"
    />

    <lsccip:port name          = "apb_pslverr_o"
                 dir           = "out"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "apb_pslverr_o"
                 dangling      = "INTERFACE != 'APB'"
                 bus_interface = "APB_S0"
    />

    <lsccip:port name          = "apb_prdata_o"
                 dir           = "out"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "apb_prdata_o"
                 range         = "(31, 0)"
                 dangling      = "INTERFACE != 'APB'"
                 bus_interface = "APB_S0"
    />

    <!-- AHB-Lite inputs -->
    <lsccip:port name          = "ahbl_hsel_i"
                 dir           = "in"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "ahbl_hsel_i"
                 stick_low     = "INTERFACE != 'AHBL'"
                 bus_interface = "AHBL_S0"
    />

    <lsccip:port name          = "ahbl_hready_i"
                 dir           = "in"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "ahbl_hready_i"
                 stick_low     = "INTERFACE != 'AHBL'"
                 bus_interface = "AHBL_S0"
    />

    <lsccip:port name          = "ahbl_haddr_i"
                 dir           = "in"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "ahbl_haddr_i"
                 range         = "(31, 0)"
                 stick_low     = "INTERFACE != 'AHBL'"
                 bus_interface = "AHBL_S0"
    />

    <lsccip:port name          = "ahbl_hburst_i"
                 dir           = "in"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "ahbl_hburst_i"
                 range         = "(2, 0)"
                 stick_low     = "INTERFACE != 'AHBL'"
                 bus_interface = "AHBL_S0"
    />

    <lsccip:port name          = "ahbl_hsize_i"
                 dir           = "in"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "ahbl_hsize_i"
                 range         = "(2, 0)"
                 stick_low     = "INTERFACE != 'AHBL'"
                 bus_interface = "AHBL_S0"
    />

    <lsccip:port name          = "ahbl_hmastlock_i"
                 dir           = "in"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "ahbl_hmastlock_i"
                 stick_low     = "INTERFACE != 'AHBL'"
                 bus_interface = "AHBL_S0"
    />

    <lsccip:port name          = "ahbl_hprot_i"
                 dir           = "in"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "ahbl_hprot_i"
                 range         = "(3, 0)"
                 stick_low     = "INTERFACE != 'AHBL'"
                 bus_interface = "AHBL_S0"
    />

    <lsccip:port name          = "ahbl_htrans_i"
                 dir           = "in"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "ahbl_htrans_i"
                 range         = "(1, 0)"
                 stick_low     = "INTERFACE != 'AHBL'"
                 bus_interface = "AHBL_S0"
    />

    <lsccip:port name          = "ahbl_hwrite_i"
                 dir           = "in"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "ahbl_hwrite_i"
                 stick_low     = "INTERFACE != 'AHBL'"
                 bus_interface = "AHBL_S0"
    />

    <lsccip:port name          = "ahbl_hwdata_i"
                 dir           = "in"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "ahbl_hwdata_i"
                 range         = "(31, 0)"
                 stick_low     = "INTERFACE != 'AHBL'"
                 bus_interface = "AHBL_S0"
    />

    <!-- AHB-Lite outputs -->
    <lsccip:port name          = "ahbl_hreadyout_o"
                 dir           = "out"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "ahbl_hreadyout_o"
                 dangling      = "INTERFACE != 'AHBL'"
                 bus_interface = "AHBL_S0"
    />

    <lsccip:port name          = "ahbl_hresp_o"
                 dir           = "out"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "ahbl_hresp_o"
                 dangling      = "INTERFACE != 'AHBL'"
                 bus_interface = "AHBL_S0"
    />

    <lsccip:port name          = "ahbl_hrdata_o"
                 dir           = "out"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "ahbl_hrdata_o"
                 range         = "(31, 0)"
                 dangling      = "INTERFACE != 'AHBL'"
                 bus_interface = "AHBL_S0"
    />

    <!--FIFO Interface-->
    <lsccip:port name          = "tx_valid_i"
                 dir           = "in"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "tx_valid_i"
                 stick_low     = "not EN_FIFOINTF"
                 bus_interface = "FIFO_INTF"
                 />
<!--                  range         = "((TXDWID//8)-1, 0)" -->

    <lsccip:port name          = "tx_data_i"
                 dir           = "in"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "tx_data_i"
                 range         = "(TXDWID-1, 0)"
                 stick_low     = "not EN_FIFOINTF"
                 bus_interface = "FIFO_INTF"
                 />

    <lsccip:port name          = "rx_ready_i"
                 dir           = "in"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "rx_ready_i"
                 stick_low     = "not EN_FIFOINTF"
                 bus_interface = "FIFO_INTF"
                 />

    <lsccip:port name          = "tx_ready_o"
                 dir           = "out"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "tx_ready_o"
                 dangling      = "not EN_FIFOINTF"
                 bus_interface = "FIFO_INTF"
                 />

    <lsccip:port name          = "rx_valid_o"
                 dir           = "out"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "rx_valid_o"
                 dangling      = "not EN_FIFOINTF"
                 bus_interface = "FIFO_INTF"
                 />
<!--                  range         = "((RXDWID//8)-1, 0)" -->

    <lsccip:port name          = "rx_data_o"
                 dir           = "out"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "rx_data_o"
                 range         = "(RXDWID-1, 0)"
                 dangling      = "not EN_FIFOINTF"
                 bus_interface = "FIFO_INTF"
                 />

    <!--FIFO Interface1-->
    <lsccip:port name          = "t1_tx_valid_i"
                 dir           = "in"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "t1_tx_valid_i"
                 stick_low     = "not EN_FIFOINTF or (TARGET_NUM &lt; 2)"
                 bus_interface = "FIFO_INTF1"
                 />
<!--                  range         = "((TXDWID//8)-1, 0)" -->

    <lsccip:port name          = "t1_tx_data_i"
                 dir           = "in"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "t1_tx_data_i"
                 range         = "(TXDWID-1, 0)"
                 stick_low     = "not EN_FIFOINTF or (TARGET_NUM &lt; 2)"
                 bus_interface = "FIFO_INTF1"
                 />

    <lsccip:port name          = "t1_rx_ready_i"
                 dir           = "in"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "t1_rx_ready_i"
                 stick_low     = "not EN_FIFOINTF or (TARGET_NUM &lt; 2)"
                 bus_interface = "FIFO_INTF1"
                 />

    <lsccip:port name          = "t1_tx_ready_o"
                 dir           = "out"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "t1_tx_ready_o"
                 dangling      = "not EN_FIFOINTF or (TARGET_NUM &lt; 2)"
                 bus_interface = "FIFO_INTF1"
                 />

    <lsccip:port name          = "t1_rx_valid_o"
                 dir           = "out"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "t1_rx_valid_o"
                 dangling      = "not EN_FIFOINTF or (TARGET_NUM &lt; 2)"
                 bus_interface = "FIFO_INTF1"
                 />
<!--                  range         = "((RXDWID//8)-1, 0)" -->

    <lsccip:port name          = "t1_rx_data_o"
                 dir           = "out"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "t1_rx_data_o"
                 range         = "(RXDWID-1, 0)"
                 dangling      = "not EN_FIFOINTF or (TARGET_NUM &lt; 2)"
                 bus_interface = "FIFO_INTF1"
                 />

    <!--FIFO Interface2-->
    <lsccip:port name          = "t2_tx_valid_i"
                 dir           = "in"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "t2_tx_valid_i"
                 stick_low     = "not EN_FIFOINTF or (TARGET_NUM &lt; 3)"
                 bus_interface = "FIFO_INTF2"
                 />
<!--                  range         = "((TXDWID//8)-1, 0)" -->

    <lsccip:port name          = "t2_tx_data_i"
                 dir           = "in"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "t2_tx_data_i"
                 range         = "(TXDWID-1, 0)"
                 stick_low     = "not EN_FIFOINTF or (TARGET_NUM &lt; 3)"
                 bus_interface = "FIFO_INTF2"
                 />

    <lsccip:port name          = "t2_rx_ready_i"
                 dir           = "in"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "t2_rx_ready_i"
                 stick_low     = "not EN_FIFOINTF or (TARGET_NUM &lt; 3)"
                 bus_interface = "FIFO_INTF2"
                 />

    <lsccip:port name          = "t2_tx_ready_o"
                 dir           = "out"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "t2_tx_ready_o"
                 dangling      = "not EN_FIFOINTF or (TARGET_NUM &lt; 3)"
                 bus_interface = "FIFO_INTF2"
                 />

    <lsccip:port name          = "t2_rx_valid_o"
                 dir           = "out"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "t2_rx_valid_o"
                 dangling      = "not EN_FIFOINTF or (TARGET_NUM &lt; 3)"
                 bus_interface = "FIFO_INTF2"
                 />
<!--                  range         = "((RXDWID//8)-1, 0)" -->

    <lsccip:port name          = "t2_rx_data_o"
                 dir           = "out"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "t2_rx_data_o"
                 range         = "(RXDWID-1, 0)"
                 dangling      = "not EN_FIFOINTF or (TARGET_NUM &lt; 3)"
                 bus_interface = "FIFO_INTF2"
                 />

    <!--FIFO Interface3-->
    <lsccip:port name          = "t3_tx_valid_i"
                 dir           = "in"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "t3_tx_valid_i"
                 stick_low     = "not EN_FIFOINTF or (TARGET_NUM &lt; 4)"
                 bus_interface = "FIFO_INTF3"
                 />
<!--                  range         = "((TXDWID//8)-1, 0)" -->

    <lsccip:port name          = "t3_tx_data_i"
                 dir           = "in"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "t3_tx_data_i"
                 range         = "(TXDWID-1, 0)"
                 stick_low     = "not EN_FIFOINTF or (TARGET_NUM &lt; 4)"
                 bus_interface = "FIFO_INTF3"
                 />

    <lsccip:port name          = "t3_rx_ready_i"
                 dir           = "in"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "t3_rx_ready_i"
                 stick_low     = "not EN_FIFOINTF or (TARGET_NUM &lt; 4)"
                 bus_interface = "FIFO_INTF3"
                 />

    <lsccip:port name          = "t3_tx_ready_o"
                 dir           = "out"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "t3_tx_ready_o"
                 dangling      = "not EN_FIFOINTF or (TARGET_NUM &lt; 4)"
                 bus_interface = "FIFO_INTF3"
                 />

    <lsccip:port name          = "t3_rx_valid_o"
                 dir           = "out"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "t3_rx_valid_o"
                 dangling      = "not EN_FIFOINTF or (TARGET_NUM &lt; 4)"
                 bus_interface = "FIFO_INTF3"
                 />
<!--                  range         = "((RXDWID//8)-1, 0)" -->

    <lsccip:port name          = "t3_rx_data_o"
                 dir           = "out"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "t3_rx_data_o"
                 range         = "(RXDWID-1, 0)"
                 dangling      = "not EN_FIFOINTF or (TARGET_NUM &lt; 4)"
                 bus_interface = "FIFO_INTF3"
                 />

    <!--External IO Interface-->
    <lsccip:port name          = "ext_scl_i"
                 dir           = "in"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "ext_scl_i"
                 stick_low     = "EN_IO_PRIM"
                 bus_interface = "EXT_IO_INTF"
                 />

    <lsccip:port name          = "ext_sda_i"
                 dir           = "in"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "ext_sda_i"
                 stick_low     = "EN_IO_PRIM"
                 bus_interface = "EXT_IO_INTF"
                 />

    <lsccip:port name          = "ext_sda_o"
                 dir           = "out"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "ext_sda_o"
                 dangling      = "EN_IO_PRIM"
                 bus_interface = "EXT_IO_INTF"
                 />

    <lsccip:port name          = "ext_sda_oe"
                 dir           = "out"
                 conn_mod      = "lscc_i3c_target"
                 conn_port     = "ext_sda_oe"
                 dangling      = "EN_IO_PRIM"
                 bus_interface = "EXT_IO_INTF"
                 />

  </lsccip:ports>

  <xi:include href="bus_interface.xml" parse="xml" />
  <xi:include href="memory_map.xml" parse="xml" />

  <lsccip:componentGenerators>
    <lsccip:componentGenerator>
      <lsccip:name>create_constraint_file</lsccip:name>
      <lsccip:generatorExe>eval/create_constraint.py</lsccip:generatorExe>
    </lsccip:componentGenerator>
  </lsccip:componentGenerators>

</lsccip:ip>
