Giter VIP home page Giter VIP logo

padring's Issues

Failure to fit filler cell results in infinite loop

The behavior of searching for fill cells checks the existing list of fill cells for the widest cell that fits the remaining space. If not found, it prints an error message (src/main.cpp line 268). However, if there is no cell narrow enough to fit the remaining space, it does not break the loop after printing the error, and so it goes into an infinite loop.

Also: I have a fill macro that it 1um wide. padring is also going into an infinite loop telling me that there are no fill macros available to fit a 1um wide space. The diagnostics at the top of running padring show that it sees both my fill cells (5um and 1um) and says that the minimum fill cell size is 1um. So is this a roundoff problem when comparing "cell.first <= width" in src/fillerhandler.h line 53? I will see if I can debug this and figure out if that's true or if it is something else.

Redundant macro error

I inadvertently had an I/O cell LEF file in the wrong place and my script ended up passing the same file twice to padring. This showed up two problems:

(1) (easy to diagnose) When encountering a redundant cell, I get the message "Cell already in database -- replaced". However, is a bunch of random characters, suggesting that it is missing the variable to print, or is pointing to a freed area of memory.

(2) When I read the standard cell macro LEF file twice, I got a bad output from padring. One of the redundantly-defined cells ended up in the output DEF file with the PLACED y coordinate as some huge number, -3.0295537569652e+33. This suggests that when a macro is replaced, something is left uninitialized, or not quite right.

I can debug either problem if you need me to; right now I am working on correcting and testing the GUI script.

---Tim

Playing with SKY130

Hi!

I am trying to use the padframe_cfg in the openlane flow, but prior to that I am trying to generate the padring manually using the tool of this repo.

I keep getting this error:


[INFO] PADRING version 0.02c - compiled on May 15 2023
[INFO] Symbiotic EDA GmbH

[INFO] Reading LEF /content/conda-env/share/pdk/sky130A/libs.ref/sky130_fd_io/lef/sky130_fd_io.lef
[VERB] Added LEF cell sky130_fd_io__corner_bus_overlay
Line 7 : Expected a number
[VERB] Added LEF cell sky130_fd_io__overlay_gpiov2
Line 387 : Expected a number
[VERB] Added LEF cell sky130_fd_io__overlay_vccd_hvc
Line 713 : Expected a number
[VERB] Added LEF cell sky130_fd_io__overlay_vccd_lvc
Line 7483 : Expected a number
[VERB] Added LEF cell sky130_fd_io__overlay_vdda_hvc
Line 14275 : Expected a number
[VERB] Added LEF cell sky130_fd_io__overlay_vdda_lvc
Line 19303 : Expected a number
[VERB] Added LEF cell sky130_fd_io__overlay_vddio_hvc
Line 24331 : Expected a number
[VERB] Added LEF cell sky130_fd_io__overlay_vddio_lvc
Line 24639 : Expected a number
[VERB] Added LEF cell sky130_fd_io__overlay_vssa_hvc
Line 69418 : Expected a number
[VERB] Added LEF cell sky130_fd_io__overlay_vssa_lvc
Line 76222 : Expected a number
[VERB] Added LEF cell sky130_fd_io__overlay_vssd_hvc
Line 82658 : Expected a number
[VERB] Added LEF cell sky130_fd_io__overlay_vssd_lvc
Line 89406 : Expected a number
[VERB] Added LEF cell sky130_fd_io__overlay_vssio_hvc
Line 96242 : Expected a number
[VERB] Added LEF cell sky130_fd_io__overlay_vssio_lvc
Line 115021 : Expected a number
[VERB] Added LEF cell sky130_fd_io__top_gpio_ovtv2
Line 141897 : Expected a number
Line 142189 : Expected EOL
Line 142197 : Expected EOL
Line 142205 : Expected EOL
Line 142229 : Expected EOL
Line 142237 : Expected EOL
Line 142245 : Expected EOL
Line 142253 : Expected EOL
[VERB] Added LEF cell sky130_fd_io__top_gpiov2
Line 142583 : Expected a number
Line 142823 : Expected EOL
Line 142831 : Expected EOL
Line 142839 : Expected EOL
[VERB] Added LEF cell sky130_fd_io__top_ground_hvc_wpad
Line 143196 : Expected a number
[VERB] Added LEF cell sky130_fd_io__top_ground_lvc_wpad
Line 143843 : Expected a number
[VERB] Added LEF cell sky130_fd_io__top_power_hvc_wpad
Line 144252 : Expected a number
[VERB] Added LEF cell sky130_fd_io__top_power_hvc_wpadv2
Line 146122 : Expected a number
[VERB] Added LEF cell sky130_fd_io__top_power_lvc_wpad
Line 147121 : Expected a number
[VERB] Added LEF cell sky130_fd_io__top_xres4v2
Line 147530 : Expected a number
[INFO] 22 cells read
[INFO] Found 0 filler cells
[ERR ] Cannot proceed without filler cells. Please use the --filler option to explicitly specify a filler cell prefix

My CFG file:

# Set the design name
DESIGN macpadframe;

# Define the total chip area in microns
AREA 2000 2000; 

# Placement grid size in microns
GRID 0.5;

# Place the corners
# CORNER <instance name> <location> <cell name> ;

CORNER CORNER_1 SE sky130_fd_io__corner_bus_overlay ;
CORNER CORNER_2 SW sky130_fd_io__corner_bus_overlay ;
CORNER CORNER_3 NE sky130_fd_io__corner_bus_overlay ;
CORNER CORNER_4 NW sky130_fd_io__corner_bus_overlay ;

