asyncvlsi / actflow

Top-level repository for the ACT EDA flow
https://avlsi.csl.yale.edu/act/
GNU General Public License v2.0
22 stars 5 forks source link

Net propagation detected two nets are shorted #3

Open nbingham1 opened 5 months ago

nbingham1 commented 5 months ago

Observed behavior Act believes that there are shorted signals when there arent when observed in layout

Expected behavior Act should accept the rect file and be prepared for placement.

Potential complications I'm not sure if this is the correct format for the .rect files. The documentation regarding the layer names isn't very clear. It may also be that ACT expects the pull-up stack to be on top while floret puts the pull-down stack on top. This could be fixed fairly easily, but it also shouldn't matter from ACT's perspective.

Files

prs2net.conf.txt layout.conf.txt

/opt/cad/conf/sky130/cells/rect/_0_0cell_0_0g0n_0x0.rect

bbox -73 -61 207 323
inrect GND m1 0 213 34 297
inrect Vdd m1 0 0 34 84
inrect in[0] m1 0 128 66 162
outrect out m2 88 190 146 236
rect # ndiff -12 213 146 297
rect # nwell -73 -61 207 145
rect # pdiff -12 0 146 84
rect GND ndc 0 238 34 272
rect GND pc 0 238 34 272
rect Vdd pc 0 25 34 59
rect Vdd pdc 0 25 34 59
rect in[0] ndc 16 128 50 162
rect in[0] pc 16 128 50 162
rect in[0] polysilicon 0 118 66 172
rect in[0] polysilicon 52 -26 82 323
rect # svtnfet 52 213 82 297
rect # svtpfet 52 0 82 84
rect out m1 100 0 134 297
rect out m1 88 196 146 230
rect out mcon 100 196 134 230
rect out ndc 100 196 134 230
rect out ndc 100 238 134 272
rect out pc 100 238 134 272
rect out pc 100 25 134 59
rect out pdc 100 25 134 59

test.act

defproc testbench(bool a, b)
{
    preal n1 = 6.0;

    prs
    {
        a<n1> -> b-
        ~a<n1> -> b+
    }
}

bool a, b;
testbench dut(a, b);

interact.conf

act:read "test.act"
act:merge "cells.act"
act:expand
act:top testbench
ckt:cell-map
ckt:map
ckt:cell-save "cells.act"
ckt:save-sp "cells.spi"
load-scm "phydb.scm"
phydb:create 1.8 1  "output.lef"
$ touch cells.act
$ interact -ref=1 -Tsky130
interact> source interact.conf
WARNING: Tile::addRect() failed; inconsistent tile types being merged
WARNING: Tile::addRect() failed; inconsistent tile types being merged
WARNING: [g0n_0x0<>] Missing lower base layer at (100,196)?
WARNING: [g0n_0x0<>] Net propagation detected two nets are shorted.
    net1: GND; net2: out
WARNING: [g0n_0x0<>] Net propagation detected two nets are shorted.
    net1: Vdd; net2: out
WARNING: [g0n_0x0<>] Net propagation detected two nets are shorted.
    net1: out; net2: GND
WARNING: [g0n_0x0<>] Net propagation detected two nets are shorted.
    net1: out; net2: Vdd
WARNING: [g0n_0x0<>] Net propagation detected two nets are shorted.
    net1: GND; net2: out
WARNING: [g0n_0x0<>] Net propagation detected two nets are shorted.
    net1: Vdd; net2: out
WARNING: [g0n_0x0<>] Net propagation detected two nets are shorted.
    net1: out; net2: GND
WARNING: [g0n_0x0<>] Net propagation detected two nets are shorted.
    net1: out; net2: Vdd
WARNING: [g0n_0x0<>] Missing lower base layer at (100,196)?
WARNING: [g0n_0x0<>] Net propagation detected two nets are shorted.
    net1: GND; net2: out
WARNING: [g0n_0x0<>] Net propagation detected two nets are shorted.
    net1: Vdd; net2: out
WARNING: [g0n_0x0<>] Net propagation detected two nets are shorted.
    net1: out; net2: GND
WARNING: [g0n_0x0<>] Net propagation detected two nets are shorted.
    net1: out; net2: Vdd
WARNING: [g0n_0x0<>] Missing lower base layer at (100,196)?
WARNING: g0n_0x0<>: center diffusion spacing asjusted (orig: 54; .rect: -297); using .rect file value

rect script

rect -gds /opt/cad/conf/sky130/cells/rect/_0_0cell_0_0g0n_0x0.rect

Screenshot from 2024-04-16 15-27-17

nbingham1 commented 5 months ago
bbox -73 -61 207 323
rect # ndiff -12 213 146 297
rect # pdiff -12 0 146 84
rect in[0] svtpfet 52 0 82 84
rect in[0] svtnfet 52 213 82 297
rect # nwell -73 -61 207 145
rect in[0] polysilicon 0 118 66 172
rect in[0] polysilicon 52 -26 82 323
rect in[0] m1 0 128 66 162
rect out m1 88 196 146 230
rect out m1 100 0 134 297
rect GND m1 0 213 34 297
rect Vdd m1 0 0 34 84
rect out m2 88 190 146 236
rect in[0] pc 16 128 50 162
rect GND ndc 0 238 34 272
rect out ndc 100 238 134 272
rect Vdd pdc 0 25 34 59
rect out pdc 100 25 134 59
rect out mcon 100 196 134 230
rect out mcon 100 196 134 230

After improving the rect export functionality, it looks like I've identified a simpler bug

interact> source interact.conf
WARNING: Tile::addRect() failed; inconsistent tile types being merged
WARNING: Tile::addRect() failed; inconsistent tile types being merged
WARNING: [g0n_0x0<>] Missing upper metal 1 layer at (100,25)?
WARNING: [g0n_0x0<>] Missing upper metal 1 layer at (100,238)?
WARNING: [g0n_0x0<>] Missing upper metal 1 layer at (100,25)?
WARNING: [g0n_0x0<>] Missing upper metal 1 layer at (100,238)?
WARNING: [g0n_0x0<>] Missing upper metal 1 layer at (100,25)?
WARNING: [g0n_0x0<>] Missing upper metal 1 layer at (100,238)?
WARNING: g0n_0x0<>: center diffusion spacing asjusted (orig: 54; .rect: -297); using .rect file value
interact> quit

There may be a < or > where there should be a <= or >=