天天看點

利用英偉達系列晶片NvStream設計的資料流驅動及時間同步模式

作者:焉知汽車

英偉達系列晶片的通用架構可以處理同步控制、資料流驅動以及引擎與其各自的API。

資料依賴包括輸入輸出可用的緩存,控制依賴包括任務排序、解耦和時間同步。跨線程内、線程間、程序間、VM間邊界和C2C工作。

其中,重要流處理子產品NvStream主要是實作對感覺資料的處理過程。NVIDIA SDK提供了幾個不同的庫(即,NvMedia、CUDA、OpenGL),用于生成和處理各種類型的圖像和高維資料。這些庫使用的接口是獨立編寫的,以滿足不同的需求,并且每個庫都有自己的表示記憶體和同步資源的方法,他們之間沒有直接的資料交換方式。此外,還有關于如何以及何時配置設定這些庫使用資源的大多數細節一般都會對應用程式隐藏。

NvStreams庫有兩個主要用途:首先,它們允許預先配置設定資源,由應用程式定義通路限制,并充分了解其總體需求的細節。這對于必須確定資源可用性和資訊适當封裝的安全性關鍵系統至關重要,它們允許在互不了解的應用庫之間交換有用的資源。

利用英偉達系列晶片NvStream設計的資料流驅動及時間同步模式

如下圖所示,NvSciStream針對視訊幀處理主要包括四個階段:即建立内部處理流(Creat Stream)、建立同步及緩存資源、生成處理幀、消費幀。其中建立流階段通過建立緩存子產品NvSciBufModule和同步子產品,打通NvScilpc通道并建立處理塊和連接配接處理塊。一旦資料流被建立和連接配接上,應用就能跟随一個時間驅動模型。每個子產品傳遞可以為視訊流事件所通路,比如連接配接流和包的連接配接狀态。此外,在服務生成幀中,可以擷取、寫入及發送對應的服務包。

利用英偉達系列晶片NvStream設計的資料流驅動及時間同步模式

NvStreams三大子產品包括:NvSciBuf和NvSciSync上的NvSciStream層,他們為在多個應用程式子產品之間流式傳輸資料包序列提供實用程式,以支援各種各樣的用例。整個NvStreamAPI包括3個特殊的階段:建立階段,即建立服務端與用戶端之間的管道通信、緩沖配置設定、同步需求、同時進行靜态配置;運作時,使用同步流式傳輸;解除關系階段,通過一定程式解除雙方通信關系。

首先,NvSciBuf允許應用程式在記憶體中配置設定和交換緩沖區。NvSciBuf是一個緩沖區配置設定子產品,使可在硬體和軟體單元之間共享的緩沖區能夠配置設定對應的應用程式。NvSciBuf具有雙重用途:他可以作為所有引擎的限制條件,也可以配置設定一個可供UMD重複使用的記憶體,并根據其現有資料類型進行通路。

利用英偉達系列晶片NvStream設計的資料流驅動及時間同步模式

其次,NvSciSync允許應用程式管理同步對象,這些對象可在操作序列開始和結束時進行協調。這些庫還可利用NvSciIpc進行程序間/分區間/系統間的通信。一個同步對象可以被一個單獨的信号及一個或多個相關的寫入對象所通路。

利用英偉達系列晶片NvStream設計的資料流驅動及時間同步模式

NvSciSync是一個通用的同步架構,它滿足了對具有引擎之間依賴關系的作業同步的需求,就像處理相同資料的伺服器引擎管道一樣,也不需要過多的CPU資源介入。

傳感器資料流處理及硬體驅動配置

1)攝像頭接口配置

NIVIDA平台可提供多個視訊和錄影機端口。在将這些攝像頭與NvMedia示例應用程式一起使用之前,必須按特定順序将攝像頭連接配接到端口。如果未能執行此操作,NvMedia子產品将報告錯誤。對于Orin晶片而言,在将錄影機連接配接到平台以及從平台斷開連接配接之前,需要斷開電源。否則,可能會損壞攝像頭。

