{"slug": "agentic-ai-designs-an-analog-synthesizer", "title": "Agentic AI Designs an Analog Synthesizer", "summary": "A hardware engineer using Claude Code with Anthropic's Opus 5.5 model had the agent design, simulate and document a complete MCU-controlled analog synthesizer from a blank project folder, with the agent selecting parts from the JLCPCB free parts list and correcting its own circuit design based on ngspice simulation results. The agent produced a subtractive synthesizer with a Juno-style digitally controlled oscillator, a Moog-style transistor ladder filter and a voltage-controlled amplifier, built around a CH32V00x microcontroller, and generated a behavioral Python model calibrated against the ngspice simulation to produce audio examples. The engineer, who reviewed the design in detail without changing anything, said the work followed the September 2026 releases of GPT-6 Astra and Claude Opus 5.5, which showed markedly improved spatial reasoning and engineering capability.", "body_md": "Can we just “vibe-engineer” actual analog circuits in hardware? When GPT-6 Astra and Claude Opus 5.5 were released in September 2026, it became quite clear that the models’ capabilities in spatial reasoning and engineering in general had significantly improved. OpenAI even showed [a PCB designed by Astra](https://openai.com/index/gpt-6-astra/) in their announcement. I decided to put these capabilities to the test. I was quite astonished by the results and learned a lot about analog synthesizers along the way.\n\nIf you are interested in the final result and audio examples, feel free to browse the [repo](https://github.com/cpldcpu/TouchSynth/), read the AI-generated [design report](https://github.com/cpldcpu/TouchSynth/blob/master/docs/report/touchsynth_report.pdf) or check out the [AI-generated website](https://cpldcpu.github.io/TouchSynth/) with sound examples. Read on below for the human perspective.\n\n## Setup[#](#setup)\n\nWhen working with full end-to-end GenAI designs I typically try to follow a systematic approach starting from the highest abstraction level (the [V-Model](https://en.wikipedia.org/wiki/V-model) may serve as a reference). I try to avoid “iterative editing” where I start to change things in earlier levels of the hierarchy. My observation is that it is much easier for the models to generate the next abstraction layer from a complete specification in one go, instead of doing it step by step. A likely reason is that this provides a more compact context for the model to work with. I also ask it to write a design report in parallel, typically either .md files in a folder or a LaTeX design report. Of course, this is proper engineering practice anyway. But when using AI it is very tempting to work by trial and error, which I found to be far less successful.\n\nI used Claude Code with Opus 5.5 in VSCode, starting from a blank project folder and a fresh git repo. I pointed the agent to the JLCPCB free parts list and asked it to come up with suggestions of what could be built from them. After iterating on some boring options I suggested an MCU-controlled analog synthesizer with touch keys on the PCB, with little more input given than the MCU to be used (CH32V00x).\n\nIt suggested a [subtractive synthesizer](https://en.wikipedia.org/wiki/Subtractive_synthesis) with a [Juno-style digitally controlled oscillator (DCO)](https://electricdruid.net/roland-juno-dcos/), a [Moog-style transistor ladder filter](https://www.allaboutcircuits.com/technical-articles/analyzing-the-moog-filter/) and a voltage-controlled amplifier.\n\n## Design & implementation[#](#design--implementation)\n\nI pointed Claude Code (CC) to KiCad 10 in the Windows environment and WSL for all Linux command line tools, specifically ngspice for circuit simulation, pdflatex for document generation, the RISC-V toolchain and of course Python. Almost everything is a Python script.\n\nI asked it to design the circuit, simulate it in ngspice and write a [simulation report](https://github.com/cpldcpu/TouchSynth/blob/master/docs/sim_report.md). The agent built its own [component library](https://github.com/cpldcpu/TouchSynth/tree/master/sim/models) based on models sourced from the web. CC corrected some parts of the initial design based on the simulation results. To be able to simulate the whole synthesizer, I also asked it to come up with a behavioral model in Python and calibrate it against the ngspice simulation. The simulated audio examples were all generated with the behavioral model.\n\n### Circuit details[#](#circuit-details)\n\nI had limited prior experience with analog synthesizers and was quite amazed by some of the design choices. I reviewed the design in detail, but without changing anything. The [part selection](https://github.com/cpldcpu/TouchSynth/blob/master/parts/jlcpcb_basic_and_promotional_parts.csv) was fairly limited, which is why we see lots of components that would have also been used in the 70s - but I guess that is also fitting for an analog synthesizer.\n\nThe signal chain of the synthesizer is shown above. The basic idea is to have a frequency-tunable oscillator that creates a signal rich in harmonics. In this case this is an analog sawtooth oscillator. In addition, noise and square waveforms can be generated by directly using a digital output pin of the MCU (I later also experimented with direct digital synthesis for the oscillator using these pins). The oscillator signal is then passed through a low-pass filter with controllable resonance. The filter is a transistor ladder filter, which is a classic design that became famous in the Moog synthesizers. The output of the filter is then fed into a voltage-controlled amplifier (VCA), which is basically a variable-gain amplifier.\n\n#### DCO[#](#dco)\n\nThe oscillator is basically a resettable integrator based on a 10 nF capacitor, a current sink and a reset switch. The reset switch is controlled by an MCU pin, which controls the pitch of the sawtooth signal. The current sink is controlled by a PWM output of the MCU with a passive low-pass filter and sets the slope. The LM324+transistor convert the voltage into a current. The AI correctly picked a low input leakage opamp for the integrator (TL072, limited by JLCPCB free part selection) and a 10 nF cap with high voltage rating (X7R, 50 V - no C0G available) to reduce nonlinearity.\n\n#### Voltage-controlled filter[#](#voltage-controlled-filter)\n\nThe block diagram above shows the heart of the synthesizer, the transistor ladder filter along with control circuits. The mixer combines the oscillator signals. The ladder filter is a very steep (24 dB/oct) voltage-controlled low-pass filter, with a feedback branch that controls the resonance.\n\nThe schematic of the ladder filter including mixer is shown above. It is constructed from matched NPN transistor pairs, which were luckily available in the parts library. Each of the ladder stages basically represents a single-pole low-pass filter, formed by the transistors’ transconductance and the capacitor. The transconductance is proportional to the tail current, which can be used to control the cutoff frequency over the entire audio range. A much better explanation can be found in this series of articles: [1](https://www.allaboutcircuits.com/technical-articles/analyzing-the-moog-filter/) [2](https://www.allaboutcircuits.com/technical-articles/small-signal-open-loop-transfer-function-moog-filter/) [3](https://www.allaboutcircuits.com/technical-articles/characterizing-the-moog-filter/). The output of the ladder is picked up by an instrumentation amplifier formed from two opamps.\n\nTo complete the filter, the tail current sink and resonance amplifier are also needed. The tail current has to be controlled over a wide range of currents (100s of nA to mA, 1:1400), which is why an exponential voltage-to-current converter is used here. The input voltage is again controlled with a PWM output. I suspect that this could have been simplified a bit.\n\nThe resonance amplifier is based on a differential pair, with tail current controlled by the MCU via PWM and a V-I converter. This circuit style certainly matches the Moog filter, but seems quite excessive. I suppose this is also owed to limited component selection as no OTA or JFET was available. The original Moog synthesizer simply used an analog potentiometer to control feedback ([see fig 5 here](https://www.allaboutcircuits.com/technical-articles/characterizing-the-moog-filter/)).\n\nAll in all I was extremely impressed with this section - manually designing and tuning a circuit like this would have taken quite a while. I would certainly have tried to take many more shortcuts, though.\n\n#### Voltage-controlled amplifier[#](#voltage-controlled-amplifier)\n\nThe VCA is implemented with a tail-current-controlled differential pair. It also includes a trim DAC used to compensate for offsets generated by different settings in the ladder filter. Since no further PWM output was available, it is based on an R-2R ladder with a 74HC595 as driver. Again, a lot of components, but since these all only cost cents each it does not matter.\n\n#### Rest of the design[#](#rest-of-the-design)\n\nSince pins were running out on the MCU, the touch keys and LEDs had to use pin extension with analog multiplexers (CD4051) and shift registers (74HC595). I also asked it to include a feedback path from the audio output to an ADC input of the MCU to enable automated bring-up.\n\n### Layout and sign-off[#](#layout-and-sign-off)\n\nThe PCB layout was the part where I had to intervene most. The initial version had most analog components bunched up, but things improved significantly after I asked for a floorplan that follows the functional blocks. CC wrote Python programs for part placement and then used Freerouting to route the PCB. Two-layer routing failed, so I switched to four. It took a couple more iterations where I pointed out how to move circuit blocks around to make more space for routing channels until the routing finally cleared. Possibly this would have been easier if I had chosen a larger PCB area than 10 x 10 cm.\n\nThen I asked it to write the [firmware](https://github.com/cpldcpu/TouchSynth/blob/master/firmware/touchsynth/README.md), come up with a [bring-up plan](https://github.com/cpldcpu/TouchSynth/blob/master/docs/verification_plan.md) and prepare the ordering files.\n\nAccording to the logs, the design took 19 hours from first prompt until ordering. Most of the time was spent on Freerouting runs that did not require any interaction.\n\n| Time | Step | Result | \n|---|---|---|\n| Sat 20:59 | First prompt | General KiCad/JLCPCB flow | \n| 21:09 | Parts lists | Found the JSON API and saved 1,586 parts as CSV | \n| 21:18–21:28 | Concept | Juno-style DCO, ladder VCF, written specification | \n| 21:53–22:59 | Simulation | Seven ngspice test benches | \n| 23:00 | Model | Behavioral model validated vs SPICE, audio samples | \n| 23:24–23:39 | Schematic | KiCad sheets generated | \n| 00:01–10:48 | PCB, 2 layers | Freerouting never fully routed | \n| 10:48–15:18 | PCB, 4 layers | New stack-up and floorplan, fully routed, DRC clean | \n| 16:04 | Order | Gerbers, BOM and placement file generated | \n\n## Bring-up[#](#bring-up)\n\nThe populated boards arrived after two weeks. After [first manual tests](https://github.com/cpldcpu/TouchSynth/blob/master/docs/verification_plan.md#3-l1--bring-up-mcu-not-fitted-then-fitted) before fitting the MCU, I connected the board to my lab PC via the MCU programmer and hooked up an oscilloscope to audio out (MSO5074, Ethernet). Claude Code controlled the lab PC through SSH.\n\nAll further bring-up was fully automated via the audio loopback to the microcontroller and the oscilloscope output.\n\nThe match between SPICE simulations (test benches S1-S4) and actual hardware (Board1) was excellent and the loopback allowed automated calibration of trimming and control parameters. This was surprising not only because the board was GenAI-developed, but also because matching of SPICE models for second-source components is not always that great. The only hardware fix required was to remove a solder bridge from the MCU, which I had soldered by hand…\n\nThe touch keys required recalibration, since they were initially too sensitive. Generally, they turned out to be rather hard to use due to their small size, so I opted to control the synthesizer directly via microcontroller programs.\n\nThe oscilloscope was also used to record the sound examples you can find on [this page](https://cpldcpu.github.io/TouchSynth/). These are automatically generated tracks from sheet music and other sources. Multiple voices are simulated by recording each voice separately and then combining them.\n\n## Verdict[#](#verdict)\n\nCan GenAI design PCBs with complex mixed-signal circuits? Absolutely. What do we make of it? Certainly this will soon require rethinking of design flows, similar to what is happening in software right now. I hope it will not make electronics less interesting…", "url": "https://wpnews.pro/news/agentic-ai-designs-an-analog-synthesizer", "canonical_source": "https://cpldcpu.github.io/2026/11/14/touchsynth/", "published_at": "2026-11-14 12:00:00+00:00", "updated_at": "2026-11-15 18:23:19.694726+00:00", "lang": "en", "topics": ["artificial-intelligence", "ai-agents", "ai-tools", "large-language-models"], "entities": ["Anthropic", "Claude Opus 5.5", "Claude Code", "OpenAI", "GPT-6 Astra", "JLCPCB", "KiCad 10", "ngspice"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/agentic-ai-designs-an-analog-synthesizer", "markdown": "https://wpnews.pro/news/agentic-ai-designs-an-analog-synthesizer.md", "text": "https://wpnews.pro/news/agentic-ai-designs-an-analog-synthesizer.txt", "jsonld": "https://wpnews.pro/news/agentic-ai-designs-an-analog-synthesizer.jsonld"}}