RING(1)

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

πŸ‘‘ RING(1) β€” ALLIANCE USER COMMANDS πŸ‘‘

okay bestie, sit DOWN, because we're talking about RING, the PAD RING router. yes she's from the ALLIANCE user commands and yes she's iconic. let's get into it πŸ’–


✨ NAME ✨

RING β€” the PAD RING router. that's her. that's the whole vibe. πŸ’…


🌸 SYNOPSIS 🌸

RING source result [ stat ]

πŸ¦‹ ORIGIN πŸ¦‹

so this software belongs to the ALLIANCE CAD SYSTEM, developed by the ASIM team at the LIP6 laboratory of UniversitΓ© Pierre et Marie CURIE, in Paris, France. πŸ‡«πŸ‡·βœ¨

like, she has a whole heritage. respect the elders fr fr 🫢


πŸ’– DESCRIPTION πŸ’–

so source defines two input files, and honestly? both of them matter:

  • the file describing the input netlist, in MBK_IN_LO(1) format. example: source.al
  • the parameter file: source.rin

the parameter file is made of 5 sections: 4 for the pad placement on the circuit sides, and one to define the power supply width (in lambda units). yes, lambda units. not negotiable. 😌

example:

east () # none pad at east side.
north (
p_pck p_i0 p_i1
p_i3)
south (p_vssb p_vddb p_i2)
width (vss 50 vdd 80)

separators (spaces, tabulations and new line) are allowed between instance names. she's flexible like that. πŸ’…

  • east(), north(), south(), west() define the relative pad order. they use the pad instance names.
  • for the north() and south() sections, the instance name declarations go from the left (first pad) to the right (last pad).
  • for the east() and west() sections, the instance name declarations go from the bottom (first pad) to the top (last pad).

any section may be missing. it means the relative side has no pad β€” however, at least one side must have one pad. no pads at all is not a look, bestie. πŸ™ˆ

  • the width() section is optional and describes the power (vdd) and ground (vss) track width.

result defines the output filename.

this file contains the layout of the routed circuit, in MBK_OUT_PH(1) format. example: result.ap

RING uses a pad library whose path directory is defined with the MBK_CATA_LIB(1) environment variable. it also uses a catalog filename which is defined with the MBK_CATAL_NAME(1) environment variable.

the catalog must contain all the pad model names used in the circuit. the core model-name must not be present in the catalog. like, do not. 🚫

part of catalog file:

a2_y  C
high_y  C
pck_sp C
piot_sp  C
pvssick_sp  C
...
pvdde_sp C
pvddi_sp C

[stat] (optional parameter) defines another output file:

  • the statistic file: result.stat

it contains data about length (lambdas) and area (lambdas * lambdas) in ALU1 and ALU2, for each equipotential. it describes how many vias were placed.

example: *** STATISTIC FILE < result.stat > ***

Equipotential list :

index|   name   |lgth A1|lgth A2|area A1|area A2| nb vias
_________________________________________________________
 60  |      vss | 9034  | 4408  | 614288| 454024| 1128
_________________________________________________________
 59  |      vdd | 7494  | 3968  | 574248| 408704| 1128
_________________________________________________________
 54  | b2_coeur | 2253  | 1899  |   2253|   3798|    4
_________________________________________________________
Total length alu1  :        18781 (lambdas)
Total length alu2  :        10275 (lambdas)
Total area alu1    :      1190789 (lambdas * lambdas)
Total area alu2    :       866526 (lambdas * lambdas)
Total of vias      :         2260

🌈 ENVIRONMENT VARIABLES 🌈

she's got a whole circle of friends and they all influence her behaviour, no cap:

  • MBK_IN_LO(1) defines the input file format for the netlist.
  • MBK_IN_PH(1) defines the input file format for the layout.
  • MBK_OUT_PH(1) defines the output file format for the layout.
  • MBK_CATAL_NAME(1) defines the catalog filename.
  • MBK_CATA_LIB(1) defines the library pad cells directory.
  • MBK_WORK_LIB(1) defines the work directory.

