Some general feedback from use and abuse of Kicad for reverse engineering

I’ve been reverse engineering some 20+ yo motherboards from leaked test data.
I’m totally new to EDA. Zero experience before a few months ago, but plenty of design experience with maps.
This is not a typical use case, so perhaps some of the thoughts will be interesting.

Experience:
440bx into kicad from reference schematic The thing no one asked for: KICAD 440bx reference schematic \ VOGONS
Powershell script “Boardview” (ASC test files) to kicad_PCB and kicad_sch (crude). Convert old ASUS ASC boardviews to KICAD PCB! \ VOGONS
Powershell script for ATX board layout ATX, micro, dtx, itx motherboard and slots layout script

Feedback:

General

  • Opening a secondary window, like “change footprint” disables other windows even in different “subprograms” like pcb editor.

  • keyboard controls are less than ideal
    Tab between property fields is inconsistent
    eg symbol editor properties, if you tab from “startx” you expect it to go to “starty” but nothing happens.
    symbol properties tabs horozontally, but never to the next line.
    In pin editor, you would expect up/down arrow keys to work.

  • Import/export to/from xlsx/csv would be handy for bulk pin editing and other functions (see: Zawinski’s Law ;)) I realise you probably don’t want to rely on excel, but it has functions that just aren’t worth duplicating or borrowing from libreoffice - and damn near everyone knows how to use it.

  • Reporting bugs within the program requires authentication. I suppose this is by design to reduce report volume. I think you’d probably get better data if it was less hassle for users - especially if a log of the last x minutes and the project could be sent.

  • Copy and paste has no option to keep values.
    I would expect a copy paste to result in a 1:1 copy - conflicts and all. I don’t expect it to delete all values unless it asks me first.

  • Limited ability to resize things in footprint/symbol editor. I wanted to 5x resize a footprint for… reasons. Ended up doing it kludgily but successfully in excel. It’s simple math, but tedious to get right.
    Wanted to create a capacitor network. Copied a cap, opened an RN with the right layout, realised I couldn’t just shrink the image to fit.

  • Not really sure how to write this, but something like ‘logical bundling’ of resistors/capacitors to r/cap network footprints might be useful.
    eg, you design 4 caps, but realise in the real world that 1x4 resistor network will do the job, you have to change the schematic to match this reality.
    Additionally, during board layout, you might realise swapping 2 wires on a network part will be easier to route, or that the placement of one sucks. Again, manual update.
    An option to logically combine or split same-value components into or out of network footprints and reroute them to others should save time.

Schematic

  • Labels are always input by default, regardless of pin type. Should be set appropriate to pin
  • Odd bug when “Update schematic from PCB”. Often updates labels that already exist to the same value. Turns out this is due to nets crossing but there’s no warning in this tool for that.
  • Dual nets?
    eg net to host, net to pullup/termination
    This doesn’t matter for most things, but for example, the intel P6 (pentium2/p3) required pullup/termination AFTER the main bus and had separate length requirements
    I’m sure other things have this requirement
  • The main window has a very large usable area to put things, but only a fraction of it is usable for editing (~-900,-500 to ~2700,1900mm). Objects can be placed successfully far, far outside this bounding area, but they cannot be zoomed into or manipulated.
    The sheet system seems… a little old fashioned. It seems to be paper centric.
    It doesn’t reflect the ‘infinite’ page size of modern computing. It’s less convenient to change sheets than to simply zoom out, and into a different area and despite appearing at face value to work that way, it doesn’t.
    Autocad map (prior experience), and presumably other autocad variants allow sheets to be created after the design by creating a boundary as a kind of viewing portal.
    If there’s a constraint relating to dimension sizing, it might be worth considering the way geographic mapping projections do it.
    Generally speaking, there’s the US World Global Survey which provides a global grid with fairly decent accuracy, but each country has its own grids with defined known coordinates serving as the local reference for greater accuracy.
    Eg if Everest’s summit was defined as the xy reference for 4 grid squares, the granularity and accuracy within those grids is improved.
    So for an ‘infinite’ kicad page, it might be appropriate to define several larger grids, and have the existing coordinate systems fit within them.
    This could be simply different user-transparent sheets in the inner workings of kicad - especially if the sheet system was revised to be more like viewing portals.
    It’d be nice to have a “favourites” symbol panel in the spare space below the side tools. (possibly detatchable/movable.)