DRIVE AGX Orin平台(P3710)提供GMSL攝像頭接口,GMSL攝像頭接口同時提供了16個GMSL錄影機輸入。支援錄影機輸出的實際數量取決于錄影機輸出的分辨率、輸出的幀速率和電源模式(特别是視訊輸入VI和ISP硬體時鐘)。在系統設計中,一般會将攝像頭資料路由到任一路SoC中,SoC在連接配接到所有解串器的GPIO引腳上生成TSC_EDGE_OUT信号。該公共脈沖寬度調制PWM信号随後被轉發到所有16個GMSL錄影機以實作幀同步。

2)攝像頭映射連接配接器

可以使用GMSL解串器将每個GMSL相機組路由到晶片,GMSL攝像頭必須具有8V的耐受性。

GMSL攝影機被組織成四邊形,例如,可用的A、B、C和D,不同的錄影機可以用于不同的四邊形。在連接配接或斷開攝像頭之前,需要關閉主電源。如果電源打開,GMSL攝像頭或平台可能會損壞。對于相機組A和B,I2C總線速度為1Mhz。對于相機組C和D,I2C總線速度為400KHz。使用四攝像頭分接電纜可以連接配接多個攝像頭,将四攝像頭分接電纜連接配接到平台攝像頭總成A。使用Fakra同軸電纜,可以将GMSL攝像頭連接配接到四攝像頭分接電纜的另一端,将任何後續錄影機連接配接到四攝像頭分接電纜的每個連接配接器。

3)運作攝像頭顯示終端

使用指令啟動相機拍攝。例如,Valeo IMX728 B1攝像頭子產品連接配接到A組的A0端口,HDMI顯示器連接配接到DP(DisplayPort)端口。

在将-d選項與nvsipl_cCamera應用程式一起使用之前,必須完成以下要求:

/opt/root/samples/nvmedia/nvsipl/test/camera

sudo ./nvsipl_camera --platform-config "V728S1-120V1-FWC_CPHY_x4" --link-enable-masks "0x0001 0x0000 0x0000 0x0000" -d 0

//V728S1-120V1-FWC_CPHY_x4指定平台配置的名稱,該名稱描述了圖像傳感器與基于Orin的平台的連接配接。

// -d1指定顯示編号, -w1指定顯示視窗ID。

./nvsipl_camera -h //獲得Tegra可用的顯示裝置

以上步驟完成後,通過識别可用的顯示裝置和選擇所需的顯示器ID就可以很好地完成視訊到裝置的顯示輸出了。

基于NIVIDIA設計的域控時間同步

考慮之前設計的基于英偉達晶片所設計的系統架構,總體包括SOC(Orin/Tegra)+MCU(Aurix)及其外設傳感器。各傳感器在域控中的資料傳輸鍊路需要在一定程度上進行合理的節拍設計,以確定資料在輸入感覺融合子產品中能夠完成合理适當的規劃控制功能。是以,要說明整個系統架構的驅動工作模式,就需要從底層邏輯上完整的分析如何有效利用Orin晶片進行時間同步設計。

如下圖從内部硬體角度顯示了基于Orin所設計的多子產品架構及其時間同步子產品邏輯。

利用英偉達系列晶片NvStream設計的資料流驅動及時間同步模式

根據Orin支援的PTP拓撲,需要考慮Orin/Tegra 的MAC及其相關PHC端需要與外部Grand Master進行時鐘同步。從頂部開始,來自PHC的時間戳資料包通過SO_TIMESTAMPING套接字選項需要提供PTP協定棧。PTP協定棧計算适當的校正值,并使用标準POSIX時鐘功能調整PHC。同時,來自PHC的PPS信号由核心在中斷服務例程(ISR)中加時間戳,并通過PPS的标準NTP接口提供給使用者空間程式。

所有SOC内部時鐘都需要根據使用情況進行同步或互相關聯。PTP時間源MAC選擇可通過NvPS/NvTime2子產品配置部分進行配置。PTP守護程序是主要用于同步SOC中的一個内部軟體時鐘驅動(PHC),該驅動時鐘作為所有其他本地時鐘源,可以作為同步/協同關系的基礎。一旦同步,此MAC PHC(PTP硬體計數器)将作為以下所有子產品的時鐘同步基礎,過程中,系統需要提供給PTP時間協定棧所要求的所有軟體元件SWC。

