Md Omar Faruque
02/28/2024, 4:35 AMMitch Bailey
02/28/2024, 11:30 AM42-lvs.lef.log
?Md Omar Faruque
02/28/2024, 3:35 PMMitch Bailey
02/28/2024, 3:45 PMopenlane/user_proj_example/runs/24_02_27_21_33/logs/signoff/42-user_proj_example.lef.lvs.log
also?
You can see that the layout has 2 more nets than the verilog at the top level.Md Omar Faruque
02/28/2024, 3:48 PMMd Omar Faruque
02/28/2024, 4:14 PMMitch Bailey
02/28/2024, 5:46 PMSubcircuit summary:
Circuit 1: user_proj_example |Circuit 2: user_proj_example
-------------------------------------------|-------------------------------------------
sky130_fd_sc_hd__tapvpwrvgnd_1 (101555->1) |sky130_fd_sc_hd__tapvpwrvgnd_1 (101555->1)
sky130_ef_sc_hd__decap_12 (405248->1) |sky130_ef_sc_hd__decap_12 (405248->1)
sky130_fd_sc_hd__fill_1 (101902->1) |sky130_fd_sc_hd__fill_1 (101902->1)
sky130_fd_sc_hd__decap_6 (99723->1) |sky130_fd_sc_hd__decap_6 (99723->1)
sky130_fd_sc_hd__decap_8 (551->1) |sky130_fd_sc_hd__decap_8 (551->1)
sky130_fd_sc_hd__decap_3 (2951->1) |sky130_fd_sc_hd__decap_3 (2951->1)
sky130_fd_sc_hd__diode_2 (16->7) |sky130_fd_sc_hd__diode_2 (16->7)
sky130_fd_sc_hd__decap_4 (551->1) |sky130_fd_sc_hd__decap_4 (551->1)
sky130_fd_sc_hd__buf_12 (6) |sky130_fd_sc_hd__buf_12 (6)
sky130_fd_sc_hd__fill_2 (17->1) |sky130_fd_sc_hd__fill_2 (17->1)
sky130_fd_sc_hd__nor2_1 (2) |sky130_fd_sc_hd__nor2_1 (2)
sky130_fd_sc_hd__dfxtp_4 (3) |sky130_fd_sc_hd__dfxtp_4 (3)
inverter (1) |inverter (1)
sky130_fd_sc_hd__clkbuf_16 (4) |sky130_fd_sc_hd__clkbuf_16 (4)
sky130_fd_sc_hd__conb_1 (4) |sky130_fd_sc_hd__conb_1 (4)
sky130_fd_sc_hd__clkbuf_2 (1) |sky130_fd_sc_hd__clkbuf_2 (1)
sky130_fd_sc_hd__dlygate4sd3_1 (2) |sky130_fd_sc_hd__dlygate4sd3_1 (2)
sky130_fd_sc_hd__dfxtp_1 (1) |sky130_fd_sc_hd__dfxtp_1 (1)
sky130_fd_sc_hd__dlymetal6s2s_1 (1) |sky130_fd_sc_hd__dlymetal6s2s_1 (1)
sky130_fd_sc_hd__buf_1 (1) |sky130_fd_sc_hd__buf_1 (1)
sky130_fd_sc_hd__and3b_1 (1) |sky130_fd_sc_hd__and3b_1 (1)
sky130_fd_sc_hd__a31o_1 (2) |sky130_fd_sc_hd__a31o_1 (2)
sky130_fd_sc_hd__nand4_1 (1) |sky130_fd_sc_hd__nand4_1 (1)
sky130_fd_sc_hd__a21oi_1 (2) |sky130_fd_sc_hd__a21oi_1 (2)
sky130_fd_sc_hd__o21a_1 (1) |sky130_fd_sc_hd__o21a_1 (1)
Number of devices: 48 |Number of devices: 48
Number of nets: 44 **Mismatch** |Number of nets: 42 **Mismatch**
Here you can see that your inverter has not been connected to power. (layout is on the left, source is on the right)
Net: inverter/vdd |Net: dummy_40
inverter/vdd = 1 | sky130_fd_sc_hd__conb_1/proxyHI = 1
...
|
Net: inverter/gnd |(no matching net)
inverter/gnd = 1 |
Can you share your config file? Power is not normally routed like other signals.Md Omar Faruque
02/28/2024, 11:35 PMMd Omar Faruque
02/29/2024, 6:35 AMMitch Bailey
02/29/2024, 11:10 AMvdda1
to VDD_NETS
and vssa1
to GND_NETS
.
Also change your FP_PDN_MACRO_HOOKS
line to
"FP_PDN_MACRO_HOOKS": ["inverter vdda1 vssa1 vdd gnd"],
Md Omar Faruque
02/29/2024, 3:16 PMMitch Bailey
02/29/2024, 4:09 PMTry addingDid you do this?tovdda1
andVDD_NETS
tovssa1
.GND_NETS
Md Omar Faruque
02/29/2024, 4:49 PMMd Omar Faruque
02/29/2024, 4:50 PMMd Omar Faruque
02/29/2024, 5:08 PMMd Omar Faruque
02/29/2024, 5:12 PMMitch Bailey
02/29/2024, 6:08 PMMd Omar Faruque
02/29/2024, 6:22 PMMd Omar Faruque
03/01/2024, 3:33 AMMitch Bailey
03/01/2024, 3:35 AMvdda1
and vssa1
like this
"VDD_NETS": [
"vccd1", "vdda1"
],
"GND_NETS": [
"vssd1", "vssa1"
],
And then check the placement to ensure that the cell will intersect the necessary power rails.Md Omar Faruque
03/01/2024, 4:08 AMMitch Bailey
03/01/2024, 5:02 AMFP_PDN_MACRO_HOOKS
line.
Try this config file
{
"DESIGN_NAME": "user_proj_example",
"DESIGN_IS_CORE": 0,
"VERILOG_FILES": [
"dir::../../verilog/rtl/defines.v",
"dir::../../verilog/rtl/user_proj_example.v"
],
"EXTRA_LEFS": "dir::macros/lef/*.lef",
"EXTRA_GDS_FILES": "dir::macros/gds/*.gds",
"MACRO_PLACEMENT_CFG": "dir::macro.cfg",
"FP_PDN_VERTICAL_LAYER": "met4",
"FP_PDN_HORIZONTAL_LAYER": "met3",
"VERILOG_FILES_BLACKBOX": [
"dir::../../verilog/rtl/inverter.v"
],
"FP_PDN_MACRO_HOOKS": [
"inverter",
"vdda1",
"vssa1",
"vdda1",
"vssa1"
],
"CLOCK_PERIOD": 25,
"CLOCK_PORT": "wb_clk_i",
"CLOCK_NET": "<http://counter.net|counter.net>",
"FP_SIZING": "absolute",
"DIE_AREA": "0 0 150 250",
"FP_PIN_ORDER_CFG": "dir::pin_order.cfg",
"MAX_TRANSITION_CONSTRAINT": 1,
"MAX_FANOUT_CONSTRAINT": 16,
"PL_TARGET_DENSITY": 0.4,
"PL_RESIZER_SETUP_SLACK_MARGIN": 0.4,
"GLB_RESIZER_SETUP_SLACK_MARGIN": 0.2,
"GLB_RESIZER_HOLD_SLACK_MARGIN": 0.2,
"PL_RESIZER_HOLD_SLACK_MARGIN": 0.4,
"MAGIC_DEF_LABELS": 0,
"SYNTH_BUFFERING": 0,
"RUN_HEURISTIC_DIODE_INSERTION": 1,
"HEURISTIC_ANTENNA_THRESHOLD": 110,
"GRT_REPAIR_ANTENNAS": 1,
"VDD_NETS": [
"vccd1",
"vdda1"
],
"GND_NETS": [
"vssd1",
"vssa1"
],
"IO_SYNC": 0,
"BASE_SDC_FILE": "dir::base_user_proj_example.sdc",
"RUN_CVC": 1,
"pdk::sky130*": {
"FP_CORE_UTIL": 45,
"RT_MAX_LAYER": "met4",
"scl::sky130_fd_sc_hd": {
"CLOCK_PERIOD": 25
},
"scl::sky130_fd_sc_hdll": {
"CLOCK_PERIOD": 10
},
"scl::sky130_fd_sc_hs": {
"CLOCK_PERIOD": 8
},
"scl::sky130_fd_sc_ls": {
"CLOCK_PERIOD": 10,
"SYNTH_MAX_FANOUT": 5
},
"scl::sky130_fd_sc_ms": {
"CLOCK_PERIOD": 10
}
},
"pdk::gf180mcuC": {
"STD_CELL_LIBRARY": "gf180mcu_fd_sc_mcu7t5v0",
"CLOCK_PERIOD": 24,
"FP_CORE_UTIL": 40,
"RT_MAX_LAYER": "Metal4",
"SYNTH_MAX_FANOUT": 4,
"PL_TARGET_DENSITY": 0.45
}
}
Md Omar Faruque
03/01/2024, 6:28 AMMd Omar Faruque
03/01/2024, 6:28 AMMitch Bailey
03/01/2024, 6:44 AMMd Omar Faruque
03/01/2024, 6:46 AMMitch Bailey
03/01/2024, 7:29 AMMd Omar Faruque
03/01/2024, 5:57 PMMitch Bailey
03/01/2024, 11:05 PMverilog/rtl/user_proj_example.v
file?
The odb is missing vssa1
and vdda1
power rails.Md Omar Faruque
03/01/2024, 11:54 PMMitch Bailey
03/02/2024, 1:37 AMverilog/gl/user_proj_example.v
? Is that available? Maybe it’s somewhere in the runs
directory.Md Omar Faruque
03/02/2024, 6:41 AMMd Omar Faruque
03/02/2024, 6:47 AMMd Omar Faruque
03/02/2024, 6:49 AMMitch Bailey
03/02/2024, 7:05 AMvssa1
and vdda1
power are missing from that netlist.Md Omar Faruque
03/02/2024, 7:09 AMMitch Bailey
03/02/2024, 7:09 AMinverter inverter (.A(net1),
.Y(net3),
.vdda1(vccd1),
.vssa1(vssd1));
Md Omar Faruque
03/02/2024, 7:17 AMMd Omar Faruque
03/02/2024, 7:19 AMMitch Bailey
03/02/2024, 7:20 AMverilog/rtl
directory, right?Md Omar Faruque
03/02/2024, 7:20 AMMd Omar Faruque
03/02/2024, 7:21 AMMitch Bailey
03/02/2024, 7:23 AMFP_PDN_MACRO_HOOKS
is one string
"FP_PDN_MARCO_HOOKS": ["inverter vdda1 vssa1 vdda1 vssa1"],
Md Omar Faruque
03/02/2024, 7:26 AMMd Omar Faruque
03/02/2024, 7:31 AMMd Omar Faruque
03/02/2024, 7:34 AMMitch Bailey
03/02/2024, 7:38 AMVSRC_LOC_FILE
file is related to power routing. Maybe you need to use a modified pdn.tcl
file.
@Kareem Farid could you help on this one? In order to create a macro with mulltiple power and ground rails, do you need to modify pdn.tcl
? It looks like the synthesized verilog is connecting the analog macro to digital power, but that’s not related to the pdn, is it?Md Omar Faruque
03/03/2024, 5:05 AMKareem Farid
03/03/2024, 8:52 AMMd Omar Faruque
03/03/2024, 8:30 PMMd Omar Faruque
03/05/2024, 5:26 PMKareem Farid
03/05/2024, 9:49 PMMitch Bailey
03/06/2024, 2:08 AMmacro.cfg
and pin_order.cfg
?Mitch Bailey
03/06/2024, 3:48 AMverilog/rtl/inverter.v
file is missing a /// sta-blackbox
line, but that doesn’t solve the problem.
It may be an openroad issue. write_verilog
in scripts/tcl_commands/all.tcl
calls the openroad/write_views.tcl
with the -powered_to
option. The output netlist has vdda1
and vssa1
connections, but the top ports are missing.
Here’s the gl netlist output from openroad.
module user_proj_example (analog_io1,
analog_io2,
wb_clk_i,
wb_rst_i,
vccd1,
vssd1,
io_oeb,
io_out);
...
inverter inverter (.A(net1),
.Y(net3),
.vdda1(vdda1),
.vssa1(vssa1));
Here’s the original rtl
`default_nettype none
module user_proj_example (
`ifdef USE_POWER_PINS
inout vdda1,
inout vssa1,
inout vccd1, // User area 1 1.8V supply
inout vssd1, // User area 1 digital ground
`endif
input wb_clk_i,
input wb_rst_i,
output reg [3:0] io_out,
output wire [3:0] io_oeb,
input analog_io1,
output analog_io2
);
assign io_oeb = 4'b0000000;
`ifdef COCOTB_SIM
initial begin
$dumpfile ("user_proj_example.vcd");
$dumpvars (0, user_proj_example);
#1;
end
localparam MAX_COUNT = 100;
`else
localparam MAX_COUNT = 100;
`endif
always @(posedge wb_clk_i) begin
if (wb_rst_i) begin
io_out <= 4'd0; // Reset to 0 on rising edge of rst
end else begin
io_out <= io_out + 4'd1; // Increment on rising edge of clk
end
end
inverter inverter (
`ifdef USE_POWER_PINS
.vdda1(vdda1),
.vssa1(vssa1),
//.vccd1(vccd1),
// .vssd1(vssd1),
`endif
.A(analog_io1),
.Y(analog_io2)
);
endmodule
`default_nettype wire
Md Omar Faruque
03/06/2024, 11:32 AMKareem Farid
03/06/2024, 11:34 AMMd Omar Faruque
03/06/2024, 12:24 PMKareem Farid
03/06/2024, 12:25 PMMitch Bailey
03/06/2024, 2:49 PMMd Omar Faruque
03/07/2024, 1:59 AMKareem Farid
03/07/2024, 10:07 AMFP_PDN_SKIPTRIM
and moved the macro to 40 150
and I am seeing vssa1
and vdda1
getting connected to the macro. I am waiting to see the rest of the flowKareem Farid
03/07/2024, 10:15 AMRUN_IRDROP_REPORT
Md Omar Faruque
03/07/2024, 10:17 AMMd Omar Faruque
03/07/2024, 10:39 AMKareem Farid
03/07/2024, 12:33 PM"SYNTH_USE_PG_PINS_DEFINES": "USE_POWER_PINS",
"LVS_CONNECT_BY_LABEL": true
and it got it passing.Kareem Farid
03/07/2024, 12:34 PMSYHNT_USE_PG_PINS_DEFINES
is needed for the flow especially when using multiple power domainsKareem Farid
03/07/2024, 12:36 PMLVS_CONNECT_BY_LABEL
is needed because with the above configuration their is a floating vdda1 stripe which would cause LVS errors as both nets would be extracted separatelyKareem Farid
03/07/2024, 12:36 PMLVS_CONNECT_BY_LABEL
is rather not recommended. Another fix it connecting all vdda1 pins in the design together. This can be achieved using a custom pdn_cfg.tcl fileMd Omar Faruque
03/08/2024, 6:29 AMKareem Farid
03/08/2024, 12:55 PMMitch Bailey
03/08/2024, 1:36 PM"FP_PDN_MACRO_HOOKS": ["mprj vccd1 vssd1 vccd1 vssd1,", "mprj vdda1 vssa1 vdda1 vssa1"],
Where did PDN_MACRO_CONNECTIONS
come from? I couldn’t find it in the documentation.Md Omar Faruque
03/09/2024, 4:42 AMMd Omar Faruque
03/09/2024, 4:53 AMMitch Bailey
03/09/2024, 5:13 AMlvs/user_project_wrapper/lvs_config.json
file.
There should be instructions in the precheck repo README, but if you have problems, let me know.
You could share precheck_results/<tag>/logs/LVS_check.log
and precheck_results/<tag>/outputs/reports/lvs.report
for advice on a specific problem.Md Omar Faruque
03/09/2024, 5:25 AMMitch Bailey
03/09/2024, 6:35 AMCircuit 2 cell inverter is a black box; will not flatten Circuit 1
If you create a spice netlist for the inverter from an xschem schematic, you can add that to the lvs_config.json file.
"LVS_SPICE_FILES": [
"$UPRJ_ROOT/xschem/simulation/inverter.spice"
]
The second problem that you’re seeing is that vssd1
and vssa1
are shorted through the substrate in the layout but separate in the source. If you absolutely what these 2 nets separated, then you’ll want to put the analog inverter in a dnwell region surrounded with nwell and connected to vdda1
.
Net: vssd1 |Net: vssd1
sky130_fd_sc_hd__diode_2/VGND = 6 | sky130_fd_sc_hd__diode_2/VGND = 6
...
sky130_fd_sc_hd__conb_1/VGND = 4 | sky130_fd_sc_hd__conb_1/VGND = 4
inverter/vssa1 = 1 |
|
(no matching net) |Net: vssa1
| inverter/vssa1 = 1
If you’re ok with vssd1
and vssa1
being connected through psubstrate because it has a high resistance and you don’t think there will be an effect on your circuit, you can cover the inverter with substrateCut
(also know as isosub
) 81/53
. This will isolate the regions during extraction.Md Omar Faruque
03/15/2024, 11:20 PMMd Omar Faruque
03/15/2024, 11:29 PMMd Omar Faruque
03/16/2024, 8:18 PMMitch Bailey
03/16/2024, 9:32 PMMitch Bailey
03/17/2024, 4:09 PMoutputs/reports/klayout_feol_check.xml
The erc errors are in outputs/reports/cvc.errors.gz
Can you share those files?Md Omar Faruque
03/17/2024, 4:14 PMMitch Bailey
03/17/2024, 10:19 PMnsdm
and psdm
. Was the inverter
layout created in magic or klayout?Mitch Bailey
03/17/2024, 10:21 PMMd Omar Faruque
03/17/2024, 10:59 PMMitch Bailey
03/18/2024, 1:39 AMnsdm
and psdm
layers on gds out.
Can you share user_proj_example.mag
and inverter.mag
?Md Omar Faruque
03/18/2024, 4:11 AMMitch Bailey
03/18/2024, 4:34 AMMd Omar Faruque
03/19/2024, 4:04 PMMitch Bailey
03/19/2024, 9:53 PM