PCB

  • Local ratsnest doesn’t work as I would expect.
    I would expect to be able to turn off all nets, and then click a unit and have its ratsnest turn on.
  • Toggle button for automatic net highlighting (eg when you click a net, it autohighlights)
  • Toggle for auto align to grid. pasting/rotating things sometimes seems to misalign to grid.
  • X/Y flip consider flipping on pin ends instead of the whole selection including labels.

Symbols

  • Alternative pin functions could be improved.
    Perhaps allow multiple pins and link them with a straight line like a ratsnest?
    Excel import/export would help here

Footprints:

  • The alignment system is quite clunky. (also applies to pcb)
    It doesn’t seem to snap like most software does, moving things relative to eachother is unintuitive and it’s hard to snap to the right reference point.
    For my ATX layout tool I ended up using the absolute 0,0 reference because it was much easier.

File format

  • A lot of repetition. Particularly fonts. eg (effects(font(size 1.27 1.27))) is repeated tens of thousands of times in the files.
    Might be worth considering setting a default value for some things like that at the top of a section and only recording when it is different.
    In many ways, a table style would be more efficient for much of the data - especially for manual editing.
    Yes, it’s pretty readable as it is.

For reverse engineering purposes:

  • Option for secondary pin numbers/names
    eg the datasheet might say pins 123, but the data you have might say pins ABC.
  • Ratsnest/visible links on schematic would be useful
  • Read-only toggle on tools possibly with a mild transparent overlay eg grey. The 2 way flow of changes is sometimes inconvenient, and I find myself in my fairly unique situation regularly reverting changes in PCB because of mistakes/changes I made in the schematic. I am attempting to create the schematic from the pcb, so this is inconvenient.
  • Quite backwards, but the reverse of assigning footprints. Assigning symbols.
  • Option to add symbols within symbols in symbol editor. I attempted to reverse engineer an ASIC because it seemed based on the pinouts to basically be a handful of discrete logic bundled into one chip. my attempt was awkward at best.
  • If you duplicate a symbol, it doesn’t automatically open the new duplicate, instead you often end up with the awkward situation of trying to save the original read-only one and getting confused when you figure it out and wonder if it actually saved over the one you were warned already existed.

Anyhow, keep up the good work. Not asking for miracles, just planting seeds…

2 Likes

you definitely have some unique requirements. I’m wondering if you’ve found the “update schematic from PCB” button yet. That might solve a few of your workflow issues. YMMV.

Guess you skimmed it, huh?

TLDR - :crazy_face:

“odd bug” to you, seems like the normal workflow, no?

The normal workflow is to update LABEL3 to LABEL3?

Sometimes this is annoying and unnecessary. In the larger picture, though, there are many cases where the schematic and PCB can interact (through update processes) so that there could be bad consequences in keeping open windows which have one data from one or the other and which also could change that data. Real time update (some kind of push-pull) has also been proposed for at least some dialog views, but it’s much work – and also future maintenance burden – which would not benefit much. If you have a certain dialog in mind which could absolutely be non-modal, within one subprogram or within one editor, without drawbacks, you can file an issue. But in general there’s no intention to make all dialogs non-modal.

Not intentionally. It’s just the most practical solution.

Gitlab has both git service and issue database, it’s a nice bundled solution. But Gitlab has also made creating an account even impossible in some cases, and I hate that, but there’s little or nothing we can do about it.

Maintaining another issue database would be a full-time job. And unfortunately not requiring authentication would lead to chaos (spam etc.) and is out of question in any case.

