← Back to team overview

kicad-developers team mailing list archive

New Interactive (push-and-shove) Router Release

 

Hi,

After even more coffee and sweat, we are proud to release an update the P&S router.

It's intended mainly for the developers and advanced users. We'll officially announce it to the general public (with a video tutorial) as soon as it gets merged to the product branch. Sorry to keep you waiting for so long, developing routing algorithms that use some peculiar topological properties of the Comic Sans font turned out to be much more brain-damaging
and time-consuming than we thought ;-)

The major changes with respect to the previous release are:
- Dragging vias, trace corners and segments,
- Vias are now shoved just like traces,
- Undo/redo,
- Ratsnest support,
- Configuration dialog,
- R-click popup menu menu & hotkey support,
- Grid snapping,
- Snap to items can be disabled,
- Via size/drill/trace width changing while routing,
- Better loop removal,
- Lots of bug fixes,
- Highlight obstacles mode,
- Support for rounded-rectangle pads,
- Fixes for a bunch of bugs reported by the users.

The code is based on a quite recent product branch and hosted on Github and Launchpad:

https://github.com/twlostow/kicad-dev/tree/tom-pns-v2
https://code.launchpad.net/~twlostow/kicad/tom-pns-v2

The actual router commit is pretty large, the reason is my disgusting coding style which
shouldn't be presented in the commit history. The commit contains only
P&S code, the rest of the code base has been updated in smaller chunks.

We also gave a try to MultiMarkdown in an attempt to write the documentation. I guess it's final destination is the kicad-doc repository. The initial version of the docs is in the attachment [btw: is it possible to control the size of images in PDFs generated from MMD?].

The tool is now mature enough to route a moderately complex PCB (see attached PCB). The sample board is not complete,
but all the routing was done using this P&S version.

The ToDo list for the nearest future:
- "Figure out what's best" mode: try to find balance between shoving and hugging,
- Better via plowing under BGAs,
- Fix some memory leaks and hunt down very rare stability issues (remember: Jesus saves!),
- Keep-out zones and board edges support,
- Fixing some rare cases where the router produces ugly topology or gets stuck, - Auto-finish mode (auto-routing of the remaining part of the trace in simple topologies),
- Support for non-orthogonal pads (currently are replaced by circles),
- More intelligent layer switching (e.g. to nearby pad),
- Blind/buried vias,
- Code documentation.

Enjoy,
Tom & Orson

PS. We are also planning to bring differential pairs and interactive length matching, the P&S code base is now stable enough to think about adding such features. We cannot promise any date, stay tuned.


