<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>DFM on LinearKF's Workspace</title><link>https://www.elpsylkf.work/tags/dfm/</link><description>Recent content in DFM on LinearKF's Workspace</description><generator>Hugo -- gohugo.io</generator><language>zh</language><lastBuildDate>Sun, 14 Jun 2026 03:36:53 +0800</lastBuildDate><atom:link href="https://www.elpsylkf.work/tags/dfm/index.xml" rel="self" type="application/rss+xml"/><item><title>薛定谔引脚与海森堡bug</title><link>https://www.elpsylkf.work/p/schrodinger-pin-and-heisenbug/</link><pubDate>Sun, 14 Jun 2026 03:29:00 +0800</pubDate><guid>https://www.elpsylkf.work/p/schrodinger-pin-and-heisenbug/</guid><description>&lt;h2 id="0x01-薛定谔引脚"&gt;0x01 薛定谔引脚
&lt;/h2&gt;&lt;p&gt;最近在尝试Agent辅助设计PCB，于是打了一板，发回来焊完按照正常的流程测连通性、电阻电容、二极管压降都没问题。正准备烧程序的时候发现开发板始终连接不上。&lt;/p&gt;
&lt;p&gt;&lt;img alt="Unable to connect" class="gallery-image" data-flex-basis="411px" data-flex-grow="171" height="840" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://www.elpsylkf.work/p/schrodinger-pin-and-heisenbug/unabletoconnect.webp" srcset="https://www.elpsylkf.work/p/schrodinger-pin-and-heisenbug/unabletoconnect_hu_f72b9f8e7777eeeb.webp 800w, https://www.elpsylkf.work/p/schrodinger-pin-and-heisenbug/unabletoconnect.webp 1440w" width="1440"&gt;&lt;/p&gt;
&lt;p&gt;最初怀疑是MacOS上的STM32 Cube Programmer有问题，因为安装的时候报有一个组件还是Intel架构的，一般这种情况下二进制兼容性不会太好。遂切到Windows下进行连接，发现还是不行。&lt;/p&gt;
&lt;p&gt;此间继续测试开发板连接性，包括上电后静态电压，发现仍然没有问题。开始怀疑下载器的问题，从ST-Link换到JLink，仍然不行。&lt;/p&gt;
&lt;p&gt;此时怀疑是焊接或者是元件的问题，而且这也是主包第一次用自己的回流焊焊台（&lt;em&gt;后面要考&lt;/em&gt;），虚焊啥的也不好说。好在嘉然创打一次样发5片。刚好手上备料比较多，于是二话不说又焊了一份。&lt;/p&gt;
&lt;p&gt;结果发现还是连不上，王德发！！！&lt;/p&gt;
&lt;p&gt;主包此时决定正儿八经地上示波器和逻辑分析仪进行分析了。不过我用的芯片是TSSOP的封装，引脚很难夹持（我逻辑分析仪的探针比较大），刚好我连接烧录其用了 pogo pin 的设计，可以直接加载那玩意的夹具上面（&lt;em&gt;后面要考&lt;/em&gt;）。&lt;/p&gt;
&lt;p&gt;此时看到的信号也真是好得不能再好了&amp;hellip;&amp;hellip;但是芯片就是不理下载器。&lt;/p&gt;
&lt;p&gt;&lt;img alt="debug signale" class="gallery-image" data-flex-basis="419px" data-flex-grow="174" height="1684" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://www.elpsylkf.work/p/schrodinger-pin-and-heisenbug/debug.png" srcset="https://www.elpsylkf.work/p/schrodinger-pin-and-heisenbug/debug_hu_bb59eeae84833c38.png 800w, https://www.elpsylkf.work/p/schrodinger-pin-and-heisenbug/debug_hu_c18bf394d9388a65.png 1600w, https://www.elpsylkf.work/p/schrodinger-pin-and-heisenbug/debug_hu_5a271c0ef9d23890.png 2400w, https://www.elpsylkf.work/p/schrodinger-pin-and-heisenbug/debug.png 2940w" width="2940"&gt;&lt;/p&gt;
&lt;p&gt;此时已经开始疯狂压力ChatGPT和Claude了，但是他们看完所有资料之后还是不知道病情在哪。另一边我仍在反复尝试，甚至已经在嘉立创考虑换个芯片重新画板子了。&lt;/p&gt;
&lt;p&gt;&amp;hellip;&amp;hellip; 直到，突然有一次，内存读到了！这不读到我就真重新画了，读到了可令人头大，因为这个事情不能复现&amp;hellip;&lt;/p&gt;
&lt;p&gt;真就那么一次，我还没来得及看参数，然后手机械性地点了重连，就再也连不上了，后面试了好多次也不行。考虑到这是我第二块板子，我当时已经排除了是焊接和元件的问题（元件也都换了一次），此时真的想不出什么情况了。&lt;/p&gt;
&lt;p&gt;但是这个月打样券用完了，于是我决定还是再死马当活马医一下，逻辑分析仪接了一个小探针，左手捏着探针戳引脚，右手去上位机点连接。因为手空不出来，所以我一次只能戳一个引脚，在测SWDIO的时候，信号正常但还是连不上，此时我真的想放弃了，但还是交换了一下，去测SWCLK。本来想看看连接失败的波形的，结果，连上了？！！！但是也不是很稳定，有时候连接不成功，有时候连接成功烧录失败，很奇怪。&lt;/p&gt;
&lt;h2 id="0x02-问题根因"&gt;0x02 问题根因
&lt;/h2&gt;&lt;p&gt;于是开始定位原因。其实到上面基本确定是这个引脚有问题，但是理论上我逻辑分析仪探针之间信号是隔离的，不可能说是逻辑分析仪给连起来了。考虑到于是把目光转向一个很边缘的可能：引脚虚焊。&lt;/p&gt;
&lt;p&gt;但是经过定位以及分析，这两个板子都是同一个SWCLK引脚虚焊，不可能吧&amp;hellip;真的不可能吗？回头测了一下第一块板子，用力压SWCLK发现也能连上！&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;罪之一：虚焊&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;我去两块板子同一个脚虚焊？！于是我焊了第三块板子，先做了回流焊，结果发现不压还是不行，但是连接性比第二块板子明显好了一些。&lt;/p&gt;
&lt;p&gt;为什么连接性在第三次焊接的时候增强了呢？回想起两次焊接中间还有一个小插曲，是我给焊台配了我之前淘汰了的报废电源，结果这玩意不说功率上不去，中间加热热着热着还把电源适配器直接拉爆了。&lt;/p&gt;
&lt;p&gt;&lt;img alt="Deprecated AC-DC Adapter" class="gallery-image" data-flex-basis="110px" data-flex-grow="46" height="1308" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://www.elpsylkf.work/p/schrodinger-pin-and-heisenbug/power.jpeg" width="602"&gt;&lt;/p&gt;
&lt;p&gt;所以前两次焊接的时候，中间恒温的时间其实是不够的&amp;hellip;&amp;hellip;进一步降低了焊点的连接性。&lt;/p&gt;
&lt;ol start="2"&gt;
&lt;li&gt;罪之二：盘中孔&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;遂冷静下来去考察原理图，发现这个焊盘有一个特点是上面有过孔。之前画板子的时候有时候在电容焊盘上打过孔，也没啥问题，为啥这次翻车了？去查了一下，答案在嘉立创&lt;a class="link" href="https://www.jlc.com/portal/q7i38630.html" target="_blank" rel="noopener"
 &gt;盘中孔&lt;/a&gt;工艺说明里面。&lt;/p&gt;
