/*!
 *  Copyright (c) 2017 by Contributors
 * \file tvm_vpi.h
 * \brief Messages passed around VPI used for simulation.
 */
#ifndef VERILOG_TVM_VPI_H_
#define VERILOG_TVM_VPI_H_

namespace tvm {
namespace vpi {

enum VPICallCode : int {
  kGetHandleByName,
  kGetHandleByIndex,
  kGetStrProp,
  kGetIntProp,
  kGetInt32,
  kPutInt32,
  kGetVec,
  kPutVec,
  kYield,
  kShutDown
};

enum VPIReturnCode : int {
  kPosEdgeTrigger = 0,
  kSuccess = 1,
  kFail = 2
};

// VPI type code as in IEEE standard.
enum VPITypeCode {
  kVPIModule = 32
};

// VPI property code as in IEEE standard.
enum VPIPropCode {
  kVPIType = 1,
  kVPIFullName = 3,
  kVPISize = 4,
  kVPIDefName = 9
};

/*! \brief The vector value used in trasmission */
struct VPIVecVal {
  int aval;
  int bval;
};

/*! \brief User facing vpi handle. */
typedef void* VPIRawHandle;

}  // namespace vpi
}  // namespace tvm
#endif  // VERILOG_TVM_VPI_H_