2024年1月17日 星期三

體驗到軟硬體協同設計的好處

昨天花了整天才完全搞懂怎麼在 FPGA (Xilinx Zynq 系列) 上,從 PS 端 (ARM) 發動 DMA ( Direct Memory Access ) 把待處理的資料從記憶體 (Double Data Rate, DDR) 送進 PL 端 ( FPGA ) 我們自己設計的數位邏輯電路 IP ( Intellectual Property) 進行影像處理,然後同樣用 DMA 把處理後的資料送回去記憶體。 

以上動作說來簡單,但中間要透過好幾次匯流排轉接,在 PS 端就要熟悉 ARM AMBA Advanced Micro-controller Bus Architecture ) 的使用方式與場合,例如在搬移數位影像這種資料型態時,我們就會採用 AXI4-Stream 的方式處理。

幸好 Xilinx 有提供 DMA 的硬體 IP,否則光這個部份就不知道要處理多久。

當我們把整個框架及驗證流程建立起來後,才能夠比較專心地去設計數位影像處理的硬體 IP,同時在某些比較複雜的機器視覺演算法中,則要先分析哪些部份適合在硬體處理,哪些部份比較適合在軟體處理,然後再分別進行設計。

這陣子接觸 FPGA 下來,真心覺得這個領域的進展好快,跟早期只是把 FPGA 當成高速傳輸介面或積體電路 IC 下線 ( Tape-out ) 前的驗證工具有很大的差別。

現在的 FPGA 是真的可以獨立視為一個新型態的處理系統看待,因為它也進化成系統單晶片 ( System on Chip, SoC ) ,這件事或許早就已經發生,但我近幾年才知道,有點落伍了。

每次當我學習到新的架構或新的開發流程時,都會無比興奮,就像二十年前當學生時,為了要建立動態連結檔 (Dynamic-Link Library, DLL) ,也是找遍相關資訊,最後才學會建立自己的 DLL 給不同的程式語言使用。

接著,在碰到演算法運算量過大,過度消耗時間的情況,又跑去學 SIMD Single Instruction Multiple Data ) 的加速指令集,再把能平行處理跟非平行處理的演算法整合在一起,並封裝成可以給人呼叫的應用程式介面 (Application Programming Interface, API)。

以前我找遍資料,很努力才學會的技術或開發技巧,現在回頭看其實都不難,目前也都在一個學期內就都教授給學生了;有了以上的學習經驗,讓我對於自己熟悉並掌握「軟硬體協同設計」更有信心,畢竟在演算法開發的層面上,它跟我以前用 SIMD 的開發流程非常相似,差別在於硬體加速的部份可以自己設計客製化。

FPGA 的設計概念跟軟體設計不太一樣,一個是資料流通過自定義的邏輯電路得到結果,另一個則是用標準的處理器指令集,通過不斷地搬移資料讓指令集處理來組合出想要的結果;這代表一個是直接把演算法生成邏輯電路,另一個是透過資料搬移與標準指令的組合來實現演算法。

期待以後能把自己辛苦學習的這些內容,用更簡單的方式讓學生吸收,說不定未來我回頭看這些東西,也會有「理所當然就這樣」的感覺,讓自己掌握更多的工具,有更多的選擇,才能針對不同的應用去設計適合的架構,而不是從頭到尾都只會一種開發工具硬幹。

當然,這也不是技術上的一廂情願,從商業的角度來看,「嵌入式視覺系統」在未來十年的成長率,會遠超過當前既有的系統架構,而身為嵌入式視覺的關鍵技術 → FPGA 不學實在說不過去。

沒有留言:

張貼留言

我的創業筆記 (十二) 合資公司是不是試水溫的好方法?

今天這篇又要聊到我老婆的工作內容了,她今年有關創業方面的內容特別多,所以一再被提及,但就她自己的說法,她並不想創業、她比較想躺平耍廢。 自從健身工作室的經營上軌道後,老婆就沒花費太多額外的精神,反倒是那間進出口公司的老闆非常活躍,衝勁跟野心十足,每天似乎都有新的想法,也搞死她們這...