詳解賽靈思SRIO IP并提供一種FIFO封裝SRIO的收發控制器仿真驗證

概述

RapidIO標準定義為三層:邏輯層、傳輸層、物理層。

  • 邏輯層:定義總體協議和包格式,包含設備發起/完成事務的必要信息。

  • 傳輸層:提供包傳輸的路由信息(對頂層不可見)。

  • 物理層:描述設備級接口細節(包傳輸機制、流控、電氣特性、低級錯誤管理)。


邏輯層(LOG)

邏輯層劃分為模塊控制并解析數據包,包含三種接口:

  1. 用戶接口(User Interface)

    • 可配置端口數量和事務類型。

    • 支持通過AXI4-Lite總線訪問本地/遠程寄存器。

  2. 傳輸接口(Transport Interface)

    • 相當于緩存Buffer(對頂層不可見)。

  3. 配置接口(Configuration Fabric Interface)

    • 讀寫本地配置空間及邏輯層/傳輸層寄存器。

用戶接口詳解

  • I/O端口集
    1. 支持I/O事務(NWRITEs、NWRITE_Rs、SWRITEs、NREADs、RESPONSEs)。

    2. 可選支持消息事務(取決于IP核配置)。

    3. 支持門鈴事務。

  • 消息端口:專用于消息事務。

  • 維護端口:專用于維護事務。

  • 用戶自定義端口:支持自定義事務類型(未使能時丟棄包)。

I/O端口類型
  1. Condensed I/O
    • 單AXI4-Stream通道發送/接收所有包類型。

  2. Initiator/Target
    • 分離請求與響應事務,共4個AXI4-Stream通道。

數據流協議
  • 支持HELLO格式與SRIO Stream格式。

  • 通道映射關系:
    • s_axis_ireq* → ireq(本地請求)

    • m_axis_iresp* → iresp(遠程響應)

    • m_axis_treq* → treq(遠程請求)

    • s_axis_tresp* → tresp(本地響應)


物理層(PHY)

  • 功能:處理鏈路訓練、初始化、協議、CRC校驗、應答標識符插入。

  • 接口:
    • 通過AXI4-Stream通道連接傳輸層。

    • AXI4-Lite接口連接配置層。

    • 串行接口連接高速收發器(通常使用FPGA集成的GT接口)。

寄存器空間

  • 能力寄存器空間(CAR)

  • 命令和狀態寄存器空間(CSR)

均在邏輯層實現。

HELLO包格式

  • 標準化包頭域,包頭與數據分離傳輸。

  • Size域規則
    • 值 = 傳輸字節總數 - 1(有效范圍0~255,對應實際1~256字節)。

    • 需與RapidIO包的size/address/wdptr域一致。

    • 因AXI4-Stream的tdata為8字節,需分情況處理:
      • 數據量 < 8字節

      • 數據量 > 8字節


SRIO事務類型及關系梳理

1. 直接I/O(DMA)事務

事務類型特性應用場景
NWRITE寫操作,無需響應高效無確認數據傳輸
NWRITE_R寫操作,需響應需數據完整性的場景
SWRITE流式寫(數據長度需為8B整數倍)連續數據流(如視頻)
NREAD讀操作,返回響應包+數據讀取目標地址數據

2. 消息傳遞事務

事務類型特性應用場景
DOORBELL短消息通知(如中斷觸發)輕量級事件通知
MESSAGE長消息傳輸(郵箱路由)動態通信/軟件管理交互

3. 維護事務

  • MAINTENANCE READ/WRITE:讀寫配置寄存器(初始化/錯誤處理)。

事務對比

特性直接I/O事務消息傳遞事務
效率高(硬件控制)低(軟件介入)
可靠性NWRITE無確認依賴軟件處理
延遲較高
典型場景DSP與FPGA間實時通信多處理器系統通知

事務類型對應表如下,更具體地可以見PG007開發手冊P73頁。


SRIO事務時序仿真

仿真步驟(Vivado 2020.1)

  1. 創建工程及SRIO IP核。

  2. 右鍵IP核 → "Open IP Example Design"。

  3. 運行仿真,添加request/response模塊觀察信號。

  1. 運行約1000us捕獲事務動作。

