I created a set of schematics for the sky130 `gpiov2` cell LVS. Feel free to post PR’s for simulatio...
m
I created a set of schematics for the sky130
gpiov2
cell LVS. Feel free to post PR’s for simulation settings. LVS instructions are in the
README
file. Hopefully this will clarify some of the
verilog/rtl/user_defines.v
settings. https://github.com/d-m-bailey/sky130_fd_io.git
👍 3
🌍 1
@Tim Edwards looking at the
user_defines.v
,
gpio_control_block.v
, and the schematic, I’ve noticed
OUTPUT_DISABLE
has no effect in
USER
modes. Can you verify this? Here’s some relevant code from rtl.
Copy code
assign gpio_in_unbuf = pad_gpio_in;
    assign mgmt_gpio_in = (gpio_inenb == 1'b0 && gpio_outenb == 1'b1) ?
                        pad_gpio_in : 1'bz;
    assign pad_gpio_outenb = (mgmt_ena) ? ((mgmt_gpio_oeb == 1'b1) ?
                        gpio_outenb : 1'b0) : user_gpio_oeb;
    assign pad_gpio_out = (mgmt_ena) ? ((mgmt_gpio_oeb == 1'b1) ?
                        ((gpio_dm[2:1] == 2'b01) ? ~gpio_dm[0] : mgmt_gpio_out) :
                        mgmt_gpio_out) : user_gpio_out;

    /* Buffer user_gpio_in with an enable that is set by the user domain vccd */

    gpio_logic_high gpio_logic_high (
            .gpio_logic1(gpio_logic1)
    );

    sky130_fd_sc_hd__einvp_8 gpio_in_buf (
            .Z(user_gpio_in),
            .A(~gpio_in_unbuf),
            .TE(gpio_logic1)
    );
This means that
user_oeb
is always needed for
USER
modes (specifically,
INPUT
and
ANALOG
) to prevent Hi-Z input to the
pad_gpio_outenb
selector, correct? Also for
USER_INPUT_PULLDOWN
and
USER_INPUT_PULLUP
, it’s the designer’s responsibility to set
io_oeb
to low and
io_out
to high for pull up and low for pull down, right?
t
@Mitch Bailey: Technically all true, but as we discussed, the
user_gpio_in
signal is always what's on the pad regardless of whether the mode is
MGMT
or
USER
, so input modes (other than pull-up and pull-down) can be made to work without
user_gpio_oeb
; and analog mode can always be made to work using
MGMT
mode and so also can work without
user_gpio_oeb
. The main issue is that for user output, the
user_gpio_oeb
line must be set low, and that is also true for the pull-up and pull-down input modes, for the reasons you mentioned.