作者:Hello,Panda
各位FPGAer周末愉快,今天熊貓君分享一個基于AMD AU15P FPGA的SLVS-EC橋PCIe設計方案。
一、方案背景
先說方案的應用背景:眾所周知,較為上層的如基于AI的機器視覺應用,大多基于高端的專用SoC、AI專用計算卡等,比如說英偉達(NVIDIA)的一系列高端器件;國內的海思(Hisilicon)、瑞星微(RockChip)等。在工業和科研應用領域,一些超高速或超大面陣的圖像傳感器因輸出圖像需要極大帶寬的緣故,常常采用SLVS-EC接口輸出,為解決專用芯片無法直接支持SLVS-EC輸入的問題,這個SLVS-EC橋接到PCIe的設計方案便應運而生。
二、FPGA選型
橋接型的方案,除了需要實現基本功能外,還要求功耗低、面積小且成本不要太高。那么咱們先看這些SLVS-EC輸出的圖像傳感器,大多都是基于SLVS-EC Spec 2.0規范,8-Lanes輸出,Lane速率4.752Gbps。那么對橋接FPGA的基本要求是:
(1)8對高速Serdes實現8-Lanes 4.752Gbps SLVS-EC數據接收;
(2)至少PCIe Gen3 x4輸出采集到的數據;
(3)PCIe采用Stream模式對主控的控制要求太高(主要是熊貓君在這種幾乎滿帶寬情況下沒怎么調好過,所以不敢推薦Stream模式),因此采用Memory Map模式,因此需要至少32位寬的DDR緩存。
那么,能夠同時滿足12對高速Serdes,可接DDR緩存,封裝小且功耗低的器件,截止本文發布,似乎只有AU15P用起來剛剛好。其資源如下圖所示:12對Serdes,PCIe用去4對,還有8對可用來接入SLVS-EC,170K的邏輯、144個RAM36K,實現PCIE、SVLS-EC和DDR控制器能用上65%~75%,也是剛剛好。器件選用SBVB484(19mm×19mm)封裝,全功能運行功耗3W左右,均比較合適。
當然,如果是圖像傳感器是4-LANEs SVLS-EC輸出,也可以支持兩顆Sensor同時接入。
三、軟件設計
本文以接入兩顆4-Lanes SLVS-EC圖像傳感器為例,描述軟件設計架構。
如圖所示:
(1)SoC配置和控制Sensor時序,FPGA接收SLVS-EC接口數據并可經PCIE接口輸出,相當于是數據透傳;
(2)SoC通過PCIe接口(XDMA)控制FPGA各模塊和讀取FPGA各模塊的狀態,FPGA相當于是SoC的一個外設;
(3)XDMA配置為AXI Memory Mapped模式,SoC在收到XDMA給出的數據中斷后讀取圖像數據。
1、SLVS-EC接收模塊
SLVS-EC接收模塊的設計框圖如下:
SLVS-EC的物理層支持1-Lane/2-Lanes/4-Lanes/8-Lanes 的 SLVS-EC 數據通道輸入。SLVS-EC 核心組件由 RX 協議解析狀態機、packet Parser 和字節到像素的轉換等模塊構成,實現如Packet Header、Packet Footer等鏈路層功能和鏈路層協議管理等功能。支持的數據格式有 RAW8、RAW10、RAW12、RAW14、RAW16。
2、XDMA配置
通過AMD官方IP XMDMA實現PCIe傳輸。Vivado下關鍵配置如下圖:
如上圖所示,因為接入的是2組SLVS-EC相機,因此用戶中斷請求配置為2個,每個相機的數據對應一個獨立的中斷。同理,DMA H2C/C2H也配置為獨立的2個。M_AXI_LITE接口用于配置FPGA和讀取狀態。
3、主控讀取
對PCIe主控而言,Linux系統下面直接編譯AMD提供的官方驅動即可,不過需要注意的是,不同版本的Linux內核頭文件可能有些許差異,根據編譯信息處理即可,下圖是在Ubuntu 2022.4上使用QT取PCIe圖顯示效果。
今天的分享到此結束了,希望對大家有所啟發。大家有更好的設計想法,有問題,有需求均可與熊貓君聯系一起學習、討論、進步。