`timescale 1ns/1ps //----------------------------------------------------- // Function : An embedded I/O with // - An I/O isolation signal to set // the I/O in input mode. This is to avoid // any unexpected output signals to damage // circuits outside the FPGA due to configurable // memories are not properly initialized // This feature may not be needed if the configurable // memory cell has a built-in set/reset functionality // - Internal protection circuitry to ensure // clean signals at all the SOC I/O ports // This is to avoid // - output any random signal // when the I/O is in input mode, also avoid // - driven by any random signal // when the I/O is output mode // // Note: This cell is built with Standard Cells from HD library // It is already technology mapped and can be directly used // for physical design //----------------------------------------------------- module EMBEDDED_IO_HD ( input SOC_IN, // Input to drive the inpad signal output SOC_OUT, // Output the outpad signal output SOC_DIR, // Output the directionality output FPGA_IN, // Input data to FPGA input FPGA_OUT, // Output data from FPGA input FPGA_DIR, // direction control input IO_ISOL_N // Isolation enable signal ); wire SOC_DIR_N; // Use drive-strength 4 for a high fan-out from SoC components sky130_fd_sc_hd__or2b_4 ISOL_EN_GATE (.B_N(IO_ISOL_N), .A(FPGA_DIR), .X(SOC_DIR) ); // Use drive-strength 4 for a high fan-out from global routing architecture sky130_fd_sc_hd__inv_1 INV_SOC_DIR (.A(SOC_DIR), .Y(SOC_DIR_N)); sky130_fd_sc_hd__ebufn_4 IN_PROTECT_GATE (.TE_B(SOC_DIR_N), .A(SOC_IN), .Z(FPGA_IN) ); // Use drive-strength 4 for a potential high fan-out from SoC components sky130_fd_sc_hd__ebufn_4 OUT_PROTECT_GATE (.TE_B(SOC_DIR), .A(FPGA_OUT), .Z(SOC_OUT) ); endmodule