從零開始打造科學計算機:一段 FPGA 之旅

在智慧型手機無處不在的時代,製作一台科學計算機通常被視為一個已解決的問題。然而,對於硬體愛好者來說,這代表著一場全棧工程的實戰大師課——涵蓋了數值分析、電腦架構、數位邏輯以及實體 PCB 設計。

受到復古 HP-41CV 的觸感滿足感啟發,zdw 所詳細描述的這個專案是對如何使用 FPGA 從頭開始構建一個 16 位數 BCD (Binary-Coded Decimal) 計算機的全面探索。這個專案並非依賴通用微控制器,而是實現了一個自定義的 CPU 以及專門為十進位算術量身打造的指令集。

基礎:數值方法與路徑探索

在編寫任何一行硬體描述語言 (HDL) 之前,任何嚴肅的工程專案都需要一個「路徑探索」階段。這是一個透過原型製作、失敗與發現可能性的邊界來進行迭代的過程。在這個專案中,主要的挑戰在於確保像 tanlnexpsqrt 這樣的複雜函數,僅能透過基本的加法、減法和乘法來計算。

為了達到 16 位數的精度,作者開發了一個經過驗證的 C++ 參考實現。這作為了「地面真值」(ground truth),作為硬體最終測試的基準。這個階段至關重要,因為除錯硬體比除錯軟體要困難好幾個數量級;擁有一個數學上的黃金標準可以防止開發者在結果稍微偏離時,於邏輯中盲目搜尋錯誤。

開發框架

FPGA 開發中最顯著的障礙之一是回饋迴路。為了克服這個問題,開發者建立了一個多環境測試框架,可以在四個不同的平台上運行未經修改的單一 Verilog 源碼:

  • ModelSim: 用於信號級模擬以驗證基本邏輯。
  • Verilator: 用於週期精確 (cycle-accurate) 的 C++ 建模。
  • Qt: 一個桌面原型,具有用於高階互動的除錯控制台。
  • WebAssembly: 允許應用程式在瀏覽器中運行,以便於分享與存取。

透過利用這些免費工具,開發者可以在訂購第一個實體電路板之前,就在模擬環境中驗證邏輯,從而大幅降低了昂貴的硬體修改風險。

設計專用 CPU

大多數現代 CPU 是為二進位浮點運算設計的,這往往會引入在高精度十進位計算機中無法接受的捨入誤差。為了避免這種情況,作者設計了一個具有獨特架構的自定義 CPU:

  • Nibble-Addressable Memory: 由於 BCD 代表每個十進位數字為一個 4-bit nibble,因此記憶體被設計為以 nibble 為單位進行定址,而非以 byte 為單位。
  • Custom ISA: 建立了一個 12-bit 固定長度的指令集,包含 14 種 ALU 操作。這包括了 BCD-adjust 指令(受 Intel 8086 啟發)以處理十進位算術中固有的進位與借位。
  • Harvard Architecture: CPU 利用獨立的指令與數據存儲與信號路徑,優化了計算過程中的資訊流。

從微碼到實體硬體

在定義了 CPU 架構之後,接下來的步驟是編寫微碼 (microcode)——即告訴硬體如何執行 ISA 的低階指令。由於 CPU 是自定義發明,作者必須使用 Python 編寫一個兩趟式組譯器 (two-pass assembler) 來將邏輯轉換為機器碼。

為了管理複雜度,在微碼之上建立了一個腳本解釋器。這使得複雜的操作(例如 $y^x$)可以被壓縮成幾行 token,而不是數百行原始組合語言。

向實體硬體的過渡是分階段進行的。它始於一個透過排線連接到自定義按鍵盤與 OLED 顯示器的 EP2C5 開發板。最終迭代演進成了一台專業的、獨立運作的設備,具有以下特點:

  • 一個直接焊接 FPGA 的自定義 PCB。
  • 一個 3D 列印的外殼。
  • 遵循經典 HP 黃色與紅色慣例的配色按鍵帽。
  • 雙重編程連接器(用於迭代的 JTAG 與用於持久化 Flash 的 Active Serial)。

追逐最後一位數:2025 年的改進

專案的初始版本達到了大約 12 位數的精度,但真正的 16 位數 BCD 機器需要絕對的精度。2025 年對算術引擎的重寫引入了幾個關鍵改進:

  • Guard Digits and Sticky Bits: 實施了適當的追蹤機制,以防止捨入誤差累積。
  • Banker's Rounding: 一種在數學上更中立的捨入方法,以減少大型數據集中的偏差。
  • Enhanced Feature Set: 增加了完整的三角函數套件、十個 STO/RCL 記憶體暫存器,以及一個基於硬體的 LFSR (Linear Feedback Shift Register) 隨機數生成器。

結論

最終的結果是一台僅使用 1,593 個邏輯單元 (logic cells) 的全功能科學計算機——約佔一個小型、廉價 FPGA 的 35%。雖然作者提到實體按鍵的觸感並不完全匹配復古的 HP 硬體,但這個專案展示了如何透過解決問題來完美地塑造專用硬體架構。

Sources