PAD PADdataa0 N sky130_fd_io__top_gpio_ovtv2 ;
PAD PADdataa1 N sky130_fd_io__top_gpio_ovtv2 ;
PAD PADdataa2 N sky130_fd_io__top_gpio_ovtv2 ;
PAD PADdataa3 N sky130_fd_io__top_gpio_ovtv2 ;
PAD PADdataa4 N sky130_fd_io__top_gpio_ovtv2 ;
PAD PADdataa5 N sky130_fd_io__top_gpio_ovtv2 ;
PAD PADdataa6 N sky130_fd_io__top_gpio_ovtv2 ;
PAD PADdataa7 N sky130_fd_io__top_gpio_ovtv2 ;

PAD PADdatab0 S sky130_fd_io__top_gpio_ovtv2 ;
PAD PADdatab1 S sky130_fd_io__top_gpio_ovtv2 ;
PAD PADdatab2 S sky130_fd_io__top_gpio_ovtv2 ;
PAD PADdatab3 S sky130_fd_io__top_gpio_ovtv2 ;
PAD PADdatab4 S sky130_fd_io__top_gpio_ovtv2 ;
PAD PADdatab5 S sky130_fd_io__top_gpio_ovtv2 ;
PAD PADdatab6 S sky130_fd_io__top_gpio_ovtv2 ;
PAD PADdatab7 S sky130_fd_io__top_gpio_ovtv2 ;

PAD PADclk   W sky130_fd_io__top_gpio_ovtv2 ; 
PAD PADaclr  W sky130_fd_io__top_gpio_ovtv2 ; 
PAD PADVDD_1 W sky130_fd_io__top_power_hvc_wpad ;
PAD PADGND_1 W sky130_fd_io__top_ground_hvc_wpad ;
PAD PADclken W sky130_fd_io__top_gpio_ovtv2 ;
PAD PADsload W sky130_fd_io__top_gpio_ovtv2 ;

PAD PADadder_out0 E sky130_fd_io__top_gpio_ovtv2 ;
PAD PADadder_out1 E sky130_fd_io__top_gpio_ovtv2 ;
PAD PADadder_out2 E sky130_fd_io__top_gpio_ovtv2 ;
PAD PADadder_out3 E sky130_fd_io__top_gpio_ovtv2 ;
PAD PADadder_out4 E sky130_fd_io__top_gpio_ovtv2 ;
PAD PADadder_out5 E sky130_fd_io__top_gpio_ovtv2 ;
PAD PADadder_out6 E sky130_fd_io__top_gpio_ovtv2 ;
PAD PADadder_out7 E sky130_fd_io__top_gpio_ovtv2 ;
PAD PADadder_out8 E sky130_fd_io__top_gpio_ovtv2 ;
PAD PADadder_out9 E sky130_fd_io__top_gpio_ovtv2 ;
PAD PADadder_out10 E sky130_fd_io__top_gpio_ovtv2 ;
PAD PADadder_out11 E sky130_fd_io__top_gpio_ovtv2 ;
PAD PADadder_out12 E sky130_fd_io__top_gpio_ovtv2 ;
PAD PADadder_out13 E sky130_fd_io__top_gpio_ovtv2 ;
PAD PADadder_out14 E sky130_fd_io__top_gpio_ovtv2 ;
PAD PADadder_out15 E sky130_fd_io__top_gpio_ovtv2 ;

And the run script:

#!/bin/sh
padring/build/padring -v --lef /content/conda-env/share/pdk/sky130A/libs.ref/sky130_fd_io/lef/sky130_fd_io.lef --svg padring.svg --def padring.def -o padring.gds macpadframe.config

If anyone know how can I use the io cells from sky130 it would be very helpful.

Best Regards,
Rodrigo

Incorrect offset on NW pad when writing to DEF

Found another very minor bug. This one shows up when the corner pad is not exactly square (as is the case for the I/O library I'm working with right now).

Line 102 of defwriter.cpp should have

y -= item->m_lefinfo->m_sx;

not

y -= item->m_lefinfo->m_sy;

Because the pad is rotated 270 degrees, the Y offset must be equal to the cell width, not the cell height.

Generating GDS2 file

Hi, I just found this padring tool and I like it. I am trying to adopt it for my technology (xfab).
There are however a few problems.
The foundry does not provide *.lef file for all pads. Only few pads within some library files have the *.lef file. Is there a way round it?
Temporarily to get around this issue I created my own dummy .lef file with pads I want to use. And I define each pad that does not have a foundry provided .lef file as:
MACRO HVPAD
CLASS PAD INOUT ;
FOREIGN HVPAD 0 0 ;
ORIGIN 0.000 0.000 ;
SIZE 60.000 BY 257.000 ;
SYMMETRY R90 ;
END HVPAD
Although, I do not know what these lines are about, it seems to work.
Does your program actually use any layer or shape information contained in foundry provided .lef file?
What information from .lef file does it use? What information should I include in my own .lef file for "padring" to work properly?

Second thing. The *.gds file is generated. I import it to Cadence but the actual pads do not show up on layout. There is only a blank box. Pressing "q" on that box shows the right pad name, however the library name is incorrect. And that is the reason why pad layout does not show up. Editing the library name to the library name from which the pad comes corrects the problem and now the pad layout appears on the layout correctly. So is there a way to configure this? Is it possible to specify the pad cell name and library name from which the pad should be sourced?
And there is a messege from Cadence that the imported gds layer do not match the tech layer map.
How is this "padring" program suppose to work when everything goes smoothly? Maybe I am expecting something that you did not intend to build.

I do not know how exactly GDS2 and this tool work but creating a GDS2 file with a pad name (pad cell name) without a library name from which pad comes from, does not make sense. Cadence simply cannot create a layout with just a cell name. One must provide library name and cell name. Otherwise there is nothing shown on layout.

And one more thing. Is there a way to import the pads into schematic?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.