`celldefine
`suppress_faults
`enable_portfaults

`ifdef TETRAMAX
`define functional
`endif

`ifdef functional
 `timescale 1ns / 1ps
`ifndef dont_change_delay_mode // See CDT 66389 for detail on dont_change_delay_mode
 `delay_mode_distributed
`endif
`ifndef dont_change_delay_mode // See CDT 66389 for detail on dont_change_delay_mode
 `delay_mode_unit
`endif
`else
 `timescale 1ns / 1ps
`ifndef dont_change_delay_mode // See CDT 66389 for detail on dont_change_delay_mode
 `delay_mode_path
`endif
`endif 

module scs8hs_o22ai_4 ( Y ,  A1 , A2 , B1 , B2 , vpwr , vgnd );
input vpwr, vgnd;
output  Y ;
input  A1 , A2 , B1 , B2 ;

wire	Y , A1 , A2 , B1 ;
wire	B2 , csi_opt_273, csi_opt_274 ;

`ifdef functional
`else
reg csi_notifier;

	specify
    if ((!A2&!B1&B2)) (A1 -=> Y) = (0:0:0,0:0:0);
    if ((!A2&B1&!B2)) (A1 -=> Y) = (0:0:0,0:0:0);
    if ((!A2&B1&B2)) (A1 -=> Y) = (0:0:0,0:0:0);
    if ((!A1&!B1&B2)) (A2 -=> Y) = (0:0:0,0:0:0);
    if ((!A1&B1&!B2)) (A2 -=> Y) = (0:0:0,0:0:0);
    if ((!A1&B1&B2)) (A2 -=> Y) = (0:0:0,0:0:0);
    if ((!A1&A2&!B2)) (B1 -=> Y) = (0:0:0,0:0:0);
    if ((A1&!A2&!B2)) (B1 -=> Y) = (0:0:0,0:0:0);
    if ((A1&A2&!B2)) (B1 -=> Y) = (0:0:0,0:0:0);
    if ((!A1&A2&!B1)) (B2 -=> Y) = (0:0:0,0:0:0);
    if ((A1&!A2&!B1)) (B2 -=> Y) = (0:0:0,0:0:0);
    if ((A1&A2&!B1)) (B2 -=> Y) = (0:0:0,0:0:0);
	endspecify
`endif

  nor ( csi_opt_273 , B1 , B2 ) ;
  nor ( csi_opt_274 , A1 , A2 ) ;
  or  ( UDP_IN_Y , csi_opt_274 , csi_opt_273 ) ;
  U_VPWR_VGND (UDP_OUT_Y, UDP_IN_Y, vpwr, vgnd) ;
  buf  (Y, UDP_OUT_Y) ;
endmodule
`endcelldefine
`disable_portfaults
`nosuppress_faults