Which copy/paste, where? What “values”? There’s Paste Special in schematic, you can change what it does to reference designators. Value field is kept intact with normal Paste.

I don’t understand your use case, nor what you actually edited in Excel.

I know some people would like the feature. Personally I would rather see it as a plugin than as a built-in feature. It would be difficult to get it “right” for all use cases and it would probably be bloat, for little benefit, and only for niche use cases.

Actually it is intentional. We choose to use a bug reporting solution that requires the reporter to have an account so that we can establish back and forth communications with the reporter. Bug reports that are “one way” where we can’t follow up easily are not helpful.

Yes, I think it’s a bug in some way or another, but it would need reporting as an issue. I think you already know this, but the stock answer to these random notions about bugs is “file an issue, otherwise it won’t be fixed”. Discussions about feature requests is useful here, but if something is an outright bug, you could as well spend your time filing an issue.

I meant that limiting volume is a side effect.

1 Like

There seems to be no one right way for this to work satisfyingly for all users. I wouldn’t mind if ratsnest show/hide features would be made configurable. I have never learned to use that “local” thing, and I think the behavior has been changed at some point.

You can highlight a net with a hotkey. What more do you want? Do you want to highlight more than one net at a time, just by clicking them one by one? Why?

Human readability (easy readability) isn’t the main point of the file format, although it’s important. It must be effective for the software. How the software uses the file format is invisible to the user, and it’s not obvious how technical implementation viewpoints affect the file format. Data storage is cheap. Other factors may be much more important. I believe the developers have already considered redundancy in the files.

It would be easier to address your points if it was one post, but I did at least learn about paste special.
Not sure how I didn’t see that right under my nose the 10,000 times I’ve rightclicked.

  1. ‘non modal’
    It can get annoying when for example you open footprint/symbol editor and forgot the name of the thing you want to open, so you try to look at the schematic and get the name, but it can’t work with the open X window open. In that case, I can’t think of a reason for it to be modal, but maybe you know better.

  2. Keyboard tab order
    Correct. It’s not unique to kicad. Over the years I’ve seen many programs where it’s out of order or broken. TBH I’m slightly surprised in the 25+ years since I used Visual basic 6, that it’s doesn’t have some sort of automatic plugin to assign them automatically.

  3. dev responeded.

  4. paste special.
    I’m apparently as blind as I am stupid :stuck_out_tongue:

  5. local ratsnest
    As it stands now, all it can reliably do is turn the local ratsnest off. It frankly seems useless.
    I am convinced something is broken with it (maybe my config somehow?) because I can’t think how anyone would find it useful to turn off one tiny ratsnest in a sea of ratsnests, but not be able to turn ON one tiny ratsnest when they’re all off.

  6. net highlight hotkey.
    Thanks.
    The clear net highlight hotkey is shown in the context menu, but the hightlight key isn’t which is possibly why I missed it.

  7. Look, it’s just an opinion, but I know there are people like me out there that britalise files because it’s faster.
    Here’s an example of updating pin names/numbers by basically cutting the relevant section out of the file, adding tabs, updating the names/numbers, and pasting it back in:

For those sections of the file, I believe both humans and computers would find it easier/faster to read a table.
Even html uses tables where it’s more sensible.

What have we got in there?
Pintype, X, Y, rotation, Name, Number, Pin length, 2x font details.
I would argue that the effects/fonts can be set in a header, and the rest can be a table.
I’ve thought about writing my own export/import tool. Maybe I will get around to it.

It is a Default behaviour to have this for CAD application. It would be disastrous to have other way. Because CAD have real dimension information.

Hmm… Some multi symbol, like “quad OR gate” can be swapped. Also, pin can be swapped. More over, there is DeMorgan alternative. You just need to create your own symbol.

In the end, schematic present for error checking and documentation. If you don’t need this function, you can’t just ignore this workflow. Just enter footprint directly, you can also opt for “allow free pad” in PCB editing option

You are right about this. This function more requested with people which use schematic as documentation tool.