0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

SRIO介紹及xilinx的vivado 2017.4中生成srio例程代碼解釋

FPGA設計論壇 ? 來源:FPGA設計論壇 ? 2024-12-10 16:24 ? 次閱讀

1. 概述

本文是用于記錄srio的學習情況,以及一些對xilinx的vivado 2017.4中生成srio例程代碼的解釋。

2. 參考文件

《pg007_srio_gen2》

3. SRIO協(xié)議介紹

本處將從SRIO的數(shù)據(jù)流,數(shù)據(jù)協(xié)議,常用FPGA支持模式,以及IP例程中的時鐘大小計算等部分介紹SRIO的情況。

3.1 SRIO的數(shù)據(jù)流

SRIO通過生成IP后,通常情況下主要使用的接口為四組:ireq,iresp,treq,tresp。每個IP生成后都有這四組接口,即可以同時用于發(fā)送數(shù)據(jù),接收數(shù)據(jù),發(fā)送響應數(shù)據(jù),接收響應數(shù)據(jù)。而這些接口間的信號流向如下圖所示:

de37d6b4-b5df-11ef-93f3-92fbcf53809c.jpg

即其信號流為IREQ發(fā)出給TREQ,TRESP發(fā)出給IRESP。

3.2 SRIO的數(shù)據(jù)協(xié)議

SRIO傳輸與響應的包類型很多,具體看手冊P73-P74頁。

在使用Xilinx的ip核時,通常用的都是HELLO包,所以這里指給HELLO包的格式。如下圖所示。Packet 中的具體符號表示意義請查看手冊P76-P77頁。其中的size為一包傳輸byte的數(shù)據(jù)量,范圍為1-256 bytes。

de5264de-b5df-11ef-93f3-92fbcf53809c.jpg

其典型的傳輸數(shù)據(jù)的用戶接口代碼的波形協(xié)議如下圖所示:

de5e83b8-b5df-11ef-93f3-92fbcf53809c.jpg

3.3 SRIO常用FPGA支持的模式

de6dd25a-b5df-11ef-93f3-92fbcf53809c.jpg

3.4 SRIO例程代碼的時鐘計算

refclk可使用時鐘如下圖table3-3所示。其中典型的時鐘計算如Table3-4表頭所示。:

gt_clk = line_rate/20;

gt_pcs_clk = line_rate/40;

phy_clk = (gt_clk*link_width)/4;

log_clk = phy_clk;

cfg_clk = phy_clk;

de86fd5c-b5df-11ef-93f3-92fbcf53809c.jpg

de9a40ba-b5df-11ef-93f3-92fbcf53809c.jpg

4. SRIO的例程代碼結構

SRIO生成例程后,其例程結構如下圖所示??粗?個文件,但常規(guī)情況下與我們相關的只有只有兩個文件,即下圖高亮的兩個文件:

srio_request_gen_srio_gen2_0(發(fā)送數(shù)據(jù)模塊);

srio_response_gen_srio_gen2_0(接收數(shù)據(jù)模塊)

deaee060-b5df-11ef-93f3-92fbcf53809c.jpg

4.1 SRIO發(fā)送模塊詳解

SRIO發(fā)送模塊中主要有兩部分代碼,發(fā)送數(shù)據(jù)部分(ireq),發(fā)送響應數(shù)據(jù)部分(iresp)。接收部分端口如下圖所示:

decf2564-b5df-11ef-93f3-92fbcf53809c.jpg

4.1.1 發(fā)送數(shù)據(jù)部分代碼功能說明

