Coding Up an IoT PCB Design
geocene.com
geocene.com
The JITX company mentioned in the article is a YC startup trying to automate the electronics design part with AI. The company is using a new L. B. Stanza programming language created as one of the co-founders Ph.D thesis [1].
If you want to learn on embedded system design this is a recently released book with an accompanying open source hardware design described in the book [2],[3].
[2]https://us.artechhouse.com/mobile/A-Hands-On-Guide-to-Design...
[3]https://www.eejournal.com/article/a-hands-on-guide-to-design...
Things get a bit more complicated when you start using switching power supplies and you need to include a specific inductor, multiple caps and resistors all arranged in an optimal way specified by the datasheet. Those would be awesome to have functional PCB blocks for.
I've been playing with MCU's for going on 3 decades now. At first, you were lucky if an expensive commercial assembler supported your target chip. Then some vendors came out with free assemblers.
It quickly got to the point where a MCU stood little chance in the market if the vendor didn't serve up a toolchain for it, starting with assembly, but quickly demanding C. Then, on top of just the C compiler, folks started to demand libraries to support the chip specific hardware modules.
Going one step further, today I wouldn't think of using a MCU that was not available on a development board (no BGA soldering for me) and supported by Arduino.
I think PCB designers will come up to speed on this, but it will take time. There are some not insignificant issues. One is that your favorite distributor runs out of the component that's spec'd in the library layout, and you have to scramble. I have a tiny side business making an electronic gadget, and I've had to make multiple substitutions to keep my business running. Bless you, Octopart. ;-)
Go to any part and there is both a short list of aka or substitute part numbers and a few links to likely alternatives.
The links aren't always good sibstitutions. Sometimes they are, but sometimes they are only very general alternatives where it does the same nominal job but you'd have to change your design to use the other part, sometimes they are merely related or associated in any sort of way like on Amazon. Maybe it's the mate to the connector you're looking at or the pin that fits in a housing, maybe it's an alternative, maybe it's just frequently ordered together for who knows what reason.
But if there's an aka list, that will be mostly a good drop-in substitution list.
Go for say a max3232-alike from anyone, and the aka list will have several good drop-in replacements from different manufacturers with totally different looking part numbers.
You still have to vet them yourself because some might be the wrong voltage or package. And you definitely have to check whatever fine details you care about like if you're trying to go for lowest possible power usage or highest possible temperature range, the substitutions will include everything not just the ones with the same lowest possible idle current that's a few uA less than usual like the one you had picked out.
They obviously have an extensive db in house with columns for all kinds of propeties, and some code to make meaningful matches and substitutions where there are sensible subsets of properties being considered vs ignored.
I think it would be totally abusive to their site to write something that scrapes it, or octopart etc.
There would have to be a community built db like that. The code for finding intelligent matches probably wouldn't be too crazy. A list of which properties are significant for a given part would just be part of the data on that part, and then it's pretty straight query on that.
A ui in a find-subs tool could even let you select/unselect properties for consideration, since what constitutes "significant" changes for each job. Sometimes even different package sizes are ok with you because for a lot of parts it's possible to draw a single footprint that can accomodate multiple different versions of the part.
But even with something like this, most jobs are doable an almost infinite number of ways using whatever parts you have access to. If you don't have one resistor anywhere in the world, you can use 2 others in parrallel, etc. The same job got done with no 1:1 substitution at all.
To be really useful there would need to be something quite a bit more involved. Where you would have to feed in your whole schematic so the the tool would know that this resistor isn't just a resistor, but the bias input to a transistor, and if you need change the transistor and you can't find a simple exact match you can find some other transistor AND a different bias input together to produce the same outward effect as the previous 2-part block. Let's just say "non-trivial"
For smaller prototype runs, PCB+Assembly suppliers like Eurocircuits have "generic parts" already in stock for common passive values, which they will give you for free.
Its only really if you are in a big rush or very budget constrained (e.g. a hobbyist or startup) that you would assemble yourself and hence buy all the parts.
If you do though, then Altium can happily manage multiple alternative options for the same "part" using ActiveBOM, including a search tool and distributor stock levels. I think the cheaper CircuitStudio option might have this too.
The function call is a little deceivingly simple, it queries a parts database for one that fits the constraints like value/rating/stock and the part/footprint are parameterized by global design variables/rules under the hood.
(1) https://github.com/JITx-Inc/open-components-database/blob/1f...
I've also found that the choices made in the reference PCB may not always be the best choice for your design. For example the reference may have a 802 cap but you'd rather use a 603. Same for routing, the reference may be a 2-layer board but you're doing a 4-layer. You may have other ICs that may be able to share certain components. And so on. Part stock and pricing also fluctuates quite often, so a manufacturer-provided BOM (which BTW exists for some EVMs) may not always work assuming that those are the exact components you want.
I haven't designed a PCB in a while but from when I did it the reasons above were why people weren't really keen on pre-made "libraries" of building blocks.
After all, why shouldn't a reference design be defined in a parametric way? Your switch-mode power supply might need a class-X value-Y precision-Z voltage-A ESR-B at frequency-C capacitor, while my decoupling capacitor just needs to be >3.3v 100nF and doesn't mind if you use one 5x larger.
Personally I've made innumerable designs where, at the schematic stage, I've copy-pasted a microcontroller and a crystal and capacitors and programming header and reset pull-up. It's a common-sense way to avoid human error, and a time saver too.
The design reuse is happening - the tools just haven't caught up.
Seems like the failure in the tools is that parametric generation is really badly supported by the usual graphics-oriented approach.
If the datasheet has specific requirements, do that. Otherwise, 100n capacitors on each power pin. 50V 100n capacitors can be found all the way down 0402s, and there's no sense in using anything else. Dielectric doesn't matter much for decoupling.
Increased cost due to an additional BOM item is way higher than the fraction of a cent of a cheaper capacitor.
I've mostly done analog IC design, but I've also done a not insignificant amount of verliog/vhdl, programming, infra as code, and pcb design. I can't pin point exactly why, but I just can't see how you accomplish the same thing visually and/or information ally with code as you can a graphical schematic.
https://www.youtube.com/watch?v=WErQYI2A36M
At some point for large enough designs, it's hard to validate that pins match up to signals. Though for small designs I think you're right.
TL;DW the tool is named Skidl ans uses Python to generate net lists for KiCAD. https://github.com/devbisme/skidl
hmm.. maybe that's ok if they don't go too overboard and encourage a functional style
> uses & as an in-place, mutating operator
that's it, I'm out of here
In this case it's simple to do:
net1 = pin1, pin2, pin3
design = net1, net2, net3...For example, the madness with the schematic he shows in that video for all of the by pass caps is something you'd never really see in an IC design. The cap would be placed in the schematic hierarchy either right at the voltage regulator or right at the circuit where its needed. But on PCB schematics you see that kind of thing all the time.
Part of the problem may be that with an IC you can easily simulate anything. The whole workflow is built around it. For a PCB, outside of using models for standard analog building blocks via spice simulator, it's a lot harder to verify your design.
But it turns out that 'a standard way to type out a netlist' is not the main thing an electrical designer needs from a language to be productive.
It doesn’t just cover schematic design but also PCB layout. The later which I am not sure Jitx can do
But the team has been moving extremely fast on things like performance, tutorials and onboarding classes and so on
Btw: you can absolutely also just graphically layout your sim…that’s a common misunderstanding I think
As a sidenote I think one day customizing the PCB for your devices will likely be seen as the ultimate feature for enthusiasts.
For example: Why carry around circuity to convert multiple voltages in your phone if you can make sure you’ll only ever use a single, standard, voltage charger with it?
Or, reserve some extra spaces on the PCB for a future drop-in RAM upgrade on your laptop.
Also circuit boards for thing you'll actually want to play with have more layers than you have fingers on at least one hand, you can't just chop them up willy nilly.
I presume it's cost/complexity, but it's a weird thing that ends up as a common solution.
The volumes necessary to justify the cost, time, risk, and specialized skill set necessary to achieve both regulatory and standards certification of a WiFi device are significant.