Apologies for leaving this extremely last minute b...
# generative-ai
j
Apologies for leaving this extremely last minute but does anyone have any tips on how to fix this error when running make user_project_wrapper for the design challenge? Running make user_proj_example completed without errors.
Copy code
[STEP 10]
[INFO]: Running Global Routing (log: ../home/james/Desktop/Efabless/Project/RNG/openlane/user_project_wrapper/runs/23_11_03_01_07/logs/routing/10-global.log)...
[ERROR]: during executing openroad script /openlane/scripts/openroad/groute.tcl
[ERROR]: Log: ../home/james/Desktop/Efabless/Project/RNG/openlane/user_project_wrapper/runs/23_11_03_01_07/logs/routing/10-global.log
[ERROR]: Last 10 lines:
[INFO GRT-0101] Running extra iterations to remove overflow.
[INFO GRT-0103] Extra Run for hard benchmark.
[INFO GRT-0197] Via related to pin nodes: 421
[INFO GRT-0198] Via related Steiner nodes: 0
[INFO GRT-0199] Via filling finished.
[INFO GRT-0111] Final number of vias: 3608
[INFO GRT-0112] Final usage 3D: 33730
[ERROR GRT-0119] Routing congestion too high. Check the congestion heatmap in the GUI and load /home/james/Desktop/Efabless/Project/RNG/openlane/user_project_wrapper/runs/23_11_03_01_07/tmp/routing/groute-congestion.rpt in the DRC viewer.
Error: groute.tcl, 37 GRT-0119
child process exited abnormally
I tried to open the groute-congestion.rpt in the openroad -gui DRC viewer but it segfaults as soon as I open the .rpt file:
Copy code
OpenLane Container (d054702):/openlane$ openroad -gui
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-'
libGL error: MESA-LOADER: failed to retrieve device information
libGL error: unable to load driver: i915_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: i915
libGL error: unable to load driver: swrast_dri.so
libGL error: failed to load driver: swrast
OpenROAD 41a51eaf4ca2171c92ff38afb91eb37bbd3f36da
This program is licensed under the BSD-3 license. See the LICENSE file for details.
Components of this program may be licensed under more restrictive licenses which must be honored.
Signal 11 received
Stack trace:
 0# 0x0000000000D429A7 in openroad
 1# 0x00007F9B0C88B400 in /lib64/libc.so.6
 2# odb::dbBlock::getDataBase() in openroad
 3# gui::DRCWidget::loadTRReport(QString const&) in openroad
 4# gui::DRCWidget::loadReport(QString const&) in openroad
 5# gui::DRCWidget::selectReport() in openroad
 6# 0x00000000012ABF85 in openroad
 7# QMetaObject::activate(QObject*, int, int, void**) in /lib64/libQt5Core.so.5
 8# 0x00007F9B0E522B5D in /lib64/libQt5Widgets.so.5
 9# 0x00007F9B0E523F8E in /lib64/libQt5Widgets.so.5
