<@U016HSALFAN> BTW, I know right now is probably n...
# magic
t
@User BTW, I know right now is probably not the time, but once things are a little less crazy, I think the diode insertion script I wrote would probably be a good replacement for the one currently in OpenLane. There is a couple things I want to make parametric as CLI args, before that but other than that it should perform better than the current in pretty much all cases.
a
That sounds good. Feel free to PR it whenever things settle down.
👍 1
t
Will do.
a
@tnt: probably it would be best to include it as a new "DIODE_INSERTION_STRATEGY".
t
Yes Yes Yes!!!
t
Sure, I can do that too, it would have 2 modes as well (normal and fake diode) since it's pretty much the same as the current script except it's just a bit smarter at placing them where they have a better chance of being routed in a way that actually heals the antenna.
@tgingold Did you try it too ?
t
Yes. I am re-hardening all my blocks with your script.
I think you should distinguish macro and cell based on the site instead of the name.
Also, there should be an option to force diodes on all inputs (I modified your script for that).
It is indeed much better than the current strategies. Would have save me a lot of time if I had it before!
t
Yeah, you're probably right on that. I think the 'class' also should work, it's BLOCK for macro and CORE for standard cells.
I'm actually reading the LEF/DEF document right now.
a
@tnt: is the script on your caravel fork? I'm curious about it now:D
t
@Ahmed Ghazy It's in one of the submodule. You can find it here : https://github.com/PyFive-RISC-V/pyfive_top_202011/blob/master/scripts/place_diodes.py
The main differences compared to the default ones are : • Actually place the diode on the same row as the cell to protect. This helps because if the diode is properly, validly placed, chances are it won't get moved and being on the same row means chances are it's going to get routed via
met1
. Also place it left/right depending on where the signal is going to come from • Don't add diodes on nets that already have diodes. If there are already diode, it means the user protected those net himself, don't mess with that • Don't add diodes for "short span" signals. If all cells of a signals are close to each other, they're not really at risk and removing diodes helps reduce routing congestion • If it's protecting a macro pin (and not a std cell), try to find the closest ROW to the pin to put the diode. If you just place it on the pin, the macro might be too large and detailled placement will fail because it can't find something "close enough". • It forces diodes on anything coming from external pads • It's in python because I know that better than tcl 😅
👍 2
@tgingold Oh I hadn't seen your message earlier but it does force diodes on all inputs, the latest script version was in a branch and not on
master
. I've now merged everything to
master
a
That's cool; I saw it got you 0 antenna violations, right?
t
Yup, although It still depends a bit on the run, there can be 1-2 left depending on luck of routing. But in any case it's always less than the ~30-40 I have with the other strategies.