Jasper van Woudenberg
06/17/2022, 4:46 PMsky130_fd_sc_hd__ebufn_2 _1967_ (
.A(\wb_picorv32_0.o_wb_data[0] ),
.TE_B(_0655_),
.Z(wbs_dat_o[0])
);
wbs_dat_o[0]
is a module output. This looks fine. However, after placement in openlane, it looks like this:
sky130_fd_sc_hd__ebufn_8 _1967_ (.A(\wb_picorv32_0.o_wb_data[0] ),
.TE_B(_0655_),
.VGND(vssd1),
.VNB(vssd1),
.VPB(vccd1),
.VPWR(vccd1),
.Z(net252));
sky130_fd_sc_hd__buf_12 repeater252 (.A(wbs_dat_o[0]),
.VGND(vssd1),
.VNB(vssd1),
.VPB(vccd1),
.VPWR(vccd1),
.X(net252));
The repeater gets added, and now net252
has a) potentially two drivers and b) wbs_dat_o[0]
never gets driven. This is not shown in RTL simulation and only shows up by simulating the netlist.
First, this seems like a bug in openlane that needs fixing. I doubt that will happen today 🙂 So my question here is: if I just manually remove the repeater and fix the netlist post-placement, do we have a chance this will work in silicon? Or is the repeater somehow critical?
/cc @Matt Venn