10# QAbstractButton::mouseReleaseEvent(QMouseEvent*) in /lib64/libQt5Widgets.so.5
11# QWidget::event(QEvent*) in /lib64/libQt5Widgets.so.5
12# QApplicationPrivate::notify_helper(QObject*, QEvent*) in /lib64/libQt5Widgets.so.5
13# QApplication::notify(QObject*, QEvent*) in /lib64/libQt5Widgets.so.5
14# QCoreApplication::notifyInternal2(QObject*, QEvent*) in /lib64/libQt5Core.so.5
15# QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) in /lib64/libQt5Widgets.so.5
16# 0x00007F9B0E483721 in /lib64/libQt5Widgets.so.5
17# 0x00007F9B0E485D65 in /lib64/libQt5Widgets.so.5
18# QApplicationPrivate::notify_helper(QObject*, QEvent*) in /lib64/libQt5Widgets.so.5
19# QApplication::notify(QObject*, QEvent*) in /lib64/libQt5Widgets.so.5
20# QCoreApplication::notifyInternal2(QObject*, QEvent*) in /lib64/libQt5Core.so.5
21# QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) in /lib64/libQt5Gui.so.5
22# QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) in /lib64/libQt5Gui.so.5
23# QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) in /lib64/libQt5Gui.so.5
24# 0x00007F9B11819950 in /lib64/libQt5XcbQpa.so.5
25# g_main_context_dispatch in /lib64/libglib-2.0.so.0
26# 0x00007F9B095F13F8 in /lib64/libglib-2.0.so.0
27# g_main_context_iteration in /lib64/libglib-2.0.so.0
28# QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) in /lib64/libQt5Core.so.5
29# QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) in /lib64/libQt5Core.so.5
30# QCoreApplication::exec() in /lib64/libQt5Core.so.5
31# gui::startGui(int&, char**, Tcl_Interp*, std::string const&, bool) in openroad
32# ord::tclAppInit(Tcl_Interp*) in openroad
33# Tcl_Main in /lib64/libtcl8.5.so
34# main in openroad
35# __libc_start_main in /lib64/libc.so.6
36# 0x0000000000D3C6C7 in openroad
Segmentation fault (core dumped)
e
try adding
"GRT_ADJUSTMENT":0.2,
to your config file.
j
Will do, thanks!
πŸ™Œ 1
I added it to the config .json in the user_project_wrapper directory but I got the same thing again
Copy code
[ERROR]: during executing openroad script /openlane/scripts/openroad/groute.tcl
[ERROR]: Log: ../home/james/Desktop/Efabless/Project/RNG/openlane/user_project_wrapper/runs/23_11_03_01_35/logs/routing/10-global.log
[ERROR]: Last 10 lines:
[INFO GRT-0101] Running extra iterations to remove overflow.
[INFO GRT-0103] Extra Run for hard benchmark.
[INFO GRT-0197] Via related to pin nodes: 410
[INFO GRT-0198] Via related Steiner nodes: 0
[INFO GRT-0199] Via filling finished.
[INFO GRT-0111] Final number of vias: 2108
[INFO GRT-0112] Final usage 3D: 26262
[ERROR GRT-0119] Routing congestion too high. Check the congestion heatmap in the GUI and load /home/james/Desktop/Efabless/Project/RNG/openlane/user_project_wrapper/runs/23_11_03_01_35/tmp/routing/groute-congestion.rpt in the DRC viewer.
Error: groute.tcl, 37 GRT-0119
child process exited abnormally

[ERROR]: Creating issue reproducible...
[INFO]: Saving runtime environment...
I'll try pushing it even lower to 0.1
e
Can you share your configuration file?
j
I haven't changed it from the defaults from when I cloned the repo except to add your suggested change
e
So, are you working with the user projec example, or you modify the user_example module?
To work in parallel and try to solve your issues quickly, i recommend you also post it into caravel or openlane channels there are more peoples in those channels that could help you.
πŸ™Œ 1
j
I'm using user_proj_example and following along with this video but substituting my design for theirs:

https://www.youtube.com/watch?v=JXd1dFpGpuk&list=PLZuGFJzpFksCG7p1yURxVo5lWHzeOoR9_&index=10β–Ύ

