Added additional protection for all the signals output to the user
space, to force them to be tristated whenever the user space 1.8V
supply is missing.
diff --git a/verilog/rtl/gpio_control_block.v b/verilog/rtl/gpio_control_block.v
index 823856b..ab08e46 100644
--- a/verilog/rtl/gpio_control_block.v
+++ b/verilog/rtl/gpio_control_block.v
@@ -43,6 +43,13 @@
     parameter ASEL_INIT = 1'b0,
     parameter APOL_INIT = 1'b0
 ) (
+    `ifdef LVS
+         inout vccd,
+         inout vssd,
+         inout vccd1,
+         inout vssd1,
+    `endif
+
     // Management Soc-facing signals
     input  	 resetn,		// Global reset
     input  	 serial_clock,
@@ -115,6 +122,9 @@
     wire	pad_gpio_out;
     wire	pad_gpio_in;
 
+    wire user_gpio_in;
+    wire gpio_in_unbuf;
+
     /* Serial shift for the above (latched) values */
     reg [PAD_CTRL_BITS-1:0] shift_register;
 
@@ -183,7 +193,7 @@
 
     /* Implement pad control behavior depending on state of mgmt_ena */
 
-    assign user_gpio_in =    (mgmt_ena) ? 1'b0 : pad_gpio_in;
+    assign gpio_in_unbuf =    (mgmt_ena) ? 1'b0 : pad_gpio_in;
     assign mgmt_gpio_in =    (mgmt_ena) ? ((gpio_inenb == 1'b0) ?
 					pad_gpio_in : 1'bz) : 1'b0;
 
@@ -195,5 +205,29 @@
 			mgmt_gpio_out) :
 			user_gpio_out; 
 
+    /* Buffer user_gpio_in with an enable that is set by the user domain vccd */
+
+    sky130_fd_sc_hd__conb_1 gpio_logic_high (
+        `ifdef LVS
+            .VPWR(vccd1),
+            .VGND(vssd1),
+            .VPB(vccd1),
+            .VNB(vssd1),
+        `endif
+            .HI(gpio_logic1),
+            .LO()
+    );
+
+    sky130_fd_sc_hd__einvp_8 gpio_in_buf (
+        `ifdef LVS
+            .VPWR(vccd),
+            .VGND(vssd),
+            .VPB(vccd),
+            .VNB(vssd),
+        `endif
+            .Z(user_gpio_in),
+            .A(~gpio_in_unbuf),
+            .TE(gpio_logic1)
+    );
 
 endmodule