`include "constants.vams"
`include "disciplines.vams"
`include "IBIS_macro_library.va"

module PreDeMacro (InD, IOp, IOn, PCref,  PUref,  PDref,  GCref,  EnD);
  input      InD, EnD;
  electrical InD, EnD;

  inout      IOp, IOn, PCref, PUref, PDref, GCref;
  electrical IOp, IOn, PCref, PUref, PDref, GCref;

  electrical InNM,     InPB,     InNB,     Dref;
  electrical PUrefPB,  PDrefPB,  PCrefPB,  GCrefPB;
  electrical PUrefNB,  PDrefNB,  PCrefNB,  GCrefNB;
  electrical RcvPM,    RcvNM,    RcvPB,    RcvNB;

  parameter  real  ScaleBoost = -0.5;

//-----------------------------------------------------------------------------
// These lines show how to pass IV and Vt tables into the IBIS_IO model
//-----------------------------------------------------------------------------
//`include "IV_data_no_ODT.dat"
//`include "VT_data_no_ODT.dat"

//  IBIS_IO  #(`IV_data, `VT_data) PosM  (PUref,   PDref,   IOp, InD,  EnD, RcvPM, PCref,   GCref);
//  IBIS_IO  #(`IV_data, `VT_data) NegM  (PUref,   PDref,   IOn, InNM, EnD, RcvNM, PCref,   GCref);
//  IBIS_IO  #(`IV_data, `VT_data) PosB  (PUrefPB, PDrefPB, IOp, InPB, EnD, RcvPB, PCrefPB, GCrefPB);
//  IBIS_IO  #(`IV_data, `VT_data) NegB  (PUrefNB, PDrefNB, IOn, InNB, EnD, RcvNB, PCrefNB, GCrefNB);
////                                      PUref,   PDref,   IO,  In,   En,  Rcv,   PCref,   GCref
//-----------------------------------------------------------------------------

  IBIS_IO  PosM  (PUref,   PDref,   IOp, InD,  EnD, RcvPM, PCref,   GCref);
  IBIS_IO  NegM  (PUref,   PDref,   IOn, InNM, EnD, RcvNM, PCref,   GCref);
  IBIS_IO  PosB  (PUrefPB, PDrefPB, IOp, InPB, EnD, RcvPB, PCrefPB, GCrefPB);
  IBIS_IO  NegB  (PUrefNB, PDrefNB, IOn, InNB, EnD, RcvNB, PCrefNB, GCrefNB);
//                PUref,   PDref,   IO,  In,   En,  Rcv,   PCref,   GCref

  IBIS_V           #(.Vdc(1.0))     Dig1  (Dref, PDref);
  IBIS_VCVS                         Inv1  (Dref, InNM,  InD,  PDref);
  IBIS_VCVS_DELAY  #(.TD(10.0e-9))  Dly1  (InNB, PDref, InD,  PDref);
  IBIS_VCVS_DELAY  #(.TD(10.0e-9))  Dly2  (InPB, PDref, InNM, PDref);

  IBIS_CCCS  #(.Scale(ScaleBoost))  IpcP  (PCref, IOp, PCref, PCrefPB);
  IBIS_CCCS  #(.Scale(ScaleBoost))  IpuP  (PUref, IOp, PUref, PUrefPB);
  IBIS_CCCS  #(.Scale(ScaleBoost))  IpdP  (PDref, IOp, PDref, PDrefPB);
  IBIS_CCCS  #(.Scale(ScaleBoost))  IgcP  (GCref, IOp, GCref, GCrefPB);

  IBIS_CCCS  #(.Scale(ScaleBoost))  IpcN  (PCref, IOn, PCref, PCrefNB);
  IBIS_CCCS  #(.Scale(ScaleBoost))  IpuN  (PUref, IOn, PUref, PUrefNB);
  IBIS_CCCS  #(.Scale(ScaleBoost))  IpdN  (PDref, IOn, PDref, PDrefNB);
  IBIS_CCCS  #(.Scale(ScaleBoost))  IgcN  (GCref, IOn, GCref, GCrefNB);

endmodule
