본문으로 건너뛰기Skip to content 1:1 문의 — [email protected]로 이메일 작성 Contact us — email [email protected]

AI 修好的 HLS,「PASS」到底保證了什麼

可執行的測試是自動修復的起點。必須區分測試輸入、結果判定與合成後驗證,才不會把原始碼的成功,誤讀成硬體的成功。

AI 修好的 HLS,「PASS」到底保證了什麼
Historical Altera Cyclone EP1C3 FPGA die, published in 2013. Reference photograph for the physical implementation stage, not hardware evaluated in the repair study. Photo: ZeptoBars, CC BY 3.0. Unmodified. Original photo · License
🆓 免費文章 · 任何人都可以免費閱讀

HLS 程式碼修復工具顯示了綠色的 PASS。可以相信這個結果,把加速器設計送往下一個階段嗎?答案取決於產生這個標示的檢查是什麼。它可能只是編譯器接受了程式碼,也可能是在準備好的輸入下,輸出與基準值相同。要說它驗證了合成後的電路,則需要另外的依據。工程師應該收到的成果,是成功標示,以及說明該標示涵蓋範圍的紀錄。

C-level checking, RTL simulation and physical implementation answer different questions.
Figure 1. A passing result is scoped to its stage. Original VLSI Korea synthesis; the stages are not interchangeable.

最近登上公開清單的 University of New Hampshire 研究團隊的 HLS 自動修復研究,讓這個問題再次被提出。研究團隊以可執行的判定器,評估了 125 個錯誤案例。評估對象是 C 層級的功能修復,合成後的正確性不在範圍內。以這個區分為出發點,來看看實務團隊還需要補上哪些證據。以下的計算與驗證範例,並非重現論文數值,而是 VLSI Korea 製作的說明用案例。研究原文

Study scope Beyond the reported experiment
Executable C-level repair checks Generated-RTL correctness and physical implementation

原始檔案的正解與晶片的動作之間

高階合成,也就是 High-Level Synthesis,是把以 C 或 C++ 程式碼表現的演算法,轉換為硬體結構的設計方式。由於必須決定把同一個計算配置到哪個運算器、以及何時執行,因此要同時處理軟體執行結果與電路實現的條件。這裡必須先確定,修復工具修的是演算法、合成指示,還是介面。如果對不同對象套用相同的成功標準,即使正解相同,也可能接受了失去所需效能的修復。

本文的實體照片是 Altera 早期的 FPGA——Cyclone EP1C3 的晶粒。中央的邏輯陣列與周邊電路,具體顯示了程式碼最終必須使用物理資源這個事實。這是 2013 年公開的歷史參考照片,並不表示它是這次研究的測試晶片,或目前工具的支援對象。FPGA 以位元流設定可配置的邏輯、配線、記憶體與輸入輸出資源。因此,僅憑在 C 檔案中計算正確的證據,無法說明配置到這些資源上的設計的介面與時序。照片原圖、Altera 的 FPGA 說明

Evidence Question answered Still open
Compilation Is this source accepted? Functional correctness
C test Do observed outputs match? Untested inputs, RTL behavior
RTL co-simulation Does generated RTL pass these tests? Physical timing, system behavior
Implementation and board test Does this configured system meet its checks? Untested operating conditions

先用文字固定功能需求,檢查範圍就會變得清晰。例如「把輸入陣列的有效元素相加」這句話裡,並沒有包含有效長度是否可以為空、符號與表現範圍是什麼、輸出溢位時如何處理。從實現程式碼反推這些空白,很容易把錯誤的實現當成規格接受。應該把修復前後必須相同的動作,與可以改變的實現選擇分開,並讓判定器獨立確認那些需求。

讀 PASS 時,首先要確認的不是成功率,而是輸入了什麼、又與什麼比較。(VLSI Korea 編輯詮釋)

測試也必須先懂得失敗

自動修復的判定器,也就是 oracle,是把執行結果與正解比較的裝置。複製原始碼的執行結果,與驗證需求並不相同。如果原始碼本身就有錯誤,被複製的基準也可能是錯的。反過來說,如果故意把正確的程式碼弄壞,檢查結果卻一直成功,那麼這項檢查至少無法發現該缺陷。團隊在比較修復模型之前,可以先確認判定器是否能區分正常實現與故意弄壞的實現。

