| User Guide for :lib:`sky130_fd_io` |
| ================================== |
| |
| Summary |
| ------- |
| |
| This IP document includes two versions of a General Purpose I/O buffer (:cell:`sky130_fd_io__gpio`) with different feature sets, |
| :cell:`sky130_fd_io__sio` macro (pair of Special I/O buffer (:cell:`sky130_fd_io__sio`) + REFerence GENerator (:cell:`sky130_fd_io__refgen`). |
| |
| The IP also includes; |
| |
| * Power, Ground cells (PG pads), |
| * Reset cells (XRES), |
| * Test pads, |
| * Analog pads, |
| * power detector, |
| * overlay cells. |
| |
| The IP also includes all the relevant ESD clamps, diodes and trigger circuits to complete the I/O ring. |
| |
| The I/O buffers can be configured as an input buffer, output buffer, or an I/O buffer. |
| |
| The :cell:`sky130_fd_io__gpio` buffer includes a single-ended input buffer that can be configured for LVTTL, CMOS/I2C operation. |
| |
| :cell:`sky130_fd_io__gpiov2` has better electrical performance and the Rx can handle 1.8V signaling when the I/O supply is different from 1.8V. |
| |
| :cell:`sky130_fd_io__gpio_ovtv2` is fully I2C compliant and includes the over-voltage tolerance feature. |
| It also has an input buffer that can support selectable trip-point feature along with a reference generator. |
| |
| The :cell:`sky130_fd_io__sio` buffer can be configured to produce a regulated high output level, and includes a differential input buffer. |
| All I/O buffers support multiple drive modes. |
| |
| The IP supports a power supply range of 1.71V to 5.5V. |
| |
| Features. Benefits, Tradeoffs, Limitations |
| ------------------------------------------ |
| |
| * 1.71V-5.5V continuous supply operating range |
| * Rail-based ESD protection for :cell:`sky130_fd_io__gpio*` and :cell:`sky130_fd_io__sio_macro` |
| * I2C compliant :cell:`sky130_fd_io__gpio_ovtv2` |
| * I2C compatible - :cell:`sky130_fd_io__gpiov2`, :cell:`sky130_fd_io__gpio`, :cell:`sky130_fd_io__sio` |
| * CMOS, LPC compliant - :cell:`sky130_fd_io__gpio*`, :cell:`sky130_fd_io__sio` |
| * Low Power modes: Hibernate mode (Latch previous state), Deep Sleep Mode (allows I2C communication), Stop Mode (retains I/O state when LV supply is gone) |
| * Selectable output buffer drive modes (open drain high/low, strong/weak pull up/down, High-Z output) - :cell:`sky130_fd_io__gpio*`, :cell:`sky130_fd_io__sio` |
| * Regulated output high level - :cell:`sky130_fd_io__sio` |
| * Hot swap & over-voltage tolerant - :cell:`sky130_fd_io__sio`, :cell:`sky130_fd_io__gpio_ovtv2` |
| * Selectable output buffer slew rate control - :cell:`sky130_fd_io__sio`, :cell:`sky130_fd_io__gpio*` |
| * Selectable input buffer threshold (LVTTL or CMOS/I2C)- :cell:`sky130_fd_io__gpio*`, :cell:`sky130_fd_io__sio` |
| * Selectable 1.8V signaling (Active Mode) - :cell:`sky130_fd_io__gpiov2`, :cell:`sky130_fd_io__gpio_ovtv2` |
| * Selectable differential input buffer threshold (4 options) - :cell:`sky130_fd_io__sio` |
| * Integrated analog multiplexers (2) - :cell:`sky130_fd_io__gpio*` |
| * IP has multiple Power/Ground pads with HV and LV clamps, diodes, Test pads to enable I/O ring assembly |
| * VDDIO and VDDD power detector |
| * Multiple flavors of XRES cells |
| * For complete set of feature comparison, see :numref:`io features comparison` |
| * AIP/LEDA rules set compliant : 5.0 |
| |
| |
| Design Metrics |
| -------------- |
| |
| |
| .. table:: Design Metrics-1 |
| :name: design-metrics-1 |
| |
| +--------------------------------+--------------+------------+ |
| | Description | Active Mode | Deep Sleep | |
| +================================+==============+============+ |
| | Output: Fmax Freq | 33MHz | 33Mhz | |
| +--------------------------------+--------------+------------+ |
| | Output: Fmax Freq | 33MHz | 33Mhz | |
| +--------------------------------+--------------+------------+ |
| | SE Input: Fmax Freq | 66MHz | 66MHz | |
| +--------------------------------+--------------+------------+ |
| | Number of power domains | 5 | |
| +--------------------------------+---------------------------+ |
| | Number of power modes | * Active | |
| | | * Hibernate | |
| | | * Deep Sleep | |
| | | * Stop | |
| +--------------------------------+---------------------------+ |
| | Single-ended Input buffer | I2C complaint | |
| | hysteresis (ALL I/O) | | |
| +--------------------------------+---------------------------+ |
| | Rise/Fall trip point for | 0.7V-1.5V | |
| | VDDD detector | | |
| +--------------------------------+---------------------------+ |
| | Rise/Fall trip point for | 0.7V-1.5V | |
| | VDDIO detector | | |
| +--------------------------------+---------------------------+ |
| | Simulation Temperature Range | -40C to 100C | |
| +--------------------------------+---------------------------+ |
| | * Simulation Voltage range I/O | 1.65V-5.5V | |
| | * Analog Supply | | |
| +--------------------------------+---------------------------+ |
| | * Simulation Voltage range I/O | 1.60V-1.95V | |
| | * LV Digital Supply | | |
| +--------------------------------+---------------------------+ |
| |
| .. table:: Design Metrics-2 |
| :name: design-metrics-2 |
| |
| +---------------------------+------------+-----------+------------+ |
| | :cell:`sky130_fd_io__sio` | 2.0V | 3.3V | 5.0V | |
| | Differential Input buffer | | | | |
| +===========================+============+===========+============+ |
| | Quiescent current | 0.23mA | 0.25mA | 0.27mA | |
| +---------------------------+------------+-----------+------------+ |
| | ICC @ Fmax | 0.35mA | 0.40mA | 0.50mA | |
| +---------------------------+------------+-----------+------------+ |
| | Voltage trip point (SIO) | Vinref±200mV | |
| +---------------------------+-------------------------------------+ |
| |
| .. table:: Design Metrics-3 |
| :name: design-metrics-3 |
| |
| +-----------------------------------+-------------+-----------+ |
| | | ``tt_leak`` | ``leak`` | |
| | | 3.0V, 25C | 3.0V, 85C | |
| +===================================+=============+===========+ |
| | * :cell:`sky130_fd_io__gpio*` ISB | 0.17nA | 89.63nA | |
| | * ``enable_h`` = 0 | | | |
| +-----------------------------------+-------------+-----------+ |
| | * :cell:`sky130_fd_io__sio` ISB | 0.22nA | 40.29nA | |
| | * ``enable_h`` = 0 | | | |
| +-----------------------------------+-------------+-----------+ |
| |
| .. table:: Design Metrics-4 |
| :name: design-metrics-4 |
| |
| +----------------------------------------------------+----------------------+ |
| | :cell:`sky130_fd_io__gpio*` AMUX switch resistance | * 275 : CSD Range | |
| | | * 1000 : Full Range | |
| +----------------------------------------------------+----------------------+ |
| |
| Configuration Options |
| --------------------- |
| |
| * ALL I/O: Input and Output buffers can be enabled independently |
| * ALL I/O: Input buffer trip point select between CMOS/I2C & LVTTL |
| * ALL I/O: Configurable for 8 different Output drive modes |
| * ALL I/O: Output can be configured for different slew rates |
| * ALL I/O: I/O buffer can be configured into low power or low leakage mode using hold state control signals |
| * ALL I/O: O/P Buffer can be configured to drive the PAD during deep sleep mode |
| * :cell:`sky130_fd_io__sio` output buffer can be cured to be CMOS or Regulated output high level buffer (only in Strong Pull up mode) |
| * :cell:`sky130_fd_io__gpiov2`, :cell:`sky130_fd_io__gpio_ovtv2` to handle 1.8V signaling on pad |
| * :cell:`sky130_fd_io__gpio_ovtv2` input buffer supports selectable trip point feature |
| |
| Typical Application |
| ------------------- |
| |
| The SKY130 IO cells are typically used to build the I/O ring around the chip core. |
| In addition to I/O's, Power/Ground cells, ESD clamps, Bond pad etc. |
| are also available in this IP. |
| I/O's are used to communicate with the external world and acts as the interface/buffer between the chip core and the external system. |
| |
| Power Performance |
| ----------------- |
| |
| The I/O's support multiple power modes (Hibernate, Deep Sleep, Stop) which are low-power modes, while still retaining the state of the I/O. |
| |
| FMEA |
| ---- |
| |
| Rail-Based ESD |
| ~~~~~~~~~~~~~~ |
| |
| The ESD strategy for M0S8 platform is non-distributed (grouped) rail-based ESD. |
| This will be implemented across all pins and the ESD scheme can be fully simulated and easily portable across technologies. |
| |
| Architecture and Implementation details |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| The different components needed to build the I/O ring are - :cell:`sky130_fd_io__gpio` :cell:`sky130_fd_io__sio`, ESD RC Clamps (which sit inside the Power/Ground PADS). |
| Each external power domain will be protected with its own ESD RC clamp. |
| There will be ESD diodes from each of the derived supplies to the source supply. |
| For this purpose, two types of ESD RC clamps will be developed - HV Clamp and LV clamp. |
| |
| Alternate XRES implementation |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| The glitch filter and 5k pull-up resistor in the current :cell:`sky130_fd_io__top_xres_2` are provided as separate cells. |
| A PMOS switch is used to disable the pull-up resistor. |
| |
| .. figure:: figures/sky130_fd_io__top_axresv2.png |
| :name: alternate xres implementation |
| :width: 3.58056in |
| :height: 1.25347in |
| |
| Alternate XRES Implementation |
| |
| |
| Critical Requirements Summary |
| ============================= |
| |
| Overview of Block Applications |
| ------------------------------ |
| |
| The Data I/O circuitry is used to communicate with other components in a PC board environment. |
| The circuit also has the capability of shifting between core level voltages and I/O level voltages. |
| |
| The buffers support a power supply range of 1.71V to 5.5V. |
| |
| Block Architecture Overview |
| --------------------------- |
| |
| The following sections describe each of the blocks in detail: |
| |
| .. contents:: :local: |
| :depth: 1 |
| |
| Block Description |
| ~~~~~~~~~~~~~~~~~ |
| |
| The SKY130 IO cells is a toolkit IP. |
| It contains all the cells and primitives required to construct an I/O ring in the SKY130 technology. |
| |
| Additional details of the cells included can be found in the sections below. |
| |
| This :lib:`sky130_fd_io` library contained in this document covers different kinds of I/O cells, a general purpose I/O (:cell:`sky130_fd_io__gpio`) |
| and a special I/O (:cell:`sky130_fd_io__sio`), a reference generator (:cell:`sky130_fd_io__refgen`) for providing voltage references to the :cell:`sky130_fd_io__sio` and Power and Ground (PG) |
| cells that make up the I/O ring. |
| |
| A single table comparison of all features across different IO's is provided in :numref:`io features comparison`. |
| |
| .. io-common-features_ |
| |
| I/O\ [1]_ Common Features |
| ~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| The :cell:`sky130_fd_io__gpio` and :cell:`sky130_fd_io__sio` buffers contain the following common features: |
| |
| .. contents:: :local: |
| :depth: 1 |
| |
| .. [1] I/O (:cell:`sky130_fd_io__gpio`, :cell:`sky130_fd_io__gpiosf`, :cell:`sky130_fd_io__gpiov2`, :cell:`sky130_fd_io__gpio_ovtv2`, SIO). |
| |
| |
| The features that are supported by different I/O's are documented in :numref:`io features comparison` below: |
| |
| .. table:: Comparison of features across different I/O's provided in this IP |
| :name: io features comparison |
| |
| +-------------------+-----------------------------+---------------------------------+------------------------------+----------------------------------+ |
| | Feature | :cell:`sky130_fd_io__gpio*` | :cell:`sky130_fd_io__sio_macro` | :cell:`sky130_fd_io__gpiov2` | :cell:`sky130_fd_io__gpio_ovtv2` | |
| +===================+=============================+=================================+==============================+==================================+ |
| | Drive Capability | 4mA | 4mA | 4mA | 4mA | |
| | (Source) [2]_ | | | | | |
| +-------------------+-----------------------------+---------------------------------+------------------------------+----------------------------------+ |
| | Drive Capability | 4mA [3]_ | 20mA [5]_ | 4mA [3]_ | 10mA [3]_ | |
| | (Sink) | | | | | |
| +-------------------+-----------------------------+---------------------------------+------------------------------+----------------------------------+ |
| | Drive Modes | 8-Modes | 8-Modes | 8-Modes | 8-Modes | |
| +-------------------+-----------------------------+---------------------------------+------------------------------+----------------------------------+ |
| | Slew Rate Control | Slow/Fast | Slow/Fast | Slow/Fast | Slow/Fast/I2C | |
| +-------------------+-----------------------------+---------------------------------+------------------------------+----------------------------------+ |
| | Input Buffer | CMOS/TTL | CMOS/TTL | CMOS/TTL/1.8V | CMOS/TTL/1.8V/Selectable | |
| | trip point | | | | | |
| +-------------------+-----------------------------+---------------------------------+------------------------------+----------------------------------+ |
| | Over-Voltage | No | Yes | No | Yes | |
| | Tolerance | | | | | |
| +-------------------+-----------------------------+---------------------------------+------------------------------+----------------------------------+ |
| | Analog Mux | 2 | 0 [4]_ | 2 | 2 | |
| +-------------------+-----------------------------+---------------------------------+------------------------------+----------------------------------+ |
| | Regulated Output | No | Yes | No | No | |
| +-------------------+-----------------------------+---------------------------------+------------------------------+----------------------------------+ |
| | Input buffer type | SE | SE+Diff | SE | SE | |
| +-------------------+-----------------------------+---------------------------------+------------------------------+----------------------------------+ |
| | I2C Compliance | Limited [5]_ | Limited [5]_ | Standard,Fast | * Standard | |
| | | | | | * Fast | |
| | | | | | * Fast-Plus [6]_ | |
| | | | | | * High-Speed | |
| +-------------------+-----------------------------+---------------------------------+------------------------------+----------------------------------+ |
| | Low-voltage | No | No | Yes | Yes | |
| | DFT support | | | | | |
| +-------------------+-----------------------------+---------------------------------+------------------------------+----------------------------------+ |
| | Hysteresis [7]_ | 5% | 5% | 10% [8]_ | 10% [8]_ | |
| +-------------------+-----------------------------+---------------------------------+------------------------------+----------------------------------+ |
| |
| .. [2] For 3V range. :cell:`sky130_fd_io__sio` configured in unregulated mode. |
| .. [3] VDDIO≥1.71V. |
| .. [4] SIO interacts with the analog mux for ADFT of :cell:`sky130_fd_io__refgen`. |
| .. [5] Limited - Compliant for limited ranges of Vext, Rext and Cbus. |
| .. [6] 20mA support for VDDIO>2.9V. |
| .. [7] Input Buffer operating at 48 MHz w hen VCCHIB=1.4V, VDDIO=1.65V |
| .. [8] For CMOS mode only. |
| |
| Eight drive strength modes |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| The IP includes three static drive mode bits (dm<2:0>). |
| These bits are used to configure the output buffer drive strength. |
| A default setting for enabling or disabling the input and output buffer is also defined. |
| The eight drive strength modes are defined in the following table. |
| |
| .. table:: Truth table for I/O Drive Strength Modes |
| :name: io drive strength modes |
| |
| +-------------+----------+---------+-----------------+----------+----------+---------------------------------+ |
| | ``inp_dis`` | ``oe_n`` | dm<2:0> | Pad State | Input | Output | Mode Description | |
| | | | +--------+--------+ Buffer | Buffer | | |
| | | | | out=1 | out=0 | | | | |
| +=============+==========+=========+========+========+==========+==========+=================================+ |
| | X | X | 000 | Hi- Z | Hi- Z | Disabled | Disabled | * Input/Output buffers disabled | |
| | | | | | | (in=0) | | * Analog Input Mode | |
| +-------------+----------+---------+--------+--------+----------+----------+---------------------------------+ |
| | 0 | X | 001 | Hi- Z | Hi- Z | Enabled | Disabled | Configured as Input only | |
| +-------------+----------+---------+--------+--------+----------+----------+---------------------------------+ |
| | 0 | 0 | 010 | Res 1 | Strong | Enabled | Enabled | * Weak pull-up, | |
| | | | | (5k) | 0 | (in=0) | | * strong pull-down | |
| +-------------+----------+---------+--------+--------+----------+----------+---------------------------------+ |
| | 0 | 0 | 011 | Strong | Res 0 | Enabled | Enabled | * Strong pull-up | |
| | | | | 1 | (5k) | (in=0) | | * Weak pull-down | |
| +-------------+----------+---------+--------+--------+----------+----------+---------------------------------+ |
| | 0 | 0 | 100 | Hi- Z | Strong | Enabled | Enabled | * Open Drain | |
| | | | | | 0 | (in=0) | | * Strong pull-down | |
| +-------------+----------+---------+--------+--------+----------+----------+---------------------------------+ |
| | 0 | 0 | 101 | Strong | Hi- Z | Enabled | Enabled | * Open Drain | |
| | | | | 1 | | (in=0) | | * Strong pull-up | |
| +-------------+----------+---------+--------+--------+----------+----------+---------------------------------+ |
| | 0 | 0 | 110 | Strong | Strong | Enabled | Enabled | * Strong pull-up | |
| | | | | 1 | 0 | (in=0) | | * Strong pull-down | |
| +-------------+----------+---------+--------+--------+----------+----------+---------------------------------+ |
| | 0 | 0 | 111 | Res 1 | Res 0 | Enabled | Enabled | * Weak pull-up | |
| | | | | (5k) | (5k) | (in=0) | | * Weak pull-down | |
| +-------------+----------+---------+--------+--------+----------+----------+---------------------------------+ |
| | 1 | X | XXX | | | Disabled | | Input buffer disabled | |
| +-------------+----------+---------+--------+--------+----------+----------+---------------------------------+ |
| | X | 1 | XXX | Hi-Z | Hi-Z | | Disabled | Output buffer tri-stated | |
| +-------------+----------+---------+--------+--------+----------+----------+---------------------------------+ |
| |
| *X = don't care 0/1* |
| |
| Independent control of input and output buffer enables |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| The I/O cells also include separate input disable ``inp_dis`` and output enable ``oe_n`` control signals as shown in :numref:`io drive strength modes`. |
| When ``inp_dis`` = 0 the input buffer is enabled and when ``oe_n`` = 0 the output buffer is enabled. |
| When these signals are high (logic 1) the corresponding buffers are disabled independent of the state of the drive mode bits dm<2:0>. |
| For example, if drive mode 2 (dm<2:0>=010) is selected, the input buffer is enabled by default. |
| If ``inp_dis=1`` for this drive mode, the input buffer enable default state will be overridden and the input buffer will be disabled and the input buffer |
| output will be driven low. |
| |
| Input buffer threshold select |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| The ``vtrip_sel`` signal alters the input buffer Vil and Vih specifications. |
| The Vil and Vih specifications are listed in the following table. |
| |
| .. table:: I/O Vil & Vih Specifications |
| :name: io vil vih |
| |
| +----------+-------------+-------+----------------+-----------------+-----------------+ |
| | Prameter | Description | Units | Condition | ``vtrip_sel=0`` | ``vtrip_sel=1`` | |
| +==========+=============+=======+================+=================+=================+ |
| | VIL | Input Low | V | * vddio < 2.7V | 0.3 \* vddio | * 0.3 \* vddio | |
| | | Voltage | | * vddio > 2.7V | | * 0.8 | |
| +----------+-------------+-------+----------------+-----------------+-----------------+ |
| | VIH | Input High | V | * vddio < 2.7V | 0.7 \* vddio | * 0.7 \* vddio | |
| | | Voltage | | * vddio > 2.7V | | * 2.0 | |
| +----------+-------------+-------+----------------+-----------------+-----------------+ |
| |
| When ``vtrip_sel`` = 0, the input buffer functions as a CMOS input buffer. |
| When ``vtrip_sel`` = 1, the input buffer functions as an LVTTL input buffer. |
| |
| I/O supply and Internal supply level input buffer outputs |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| The input buffer produces two outputs, a low voltage output and a high voltage output. |
| The low voltage output is produced by level shifting the external ``vddio`` referenced level input to the internal ``vcchib`` level output. |
| The high voltage output is produced by not level shifting the external ``vddio`` referenced level input to a buffered internal ``vddio_q`` level output. |
| |
| Selectable output edge rate control |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| The CMOS output buffer includes a slew rate control input signal ``slow``. |
| When this signal is activated (slow = 1) the output edge rate will be slower than the default setting (slow = 0). |
| |
| Hold state mode (latch previous state) |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| The I/O cell includes a hold state control signal ``hld_h_n``. |
| The purpose of this signal is to place the I/O cell into a low leakage mode while holding the previous state of the input controls, output controls |
| and data. |
| ``hld_h_n`` latches all control signals except ``enable_h``. |
| Specific timing constraints between the ``hld_h_n`` input and the other control signals must be satisfied to when entering and exiting the hold state |
| mode. |
| The Input signals which are latched by ``hld_h_n`` are dm<2:0>, slow, ``vtrip_sel``, ``inp_dis``, out, ``oe_n``. |
| The input signals, ``ibuf_sel``, ``vreg_en``, in :cell:`sky130_fd_io__sio` cell are also latched by ``hld_h_n``. |
| |
| During the hold mode, vccd can either be taken down to 0 or can float. |
| During this case, the I/O input buffer would continue to actively drive out as long as there are valid power supplies (vddio, vddio_q and vcchib). |
| |
| During the hold mode, the O/P can be configured to drive the PAD as described in Feature 9. |
| |
| I/O Mode Control Override during Power-up |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| The :cell:`sky130_fd_io__gpio` includes an I/O mode control override signal ``enable_h`` that is different from the ``oe_n`` signal. |
| The signal ``enable_h=0`` forces the output drive mode to Hi-Z. |
| The ``enable_h`` signal is intended to be at logic 0 during the chip power-up sequence. |
| During the power-up sequence this signal is driven low and the output driver is forced to a known state (Hi-Z). |
| This ensures that the output driver does not enter a crow-bar condition. |
| |
| Before the power-up sequence is completed, and the ``enable_h`` signal is asserted (logic 1), the data inputs and the control signals must be stable to |
| ensure that the output driver does not inadvertently enter a crow-bar condition while exiting the power-up sequence. |
| |
| The ``enable_h`` signal takes priority over the ``hld_h_n`` signal. |
| In other words, when the I/O mode control override signal ``enable_h`` is logic 0 and the ``hld_h_n`` control signal is active, the output driver will |
| be forced to drive Hi-Z. |
| The previous states on the pull-up and pull-down signals will be over written and set to the levels required to force the driver. |
| If the ``hld_h_n`` signal remains active after the ``enable_h`` signal transitions from logic 0 to logic 1, the forced condition (Hi-Z) will be held. |
| :numref:`mode control override and hold state` describes the ``enable_h``, ``hld_h_n`` functionality. |
| |
| .. table:: :cell:`sky130_fd_io__gpio` Mode Control Override & Hold State Operation |
| :name: mode control override and hold state |
| |
| +--------------+-------------+--------------+--------------+--------------------------------------------------+ |
| | ``enable_h`` | ``hld_h_n`` | Previous pad | Current pad | Notes | |
| | | | Output state | Output State | | |
| +==============+=============+==============+==============+==================================================+ |
| | 1 | 0 | 0 | 0 | | |
| +--------------+-------------+--------------+--------------+--------------------------------------------------+ |
| | 1 | 0 | 1 | 1 | | |
| +--------------+-------------+--------------+--------------+--------------------------------------------------+ |
| | 1 | 0 | Hi-Z | Hi-Z | | |
| +--------------+-------------+--------------+--------------+--------------------------------------------------+ |
| | 1 | 1 | Table 4.2-1 | Table 4.2-1 | | |
| +--------------+-------------+--------------+--------------+--------------------------------------------------+ |
| | 0 | X | X | Hi-Z | * Input buffer disabled; | |
| | | | | | * Output buffer Hi-Z (configured as dm<2:0>=000) | |
| +--------------+-------------+--------------+--------------+--------------------------------------------------+ |
| |
| Note that there is no latch present on the ``pad`` itself, but the data ``in`` gets latched whenever ``hld_h_n=0``. |
| Further whenever ``enable_h=0``, this data level shifter gets forced to a value which determines the ``pad`` current output state. |
| |
| Pad Access to the Core |
| ^^^^^^^^^^^^^^^^^^^^^^ |
| |
| The I/O provides pad access to the core. |
| ``pad_no_esd_h`` is directly connected to the pad. |
| ``pad_a_esd_0_h`` and ``pad_a_esd_1_h`` is connected to the pad through a 150 ohm ESD resistor. |
| |
| O/P configuration to drive the PAD in hold mode |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| The hold over ride signal (``hld_ovr``, active high, vcchib domain) signals the O/P buffer when to provide the flow-through functionality of the data |
| input to the output buffer and output enable in deep sleep mode. |
| |
| The functionality is defined in :numref:`normal and hold modes`. |
| |
| .. table:: Functionality during normal and hold modes |
| :name: normal and hold modes |
| |
| +-------------+-------------+-----------+-----------+ |
| | ``hld_ovr`` | ``hld_h_n`` | in | ``oe_n`` | |
| +=============+=============+===========+===========+ |
| | 0 | 0 | Latched | Latched | |
| +-------------+-------------+-----------+-----------+ |
| | 0 | 1 | Normal | Normal | |
| +-------------+-------------+-----------+-----------+ |
| | 1 | 0 | Over-ride | Over-ride | |
| +-------------+-------------+-----------+-----------+ |
| | 1 | 1 | Normal | Normal | |
| +-------------+-------------+-----------+-----------+ |
| |
| .. note:: |
| - Latched means that the input and output enable are latched. This is the same functionality as mentioned in :numref:`io vil vih`. |
| - Normal refers any mode other than Sleep modes |
| |
| :cell:`sky130_fd_io__gpio` Additional Features |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| The block diagram for the :cell:`sky130_fd_io__gpio` is shown in :numref:`sky130_fd_io__top_gpio block diagram`. |
| Note: Bus notation dm[3] denotes a 3 bit bus dm[2:0]. |
| These notations are interchangeably used in the document. |
| |
| .. figure:: figures/sky130_fd_io__gpio.png |
| :name: sky130_fd_io__top_gpio block diagram |
| :width: 5.69792in |
| :height: 7.07292in |
| |
| Block diagram for :cell:`sky130_fd_io__top_gpio` |
| |
| All :cell:`sky130_fd_io__gpio` provides additional functionality of analog connectivity to the PAD for CSD and other applications as described |
| below: |
| |
| :cell:`sky130_fd_io__gpio` Analog Connectivity Modes |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| The M0S8 :cell:`sky130_fd_io__gpio` integrates the AMUXBUS switches to two ``AMUXBUS_A`` and ``AMUXBUS_B`` analog buses. |
| These buses are used for both Capsense operation (as described in the CSD chapter), and general analog connectivity for Programmable Analog blocks and |
| ADFT. |
| |
| The analog functionality is controlled using three control signals. |
| |
| - ``analog_en`` enables the analog functions of the :cell:`sky130_fd_io__gpio` cell |
| |
| - ``analog_sel`` selects between ``AMUXBUS_A`` and ``AMUXBUS_B`` |
| |
| - ``analog_pol`` selects the function of the ``out`` input, which toggles between AMUXBUS and VSSIO or between VDDIO and AMUXBUS |
| |
| :numref:`analog functionality` describes the analog functionality as selected by the relevant control signals: |
| |
| .. table:: Analog functionality by the relevant control signals |
| :name: analog functionality |
| |
| +-------------------------------------------------+-------------------------------+-------------------------+ |
| | | Analog Function | Digital Function | |
| +---------------+----------------+----------------+---------------+---------------+------------+------------+ |
| | ``analog_en`` | ``analog_sel`` | ``analog_pol`` | out=0 | out=1 | Input | Output | |
| +===============+================+================+===============+===============+============+============+ |
| | 0 | X | X | N/C | N/C | Unaffected | Unaffected | |
| +---------------+----------------+----------------+---------------+---------------+------------+------------+ |
| | 1 | 0 | 0 | Vssio | ``amuxbus_a`` | Disabled | Unaffected | |
| +---------------+----------------+----------------+---------------+---------------+------------+------------+ |
| | 1 | 0 | 1 | ``amuxbus_a`` | Vddio | Disabled | Unaffected | |
| +---------------+----------------+----------------+---------------+---------------+------------+------------+ |
| | 1 | 1 | 0 | Vssio | ``amuxbus_b`` | Disabled | Unaffected | |
| +---------------+----------------+----------------+---------------+---------------+------------+------------+ |
| | 1 | 1 | 1 | ``amuxbus_b`` | Vddio | Disabled | Unaffected | |
| +---------------+----------------+----------------+---------------+---------------+------------+------------+ |
| |
| Note that digital output driver can be used concurrent with analog function |
| |
| Note the following: When the I/O is in an ``analog`` mode, the digital input buffer is disabled, but the output driver is not. |
| Both CSD and certain Programmable Analog applications make use of the digital output driver as a driver on analog signals/nodes. |
| The output driver performs the function as selected by its dm[3] inputs (which may be either OFF or not). |
| |
| Note that these modes only concern analog functions ``internal`` to the :cell:`sky130_fd_io__gpio`, i.e. |
| using the internal AMUXBUS switches. |
| |
| *Shielding for Analog Mux busses:* AMUX switches can also be used to source and sink currents from CSD IDAC block to :cell:`sky130_fd_io__gpio` pins. |
| The current IDAC for CSD block can be used to supply/ source current through AMUX to any :cell:`sky130_fd_io__gpio` pin. |
| The maximum current can be up to 1mA and thus the AMUX layout needs to be designed keeping EM/IR considerations in mind. |
| |
| *Usage of ``VSSIO_Q`` in AMUX:* The CSD pull-down transistor used in AMUX is the only one that uses the ``vssio_q`` connection to the I/O. |
| In case the AMUX is used for CSD operation, ``vssio_q`` can alternatively be connected to VSSA without concerns for noise. |
| Care must be taken that VSSIO and ``VSSIO_Q`` should not be shorted at VSSIO pad when used in this configuration. |
| |
| Changes to Analog Mux for :cell:`sky130_fd_io__gpiov2` and :cell:`sky130_fd_io__gpio_ovtv2` |
| ******************************************************************************************* |
| |
| 1. The input buffer is no longer disabled inside :cell:`sky130_fd_io__gpiov2` and :cell:`sky130_fd_io__gpio_ovtv2` automatically when analog mux is |
| enabled (``analog_en=1``). |
| This was done to unblock self-testing of I/O cells. |
| The firmware needs to ensure that ``inp_dis=1`` when ``analog_en=1``. |
| |
| 2. Power mode behavior was modified for both :cell:`sky130_fd_io__gpiov2` and :cell:`sky130_fd_io__gpio_ovtv2`. |
| An extra control signal ``enable_vswitch_h`` is added to have better control over the power mode behavior. |
| The following table gives the supplies, control signals and their role: |
| |
| .. list-table:: Supplies, control signals and their definition |
| :name: supplies control signals |
| :widths: 10 90 |
| :header-rows: 1 |
| |
| * - Signal |
| - I/O-Behavior |
| * - vddio |
| - Digital supply for the I/O-cell. This supply is used to implement all digital input/output functions. It can be connected to the main system digital supply (vddd) or to an independent vddio supply. |
| * - vdda |
| - Analog supply for the I/O-cell. This supply is used to implement the analog switches associated with amuxbus and CSD behavior. This supply is either connected to the global analog supply in the system or tied off to vddio when amuxbus functionality is not used. |
| * - vccd |
| - The main regulated (1.8V) core supply. This supply is the relative supply of most of the configuration/control signals coming into the I/O-cell and is used for level translation only. No I/O circuits are powered using this supply. |
| * - vcchib |
| - The hibernate regulated supply (1.8V). This supply is the relative supply for the I/O data interface (in, out, ``oe_n``) and is also used mainly for level translation only. This supply can also be used as a reference for the :cell:`sky130_fd_io__gpio` input buffer. |
| * - ``enable_h`` |
| - The master enable signal to the I/O-cell's digital section. This signal is in the vddio voltage domain. This signal is guaranteed to establish early during the vddio power ramp to enable glitch free operation during power up and down ramps. When asserted (1), this signal guarantees that vddio is valid and that either ``hld_h_n=0`` or all LV control signals are valid. |
| * - ``enable_inp_h`` |
| - This signal must be tied off to 0 or 1. Its value controls the power state of the input buffer when ``enable_h=0``. This is a special feature used on 2 I/O-cells to allow for test-mode entry while XRES=0. |
| * - ``enable_vdda_h`` |
| - The master enable signal to the I/O-cell's analog section. This signal is guaranteed to establish early during the power ramp to enable glitch free operation during power up and down ramps. It is used to power up/down all vdda powered circuits in the I/O-cell. When asserted (1), this signal guarantees that vdda and vddio are valid, and that either ``hld_h_n=0`` or all LV control signals are valid. |
| * - ``enable_vswitch_h`` |
| - A signal that controls the use of the pumped-up vswitch supply. When asserted (1), this signal guarantees that vswitch and vdda and vddio are valid, and that either ``hld_h_n=0`` or all LV control signals are valid. |
| * - ``enable_vddio`` |
| - A signal that controls the use of the vcchib supply in some of the I/O circuits. When asserted (1), this signal guarantees that vcchib and all HV supplies are valid, and that either ``hld_h_n=0`` or all LV control signals are valid. |
| * - ``hld_h_n`` |
| - This signal controls the iso-latches in the I/O-cell. It transitions low to freeze the state of the I/O-cell such that the active supply can be removed and the IO continues to function as configured. |
| * - ``hld_ovr`` |
| - When ``hld_h_n=1`` this signal is ignored, when ``hld_h_n=0`` all control signals including this signal are frozen. The frozen value of this signal determines if the ``out`` and ``oe_n`` are frozen or not. 0: the I/O latches all of its configuration and control inputs as well as out and ``oe_n``. 1: only the configuration and control inputs are latched. The logic in IOSS makes sure that ``hld_ovr=1`` never occurs when the system goes into STOP mode (which removes vcchib). |
| |
| |
| The normal operational state of the analog mux is when all supplies are present and all qualifiers asserted. |
| However, there are many transient and special states that occur during power sequencing and during low power modes. |
| |
| Input buffer enable during reset (``enable_inp_h``) |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| The ``enable_inp_h`` input determines the power on/off state of the digital input buffer when the I/O is disabled; i.e. |
| ``enable_h`` is ``0``. |
| This pin is intended to be tied off to 0 or 1 (using the ``tie_hi_esd`` and ``tie_lo_esd`` signals on the I/O cell), depending on the need to have the |
| input buffer enabled while ``enable_h=0``. |
| The truth table for ``enable_inp_h`` is given below in :numref:`enable_inp_h truth table`: |
| |
| .. table:: ``enable_inp_h`` truth table |
| :name: enable_inp_h truth table |
| |
| +--------------+------------------+---------------+---------------+ |
| | ``enable_h`` | ``enable_inp_h`` | * ``Inp_dis`` | Input Buffer | |
| | | | * dm[3] | State | |
| +==============+==================+===============+===============+ |
| | 0 | 0 | X | Disabled | |
| +--------------+------------------+---------------+---------------+ |
| | 0 | 1 | X | Enabled | |
| +--------------+------------------+---------------+---------------+ |
| | 1 | X | Valid | F(``inp_dis`` | |
| | | | | , dm[3]) | |
| +--------------+------------------+---------------+---------------+ |
| |
| |
| Use of ``enable_inp_h`` at chip level: ``enable_inp_h`` is a hard-tie to either ``tie_hi_esd`` or ``tie_lo_esd`` of the :cell:`sky130_fd_io__gpio` and |
| should not be register controlled. |
| The ``enable_inp_h`` functionality is used to implement the Power-On-Reset Bypass Mode in SRSSv2: while XRES is asserted, SRSSv2 listens for a magic key |
| on the SWD interface. |
| This requires that primary SWD interface :cell:`sky130_fd_io__gpio` cells have their input buffers enabled, while XRES is asserted (``enable_inp_h`` is |
| ``tie_hi_esd``). |
| All other :cell:`sky130_fd_io__gpio` cells have their input buffers disabled while XRES is asserted (``enable_inp_h`` is ``tie_lo_esd``). |
| |
| :cell:`sky130_fd_io__gpiov2` Additional Features |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| The block diagram for :cell:`sky130_fd_io__gpiov2` is shown below in :numref:`sky130_fd_io__gpiov2 block diagram`. |
| Note: bus notation dm[3] denotes a 3 bit bus dm[2:0]. |
| These notations are used interchangeably in the document. |
| |
| .. figure:: figures/sky130_fd_io__top_gpiov2.png |
| :name: sky130_fd_io__gpiov2 block diagram |
| :width: 5.55000in |
| :height: 7.57000in |
| |
| :cell:`sky130_fd_io__gpiov2` Block Diagram |
| |
| :cell:`sky130_fd_io__gpiov2` provides all functionality as the original :cell:`sky130_fd_io__gpio` does. |
| In addition, it provides the following extra features: |
| |
| - Improved hysteresis of 10% across the entire supply range in CMOS mode |
| |
| - Improved hysteresis of 100mV in LVTTL mode |
| |
| - Improvements to meet I2C fall time with a certain minimum bus cap. Support only for Standard and Fast I2C modes. :numref:`sky130_fd_io__gpiov2 output buffer` gives the different output buffer configurations. |
| |
| - Supports 1.8V signaling on PAD independent of vddio. |
| |
| 1. Full spec support for Vcchib ≥ 1.6 |
| |
| 2. Limited functional support down to Vcchib ≥ 1.4 (Deep-sleep mode). 15Mhz CMOS operation. |
| |
| - Improvements to the analog mux to support multiple power modes. |
| |
| - Low-voltage DFT support (Input buffer runs at lower supply voltage than spec'ed) |
| |
| Following additional pins have been added to support some of the above features: |
| |
| - ``ib_mode_sel:`` This signal is used select between VDDIO and VCCHIB based thresholds (0=VDDIO, 1=VCCHIB) |
| |
| - ``enable_vddio:`` This qualifier lets the :cell:`sky130_fd_io__gpio` know that VDDIO is either present (1) or absent (0) in VCCHIB domain. Currently, a skew of 100ns is allowed between ``enable_h`` and ``enable_vddio`` |
| |
| - ``enable_vswitch_h:`` These qualifiers let the :cell:`sky130_fd_io__gpio` know that VSWITCH is either present (1) or absent (0) in VSWITCH domain |
| |
| Input Buffer selection for :cell:`sky130_fd_io__gpiov2` is explained below in :numref:`sky130_fd_io__gpiov2 input buffer trip point`: |
| |
| .. table:: Input Buffer Trip point selection for :cell:`sky130_fd_io__gpiov2` |
| :name: sky130_fd_io__gpiov2 input buffer trip point |
| |
| +--------+-----------------+---------------+-------------------------+--------------------+ |
| | Mode | ``ib_mode_sel`` | ``vtrip_sel`` | Input Buffer Trip Point | Description | |
| +========+=================+===============+=========================+====================+ |
| | CMOS | 0 | 0 | 30%/70% of Vddio | CMOS input buffer | |
| +--------+-----------------+---------------+-------------------------+--------------------+ |
| | TTL | 0 | 1 | * VIL=0.8V, Vddio>2.7V | LVTTL input buffer | |
| | | | | * VIH=2.0V, Vddio>2.7V | | |
| +--------+-----------------+---------------+-------------------------+--------------------+ |
| | VCCHIB | 1 | 0/1 | VIH=1.26V, VIL=0.54V | Supports 1.8V | |
| | | | | | signaling on PAD | |
| +--------+-----------------+---------------+-------------------------+--------------------+ |
| |
| .. note:: |
| If :cell:`sky130_fd_io__gpiov2` or :cell:`sky130_fd_io__gpio_ovtv2` is used to catch an external interrupt in hibernate mode, then care must be |
| taken to have ``ib_mode_sel`` in logic 0 state before entering low-power modes. |
| |
| This is because VCCHIB mode will not work in hibernate mode. |
| |
| |
| .. table:: :cell:`sky130_fd_io__gpiov2` output buffer configurations |
| :name: sky130_fd_io__gpiov2 output buffer |
| |
| +---------+----------+------+-------------------+-------------------+---------------------+---------------------------+ |
| | dm[3] | ``oe_n`` | slow | Driver PU | Driver PU | Driver PD | Description | |
| | | | | (Rise Time Specs) | (Rise Times- Sch) | (Fall Time Specs) | | |
| +=========+==========+======+===================+===================+=====================+===========================+ |
| | 000/001 | x | x | Disabled | Disabled | Disabled | Tri-state | |
| +---------+----------+------+-------------------+-------------------+---------------------+---------------------------+ |
| | x | 1 | x | Disabled | Disabled | Disabled | Tri-state | |
| +---------+----------+------+-------------------+-------------------+---------------------+---------------------------+ |
| | 010 | 0 | 0 | Resistive (5K) | | Strong-Fast | * WPU | |
| | | | | | | (2-12ns) | * SPD Mode | |
| | | | | | | | * 25pF load | |
| +---------+----------+------+-------------------+-------------------+---------------------+---------------------------+ |
| | 010 | 0 | 1 | Resistive (5K) | | Strong-Slow | | |
| | | | | | | (10-60ns) | | |
| +---------+----------+------+-------------------+-------------------+---------------------+---------------------------+ |
| | 011 | 0 | 0 | Strong-Fast | | Resistive (5K) | * SPU | |
| | | | | (2-12ns) | | | * WPD Mode | |
| | | | | | | | * 25pF load | |
| +---------+----------+------+-------------------+-------------------+---------------------+---------------------------+ |
| | 011 | 0 | 1 | Strong-Slow | | Resistive (5K) | | |
| | | | | (10-60ns) | | | | |
| +---------+----------+------+-------------------+-------------------+---------------------+---------------------------+ |
| | 100 | 0 | 0 | Open-Drain | | Strong-Fast | * OPD-PU | |
| | | | | | | (2-12ns) | * SPD Mode | |
| | | | | | | | * I2C Standard Mode | |
| | | | | | | | * I2C FS+ Mode | |
| +---------+----------+------+-------------------+-------------------+---------------------+---------------------------+ |
| | 100 | 0 | 1 | Open-Drain | | I2C Fast Mode | * I2C Fast Mode | |
| | | | | | | (6.22/20ns - 250ns) | * Cbus>200pF | |
| | | | | | | | * Rext≥1K | |
| | | | | | | | * Rext= tr/(0.8463\*Cbus) | |
| +---------+----------+------+-------------------+-------------------+---------------------+---------------------------+ |
| | 101 | 0 | 0 | Strong-Fast | | Open-Drain | * SPU | |
| | | | | (2-12ns) | | | * OPD-PD Mode | |
| +---------+----------+------+-------------------+-------------------+---------------------+---------------------------+ |
| | 101 | 0 | 1 | Strong-Slow | | Open-Drain | * WPU | |
| | | | | (10-60ns) | | | * OPD-PD Mode | |
| +---------+----------+------+-------------------+-------------------+---------------------+---------------------------+ |
| | 110 | 0 | 0 | Strong-Fast | | Strong-Fast | * SPU | |
| | | | | (2-12ns) | | (2-12ns) | * SPD Mode | |
| +---------+----------+------+-------------------+-------------------+---------------------+---------------------------+ |
| | 110 | 0 | 1 | Strong-Slow | | Strong-Slow | * SPU | |
| | | | | (10-60ns) | | (10-60ns) | * SPD Mode | |
| +---------+----------+------+-------------------+-------------------+---------------------+---------------------------+ |
| | 111 | 0 | x | Resistive (5K) | | Resistive (5K) | * WPU | |
| | | | | | | | * WPD Mode | |
| +---------+----------+------+-------------------+-------------------+---------------------+---------------------------+ |
| |
| |
| :cell:`sky130_fd_io__gpio_ovtv2` Additional Features |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| .. figure:: figures/sky130_fd_io__top_gpio_ovtv2.png |
| :name: sky130_fd_io__gpio_ovtv2 block diagram |
| :width: 5.73000in |
| :height: 7.07000in |
| |
| :cell:`sky130_fd_io__gpio_ovtv2` Block Diagram |
| |
| :cell:`sky130_fd_io__gpio_ovtv2` provides all functionality as :cell:`sky130_fd_io__gpiov2` does. |
| In addition, it provides the following extra features |
| |
| - Over-voltage tolerant |
| |
| - Provides better pull-down drive strength (V:sub:`OL`\ =0.6V @ I\ :sub:`OL`\ =10mA for VDDIO=1.71V) |
| |
| - Compliance to I2C standard, fast, fast-plus and high-speed modes |
| |
| - Provides selectable trip points feature. Using an internal reference generator, input buffer trip points can be adjusted over a wide range of value. The max frequency of operation is 66MHz when input signaling is greater than 2.2V. When input signaling is between 1.8V and 2.2V, the max frequency is 33 MHz. The minimum value of input signaling for which full functional specs are met is 1.8v. |
| |
| - :cell:`sky130_fd_io__gpio_ovtv2` is not critical corner compliant as it uses the MIM cap from :lib:`sky130_fd_pr` library. :cell:`sky130_fd_io__gpio_ovtv2` cannot be placed in corner of the die. |
| |
| Following additional pins have been added to support some of the above features: |
| |
| - ``ib_mode_sel<1:0>:`` Used to configure input buffer trip points. Refer to :numref:`Input Buffer gpio_ovtv2` |
| |
| - ``hys_trim:`` Used to increase hysteresis feedback for input buffer in ``Ref Mode``. Set to ``1`` for input signaling voltage > 2.2V and ``0`` otherwise. |
| |
| - ``slew_ctl<1:0>`` : Used to vary slew rate in I2C mode (dm=100). Refer to :numref:`sky130_fd_io__gpio_ovtv2 slew rate control` |
| |
| - ``enable_vddio_lv:`` This qualifier lets the :cell:`sky130_fd_io__gpio` know that VDDIO is either present (1) or absent (0) in VCCHIB domain |
| |
| - ``enable_vswitch_h:`` This qualifier lets the :cell:`sky130_fd_io__gpio` know that VSWITCH is either present (1) or absent (0) in VSWITCH domain |
| |
| Feature: Selectable Trip point feature |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| The input buffer in :cell:`sky130_fd_io__gpio_ovtv2` supports the following modes as given in :numref:`Input Buffer gpio_ovtv2` below: |
| |
| |
| .. table:: Input Buffer modes in :cell:`sky130_fd_io__gpio_ovtv2` and their description |
| :name: Input Buffer gpio_ovtv2 |
| |
| +--------+-----------------+---------------+-----------------------------+-------------------------------------------+ |
| | Mode | ``ib_mode_sel`` | ``vtrip_sel`` | Input Buffer Trip Point | Description | |
| | | <1:0> | | | | |
| +========+=================+===============+=============================+===========================================+ |
| | CMOS | 00 | 0 | 30%/70% of Vddio | CMOS input buffer | |
| | | | | | | |
| +--------+-----------------+---------------+--------------+--------------+-------------------------------------------+ |
| | TTL | 00 | 1 | * VIL=0.8V | * VIH=2.0V | LVTTL input buffer | |
| | | | | * Vddio>2.7V | * Vddio>2.7V | | |
| +--------+-----------------+---------------+--------------+--------------+-------------------------------------------+ |
| | VCCHIB | 01 | 0/1 | * VIH=1.26V | Supports 1.8V signalling on PAD | |
| | | | | * VIL=0.54V | | |
| +--------+-----------------+---------------+-----------------------------+-------------------------------------------+ |
| | Ref | 10/11 | 0/1 | 30%/70% of ``vinref`` | * vinref = VDDIO\*(13n+184)/600 | |
| | | | | | * This feature works in conjunction with: | |
| | | | | | * ::cell:`sky130_fd_io__top_gpiovrefv2` | |
| | | | | | * ::cell:`sky130_fd_io__top_vrefcapv2` | |
| +--------+-----------------+---------------+-----------------------------+-------------------------------------------+ |
| |
| .. table:: :cell:`sky130_fd_io__gpio_ovtv2` Slew rate control with slow and ``slew_ctl<1:0>`` |
| :name: sky130_fd_io__gpio_ovtv2 slew rate control |
| |
| +-------+----------+------+--------------+-------------------+-------------------------------------------+---------------+ |
| | dm[3] | ``oe_n`` | slow | ``slew_ctl`` | Driver PU | Driver PD (Fall Time Specs) | Description | |
| | | | | [2] | (Fall Time Specs) | | | |
| +=======+==========+======+==============+===================+===========================================+===============+ |
| | * 000 | x | x | x | Disabled | Disabled | Tri-state | |
| | * 001 | | | | | | | |
| +-------+----------+------+--------------+-------------------+-------------------------------------------+---------------+ |
| | x | 1 | x | x | Disabled | Disabled | Tri-state | |
| +-------+----------+------+--------------+-------------------+-------------------------------------------+---------------+ |
| | 010 | 0 | 0 | x | Resistive (5K) | Strong-Fast (2-12ns) | * WPU | |
| +-------+----------+------+--------------+-------------------+-------------------------------------------+ * SPD Mode | |
| | 010 | 0 | 1 | x | Resistive (5K) | Strong-Slow (10-60ns) | * 25pF load | |
| +-------+----------+------+--------------+-------------------+-------------------------------------------+---------------+ |
| | 011 | 0 | 0 | x | Strong-Fast | Resistive (5K) | * SPU | |
| | | | | | (2-12ns) | | | |
| +-------+----------+------+--------------+-------------------+-------------------------------------------+ * WPD Mode | |
| | 011 | 0 | 1 | x | Strong-Slow | Resistive (5K) | * 25pF load | |
| | | | | | (10-60ns) | | | |
| +-------+----------+------+--------------+-------------------+-------------------------------------------+---------------+ |
| | 100 | 0 | 0 | x | Open-Drain | Strong-Fast (2-12ns) | * OPD-PU | |
| | | | | | | | * SPD Mode | |
| +-------+----------+------+--------------+-------------------+-------------------------------------------+---------------+ |
| | 100 | 0 | 1 | 11 | Open-Drain | * HS mode (Vext=<2.8, F=1.7MHz) (10-80ns) | To be used in | |
| | | | | | | * FS+ mode, Vext<=2.8V (20-120ns) | I2C mode | |
| | | | +--------------+ +-------------------------------------------+ | |
| | | | | 01 | | * HS mode (Vext>2.8, F=1.7MHz) (10-80ns) | | |
| | | | | | | * FS+ mode, Vext>2.8 (20-120ns) | | |
| | | | +--------------+ +-------------------------------------------+ | |
| | | | | 10 | | HS mode (Vext<3.3) (20-160ns) | | |
| | | | +--------------+ +-------------------------------------------+ | |
| | | | | 00 | | * HS mode (Vext>3.0) | | |
| | | | | | | * FS mode (20-160ns) | | |
| +-------+----------+------+--------------+-------------------+-------------------------------------------+---------------+ |
| | 101 | 0 | 0 | x | Strong-Fast | Open-Drain | * SPU | |
| | | | | | (2-12ns) | | * OPD-PD Mode | |
| +-------+----------+------+--------------+-------------------+-------------------------------------------+---------------+ |
| | 101 | 0 | 1 | x | Strong-Slow | Open-Drain | * WPU | |
| | | | | | (10-60ns) | | * OPD-PD Mode | |
| +-------+----------+------+--------------+-------------------+-------------------------------------------+---------------+ |
| | 110 | 0 | 0 | x | Strong-Fast | Strong-Fast (2-12ns) | * SPU | |
| | | | | | (2-12ns) | | * SPD Mode | |
| +-------+----------+------+--------------+-------------------+-------------------------------------------+---------------+ |
| | 110 | 0 | 1 | x | Strong-Slow | Strong-Slow (10-60ns) | * SPU | |
| | | | | | (10-60ns) | | * SPD Mode | |
| +-------+----------+------+--------------+-------------------+-------------------------------------------+---------------+ |
| | 111 | 0 | x | x | Resistive (5K) | Resistive (5K) | * WPU | |
| | | | | | | | * WPD Mode | |
| +-------+----------+------+--------------+-------------------+-------------------------------------------+---------------+ |
| |
| :cell:`sky130_fd_io__sio` Additional Features |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| The block diagram for Special I/O (:cell:`sky130_fd_io__sio`) macro is shown below in :numref:`sky130_fd_io__sio_macro block diagram` |
| |
| .. figure:: figures/sky130_fd_io__sio_macro.png |
| :name: sky130_fd_io__sio_macro block diagram |
| |
| Block diagram of :cell:`sky130_fd_io__sio_macro` |
| |
| The :cell:`sky130_fd_io__sio_macro` consists of 2 :cell:`sky130_fd_io__sio` cells (:numref:`sky130_fd_io__top_sio block diagram`) and a Reference generator cell. |
| The :cell:`sky130_fd_io__sio` cells are ONLY available as pairs. |
| The block diagram of :cell:`sky130_fd_io__sio` is shown below in :numref:`sky130_fd_io__top_sio block diagram`. |
| Note that dm[3] denotes a 3 bit bus dm[2:0]. |
| These notations are used interchangeably in the document. |
| |
| 1. I/O-Cell :cell:`sky130_fd_io__sio` |
| |
| .. figure:: figures/sky130_fd_io__sio.png |
| :name: sky130_fd_io__top_sio block diagram |
| :width: 5.79167in |
| :height: 6.14583in |
| |
| Block diagram for :cell:`sky130_fd_io__top_sio` |
| |
| The :cell:`sky130_fd_io__sio` provides the following additional features over the :cell:`sky130_fd_io__gpio`: |
| |
| - Regulated output buffer |
| |
| - Differential input buffer |
| |
| The :cell:`sky130_fd_io__sio` cell adds a differential input buffer and a means for controlling or regulating the output buffer output high voltage level (Voh). |
| The :cell:`sky130_fd_io__sio` cell has two additional control inputs (``vreg_en``, ``ibuf_sel``), and an input buffer reference voltage (``vinref``), and an output buffer |
| reference voltage (``voutref``). |
| The added control inputs are used to select the input buffer type (single ended or differential) and output buffer type (CMOS or regulated). |
| The input buffer configuration is selected based on the state of the ``ibuf_sel`` control input. |
| If this signal is low the standard single ended (:cell:`sky130_fd_io__gpio`) input buffer is selected, otherwise the differential input buffer is |
| selected. |
| |
| The following tables 13 and 14 describe the :cell:`sky130_fd_io__sio` cell configurations based on the added control signals. |
| |
| .. table:: :cell:`sky130_fd_io__sio` Input Buffer Truth Table |
| :name: sio Input Buffer |
| |
| +--------------+--------------+-------------+---------------+------------------+--------------------+ |
| | ``ibuf_sel`` | ``Vref_sel`` | ``voh_sel`` | ``vtrip_sel`` | Trip Point | Description | |
| | | [1:0] | [2:0] | | (Vinref) | | |
| +==============+==============+=============+===============+==================+====================+ |
| | 0 | X | X | 0 | 30% / 70% | CMOS input buffer | |
| | | | | | | w/wo Hysteresis | |
| +--------------+--------------+-------------+---------------+------------------+--------------------+ |
| | 0 | X | X | 1 | * min (0.8V,30%) | LVTTL input buffer | |
| | | | | | * min (2.0V,70%) | w/wo Hysteresis | |
| +--------------+--------------+-------------+---------------+------------------+--------------------+ |
| | 1 | 00 | X | 0 | 50% of vddio | Differential input | |
| | | | | | | buffer | |
| +--------------+--------------+-------------+---------------+------------------+--------------------+ |
| | 1 | 00 | X | 1 | 40% of vddio | Differential input | |
| | | | | | | buffer | |
| +--------------+--------------+-------------+---------------+------------------+--------------------+ |
| | 1 | 01 | 000 | 0 | 0.5 \* Vohref | Differential input | |
| | | | | | | buffer | |
| +--------------+--------------+-------------+---------------+------------------+--------------------+ |
| | 1 | 01 | 000 | 1 | Vohref | Differential input | |
| | | | | | (buffered) | buffer | |
| +--------------+--------------+-------------+---------------+------------------+--------------------+ |
| | 1 | 10/11 | 000 | 0 | 0.5 \* | Differential input | |
| | | | | | ``amuxbus_a/b`` | buffer | |
| +--------------+--------------+-------------+---------------+------------------+--------------------+ |
| | 1 | 10/11 | 000 | 1 | ``amuxbus_a/b`` | Differential input | |
| | | | | | (buffered) | buffer | |
| +--------------+--------------+-------------+---------------+------------------+--------------------+ |
| |
| The ``vreg_en`` control input selects the output buffer configuration. |
| If this signal is low the standard CMOS (:cell:`sky130_fd_io__gpio`) output configuration is selected. |
| The regulated output configuration is selected ONLY if the dm<2:0> bits are correctly set to the strong pull up configuration. |
| If the dm bits are set to any other configuration other than strong pull up, the regulated output buffer will be disabled, and the standard CMOS |
| output buffer would take over. |
| |
| .. table:: :cell:`sky130_fd_io__sio` Output Buffer Truth Table |
| :name: sio Output Buffer |
| |
| +-------------+------+--------------+-------------+--------------------+---------------------------------------+ |
| | ``Vreg_en`` | slow | ``Vref_seL`` | ``Voh_sel`` | Voutref for o/p | Description | |
| | | | [1:0] | [2:0] | buffer | | |
| +=============+======+==============+=============+====================+=======================================+ |
| | 0 | 0 | X | X | vohref | * Output driver in CMOS mode | |
| | | | | | | * Max slew rate | |
| +-------------+------+--------------+-------------+--------------------+---------------------------------------+ |
| | 0 | 1 | X | X | vohref | * Output driver in CMOS mode | |
| | | | | | | * Reduced slew rate | |
| +-------------+------+--------------+-------------+--------------------+---------------------------------------+ |
| | 1 | 0 | 00/01 | [0-7] | Refer to | * Output driver in Regulate mode | |
| | | | | | :numref:`voh sel` | * VOH is vohref based | |
| +-------------+------+--------------+-------------+--------------------+---------------------------------------+ |
| | 1 | 0 | 10/11 | [0-7] | Refer to | * Output driver in Regulate mode | |
| | | | | | :numref:`voh sel` | * VOH is ``amuxbus_a/b`` based. | |
| +-------------+------+--------------+-------------+--------------------+---------------------------------------+ |
| | 1 | 1 | 00/01 | [0-7] | Refer to | * Output driver in Regulate slow mode | |
| | | | | | :numref:`voh sel` | * VOH is vohref based. | |
| +-------------+------+--------------+-------------+--------------------+---------------------------------------+ |
| | 1 | 1 | 10/11 | [0-7] | Refer to | * Output driver in Regulate slow mode | |
| | | | | | :numref:`voh sel` | * VOH is ``amuxbus_a/b`` based. | |
| +-------------+------+--------------+-------------+--------------------+---------------------------------------+ |
| |
| Note: The ``voh_sel[2:0]`` combinations are found in the :numref:`voh sel` |
| |
| |
| Notice that the input buffer and output buffer configurations can be selected independently. |
| For example, the standard single-ended input buffer and the regulated output buffer can be selected. |
| |
| :cell:`sky130_fd_io__refgen` (Reference Generator) Features |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| The block diagram of :cell:`sky130_fd_io__refgen` used in :cell:`sky130_fd_io__sio_macro` is shown below in :numref:`sky130_fd_io__refgen block diagram`: |
| |
| .. figure:: figures/sky130_fd_io__top_refgen.png |
| :name: sky130_fd_io__refgen block diagram |
| :width: 6.50000in |
| :height: 6.25417in |
| |
| Block diagram for :cell:`sky130_fd_io__refgen` |
| |
| The :cell:`sky130_fd_io__refgen` block :cell:`sky130_fd_io__top_refgen` is an opamp connected in negative feedback loop configuration to generate the output |
| reference voltage ``voutref``. |
| The input to the opamp (vref) can be selected from any of the three input references (vohref, ``amuxbus_a`` or ``amuxbus_b`` ). |
| The input reference is selected based on the control input ``vref_sel[1:0]`` (:numref:`io drive strength modes`). |
| The voltage voutref is ``voh_out+Vgs`` (diode-connected nFET). |
| In the Regulated Output Buffer, the voltage voutref is applied to the gate of a nFET (of the same type as the diode-connected nFET used to generate |
| the voutref signal) and the output is the source of that nFET. |
| |
| Consequently, this configuration compensates for the V\ :sub:`GS` voltage drop of the source follower in the Regulated Output Buffer circuit and |
| allows its output to be pulled to the desired V\ :sub:`OH` voltage level, nominally equal to vohref value. |
| The actual V\ :sub:`OH` level and its tolerance relative to the vohref voltage depends on the output current load conditions. |
| The acceptable variation in V\ :sub:`OH`-vohref tolerance versus output current load is specified in DC Specification tables. |
| For a given input reference, vref, the value of voutref can varied by selecting different tap point from the resistive divider in the feedback path |
| (:numref:`sky130_fd_io__refgen block diagram`). |
| The resistors are not equal in value and are skewed to generate standard voltages (1.2, 1.5, 1.8, 2, 2.5, 3.3, 4.8), when the bandgap voltage (1.2V) |
| is connected to vohref. |
| This selection is based on the select signals , ``voh_sel[2:0]`` (:numref:`voh sel`). |
| The output regulated value ``(voh_out)`` equals ``vref/n``, where n=Rtap/Rtotal (:numref:`voh sel`). |
| |
| .. table:: Input Reference selection |
| :name: input reference selection |
| |
| +--------------+---------------+ |
| | ``Vref_sel`` | Ref.Selected | |
| | [1:0] | | |
| +==============+===============+ |
| | 00 | Vohref | |
| +--------------+---------------+ |
| | 01 | Vohref | |
| +--------------+---------------+ |
| | 10 | ``amuxbus_a`` | |
| +--------------+---------------+ |
| | 11 | ``amuxbus_b`` | |
| +--------------+---------------+ |
| |
| Note: The voltage range for the analog reference inputs ``(vref/amuxbus_a/amuxbus_b)`` is 1.0-4.6V and is dependent on the I/O supply, shown in :numref:`analog reference input` below. |
| |
| .. table:: Analog Reference Input |
| :name: analog reference input |
| |
| +-------------------------+--------------------------------+ |
| | I/O Supply (vddio) | analog input to reference | |
| | | ``(vref/amuxbus_a/amuxbus_b)`` | |
| +=========================+================================+ |
| | 1.65V <= vddio < = 3.7V | 1 - (vddio-0.5) | |
| +-------------------------+--------------------------------+ |
| | 3.7V< vddio <= 5.6V | 1 - (vddio-1) | |
| +-------------------------+--------------------------------+ |
| |
| .. table:: V\ :sub:`OH` reference selection |
| :name: voh sel |
| |
| +------------------+-----------------+ |
| | ``voh_sel[2:0]`` | n = Rtap/Rtotal | |
| +==================+=================+ |
| | 000 | 1 | |
| +------------------+-----------------+ |
| | 001 | 0.8 | |
| +------------------+-----------------+ |
| | 010 | 0.67 | |
| +------------------+-----------------+ |
| | 011 | 0.6 | |
| +------------------+-----------------+ |
| | 100 | 0.48 | |
| +------------------+-----------------+ |
| | 101 | 0.4 | |
| +------------------+-----------------+ |
| | 110 | 0.36 | |
| +------------------+-----------------+ |
| | 111 | 0.25 | |
| +------------------+-----------------+ |
| |
| |
| Note: |
| |
| - All the ``voh_sel[2:0]`` values cannot be selected for entire reference range (1V-4.6V). The upper value on VOH is limited to ``Vddio_q - 400mV``. |
| |
| - The resistors are not equal in value and are skewed to generates standard voltages (1.2, 1.5, 1.8, 2, 2.5, 3.3, 4.8), when band-gap voltage (1.2V) is connected to vref. |
| |
| The input buffer reference ``vinref`` can be derived from four sources: vinref, half of ``voh_out``, and 40% or 50% of the I/O supply voltage ``vcc_io``. |
| The ``vinref`` voltage level selected is based on the input buffer voltage trip point select ``vtrip_sel`` and voltage reference select ``vref_sel`` |
| control inputs. |
| |
| The truth tables for :cell:`sky130_fd_io__refgen` are shown in :numref:`sky130_fd_io__sio input buffer voltage` and :numref:`sky130_fd_io__refgen truth table`. |
| |
| Important notes about :cell:`sky130_fd_io__sio` macro: |
| |
| - Each pair of :cell:`sky130_fd_io__sio`'s share a single RefGen block. This block allows for the generation of a ``regulated mode`` selectable input buffer trip point and output driver level. |
| |
| - The I/Os retain the ability to disable the input buffer for I/O's with an active analog function. For :cell:`sky130_fd_io__sio`'s not connected to any analog component this input must be tied off. |
| |
| - The input reference (Vohref) to the RefGen block is assumed to be 1.2V. |
| |
| - The RefGen block also connects to ``amuxbus_a`` and ``amuxbus_b`` for reference generation. Use case: An external pin as reference voltage. |
| |
| - Regulated output buffer mode and differential input buffer mode cannot be used in low-power modes where VCCD is unavailable. It is the responsibility of firmware to ensure that the :cell:`sky130_fd_io__sio` is not configured in these modes before entering low-power modes. |
| |
| - If :cell:`sky130_fd_io__sio_macro` is being used as an I2C pin to drive SDA, the following configuration bits need to be set (CMOS input buffer and open-drain output)—The configuration bits are given w.r.t a single :cell:`sky130_fd_io__sio` |
| |
| - dm<2:0>=100 (To enable the 20mA driver (I2C FS+ mode and input buffer) |
| |
| - ``ibuf_sel=0`` (To enable the SE buffer) |
| |
| - ``inp_dis=0`` (To enable input buffer) |
| |
| - ``vtrip_sel=0`` (To enable CMOS input buffer mode) |
| |
| - All other control signals are don't care. The refgen can be disabled when :cell:`sky130_fd_io__sio_macro` is used for I2C ``(vreg_en_refgen=0)`` |
| |
| .. table:: Valid :cell:`sky130_fd_io__sio` Differential Input Buffer Reference Voltage |
| :name: sky130_fd_io__sio input buffer voltage |
| |
| +--------------+---------------+--------------------+ |
| | ``Vref_sel`` | ``vtrip_sel`` | Vinref | |
| | <1:0> | | | |
| +==============+===============+====================+ |
| | 00 | 0 | 0.5 \* ``vcc_io`` | |
| +--------------+---------------+--------------------+ |
| | 00 | 1 | 0.4 \* ``vcc_io`` | |
| +--------------+---------------+--------------------+ |
| | 01 | 0 | 0.5 \* ``voh_out`` | |
| +--------------+---------------+--------------------+ |
| | 01 | 1 | vref | |
| +--------------+---------------+--------------------+ |
| | 10 | 0 | 0.5 \* ``voh_out`` | |
| +--------------+---------------+--------------------+ |
| | 10 | 1 | vref | |
| +--------------+---------------+--------------------+ |
| | 11 | 0 | 0.5 \* ``voh_out`` | |
| +--------------+---------------+--------------------+ |
| | 11 | 1 | vref | |
| +--------------+---------------+--------------------+ |
| |
| .. table:: :cell:`sky130_fd_io__refgen` Truth Table |
| :name: sky130_fd_io__refgen truth table |
| |
| +--------+-------------+--------------+--------------+---------+--------+ |
| | vohref | ``vreg_en`` | ``ibuf_sel`` | ``vref_sel`` | voutref | vinref | |
| | | | | <1:0> | | | |
| +========+=============+==============+==============+=========+========+ |
| | X | 0 | 0 | X | Hi-Z | Hi-Z | |
| +--------+-------------+--------------+--------------+---------+--------+ |
| | 1 | 0 | 1 | 00 | Hi-Z | 1 | |
| +--------+-------------+--------------+--------------+---------+--------+ |
| | 1 | 0 | 1 | 01,10,11 | 1 | 1 | |
| +--------+-------------+--------------+--------------+---------+--------+ |
| | 1 | 1 | 0 | 00,01 | 1 | Hi-Z | |
| +--------+-------------+--------------+--------------+---------+--------+ |
| | X | 1 | 0 | XX | 1 | Hi-Z | |
| +--------+-------------+--------------+--------------+---------+--------+ |
| | 1 | 1 | 1 | 00,01 | 1 | 1 | |
| +--------+-------------+--------------+--------------+---------+--------+ |
| | X | 1 | 1 | 10,11 | 1 | 1 | |
| +--------+-------------+--------------+--------------+---------+--------+ |
| |
| Use of ``dft_refgen`` for ADFT purpose: |
| |
| - The :cell:`sky130_fd_io__refgen` block produces two references to be used in the :cell:`sky130_fd_io__sio_macro`. ``vinref`` is the reference to the differential input buffer and ``voutref`` is the reference to the regulated output buffer. |
| |
| - In order to have 100% ADFT coverage, these two references are bought out to the interface of the :cell:`sky130_fd_io__sio_macro`. By enabling ``dft_refgen``, these two outputs of refgen can be observed on ``vinref_dft`` and ``voutref_dft``. In order to observe these two pins on any :cell:`sky130_fd_io__gpio` pins, these two pins need to be hooked to the analog busses and bought to any :cell:`sky130_fd_io__gpio` pad through the AMUXBUS inside the :cell:`sky130_fd_io__gpio`. |
| |
| :cell:`sky130_fd_io__gpio_vrefv2` (Reference generator for Selectable trip point input buffer) Features |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| This cell provides a reference (``vinref``) to the selectable trip point buffer in :cell:`sky130_fd_io__gpio_ovtv2`. |
| This reference generator is a low-leakage resistive ladder whose tap points are selected based on the signaling required at the |
| :cell:`sky130_fd_io__gpio_ovtv2` pad. |
| The block diagram is shown below in :numref:`sky130_fd_io__gpio_vrefv2 block diagram`. |
| Note ref_sel[5] denotes a 5 bit bus ``ref_sel[4:0].`` |
| These notations are used interchangeably in the document. |
| |
| .. figure:: figures/sky130_fd_io__top_gpiovrefv2.png |
| :name: sky130_fd_io__gpio_vrefv2 block diagram |
| :width: 6.07292in |
| :height: 4.31250in |
| |
| :cell:`sky130_fd_io__gpio_vrefv2` Block Diagram |
| |
| The reference selection is based on the signaling range that needs to be at the PAD. |
| For this to work, the external signaling range must be lower than VDDIO. |
| The tap point selection is based on the formula: |
| |
| vinref = (13n+184)\*VDDIO/600 |
| |
| - Where vinref represents the input signaling voltage at :cell:`sky130_fd_io__gpio_ovtv2` pad |
| |
| - VDDIO is the supply voltage to the :cell:`sky130_fd_io__gpio` |
| |
| - ``n`` is the tap point selection that gives us required vinref. Binary coding of ``n`` is ``ref_sel<4:0>.`` ``n`` should be chosen such that ``vinref`` is greater than 1.8V |
| |
| For example: |
| |
| - Need to support 1.8V (vinref) signaling on PAD with VDDIO=5.0V. Plugging these numbers into the equation yields: |
| |
| 1.8 = (13n+184)\*5.0/600 |
| |
| n= 2.46 |
| |
| - As n=2.46, ``ref_sel<4:0>`` can be selected as either 2 (5'b00010) or 3 (5'b00011). This would give out a reference of ``1.75V`` and ``1.858V`` respectively. |
| |
| - Use a ceiling on ``n`` i.e. if n=2.46, use n=3 instead of n=2. |
| |
| ::cell:`sky130_fd_io__top_vrefcapv2` Features |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| This cell contains a unit capacitance (4pF) that is intended to be placed on the ``vinref`` node that goes to multiple :cell:`sky130_fd_io__gpio_ovtv2` |
| cells. |
| This is a filter cap used to suppress kick-back noise from the input buffers. |
| The usage is shown below in :numref:`sky130_fd_io__top_vrefcapv2 block diagram`: |
| |
| .. figure:: figures/sky130_fd_io__top_vrefcapv2.png |
| :name: sky130_fd_io__top_vrefcapv2 block diagram |
| :width: 4.64583in |
| :height: 6.32292in |
| |
| :cell:`sky130_fd_io__top_vrefcapv2` |
| |
| :cell:`sky130_fd_io__top_amuxsplitv2` Features |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| The amux splitter cell is designed to provide large chips (with large number of :cell:`sky130_fd_io__gpio`'s) to break the analog mux into multiple segments. |
| This cell is capable of grounding, disconnecting or feeding through each amuxbus. |
| The block diagram is shown below in :numref:`sky130_fd_io__top_amuxsplitv2 block diagram`. |
| |
| .. figure:: figures/sky130_fd_io__top_amuxsplitv2.png |
| :name: sky130_fd_io__top_amuxsplitv2 block diagram |
| :width: 6.50000in |
| :height: 4.11944in |
| |
| Block diagram of :cell:`sky130_fd_io__top_amuxsplitv2` |
| |
| Each T-switch has 3 control signals coming to control the state of the switches. |
| These are expected to be static switches. |
| During power-up ``(enable_vdda_h=0)`` and low-power modes ``(hld_vdda_h_n=0),`` the switches of the amux splitter are open. |
| |
| General guidelines for the T-switch: Break before make logic that needs to be followed when working with the switch control signals. |
| For example - when ``amux_a_l`` and ``amux_a_r`` are Independent, the mid-node of the switch needs to be closed to prevent unwanted coupling between the |
| two amuxbus's. |
| When connecting ``amux_a_l`` and ``amux_a_r`` care must be taken to disconnect the mid-node and then close the right and left switch. |
| |
| PG pads (ESD) |
| ~~~~~~~~~~~~~ |
| |
| The I/O library consists of Power (P) and Ground (G) pads that have RC ESD clamps embedded in them. |
| There are two types of RC ESD clamps that are present in these PG pads. |
| |
| - HV clamp- Only one HV (High Voltage) clamp is present underneath the PG pads whose terminals can be connected independently without interfering with the PG connections |
| |
| - LV clamp- Two LV (Low Voltage) clamps and a B2B (back 2 back) diode can be accommodated underneath the PG pads. The two LV clamps have a total of six terminals that can be tied according to chip-level needs. The B2B however should be connected to the source/body of LV clamp1 and another independent ground node ``(bdy_b2b).`` |
| |
| A layout variant of the HV clamp without pad is :cell:`sky130_fd_io__top_hvclamp_wopadv2`. |
| This is a derivative of :cell:`sky130_fd_io__top_hvclamp_wopad` with following changes: |
| |
| - Vssd pin added: P-substrate connection |
| |
| - HV clamp gate connection improved. |
| |
| - HV clamp source/drain connection improved. |
| |
| Two additional pad cells to be used for power and ground connections added, namely: |
| |
| - :cell:`sky130_fd_io__top_power_padonlyv2` |
| |
| - :cell:`sky130_fd_io__top_ground_padonlyv2` |
| |
| These are only M4/M5 pad structures with a short element. |
| They are used to provide pad structure/connection to wopad clamps. |
| |
| Integration Guidelines |
| ^^^^^^^^^^^^^^^^^^^^^^ |
| |
| All power and ground pads have the I/O bussing running through them in M5/M4, thereby forming an I/O ring when abutted to each other. |
| The power and ground pads can be abutted to either the :cell:`sky130_fd_io__gpio` or the :cell:`sky130_fd_io__sio_macro`. |
| |
| The Power and Ground pads are designed in such a way that one side of it is full DRC complaint to any :cell:`sky130_fd_io__gpio` or :cell:`sky130_fd_io__sio_macro` that abuts it. |
| However due to limited area constraints, the other side cannot be abutted directly to a :cell:`sky130_fd_io__gpio`/:cell:`sky130_fd_io__sio_macro`. |
| This puts a restriction that 2 pads (power/ground) should be paired to build the I/O ring. |
| |
| ESD design details |
| ~~~~~~~~~~~~~~~~~~ |
| |
| The architecture for the RC ESD clamps trigger circuit is the simple one-time constant RC trigger circuit. |
| For the over-voltage tolerant :cell:`sky130_fd_io__sio`, use ESD rail clamp :cell:`sky130_fd_io__top_hvclamp_wopad_sio`. |
| |
| The HV and LV RC ESD clamps are robust up to 3.3KV HBM. |
| |
| ESD HV RC ESD Clamp design |
| |
| - Single trigger - 2us time constant |
| |
| - Driver width of 2880 um was used |
| |
| - Cell height the same as the :cell:`sky130_fd_io__gpio` |
| |
| Usage of Outer Guard ring Connection (OGC) in ESD HV and LV clamps for :lib:`sky130_fd_io` |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| Power and Ground pads in :lib:`sky130_fd_io` library come along with ESD HV and LV clamps embedded within them. |
| All the ESD clamps are independent of the power or ground pads providing maximum flexibility, thereby making the end user make proper connections to |
| the ESD clamps. |
| The end user chip lead is the best-informed person about making these connections and must approve all the ESD connections. |
| |
| One of the clamp connections is the outer guard ring connection ``(ogc_hvc/ogc_lvc).`` |
| The basic purpose of this is to connect the outer guard ring (deep nwell) to provide noise isolation. |
| The recommended usage of this is to connect it to a HV supply that is available all/most of the time. |
| |
| Bottlenecks during implementation: The power and ground pads that contain the ESD clamps have a number of pins coming to the boundary interface. |
| In order to minimize the resistance inside the cell to these ESD clamps, some of the ``ogc_\*`` connections are floated and connected internally to |
| VDDIO. |
| |
| The following :numref:`ogc connection` lists the different cells in :lib:`sky130_fd_io` library that have this ``ogc_\*`` connection and the recommended way to connect them. |
| |
| .. table:: OGC connection and Usage |
| :name: ogc connection |
| |
| +------+---------------------------------------------+-------------+---------------------------------------------+ |
| | S.No | Public Cell | Internally | Recommended connection to end user | |
| | | | connected? | | |
| +======+=============================================+=============+=============================================+ |
| | 1 | :cell:`sky130_fd_io__top_power_hvc_wpad` | YES (VDDIO) | No need to connect | |
| +------+---------------------------------------------+-------------+---------------------------------------------+ |
| | 2 | :cell:`sky130_fd_io__top_ground_hvc_wpad` | YES (VDDIO) | No need to connect | |
| +------+---------------------------------------------+-------------+---------------------------------------------+ |
| | 3 | :cell:`sky130_fd_io__top_power_lvc_wpad` | YES (VDDIO) | No need to connect | |
| +------+---------------------------------------------+-------------+---------------------------------------------+ |
| | 4 | :cell:`sky130_fd_io__top_ground_lvc_wpad` | YES (VDDIO) | No need to connect | |
| +------+---------------------------------------------+-------------+---------------------------------------------+ |
| | 5 | :cell:`sky130_fd_io__top_hvclamp_wopad` | NO | Connect to HV Supplythat is always present | |
| +------+---------------------------------------------+-------------+---------------------------------------------+ |
| | 6 | :cell:`sky130_fd_io__top_lvclamp_b2b_wopad` | NO | Connect to HV Supply that is always present | |
| | | | | (Outer guard ring is HV rules compliant) | |
| +------+---------------------------------------------+-------------+---------------------------------------------+ |
| | 7 | :cell:`sky130_fd_io__top_lvclamp` | NO | Connect to HV Supply that is always present | |
| | | | | (Outer guard ring is HV rules compliant) | |
| +------+---------------------------------------------+-------------+---------------------------------------------+ |
| |
| XRES |
| ~~~~ |
| |
| The XRES cell is a macro that is used to influence the internal system wide reset. |
| The purpose of this cell is to provide a noise free signal from the input buffer to the core. |
| Any glitch of 50ns or less on the XRES pad is rejected by the XRES macro. |
| |
| The XRES cell (:cell:`sky130_fd_io__top_xres`, :cell:`sky130_fd_io__top_xres_2`) is a cell that integrates the input buffer from the :cell:`sky130_fd_io__gpio` and an HV RC |
| filter. |
| It also has a 5k weak pull up on the XRES pad. |
| |
| The XRES cell has two outputs, out (LV) and ``out_h`` (HV). |
| The HV output will be functional even when the LV supply to the input buffer is gone (STOP mode). |
| |
| There are 5 variants of XRES cells in :lib:`sky130_fd_io` IP: |
| |
| 1. :cell:`sky130_fd_io__top_xres` and :cell:`sky130_fd_io__top_xres_2` |
| |
| The two versions are the same except for layout differences. |
| |
| 2. :cell:`sky130_fd_io__top_xres2v2` |
| |
| This cell is essentially a copy of the current :cell:`sky130_fd_io__top_xres_2` cell. |
| One minor layout modification is made to this cell which is to make the height of the new cell=200u (:cell:`sky130_fd_io__top_xres_2` has 198u height). |
| No change in functionality compared to current :cell:`sky130_fd_io__top_xres_2`. |
| |
| .. figure:: figures/sky130_fd_io__xres2v2.png |
| :name: sky130_fd_io__top_xres2v2 block diagram |
| :width: 3.21875in |
| :height: 1.47917in |
| |
| :cell:`sky130_fd_io__top_xres2v2` |
| |
| 3. :cell:`sky130_fd_io__top_xres3v2` |
| |
| This cell is also a copy of the :cell:`sky130_fd_io__top_xres_2` cell but with the pull-up disabled. |
| (I.e. |
| pull-up metal connection will be cut). |
| |
| There is a metal option provided to connect the pullup back on if required. |
| This requires 2 extra pins in this cell. |
| |
| .. figure:: figures/sky130_fd_io__xres3v2.png |
| :name: sky130_fd_io__top_xres3v2 block diagram |
| :width: 3.44792in |
| :height: 1.56250in |
| |
| :cell:`sky130_fd_io__top_xres3v2` |
| |
| 4. :cell:`sky130_fd_io__top_axresv2` |
| |
| Glitch filter to filter out pulses less than 50ns pulse width. |
| This glitch filter currently resides inside of the xres cells. |
| In order to provide more flexibility, the glitch filter portion of the existing xres cell will be copied into this new public cell. |
| |
| Pull-up cell to connect the pad to the power supply (vddio) through a 5k ohm resistor. |
| A control bit ``(disable_pullup_h)`` is used to enable/disable the pull-up. |
| |
| .. figure:: figures/sky130_fd_io__top_axresv2.png |
| :name: sky130_fd_io__top_axresv2 block diagram |
| :width: 3.04996in |
| :height: 1.07135in |
| |
| :cell:`sky130_fd_io__top_axresv2` |
| |
| Use case for the XRES cells |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| .. figure:: figures/use_case_for_the_xres_cells.png |
| :name: xres use case |
| :width: 6.50000in |
| :height: 4.06181in |
| |
| Use case for the XRES cells |
| |
| Usage guidelines on when to use the different cells: |
| |
| :cell:`sky130_fd_io__top_xres`: |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| The first XRES cell :cell:`sky130_fd_io__top_xres` can ONLY be abutted to the :cell:`sky130_fd_io__sio_macro` on its right and to TP2 on its left. |
| This will not have any physical verification errors with the above mentioned placement of :cell:`sky130_fd_io__top_xres` cell. |
| This cell CANNOT be abutted with any other cells in the :lib:`sky130_fd_io` library to form the I/O ring. |
| |
| :cell:`sky130_fd_io__top_xres_2`: |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| This is a generic cell that can be abutted to most of the existing cells inside the :lib:`sky130_fd_io` library. |
| |
| :cell:`sky130_fd_io__top_xres2v2`, :cell:`sky130_fd_io__top_xres3v2`, :cell:`sky130_fd_io__top_axresv2`: |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| All the :cell:`sky130_fd_io__top_xres` cells have the I/O bussing running through them in M5/M4, thereby forming an I/O ring when abutted to each other. |
| This is a generic cell that can be abutted to most of the existing cells inside the :lib:`sky130_fd_io` library. |
| |
| |
| Test Pads (TP1, TP2, TP3) |
| ~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| TP1 and TP2 are used to monitor the flash voltages. |
| TP3 is an analog pad. |
| The TP1 and TP2 pads do not have any state elements and have no initialization requirements. |
| It is expected that ``en_tp1`` and ``en_tp2`` input will be driven low during startup and during normal operation - only toggling high during test modes |
| (class test or characterization, in particular). |
| |
| The TP1 and TP2 pad are specifically for test mode. |
| |
| There are two modes: ``en_tp1`` and ``en_tp2`` = 0 and ``en_tp1`` and ``en_tp2`` = 1. |
| |
| The ``en_tp1`` and ``en_tp2`` inputs must be asserted high to enable scaled/divided version of outputs for full-chip hook-up. |
| In this mode the ``tp1_out`` voltages and ``tp2_out_voltages`` are directly observed on the TP1 and TP2 pads. |
| |
| The TP1, TP2, TP3 pads have snap back ESD protection inside them. |
| |
| Below are the truth tables for the TP1, TP2, TP3 pads: |
| |
| .. table:: Truth Table for :cell:`sky130_fd_io__top_tp1` |
| :name: sky130_fd_io__top_tp1 truth table |
| |
| +------------+-------------+---------------+ |
| | ``en_tp1`` | tp1 | ``tp1_div`` | |
| +============+=============+===============+ |
| | 0 | ``tp1_out`` | Hi-Z | |
| +------------+-------------+---------------+ |
| | 1 | ``tp1_out`` | ``tp1_out/7`` | |
| +------------+-------------+---------------+ |
| |
| .. table:: Truth Table for :cell:`sky130_fd_io__top_tp2` |
| :name: sky130_fd_io__top_tp2 truth table |
| |
| +------------+-------------+-----------------------------+ |
| | ``en_tp2`` | tp2 | ``tp2_div`` | |
| +============+=============+=============================+ |
| | 0 | ``tp2_out`` | Hi-Z | |
| +------------+-------------+-----------------------------+ |
| | 1 | ``tp2_out`` | ``tp1_out/9`` + (8/9)\*vccd | |
| +------------+-------------+-----------------------------+ |
| |
| .. table:: Truth Table for :cell:`sky130_fd_io__top_tp3` |
| :name: sky130_fd_io__top_tp3 truth table |
| |
| +------+-------------+ |
| | tp3 | ``tp3_out`` | |
| +======+=============+ |
| | 0 | 0 | |
| +------+-------------+ |
| | 1 | 1 | |
| +------+-------------+ |
| | Hi-Z | Hi-Z | |
| +------+-------------+ |
| |
| Overlay Cells |
| ~~~~~~~~~~~~~ |
| |
| There are two kinds of overlays that exist in the :lib:`sky130_fd_io` I/O library: |
| |
| - Power Ground (PG) overlays - These overlay cells (12) are coupled with the existing generic power and ground public cells and made into a specific power and ground pad. The overlays connect the pad to the one of the horizontally running I/O ring busses. |
| |
| - :cell:`sky130_fd_io__gpio` |
| |
| 1. Power Ground Overlays |
| |
| :lib:`sky130_fd_io` I/O library has twelve overlays that go with the two existing power and ground pads. |
| The purpose of the overlays is to convert a generic power/ground pad to a specific power/ground pad. |
| For example: :cell:`sky130_fd_io__top_power_hvc_wpad` is just a power pad with no hook-up to the horizontally running I/O busses in the I/O ring. |
| By placing an overlay called :cell:`sky130_fd_io__overlay_vddio_hvc` on top of :cell:`sky130_fd_io__top_power_hvc_wpad`, this would become a VDDIO power pad (in that the |
| PAD is physically connected to the VDDIO bus in the I/O ring). |
| |
| Below are the important busses running in the I/O ring for which these overlays are built: |
| |
| 1. VDDIO |
| |
| 2. VSSIO |
| |
| 3. VDDA |
| |
| 4. VSSA |
| |
| 5. VCCD |
| |
| 6. VSSD |
| |
| Since any power or ground pad can be connected to an ESD HV or an ESD LV clamp, there are twelve overlays for the above mentioned buses. |
| :numref:`overlay cells` shows the usage. |
| |
| .. table:: Overlay Cell along with usage |
| :name: overlay cells |
| |
| +------+-----------------------------------------+-------------------------------------------+-----------------+------------------+ |
| | S.No | Overlay | Used in conjunciton with | Converts above | Using underneath | |
| | | | | power PAD to | clamp of | |
| +======+=========================================+===========================================+=================+==================+ |
| | 1 | :cell:`sky130_fd_io__overlay_vddio_hvc` | :cell:`sky130_fd_io__top_power_hvc_wpad` | VDDIO power pad | HV ESD clamp | |
| +------+-----------------------------------------+-------------------------------------------+-----------------+------------------+ |
| | 2 | :cell:`sky130_fd_io__overlay_vddio_lvc` | :cell:`sky130_fd_io__top_power_lvc_wpad` | VDDIO power pad | LV ESD clamp | |
| +------+-----------------------------------------+-------------------------------------------+-----------------+------------------+ |
| | 3 | :cell:`sky130_fd_io__overlay_vdda_hvc` | :cell:`sky130_fd_io__top_power_hvc_wpad` | VDDA power pad | HV ESD clamp | |
| +------+-----------------------------------------+-------------------------------------------+-----------------+------------------+ |
| | 4 | :cell:`sky130_fd_io__overlay_vdda_lvc` | :cell:`sky130_fd_io__top_power_lvc_wpad` | VDDA power pad | LV ESD clamp | |
| +------+-----------------------------------------+-------------------------------------------+-----------------+------------------+ |
| | 5 | :cell:`sky130_fd_io__overlay_vccd_hvc` | :cell:`sky130_fd_io__top_power_hvc_wpad` | VCCD power pad | HV ESD clamp | |
| +------+-----------------------------------------+-------------------------------------------+-----------------+------------------+ |
| | 6 | :cell:`sky130_fd_io__overlay_vccd_lvc` | :cell:`sky130_fd_io__top_power_lvc_wpad` | VCCD power pad | LV ESD clamp | |
| +------+-----------------------------------------+-------------------------------------------+-----------------+------------------+ |
| | 7 | :cell:`sky130_fd_io__overlay_vssio_hvc` | :cell:`sky130_fd_io__top_ground_hvc_wpad` | VSSIO power pad | HV ESD clamp | |
| +------+-----------------------------------------+-------------------------------------------+-----------------+------------------+ |
| | 8 | :cell:`sky130_fd_io__overlay_vssio_lvc` | :cell:`sky130_fd_io__top_ground_lvc_wpad` | VSSIO power pad | LV ESD clamp | |
| +------+-----------------------------------------+-------------------------------------------+-----------------+------------------+ |
| | 9 | :cell:`sky130_fd_io__overlay_vssa_hvc` | :cell:`sky130_fd_io__top_ground_hvc_wpad` | VSSA power pad | HV ESD clamp | |
| +------+-----------------------------------------+-------------------------------------------+-----------------+------------------+ |
| | 10 | :cell:`sky130_fd_io__overlay_vssa_lvc` | :cell:`sky130_fd_io__top_ground_lvc_wpad` | VSSA power pad | LV ESD clamp | |
| +------+-----------------------------------------+-------------------------------------------+-----------------+------------------+ |
| | 11 | :cell:`sky130_fd_io__overlay_vssd_hvc` | :cell:`sky130_fd_io__top_ground_hvc_wpad` | VSSD power pad | HV ESD clamp | |
| +------+-----------------------------------------+-------------------------------------------+-----------------+------------------+ |
| |
| Power detector |
| ~~~~~~~~~~~~~~ |
| |
| This cell is developed to detect vddd and vddio power supplies and to level shift the hv control signals across vddio<->vddd voltage domains. |
| This cell is made of the following sub-blocks. |
| |
| 1. vddd detector : It detects the presence of vddd supply in vddio domain |
| |
| 2. vddio detector : It detects the presence of vddio supply in vddd domain |
| |
| 3. There are 6 level shifters inside the top cell. The first 3 level shifters are enabled by the vddd detector and the later three are enabled by the vddio detector. The detectors make sure that the level shifters are powered down to a safe state when the input power supply to the level shifters is not present. |
| |
| Use case for the detector |
| ^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| .. figure:: figures/use_case_for_power_detector_sky130_fd_io__pwrdet.png |
| :name: power detector use case |
| :width: 6.10417in |
| :height: 5.89583in |
| |
| Use case for the Power detector |
| |
| |
| Block diagram |
| ^^^^^^^^^^^^^ |
| |
| The following diagram shows the complete sub-blocks of the power detector in detail. |
| |
| .. figure:: figures/sky130_fd_io__top_pwrdet.png |
| :name: sky130_fd_io__top_pwrdet block diagram |
| :width: 6.50000in |
| :height: 6.71875in |
| |
| :cell:`sky130_fd_io__top_pwrdet` |
| |
| Truth Table |
| ^^^^^^^^^^^ |
| |
| The table below captures all steady state combinations of ``vddio_q,`` vccd and vddd1 for the vddio detector and explains the behavior of the vddio |
| detector for each of the cases. |
| |
| .. table:: Truth Table for Power detector |
| :name: power detector truth table |
| |
| +-------+-------+-------------+---------------------------------------------------------+--------------------------------------------------------------------+ |
| | vccd | vddd1 | ``vddio_q`` | vddio detector behavior | Comment | |
| +=======+=======+=============+=========================================================+====================================================================+ |
| | 0 | 0 | 0 | Output is floating. | Chip shutdown | |
| +-------+-------+-------------+---------------------------------------------------------+--------------------------------------------------------------------+ |
| | 0 | 0 | 1 | Output is floating. | vddd is absent | |
| +-------+-------+-------------+---------------------------------------------------------+--------------------------------------------------------------------+ |
| | 0 | 1 | 0 | The detector is unreliable in this condition | Sec.2.4.9 of SAS calls out this condition. | |
| | | | | | It states the circuit above is unreliable when vddio is 0 | |
| | | | | | and ``vpwr_lv`` is 0, which is the case during POR and when XRES=0 | |
| +-------+-------+-------------+---------------------------------------------------------+--------------------------------------------------------------------+ |
| | 0 | 1 | 1 | * Detector output will be high. | xres mode | |
| | | | | * vccd=0 does not affect circuit behavior when vddio=1 | | |
| +-------+-------+-------------+---------------------------------------------------------+--------------------------------------------------------------------+ |
| | 1 | 0 | 0 | Output is floating. | Invalid combination. Vccd cannot be ``1`` when vddd is 0 | |
| +-------+-------+-------------+---------------------------------------------------------+--------------------------------------------------------------------+ |
| | 1 | 0 | 1 | Output is floating. | Invalid combination. Vccd cannot be ``1`` when vddd is 0 | |
| +-------+-------+-------------+---------------------------------------------------------+--------------------------------------------------------------------+ |
| | 1 | 1 | 0 | Output will be low. since ``vddio_q=0`` | When vddio de-asserts in a working system - | |
| | | | | | it what leads the system to reset as a result of it | |
| +-------+-------+-------------+---------------------------------------------------------+--------------------------------------------------------------------+ |
| | 1 | 1 | 1 | Output of detector is high. | Active mode. | |
| +-------+-------+-------------+---------------------------------------------------------+--------------------------------------------------------------------+ |
| |
| The table below captures all steady state combinations of ``vddio_q,`` and vddd2 for the vddd detector and explains the behavior of the vddd detector for each of the cases. |
| |
| .. table:: Steady state combinations of ``vddio_q,`` and vddd2 |
| :name: steady state vddio_q and vddd2 |
| |
| +-------------+-----------+----------------------+---------------------------+ |
| | ``vddio_q`` | ``vddd2`` | vddd detector behavio| Comment | |
| +=============+===========+======================+===========================+ |
| | 0 | 0 | Output is floating. | Chip shutdown | |
| +-------------+-----------+----------------------+---------------------------+ |
| | 0 | 1 | Output is floating | ``vddio_q`` (power supply | |
| | | | | of detector) is absent. | |
| +-------------+-----------+----------------------+---------------------------+ |
| | 1 | 0 | Output will be low, | ``vddio_q`` is present | |
| | | | since vddd2 =0 | and vddd2 is absent. | |
| +-------------+-----------+----------------------+---------------------------+ |
| | 1 | 1 | Output will be high, | Active mode. | |
| | | | since vddd2=1 | | |
| +-------------+-----------+----------------------+---------------------------+ |
| |
| |
| The output of the level shifter will be zero when the power supply that is being detected is not present (=0). |
| |
| Block Integration Guidelines |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| The cell uses metal routing untill Met3. |
| Met4 and Met5 can be routed above this block. |
| |
| The ``rst_por_hv_n`` pin should be hooked up to the ``rst_por_hv_n`` coming from the SRSS IP for proper functionality. |
| |
| The cell does not include any circuitry for test mode control or for self-test. |
| |
| IP block test coverage goals should be met by asserting the inputs of the level shifter and observing the respective outputs. |
| The block is mainly used to carry global enable signals and hence this functionality is tested implicitly. |
| |
| The detector outputs are buffered using buffer sizes similar to buf4 cell. |
| The user must insert an additional buffer if one intends to cater to a higher load than that is supported by this buffer. |
| |
| The level shifter outputs are buffered to drive a 3pf load at about 10ns rise/fall times. |
| Any additional load requirement must be taken care by inserting additional buffers. |
| |
| The reset signal connected to vddio detector should be high in steady state condition for proper functionality. |
| |
| If the VDDD detector is not to be used then the vddd2 has to be tied to ``vddio_q.`` |
| The inputs of the corresponding level shifters ``(in1_vddd_hv,`` ``in2_vddd_hv`` and ``in3_vddd_hv`` must be tied to ground. |
| The outputs of the level shifters and detector must not be used anywhere. |
| |
| If the VDDIO detector is not planned to be used then the vddd1, ``rst_por_hv_n`` and vccd has to be tied to ``vddio_q.`` |
| The inputs of the corresponding level shifters ``(in1_vddio_hv,`` ``in2_vddio_hv`` and ``in3_vddio_hv`` must be tied to ground. |
| The outputs of the level shifters and detector must not be used anywhere. |
| |
| This cell can be placed in critical corner. |
| |
| The cell has power connections in Met3. |
| The power connections must be properly connected in Met4 and Met5 at the chip level. |
| The MET4 and MET5 power hookups should be at least 6um. |
| Minimum 10 VIA3 and VIA4 must be used in the power hookups. |
| |
| If the block is placed in the I/O ring in the ESD routing path the power bussing should follow that of the I/O ring. |
| |
| The vddio and vddd detectors were tested with 500mV, 10ns pulse width noise at 1 MHz and 25 MHz frequencies at the input power supply domain assuming |
| no noise at the output power supply domain. |
| |
| The vddio and vddd detectors were tested with 500mV, 10ns pulse width noise at 1 MHz and 25 MHz frequencies at the output power supply domain assuming |
| no noise at the input power supply domain. |
| |
| The vddio and vddd detectors were tested with 100mV, 10ns pulse width noise at 1 MHz and 25 MHz frequencies at the vssa domain. |
| |
| The vddio and vddd detectors were tested with 100mV, 10ns pulse width noise at 1 MHz and 25 MHz frequencies at the vssd and ``vssio_q`` domain. |
| |
| The outputs of the level shifters should be routed in Met2 of 0.5um width or Met3 |
| |
| The default state of the level shifters outputs is zero. |
| Hence the level shifters must be used to shift active high control signals to avoid glitches on this control signals during various power supply |
| ramps. |
| |
| The power detector carries the ``enable_io`` signals to the :cell:`sky130_fd_io__sio` and :cell:`sky130_fd_io__gpio_ovtv2`. |
| Hence any glitches on the VDDD level shifter output when VDDIO ramping will cause a possible glitch in I2C communication. |
| The following table shows the outputs with various power supply ramp scenarios for the detector and level shifters outputs with the input to the level |
| shifter driven by zero. |
| |
| .. table:: Power detector outputs with various power supply ramp scenarios |
| :name: power detector outputs |
| |
| +--------+---------+---------+----------------+----------------+---------------+----------------+ |
| | Case # | vddd | vddio | vddio detector | vddio Level | vddd detector | vddd Level | |
| | | | | output | shifter output | output | shifter output | |
| +========+=========+=========+================+================+===============+================+ |
| | 1 | Stable | Ramping | no glitch | no glitch | glitches | no glitch | |
| +--------+---------+---------+----------------+----------------+---------------+----------------+ |
| | 2 | Ramping | Stable | glitches | no glitch | no glitch | no glitch | |
| +--------+---------+---------+----------------+----------------+---------------+----------------+ |
| | 3 | Stable | Stable | no glitch | no glitch | no glitch | no glitch | |
| +--------+---------+---------+----------------+----------------+---------------+----------------+ |
| | 4 | Ramping | Ramping | glitches | glitches | glitches | glitches | |
| +--------+---------+---------+----------------+----------------+---------------+----------------+ |
| |
| **Case 1:** vddio ramp - vddd detector |
| |
| VDDIO detector is keeping system in reset, so ``enable_`` signals are 0. |
| Hence LS input is being driven by 0, so a glitch on VDDD detector output is of no concern. |
| |
| **Case 2**: vddd ramp - vddio detector |
| |
| The system is not listening to output of VDDIO detector/level shifter when vddd ramps. |
| Hence this is not a concern. |
| |
| **Case 3:** No concerns |
| |
| **Case 4:** Glitches on detector/level shifter outputs not a problem during concurrent ramps. |
| |
| The user must connect the power and ground to the less noisy sources. |
| |
| |
| :lib:`sky130_fd_io` Pin Information |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| #. DFT, BIST Pins |
| |
| As a summary, there is no additional DFT circuitry needed to test the :cell:`sky130_fd_io__gpio`. |
| However, DFT circuitry has been added to the :cell:`sky130_fd_io__sio` macro to test the references from the :cell:`sky130_fd_io__refgen` to the :cell:`sky130_fd_io__sio` macro. |
| |
| #. Bulk Pins |
| |
| There are no bulk pins to the LV devices in this library. |
| |
| Some high voltage pfet bodies are connected to their sources. |
| These pfet bodies are connected to the I/O supply ``vddio``. |
| There are some high voltage pfet bodies that are associated with the pad during an overvoltage or hot swap event. |
| When a hot swap or overvoltage event occurs, these bodies are connected to the pad otherwise they are connected to the I/O supply ``vddio``. |
| |
| There are nfet bodies that do not connect to common ground. |
| These bodies are in an isolated psub and are connected to ``vssd``. |
| This is required in order to ensure that the threshold voltage does not change if substrate bias is applied. |
| Normally, this scheme is used in the input buffer to ensure that the input trip does not shift due to substrate biasing. |
| |
| #. Power Supply Pins |
| |
| - The :cell:`sky130_fd_io__gpio` cells use the main Vddio/Vssio connections for their ESD current steering diodes. |
| |
| - The main Vddio/Vssio power rails are used for the digital output driver only. A separately routed ``Vddio_quiet/Vssio_quiet`` bus is used for all lower current circuits. |
| |
| - Most LV logic is in the Vccd domain. A few signals are in the Vcchib domain to enable DeepSleep functionality. |
| |
| - The AMUXBUS section contains switches that are supplied from the Vdda domain. The gates are driven using the Vswitch supply, which is either equal to Vdda or pumped up from it. If the product has no Programmable Analog, these supplies can be connected to Vddio (e.g. TSGx). |
| |
| - The AMUXBUS section contains shunting switches to Vssio/Vddio for the sensing/shielding currents during CSD operation. These use the ``Vssio_quiet/Vddio_quiet`` rails with private routes to the corresponding Vssio/Vddio pads to minimize the noise experienced due to IR- Drop caused by switching current of regular digital drivers. |
| |
| - There are no control signals in the Vdda domain. Only the AMUXBUS buses themselves are in the Vdda domain. |
| |
| |
| Timing Requirements and Diagrams |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| The following diagrams apply to the input buffer AC parameters. |
| |
| .. figure:: figures/timing_diagram_gpio_tpd_trfout.png |
| :name: sky130_fd_io__gpio tpd trfout |
| :width: 5.17000in |
| :height: 3.50000in |
| |
| :cell:`sky130_fd_io__gpio`, tPD, tRFout |
| |
| .. figure:: figures/timing_diagram_sio_tpd_trfout.png |
| :name: sky130_fd_io__sio tpd trfout |
| :width: 5.40000in |
| :height: 3.50000in |
| |
| :cell:`sky130_fd_io__sio` tPD, tRFout |
| |
| .. figure:: figures/timing_diagram_gpio_sio_tdis_ten.png |
| :name: gpio sio tdis ten |
| :width: 5.40000in |
| :height: 2.48000in |
| |
| :cell:`sky130_fd_io__gpio` & :cell:`sky130_fd_io__sio` tDIS, tEN |
| |
| The following timing diagrams apply to the output buffer AC parameters. |
| |
| .. figure:: figures/timing_diagram_gpio_tpd_trfout_tslew.png |
| :name: sky130_fd_io__gpio tpd trfout |
| :width: 5.40000in |
| :height: 3.45000in |
| |
| :cell:`sky130_fd_io__gpio` tPD, tRFout (tSLEW) |
| |
| .. figure:: figures/timing_diagram_gpio_and_sio_non-regulated_outbuf_tolz_internal_measurement_method_for_tohz.png |
| :name: non-regulated outbuf tolz |
| :width: 5.40000in |
| :height: 3.44000in |
| |
| :cell:`sky130_fd_io__gpio` and :cell:`sky130_fd_io__sio` non-regulated outbuf tOLZ & internal measurement method for tOHZ |
| |
| .. figure:: figures/timing_diagram_gpio_and_sio_non-regulated_outbuf_tohz_external_measurement_method.png |
| :name: non-regulated outbuf tohz |
| :width: 5.40000in |
| :height: 2.91000in |
| |
| :cell:`sky130_fd_io__gpio` and :cell:`sky130_fd_io__sio` non-regulated outbuf tOHZ external measurement method |
| |
| .. figure:: figures/timing_diagram_sio_regulated_outbuf_ttrfout_tslew.png |
| :name: sky130_fd_io__sio regulated outbuf ttrfout |
| :width: 5.40000in |
| :height: 3.38000in |
| |
| :cell:`sky130_fd_io__sio` regulated outbuf ttRFout(tSLEW) |
| |
| .. figure:: figures/timing_diagram_sio_regulated_outbuf_tolz_external_measurement_method_for_tohz.png |
| :name: sky130_fd_io__sio regulated outbuf tolz |
| :width: 5.40000in |
| :height: 3.62000in |
| |
| :cell:`sky130_fd_io__sio` regulated outbuf tOLZ & external measurement method for tOHZ |
| |
| .. figure:: figures/timing_diagram_sio_regulated_outbuf_tohz_external_measurement_method.png |
| :name: sky130_fd_io__sio regulated outbuf tohz |
| :width: 5.40000in |
| :height: 3.16000in |
| |
| :cell:`sky130_fd_io__sio` regulated outbuf tOHZ external measurement method |
| |
| .. figure:: figures/timing_diagram_gpio_and_sio_hold_state_mode_timing_diagram.png |
| :name: hold state mode timing diagram |
| :width: 5.40000in |
| :height: 3.25000in |
| |
| :cell:`sky130_fd_io__gpio` and :cell:`sky130_fd_io__sio` Hold State Mode Timing Diagram |
| |
| Block Level Interfaces |
| ~~~~~~~~~~~~~~~~~~~~~~ |
| |
| The :cell:`sky130_fd_io__gpio` and :cell:`sky130_fd_io__sio` cells interface with the core and the external world. |
| These cells accept inputs from the core at ``vcchib``, ``vccd``, ``vdda`` and ``vddio`` voltage levels. |
| The cell interfaces with the external world at ``vddio`` and ``vdda`` levels. |
| This cell also produces output signals to the core at ``vcchib`` and ``vddio`` levels. |
| ``vcchib`` tracks vccd in normal operation and does not track ``vccd`` in sleep mode in which ``vddio`` and ``vcchib`` are up and ``vccd`` is down. |
| |
| The :cell:`sky130_fd_io__sio_macro` cell is like the :cell:`sky130_fd_io__gpio` cell and it also accepts analog voltage levels as inputs and produces analog voltages at the pad. |
| |
| The internal blocks on the ``vcchib`` power domain are input buffers and control logic for ``oe_hs`` (hot swap output enable). |
| |
| The Reference voltage generator block receives the vohref analog global signal and has low voltage input configuration signals |
| (``vreg_en``, ``vref_sel`` , ``ibuf_sel`` , ``vtrip_sel`` ). |
| This block provides ``voutref`` reference voltage and ``refleak_bias`` bias voltage for the :cell:`sky130_fd_io__sio` Regulated Output Buffer and the ``vinref`` reference |
| voltage for the :cell:`sky130_fd_io__sio` differential input buffer. |
| The internal blocks on the ``vcchib`` power domain is the internal current bias generator and a level shifter block, that controls that sub-block. |
| |
| The Reference voltage generator ``vcc_a`` pin must be connected to the analog supply of the chip, to reduce its noise sensitivity at its Vinref and |
| Voutref outputs. |
| This issue affects the supply noise sensitivity in the :cell:`sky130_fd_io__sio` input buffer and the :cell:`sky130_fd_io__sio` Regulated Output Buffer, respectively. |
| |
| Reset and Initialization |
| ~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| There are two resets to the I/O blocks - |
| |
| - ``Enable_h`` - This is a reset issued by the SRSS in VDDD (VDDIO) domain that resets everything when it is at logic 0 in the I/O block and ensures that the I/O blocks are tri-stated |
| |
| - ``Enable_vdda_h`` - This is reset issued by the SRSS in VDDA domain to ensure that any analog blocks in VDDA domain are reset when ``enable_vdda_h`` is at logic 0. This will ensure that any portions of the I/O (Analog Mux) that are tied to PAD are reset and the I/O block is in reset state. |
| |
| Power Modes |
| ~~~~~~~~~~~ |
| |
| The :cell:`sky130_fd_io__gpio` and :cell:`sky130_fd_io__sio` buffers support multiple standby modes. |
| The following tables list the input and output standby modes and their dependency on the related control inputs. |
| |
| .. table:: :cell:`sky130_fd_io__gpio` & :cell:`sky130_fd_io__sio` Input Buffer Standby Modes |
| :name: input buffer standby modes |
| |
| +--------------+-------------+---------+-------------------------------+ |
| | ``enable_h`` | ``inp_dis`` | dm<2:0> | Standby Mode Description | |
| +==============+=============+=========+===============================+ |
| | 1 | X | 000 | Input Buffer disabled | |
| | | | | by drive mode state | |
| +--------------+-------------+---------+-------------------------------+ |
| | 1 | 1 | XXX | Input Buffer disabled | |
| | | | | by input buffer disable input | |
| +--------------+-------------+---------+-------------------------------+ |
| | 0 | X | XXX | Input Buffer disabled | |
| +--------------+-------------+---------+-------------------------------+ |
| |
| .. table:: :cell:`sky130_fd_io__gpio` & :cell:`sky130_fd_io__sio` Output Buffer Standby Modes |
| :name: output buffer standby modes |
| |
| +--------------+-------------+----------+---------+-----------------------------+ |
| | ``enable_h`` | ``hld_h_n`` | ``oe_n`` | dm<2:0> | Standby Mode Description | |
| +==============+=============+==========+=========+=============================+ |
| | 1 | 1 | X | 00X | Output Buffer disabled | |
| | | | | | by drive mode state | |
| +--------------+-------------+----------+---------+-----------------------------+ |
| | 1 | 1 | 1 | * 1XX | Output Buffer disabled by | |
| | | | | * X1X | output buffer enable signal | |
| +--------------+-------------+----------+---------+-----------------------------+ |
| | 1 | 0 | X | XXX | Output Buffer maintains | |
| | | | | | previous state | |
| +--------------+-------------+----------+---------+-----------------------------+ |
| | 0 | X | X | XXX | Output Buffer tri-stated | |
| +--------------+-------------+----------+---------+-----------------------------+ |
| |
| The standby power consumption depends on the state of the control bits. |
| For example, the lowest standby current mode is achieved when oe_n=1, inp_dis=1, dm<2:0>=000. |
| During this mode the input and output buffer are permanently disabled allowing the circuits to be configured for minimal leakage current. |
| |
| For all control bit states not covered in :numref:`power detector outputs` and :numref:`input buffer standby modes` either the input buffer, output buffer, or both buffers will be enabled. |
| During these modes the I/O buffer is considered active. |
| The power consumption for these modes depends on the drive mode setting and the switching frequency. |
| |
| Register Definitions |
| ~~~~~~~~~~~~~~~~~~~~ |
| |
| This IP contains latches to hold the previous state of the output when the hold state mode is selected. |
| When the hold state mode is selected the internal power supply connected to the output path may float. |
| The hold state latches are required to hold the previous output state regardless of the current state of the control signals. |
| |
| Power Architecture and Modes |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| The IP cells include multiple power domains. |
| In general there is a high voltage domain and a low voltage domain. |
| The high voltage domain is supplied by the I/O power supply ``vddio``. |
| There are no switched domains located inside the cell for the ``vddio`` power supply domain. |
| |
| The low voltage domain consists of two internally generated supplies, vccd and vcchib. |
| The vccd supply is the regulated internal supply that can be forced low during low standby current modes. |
| The vcchib supply is the low voltage regulated keep alive supply. |
| This supply is kept active during low standby current modes and the level can drop to 1.2V. |
| The chip team is responsible to correctly controlling the levels on these supplies during the appropriate modes of operation. |
| |
| Grounded Power Supplies |
| ~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| As there are multiple power supplies to the I/O's, no single power supply will be grounded while another supply is active. |
| This will help alleviate the grounded NWELL issues that induce latch-up. |
| It is OK to float a supply while another is active though. |
| |
| Block behavioral model requirements |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| The :cell:`sky130_fd_io__gpio` and :cell:`sky130_fd_io__sio` input buffers are operating from the vcchib supply. |
| This means that the input buffer can operate even when vccd is taken down to 0 or floats. |
| But, note that before taking vccd=0 (or floating vccd), the hold mode must be asserted i.e. |
| hld_h_n=0 must go to 0 before vccd is taken to 0. |
| During the hold mode of operation and with vccd=0 (or floating), the input buffer can actively drive out depending on pad input if there is a valid |
| I/O (vddio, vddioq and vcchib) power supply. |
| This functionality is implemented in the behavioral model. |
| If vccd=0 (or floats) and when the I/O is not in the hold mode of operation, the behavioral model would force an ``X`` on the outputs of the input |
| buffer (``out`` and ``out_h``) and the input buffer cannot be actively driven from pad. |
| |
| Block Integration Requirements and Constraints |
| ---------------------------------------------- |
| |
| General Integration Requirements |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| The following is a list of items users must be aware of before using this IP. |
| |
| 1. The IP cells described within this document are I/O cells and Power and Ground pads. Each cell (GPIO and :cell:`sky130_fd_io__sio`) contains an input and output buffer, with a bond pad. |
| |
| 2. The circuit blocks do not include any circuitry for test mode control or for self-test. All input pin states will be exercisable in all product applications so that the IP block test coverage goals will be met. |
| |
| 3. The control signal ``enable_h`` will override all other input and control pins to force the input and output to a predetermined state. When ``enable_h`` transitions from logic 0 to logic 1, the block expects all of the inputs to be valid state. If ``hld_h_n=0`` when the ``enable_h`` pin transitions 0->1 (inactive->active) the state set by ``enable_h`` is latched in the output driver. |
| |
| 4. There is a separate ``enable_vdda_h`` control signal to the :cell:`sky130_fd_io__gpio`. This control signal is logic 0 when VDDA supply is ramping up. This control signal ensures that the AMUX is completely turned OFF when ``enable_vdda_h`` is at logic 0. |
| |
| 5. It is permissible to externally connect the I/O pin to a voltage above vddio or below ``vssd_io``, provided that the current flowing into/out of the pin is externally limited to 100uA. |
| |
| 6. The :cell:`sky130_fd_io__gpio` and :cell:`sky130_fd_io__sio` input buffers are operating from the vcchib supply. This means that the input buffer can operate even when vccd is taken down to 0V or floats. But note that before taking vccd=0 (or floating vccd), the hold mode must be asserted i.e. ``hld_h_n=0`` must go to 0 before vccd is taken to 0. During the hold mode of operation and with vccd=0 (or floating), the input buffer can actively drive out depending on pad input if there is a valid I/O (vddio, vddioq and vcchib) power supply. This functionality is implemented in the behavioral model. If vccd=0 (or floats) and when the I/O is not in the hold mode of operation, the behavioral model would force an ``X`` on the outputs of the input buffer (``out`` and ``out_h``) and the input buffer cannot be actively driven from pad. |
| |
| 7. In hibernate mode, the I/P buffer just needs to toggle. It need not meet the VIH/VIL specs. |
| |
| 8. The charge pump is powered down during startup and thus VSWITCH=VDDA during startup. |
| |
| 9. ``tie_weak_hi_h`` signal for the :cell:`sky130_fd_io__top_xres3v2` is really a pull up and not intended to interact with any other intermediate strength drivers (weak, pull). |
| |
| 10. For the cell :cell:`sky130_fd_io__top_axresv2`, glitch filter input (``filter_in_h``) is intended to be connected to only the :cell:`sky130_fd_io__gpio` output and no other uses are permitted. |
| |
| 11. The glitch filter in :cell:`sky130_fd_io__top_xres2v2`, :cell:`sky130_fd_io__top_xres3v2` and :cell:`sky130_fd_io__top_axresv2` cells have metal1 option to increase/decrease the glitch rejection pulse width. |
| |
| 12. When using the pad connections of the :cell:`sky130_fd_io__sio_macro`, care should be taken about power-domain interaction at PAD (when used as I2C pads). The :cell:`sky130_fd_io__sio_macro` has a tracking NWELL on its PAD which is driven to VDDIO when PAD<VDDIO. If a pad is being connected to a signal from any other power-domain other than VDDIO, power- supply sequencing issues must be analyzed at chip- level. |
| |
| |
| 1. Chip Floor planning guidelines when using :lib:`sky130_fd_io` to build I/O ring |
| |
| The following information is a MUST know when using the :lib:`sky130_fd_io` library components to build an I/O ring. |
| Due to the complex nature of these I/O's and other PG pads, it is critical that the following matrix be understood when placing the cells that form |
| the I/O ring. |
| |
| - ALL cells CANNOT be abutted with each other. There are limitations because of the ESD LU rules and due to the different Deep NWELLS being used in different cells. |
| |
| - It is strongly recommended to run a DRC at the chip level as soon as the I/O cell placements are complete. Also, scheduling a preliminary ESD review is recommended before routing is started. |
| |
| 2. Layout Integration guidelines specific to :cell:`sky130_fd_io__gpio` |
| |
| 1. The GPIO cell (:cell:`sky130_fd_io__top_gpio`) forms part of the I/O ring. If multiple instances of this cell are used, they must be mirrored and placed by abutment. |
| |
| 2. The boundary of the :cell:`sky130_fd_io__gpio` cell (PAD side) can be abutted with the seal ring. It takes care of the pad to seal ring rules internally. |
| |
| 3. The :cell:`sky130_fd_io__gpio` cell can be abutted to the rest of the cells in this IP by proper placement as documented below for the rest of the public cells. |
| |
| 3. ``enable_h`` integration guidelines for :cell:`sky130_fd_io__gpio_ovtv2` and :cell:`sky130_fd_io__sio_macro` |
| |
| Any product that has I2C ports and is claiming over-voltage tolerance needs to ensure that the glitch on ``enable_h`` coming into the :cell:`sky130_fd_io__top_gpio_ovtv2` or :cell:`sky130_fd_io__sio_macro` is less than 300mV. |
| |
| Scan Attributes to be used for :lib:`sky130_fd_io` cells |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| :cell:`sky130_fd_io__gpio`'s can be used as SCAN IN and SCAN Out pads based on the configuration. |
| |
| However, if a :cell:`sky130_fd_io__gpio` is configured as a SCAN IN pad, all the output buffer control signals can be toggled. |
| Likewise, if the :cell:`sky130_fd_io__gpio` is used as a SCAN OUT pad, all the input buffer control signals can be toggled. |
| |
| .. table:: Control signals that can be toggled for public cells |
| :name: public cells control signals |
| |
| +------+---------------------------------------+--------------------------+-----------------------------+----------------------+ |
| | S.No | Public Cell | * Used as SCAN IN | * Used as SCAN OUT | * Others | |
| | | | * dm[3]=001 | * dm=110 | * ``analog_en=0`` | |
| | | | * ``analog_en=0`` | * ``inp_dis=1`` | * ``hld_vdda_h_n=0`` | |
| | | | | * ``analog_en=0`` | | |
| +======+=======================================+==========================+=============================+======================+ |
| | 1 | :cell:`sky130_fd_io__top_gpiov2` | * out | * ``vtrip_sel ib_mode_sel`` | | |
| | | | * ``oe_n`` | * ``analog_sel analog_pol`` | | |
| | | | * slow | | | |
| | | | * ``analog_sel`` | | | |
| | | | * ``analog_pol`` | | | |
| +------+---------------------------------------+--------------------------+-----------------------------+----------------------+ |
| | 2 | :cell:`sky130_fd_io__top_gpio_ovtv2` | * out | * ``vtrip_sel`` | | |
| | | | * ``oe_n`` | * ``ib_mode_sel<1:0>`` | | |
| | | | * slow | * ``analog_sel`` | | |
| | | | * ``analog_sel`` | * ``analog_pol`` | | |
| | | | * ``analog_pol`` | * ``hys_trim`` | | |
| | | | * ``hys_trim`` | * ``slew_ctl<1:0>`` | | |
| | | | * ``slew_ctl<1:0>`` | | | |
| +------+---------------------------------------+--------------------------+-----------------------------+----------------------+ |
| | 3 | :cell:`sky130_fd_io__sio_macro` | * ``inp_dis=0`` | * ``vreg_en=0`` | | |
| | | | * ``vtrip_sel=0`` | * ``vreg_en_refgen=0`` | | |
| | | (assuming both the pad in macro | * ``hld_h_n=1`` | * ``vtrip_sel<1:0>`` | | |
| | | are used the same way) | | | | |
| | | | * ``ibuf_sel=0`` | * ``ibuf_sel<1:0>`` | | |
| | | | * ``vreg_en_refgen=0`` | * ``voh_sel<2:0>`` | | |
| | | | * out<1:0> | * ``vref_sel<1:0>`` | | |
| | | | * ``oe_n<1:0>`` | * ``vtrip_sel_refgen`` | | |
| | | | * slow<1:0> | * ``ibuf_sel_refgen`` | | |
| | | | * ``voh_sel<1:0>`` | * ``dft_refgen=0`` | | |
| | | | * ``vref_sel<1:0>`` | | | |
| | | | * ``vtrip_sel_refgen=0`` | | | |
| | | | * ``ibuf_sel_refgen=0`` | | | |
| | | | * ``dft_refgen=0`` | | | |
| +------+---------------------------------------+--------------------------+-----------------------------+----------------------+ |
| | 4 | :cell:`sky130_fd_io__top_amuxsplitv2` | | | * ``switch_aa_sl`` | |
| | | | | | * ``switch_aa_sr`` | |
| | | | | | * ``switch_aa_s0`` | |
| | | | | | * ``switch_bb_sl`` | |
| | | | | | * ``switch_bb_sr`` | |
| | | | | | * ``switch_bb_s0`` | |
| +------+---------------------------------------+--------------------------+-----------------------------+----------------------+ |