發(fā)送的包頭數(shù)據(jù)的來源為“request_data_out = instruction[request_ address]”,即數(shù)據(jù)是從`include "instruction_list.vh"文件中調入的。而選擇其文件中的哪些數(shù)據(jù)則是根據(jù)request_address算來的,具體如下圖部分所示。

dedae2e6-b5df-11ef-93f3-92fbcf53809c.jpg

最終包頭的格式為:

deedcdd4-b5df-11ef-93f3-92fbcf53809c.jpg

而包中去掉包頭后傳輸?shù)臄?shù)據(jù)為每8位遞增數(shù)據(jù)數(shù)據(jù),具體如下圖所示。

df0b0c46-b5df-11ef-93f3-92fbcf53809c.jpg

重點:發(fā)送用戶自己的數(shù)據(jù)與包頭時設置,將go的值設置為0x01。

df27692c-b5df-11ef-93f3-92fbcf53809c.jpg

4.1.2 接收響應部分的代碼功能詳解

接收響應部分主要功能是在期望的得到回應的包類型時,檢查是否回應的對應包頭類型。

而判斷包頭類型是否正確主要是根據(jù)預判的ftype(expected_ftype)時,檢查接收到的ttype是否為協(xié)議規(guī)定的類型。判斷的方式為下圖位置:

df300d52-b5df-11ef-93f3-92fbcf53809c.jpg

4.2 SRIO接收模塊詳解

SRIO接收模塊中主要有兩部分代碼,接收數(shù)據(jù)部分(treq),接收響應數(shù)據(jù)部分(tresp)。接收部分端口如下圖所示:

df3c105c-b5df-11ef-93f3-92fbcf53809c.jpg

4.2.1 接收數(shù)據(jù)部分的代碼功能說明

接收部分主要是通過解析接收端口的信號,實時的解析如下圖的信息,以及first_beat(beat為1個時鐘的*_data),之后將每包數(shù)據(jù)去掉包頭后丟入“RAMB36SDP(local_data_store)”中,但是每一包丟入數(shù)據(jù)時的首地址是current_addr[10:3]。

df514134-b5df-11ef-93f3-92fbcf53809c.jpg

4.2.2 發(fā)送響應部分的代碼功能說明

響應部分的代碼分兩部分,第一部分是響應的包頭信號部分,第二部分是響應的數(shù)據(jù)部分。

包頭信號部分信息與響應的包類型相關,如下圖所示,詳細信息參考《pg007》的p76頁。

df5f05d0-b5df-11ef-93f3-92fbcf53809c.jpg

數(shù)據(jù)部分的信息主要是提取treq中輸入的信號。但提取的方式是根據(jù)starting_read_addr = {1'b0, response_data_out[29:22]}開始提取數(shù)據(jù)輸出,即是根據(jù)current_addr[10:3]的地址提取數(shù)據(jù)。也就是說這個提取數(shù)據(jù)的位置是根據(jù)輸入數(shù)據(jù)包中的地址中的一部分作為首地址來定位的數(shù)據(jù)開始地方。

當然是否需要反饋數(shù)據(jù)部分得根據(jù)接收到的包頭類型而定,有些包只需要反饋包頭不需要數(shù)據(jù),有些包不需要進行反饋,詳情參考手冊P73頁。

保證存入“RAMB36SDP(response_queue_inst)”的包頭判斷信息無誤的依據(jù)是RAMB36SB的寫使能WREN(generate_a_response),generate_a_response是在接收到的first_beat時,且這個包頭是需要反饋數(shù)據(jù)的包頭時才會拉高使能。需要反饋的依據(jù)在《pg007》的Table 3-1,具體信息如下圖所示:

df6ddb1e-b5df-11ef-93f3-92fbcf53809c.jpg

5. 疑點

疑點1:

雖然理論上來說反饋的數(shù)據(jù)提取數(shù)據(jù)是根據(jù)包頭信息在同一個位置提取的,那么反饋的數(shù)據(jù)就和接收的對應包數(shù)據(jù)相同。但是由于接收到的數(shù)據(jù)包頭的地址可能相同,至少current_addr[10:3]有很大幾率相同,那么就會存在數(shù)據(jù)覆蓋的現(xiàn)象,那么就會導致反饋的數(shù)據(jù)不是想要的數(shù)據(jù),即返回的數(shù)據(jù)與接收到的數(shù)據(jù)不同。

疑點2:

為何把“current_addr[23:16] == 8'h12”作為pull_from_store(從存儲地址開始拉高)?

答:這個只是對應SRIO例程的發(fā)射數(shù)據(jù),發(fā)射數(shù)據(jù)自定義的“真實起始地址”,參考手冊P161,如下圖所示。在自己使用時可以屏蔽掉與這個相關的信號。

df7e87ca-b5df-11ef-93f3-92fbcf53809c.jpg

原文鏈接:

https://openatomworkshop.csdn.net/67459da63a01316874d8e7a6.html

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • sRIO
    +關注

    關注

    1

    文章

    31

    瀏覽量

    21011
  • 代碼
    +關注

    關注

    30

    文章

    4788

    瀏覽量

    68602
  • Vivado
    +關注

    關注

    19

    文章

    812

    瀏覽量

    66523

原文標題:SRIO簡介與Xilinx SRIO ip核例程詳解

文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Xilinx_Vivado_SDK的安裝教程

    首先是去官網下載安裝包:https://www.xilinx.com/support/download.html。 下載這個最大的、支持所有的 OS 如 Windows/Linux 的安裝包。 下載
    的頭像 發(fā)表于 11-16 09:53 ?939次閱讀
    <b class='flag-5'>Xilinx_Vivado</b>_SDK的安裝教程

    【米爾-Xilinx XC7A100T FPGA開發(fā)板試用】+03.SFP光口測試(zmj)

    。 2.GTP-iBERT測試 在vivado打開hardware manager,將剛才生成的bit文件下載到開發(fā)板。下載完成后,點擊auto-detec links。點擊Re
    發(fā)表于 11-12 16:54

    如何自動生成verilog代碼

    介紹幾種自動生成verilog代碼的方法。
    的頭像 發(fā)表于 11-05 11:45 ?311次閱讀
    如何自動<b class='flag-5'>生成</b>verilog<b class='flag-5'>代碼</b>

    FPGA的SRIO接口使用應注意的事項

    據(jù)傳輸速率、鏈路寬度、地址映射等,確保通信能夠按照預期進行。 錯誤處理與恢復 : 在SRIO通信過程,可能會遇到各種錯誤情況(如鏈路錯誤、數(shù)據(jù)包錯誤等)。設計并實現(xiàn)有效的錯誤處理機制,以便
    發(fā)表于 06-27 08:33

    怎么建設高性能多核DSP+FPGA實驗室?一起來河北工程大學看看

    主核工程與從核工程。主核工程編譯后默認生成的可執(zhí)行文件適用于DSP ETH1網口,如需重新生成適用于DSP ETH0網口的可執(zhí)行文件,請參考關鍵代碼小節(jié)進行源碼修改。從核工程編譯后生成
    發(fā)表于 06-07 14:11

    交換板設計方案原理圖:473-SRIO_Switch_Gen2_ZD交換板卡

    SRIO_Switch_Gen2_ZD交換板卡為基于IDT?SRIO?Gen2系列SRIO交換芯片,采用CPCI-ZD平臺架構的數(shù)據(jù)交換板??梢詾楦咚賹崟r信號處理任務提供可靠保障。
    的頭像 發(fā)表于 05-13 11:40 ?834次閱讀
    交換板設計方案原理圖:473-<b class='flag-5'>SRIO</b>_Switch_Gen2_ZD交換板卡

    FPGA與SRIO調試步驟

     FPGA(現(xiàn)場可編程門陣列)和DSP(數(shù)字信號處理器)之間通過SRIO接口進行調試通常需要以下步驟。
    的頭像 發(fā)表于 04-19 11:48 ?1406次閱讀

    Vivado 使用Simulink設計FIR濾波器

    設計的濾波器性能相同。 xilinx在新版本的vivado中將simulink的WaveScope刪掉了,信號觀測方式換為和vivado debug相同的窗口,更為靈活和人性化。
    發(fā)表于 04-17 17:29

    srio交換芯片有啥用

    SRIO(Serial RapidIO)交換芯片在多個領域具有廣泛的應用和重要的作用。
    的頭像 發(fā)表于 03-26 15:09 ?888次閱讀

    srio交換芯片屬于什么種類

    SRIO交換芯片屬于高速網絡通信芯片的一種,具體來說,它們是基于RapidIO(快速輸入輸出)技術的串行通信芯片。RapidIO是一種用于高性能嵌入式系統(tǒng)的互連技術,它支持多種通信協(xié)議和拓撲結構,適用于需要高速、低延遲通信的應用場景。
    的頭像 發(fā)表于 03-21 16:33 ?812次閱讀

    srio交換芯片的原理和用途

    SRIO(Serial RapidIO)交換芯片是一種基于RapidIO(快速輸入輸出)技術的高速網絡通信芯片。RapidIO是一種高性能、低延遲的網絡通信標準,專為嵌入式系統(tǒng)設計,廣泛應用于通信基礎設施、軍事和航空、工業(yè)自動化以及汽車等領域。
    的頭像 發(fā)表于 03-21 16:30 ?1410次閱讀

    srio交換芯片是什么?srio交換芯片的原理和作用

    SRIO(Serial RapidIO)交換芯片是一種高性能的通信芯片,專門設計用于實現(xiàn)基于SRIO協(xié)議的數(shù)據(jù)交換和傳輸。SRIO是一種點對點串行通信協(xié)議,廣泛應用于嵌入式系統(tǒng)、高性能計算、網絡通信
    的頭像 發(fā)表于 03-16 16:40 ?3430次閱讀

    在GHDS中生成Sprite順序,程序無法正常運行是怎么回事?

    你好:我有一個關于在GHDS中生成Sprite順序的問題,當我在GHDS建立多個Sprite,其中包括單個符號片、通過刷新圖片的幾組數(shù)據(jù),和背景圖片,它們是否需要一次性的按照順序建立好。 問題背景
    發(fā)表于 02-22 07:23

    如何禁止vivado自動生成 bufg

    Vivado禁止自動生成BUFG(Buffered Clock Gate)可以通過以下步驟實現(xiàn)。 首先,讓我們簡要了解一下什么是BUFG。BUFG是一個時鐘緩沖器,用于緩沖輸入時鐘信號,使其更穩(wěn)
    的頭像 發(fā)表于 01-05 14:31 ?2187次閱讀

    Vivado時序問題分析

    有些時候在寫完代碼之后呢,Vivado時序報紅,Timing一欄有很多時序問題。
    的頭像 發(fā)表于 01-05 10:18 ?2160次閱讀