The reference must pass and a known faulty implementation must fail before evaluating repair.
Figure 2. Sanity-check the checker before scoring a repair. An undetected injected defect exposes a gap in this test, not a successful repair.

CHStone 是從多種應用中選出的、以 C 為基礎的高階合成基準。其論文摘要說明了它用於定量評估設計工具與想法的目的。若要用這類公開計算核心來做修復評估,必須另外檢視其原始評估目的,與現在需要的錯誤偵測範圍是否一致。對比較設計效能有用的輸入,並不保證能揭露所有功能缺陷。CHStone 論文摘要

來想一個小型累加器。輸入是整數陣列,輸出是有效元素的總和。為了簡化說明,假定長度為空的輸入總和為 0,且以下輸入沒有算術溢位。正常實現會把所有有效元素相加,缺陷實現則漏掉最後一個元素。當輸入為 [1, 2, 3] 時,正常輸出是 6,缺陷輸出是 3。這項檢查能區分該漏加錯誤。但僅憑這一點,不能判定任意修復是否正確。

Checker sanity test Expected result Interpretation
Trusted sum on [1, 2, 3] 6, pass Positive control works
Omit last element 3, fail This defect is observable
Always return 6 6, pass A false repair can still pass

最後一列是關鍵。永遠回傳 6 的修復能通過單一輸入,卻沒有實現陣列求和。「錯誤能被看見」這個條件,與「錯誤的修復不能通過」這個條件,強度不同。因此,即使注入缺陷的檢查曾經失敗過一次,也不能把這項測試當成完整規格。必須留下在哪個輸入、用什麼差異揭露出來,下一個階段才能找到遺漏的動作。

增加輸入時,要放入能區分正解的差異

比起測試的數量,能區分候選實現的輸入更重要。給累加器加上 [2, 2, 2],總和又是 6,無法篩掉前面錯誤的常數回傳實現。改放 [1, 2, 4],期望值是 7,就能立刻區分。空輸入與只有一個元素的輸入,則能揭露迴圈的開始與結束條件。比起隨機改變輸入中的數字,應該要能說明長度、邊界與數值分布,會揭露哪一種失敗。

A constant-return repair passes the seed input but fails discriminating inputs.
Figure 3. Executed toy example: the constant-return patch passes the seed case but fails the boundary and changed-sum cases. These are not benchmark measurements.

驗證用輸入最好也與修復器參考的輸入區分開來。如果一邊反覆給它看相同的測試一邊修復,工具可能會朝滿足眼前檢查的方向移動,而不是實現它應該實現的動作。審查者可以另外執行保留的輸入,加入失敗案例時,記錄該輸入驗證的是哪條規則。保留的輸入也是有限的,無法證明完整性,但能擴大發現只針對眼前範例調整的修復的機會。

Input class Example here Intended distinction
Seed [1, 2, 3] → 6 Known missing-element bug
Same total [2, 2, 2] → 6 Does not reject constant output
Changed total [1, 2, 4] → 7 Rejects constant output
Boundary [] → 0; [9] → 9 Empty and single-element handling

MachSuite 的官方儲存庫 README 中有警告,指出驗證方法的可攜性問題,以及最終輸出檢查未被執行。這個警告不能擴大解釋為所有後續研究的檢查都失敗,因為研究者可能另外建構了判定器。實務上得到的教訓是:不要只憑儲存庫名稱就假設其驗證能力。必須確認使用的版本與 harness、失敗回傳值、實際比較路徑。即使結束代碼是成功,如果比較函數從未被呼叫,就沒有依據把功能檢查記為成功。MachSuite 官方儲存庫

📩 在持續關注這個主題嗎?

財報·報告·HBM供需的後續分析,每天10:30(KST)寄到您的信箱。 免費訂閱 →

即使反覆給出相同答案,正確性仍是另一回事

如果修復結果每次都不同,就值得調查原因。可能是說明不足、無法縮小失敗位置,或是生成過程本身具有多樣性。但是,文字有多種形態這個事實,與功能有多種形態這個事實並不相同。把前面的求和分別用 for 迴圈與 while 迴圈實現,即使程式字串不同,在定義的輸入下也能做相同的計算。反過來說,每次都穩定回傳常數 6 的模型,就是穩定地交出同一個錯誤答案。

