使用 ShieldBuddy 處理運算密集型專案

作者:Clive "Max" Maxfield

資料提供者:DigiKey 北美編輯群

許多業餘愛好者、創客和 DIY 愛好者,都使用 Arduino 微電腦開發板來監控其專案。而越來越多的專業工程師也開始這麼做,他們可能會將這些板件用作評估和原型開發平台,以加快開發速度,並降低與評估積體電路 (IC)、感測器和周邊裝置相關的成本。如《使用 Arduino BOB 快速評估感測器與周邊裝置》中所述,這些工程師所屬的團隊可能規模較小且有更緊湊的上巿時間 (TTM) 要求。因此,他們不得不處理多個工程領域及任務,同時還要設法加快元件評估速度並降低成本。

一種解決方案是將 Arduino 與開放原始碼硬體 (感測器及周邊裝置分接板 [BOB]) 和開放原始碼軟體 (程式庫及範例程式) 結合起來使用。儘管有多種 Arduino 板件可滿足一系列處理和記憶體需求,但有些運算最好是使用浮點單元 (FPU) 來完成,以免拖慢主處理器的速度。在 Arduino 生態系統中,ShieldBuddy 已解決了這個問題。

本文將介紹多種 Arduino 處理平台選項,以及 FPU 功能為何對許多應用至關重要。接著會介紹 ShieldBuddy,此板件的實體覆蓋區和 Arduino 板件類似,但具有三個獨立的 32 位元處理器核心,每個核心的運作速度為 200 MHz 且都有自己的 FPU。此外,本文還將討論此板件的編程模型,並說明其 Eclipse 架構編程環境及對 Arduino 整合開發環境 (IDE) 的支援,如何能讓 DIY 愛好者和設計人員快速上手。

適合新手和專業人士的 Arduino

Arduino 領域的新手通常會從 Arduino Uno Rev3 (圖 1) 入手,這是一款以頻率為 16 MHz 的 8 位元 ATmega328P 微控制器為架構的板件。此板件只有 32 KB 的快閃 (程式) 記憶體、2 KB 的 SRAM、14 個數位輸入/輸出 (I/O) 引腳以及六個類比輸入引腳。其中六個數位引腳可提供脈寬調變 (PWM) 輸出,如有需要,類比引腳也可用作數位 I/O 引腳。

Arduino Uno Rev3 開發板圖片圖 1:Arduino Uno Rev3 開發板以頻率為 16 MHz 的 8 位元 ATmega328P 微控制器為架構。(圖片來源:Arduino.cc)

Arduino Uno Rev3 的排針座含有 14 個數位 I/O 引腳、6 個類比輸入引腳以及多個電源、接地和參考引腳。這些排針座的覆蓋區為擴充板這個龐大的子板生態系統奠定了基礎。

繼 Uno Rev3 之後,許多使用者進一步使用了 Arduino Mega 2560 Rev3 板件 (圖 2),這是一款以頻率為 16 MHz 的 8 位元 ATmega2560 微控制器為架構的板件。此板件有 256 KB 的快閃記憶體和 8 KB 的 SRAM。其排針座的覆蓋區可確保支援和 Uno 相同的擴充板,而其額外的排針座可容納 54 個數位 I/O 引腳和 16 個類比輸入引腳。此板件有 15 個數位引腳可提供脈寬調變 (PWM) 輸出,同樣地,類比引腳也可根據需要用作數位 I/O 引腳。

Arduino Mega 2560 Rev3 開發板圖片圖 2:Arduino Mega 2560 Rev3 開發板以頻率為 16 MHz 的 8 位元 ATmega2560 微控制器為架構。其排針座的覆蓋區可確保支援和 Arduino Uno 相同的擴充板,但此板件具有額外的排針座,總共可提供 54 個數位 I/O 引腳和 16 個類比輸入引腳。(圖片來源:Arduino)

除了 8 位元資料路徑和 16 MHz 時脈帶來的限制外,Arduino Uno 或 Arduino Mega 微控制器均不含 FPU,這意味著任何涉及浮點數的計算都會大大拖慢這些處理器的速度。

