Hi all, Im trying to learn to work with openlane. I coded a simple updown counter. I stucked in gene...
a

Anıl Berk

about 3 years ago
Hi all, Im trying to learn to work with openlane. I coded a simple updown counter. I stucked in generating PDN step. Here are my config and log files below. How can I solve this situation? [ERROR PDN-0185] Insufficient width to add straps on layer met4 in grid "stdcell_grid". My config file:
# User config
set ::env(DESIGN_NAME) updown_counter

# Change if needed
set ::env(VERILOG_FILES) [glob $::env(DESIGN_DIR)/src/*.v]

# Fill this
set ::env(CLOCK_PERIOD) "10.0"
set ::env(CLOCK_PORT) "CLK_i"
set ::env(PL_TARGET_DENSITY) "0.7"
set ::env(CELL_PAD) 0.7
set ::env(DIE_AREA) "0 0 100 100"

set ::env(FP_PDN_AUTO_ADJUST) 0
set ::env(FP_PDN_VOFFSET) "5.0"
set ::env(FP_PDN_HOFFSET) "5.0"

#set ::env(FP_PDN_ENABLE_MACROS_GRID) 0

set ::env(FP_PDN_IRDROP) 1

set filename $::env(DESIGN_DIR)/$::env(PDK)_$::env(STD_CELL_LIBRARY)_config.tcl
if { [file exists $filename] == 1} {
	source $filename
}
logs:
OpenROAD 0b8b7ae255f8fbbbefa57d443949b84e73eed757 
This program is licensed under the BSD-3 license. See the LICENSE file for details.
Components of this program may be licensed under more restrictive licenses which must be honored.
[INFO ODB-0222] Reading LEF file: /openlane/designs/mydesigns/1_UpDown_Counter_4bit/runs/RUN_2022.06.17_14.09.55/tmp/merged.unpadded.nom.lef
[INFO ODB-0223]     Created 13 technology layers
[INFO ODB-0224]     Created 25 technology vias
[INFO ODB-0225]     Created 441 library cells
[INFO ODB-0226] Finished LEF file:  /openlane/designs/mydesigns/1_UpDown_Counter_4bit/runs/RUN_2022.06.17_14.09.55/tmp/merged.unpadded.nom.lef
[INFO ODB-0127] Reading DEF file: /openlane/designs/mydesigns/1_UpDown_Counter_4bit/runs/RUN_2022.06.17_14.09.55/results/floorplan/updown_counter.def
[INFO ODB-0128] Design: updown_counter
[INFO ODB-0130]     Created 11 pins.
[INFO ODB-0131]     Created 72 components and 398 component-terminals.
[INFO ODB-0133]     Created 44 nets and 134 connections.
[INFO ODB-0134] Finished DEF file: /openlane/designs/mydesigns/1_UpDown_Counter_4bit/runs/RUN_2022.06.17_14.09.55/results/floorplan/updown_counter.def
[ERROR PDN-0185] Insufficient width to add straps on layer met4 in grid "stdcell_grid".
Error: pdn_cfg.tcl, 127 PDN-0185
Has anyone done gatelevel netlist simulations with the verilog output from OpenLANE? I've been tryin...
a

Alex Hodges

over 3 years ago
Has anyone done gatelevel netlist simulations with the verilog output from OpenLANE? I've been trying to get it working without any sucess using Icarus Verilog. Specifically, openLane instantiates flip-flops using the
sky130_fd_sc_hd__dfxtp
module, which then instantiates the primitive
sky130_fd_sc_hd__udp_dff$P_pp$PG$N
but doesn't actually make any connections between the two, meaning the simulation doesn't work. Trying a very simple 11-primitive netlist, the schematic openLane generates seems good, having sketched it out and followed the logic through manually - it just doesn't seem to be simulateable. Specifically, using the install of SKY130 that came with OpenLane, my design instantiates several D flops, so I pointed icarus at the gatelevel netlist and these two files:
sky130A/libfs.ref/sky130_fd_sc_hd/verilog/sky130_fd_sc_hd.v
and
sky130A/libfs.ref/sky130_fd_sc_hd/verilog/primitives.v
. My netlist then instantiates this flop:
module sky130_fd_sc_hd__dfxtp (
    Q  ,
    CLK,
    D
);

    // Module ports
    output Q  ;
    input  CLK;
    input  D  ;

    // Module supplies
    supply1 VPWR;
    supply0 VGND;
    supply1 VPB ;
    supply0 VNB ;

    // Local signals
    wire buf_Q      ;
    reg  notifier   ;
    wire D_delayed  ;
    wire CLK_delayed;
    wire awake      ;

    //                                 Name  Output  Other arguments
    sky130_fd_sc_hd__udp_dff$P_pp$PG$N dff0 (buf_Q , D_delayed, CLK_delayed, notifier, VPWR, VGND);
    assign awake = ( VPWR === 1'b1 );
    buf                                buf0 (Q     , buf_Q                                       );

endmodule
You can see the issue here - unless I'm misunderstanding the verilog, the wire
CLK_delayed
is left unconnected, so the primitive which actually handles the logic never sees any input (and icarus bears this out -
CLK_delayed
is simulated as constant
x
). Is this the correct way to be doing simulations, or sky130 not suitable for simulations, or is this an actual bug I've found?