<?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>smbus_mailbox</lsccip:name>
    <lsccip:display_name>SMBus Mailbox</lsccip:display_name>
    <lsccip:version>1.2.1</lsccip:version>
    <lsccip:category>Processors_Controllers_and_Peripherals</lsccip:category>
    <lsccip:keywords>BusType_AHB</lsccip:keywords> 
    <lsccip:min_radiant_version>2.0</lsccip:min_radiant_version>
    <lsccip:supported_products>
      <lsccip:supported_family name="MachXO3D"></lsccip:supported_family>
      <lsccip:supported_family name="LFCPNX"></lsccip:supported_family>
      <lsccip:supported_family name="LFMXO5"></lsccip:supported_family>
      <lsccip:supported_family name="LFMXO4"></lsccip:supported_family>
    </lsccip:supported_products>
    <lsccip:supported_platforms>
      <lsccip:supported_platform name="esi" />
      <lsccip:supported_platform name="radiant" />
    </lsccip:supported_platforms>
  </lsccip:general>

  <lsccip:settings>

    <lsccip:setting id                 = "ENABLE_MASTER"
                    type               = "param"
                    value_type         = "bool"
                    conn_mod           = "lscc_smb_mctp_wrapper"
                    default            = "True"
                    output_formatter   = "str"
                    title              = "Enable Controller Function"
                    group1             = "General"
    />

    <lsccip:setting id                 = "S0_BASE_ADDR_INPUT"
                    type               = "input"
                    value_type         = "string"
                    conn_mod           = "lscc_smb_mctp_wrapper"
                    default            = "00020000"
                    output_formatter   = "nostr"
                    drc                = "check_hex_format(32,S0_BASE_ADDR_INPUT)"
                    title              = "SMBus Mailbox Base Address: 0x"
                    group1             = "General"
    />

    <lsccip:setting id                 = "S0_BASE_ADDR"
                    type               = "param"
                    value_type         = "string"
                    conn_mod           = "lscc_smb_mctp_wrapper"
                    default            = "00020000"
                    editable           = "False"
                    hidden             = "True"
                    output_formatter   = "nostr"
                    value_expr         = "calc_initial_value(32, S0_BASE_ADDR_INPUT)"
                    title              = "Actual SMBus Mailbox Base Address"
                    group1             = "General"
    />


    <lsccip:setting id                 = "HADDR_SIZE"
                    type               = "param"
                    conn_mod           = "lscc_smb_mctp_wrapper"
                    value_type         = "int"
                    title              = "AHB Lite Address number of bits"
                    value_range        = "(1, 32)"
                    default            = "32"
                    group1             = "General"
    />

    <lsccip:setting id                 = "HDATA_SIZE"
                    type               = "param"
                    conn_mod           = "lscc_smb_mctp_wrapper"
                    value_type         = "int"
                    title              = "AHB Lite Bus Data number of bits"
                    value_range        = "(8, 32)"
                    default            = "32"
                    group1             = "General"
    />
    
    <lsccip:setting id                 = "ADDR_MODE"
                    type               = "param"
                    conn_mod           = "lscc_smb_mctp_wrapper"
                    value_type         = "int"
                    title              = "Addressing Mode"
                    options            = "[('7-bit', 7), ('10-bit', 10)]"
                    default            = "7"
                    group1             = "General"
    />

    <lsccip:setting id                 = "SLAVE_ADDR_INPUT"
                    type               = "input"
                    value_type         = "string"
                    conn_mod           = "lscc_smb_mctp_wrapper"
                    default            = "51"
                    output_formatter   = "nostr"
                    drc                = "check_hex_format(ADDR_MODE,SLAVE_ADDR_INPUT)"
                    title              = "I2C Target Address: 0x"
                    group1             = "General"
    />

    <lsccip:setting id                 = "SLAVE_ADDR"
                    type               = "param"
                    value_type         = "string"
                    conn_mod           = "lscc_smb_mctp_wrapper"
                    default            = "51"
                    editable           = "False"
                    hidden             = "True"
                    output_formatter   = "nostr"
                    value_expr         = "calc_initial_value(ADDR_MODE, SLAVE_ADDR_INPUT)"
                    title              = "Actual SLAVE_ADDR"
                    group1             = "General"
    />

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

    <!-- Clock -->
    <lsccip:setting id                 = "SYS_CLOCK_FREQ"
                    type               = "param"
                    conn_mod           = "lscc_smb_mctp_wrapper"
                    value_type         = "int"
                    title              = "System Clock Frequency (MHz)"
                    value_range        = "(40, 100)"
                    editable           = "True"
                    default            = "50"
                    group1             = "General"
    />
    <lsccip:setting id                 = "IIC_FREQ"
                    type               = "param"
                    conn_mod           = "lscc_smb_mctp_wrapper"
                    value_type         = "int"
                    title              = "I2C Frequency (KHz)"
                    options            = "[100, 400, 1000]"
                    editable           = "True"
                    default            = "100"
                    group1             = "General"
    />
  </lsccip:settings>

  <lsccip:ports>
    <!-- AHB Lite -->
    <lsccip:port name      = "clk_i"
                 dir       = "in"
                 conn_mod  = "lscc_smb_mctp_wrapper"
                 conn_port = "clk_i"
		 port_type = "clock"
    />

    <lsccip:port name      = "rst_n_i"
                 dir       = "in"
                 conn_mod  = "lscc_smb_mctp_wrapper"
                 conn_port = "rst_n_i"
		 port_type = "reset"
    />

    <lsccip:port name      = "scl_io"
                 dir       = "inout"
                 conn_mod  = "lscc_smb_mctp_wrapper"
                 conn_port = "scl_io"
    />

    <lsccip:port name      = "sda_io"
                 dir       = "inout"
                 conn_mod  = "lscc_smb_mctp_wrapper"
                 conn_port = "sda_io"
    />

    <lsccip:port name      = "smbalert_n_o"
                 dir       = "out"
                 conn_mod  = "lscc_smb_mctp_wrapper"
                 conn_port = "smbalert_n_o"
    />

    <lsccip:port name      = "int_o"
                 dir       = "out"
                 conn_mod  = "lscc_smb_mctp_wrapper"
                 conn_port = "int_o"
                 bus_interface = "INT_M0"
    />

    <lsccip:port name      = "ahbl_hsel_slv_i"
                 dir       = "in"
                 conn_mod  = "lscc_smb_mctp_wrapper"
                 conn_port = "ahbl_hsel_slv_i"
                 bus_interface = "AHBL_S0"
    />

    <lsccip:port name          = "ahbl_haddr_slv_i"
                 dir           = "in"
                 conn_mod      = "lscc_smb_mctp_wrapper"
                 conn_port     = "ahbl_haddr_slv_i"
                 range         = "(HADDR_SIZE - 1, 0)"
                 bus_interface = "AHBL_S0"
    />

    <lsccip:port name          = "ahbl_hwrite_slv_i"
                 dir           = "in"
                 conn_mod      = "lscc_smb_mctp_wrapper"
                 conn_port     = "ahbl_hwrite_slv_i"
                 bus_interface = "AHBL_S0"
    />

    <lsccip:port name          = "ahbl_hwdata_slv_i"
                 dir           = "in"
                 conn_mod      = "lscc_smb_mctp_wrapper"
                 conn_port     = "ahbl_hwdata_slv_i"
                 range         = "(HDATA_SIZE - 1, 0)"
                 bus_interface = "AHBL_S0"
    />

    <lsccip:port name          = "ahbl_hrdata_slv_o"
                 dir           = "out"
                 conn_mod      = "lscc_smb_mctp_wrapper"
                 conn_port     = "ahbl_hrdata_slv_o"
                 range         = "(HDATA_SIZE - 1, 0)"
                 bus_interface = "AHBL_S0"
    />

    <lsccip:port name          = "ahbl_hsize_slv_i"
                 dir           = "in"
                 conn_mod      = "lscc_smb_mctp_wrapper"
                 conn_port     = "ahbl_hsize_slv_i"
                 range         = "(2, 0)"
                 bus_interface = "AHBL_S0"
    />

    <lsccip:port name          = "ahbl_hburst_slv_i"
                 dir           = "in"
                 conn_mod      = "lscc_smb_mctp_wrapper"
                 conn_port     = "ahbl_hburst_slv_i"
                 range         = "(2, 0)"
                 bus_interface = "AHBL_S0"
    />

    <lsccip:port name          = "ahbl_hprot_slv_i"
                 dir           = "in"
                 conn_mod      = "lscc_smb_mctp_wrapper"
                 conn_port     = "ahbl_hprot_slv_i"
                 range         = "(3, 0)"
                 bus_interface = "AHBL_S0"
    />

    <lsccip:port name          = "ahbl_htrans_slv_i"
                 dir           = "in"
                 conn_mod      = "lscc_smb_mctp_wrapper"
                 conn_port     = "ahbl_htrans_slv_i"
                 range         = "(1, 0)"
                 bus_interface = "AHBL_S0"
    />

    <lsccip:port name          = "ahbl_hmastlock_slv_i"
                 dir           = "in"
                 conn_mod      = "lscc_smb_mctp_wrapper"
                 conn_port     = "ahbl_hmastlock_slv_i"
                 bus_interface = "AHBL_S0"
    />

    <lsccip:port name          = "ahbl_hready_slv_i"
                 dir           = "in"
                 conn_mod      = "lscc_smb_mctp_wrapper"
                 conn_port     = "ahbl_hready_slv_i"
                 bus_interface = "AHBL_S0"
    />

    <lsccip:port name          = "ahbl_hresp_slv_o"
                 dir           = "out"
                 conn_mod      = "lscc_smb_mctp_wrapper"
                 conn_port     = "ahbl_hresp_slv_o"
                 bus_interface = "AHBL_S0"
    />

    <lsccip:port name          = "ahbl_hreadyout_slv_o"
                 dir           = "out"
                 conn_mod      = "lscc_smb_mctp_wrapper"
                 conn_port     = "ahbl_hreadyout_slv_o"
                 bus_interface = "AHBL_S0"
    />

  </lsccip:ports>

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

</lsccip:ip>
