基于AMD AU15P FPGA的SLVS-EC橋PCIe設計方案分享

作者: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圖顯示效果。

今天的分享到此結束了,希望對大家有所啟發。大家有更好的設計想法,有問題,有需求均可與熊貓君聯系一起學習、討論、進步。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/71699.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/71699.shtml
英文地址,請注明出處:http://en.pswp.cn/web/71699.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Redis|Springboot集成Redis

文章目錄 總體概述本地Java連接Redis常見問題集成Jedis集成lettuce集成RedisTemplate——推薦使用連接單機連接集群 總體概述 jedis-lettuce-RedisTemplate三者的聯系 jedis第一代lettuce承上啟下redistemplate著重使用 本地Java連接Redis常見問題 bind配置請注釋掉保護模式…

機器學習(六)

一,決策樹: 簡介: 決策樹是一種通過構建類似樹狀的結構(顛倒的樹),從根節點開始逐步對數據進行劃分,最終在葉子節點做出預測結果的模型。 結構組成: 根節點:初始的數據集…

恢復IDEA的Load Maven Changes按鈕

寫代碼的時候不知道點到什么東西了,pom文件上的這個彈窗就是不出來了,重啟IDEA,reset windos都沒用,網上搜也沒收到解決方案 然后開打開其他項目窗口時,看到那個的功能名叫 Hide This Notification 于是跑到Setting里…

怎么使用Sam Helper修改手機屏幕分辨率,使得游戲視野變廣?

1.準備Shizuku 和Sam Helper軟件 2.打開設置,找到關于本機,連續點擊版本號五次打開開發者選項 3.找到開發者選項,打開USB調試和無線調試 4.返回桌面,我們接著打開shizuku,點擊配對,這里打開開發者選項,找…

【招聘精英】

我們公司是一個位于石家莊的一個科技型新型技術公司。主要做人力資源、用工、科技等方面。 有意向回石家莊的或者已經在石家莊的技術大咖、軟件大牛、產品大佬、UI大神可以來了解一下。 現在招聘 高級前端開發 高級java開發 其他崗位也可以聯系。 有意向的朋友可以私信我。 -…

大模型信息整理

1. Benchmarks Reasoning, conversation, Q&A benchmarks HellaSwagBIG-Bench HardSQuADIFEvalMuSRMMLU-PROMT-BenchDomain-specific benchmarks GPQAMedQAPubMedQAMath benchmarks GSM8KMATHMathEvalSecurity-related benchmarks PyRITPurple Llama CyberSecEval2. 國內外…

Redis-限流方案

在實際業務中,可能會遇到瞬時流量劇增的情況,大量的請求可能會導致服務器過載和宕機。為了保護系統自身和上下游服務,需要采用限流的方式,拒絕部分請求。 限流就是對請求的頻率進行控制,迅速拒絕超過請求閾值的請求。 …

無感方波開環強拖總結

一、強拖階段的核心原理與設計要點 開環換相邏輯 固定頻率斜坡:以預設斜率逐步提升換相頻率(如0.5-5Hz/ms),強制電機跟隨磁場旋轉。電壓-頻率協調控制:初始階段施加高電壓(80%-100%額定)克服靜摩…

Java虛擬機之垃圾收集(一)

目錄 一、如何判定對象“生死”? 1. 引用計數算法(理論參考) 2. 可達性分析算法(JVM 實際使用) 3. 對象的“緩刑”機制 二、引用類型與回收策略 三、何時觸發垃圾回收? 1. 分代回收策略 2. 手動觸發…

代碼隨想錄算法訓練營第22天 | 組合 組合總和 電話號碼的字母組合

77. 組合 77. 組合 - 力扣&#xff08;LeetCode&#xff09; class Solution {List<Integer> path new ArrayList<>();List<List<Integer>> result new ArrayList<>();public void backTracking(int n,int k,int startIndex){if(path.size() …

#UVM# 關于field automation機制中的標志位及if的使用

