YosysHQ / padring

A padring generator for ASICs
ISC License
22 stars 8 forks source link

Playing with SKY130 #9

Closed rodrigowue closed 7 months ago

rodrigowue commented 1 year ago

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

trcwm commented 1 year ago

Looks like the SKY130 LEF file is of a newer format than the parser can handle. Can you make your sky130_fd_io.lef file available somewhere?

rodrigowue commented 1 year ago

Dear trcwm,

I am doing everything via Google Colab https://colab.research.google.com/drive/1a-eBXsQymqJ7C8_wEMNFpTOb9zGQ52WF?usp=sharing

I've uploaded the LEF file that comes with the conda-eda sky130A install and it is available here: https://drive.google.com/file/d/1bsxI78wYewZh71WOuFOwMURsn1DecbAN/view?usp=sharing

Best regards, Rodrigo

trcwm commented 1 year ago

Thanks Rodrigo,

The SKY130 can now be read by padring. You still have to provide filler cells, which seem to be absent from the .lef you provided.

Please let me know if it now works for you.

Regards, Niels.

rodrigowue commented 1 year ago

Thanks a lot! Now it seems to be working. But I don't think they released the io-fillers yet for sky130. At least I was not able to find it.

Best, Rodrigo

rodrigowue commented 1 year ago

Actually, I was able to find the proper LEF with corners and fillers by following this pdf: https://docs.siliconcompiler.com/_/downloads/en/noah-examples-cleanup/pdf/

However, unfortunately I am facing another issue now.

[...]
[INFO] 37 cells read
[INFO] Found 37 filler cells
[INFO] Die area        : 3000.000000 x 3000.000000 microns
[INFO] Grid            : 1.000000 microns
[INFO] Padring cells   : 39
[INFO] Smallest filler : 1.000000 microns
[INFO] Writing padring to SVG file: padring.svg
[INFO] Writing padring to DEF file: padring.def
[INFO] Writing padring to GDS2 file: padring.gds
[VERB] GDS2Writer created
[WARN] DEF database units not set! does your imported LEF file specify it?
[WARN]   Assuming the value is 100.0
[ERR ] Cannot find filler cell that fits remaining width 0.045000

Maybe should I allow the overlap of the minimum size IO filler? I am not able to open both .svg and .gds. They are broken. image

trcwm commented 1 year ago

Padring complains that there is a gap of 0.045 it cannot fill. You probably need to make the die area a multiple of the minimum size specified by the PAD SITE. Not sure what that is for SKY130; the LEF file you sent me does not declare it.

rodrigowue commented 1 year ago

I think the correct LEF is the ef_io and not the fd_io I was using before. (or maybe I should use both). both here: https://drive.google.com/drive/folders/14EOiY9i91GHFyLOgfrw_k2vSAPfh5qW1?usp=sharing

But I am keeping getting errors even while using 4500 microns. I tried to change the grid but it does not seem to fix it.

[INFO] 37 cells read
[INFO] Found 37 filler cells
[INFO] Die area        : 4500.000000 x 4500.000000 microns
[INFO] Grid            : 0.005000 microns
[INFO] Padring cells   : 40
[INFO] Smallest filler : 1.000000 microns
[INFO] Writing padring to SVG file: padring.svg
[INFO] Writing padring to DEF file: padring.def
[INFO] Writing padring to GDS2 file: padring.gds
[VERB] GDS2Writer created
[WARN] DEF database units not set! does your imported LEF file specify it?
[WARN]   Assuming the value is 100.0
[ERR ] Cannot find filler cell that fits remaining width 0.045000
rodrigowue commented 1 year ago

Nevermind, I was able to work with 3600 x 3600 :) But I don't have any clue why it looks so wobbly... It looks like some cells have different widths image

trcwm commented 1 year ago

Yeah, the cells don't have the same height. Perhaps you're mixing two different PAD libraries? Or maybe it's by design - hard to tell without looking at the combined GDS2 in klayout.