NERO(1)

πŸ“¦ version 5.1.1, in fedora 43, fedora 44

πŸŽ€ NAME

okay so bestie, meet nero β€” the Negotiating Router. that's the whole name, that's the whole vibe. πŸ’…

this page is from the Alliance - nero User's Manual, and it's literally everything you need to know about nero(1).


✨ SYNOPSIS

nero [ -h ]  [ -v ]  [ -V ]  [ -c ]  [ -2 ]  [ -3 ]  [ -4 ]  [ -5 ]  [ -6 ]  [ -L ]  [ -G ]
     [ --help ]  [ --verbose ]  [ --very-verbose ]  [ --core-dump ]  [ --local ]  [ --global ]
     [ -p placement ]  netlist layout

πŸ’– DESCRIPTION

nero is a simple router β€” like, it's made for small academic designs, it's not trying to be a big commercial beastie and honestly? respect. 🫢

right now it can handle designs up to 4K gates in size. that's the ceiling, bestie. don't push it.

πŸ¦‹ GLOBAL ROUTING

so a design counts as big when it's got nets whose half perimeter is greater than 800 lambdas. big designs get the global routing treatment. periodt.

and what does "global routing" even mean here, you ask? okay so in nero, it means the longest nets get completely routed first, in a first step, using only routing layers numbers 3 & 4. then the smaller nets get routed using all available layers. iconic two-phase situation. ✨

the consequence (iykyk): when global routing is in play, your number of routing layers is forced to at least 4. no negotiating that one. 😭

and in each of those steps, the nets get routed from the shortest to the longest, using the same routing algorithm. consistent queen. πŸ‘‘


🌸 INVOCATION

mandatory arguments (you literally cannot skip these)

  • netlist β€” the name of the design, without any extention. heads up though: unless you pass a -p placement option, the file holding the placement is expected to have the same name as the netlist file (short of the extention, obviously).
  • layout β€” the name of the resulting routed layout. ⚠️ be careful not to give it the same name as the netlist, because in that case your initial placement will be silently overwritten. no warning, no nothing, just gone. πŸ’€
real talk, that silent overwrite is a jump scare. name your output something different, bestie.

optional arguments (the fun ones)

  • -h, --help β€” print help. the classic. πŸ™ˆ
  • -v, --verbose β€” be verbose. it tells you things.
  • -V, --very-verbose β€” be unbearably verbose. like, it will NOT stop talking. main character energy, but for log output.
  • -c, --core-dump β€” do not prevent the generation of core dumps in case of a crash. mostly used during the development stage. (so basically: if it falls, it leaves a little artifact behind for you. πŸ“)
  • -2, -3, -4, -5, -6 β€” set the number of layers used for routing. the default is 2 for small designs and 4 for big ones. and if global routing took place, the router will use at least 4 routing layers. non-negotiable, again.
  • -L, --local β€” turn off the global routing stage, whatever the size of the design. 🚨 be warned: this will enormously slow down the routing process. like, enormously. we're not being cute about it.
  • -G, --global β€” turn on the global routing, regardless of the size of the design. forcing it, love that for you. πŸ’…
  • -p placement, --place placement β€” specify a name for the placement file that's different from the netlist name. freedom. ✨

πŸ”₯ EXAMPLE

let's route the netlist amd2901_core.vst, using the placement file amd2901_core_p.ap, and store the result in amd2901_core_r. here's the whole ritual:

$ export MBK_IN_LO=vst
$ export MBK_IN_PH=ap
$ export MBK_OUT_PH=ap
$ nero -V --place amd2901_core_p amd2901_core amd2901_core_r

three exports and one nero call and you're done. ate. πŸ’–


πŸ‘‘ SEE ALSO

go read these next, bestie, they're all part of the family:

MBK_IN_LO(1), MBK_OUT_LO(1), MBK_IN_PH(1), MBK_OUT_PH(1), ocp(1), ocr(1), druc(1), cougar(1)


and that's the whole page, bestie. this little love letter to routing was brought to you by ASIM/LIP6, dated 13 October 2002 β€” which is lowkey ancient but the vibes are eternal. πŸ¦‹βœ¨ take care of your netlists, don't overwrite your placements, and slay. πŸ’…πŸŒˆ