// Automatically modified by replacePGwithIfDef.pl
// iptguser	Thu Aug 18 13:10:23 EDT 2011

// Automatically edited by removePhraseFromMultipleFiles.pl
// iptguser	Mon Aug  8 14:40:05 EDT 2011
// \`suppress_faults;^\n
// \`ifdef TETRAMAX;^\n
// \`ifdef functional;\`else
// \`delay_mode_path;^\n
// \`disable_portfaults;\`nosuppress_faults

`celldefine
`timescale 1ns / 1ps

module scs8lp_sleep_sergate_plv_28  (
output virtpwr,
input sleep

`ifdef SC_USE_PG_PIN
, input vpwr
, input vpb
, input vnb
`endif

);

`ifdef functional
`else
`ifdef SC_USE_PG_PIN
`else
supply1 vpwr;
supply1 vpb;
supply0 vnb;
`endif
`endif

  wire vgnd;

    pulldown(vgnd);
  `ifdef SC_USE_PG_PIN

    scs8lpa_U_VPWR_VGND  (UDP_OUT_virtpwr, vpwr, vpwr, vgnd) ;
    bufif0 (virtpwr, UDP_OUT_virtpwr, sleep);

  `else
    bufif0 ( virtpwr , vpwr , sleep ) ;
  `endif
`ifdef functional
`else
	specify
		(sleep => virtpwr) = (0:0:0,0:0:0,0:0:0,0:0:0,0:0:0,0:0:0);
	endspecify
`endif

endmodule
`endcelldefine