對於想要更高處理能力的使用者,就要再升級到 Arduino Due (圖 3),此開發板的實體覆蓋區與 Arduino Mega 差不多,但採用 Atmel/Microchip Technology SAM3X8E 頻率為 84 MHz 的 32 位元 Arm® Cortex®-M3 處理器。此開發板具有 512 KB 的快閃記憶體、96 KB 的 SRAM、54 個數位 I/O 引腳、12 個類比輸入引腳,以及 2 個由數位類比轉換器 (DAC) 驅動的類比輸出引腳。此板件只有 12 個數位引腳可提供脈寬調變 (PWM) 輸出,同樣地,類比引腳也可根據需要用作數位 I/O 引腳。可惜的是,與 Arduino Uno 及 Mega 一樣,Arduino Due 的處理器也不含 FPU。

Arduino Due 開發板圖片圖 3:Arduino Due 開發板以頻率為 84 MHz 的 32 位元 Atmel SAM3X8E Arm Cortex-M3 處理器為架構。其排針座的覆蓋區和 Arduino Mega 的覆蓋區相同。(圖片來源:Arduino.cc)

Arduino Mega 和 Arduino Due 開發板具有大量引腳,因而受到業餘愛好者和專業人士等眾多使用者的喜愛。但即使是 Arduino Due 頻率為 84 MHz 的 32 位元處理器,也可能無法勝任某些運算密集型任務。同樣地,雖然 Due 有 512 KB 的快閃記憶體和 96 KB 的 SRAM,但對處理大量資料的大型程式而言,可能也是不夠的。

儘管如今的微控制器能夠處理越來越大量的資料,但某些運算最好使用 FPU 來完成,以獲得更大的效率和更低的延遲性。

什麼是 FPU?為何需要這種元件?

FPU 很實用,論其原因要回溯到電腦處理數字的方式。在電腦中表示數字時,最簡單的方法便是使用整數形態 (整數)。同時,使用整數執行運算不會佔用太多運算資源。但整數本質上是有限的,因而無法表示較寬的動態範圍。

這對工程師和科學家來說是個問題,因為他們經常需要在同一計算中使用極大值和極小值。例如,物理學家可能會在計算中使用光速值 (300,000,000) 和牛頓地心引力常數值 (0.00000000006674)。同樣地,工程師需要使用動態範圍較寬的數值來處理數位訊號處理 (DSP) 等任務,以及將其用於人工智慧 (AI) 與機器學習 (ML) 應用。

解決的辦法是使用浮點數表示法,即小數點可以根據數字的各個數位「浮動」,從而實現更好的數字「解析度」。問題在於,雖然 32 位元浮點數所佔用的記憶體量與定點 32 位元整數相同,但使用浮點數執行計算實際上需要佔用更多的運算資源。

如果處理器必須使用標準的定點硬體來執行浮點計算,則會嚴重影響處理器的效能。解決辦法是為處理器配備專用的 FPU。如此一來,就能使用非常少的時脈週期來執行複雜的浮點運算。

這正是 ShieldBuddy 發揮作用的地方。

ShieldBuddy 為 Arduino 生態系統引入 FPU 和高效能

Infineon Technologies KITAURIXTC275ARDSBTOBO1 又稱 ShieldBuddy (圖 4),是 Arduino 相容領域中相對較新的產品,這是一款適用於 Infineon 的 TC275T64F200WDCKXUMA1 TC275 AURIX Tc2xx TriCore 32 位元微控制器的嵌入式評估板。

ShieldBuddy TC275 配備 Infineon TC275 32 位元多核心處理器圖片圖 4:ShieldBuddy TC275 評估板配備板載 Infineon TC275 32 位元多核心處理器,其覆蓋區與 Arduino Mega 及 Arduino Due 相同,因此相容於許多現有的應用擴充板。 (圖片來源:Hitex.com)

ShieldBuddy 覆蓋區與 Arduino Mega 及 Arduino Due 類似,可相容於許多的應用擴充板,但區別在於,其它配備的 TC275 具有三個獨立的 32 位元核心,每個核心的運作速度為 200 MHz 且都具有自己的 FPU。此外,ShieldBuddy 還有 4 MB 的快閃記憶體 (8 倍於 Arduino Due、16 倍於 Arduino Mega),以及 500 KB 的 RAM (5 倍於 Arduino Due、62 倍於 Arduino Mega)。

