Last day of tapeout, and we think we found a bug i...
# openlane
j
Last day of tapeout, and we think we found a bug in openlane with tristate buffers and repeaters. This is post-syn:
Copy code
sky130_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:
Copy code
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