Patch diversity and functional correctness are separate axes.
Figure 4. Textual diversity and correctness are different dimensions. This conceptual matrix proposes diagnostic questions; it is not a model ranking.

因此,修復的多樣性適合用作選擇下一個檢查的線索。找出不同的候選在哪個輸入下分歧,就能強化判定器。如果所有候選都在同一個邊界案例失敗,就先檢查規格或輸入範圍。如果只有一個候選編譯失敗,就先把語法與資料型別問題分開。這類診斷不會斷定模型的整體能力,而是提供在目前設計中減少失敗所需的資訊。

Repeated outcome Next question
Same patch, tests fail Is the model repeating one wrong assumption?
Different patches, same tested outputs Which new input distinguishes their behavior?
Different patches, different failures Is the defect localized and the contract explicit?
Tests pass consistently What remains outside these tests?

修復工具的比較表也要以同樣的原則來讀。嘗試次數與檢查輸入改變時,成功率的意義也會改變。一次命中的比例,與多個候選中至少有一個命中的比例,並不表示選擇成本相同。在生成更多候選的期間,檢查可能變慢,或合成等待可能變長。模型選擇除了要有正確候選存在之外,還需要識別該候選所需的時間,以及它在後續階段被淘汰的原因。

把在 C 通過的修復,移到 RTL 與時間軸上

AMD 的 Vitis HLS 文件說明了在 C/RTL co-simulation 中,以 C 測試平台產生輸入、模擬生成的 RTL,再以測試平台檢查該輸出的流程。測試平台必須自行判定結果。這個程序把檢查範圍擴展到合成後的電路,但如果檢查的輸入與比較條件不完善,那些限制也會一起跟著過去。AMD UG1399

在實務上,必須把功能比較與時間條件一起寫下來。例如,即使結果相同,如果接受新輸入的間隔變長,就可能無法滿足串流處理的吞吐需求。Latency 是一個工作從開始到完成所需的時間,Initiation Interval 則是可以開始連續工作的間隔。以下是一個 latency 為 12 cycles、interval 為 3 cycles 的理想範例。4 個工作的開始時間是 0、3、6、9,完成時間是 12、15、18、21。到最後一個完成為止是 21 cycles。

Four idealized overlapping transactions finish at cycle 21 with latency 12 and interval 3.
Figure 5. Illustrative schedule with no stalls: latency = 12 cycles, initiation interval = 3 cycles. Clock frequency and board performance are not specified.

即使 latency 相同,如果工作不重疊執行,就需要總共 48 cycles。這不是實際產品的速度量測,而是固定條件的時間表計算。如果修復器在保留運算結果的同時,改變了資源共享或記憶體存取方式,這類重疊條件也可能改變。因此,除了輸出值檢查之外,還必須確認在允許的輸入速度下是否真的能接收工作,以及結果是否在需要的時間點到達。

Acceptance layer Record with the patch
Source behavior Input domain, reference result, compiler configuration
Generated RTL Tool version, interfaces, testbench, observed outputs
Timing and resources Clock target, latency, initiation interval, resource limits
System operation Reset behavior, stalls, backpressure, allowed operating conditions

當外部介面給出停頓訊號時、當重置在運作中進入時、當長度變化的輸入連續進入時,也都需要契約。這並不是說要給所有設計都加上相同的檢查,而是以該產品合法的運作條件為基準,挑出遺漏的案例。合成報告的目標頻率與實際實現的時序結果也必須區分。把功能與時間條件分開記錄,就能清楚說明修好功能的修補,破壞了吞吐量需求的情況。

要把原始碼的正解轉移到硬體的正解,不只要移轉輸出值,也要一起移轉產生該輸出的條件。(VLSI Korea 編輯詮釋)

韓國設計團隊應該留下的,是成功率的分母

