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?tovdda1andVDD_NETStovssa1.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 wireMd 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_REPORTMd 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 PMLinen is a search-engine friendly community platform. We offer integrations with existing Slack/Discord communities and make those conversations Google-searchable.
Powered by