關鍵事務時序

  1. MAINTENANCE READ REQUEST
    • 接收請求,無響應(val_tresp_tvalid=0)。

  1. SWRITE請求(發送)

    • val_ireq_tvalid拉高,ftype=6, ttype=0

  2. SWRITE請求(接收)

    • response模塊驗證事務類型。
      ftype(6)和ttype(0)

  3. NWRITE_R請求(發送)

    • 請求包發送。

  4. NWRITE_R請求(接收+響應)

    • 接收請求后發送響應包,和發送的請求包一致,該事務會產生響應,在一段時間后可以看到val_tresp_tvalid拉高一個周期,發送響應包val_tresp_tdata = 64’h25d0_4000_0000_0000。

  5. NREAD請求(發送)

    • 僅包頭無數據。

  6. NREAD請求(接收)

    • 接收模塊返回響應包+數據。

  1. NREAD響應(發送)
    • size=8'h3f → 發送64字節數據(8個周期)。

  1. NREAD響應(接收)
    • 接收包頭(val_iresp_tdata=64'h4bd8400000000000)及數據。 跟在包頭后面的是數據0。


自定義事務傳輸仿真

計劃仿真NWRITE和SWRITE兩種事務類型,通過FIFO實現用戶層時鐘到IP核跨時鐘傳輸以及數據緩存的功能,方便用戶直接使用。

移植srio_example工程

  1. 配置參數

    parameter?SIM_VERBOSE????????????=?1,??//?仿真詳細日志
    parameter?VALIDATION_FEATURES????=?0,??//?關閉驗證功能
    parameter?QUICK_STARTUP??????????=?1,??//?啟用快速啟動
    parameter?STATISTICS_GATHERING???=?0,??//?關閉統計功能
    parameter?C_LINK_WIDTH???????????=?4???//?4x通道
  2. 將示例工程文件夾import拷貝到自己工程中

  1. 添加文件
    除了仿真文件其余都加進去。

添加好的工程目錄如下:

搭建好總的框架,并對SRIO官方案例工程進行一些修改

  1. 創建收發模塊

  • 首先創建好兩個模塊,分別是Message_TX數據發送模塊和Message_RX數據接收模塊。

  1. 創建頂層模塊

  • 創建一個頂層模塊srio_demo。

  1. 對srio_example模塊進行修改

  • 要提前對srio_example模塊進行一些處理,添加一些信號給數據收發模塊用。(下面圖片中左邊時示例程序,右邊是對其修改后的程序)

  • 首先把一些不必要的報告和一些附加功能屏蔽掉

  • 然后把port_initialized和link_initialized兩個信號引出來

  • 然后把log_clk用戶時鐘引出來給外部使用

  • 然后把ireq和treq相關AXI總線信號引出來

  • 最后就是把IP核的其他輸入信號賦上一些初始值,主要是iresp和tresp,保證IP核正常運行。

  • 最終修改好之后整體框架如下圖:

加上FIFO IP核,并配置好相應參數,編寫好發送模塊

  • 這里描述簡單些,例化好FIFO IP,并給FIFO相關信號賦值

  • 最后編寫發送模塊的剩余代碼,發送模塊狀態轉換圖如下圖所示

加上FIFO IP核,并配置好相應參數,編寫好接收模塊

  • 這里描述簡單些,接收模塊的狀態轉換圖如下圖所示

編寫仿真程序,仿真調試

  • 首先創建仿真文件

  • 把頂層文件的端口添加到仿真文件中

  • 例化兩個端,分別是PORTA端和PORTB端,兩個端TX和RX引腳反接,并設置A端作為發送端,B端設為接收端

  • 產生時鐘和復位信號

  • 添加上一些監測信號

  • 編譯完成后,點擊仿真,添加PORTA的tx模塊和PORTB的rx模塊進波形窗口

  • 繼續運行仿真,看一下是否link上。在58us左右的時候,port_initialized拉高

  • 在77us左右link_initialized拉高,表示建鏈成功。一般port_initialized&link_initialized作為初始化完成的標志。

  • 在94us左右treq_tdata不會有動作,跟之前示例工程有區別,這是沒有傳數過去,是正常的。

  • 編寫傳輸數據流程:

  • 點擊開始仿真,100us時tx_vld正常拉高,tx_data數據傳輸也正常。

  • ireq信號啟動發送流程,時間大概再100.6us左右,這里幀頭是0x006020fcd0000600,事務類型是SWRITE。

  • PORTB的接收模塊的treq信號在101.6us左右有動作。

  • 接收模塊輸出的結果如下圖所示,即rx_vld信號拉高之后開始數據接收的數據,不包括SRIO幀頭。

至此,仿真驗證結束,結果符合預期。

本期分享結束,感謝大家看完,私信我可獲取相關源碼工程

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

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

相關文章

深度學習:簡介與任務分類總覽

一、什么是深度學習&#xff1f;1.1 深度學習的定義深度學習&#xff08;Deep Learning&#xff09;是機器學習的一種特殊形式&#xff0c;它依賴于具有多層結構的神經網絡自動從數據中學習特征并完成任務&#xff0c;如圖像識別&#xff0c;語音識別&#xff0c;自然語言處理等…

MSPM0開發學習筆記:二維云臺畫圖(2025電賽 附源代碼及引腳配置)

前言 今年的電賽&#xff08;2025&#xff09;&#xff0c;很多題都與云臺相關&#xff0c;因此為備戰電賽&#xff0c;博主這邊也是準備了一個由兩個42步進電機驅動的云臺并提前進行調試&#xff0c;避免賽題出來之后手忙腳亂的&#xff0c;這邊的兩個42步進電機采用同一個驅…

借助 Wisdom SSH 的 AI 助手構建 Linux 開發環境

借助Wisdom SSH的AI助手構建Linux開發環境 在Linux系統的開發場景中&#xff0c;快速、準確地搭建開發環境至關重要。Wisdom SSH憑借其強大的AI助手&#xff0c;能極大簡化這一過程&#xff0c;其官網為ssh.wisdomheart.cn。以下以在Ubuntu 22.04服務器上構建Python開發環境&am…

Python 程序設計講義(44):組合數據類型——集合類型:創建集合

Python 程序設計講義&#xff08;44&#xff09;&#xff1a;組合數據類型——集合類型&#xff1a;創建集合 目錄Python 程序設計講義&#xff08;44&#xff09;&#xff1a;組合數據類型——集合類型&#xff1a;創建集合一、集合的特征二、創建集合&#xff1a;使用set()函…

10 - 大語言模型 —Transformer 搭骨架,BERT 裝 “雙筒鏡”|解密雙向理解的核心

目錄 1、為什么 BERT 能 “懂” 語言&#xff1f;先看它的 “出身” 2、核心邏輯 2.1、“自學階段”—— 預訓練&#xff0c;像嬰兒學說話一樣積累語感 2.1.1、簡述 2.1.2、核心本事&#xff1a;“雙向注意力”&#xff0c;像人一樣 “聚焦重點” 2.2、“專項復習”—— …

【Spring Boot 快速入門】四、MyBatis

目錄MyBatis&#xff08;一&#xff09;入門簡介MyBatis 入門LombokMyBatis 基礎操作數據準備刪除預編譯新增更新查詢XML 映射文件MyBatis&#xff08;一&#xff09;入門 簡介 MyBatis 是一款 優秀的持久層框架&#xff0c;它支持 自定義 SQL、存儲過程以及高級映射&#xf…

Spring IOC 基于Cglib實現含構造函數的類實例化策略

作者&#xff1a;小凱 分享、讓自己和他人都能有所收獲&#xff01; 一、前言 技術成長&#xff0c;是對場景設計細節不斷的雕刻&#xff01; 你覺得自己的技術什么時候得到了快速的提高&#xff0c;是CRUD寫的多了以后嗎&#xff1f;想都不要想&#xff0c;絕對不可能&#xf…

composer 常用命令

### 設置鏡像源全局設置composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/當個項目設置composer config repo.packagist composer https://mirrors.aliyun.com/composer/恢復官方源composer config -g --unset repos.packagist### 常用源阿里云…

【python】Python爬蟲入門教程:使用requests庫

Python爬蟲入門教程&#xff1a;使用requests庫 爬蟲是數據獲取的重要手段&#xff0c;下面我將通過一個完整的示例&#xff0c;教你如何使用Python的requests庫編寫一個簡單的爬蟲。我們將以爬取豆瓣電影Top250為例。 【python】網絡爬蟲教程 - 教你用python爬取豆瓣電影 Top…

OpenCV圖像縮放:resize

圖像縮放是圖像處理中的基礎操作之一。無論是圖像預處理、數據增強還是圖像金字塔構建&#xff0c;cv::resize 都是我們最常用的函數之一。但你是否注意到&#xff0c;在 OpenCV 中同時還存在一個名為 cv::Mat::resize 的方法&#xff1f;這兩個函數雖然名字類似&#xff0c;但…

汽車、航空航天、適用工業虛擬裝配解決方案

一、現狀在制造業數字化轉型浪潮中&#xff0c;傳統裝配過程仍面臨諸多挑戰&#xff1a;物理樣機試錯成本高、裝配周期冗長、工藝優化依賴經驗、跨部門協作效率低下……如何打破“試錯-返工”的惡性循環&#xff1f;目前總裝工藝通過DELMIA、NX、Creo等工程軟件進行工藝裝配驗證…

頁面跳轉和前端路由的區別

傳統方式&#xff1a;通過改變瀏覽器地址欄的 URL 來實現window.location.href /new-page<a href"/new-page">跳轉到新頁面</a>會導致整個頁面重新加載會觸發瀏覽器向服務器發送新的請求頁面狀態不會保留&#xff0c;所有資源重新加載可以避免新上線的內…

C/C++核心知識點詳解

C/C核心知識點詳解 1. 變量的聲明與定義&#xff1a;內存分配的本質區別 核心概念 在C/C中&#xff0c;變量的聲明和定義是兩個完全不同的概念&#xff1a; 聲明&#xff08;Declaration&#xff09;&#xff1a;告訴編譯器變量的名稱和類型&#xff0c;但不分配內存空間定義&a…

物聯網發展:從概念到應用的演變歷程

物聯網的發展歷程是一部技術革新與社會需求共同驅動的進化史&#xff0c;其演變可劃分為概念萌芽、技術積累、應用拓展和智能融合四個階段&#xff0c;每個階段均以關鍵技術突破或社會需求變革為標志&#xff0c;最終形成萬物互聯的智能生態。以下是具體演變歷程&#xff1a;一…

一個人開發一個App(數據庫)

后端要保存數據&#xff0c;我還是選擇了關系型數據庫Mysql, 因為其它的不熟悉。 flutter端這次我選擇的是ObjectBox&#xff0c;以前都是直接用的sqlite3&#xff0c;看對比ObjectBox效率比sqlite3高許多&#xff0c;這次前端為了用戶體驗&#xff0c;我需要緩存數據&#xff…

天銘科技×藍卓 | “1+2+N”打造AI驅動的汽車零部件行業智能工廠

7月24日&#xff0c;杭州天銘科技股份有限公司&#xff08;簡稱 “天銘科技”&#xff09;與藍卓數字科技有限公司&#xff08;簡稱 “藍卓”&#xff09;簽訂全面戰略合作協議。天銘科技董事長張松、副總經理艾鴻冰&#xff0c;藍卓副董事長譚彰等領導出席簽約儀式&#xff0c…

技術復盤報告:Vue表格中多行文本字段數據保存丟失問題

1. 問題背景 在一個基于 Vue 2.0 和 ElementUI 的復雜數據維護頁面中&#xff0c;用戶報告了一個偶發但嚴重的問題&#xff1a;在表格中編輯一個多行文本&#xff08;textarea&#xff09;字段時&#xff0c;輸入的內容有時會在點擊“保存”后丟失。 具體表現&#xff1a; 前端…

#C語言——學習攻略:深挖指針路線(四)--字符指針變量,數組指針變量,二維數組傳參的本質,函數指針變量,函數指針數組

&#x1f31f;菜鳥主頁&#xff1a;晨非辰的主頁 &#x1f440;學習專欄&#xff1a;《C語言學習》 &#x1f4aa;學習階段&#xff1a;C語言方向初學者 ?名言欣賞&#xff1a;"暴力解法是上帝給的&#xff0c;優化解法是魔鬼教的。" 目錄 1. 字符指針變量 1.1 使…

SpringBoot收尾+myBatis plus

一、數據傳遞返回值為:字符串package com.apesource.springboot_web_04.controller;import com.apesource.springboot_web_04.pojo.Emp; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping;/*** 返回值為:字符…

基于 Spring Boot 實現動態路由加載:從數據庫到前端菜單的完整方案

在后臺管理系統中&#xff0c;不同用戶角色往往擁有不同的操作權限&#xff0c;對應的菜單展示也需動態調整。動態路由加載正是解決這一問題的核心方案 —— 根據登錄用戶的權限&#xff0c;從數據庫查詢其可訪問的菜單&#xff0c;封裝成前端所需的路由結構并返回。本文將詳細…