SOC晶片内部有多個PTP配置端口,其中包括PTP伺服器端口(PTP Server Port)、PTP用戶端端口(PTP Client Port)、PTP禁用端口(PTP Disabled Port)、PTP外設通用端口(PTP Externel GM)。

如下圖,Orin晶片在時間同步上主要有兩個應用堆棧的攝入,分别是Drive OS Stack和Application Stack。其中,Drive OS Stack中核心子產品是時域協相關子產品(NvTIME/NvPPS)。

利用英偉達系列晶片NvStream設計的資料流驅動及時間同步模式

英偉達系列晶片特有的硬體輔助機制功能需要從時域角度來對于時鐘/計數器TSC和PTP協定棧建立時間戳。這樣的時間戳針對傳感器融合的有效應用是非常有用的,特别是在傳感器資料輸入的一緻性關系确認上是很有用的。因為,可以有效推進PTP和TSC計數器之間随時間推移可能産生的固定偏移(無運作時漂移)。

1)PTP-TSC的時間同步

PTP-TSC HW同步,用于使用從MAC輸入到TSC的1HZ PPS信号,并将TSC與PHC增量率對準。同時,需要相機Fsync信号生成與PTP第二邊界對齊。

英偉達系列晶片的通用定時器子產品GTM(Generic Timer Module)不僅可以産生PWM以驅動外部執行器,還可以測量輸入信号并對其進行特征資料提取,以便進一步處理。通用定時器子產品,由帶有不同功能的子子產品組成。這些子子產品可以以一種可配置的方式組合起來,以形成一個複雜的定時器子產品。GTM形成了一個通用的計時器平台,服務于不同的應用程式域和一個應用程式域中的不同類。

Orin還提供了一種硬體輔助機制,以使用來自MAC的PPS信号,并将TSC(時鐘/計數器,一般也可以是正常的時間晶振)與第二邊界上的以太網MAC之一對齊/同步。TSC參考的MAC選擇是基于平台的PTP拓撲結構。它必須始終是MAC直接或通過交換機充當外部通用定時器子產品(GTM)的PTP用戶端。

此功能可用于将相機時間同步fsync信号(用于相機幀捕獲/時間戳)與SOC晶片内部PTP之間進行的時間同步,進而有效減少與PTP域在不适當的時機内進行時間同步,消除傳感器之間的時間戳抖動。

2)NvPPS子產品

NvPPS子產品是Linux核心子產品/驅動程式,它為所有要查詢的使用者應用程式提供單一通路點,包括如下資訊:

  • 來自PHC的目前同步PTP時間;
  • 事件共同相關的PTP和TSC時域的時間戳資訊;
  • 此子產品在DRIVE OS核心中預設啟用。

SOC中的PTP橋(MAC-MAC)-允許其他MAC通過主MAC(與GM連接配接)與GM時間同步,以支援通過晶片中MAC連接配接的其他時間感覺用戶端的裝置所使用,如Lidar等。此外,時間協同關系子產品還可以在給定事件上提供多個時域的并發和相關快照,如CCPLEX TSC、PTP等,供上層軟體使用。

3)OS時間同步支援

英偉達内部DRIVE OS Linux和QNX支援IEEE 1588、IEEE 802.1AS以及AUTOSAR EthTsync配置檔案。對這些配置檔案的支援僅限于在Tegra/Orin中運作的軟體堆棧,也就是說在交換機中是不支援的。這意味着這些配置檔案無法在直接連接配接到DRIVE-Orin開發平台的交換機上啟用以太網MAC。對于自定義闆而言,所有Tegra MAC都可以支援這些配置檔案。

在DRIVE OS Linux(AV+L)中,Linux ptp守護程式(即ptp4l)應在用戶端模式和汽車配置檔案模式下運作,且需要從外部GM同步tegra的MGBE_2 mac接口。注意:預設情況下,通過MGBE2→ 啟動TSC鎖定。