通過前面文章的復習,我們知道了 uvm_field 機制帶來的好處,確實方便了我們很多代碼的coding 時間,但是會不會有一種情況呢? 比如,我們不想將實例中的某一些成員進行打包、復制、比較操作,怎么辦呢? 如果只執行 比較但不進行打包操作呢?是不是很復雜呢 ? 一 標志位…

RK3588 安裝ffmpeg6.1.2

在安裝 ffmpeg 在 RK3588 開發板上時,你需要確保你的開發環境(例如 Ubuntu、Debian 或其他 Linux 發行版)已經設置好了交叉編譯工具鏈,以便能夠針對 RK3588 架構編譯軟件。以下是一些步驟和指導,幫助你安裝 FFmpeg: 1. 安裝依賴項 首先,確保你的系統上安裝了所有必要的…

leetcode day25 28 KMP算法

28找出字符串中第一個匹配項的下標 給你兩個字符串 haystack 和 needle &#xff0c;請你在 haystack 字符串中找出 needle 字符串的第一個匹配項的下標&#xff08;下標從 0 開始&#xff09;。如果 needle 不是 haystack 的一部分&#xff0c;則返回 -1 。 示例 1&#xff…

編程語言介紹:Rust

什么是Rust Rust是由Mozilla研究院開發的一種系統級編程語言&#xff0c;旨在提供更好的內存安全保證&#xff0c;同時保持高性能&#xff0c;自2010年首次發布以來&#xff0c;Rust以其安全性、并發性和實用性迅速獲得了廣泛的關注。Rust最獨特的特性之一是其所有權模型&#…

Java Spring MVC (2)

常見的Request Controller 和 Response Controller 的區別 用餐廳點餐來理解 想象你去一家餐廳吃飯&#xff1a; Request Controller&#xff08;接單員&#xff09;&#xff1a;負責處理你的點餐請求&#xff0c;記錄你的口味、桌號等信息。Response Controller&#xff08…

Oracle 字符類型對比

本文以 Oracle12c 為例 1.主要區別對比 類型存儲方式最大長度字符集支持適用場景備注?CHAR(M)固定長度空格填充2000 字節&#xff0c;M 代表字節長度默認字符集固定長度編碼實際存儲長度固定為定義長度&#xff08;如 CHAR(10) 始終占 10 字節&#xff09;?VARCHAR2(M)可變長…

Linux系列:如何用heaptrack跟蹤.NET程序的非托管內存泄露

一&#xff1a;背景 1. 講故事 前面跟大家分享過一篇 C# 調用 C代碼引發非托管內存泄露 的文章&#xff0c;這是一個故意引發的正向泄露&#xff0c;這一篇我們從逆向的角度去洞察引發泄露的禍根代碼&#xff0c;這東西如果在 windows 上還是很好處理的&#xff0c;很多人知道開…

vite.config.js 是Vite 項目的配置文件,分析具體用法

vite.config.js 是 Vite 項目的配置文件&#xff0c;用于定義項目的構建、開發服務器、插件等配置選項。以下是示例代碼中各部分的作用分析&#xff1a; 1. 導入模塊 import { fileURLToPath, URL } from node:url import { defineConfig } from vite import vue from vitejs…

行為模式---責任鏈模式

概念 責任鏈模式是一種行為設置模式&#xff0c;它的核心思想就是將請求的發送者和接收者進行解耦&#xff0c;每個接收者都可以處理請求。 在責任鏈模式中將每個接收者連成一個鏈條&#xff0c;當有請求發送上來的時候會經過每一個接收者。直到消息被處理。 適用場景 1、當…

pytest結合allure

Allure 一、文檔二、指令三、裝飾器3.1 allure.step裝飾器3.2 allure.description裝飾器3.3 allure.title裝飾器3.4 allure.link、allure.issue 和 allure.testcase裝飾器3.5 allure.epic、allure.feature 和 allure.story裝飾器3.6 allure.severity裝飾器 一、文檔 allure文檔…