This is my user_project_wrapper.v file and the two files the error message tells me to look at
a
Hmm, only 105 signals in UPW, that seems doable. But how big is your macro?
Ohh, and where is it placed in the user project area? macro.cfg will tell us that
e
The example design of caravel first harden the user example, and then the user wrapper, if you modify the user example and it have a lot of input or ouputs, and the I/O are to close between them could generate routing congestion. You have a lot of space try increasing the size of the user example, that will separate the I/O and center it into the user wrapper.
a
If the dimensions of your macro are large enough so as to nearly fill in the user project area, that could make it hard to route (i.e. not enough space around the edges). Same thing could happen if your macro is placed too close to any one edge of the user project area
j
The contents of macro.cfg is mprj 60 15 N. I left it as default. What is the maximum allowed size for DIE_AREA if I want to fit into Caravel?
e
As @Anton Maurovic says check the size of your macro, could be big, small or be near to a border.
a
I think 60 15 is way too close to the bottom-left corner
Especially since I think most of the 96 WB lines are in that same corner
j
Ah I see, the example design was pretty small
a
Do you know roughly or exactly what the dimensions of your macro are? Just so we have some idea of how tight this is?
j
metrics.csv says 4.928 mm^2
a
I don't have enough experience, but I personally would try leaving a margin of at least 100um around all four sides. That means a max DIE_AREA for your own user_proj_example config of ~2700x3300
OK, if your design is the only one, then you should be able to change macro.cfg to something like 100 100 or even 200 200 (since it seems your macro is only using half of the user project area)
πŸ‘ 1
j
I'm trying again with mprj 850 1100 N
a
That will just nudge your design a tiny bit nearer to the middle (or at least a tiny bit further away from where all the congested WB lines are)
Yeah cool, try that
(Though that might actually go too far...?)
e
The dimension of your macro can be found checking the "DIE_AREA" parameter. If you say that the macro is small one simple thing you can try, and because your are not limited by space try mprj 500 500 N, and use twice space for your macro. I have to go, i hope you solve your problem and can submit your project to the contest.
a
Thanks Emilio πŸ™‚
j
Ah this mprj 850 1100 N put it outside the die area, thanks @Emilio Baungarten
e
And I do not recommend the use of "GRT_ADJUSTMENT": 0.1, at most "GRT_ADJUSTMENT": 0.15,
βœ… 1
a
Can you share your lef/user_proj_example.lef file?
That is basically an obscured simple version of your macro, that at least will let me see what its area is, and where your pins are placed
You could even just open it yourself. I think you would have KLayout installed, in which case you can run:
klayout user_proj_example.lef
Then in the toolbar is the Ruler tool, which you can use to measure it horizontally and vertically
From your area of 4.298mm^2, I'm guessing your dimensions are roughly the root of this, i.e. 2230um x 2230um
j
mprj 500 500 N put it outside the die area so I'll take a look at the lef and then try again after reducing the numbers
a
From my calculations,
mprj 300 300 N
should fit
j
Ok, I'll try that while I look at the lef, thanks
It is roughly 2800 by 1760 um. mprj 300 300 N puts it outside the die area so I am trying mprj 200 200 N
message has been deleted
a
Close, but probably still outside die area. 2800+200 = 3000, but the hard limit is 2920
Die hard limit is 2920 x 3520 (but I'm not sure if ALL of that is usable)
But if you work on 2920-2800, you get 120... so MAYBE 100 for the first number will be OK
βœ… 1
(first number is horizontal axis)
j
Trying that now
a
You've got plenty of room on the vertical, by the looks of it
You could try:
mprj 100 300 N
j
Ok we made it past step 10 where it was failing!
a
Nice πŸ™‚ Fingers crossed!
This is quite a wide design. Did you set your die dimensions explicitly to
2800 1760
in your user_proj_example's
config.json
? Or did OpenLane come up with this size by itself?
j
I just left them how they were when I cloned the repo which was probably a bad choice
a
OK, cool. If it still doesn't complete successfully for some reason, you could try re-hardening your user_proj_example first, after reducing the width and increasing the height.
j
If I delete the die area line does openlane choose the dimensions?
a
You can make it choose for you, yes, but you might need to add other lines after deleting DIE_AREA
j
Ah ok, it has made it to step 25 and not failed yet
a
Great stuff πŸ™‚ It might turn out fine, then.
There are a few other parameters that you can give OpenLane to help it tweak how dense it makes your design, and hence how big your macro turns out to be, but if omitted it has its own formula to decide.
Anyway... don't change it unless your harden still fails πŸ™‚
j
Thanks for your help @Emilio Baungarten and @Anton Maurovic it worked!
πŸ‘ 1
βœ… 1
a
Fantastic! Good one James. Good luck with your submission!
πŸ™Œ 1