如果韓國的無晶圓廠或 FPGA 加速器團隊要導入自動修復工具,可以在公開核心分數與自家 IP 的適用條件之間,設置一個小型內部評估。這並不是說要把機密設計資料送到外部服務。從核准的環境,以及公開或已取得使用許可的範例開始,確認缺陷種類與輸入條件在多大程度上代表實際工作。把結果分成編譯失敗、功能失敗、合成後失敗、效能條件未滿足,就更容易找到要改善的地方。

A hypothetical candidate funnel keeps all attempted candidates in the denominator.
Figure 6. Hypothetical accounting example: retain every attempted candidate in the denominator and report why candidates leave the flow. Counts are illustrative.

例如,10 個候選中,有 2 個在編譯時被淘汰、3 個在 C 檢查、2 個在 RTL 檢查、1 個在時序與資源條件下被淘汰,最終候選就是 2 個。如果只把到達 C 檢查的候選放進分母,就很難知道整體工作的良率。反過來說,如果把所有失敗都歸成一個「AI 答錯」,就無法區分工具設定問題與功能錯誤。必須追蹤相同的起始集合,並記錄每個階段的原因,導入前後的比較才有可能。

Decision record Why it matters
All attempted candidates Preserves the denominator
Failure stage and reason Separates configuration from functional defects
Human review and tool time Exposes the cost of finding an acceptable patch
Rejected and held-out cases Prevents easy cases from silently defining the score

未來 6~12 個月要看的變化,比起更高的單一分數,更重要的是驗證範圍的連結。公開評估是否提供所用的輸入與判定器版本、是否連接到生成的 RTL 檢查、是否記錄到吞吐量與資源條件,這些都很重要。這個提案是否真的有用,可以在內部試驗中反證。如果強化後的檢查幾乎找不到額外缺陷,只大幅增加了審查時間,就必須重新設計輸入的挑選與檢查順序。在隱藏所有階段成本的情況下只增加檢查數量,並不是目標。

自動修復的價值,應該在於它能更快產生人類可以審查的候選,這一點必須被確認。而把該候選接受為產品設計的依據,則是把需求、輸入、判定器、合成電路與實現條件連結起來的紀錄。當 PASS 旁邊有這份紀錄時,團隊就能判斷已經確認了什麼、還要在下一個階段確認什麼。能讓這種判斷成為可能的自動化,才會留在實際設計工作中。

Sources and evidence scope

  • HLS repair study, arXiv v1:2026-10-02 提交,於 2026-10-06 的公開清單中確認。正文明示已被 ICCD 2026 接受。接受是作者的標示,並未另外確認會議發表或正式刊登。已閱讀全文,實驗並未重現。由於摘要與表格的數值與分布表述不一致,因此未使用各模型的成功率比較。
  • CHStone:確認 2009 年論文摘要與詮釋資料。MachSuite:確認官方 README。兩者是不同的研究資產,與本文執行的累加器範例無關。
  • AMD UG1399:2026.1 文件中的 C/RTL 驗證程序。Altera:關於 FPGA 配置方式的企業說明。
  • ZeptoBars photo、rights:實際 Cyclone EP1C3 晶粒照片。原圖未經修改。本文中的圖表與判斷基準,以及累加器與時間表範例,均由 VLSI Korea 製作,並非量測到的產品效能。

本稿使用了 AI 的調查與寫作支援。說明用計算與範例已另外確認,並未以重現模型效能或實際硬體實驗的文章形式呈現。

Disclosure

本文僅供資訊參考,不構成任何證券買賣之建議。本文事實係根據所引用的公開論文、技術文件與基準資料,說明用範例與計算由 VLSI Korea 撰寫。來源資料或撰寫過程中可能發生錯誤。作者可能持有本文提及企業之股票。所有投資決策及其結果,均由讀者自行負責。

📩 今天錯過的分析,明天早上寄到您的信箱

每天10:30(KST)Daily Silicon與財報·機構報告核心解讀搶先送達。訂閱後可選擇韓語/英語/日語新聞通訊,中文深度分析每日在網站更新。

免費訂閱 →

免費 · 無垃圾郵件 · 隨時退訂

Discussion

VLSI KOREA BRIEFING

반도체를 읽는 안목, 메일함으로.

엔지니어의 시각과 산업의 흐름을 함께. 무료로 구독하세요.

이미 구독 중인가요? 로그인