mirror of https://github.com/efabless/caravel.git
243 lines
13 KiB
ReStructuredText
243 lines
13 KiB
ReStructuredText
|
.. raw:: html
|
||
|
|
||
|
<!---
|
||
|
# SPDX-FileCopyrightText: 2020 Efabless Corporation
|
||
|
#
|
||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
# you may not use this file except in compliance with the License.
|
||
|
# You may obtain a copy of the License at
|
||
|
#
|
||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||
|
#
|
||
|
# Unless required by applicable law or agreed to in writing, software
|
||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
# See the License for the specific language governing permissions and
|
||
|
# limitations under the License.
|
||
|
#
|
||
|
# SPDX-License-Identifier: Apache-2.0
|
||
|
-->
|
||
|
|
||
|
====================
|
||
|
Caravel vs. Caravan
|
||
|
====================
|
||
|
|
||
|
-----------
|
||
|
Caravel
|
||
|
-----------
|
||
|
|
||
|
The Caravel chip user project can use the GPIO pins as analog signals,
|
||
|
and this is the preferred method, as the GPIO pins have ESD protection
|
||
|
on them.
|
||
|
|
||
|
The restrictions on the use of GPIO pins for analog are the following:
|
||
|
|
||
|
(1) The voltage range of the analog signal must be between ``VSSIO`` and
|
||
|
``VDDIO``. On the demonstration board shipped with Caravel, ``VDDIO`` will
|
||
|
be set to ``3.3V`` from an external voltage regulator. However, ``VDDIO``
|
||
|
may be anywhere in the range of ````1.8V```` to ``5.5V``.
|
||
|
|
||
|
(2) The frequency range of the GPIO pads is ``0`` to ``60MHz``
|
||
|
|
||
|
(3) Analog signals should be connected to the ``analog_io`` pins of the user
|
||
|
project wrapper. This pin connects to the pad through a 120 ohm
|
||
|
resistor, for ESD protection. However, it is recommended to place a
|
||
|
diode close to the terminus in the user project circuit for any input
|
||
|
signal that is not otherwise connected to diffusion, for additional
|
||
|
ESD protection. This resistance should be included in system-level
|
||
|
simulations.
|
||
|
|
||
|
(4) When an analog signal is connected to a GPIO pad, the input and
|
||
|
output buffers of the GPIO pad should be turned off, by setting the
|
||
|
GPIO configuration to ``GPIO_MODE_USER_STD_ANALOG`` (see defs.h).
|
||
|
Ideally, the buffers should be turned off by default on chip power-up,
|
||
|
which is done by applying the same configuration in the ``user_defines.v``
|
||
|
file. This ensures that the digital buffers will never be turned on
|
||
|
for those GPIOs.
|
||
|
|
||
|
(5) Analog signals may not use GPIO ``0 to 6 or GPIO 36 and 37``. This prevents
|
||
|
the critical signals such as debug, housekeeping SPI, and flash QSPI
|
||
|
mode pins from being unable to operate due to a constant analog signal
|
||
|
being present on the pad. Therefore there are up to 28 GPIO pins that
|
||
|
can be used for analog signaling.
|
||
|
|
||
|
Note that the signal names ``analog_io[27:0]`` are shifted relative to the
|
||
|
GPIO pad names (mprj_io). So analog_io[0] connects to ``mprj_io[7]``, and
|
||
|
so forth up to ``analog_io[27]`` which connects to ``mprj_io[34]``.
|
||
|
|
||
|
---------
|
||
|
Caravan
|
||
|
---------
|
||
|
|
||
|
In the case that a pin is needed that requires voltages above ``5.5V``, below
|
||
|
``0.0V``, has a frequency higher than ``60MHz``, or cannot tolerate the ``120 ohm``
|
||
|
series resistance, then the Caravan chip provides 11 pads which are
|
||
|
straight-through connections from core to pad. These pads replace pads
|
||
|
``mprj_io[14]`` to ``mprj_io[24]`` and extend across the top of the padframe.
|
||
|
|
||
|
**WARNING:**
|
||
|
|
||
|
The analog pads provide NO ESD protection, because the use of
|
||
|
the pads is open-ended and requirements are different for protection of,
|
||
|
say, high voltage, negative voltage, and very high frequency.
|
||
|
|
||
|
All pads other than the 11 that have straight-through connections from
|
||
|
user project to pad are the same pads as used on Caravel, so there are
|
||
|
up to 17 GPIO pins that can be used for analog signaling under the same
|
||
|
restrictions as noted above for Caravel. These pins are given a different
|
||
|
name on Caravan, which is ``user_gpio_analog[17:0]``.
|
||
|
|
||
|
Because analog circuits will often run at ``3.3V``, digital circuitry for
|
||
|
controlling such circuits should use the HVL digital standard cell library
|
||
|
for ``3.3V`` compatibility. These circuits can connect directly to I/O inputs
|
||
|
if the ``io_in_3v3[26:0]`` pins are used. These pins are copies of the GPIO
|
||
|
pin digital inputs in the ``3.3V`` domain. Note, however, that there is no
|
||
|
corresponding GPIO output in the ``3.3V`` domain. ``3.3V`` outputs must be level
|
||
|
converted into the ``1.8V`` domain using, for example, the cell
|
||
|
sky130_fd_sc_hvl__lsbufhv2lv_1, before being connected to either io_out
|
||
|
or io_oeb.
|
||
|
|
||
|
The full correspondence between mprj_io pins and internal connections is
|
||
|
shown below, copied from
|
||
|
|
||
|
``caravel_user_project_analog/verilog/rtl/user_analog_proj_example.v``:
|
||
|
|
||
|
Caravan signal connections to I/O pins:
|
||
|
|
||
|
============ =============================== ============================== ================================
|
||
|
I/O pin user project digital connection user project analog connection optional power clamp connection
|
||
|
============ =============================== ============================== ================================
|
||
|
mprj_io[37] io_in/out/oeb/in_3v3[26] --- ---
|
||
|
mprj_io[36] io_in/out/oeb/in_3v3[25] --- ---
|
||
|
mprj_io[35] io_in/out/oeb/in_3v3[24] gpio_analog/noesd[17] ---
|
||
|
mprj_io[34] io_in/out/oeb/in_3v3[23] gpio_analog/noesd[16] ---
|
||
|
mprj_io[33] io_in/out/oeb/in_3v3[22] gpio_analog/noesd[15] ---
|
||
|
mprj_io[32] io_in/out/oeb/in_3v3[21] gpio_analog/noesd[14] ---
|
||
|
mprj_io[31] io_in/out/oeb/in_3v3[20] gpio_analog/noesd[13] ---
|
||
|
mprj_io[30] io_in/out/oeb/in_3v3[19] gpio_analog/noesd[12] ---
|
||
|
mprj_io[29] io_in/out/oeb/in_3v3[18] gpio_analog/noesd[11] ---
|
||
|
mprj_io[28] io_in/out/oeb/in_3v3[17] gpio_analog/noesd[10] ---
|
||
|
mprj_io[27] io_in/out/oeb/in_3v3[16] gpio_analog/noesd[9] ---
|
||
|
mprj_io[26] io_in/out/oeb/in_3v3[15] gpio_analog/noesd[8] ---
|
||
|
mprj_io[25] io_in/out/oeb/in_3v3[14] gpio_analog/noesd[7] ---
|
||
|
mprj_io[24] --- user_analog[10] ---
|
||
|
mprj_io[23] --- user_analog[9] ---
|
||
|
mprj_io[22] --- user_analog[8] ---
|
||
|
mprj_io[21] --- user_analog[7] ---
|
||
|
mprj_io[20] --- user_analog[6] clamp_high/low[2]
|
||
|
mprj_io[19] --- user_analog[5] clamp_high/low[1]
|
||
|
mprj_io[18] --- user_analog[4] clamp_high/low[0]
|
||
|
mprj_io[17] --- user_analog[3] ---
|
||
|
mprj_io[16] --- user_analog[2] ---
|
||
|
mprj_io[15] --- user_analog[1] ---
|
||
|
mprj_io[14] --- user_analog[0] ---
|
||
|
mprj_io[13] io_in/out/oeb/in_3v3[13] gpio_analog/noesd[6] ---
|
||
|
mprj_io[12] io_in/out/oeb/in_3v3[12] gpio_analog/noesd[5] ---
|
||
|
mprj_io[11] io_in/out/oeb/in_3v3[11] gpio_analog/noesd[4] ---
|
||
|
mprj_io[10] io_in/out/oeb/in_3v3[10] gpio_analog/noesd[3] ---
|
||
|
mprj_io[9] io_in/out/oeb/in_3v3[9] gpio_analog/noesd[2] ---
|
||
|
mprj_io[8] io_in/out/oeb/in_3v3[8] gpio_analog/noesd[1] ---
|
||
|
mprj_io[7] io_in/out/oeb/in_3v3[7] gpio_analog/noesd[0] ---
|
||
|
mprj_io[6] io_in/out/oeb/in_3v3[6] --- ---
|
||
|
mprj_io[5] io_in/out/oeb/in_3v3[5] --- ---
|
||
|
mprj_io[4] io_in/out/oeb/in_3v3[4] --- ---
|
||
|
mprj_io[3] io_in/out/oeb/in_3v3[3] --- ---
|
||
|
mprj_io[2] io_in/out/oeb/in_3v3[2] --- ---
|
||
|
mprj_io[1] io_in/out/oeb/in_3v3[1] --- ---
|
||
|
mprj_io[0] io_in/out/oeb/in_3v3[0] --- ---
|
||
|
============ =============================== ============================== ================================
|
||
|
|
||
|
|
||
|
Three of the eleven stright-through analog connections on the Caravel chip
|
||
|
go to pads which have voltage clamps underneath. A voltage clamp is a
|
||
|
circuit that protects against ESD events by detecting a rapid rise in
|
||
|
voltage on a power supply pad, and enabling a switch that shorts the
|
||
|
power supply to a nearby ground, reducing the event's voltage spike and
|
||
|
shunting current through a path close to the pads and away from sensitive
|
||
|
circuitry. Each clamp has a positive connection (clamp_high) and a negative
|
||
|
connection (clamp_low). Neither of these pins is connected by default. The
|
||
|
clamp_high pin should be connected to a power supply, preferably the one
|
||
|
connected to the pad directly above it. The clamp_low pin should be
|
||
|
connected to a ground return. Due to the nature of the user project wrapper
|
||
|
as a drop-in module, the current shunting path will be much longer than the
|
||
|
ideal short path. Be sure to make this path as wide as practicable.
|
||
|
|
||
|
The clamp circuit is a high-voltage clamp type intended for operation on a
|
||
|
power supply equal to VDDIO, or nominally ``3.3V`` for the demonstration board
|
||
|
(and otherwise within the range of ``1.8V`` to ``5.5V``). Because the I/O voltage
|
||
|
range includes ``1.8V``, this clamp will operate at ``1.8V``. However, it provides
|
||
|
the best ESD protection for ``3.3V`` supplies. It should not be used with any
|
||
|
supply higher than VDDIO.
|
||
|
|
||
|
Because of the large amount of circuitry (the clamp) directly underneath the
|
||
|
pad, the three pads with the clamps are not intended for high-speed use. These
|
||
|
pads are best used for additional power supply inputs to the analog chip.
|
||
|
The three pads that contain clamps are also designed to provide the largest
|
||
|
amount of current, up to 265mA for each pad (see below). The pin connection
|
||
|
at the user project wrapper boundary consists of two ports, 25um wide, each
|
||
|
comprising a stack of metals 3, 4, and 5. To get the maximum current through
|
||
|
the pad without creating electromigration issues, connect to all three metals
|
||
|
on both ports.
|
||
|
|
||
|
Power supply routing on Caravan is expected to be done manually. Allow less
|
||
|
than ``1.5mA`` per micron width on metal3 and metal4 to satisfy electromigration
|
||
|
rules, and less than ``2.3mA`` per micron on metal5. The maximum current per
|
||
|
dedicated power pad is
|
||
|
|
||
|
.. math::
|
||
|
((25um * 2) * (1.5 + 1.5 + 2.3)) = 265mA
|
||
|
|
||
|
Wrapper pins
|
||
|
--------------------------
|
||
|
|
||
|
Due to the way the wrapper circuit is "dropped into" the Caravel or Caravan
|
||
|
harness chip, a continuity check must be run at tape-in to ensure that the
|
||
|
pins of the wrapper connect correctly to the corresponding locations on the
|
||
|
harness. This requires that each pin in the design must be on a unique net.
|
||
|
Because of this requirement, pins in the user wrapper may not be shorted
|
||
|
together, otherwise only one of the shorted pins can be represented as a
|
||
|
subcircuit port in the extracted SPICE netlist.
|
||
|
|
||
|
Because shorting pins together is a likely use case, especially in analog
|
||
|
designs, the recommended procedure when connecting pins together is to
|
||
|
place a "metal resistor" in front of the pin connection on all connections
|
||
|
other than the primary one. Most pin connections are on metal3, so a
|
||
|
metal3 resistor is preferred. The "metal resistor" in the layout is an
|
||
|
identifying layer, not a mask layer, so the metal should be continuous
|
||
|
through to the connection, with the resistor identifier layer spanning the
|
||
|
width of the connection.
|
||
|
|
||
|
For example, the user may want to tie together VDDA1 and VDDA2 to double
|
||
|
the current capacity of the ``3.3V`` domain power supply. The user should
|
||
|
route a power bus and connect it directly to the VDDA1 pin. Then, a
|
||
|
route can be made to the VDDA2 pin but should pass through a metal3
|
||
|
resistor before making the connection to the pin. Any such resistor
|
||
|
must be represented as a device in a schematic drawing for the design to
|
||
|
pass LVS.
|
||
|
|
||
|
Allocating power supplies
|
||
|
--------------------------
|
||
|
|
||
|
As mentioned above, power supplies may be connected together if needed.
|
||
|
These are the available power supplies:
|
||
|
|
||
|
- VCCD1/VSSD1 : User domain 1, ``1.8V`` power
|
||
|
- VCCD2/VSSD2 : User domain 2, ``1.8V`` power
|
||
|
- VDDA1/VSSA1 : User domain 1, ``3.3V`` power
|
||
|
- VDDA2/VSSA2 : User domain 2, ``3.3V`` power
|
||
|
- VDDIO/VSSIO : Management domain, ``3.3V`` power supply to padframe
|
||
|
- VCCD/VSSD : Management domain, ``1.8V`` power supply to padframe and SoC
|
||
|
|
||
|
All pad connections that are chip pins are in the VDDIO domain. All low
|
||
|
voltage pad connections to the chip core are in the VCCD domain, and
|
||
|
the only high voltage pins (io_in_3v3; see above) connected to the user
|
||
|
project wrapper are in the VDDIO domain.
|
||
|
|
||
|
Any of the user power supplies that are in the same power domain can be
|
||
|
connected together to provide additional current capacity. So VCCD1 and
|
||
|
VCCD2 may be connected together (along with connecting together VSSD1
|
||
|
and VSSD2); and VDDA1 and VDDA2 may be connected together (along with
|
||
|
VSSA1 and VSSA2). The user project does not have direct access to the
|
||
|
management area power domains, including the supplies that drive the
|
||
|
padframe I/O.
|