// `default_nettype none
`ifndef TOP_ROUTING 
	`define USER1_ABUTMENT_PINS \
	.AMUXBUS_A(analog_a),\
	.AMUXBUS_B(analog_b),\
	.VSSA(vssa1),\
	.VDDA(vdda1),\
	.VSWITCH(vddio),\
	.VDDIO_Q(vddio_q),\
	.VCCHIB(vccd),\
	.VDDIO(vddio),\
	.VCCD(vccd1),\
	.VSSIO(vssio),\
	.VSSD(vssd1),\
	.VSSIO_Q(vssio_q),

	`define USER2_ABUTMENT_PINS \
	.AMUXBUS_A(analog_a),\
	.AMUXBUS_B(analog_b),\
	.VSSA(vssa2),\
	.VDDA(vdda2),\
	.VSWITCH(vddio),\
	.VDDIO_Q(vddio_q),\
	.VCCHIB(vccd),\
	.VDDIO(vddio),\
	.VCCD(vccd2),\
	.VSSIO(vssio),\
	.VSSD(vssd2),\
	.VSSIO_Q(vssio_q),

	`define MGMT_ABUTMENT_PINS \
	.AMUXBUS_A(analog_a),\
	.AMUXBUS_B(analog_b),\
	.VSSA(vssa),\
	.VDDA(vdda),\
	.VSWITCH(vddio),\
	.VDDIO_Q(vddio_q),\
	.VCCHIB(vccd),\
	.VDDIO(vddio),\
	.VCCD(vccd),\
	.VSSIO(vssio),\
	.VSSD(vssd),\
	.VSSIO_Q(vssio_q),
`else 
	`define USER1_ABUTMENT_PINS 
	`define USER2_ABUTMENT_PINS 
	`define MGMT_ABUTMENT_PINS 
`endif

`define HVCLAMP_PINS(H,L) \
	.DRN_HVC(H), \
	.SRC_BDY_HVC(L)

`define LVCLAMP_PINS(H1,L1,H2,L2,L3) \
	.BDY2_B2B(L3), \
	.DRN_LVC1(H1), \
	.DRN_LVC2(H2), \
	.SRC_BDY_LVC1(L1), \
	.SRC_BDY_LVC2(L2)

`define INPUT_PAD(X,Y) \
	wire loop_``X; \
	sky130_ef_io__gpiov2_pad X``_pad ( \
	`MGMT_ABUTMENT_PINS \
	`ifndef	TOP_ROUTING \
		.PAD(X), \
	`endif	\
		.OUT(vssd), \
		.OE_N(vccd), \
		.HLD_H_N(vddio), \
		.ENABLE_H(porb_h), \
		.ENABLE_INP_H(loop_``X), \
		.ENABLE_VDDA_H(porb_h), \
		.ENABLE_VSWITCH_H(vssa), \
		.ENABLE_VDDIO(vccd), \
		.INP_DIS(por), \
		.IB_MODE_SEL(vssd), \
		.VTRIP_SEL(vssd), \
		.SLOW(vssd),	\
		.HLD_OVR(vssd), \
		.ANALOG_EN(vssd), \
		.ANALOG_SEL(vssd), \
		.ANALOG_POL(vssd), \
		.DM({vssd, vssd, vccd}), \
		.PAD_A_NOESD_H(), \
		.PAD_A_ESD_0_H(), \
		.PAD_A_ESD_1_H(), \
		.IN(Y), \
		.IN_H(), \
		.TIE_HI_ESD(), \
		.TIE_LO_ESD(loop_``X) )

`define OUTPUT_PAD(X,Y,INPUT_DIS,OUT_EN_N) \
	wire loop_``X; \
	sky130_ef_io__gpiov2_pad X``_pad ( \
	`MGMT_ABUTMENT_PINS \
	`ifndef	TOP_ROUTING \
		.PAD(X), \
	`endif \
		.OUT(Y), \
		.OE_N(OUT_EN_N), \
		.HLD_H_N(vddio), \
		.ENABLE_H(porb_h),	\
		.ENABLE_INP_H(loop_``X), \
		.ENABLE_VDDA_H(porb_h), \
		.ENABLE_VSWITCH_H(vssa), \
		.ENABLE_VDDIO(vccd), \
		.INP_DIS(INPUT_DIS), \
		.IB_MODE_SEL(vssd), \
		.VTRIP_SEL(vssd), \
		.SLOW(vssd),	\
		.HLD_OVR(vssd), \
		.ANALOG_EN(vssd), \
		.ANALOG_SEL(vssd), \
		.ANALOG_POL(vssd), \
		.DM({vccd, vccd, vssd}),	\
		.PAD_A_NOESD_H(), \
		.PAD_A_ESD_0_H(), \
		.PAD_A_ESD_1_H(), \
		.IN(), \
		.IN_H(), \
		.TIE_HI_ESD(), \
		.TIE_LO_ESD(loop_``X)) 

`define INOUT_PAD(X,Y,Y_OUT,INPUT_DIS,OUT_EN_N,MODE) \
	sky130_ef_io__gpiov2_pad X``_pad ( \
	`MGMT_ABUTMENT_PINS \
	`ifndef	TOP_ROUTING \
		.PAD(X),\
	`endif	\
		.OUT(Y_OUT),	\
		.OE_N(OUT_EN_N), \
		.HLD_H_N(vddio),	\
		.ENABLE_H(porb_h), \
		.ENABLE_INP_H(loop_``X), \
		.ENABLE_VDDA_H(porb_h), \
		.ENABLE_VSWITCH_H(vssa), \
		.ENABLE_VDDIO(vccd), \
		.INP_DIS(INPUT_DIS), \
		.IB_MODE_SEL(vssd), \
		.VTRIP_SEL(vssd), \
		.SLOW(vssd),	\
		.HLD_OVR(vssd), \
		.ANALOG_EN(vssd), \
		.ANALOG_SEL(vssd), \
		.ANALOG_POL(vssd), \
		.DM(MODE), \
		.PAD_A_NOESD_H(), \
		.PAD_A_ESD_0_H(), \
		.PAD_A_ESD_1_H(), \
		.IN(Y),  \
		.IN_H(), \
		.TIE_HI_ESD(), \
		.TIE_LO_ESD(loop_``X) )

// `default_nettype wire