(kicad_pcb (version 3) (host pcbnew "(2014-jan-25)-product")

  (general
    (links 680)
    (no_connects 166)
    (area 73.9648 44.675231 158.301871 152.4512)
    (thickness 1.6)
    (drawings 5)
    (tracks 4307)
    (zones 0)
    (modules 178)
    (nets 272)
  )

  (page A0)
  (layers
    (15 TopLayer signal)
    (4 GND signal)
    (3 L1 signal)
    (2 L2 signal)
    (1 Power signal)
    (0 BottomLayer signal)
    (16 B.Adhes user)
    (17 F.Adhes user)
    (18 B.Paste user)
    (19 F.Paste user)
    (20 B.SilkS user)
    (21 F.SilkS user)
    (22 B.Mask user)
    (23 F.Mask user)
    (24 Dwgs.User user)
    (25 Cmts.User user)
    (26 Eco1.User user)
    (27 Eco2.User user)
    (28 Edge.Cuts user)
  )

  (setup
    (last_trace_width 0.127)
    (user_trace_width 0.25)
    (trace_clearance 0.1016)
    (zone_clearance 0.2)
    (zone_45_only no)
    (trace_min 0.127)
    (segment_width 0.2)
    (edge_width 0.15)
    (via_size 0.4826)
    (via_drill 0.2286)
    (via_min_size 0.4826)
    (via_min_drill 0.2286)
    (uvia_size 0.508)
    (uvia_drill 0.127)
    (uvias_allowed no)
    (uvia_min_size 0.508)
    (uvia_min_drill 0.127)
    (pcb_text_width 0.3)
    (pcb_text_size 1.5 1.5)
    (mod_edge_width 0.15)
    (mod_text_size 1.5 1.5)
    (mod_text_width 0.15)
    (pad_size 0.25 1.45)
    (pad_drill 0)
    (pad_to_mask_clearance 0.2)
    (aux_axis_origin 0 0)
    (visible_elements 7FFCFF1F)
    (pcbplotparams
      (layerselection 3178497)
      (usegerberextensions true)
      (excludeedgelayer true)
      (linewidth 0.150000)
      (plotframeref false)
      (viasonmask false)
      (mode 1)
      (useauxorigin false)
      (hpglpennumber 1)
      (hpglpenspeed 20)
      (hpglpendiameter 15)
      (hpglpenoverlay 2)
      (psnegative false)
      (psa4output false)
      (plotreference true)
      (plotvalue true)
      (plotothertext true)
      (plotinvisibletext false)
      (padsonsilk false)
      (subtractmaskfromsilk false)
      (outputformat 1)
      (mirror false)
      (drillshape 1)
      (scaleselection 1)
      (outputdirectory ""))
  )

  (net 0 "")
  (net 1 +1V2)
  (net 2 +3V3)
  (net 3 A0)
  (net 4 A1)
  (net 5 A10)
  (net 6 A11)
  (net 7 A12)
  (net 8 A13)
  (net 9 A14)
  (net 10 A15)
  (net 11 A16)
  (net 12 A17)
  (net 13 A18)
  (net 14 A19)
  (net 15 A2)
  (net 16 A20)
  (net 17 A21)
  (net 18 A22)
  (net 19 A3)
  (net 20 A4)
  (net 21 A5)
  (net 22 A6)
  (net 23 A7)
  (net 24 A8)
  (net 25 A9)
  (net 26 ACGND)
  (net 27 ACVDD)
  (net 28 AUDIO_HPOUT_L)
  (net 29 AUDIO_HPOUT_R)
  (net 30 AUDIO_LINE_IN_L)
  (net 31 AUDIO_LINE_IN_R)
  (net 32 AUDIO_MIC_IN)
  (net 33 CAS)
  (net 34 D0)
  (net 35 D1)
  (net 36 D10)
  (net 37 D11)
  (net 38 D12)
  (net 39 D13)
  (net 40 D14)
  (net 41 D15)
  (net 42 D16)
  (net 43 D17)
  (net 44 D18)
  (net 45 D19)
  (net 46 D2)
  (net 47 D20)
  (net 48 D21)
  (net 49 D22)
  (net 50 D23)
  (net 51 D24)
  (net 52 D25)
  (net 53 D26)
  (net 54 D27)
  (net 55 D28)
  (net 56 D29)
  (net 57 D3)
  (net 58 D30)
  (net 59 D31)
  (net 60 D4)
  (net 61 D5)
  (net 62 D6)
  (net 63 D7)
  (net 64 D8)
  (net 65 D9)
  (net 66 DRXD)
  (net 67 DTXD)
  (net 68 ETH100_AGND)
  (net 69 ETH_LED1)
  (net 70 ETH_LED2)
  (net 71 ETH_RX+)
  (net 72 ETH_RX-)
  (net 73 ETH_TX+)
  (net 74 ETH_TX-)
  (net 75 EXT_VDD_5V)
  (net 76 GND)
  (net 77 JNTRST)
  (net 78 JRTCK)
  (net 79 JTCK)
  (net 80 JTDI)
  (net 81 JTDO)
  (net 82 JTMS)
  (net 83 NRST)
  (net 84 NetC10_1)
  (net 85 NetC11_1)
  (net 86 NetC12_1)
  (net 87 NetC13_1)
  (net 88 NetC16_1)
  (net 89 NetC16_2)
  (net 90 NetC17_1)
  (net 91 NetC17_2)
  (net 92 NetC18_1)
  (net 93 NetC1_1)
  (net 94 NetC22_2)
  (net 95 NetC24_1)
  (net 96 NetC2_1)
  (net 97 NetC30_1)
  (net 98 NetC31_1)
  (net 99 NetC37_2)
  (net 100 NetC38_2)
  (net 101 NetC39_2)
  (net 102 NetC40_2)
  (net 103 NetC41_2)
  (net 104 NetC42_2)
  (net 105 NetC43_2)
  (net 106 NetC51_2)
  (net 107 NetC54_2)
  (net 108 NetC56_2)
  (net 109 NetC57_2)
  (net 110 NetC61_2)
  (net 111 NetC62_2)
  (net 112 NetC66_1)
  (net 113 NetC68_1)
  (net 114 NetC69_2)
  (net 115 NetC70_2)
  (net 116 NetC71_2)
  (net 117 NetC81_2)
  (net 118 NetC83_2)
  (net 119 NetC9_1)
  (net 120 NetCN1_G4)
  (net 121 NetCN1_P1)
  (net 122 NetCN1_P2)
  (net 123 NetCN1_P3)
  (net 124 NetCN1_P5)
  (net 125 NetCN1_P7)
  (net 126 NetCN1_P8)
  (net 127 NetD20_1)
  (net 128 NetD20_2)
  (net 129 NetIC10_3)
  (net 130 NetIC1_10)
  (net 131 NetIC1_16)
  (net 132 NetIC1_17)
  (net 133 NetIC1_5)
  (net 134 NetIC1_6)
  (net 135 NetIC1_8)
  (net 136 NetIC2_4)
  (net 137 NetIC2_9)
  (net 138 NetIC3_3)
  (net 139 NetIC4_11)
  (net 140 NetIC4_12)
  (net 141 NetIC4_13)
  (net 142 NetIC4_19)
  (net 143 NetIC4_20)
  (net 144 NetIC4_21)
  (net 145 NetIC4_24)
  (net 146 NetIC4_25)
  (net 147 NetIC4_28)
  (net 148 NetIC4_29)
  (net 149 NetIC4_3)
  (net 150 NetIC4_31)
  (net 151 NetIC4_32)
  (net 152 NetIC4_36)
  (net 153 NetIC4_37)
  (net 154 NetIC4_38)
  (net 155 NetIC4_4)
  (net 156 NetIC4_47)
  (net 157 NetIC4_48)
  (net 158 NetIC4_7)
  (net 159 NetIC4_8)
  (net 160 NetIC5_B5)
  (net 161 NetIC5_C18)
  (net 162 NetIC5_D18)
  (net 163 NetIC5_E18)
  (net 164 NetIC5_E5)
  (net 165 NetIC5_F18)
  (net 166 NetIC5_K13)
  (net 167 NetIC5_K16)
  (net 168 NetIC5_M17)
  (net 169 NetIC5_N15)
  (net 170 NetIC5_N16)
  (net 171 NetIC5_P15)
  (net 172 NetIC5_P5)
  (net 173 NetIC8_9)
  (net 174 NetIC9_1)
  (net 175 NetR28_2)
  (net 176 NetR29_2)
  (net 177 PA13)
  (net 178 PA14)
  (net 179 PA15)
  (net 180 PA26)
  (net 181 PA27)
  (net 182 PA28)
  (net 183 PA29)
  (net 184 PA30)
  (net 185 PB10)
  (net 186 PB11)
  (net 187 PB12)
  (net 188 PB13)
  (net 189 PB14)
  (net 190 PB15)
  (net 191 PB16)
  (net 192 PB17)
  (net 193 PB18)
  (net 194 PB4)
  (net 195 PB5)
  (net 196 PB6)
  (net 197 PB7)
  (net 198 PB8)
  (net 199 PB9)
  (net 200 PC0)
  (net 201 PC1)
  (net 202 PC10)
  (net 203 PC11)
  (net 204 PC12)
  (net 205 PC13)
  (net 206 PC14)
  (net 207 PC15)
  (net 208 PC16)
  (net 209 PC17)
  (net 210 PC18)
  (net 211 PC19)
  (net 212 PC2)
  (net 213 PC20)
  (net 214 PC21)
  (net 215 PC3)
  (net 216 PC4)
  (net 217 PC5)
  (net 218 PC6)
  (net 219 PC7)
  (net 220 PC8)
  (net 221 PC9)
  (net 222 PD0)
  (net 223 PD1)
  (net 224 PD10)
  (net 225 PD2)
  (net 226 PD3)
  (net 227 PD5)
  (net 228 PD6)
  (net 229 PD7)
  (net 230 PD8)
  (net 231 PD9)
  (net 232 PE0)
  (net 233 PE1)
  (net 234 PE10)
  (net 235 PE11)
  (net 236 PE12)
  (net 237 PE13)
  (net 238 PE14)
  (net 239 PE15)
  (net 240 PE2)
  (net 241 PE3)
  (net 242 PE4)
  (net 243 PE5)
  (net 244 PE6)
  (net 245 PE7)
  (net 246 PE8)
  (net 247 PE9)
  (net 248 PSU_EN)
  (net 249 RAS)
  (net 250 SDA10)
  (net 251 SDCK)
  (net 252 SDCKE)
  (net 253 SDCS)
  (net 254 SDWE)
  (net 255 SHDN)
  (net 256 UENA)
  (net 257 UENB)
  (net 258 UFLGA)
  (net 259 UFLGB)
  (net 260 USBCNX)
  (net 261 USB_HOST_A_5V)
  (net 262 USB_HOST_A_N)
  (net 263 USB_HOST_A_P)
  (net 264 USB_HOST_B_5V)
  (net 265 USB_HOST_B_N)
  (net 266 USB_HOST_B_P)
  (net 267 USB_SLAVE_5V)
  (net 268 USB_SLAVE_D_N)
  (net 269 USB_SLAVE_D_P)
  (net 270 VBAT)
  (net 271 WKUP)

  (net_class Default "This is the default net class."
    (clearance 0.1016)
    (trace_width 0.127)
    (via_dia 0.4826)
    (via_drill 0.2286)
    (uvia_dia 0.508)
    (uvia_drill 0.127)
    (add_net +1V2)
    (add_net +3V3)
    (add_net A0)
    (add_net A1)
    (add_net A10)
    (add_net A11)
    (add_net A12)
    (a���q�^u���b�

Follow ups