【ATU Book-S32V系列】 ACF 架構流程

一.   概述

前文回顧,從上一篇 APU Kernel 建置方式 ,介紹了如何建置與編譯 APU Kernel , 但尚未說明有關 ACF 檔案撰寫。接下來,將更詳細 ACF 作用與建置流程,以及 ACF Graph 的描述。如同下圖 “APEX 技術指南-文章架構示意圖” 所示,此次介紹章節為 “ ACF 架構流程“

 

APEX  技術指南 - 文章架構示意圖
 

若是對於 APEX 相關技術與知識尚未理解者,該篇文章難度略深,請從另一個系列的文章 “ APEX 基礎架構 ” 閱覽起。 

 

二.   ACF 架構流程

1.    ACF 架構說明

所謂的 ACF (APEX Core Framework) 是原廠開發的一套軟體架構層,主要作用是自動產生硬體配置盡而省去向硬體溝通的時間。
如下圖所示,為 ACF 建構 APEX Kernel流程示意圖,這裡為了更加強調 ACF 的流程,並以附加檔案名稱的方式描述。
建置 APEX Kernel 必須從 APU 與 ACF 所構成的 APU Kernel 開啟建立起 (橘色方塊)。接續,建置 *_ Graph.hpp*_Process_descript.hpp 這兩支檔案來構成的 ACF Graph 描述 (負責銜接 APU Kernel)。最後透過 ACF 自動產生的 ACF Graph (暗紫色方塊) 相關連結檔並配合到 APEX Kernel (紫色方塊) 上,即可於 APEX 應用層使用。



ACF 建構 APEX Kernel流程示意圖

 

2.   ACF & APU Kernel 建置

回應上篇章,APU Kernel 須搭配 ACF 進行撰寫,其中必須透過 ACF Metadata 與 ACF Wrapper 階層來描述 APU的接口。

a.  ACF - Metadata 層

所謂的 Metadata 就是中繼資料用來描述輸入與輸出端之中的屬性,比如說輸入資料的類型、別名、尺寸、 補點(Padding) 等等皆可以於 Metadata 中撰寫。這裡是撰寫於 ACF 檔案中 (*_acf.cpp) ,則 Metadata 所表示的方式如下…

以上為 Metadata 層 撰寫方式,須對照 APU 所撰寫的函式進行描述。這裡依序說明結構體內的參數成員作用為何。

->  ABS_ADD _08u_KN 為對應的 ACF Wrapper 函式,此函式是透過 ACF 所打包的 APU 函式。
      (此 ABS_ADD _08u_KN將於 *_acf.h 內定義,並與 apu_absadd 函式作連接)

->  ADD 為對應的 ACF kernel 別名。

->  3 為對應的 Kernel Port 數量。

->  _Port 為對應的 Kernel Port 屬性,並於註解附上其屬性作用。 

b.  ACF - Wrapper層

介紹完 Metadata層 撰寫的方法後,另一個就是需要與 APU 的程式碼做搭配的就是 ACF Wrapper 。
所謂的 Wrapper 就是將 APU 函式的接口改成 ACF 結構體(Struct) 的方式,並重新打包新的函式。
過程將以記憶體、Chunk 大小、kernel_io_desc 結構體進行描述 APU Kernel 所需要的輸入端資料。
 

在 *_acf.cpp 檔內,完成描述兩個 ACF 層( Metadata & Wrapper ) 的敘述後。即可開始編譯, 若編譯成功就代表 APU Kernel 建置完成
PS : 若編譯成功但執行有錯誤,也可能是 Metadata & Wrapper 這兩階層沒有描述正確而造成。

 

 3.   ACF Graph

至於 ACF Graph 則會搭配 Graph 與 Process_descript 來描述整個 APU Kernel 的接口與動作,甚至可以連接數個 APU Kernel,並由 ACF 自動生成代碼。
首先先介紹 *_graph.hpp 是如何撰寫 …
PS: 須依原廠路徑 /s32v234_sdk/libs/apexcv_base/apu_simple/graphs/ 底下進行撰寫該資料夾須自行建置,請參考 libs 內先關 kernel !!



a.  ACF - Graph 設計

ACF Graph 可以連接數個已設計好的 APU Kernel ,並由 ACF 自動生成代碼。這裡代碼描述主要以 AddKernel 、 AddInputPort 、 AddOutputPort 、Connect 四個函式進行描述 !!
ACF Graph 所呈現的圖形化就如同ACF Graph 圖形化概念示意圖所示。

absadd_08u_graph.hpp

 

ACF Graph 圖形化概念示意圖

 

b.  ACF - Process Descript 設計

另一個檔案就是要描述有關於 ACF Graph 接口配置的描述,這裡主要描述輸入端與輸出端的定義去配合 Graph 的接口,以及初始化 Graph。除此之外,也可以在此改變 Chunk Size 的大小。

absadd_08u_apu_process_desc.hpp

 

c.  編譯方式

描述完關於 ACF Graph 與 ACF Process Descript 的配置,就可以到 資料夾build-apu-nxp-sa-d 底下進行編譯,如同 ACF Graph 編譯示意圖 所示。
編譯完成後,將會看到資料夾內生成許多檔案。這些檔案就是透過 ACF 軟體架構層所生產的硬體配置檔,如同 ACF Graph 生成檔案之示意圖為 ACF 所產生的程式碼,該程式碼為 ACF 自動產生的硬體最佳配置。幫助開發者省去向硬體的溝通,且代表完成了 ACF Graph 的設計。

 


ACF Graph 編譯示意圖

 


ACF Graph 生成檔案之示意圖

 

此外,如下圖所示。可以建置數個 ACF Graph 讓 ACF 去生產不一樣的資料型態或 Chunk Size 大小硬體配置。


ACF Graph 生成檔案之示意圖-特別說明


沿著此篇的思路,下一篇文章將會補齊建置 ACF 一些進階用法,與之前所介紹的 APU 資料型態與函式庫 雷同。後續,將開始介紹 ACF 使用的工具書 “ ACF 進階配置”, 更清楚地描述能使用的 ACF 函式有哪些。敬請期待!!

 

三.  參考文件

[1] NXP Official website : https://www.nxp.com/
[2] VisionSDK_ProgrammingExamples.pdf
[3] VisionSDK_UserGuide.pdf
[4] VisionSDK_SUMat_UMat.pdf
[5] UG-10328-01-09_APEX-CV_Base_Library .pdf
[6] UG-10328-02-11_APEX-CV_Pro_Library.pdf
[7] UG-10267-03-14-ACF_User_Guide.pdf
[8] UG-10301-00-06_APU-2_C_Programmer_Guide pdf


如有任何相關 APEX 技術問題,歡迎至博文底下留言提問 !!
接下來還會分享更多 APEX 的技術文章 !!敬請期待 【 ATU Book-S32V系列 】 !!


 

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論