AUTOSAR以太網Tsync配置檔案包含對伺服器和用戶端的兩邊配置,以下部分解釋了gptpTsync二進制檔案INI檔案中特定于autosar的可配置參數。相應的PTP指令如下:

/ #Server Mode

cd /opt/nvidia/drive-linux/samples/nvavb/daemons/

sudo ./gptpTsync <interface> -F autosar_cfg.ini -INITPDELAY 0 -OPERPDELAY 0 -INITSYNC -3 -OPERSYNC -3 -S -V -GM

// #client Mode

cd /opt/nvidia/drive-linux/samples/nvavb/daemons/

sudo ./gptpTsync <interface> -F autosar_cfg.ini -INITPDELAY 0 -OPERPDELAY 0 -INITSYNC -3 -OPERSYNC -3 -S -V -N -A

// where:

// <iface> : 接口名稱,即應該在其上啟動 PTP 的 eqos_0、mgbe0_0、mgbe1_0。 它可以是主接口之上的 VLAN 接口。

基于英偉達晶片架構所涉及的部分重點包含時間同步,其本質上代表了開發和生産用例所支援的PTP拓撲和PTP概要檔案。如下表表示了英偉達開發晶片的支援架構。

其他PTP配置設計

1)PTP橋接

SOC内置了5個以太網實體位址MAC控制器。其中,隻有一個可以作為PTP輔助接口,将Orin/Tegra與外部GM同步。在某些使用情況下,來自外部GM的時間資訊需要轉發到連接配接到其他MAC控制器的裝置,這需要在Orin/Tegra中實作類似PTP時間感覺的橋接功能。較低層中包含了一項新功能,用于同步來自外部GM的多個MAC PHC,通常一次僅支援2個MAC。

2)NvPs操作模式

NvPS子產品有兩種操作模式:GPIO/PPS模式和定時器模式。

GPIO/PPS模式下,NvPPS驅動程式将來自Orin/Tegra GPIO引腳上GPS等裝置的外部1PPS信号作為事件輸入,并從相關時域讀取時間戳進行關聯。

定時器模式下,協同關系的事件是基于NvPS子產品内安排的周期性SW定時器。當系統設計中沒有GPS等外部裝置用于生成1個PPS信号時,亦或者平台(如P3663)中沒有提供通過Orin/Tegra 的GPIO接收PPS信号的裝置時,定時器模式則顯得尤為重要了。

3)核心空間接口暴露

除了使用者空間接口外,NvPS子產品還需要為其他核心子產品導出核心API,以擷取核心中目前同步的PTP時間。擷取PTP時間過程中,用戶端可以在需要PTP時間的時候調用此API,如果未注冊 PTP 時間源,則傳回 -EINVAL,無論 nvpps dt 可用性如何,此 API 均可用,當 nvpps dt 節點不存在時,接口名稱将預設為“eth0”。

int nvpps_get_ptp_ts(void *ts)

此外,以下靜态配置可以通過NvPS裝置樹節點進行NvPS子產品配置。如下表表示了在時間同步中的指令集及相應的指令功能描述。

SN IOCTL Description
1 NVPPS_GETTIMESTAMP 從核心擷取目前時間戳,從主PHC接口擷取PTP時間
2 NVPPS_GETEVENT 擷取上一次事件中不同時域(TSC、PTP等)的相關時間戳。
3 NVPPS_GETVERSION 擷取NvPS驅動程式和API版本。
4 NVPPS_GETPARAMS 擷取目前NVPPS參數。類似于操作模式(GPIO或定時器模式)和TSC時間戳模式(Nanosec或計數器模式)。
5 NVPPS_SETPARAMS 設定NvPS參數,如NvPPS_GETPARAMS部分所述。此IOCTL可用于在運作時更新NvPS參數
NvPS子產品中的參數設定對所有用戶端應用程式都是通用的。

主PTP接口(prop_name:“接口”)可用于連接配接到外部GM的MAC接口,輔助PTP接口(prop_name:“sec_interface”)可以通過使用PTP橋接與主PTP MAC接口同步MAC。1PPS輸入引腳(prop_name:“gpios”)可用于指定1PPS信号可用的GPIO引腳詳細資訊。

繼續閱讀