據(jù)清洗到自動(dòng)排版的實(shí)戰(zhàn)指南)
1. 這套方案到底在解決誰(shuí)的什么痛點(diǎn)先說(shuō)個(gè)我切身經(jīng)歷的場(chǎng)景。硬件團(tuán)隊(duì)做產(chǎn)品迭代原理圖改了一版BOM表跟著動(dòng)了幾十個(gè)料。結(jié)果到了采購(gòu)那邊因?yàn)?00nF 0402和0.1uF 0402兩種寫(xiě)法不一致系統(tǒng)直接判定是不同物料多備了一整盤(pán)庫(kù)存而真正缺貨的料因?yàn)樾吞?hào)簡(jiǎn)寫(xiě)不規(guī)范在替代料清單里完全沒(méi)有被識(shí)別出來(lái)。類似的事情只要發(fā)生過(guò)一次你就會(huì)意識(shí)到BOM管理根本不是整理表格而是數(shù)據(jù)治理問(wèn)題。再來(lái)看排版。做過(guò)PCB Layout的人都知道第一次擺放器件往往是最耗精力的環(huán)節(jié)。幾百個(gè)元件既要按原理圖功能模塊分區(qū)又要想辦法讓連線短、散熱好、接口位置對(duì)得上還要預(yù)留絲印空間。熟練工程師擺一版可能需要一到兩天而且大量時(shí)間花在把元件從一堆里拖到大致區(qū)域這種低含金量動(dòng)作上。如果把BOM管理物料數(shù)據(jù)的清洗、比對(duì)、替代識(shí)別和PCB排版器件布局、分區(qū)、約束優(yōu)化這兩個(gè)環(huán)節(jié)用AI串起來(lái)整個(gè)從原理圖到可評(píng)審PCB初版的周期能壓縮得非常明顯。這個(gè)需求在硬件公司、方案公司、中小型工作室里普遍存在。適合誰(shuí)適合硬件工程師、Layout工程師、研發(fā)經(jīng)理、信息化負(fù)責(zé)人以及正在做電子設(shè)計(jì)自動(dòng)化工具方向的開(kāi)發(fā)者。它不是某個(gè)大廠PPT里的概念而是可以直接落地的工程實(shí)踐。下面我拆開(kāi)講從需求分析、技術(shù)方案、模塊實(shí)現(xiàn)到問(wèn)題排查盡量把你需要的細(xì)節(jié)和坑一次說(shuō)完。2. 方案選型之前先想清楚BOM和排版的關(guān)系2.1 BOM管理不是錄入表格而是數(shù)據(jù)全鏈路治理很多團(tuán)隊(duì)一提BOM就以為要上ERP或者PLM但中小型硬件團(tuán)隊(duì)根本用不起那么重的系統(tǒng)?,F(xiàn)實(shí)情況是原理圖元件屬性里有BOM信息采購(gòu)報(bào)表里有價(jià)格和庫(kù)存生產(chǎn)端有貼片圖每個(gè)環(huán)節(jié)的數(shù)據(jù)格式、字段命名、精度要求都不一樣。AI在這里的價(jià)值是成為中間那一層翻譯器。傳統(tǒng)的BOM整理方式是靠工程師手工把EDA軟件導(dǎo)出的BOM文件復(fù)制到Excel里再逐行核對(duì)規(guī)格、封裝、位號(hào)。這種模式的痛點(diǎn)在于人力只能覆蓋看著對(duì)覆蓋不了算得對(duì)——比如多板共用料的庫(kù)存合并、替代料兼容性判斷、新老版本BOM的字段級(jí)差異對(duì)比這些都需要跨多條數(shù)據(jù)的邏輯推理人看多了必然麻木。而AI方案處理這個(gè)問(wèn)題的思路是先讓程序理解BOM數(shù)據(jù)的語(yǔ)義再做結(jié)構(gòu)化處理和邏輯判斷。理解語(yǔ)義是LLM的長(zhǎng)處結(jié)構(gòu)化處理是Python生態(tài)的強(qiáng)項(xiàng)兩者結(jié)合可以實(shí)現(xiàn)從非標(biāo)準(zhǔn)數(shù)據(jù)到標(biāo)準(zhǔn)數(shù)據(jù)的自動(dòng)轉(zhuǎn)換轉(zhuǎn)換之后再掛到規(guī)則引擎上做物料分組、替代識(shí)別和版本差異分析。2.2 Layout排版不是自動(dòng)布線而是約束求解經(jīng)驗(yàn)遷移Layout圈子里一提AI大家第一反應(yīng)是自動(dòng)布線能不能替代我。這里必須先把概念理清楚布線Routing是給定已擺放器件之后處理連接關(guān)系而排版/布局Placement是決定器件放哪、朝向哪、模塊怎么分區(qū)。標(biāo)題里說(shuō)的排版我認(rèn)為就是Placement這一環(huán)。Placement的難點(diǎn)在于它的目標(biāo)函數(shù)不止一個(gè)。連線最短、熱源分散、電源路徑順暢、接口朝向合理、易損件可維護(hù)這些目標(biāo)之間經(jīng)?;ハ啻蚣?。傳統(tǒng)做法靠工程師大腦里的經(jīng)驗(yàn)庫(kù)看一個(gè)板子就知道哪里是核心、哪里需要避讓。AI Layout的切入點(diǎn)是先把這些經(jīng)驗(yàn)翻譯成約束條件再用優(yōu)化算法在約束域里找更優(yōu)解。它不追求一次生成最終板子而是把從零到80分的工作自動(dòng)化把從80分到100分的精細(xì)調(diào)校留給工程師。這么做還有一個(gè)額外好處BOM的物料信息和封裝信息能直接參與排版。比如電源模塊的發(fā)熱量、敏感信號(hào)器的干擾等級(jí)、連接器的機(jī)械尺寸這些數(shù)據(jù)在BOM表里本來(lái)就存在只是傳統(tǒng)流程里它們沉睡在Excel里排版時(shí)全靠腦子記。一旦BOM和Layout打通AI在布局時(shí)的決策輸入質(zhì)量會(huì)高一個(gè)量級(jí)這也是我把兩個(gè)功能放在同一個(gè)方案里的原因。2.3 技術(shù)棧選擇的幾個(gè)現(xiàn)實(shí)約束技術(shù)選型沒(méi)有唯一答案但有幾個(gè)現(xiàn)實(shí)約束必須考慮。一是成本中小團(tuán)隊(duì)不可能花幾十萬(wàn)買(mǎi)商業(yè)EDA的AI模塊二是易用性方案最好能跑在普通工作站上工程師不用寫(xiě)太多代碼三是可解釋性AI給出的BOM合并結(jié)果和布局建議必須能被審計(jì)否則沒(méi)人敢用。我的落地選擇是Python為主pandas做表格處理ChromaDB或者簡(jiǎn)單的向量檢索做物料描述相似度匹配LLM API負(fù)責(zé)非規(guī)則文本的理解決策規(guī)則用Python字典或者簡(jiǎn)單的決策表實(shí)現(xiàn)。Layout部分優(yōu)先選擇有腳本接口的ECAD工具比如KiCad的Python API或者主流商業(yè)EDA的腳本環(huán)境。這套組合的好處是每一層都可以獨(dú)立測(cè)試、獨(dú)立替換不像綁定某個(gè)商業(yè)一體化工具體系換工具等于推翻重來(lái)。3. BOM管理模塊從解析到比對(duì)的完整實(shí)現(xiàn)3.1 雜亂的原始BOM數(shù)據(jù)如何統(tǒng)一標(biāo)準(zhǔn)實(shí)際拿到的BOM來(lái)源五花八門(mén)。有的來(lái)自原理圖設(shè)計(jì)軟件的導(dǎo)出有的來(lái)自采購(gòu)下發(fā)模板有的是代工廠發(fā)來(lái)的貼片明細(xì)。共同特點(diǎn)是列名對(duì)不上單位不統(tǒng)一規(guī)格描述極其隨意。比如同樣一顆電容這一版叫100nF 50V 0402 X7R下一版叫C 0.1uF 0402 50V還有的干脆只寫(xiě)104。處理這種數(shù)據(jù)的第一步就是列名映射。不需要多聰明一個(gè)可配置的字段映射表就能解決。我會(huì)把常見(jiàn)列名歸類成標(biāo)準(zhǔn)字段位號(hào)Reference、數(shù)量Qty)、容值/阻值/感值Value、封裝Footprint、規(guī)格描述Description、廠商型號(hào)MPN、備注Remark。映射表內(nèi)置常見(jiàn)中英文別名比如RefDes對(duì)應(yīng)位號(hào)Designator也對(duì)應(yīng)位號(hào)pcs對(duì)應(yīng)數(shù)量。字段映射完成后再用正則規(guī)則把單位統(tǒng)一和描述清洗做掉。電容類把uF/nF/pF換算成標(biāo)準(zhǔn)單位電阻類把kR/MR處理成歐姆數(shù)值。這里有個(gè)基礎(chǔ)但很重要的點(diǎn)不能直接替換字符串得先判斷數(shù)值和單位的組合。比如10K在電阻里是10千歐絲印里卻可能是10KΩ的意思差不多但100nF里的n絕不能和100歐姆里的100混淆。規(guī)則引擎按器件大類獨(dú)立解析每個(gè)類別的正則單獨(dú)維護(hù)這樣出錯(cuò)時(shí)容易定位問(wèn)題。統(tǒng)一之后的數(shù)據(jù)會(huì)進(jìn)入一個(gè)中間表包含字段標(biāo)準(zhǔn)位號(hào)、標(biāo)準(zhǔn)值、單位、封裝、原始描述、來(lái)源文件。這張中間表就是后面做相似度匹配和替代料識(shí)別的基礎(chǔ)。沒(méi)有這一步后面所有AI判斷都是在垃圾上蓋房子。3.2 用Embedding做物料描述的語(yǔ)義相似度匹配物料描述清洗之后會(huì)暴露出更麻煩的問(wèn)題不同工程師對(duì)同一個(gè)物料的描述習(xí)慣差異很大單純靠字符串匹配會(huì)漏掉大量真實(shí)相同的物料。比如鉭電容 47uF 16V 3528和47UF/16V TYPE C實(shí)際上是同一個(gè)物料但字符層面只有47和16V是共現(xiàn)的。我建議用文本Embedding做這一步。把每行物料的標(biāo)準(zhǔn)描述拼成一個(gè)短句比如電容 47uF 16V 3528 坦電解用開(kāi)源或者商用Embedding模型轉(zhuǎn)成向量再計(jì)算兩兩之間的余弦相似度。相似度高于閾值經(jīng)驗(yàn)值0.85左右需按實(shí)際數(shù)據(jù)調(diào)整的兩條記錄視為同一物料歸并到同一物料組。為什么不直接用LLM看有沒(méi)有關(guān)聯(lián)可以但成本高且延遲大。幾千行物料讓LLM逐行判斷費(fèi)用和時(shí)間都吃不消。embedding方案是離線批量執(zhí)行的幾百塊錢(qián)的模型服務(wù)就能跑幾萬(wàn)行數(shù)據(jù)而且結(jié)果完全可復(fù)現(xiàn)。做相似度匹配之后我建議保留一個(gè)人工確認(rèn)清單把相似度處于0.7到0.85之間、可能有關(guān)聯(lián)又可能沒(méi)關(guān)聯(lián)的記錄列出來(lái)讓硬件工程師快速勾選。這個(gè)半自動(dòng)設(shè)計(jì)能防止AI一刀切造成誤合并。代碼骨架大概這樣# 物料語(yǔ)義匹配模塊簡(jiǎn)化版 import pandas as pd from sentence_transformers import SentenceTransformer model SentenceTransformer(paraphrase-multilingual-MiniLM-L12-v2) def build_material_vector(df): # 把清洗后的物料描述拼成檢索文本 df[match_text] ( df[device_type] df[standard_value] df[package] df[desc_tag] ) vectors model.encode(df[match_text].tolist(), normalize_embeddingsTrue) return vectors vectors build_material_vector(bom_df) # 接下來(lái)按閾值聚類把相似度高的物料歸并為同一物料組這一步做完BOM表里看起來(lái)相同實(shí)際相同的物料就能自動(dòng)聚合采購(gòu)和生產(chǎn)拿到的是一份歸一化后的清單。聚類的輸出還可以落到物料主數(shù)據(jù)表里后續(xù)導(dǎo)入新項(xiàng)目BOM時(shí)直接復(fù)用主數(shù)據(jù)編碼。3.3 替代料識(shí)別的三條判斷路徑替代料識(shí)別是BOM管理里采購(gòu)最關(guān)心的功能也是AI最能提效的點(diǎn)。缺料的時(shí)候如果能快速找到可替代的型號(hào)生產(chǎn)計(jì)劃就不會(huì)卡住。我實(shí)現(xiàn)的替代料判斷分三條路徑按優(yōu)先級(jí)從高到低第一條是精確型號(hào)替代。即MPN廠商型號(hào)完全一致或者有明確的原廠交叉參考表。這個(gè)最可靠直接查數(shù)據(jù)庫(kù)即可不需要AI參與。第二條是參數(shù)兼容替代。當(dāng)MPN不一致時(shí)對(duì)比關(guān)鍵電氣參數(shù)阻值/容值/感值、額定電壓、精度、溫漂系數(shù)、封裝尺寸。兼容條件在規(guī)則引擎里配置比如電容只要容值等級(jí)一致、耐壓大于等于原規(guī)格、封裝一致就自動(dòng)標(biāo)為可替代。這里要注意耐壓的代換邏輯并不是一樣就行這么簡(jiǎn)單當(dāng)選替代料的耐壓比原規(guī)格低時(shí)直接否決即便容值相同也不行。第三條是模糊描述替代。如果型號(hào)與參數(shù)信息都不完整就靠Embedding搜索相似描述物料把候選集返回給工程師人工判斷。我見(jiàn)過(guò)一個(gè)實(shí)際案例某控制板上一顆型號(hào)很老的運(yùn)放停產(chǎn)采購(gòu)找了三天沒(méi)找到替代用語(yǔ)義搜索把高速 運(yùn)放 SOT23-5 單通道 軌到軌作為查詢條件十幾秒內(nèi)就帶出了三個(gè)候選物料其中一個(gè)經(jīng)過(guò)確認(rèn)完全兼容。這種場(chǎng)景里AI不是拍板的人而是高效的檢索器。三條路徑的判斷結(jié)果合并后輸出一張?zhí)娲暇仃嚤順?biāo)注每條替代方案的可靠等級(jí)高精確替代、中參數(shù)兼容、低語(yǔ)義候選。采購(gòu)在ERP下單時(shí)按等級(jí)決定是否可以直接替換避免Al誤判直接流入生產(chǎn)。3.4 多板BOM差異比對(duì)和變更影響分析硬件研發(fā)過(guò)程中原理圖改版本是常態(tài)。上一個(gè)版本還在試產(chǎn)下一個(gè)版本已經(jīng)改了兩頁(yè)原理圖。如果每次變更都靠人去核對(duì)BOM差異效率低不說(shuō)還容易漏掉影響采購(gòu)的隱性變化比如容值沒(méi)變但封裝改了。AI版本比對(duì)的做法是把新老版本BOM全部歸一化之后以標(biāo)準(zhǔn)物料編碼為Key做字段級(jí)diff。比對(duì)結(jié)果輸出四類新增物料新版本有、舊版本沒(méi)有、移除物料舊版本有、新版本沒(méi)有、變更物料物料存在但屬性有變、無(wú)變化物料。變更物料里再細(xì)分變化字段比如封裝變了、數(shù)量變了、或者溫度等級(jí)變了。這一步用pandas的merge就能實(shí)現(xiàn)核心難點(diǎn)還是前面的歸一化質(zhì)量。如果兩個(gè)版本里同一個(gè)料一個(gè)寫(xiě)0402一個(gè)寫(xiě)1005公制與英制混用merge后就會(huì)被誤判成新增和移除。所以我在歸一化階段就強(qiáng)制統(tǒng)一封裝標(biāo)識(shí)信號(hào)層、絲印層、SCK這些字段也做了標(biāo)準(zhǔn)映射。變更影響分析再做兩步一是把變更物料與采購(gòu)在途訂單、庫(kù)存綁定自動(dòng)計(jì)算如果改為新物料在途訂單和庫(kù)存是否報(bào)廢二是把變更物料的網(wǎng)絡(luò)連接關(guān)系在Layout里高亮讓Layout工程師知道改動(dòng)的部分涉及哪些擺件區(qū)域。這兩步雖然邏輯簡(jiǎn)單但在傳統(tǒng)流程里分散在兩個(gè)軟件、三個(gè)人手上整合之后決策效率提升非常明顯。4. AI輔助排版模塊的工程落地4.1 從BOM和網(wǎng)表到建庫(kù)約束的自動(dòng)化轉(zhuǎn)換Layout的起點(diǎn)是網(wǎng)表Netlist和封裝庫(kù)。AI排版要能跑起來(lái)首先得讓程序理解每個(gè)器件屬于哪個(gè)功能模塊、有什么特殊擺放要求。這些信息其實(shí)都能從原理圖和BOM里抽出來(lái)。我的實(shí)現(xiàn)順序是先從BOM標(biāo)準(zhǔn)表讀取每個(gè)位號(hào)的封裝類型和器件類別比如電源芯片、MCU、電阻電容、連接器再?gòu)木W(wǎng)表文件解析出網(wǎng)絡(luò)連接關(guān)系統(tǒng)計(jì)每個(gè)器件的熱度值——這里的熱度不是指溫度而是該器件連接的網(wǎng)絡(luò)數(shù)量。通常連接網(wǎng)絡(luò)最多的器件比如MCU、連接器、電源管理芯片就是布局的核心其他外圍器件圍繞核心展開(kāi)。然后配置三種約束。第一類是絕對(duì)位置約束比如板邊與連接器必須貼合外形框、晶振在MCU附近、天線區(qū)域凈空第二類是區(qū)域約束比如電源模塊整體放置在左上角、模擬器件與數(shù)字器件分域、散熱器件靠近板邊或通風(fēng)區(qū)第三類是相對(duì)位置約束比如去耦電容必須靠近對(duì)應(yīng)電源引腳、反饋電阻盡量靠近電源芯片的反饋腳這類約束從原理圖頁(yè)的連接關(guān)系可以自動(dòng)推導(dǎo)出一部分。這些約束不在AI內(nèi)部做而是結(jié)構(gòu)化成一張約束清單傳給布局引擎。AI布局和人工布局最大的區(qū)別就在于人工布局是邊看邊想AI布局是思考之后直接生成可復(fù)現(xiàn)、可審計(jì)。4.2 第一輪AI布局模塊化粗放置第一輪我傾向于讓AI做模塊級(jí)別的粗放置。具體實(shí)現(xiàn)方式不復(fù)雜把板框劃分成四象限網(wǎng)格把BOM里的功能模塊通過(guò)原理圖頁(yè)分類或器件類別聚類分配到最適合的象限。模塊與象限的匹配依據(jù)三條規(guī)則。一是連接密度統(tǒng)計(jì)模塊間網(wǎng)絡(luò)連接數(shù)量讓互連最緊密的兩個(gè)模塊盡量相鄰二是IO口方位比如電源接口在哪一側(cè)電源模塊就往那一側(cè)靠三是機(jī)械約束有高度限制的區(qū)域不擺放高器件。這些規(guī)則量化后用最小割或者貪心算法求解初始分配跑得非??旌撩爰?jí)就能出結(jié)果。粗放置的產(chǎn)物是一張模塊分布熱力圖和每個(gè)模塊的建議區(qū)域框。這個(gè)階段不需要精細(xì)坐標(biāo)目標(biāo)是讓Layout工程師一眼看出整體分區(qū)邏輯是否合理。實(shí)測(cè)中我發(fā)現(xiàn)一個(gè)值得注意的現(xiàn)象AI生成的粗放置方案在多數(shù)板卡上和工程師手動(dòng)分區(qū)的重疊度能到70%以上而時(shí)間只要手動(dòng)的幾十分之一。剩下30%的分歧往往是因?yàn)榘蹇蛐螤钐厥饣蛘哂刑厥鈾C(jī)械件干涉這些在約束配置階段會(huì)被逐步補(bǔ)進(jìn)去。粗放置結(jié)果我建議用可視化方式疊加顯示在板框圖上模塊之間畫(huà)連接權(quán)重線權(quán)重高的連線用粗線顯示。工程師一眼就能看出哪些模塊放得太遠(yuǎn)再拖拽調(diào)整。這一版AI初稿人工微調(diào)的交互節(jié)奏比一開(kāi)始就追求全自動(dòng)可靠得多。4.3 第二輪AI布局器件級(jí)精排與約束求解模塊分區(qū)完成之后進(jìn)入器件級(jí)精排。這一步的數(shù)學(xué)本質(zhì)是在約束域里優(yōu)化多目標(biāo)函數(shù)我用的是帶約束的模擬退火加局部搜索沒(méi)有上深度學(xué)習(xí)原因后面說(shuō)。優(yōu)化目標(biāo)四選三總線長(zhǎng)最短、熱點(diǎn)區(qū)域均勻度最好、關(guān)鍵網(wǎng)絡(luò)的最短路徑優(yōu)先、器件間距滿足DFM安全距離。目標(biāo)之間給權(quán)重權(quán)重由工程師通過(guò)配置界面拖動(dòng)調(diào)節(jié)。模擬退火跑幾千輪把每個(gè)器件的坐標(biāo)作為變量迭代更新。隨機(jī)擾動(dòng)有幾種單器件隨機(jī)移位、雙器件互換位置、同區(qū)域器件整體旋轉(zhuǎn)擾動(dòng)后立即檢查約束是否滿足不滿足就拒絕。實(shí)際效果怎么樣我拿一個(gè)約300個(gè)元件的小型控制板做過(guò)測(cè)試。初始隨機(jī)擺放的總線長(zhǎng)是3800毫米模擬退火優(yōu)化后降到了2100毫米接近工程師手動(dòng)擺放的1900毫米水平但是連檢查帶優(yōu)化程序只花了4分鐘和人工完整擺放一天的效率不在一個(gè)量級(jí)。更重要的是AI給出的結(jié)果天然滿足安全距離約束不會(huì)出現(xiàn)元件疊在一起需要返工的情況。第二輪輸出之后還需要跑一遍DRC。這一步千萬(wàn)不能省。自動(dòng)布局容易產(chǎn)生一些邏輯上滿足但物理上怪異的擺放比如電容把芯片絲印蓋住了、定位孔的旁邊擋了板件、天線下方放了大面積鋪銅器件。DRC檢查項(xiàng)要有元件間距、絲印重疊、禁布區(qū)入侵、高度沖突、干涉碰撞。DRC報(bào)告自動(dòng)生成之后按嚴(yán)重/警告分級(jí)嚴(yán)重項(xiàng)AI自動(dòng)回退重新布局警告項(xiàng)提交工程師快速清掃。4.4 為什么排版部分不需要砸錢(qián)上訓(xùn)練大模型這個(gè)話題值得單獨(dú)說(shuō)一說(shuō)。很多朋友一看到AI排版就覺(jué)得要訓(xùn)練一個(gè)模型收集幾萬(wàn)塊板子的布局?jǐn)?shù)據(jù)搞深度學(xué)習(xí)。我的觀點(diǎn)是對(duì)于中小團(tuán)隊(duì)完全沒(méi)有必要而且效果不一定好。原因是PCB Layout的約束具有強(qiáng)規(guī)則性機(jī)械尺寸、電氣規(guī)則、DFM規(guī)則都是明確的。這種問(wèn)題用傳統(tǒng)優(yōu)化算法就能解決得很好模擬退火、遺傳算法這些方法在幾十年前就有成熟應(yīng)用。深度學(xué)習(xí)真正擅長(zhǎng)的是沒(méi)有明確規(guī)則的場(chǎng)景比如圖像識(shí)別、自然語(yǔ)言理解。Layout不是沒(méi)有規(guī)則而是規(guī)則太多太碎需要花精力去提取和編碼。換句話說(shuō)難點(diǎn)不在模型在把經(jīng)驗(yàn)變成約束的過(guò)程。那LLM在這個(gè)過(guò)程中干什么我非常推薦把LLM用在兩個(gè)輔助環(huán)節(jié)一是解析自然語(yǔ)言的布局要求比如工程師寫(xiě)這個(gè)USB座子要靠近板邊1.5毫米LLM能把這句話轉(zhuǎn)成結(jié)構(gòu)化的一條約束記錄二是自動(dòng)生成DRC報(bào)告的通俗解釋讓非Layout專業(yè)的人也能看懂問(wèn)題。這兩個(gè)場(chǎng)景都是非結(jié)構(gòu)化到結(jié)構(gòu)化的轉(zhuǎn)換是LLM的主場(chǎng)。把重計(jì)算和重規(guī)則的部分留給算法各干各擅長(zhǎng)的整體性價(jià)比最高。5. 常見(jiàn)問(wèn)題與排查技巧實(shí)錄5.1 BOM數(shù)據(jù)歸一化階段的六個(gè)高頻坑數(shù)據(jù)這塊踩過(guò)的坑我一條條數(shù)過(guò)差不多能把人坑麻。這里挑六個(gè)最典型的分享。第一個(gè)坑是單位符號(hào)大小寫(xiě)。uF和UF還能識(shí)別nF寫(xiě)成NF也能猜但電阻里K是千歐、電容里K是誤差等級(jí)正負(fù)10%這兩者如果不區(qū)分器件類別直接替換結(jié)果會(huì)亂。所以單位解析必須帶上器件類型上下文。第二個(gè)坑是英制公制封裝混寫(xiě)。0402是英制1005是公制實(shí)際是同一種封裝。數(shù)據(jù)清洗階段必須建一張英制公制封裝對(duì)照表并把所有封裝統(tǒng)一為一種標(biāo)識(shí)體系否則后面一切比對(duì)都是錯(cuò)的。第三個(gè)坑是位號(hào)格式不一致。同一塊板子上有人寫(xiě)U1、U2有人寫(xiě)U 1、U 2還有寫(xiě)成IC1的。我遇到過(guò)最離譜的是把R12寫(xiě)成了R1,2這種屬于錄入錯(cuò)誤但不能讓程序崩潰得用校驗(yàn)規(guī)則指出來(lái)。第四個(gè)坑是數(shù)量列含義混亂。有些BOM的數(shù)量是總用量有些是單板用量還有一些是連備品一起算的采購(gòu)量。歸一化時(shí)必須以單板用量為基準(zhǔn)采購(gòu)量差異單獨(dú)存一列不能混著算。第五個(gè)坑是規(guī)格描述里混合了非規(guī)格信息。比如100nF/50V/X7R/0402/勝美達(dá)和100nF/50V/X7R/0402/ROHS看起來(lái)很像實(shí)際是同一物料。這類尾部品牌或環(huán)保標(biāo)識(shí)不適合進(jìn)入匹配文本要提前用規(guī)則剝離。第六個(gè)坑是小數(shù)點(diǎn)精度。0.1uF和0.10uF在工程上完全一致但字符串比對(duì)不相等反過(guò)來(lái)10000pF等于10nF也等于0.01uF。解決方法是統(tǒng)一換算成基礎(chǔ)單位電容統(tǒng)一到nF電阻統(tǒng)一到Ω而不是保留原始字符串。5.2 Layout自動(dòng)布局失效的三種典型情況自動(dòng)布局跑了半天輸出結(jié)果工程師一看哭笑不得這種情況我第一次做的時(shí)候也遇到過(guò)總結(jié)下來(lái)是三類原因。第一類是約束遺漏。板框內(nèi)其實(shí)有一個(gè)金屬屏蔽罩區(qū)域是不能放器件的但約束配置的時(shí)候只留下了文字描述沒(méi)有畫(huà)成禁布區(qū)域結(jié)果AI把電感塞了進(jìn)去。這類問(wèn)題的排查方式是把AI布局結(jié)果與機(jī)械結(jié)構(gòu)DWG疊加做碰撞檢查不能只看平面距離。第二類是網(wǎng)表信息不完整。原理圖里某些網(wǎng)絡(luò)名在導(dǎo)入時(shí)被EDA軟件自動(dòng)改名比如VCC_3V3變成N-000001導(dǎo)致AI無(wú)法識(shí)別電源網(wǎng)絡(luò)電源器件布局缺乏指導(dǎo)。排查網(wǎng)絡(luò)名映射表確認(rèn)電源符號(hào)和網(wǎng)絡(luò)名是顯式命名的。第三類是權(quán)重設(shè)置失衡。如果總線長(zhǎng)權(quán)重太高所有器件會(huì)往板中心擠造成板邊器件稀疏、中心爆滿。模擬退火本身沒(méi)問(wèn)題問(wèn)題是多目標(biāo)優(yōu)化里的權(quán)重需要根據(jù)板型調(diào)整不能一套權(quán)重打天下。建議針對(duì)接口板電源板混合信號(hào)板分別保存三套配置入廠即切換。5.3 排查工具與日志設(shè)計(jì)無(wú)論是BOM還是LayoutAI模塊都要做可追查性。我給每個(gè)工具模塊都加了兩層日志第一層是操作日志記錄每次歸一化、匹配、布局的參數(shù)和耗時(shí)第二層是決策日志記錄每條BOM合并、每個(gè)器件坐標(biāo)變化的關(guān)鍵依據(jù)。決策日志的核心字段是輸入數(shù)據(jù)切片、算法名稱、關(guān)鍵閾值、輸出結(jié)果、置信度。當(dāng)工程師對(duì)結(jié)果提出疑問(wèn)時(shí)直接查決策日志就能還原當(dāng)時(shí)AI是依據(jù)什么做的判斷。這樣工具用起來(lái)不容易被背鍋也方便不斷調(diào)優(yōu)算法參數(shù)。實(shí)際開(kāi)發(fā)中很多團(tuán)隊(duì)忽略決策日志導(dǎo)致調(diào)參全靠猜數(shù)據(jù)量一大根本沒(méi)法復(fù)盤(pán)這是很吃虧的。6. 直接可以帶走的最小實(shí)現(xiàn)框架6.1 模塊劃分和文件結(jié)構(gòu)如果要從零搭一個(gè)最小框架我建議按四個(gè)模塊劃分?jǐn)?shù)據(jù)導(dǎo)入模塊、BOM語(yǔ)義處理模塊、布局約束生成模塊、布局優(yōu)化模塊。模塊之間通過(guò)標(biāo)準(zhǔn)JSON格式的中間文件通信不要共享內(nèi)存狀態(tài)這樣每個(gè)模塊都能單獨(dú)測(cè)試和替換。文件結(jié)構(gòu)可以這樣組織ai_bom_layout/ ├── data/ # 原始數(shù)據(jù)與中間數(shù)據(jù) │ ├── raw_bom/ # 原始BOM文件xlsx/csv │ ├── normalized/ # 歸一化后的標(biāo)準(zhǔn)BOM │ └── netlists/ # 網(wǎng)表文件 ├── src/ │ ├── bom_parser.py # BOM解析與歸一化 │ ├── material_matcher.py # 物料語(yǔ)義匹配 │ ├── substitute.py # 替代料識(shí)別 │ ├── constraint_gen.py # 布局約束生成 │ ├── placement_engine.py # 布局優(yōu)化引擎 │ └── drc_checker.py # DRC檢查 ├── config/ │ ├── field_map.yaml # 列名映射配置 │ ├── unit_rules.yaml # 單位換算規(guī)則 │ └── placement_weights.yaml # 布局權(quán)重配置 ├── output/ │ ├── bom_report.xlsx # BOM處理結(jié)果 │ └── placement_preview.kicad_pcb └── run_pipeline.py # 主流程這個(gè)結(jié)構(gòu)不復(fù)雜每個(gè)文件的職責(zé)都很清晰。即使以后某個(gè)模塊要替換成商業(yè)API也只改對(duì)應(yīng)文件的內(nèi)部實(shí)現(xiàn)接口不用動(dòng)。6.2 主流程每一步的輸出物我把主流程拆成七個(gè)步驟每一步都有明確的輸出物方便在任何一個(gè)節(jié)點(diǎn)停下來(lái)人工檢查。第一步導(dǎo)入原始BOM輸出原始數(shù)據(jù)檢查報(bào)告。第二步歸一化輸出標(biāo)準(zhǔn)BOM表和清洗日志。第三步語(yǔ)義匹配輸出物料分組表和置信度分布圖。第四步替代識(shí)別輸出替代料矩陣表。第五步網(wǎng)表和BOM融合輸出布局前檢查清單。第六步約束生成輸出JSON約束文件。第七步布局優(yōu)化輸出坐標(biāo)文件和DRC報(bào)告。每?jī)蓚€(gè)步驟之間允許人工確認(rèn)回退這是一條非常重要的設(shè)計(jì)原則。自動(dòng)流水線對(duì)工程師最大的價(jià)值不是替代而是把需要判斷的點(diǎn)位集中呈現(xiàn)。6.3 跑通一個(gè)最小Demo的參考路徑拿一塊簡(jiǎn)單的板子做驗(yàn)證比如四層板、200個(gè)元件左右的小系統(tǒng)板。準(zhǔn)備一個(gè)真實(shí)BOM文件和一個(gè)網(wǎng)表文件然后按路徑跑先跑BOM解析把原始表轉(zhuǎn)成標(biāo)準(zhǔn)表之后人工核對(duì)20行確認(rèn)解析準(zhǔn)確率不低于95%。接著跑物料語(yǔ)義匹配觀察相似度得分的分布超過(guò)0.95的歸并0.85到0.95的進(jìn)人工確認(rèn)清單。然后跑替代識(shí)別把輸出結(jié)果和采購(gòu)庫(kù)存表關(guān)聯(lián)看看缺料覆蓋了多少。之后把標(biāo)準(zhǔn)BOM和網(wǎng)表輸入約束生成模塊先看約束條數(shù)是否覆蓋三個(gè)關(guān)鍵維度區(qū)域約束、相對(duì)位置約束、安全距離約束。最后跑布局引擎輸出坐標(biāo)后在EDA工具里打開(kāi)手工檢查是否有明顯干涉和拼板方向錯(cuò)誤。跑通這條路徑之后你對(duì)整個(gè)系統(tǒng)的能力邊界會(huì)有直觀認(rèn)識(shí)。后面再往多板項(xiàng)目、復(fù)雜機(jī)械件場(chǎng)景擴(kuò)展時(shí)基本就是加規(guī)則和加配置的問(wèn)題。7. 一些個(gè)人實(shí)測(cè)經(jīng)驗(yàn)與偏好最后說(shuō)幾條實(shí)際項(xiàng)目里的體感。BOM歸一化是整個(gè)方案的成敗所在。AI再?gòu)?qiáng)喂進(jìn)去的數(shù)據(jù)是臟的出來(lái)的結(jié)果只能是精致的錯(cuò)誤。所以我在團(tuán)隊(duì)里反復(fù)強(qiáng)調(diào)一句話先定義標(biāo)準(zhǔn)字段和標(biāo)準(zhǔn)值域再談AI。數(shù)據(jù)標(biāo)準(zhǔn)化做到八成以上后面所有的匹配、替代、比對(duì)、布局都能順暢如果這一步粗糙所有下游模塊都在收拾爛攤子。Layout方面我對(duì)全自動(dòng)的期待不高但對(duì)AI給初稿的接受度很高。實(shí)踐證明把AI模塊定位成一個(gè)快速且守規(guī)矩的初級(jí)工程師比定位成頂級(jí)Layout專家要健康得多。它能在十分鐘內(nèi)給出一個(gè)滿足所有硬約束的初版然后你在這個(gè)基礎(chǔ)上調(diào)教兩輪整體效率遠(yuǎn)遠(yuǎn)高于從空白板框開(kāi)始拖拽。替代料識(shí)別這塊我不太建議完全放開(kāi)讓AI自動(dòng)下采購(gòu)單。最穩(wěn)的姿勢(shì)是AI把候選方案按可靠等級(jí)排列采購(gòu)對(duì)高等級(jí)方案批量確認(rèn)對(duì)中低等級(jí)方案逐條人工審核。這個(gè)流程既覆蓋了絕大多數(shù)缺料場(chǎng)景又保留了最后一道人類責(zé)任環(huán)節(jié)。我在實(shí)際使用中還發(fā)現(xiàn)一個(gè)容易被忽略的點(diǎn)AI工具要和現(xiàn)有EDA流程深度綁定。如果生成的BOM報(bào)告和布局坐標(biāo)文件不能被現(xiàn)有流程直接讀取工程師就要在工具間來(lái)回倒數(shù)據(jù)那效率提升會(huì)被傳輸損耗吃掉大半。所以我在集成時(shí)優(yōu)先做接口打通而不是讓工具獨(dú)立運(yùn)行這一點(diǎn)對(duì)任何想引入AI工具的硬件團(tuán)隊(duì)都值得參考。