把迴路閉起來:一個會自己 24/7 收斂的 FPGA 驗證閉環

自動化一條 IC 流程,重點不是把步驟依序點火,而是那些會量測真實結果、再決定要不要重跑的迴路。這篇我用一個具體例子貫穿:一個會燒錄真實開發板、用相機讀 LED、並自己重跑到收斂的 FPGA 驗證閉環——過程中沒有人守在迴路裡。

為什麼閉環才是核心

大多數人想像「自動化一條 IC 流程」時,腦中浮現的是一條產線:先跑步驟一,再跑步驟二,再跑步驟三,跑完就好了。這個畫面在一個關鍵的地方是錯的。自動化這條流程,重點不是把步驟依序點火,而是閉環。一個真正的迴路有四個動作:對設計做轉換、量測實際的結果、判斷夠不夠好、然後調整——接著重複,直到收斂為止。

這裡最吃重的字是量測。如果沒有把一個真實的量測值回饋進來,你手上的東西就是「開環」:一條會一路跑到底、看起來很自動,卻從來沒去確認它產出的東西到底對不對的序列。閉環正好相反。它意味著由一台機器去讀真實的結果——不是預測的、不是假設的——然後就憑那個讀數,決定要不要再繞一圈。這篇後面談的每一件事,都是這一個念頭的實例。

一個具體的閉環:FPGA 驗證

讓我把它講得實體一點,因為這套抽象只有在你能指著硬體說話時,才真正取得信任。這裡是一個迴路,從頭到尾走一遍。

Vibe-IC 產出一個 SOF——也就是 FPGA 的燒錄檔。這個 SOF 會透過 JTAG、在 Linux 上被燒錄到一塊真實的 FPGA 開發板上,是一片 Intel MAX 10 DE10-Lite。設計此刻是跑在真實的矽晶片上,而不是在模擬器裡。接著,一台相機讀取板上的 LED,判斷硬體正在做的事情,是否和預期相符。相符,這一圈就結束了。不符,迴路就再跑一次:調整、重新燒錄 SOF、再看一次 LED。這就是一個完整的 FPGA 驗證閉環,跑在實體硬體上——被量測的結果,是一片真實開發板上、一個真實裝置的行為,由一台對著真實光線的相機讀回來。

檯面上有哪些裝置,以及關於儀器的一個細節

這張測試檯上接了三類裝置:一片 FPGA、一台 scope(示波器)或 logic analyzer(邏輯分析儀),還有一台相機。它們之間有一個很容易搞錯的重要區分。

示波器和邏輯分析儀本身就已經透過自己的埠口直接和 Linux 對話——像是走 USB 的 SCPI 之類。所以它們的波形與擷取到的資料,回來時就是可以直接分析的數字。你不會拿一台相機去對著儀器的螢幕、想辦法讀畫面上的像素;那等於是把儀器早已遞到你手上的乾淨數位讀數丟掉。相機值得存在,就只為了一件事:FPGA 那些實體的 LED,它們根本沒有任何數位讀數。沒有東西可以透過埠口去查詢——想知道那幾顆 LED 正在顯示什麼,唯一的辦法就是去看它。所以規則很簡單:儀器,直接在 Linux 上讀;FPGA 的 LED,用相機讀。

AI 究竟怎麼驅動它

把這張測試檯變成一個 agent 能跑的迴路的,是 MCP 這一層。檯面上的每一個裝置,背後都對應一個 MCP 工具——Vibe-IC 的 eda-tools MCP。把一個 SOF 燒到 FPGA 上:一個工具。擷取示波器:一個工具。把相機讀到的 LED 狀態和預期值做 diff:一個工具。檯面上每一個實體動作,都是一個可呼叫的函式。

一旦每個裝置都能這樣被定址,AI agent 就能使用每一個裝置、取得它需要的資料,並且自己把 SOF 燒進去——中間不需要一個人去插拔線材、或在圖形介面上一路點下去。而這正是把整條迴路閉起來的關鍵。過去有一位 IC 驗證工程師必須坐在這個迴路裡——燒板、盯 LED、決定要不要再試一次——如今由 agent 來跑,全天候、無人看管。要誠實地描述這裡得到的好處,關鍵不是一個速度數字;而是閉環把「人的來回」從迴路中間拿掉了,於是這個迴路可以無人看管地一直跑、持續收斂,而不必每次都卡在等一個人。

這只是其中一個迴路——IC 設計是一層層的迴路

FPGA 驗證是一個迴路。它之所以重要,是因為閉環收斂是整條流程裡最常見、也最重要的過程之一——這條流程是一層層疊起來的迴路。它們分成兩種。

第一種是單步迴路:在單一一個定義好的步驟之內做局部收斂。每一個步驟就是一次轉換,加上一道必須通過的檢查關卡,這個步驟會對自己反覆繞圈,直到它自己那道關卡變綠。第二種是跨步迴路:一個更大的迴路,橫跨好幾個步驟,去收斂那個更大的結果——那是一個要等一整段流程都彼此一致、而不只是單一關卡通過,才會閉合的外層迴路。到頭來,要把整條流程建起來,意思就是讓上面每一個迴路都可被閉合——先由一支決定性(deterministic)的程式去閉合,再對程式無法自己判斷的那些段落,用 AI 補位。這正是 Vibe-IC 在流程其他地方一貫採用的那套 program-first、AI-backup、雙軌收斂;上面那個 FPGA 迴路,只是你能在真實硬體上親眼看它發生的其中一處。

誠實地作結

這些迴路,正是「AI-native」不再只是一句口號、而變成一件具體東西的地方:一台會讀真實結果、並自己決定要再跑一次的機器。這就是全部了——不是一個關於速度的宣稱,只是一個關於「把做一件事、和確認這件事有沒有成功」之間那道縫隙補起來的宣稱。哪些地方才是真正的難處,我也可能看錯,而還有很多迴路等著被閉起來。但這是我一再回到的形狀,而我寧可讓你看一個真的跑在開發板上的迴路,也不想抽象地描述十個。

閉環講到這裡。下一篇,我想從硬體上把視線移開,聊一件更貼身的選擇:在這整條流程裡,到底該讓哪一個大語言模型來當駕駛——以及,為什麼我最後押的是 Claude。


延伸閱讀:這些迴路所在的整條流程,在流程頁;動手操作的細節,在使用手冊