&lt;p&gt;打在焊盘上的过孔会影响回流焊时焊锡的张力，降低焊接性能。此外，过孔会增强该位置的散热，如果回流焊温度开得比较低或者时间不够的话，可能导致过孔周围焊锡过早冷却。以前手焊的时候这个问题不会很明显&lt;/p&gt;
&lt;p&gt;debuff刚好撞一块了&amp;hellip;&amp;hellip;&lt;/p&gt;
&lt;ol start="3"&gt;
&lt;li&gt;罪之三：DFM&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;但是在设计过程中，我将版图给AI检查了很多遍，包括ChatGPT和Claude模型，他们都没查出来。事后我将原因告诉这些模型，他们认为前面在检查的时候，&lt;strong&gt;没有考虑这个方向&lt;/strong&gt;（我没写这个提示词）。&lt;/p&gt;
&lt;p&gt;我也回顾了一下之前的对话过程，确实很多检查落在所谓的DRC实质是连接正确性上，而&lt;strong&gt;DFM&lt;/strong&gt;只是混在需求里面了，没有给他们专门画一个stage也没有拉一个checklist去检查。如果AI要检查的话，他们会把图放大，不然看不出来。作为一个只是顺便一提的需求，他们的思考过程中就没有很细致的检查这个了。&lt;/p&gt;
&lt;p&gt;这样来看，设计这块确实需要很多硬件工程师的专家知识。&lt;/p&gt;
&lt;h2 id="0x03-成品"&gt;0x03 成品
&lt;/h2&gt;&lt;p&gt;最后做出来的小玩意在这，Project Leithanien，是一个无源NFC播放器。&lt;/p&gt;






 


&lt;div class="video-wrapper"&gt;
 &lt;iframe src="https://player.bilibili.com/player.html?as_wide=1&amp;amp;high_quality=1&amp;amp;page=1&amp;bvid=BV1sVJj6TEKB"
 scrolling="no"
 frameborder="no"
 framespacing="0"
 allowfullscreen="true"
 &gt;
 &lt;/iframe&gt;
&lt;/div&gt;