πŸŽ€ USAGE πŸŽ€

RING performs the physical routing between the core of the circuit and the pad ring. RING is not a floor plan router and allows only one core. one core, one main character. πŸ‘‘

a core is designed, for example, with the standard cells placer ocp(1) and router nero(1), which places the input and output connectors on the abutment box. the physical core connectors must be separated by more than one pitch in any metal (in ALU1 or ALU2).

netlist and layout views relative to the same figure must have the same name. for example, the netlist core name and the routed core name. matching names = matching energy. ✨

RING performs an automatic placement of the pad ring and core. it is not necessary to place pads, but only to describe their relative position on each side, in the parameter file (source.rin).

distance between the first track and any instance (pad or core) is the pitch so 5 lambdas. just 5. tiny. 🧚


πŸ”₯ EXAMPLE πŸ”₯

let chip.al be the circuit netlist and core.ap the routed core. 80 lambdas for supply track width and the pad placement are described as follows.

chip.rin:

# This is a comment: 1 comment per line
north(p_a1 p_a2 p_a3 p_a4)
south(
p_i1 #another comment: the rest of the line
p_i2
p_i3
p_i4)
east(p_b4 p_b3 p_b2 p_b1)
west(p_f1 p_f2 p_f3 p_f4)
width(
vdd 80
vss 80
)

we want a ring of pads as follow:

+-------------------------------------------------+
|            |p_a1|p_a2|p_a3|p_a4|                |
|----+---------------------------------------+----|
|p_f4|                                       |p_b1|
|----|            +-------+                  |----|
|p_f3|            |       |                  |p_b2|
|----|            | CORE  |                  |----|
|p_f2|            |       |                  |p_b3|
|----|            +-------+                  |----|
|p_f1|                                       |p_b4|
|----+---------------------------------------+----|
|            |p_i1|p_i2|p_i3|p_i4|                |
+-------------------------------------------------+

in order to obtain the routed circuit (chipr.ap):

> ring chip chipr

🌟 SEE ALSO 🌟

genlib(1) lvx(1) ocp(1) nero(1) druc(1)

the whole squad. go say hi. πŸ’œ


πŸ’€ DIAGNOSTICS πŸ’€

okay listen, these are the situations where she gets a little dramatic:

  • physical core must have at least one physical connector by side, otherwise it can't place pads correctly, and maybe dump a core file. like, it might just start dumping. 😭
  • whenever lots of core connectors (bus) are placed close ones from each others, RING may have problems to connect pad connectors placed just in front of them. in such a case, it is recommended to not have pad connectors at that place and thus to place an instance pad without connector (as pvdde_sp) or to cut the bus into several parts to let space between connectors. give her some personal space pls. πŸ™
  • when core connectors are to close from corners, RING sometimes connects those one to supply rings. to solve this bug, move core connectors or change pad placement. in any case, use druc(1) or lvx(1) to detect problem.
  • supply vdd and vss pads (resp. pvddi_sp and pvssi_sp) must be placed as close as possible of the core side middle (i.e. not in the corners). otherwise, RING cannot link supply pad connector to ring supplies and exits with a error message. corners are not the vibe for supply pads. periodt. 🚫
  • supply tracks from pads and core are connected at the supply ring. there is sometimes few problems when core and pad tracks are opposite. move pads usually corrects problem.
bestie, when in doubt: druc(1) or lvx(1). always. detect the problem before it detects you. πŸ’…

🫢 BUG REPORT 🫢

this tool is under development at the ASIM department of the LIP6 laboratory. we need your feedback to improve documentation and tools.

like literally, they're asking. tell them. your feedback is the moment. ✨


and that's the whole page, bestie!! this was brought to you by ASIM/LIP6, dated October 1, 1997 β€” yes she's been serving since '97 and she's still iconic. πŸŽ€πŸ’–πŸ‘‘