個中差異從一點就可以看出,即 Arduino Mega 的核心每 µs 僅能處理大約十六條 8 位元指令;相比之下,TC275 每個核心的週期時間為 5 ns,這意味著每個核心每 µs 通常能執行大約 150 到 200 條 32 位元指令。由於 ShieldBuddy 的每個處理器核心都有自己的 FPU,因此,在執行浮點計算時,幾乎不會降低效能。

使用 ShieldBuddy 進行開發

使用 ShieldBuddy 時,專業軟體開發人員可能偏好使用 Eclipse IDE,而業餘愛好者和創客可能偏好使用熟悉的 Arduino IDE。這兩種選項都支援。

事實上,Arduino 的使用者很清楚,每個草稿碼 (程式) 必須有兩個標準函數,即 setup() (執行一次) 和 loop() (重複執行)。另外,使用者也可建立自己的函數。

ShieldBuddy 有三個核心,分別稱為 Core 0、Core 1 及 Core 2。如果使用 Arduino IDE,大多數的現有草稿碼經編譯後,都可直接用於 ShieldBuddy,而無需修改。預設情況下,setup() 和 loop() 以及其調用的任何使用者自建函數經編譯後,都會在 Core 0 上執行。

建立新程式時,使用者可透過將這些函數命名為 setup0() 和 loop0(),實現相同的效果。使用者也可建立 setup1() 和 loop1() 函數,這些函數及其調用的任何使用者自建函數經編譯後,都會自動在 Core 1 上執行。同樣地,setup2() 和 loop2() 函數以及其調用的任何函數經編譯後,也會自動在 Core 2 上執行。

在預設情況下,每個核心將獨立執行,這意味著可同時在 ShieldBuddy 上執行三個完全獨立的程式。儘管如此,這些核心也可使用共享記憶體等技術相互通訊。此外,每個核心可以觸發其他核心的軟中斷。

結論

事實證明,開放原始碼的 Arduino 概念非常成功,隨之產生的硬體與軟體生態系統已成長到包含數百種擴充板及數千個程式庫和應用程式。

雖然 8 位元 16 MHz Arduino Uno 和 Arduino Mega 等早期的 Arduino 開發板有一定的侷限性,但近期的產品強大許多,例如 32 位元 84 MHz 的 Arduino Due。即便如此,許多使用者仍需要更多的程式空間 (快閃記憶體)、資料空間 (SRAM),以及更高的處理能力,遠非任何傳統 Arduino 所能提供。

ShieldBuddy 有 4 MB 的快閃記憶體、500 KB 的 SRAM,以及三個頻率為 200 MHz 的獨立 32 位元處理器核心,且每個核心都有自己的 FPU。ShieldBuddy 將 Arduino 的概念帶到全新的境界,因而受到 DIY 超級愛好者和專業工程師的關注。

建議參閱:

  1. 超級新手的電子學課程
  2. 使用 Arduino MKR Vidor 4000 快速輕鬆運用 FPGA
  3. 透過容易使用的 Arduino 入門套件踏入創客領域
DigiKey logo

聲明:各作者及/或論壇參與者於本網站所發表之意見、理念和觀點,概不反映 DigiKey 的意見、理念和觀點,亦非 DigiKey 的正式原則。

關於作者

Image of Max Maxfield

Clive "Max" Maxfield

Clive "Max" Maxfield 在 1980 年從英國雪菲爾哈倫大學取得控制工程學士學位,自此開始擔任大型主機電腦中央處理單元 (CPU) 的設計人員。多年來,Max 已設計眾多元件,從矽晶片到電路板,以及腦電波放大器到蒸汽龐克風格的預知引擎 (別問) 等應有盡有。他更是電子設計自動化 (EDA) 領域的先驅,經驗超過 30 年。

Max 是許多書籍的作者和/或共同作者,包括《Designus Maximus Unleashed》(在阿拉巴馬州列為禁書)、《Bebop to the Boolean Boogie》(電子學的另類指南)、《EDA: Where Electronics Begins》、《FPGAs: Instant Access, and How Computers Do Math》。請瀏覽其 Max's Cool Bean 部落格。

關於出版者

DigiKey 北美編輯群