&lt;h2 id="0xf1-海森堡bug"&gt;0xF1 海森堡bug
&lt;/h2&gt;&lt;p&gt;上面这个问题差不多让我断断续续找了一个礼拜，主要是探针测试的时候它没问题，而撤掉探针之后，问题就暴露了，若不是去戳芯片引脚同时还要观察上位机，否则问题很难发现，真是一个薛定谔的引脚。&lt;/p&gt;
&lt;p&gt;而众所周知我的研究方向是做系统结构的，这样的话绕不开和OS Kernel打交道。而在这中间，也有这么一个“臭名昭著”的“薛定谔引脚”，&lt;code&gt;printk&lt;/code&gt;。有些问题就是，你不打印的时候就有了，添加调试信息的时候却发现问题无论如何都无法复现。&lt;/p&gt;
&lt;p&gt;此外，在Agent设计中，很多时候你让模型输出思维链，它反而会在任务的最终目的和真实因果上出现偏差，此时强约束的提示词执行效果反而会变差；但是你不输出思维链模型也无法做思考了。&lt;/p&gt;
&lt;p&gt;这类问题算是Heisenbug，原意是在计算机编程中，一类特殊软件错误会在试图调试或研究时自行消失或改变行为。这在许多领域都是令人头疼的事情。经此一役，在设计的时候考虑&lt;strong&gt;DFT&lt;/strong&gt;，即测试与可测试性设计，将探针融入到系统设计中并降低其干扰，或许能减少/规避此类问题。&lt;/p&gt;
&lt;h2 id="0xf2-关于agent辅助设计pcb思路的讨论"&gt;0xF2 关于Agent辅助设计PCB思路的讨论
&lt;/h2&gt;&lt;p&gt;目前立创EDA生态下已有JLC-EDA-Bridge等开源项目，对外提供 MCP Server和一系列操作原语。不过经过繁杂的测试之后，发现暴露的API存在诸多问题：例如MCP Server提供的参数说明对AI而言有歧义，连线的时候，如果两线交叉，它们默认会形成交点，而在文本推理中Agent对发给MCP Server操作的元件的几何状态几乎没有感知，导致即使连接完之后还存在诸多问题。&lt;/p&gt;
&lt;p&gt;作者还试过直接用Computer Use + Batch &amp;amp; Speculative 操作优化，效果比上面还好&amp;hellip;&lt;/p&gt;
&lt;p&gt;然而实际上，在上述推理中，电路设计是相当快速的，特别是EDA已经有了成熟的Net/Port等抽象概念，它们都能做DRC，给Agent这种自动化设计工具岂不更容易。而真正的问题在于EDA工具（可能主要还是立创EDA，AD试了试感觉还好）其API接口设计并非最优。这导致上下文被迅速填满，而端口连接/数值计算等问题在其中没有获得其应有的注意力。&lt;/p&gt;
&lt;p&gt;而前段时间在ChinaSys'26 Spring上刚好看到 Wolvrix 这个工作，也是考虑到Verilog等RTL语言的语法对于Coding Agent而言过于复杂而且细致，而自然语言或文档去描述一个电路设计又不够精确，于是给RTL提供一个IR。&lt;/p&gt;
&lt;p&gt;&lt;img alt="PCB IR" class="gallery-image" data-flex-basis="472px" data-flex-grow="196" height="1328" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://www.elpsylkf.work/p/schrodinger-pin-and-heisenbug/pcbir.png" srcset="https://www.elpsylkf.work/p/schrodinger-pin-and-heisenbug/pcbir_hu_f430b8c8125a7579.png 800w, https://www.elpsylkf.work/p/schrodinger-pin-and-heisenbug/pcbir_hu_b2b936706a01096a.png 1600w, https://www.elpsylkf.work/p/schrodinger-pin-and-heisenbug/pcbir_hu_3014a1bbf6417e50.png 2400w, https://www.elpsylkf.work/p/schrodinger-pin-and-heisenbug/pcbir.png 2614w" width="2614"&gt;&lt;/p&gt;
&lt;p&gt;其实确实有一些选型，例如KiCad的SKiDL，还有非常近挂在arXiv上的一个研究&lt;a class="link" href="https://arxiv.org/abs/2605.30345v1" target="_blank" rel="noopener"
 &gt;SchGen&lt;/a&gt;。不过目前用起来也是有诸多问题的。还有一类是直接生成Netlist，但是也是存在和Verilog一样的问题。&lt;/p&gt;
&lt;p&gt;这里也是借鉴其设计，写了一套Skill，和Agent讨论设计的时候在一个基于表格的中间格式上做迭代，并且用GPT-Image-2将电路渲染出来，用于人工检查以及走线参考。中间格式目前可以发送给Agent去绘制原理图，而渲染出来的电路图再经过工作流输出PCB分层版图，应该是可以直接用的，剩下就是放置元件的事情。之前看谷歌 Vision Banana 的工作比较有趣，或许等他们产品做出来了可以用在这里。前面的流程是差不多了，不过第二个还没有跑通（主要是自己画更快先把板子打出来玩一玩算了hhh）。&lt;/p&gt;</description></item></channel></rss>