精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

xilinx zynq RapidIO系統的初始化啟動過程概述

454398 ? 來源:CSDN 博主 ? 作者:黑客三遍豬 ? 2020-12-26 11:22 ? 次閱讀

參考

書籍《RapidIO The Embedded System Interconnect》
xilinx手冊pg007《Serial RapidIO Gen2 Endpoint v4.1 LogiCORE IP Product Guide》
Zynq-Linux移植學習筆記之14-RapidIO驅動開發

host初始化

直接看RapidIO的初始化,一些底層的比如物理層鏈路層之類的不需要關心,用到了再去看,畢竟都是基于芯片或者IP來開發。先從高層了解這個過程。

系統啟動過程概述

1. host CPU獲取引導代碼,啟動,如果有兩個host,則兩者是同時啟動的。
2. 開始執行系統探測和枚舉算法
3. 枚舉所有器件并將相關器件信息記錄到器件數據庫,建立host和所有endpoint之間的路由。
? 計算并配置host和所有endpoint之間的最優路徑。
? 用最優路徑信息配置switch。
? 更新路由表。
4. 映射地址空間。

上面提到的最優路徑,就是所謂的枚舉算法的目的,可以是最短路徑或者包含一些用戶約束。

啟動要求

系統初始化之后,所有器件都會擁有一個ID,在系統初始化之前,按照下面設置。RapidIO系統應該只有一個引導代碼器件。
? 設置endpoint ID為0xFF(0xFFFF)。
? 設置引導代碼器件ID為0xFE(0x00FE)。
? 設置host ID為0x00(0x0000)。

枚舉

枚舉過程中,將給每個endpoint分配唯一的器件ID,為了增強容錯性,RapidIO系統可以有兩個host,經過競爭,最終只有一個host來完成枚舉,如果主機枚舉過程失敗并發生超時事件,則另一主機重新枚舉。枚舉算法根據器件ID大小設置優先級,ID大的host競爭獲勝,在枚舉同一個endpoint時會發生競爭,失敗host主動退出枚舉,枚舉結束之后,其他主機可以通過被動發現(passively discovery)收集網絡中的路由拓撲信息。所以host的ID可以設置為0x00(0x0000)和0x01(0x0001),其中0x01的優先級更高。host應當將自己的主機使能位置1,switch沒有這個位,當host釋放對失敗主機的鎖定時,枚舉完成,失敗host自己檢測是否被鎖定和釋放鎖定。在開放式(open)8位器件ID系統中,如果host枚舉失敗,那么失敗主機重新枚舉時,必須等待15秒。在閉合式(closed)或者16位器件ID系統中,超時等待時間需要設計。

Xilinx Srio IP

xilinx zynq RapidIO系統配置

xilinx zynq RapidIO系統配置

xilinx zynq RapidIO系統配置

列舉用到的4個寄存器,詳細參考pg007。

1. Port General Control CSR,使能Master Enable。

xilinx zynq RapidIO系統配置

2. Base Device ID CSR,設置器件ID,host可設為1,默認值在vivado里設置。

xilinx zynq RapidIO系統配置

3. Host Base Device ID Lock CSR,器件鎖定寄存器,復位之后,這個寄存器只能被寫一次(之后被鎖定),配置之后如果寫入值和寄存器值相等,則寄存器值被復位為0xFFFF,向該寄存器寫入0xFFFF不會鎖定寄存器。

xilinx zynq RapidIO系統配置

4. Maintenance Request Information Register,維護包配置寄存器,地址在0x10100,低16位用于配置目的ID,當用IP發維護包之前,需要配置這個寄存器。

xilinx zynq RapidIO系統配置

5. Processing Elements Features CAR,表示這個設備提供的功能,可以是Bridge,Memory,Processor,Switch 4種,SRIO IP支持前3種(endpoint),支持16位地址模式,可在vivado中通過GUI設置。

xilinx zynq RapidIO系統配置

IDT CPS1848

1. CPS1848結構圖,注意的是port從0到17,即0x00到0x11。

2. CPS1848路由方式,每個端口提供256個緩存來存儲設備路由表,還有256個緩存來存儲域路由表,這樣設計的目的是,在大型的系統里會用到域路由表,大型系統有很多底板,每個底板上也會有很多子板,域路由表用來選擇包被發送到哪一塊板卡,而設備路由表用來將包發送到某個處理單元(某個芯片的SRIO端口)。RIO_DOMAIN由RapidIO Domain Register寄存器確定。

xilinx zynq RapidIO系統配置

3. 單播(unicast)編程,CPS1848每個端口都有自己的路由表,所以可以支持虛擬網絡,路由配置時,有寄存器The Route Port Select Register selects來控制路由表項是添加到所有端口還是某個端口。路由配置主要是三個寄存器Standard Route Table Entries Configuration destID Select CSR,Standard Route Table Entry Configuration Port Select CSR和Standard Route Table Entry Default Port CSR。

xilinx zynq RapidIO系統配置

4. 多播編程,用到再說。

5. 上面配置路由的方法是非直接方式(Indirect Programming),配置路由需要操作多次,在多(線程)設備的環境下要做互斥,CPS1848支持另外一種直接方式(Direct Programming)可以支持這種情況。

xilinx zynq RapidIO系統配置

6. Switch Port Information CAR寄存器,這個寄存器很重要,在多個Switch互聯的系統里,用于確定拓撲關系。

xilinx zynq RapidIO系統配置

7. Port General Control CSR寄存器,會用到DISCV位,是發現標志位。

xilinx zynq RapidIO系統配置

8. Port Error and Status CSR寄存器,第1位PORT_OK。

xilinx zynq RapidIO系統配置

9. Host Base deviceID Lock CSR寄存器,同xilinx SRIO IP。

xilinx zynq RapidIO系統配置

zynq SRIO系統初始化過程

1. 使能host模式。
2. 配置ID。
3. 配置CPS1848路由,使能端口收發(手冊默認是打開的)。
4. 鎖定host。
5. 搜索系統拓撲。

鎖定host

1. 讀取Lock ID CSR,如果寄存器值等于host ID,則判定已經鎖定,退出,否則進入2。
2. 寫入host ID,再讀取host ID,如果寄存器值大于host ID則進入退避狀態,如果小于host ID,則已經被鎖定(但和另一個host沖突),進入等待退避狀態,等待另一個host退避。如果等于host ID,則鎖定成功。

搜索系統拓撲

這里只考慮Switch是CPS1848的情況,TSI578原理是一致。

1. 如果這個CPS1848是直接與host zynq相連的switch。

? 搜索CPS1848,設置0x13c寄存器Port General Control CSR的DISCV位,表示這個switch已經被發現,設置Component Tag CSR,它是一個設備的身份標識。

? 讀0x14寄存器Switch Port Information CAR得到port數量,就是18。

? 循環搜索每個port,如果是host port則使能端口收發,如果是其他port,讀取鏈路狀態,如果正常,用默認ID 0xFF配置路由,使能端口收發,然后嘗試鎖定該端口設備(Endpoint或Switch),鎖定過程和鎖定host是一樣的。
-如果鎖定成功,讀取Processing Elements Features CAR寄存器,等到Function,判斷設備類型,決定下一步拓撲方式。如果是Endpoint類型,關閉Master Enable,置位Discovered,分配ID號,配置該port的路由表。如果是Switch類型,則遞歸調用Switch枚舉過程。
-如果是已經鎖定狀態(存在環路),直接更新拓撲,不做任何配置。

2. 如果這個CPS1848不和host直接相連。

? 設置DISCV位,得到與上級Switch相連的端口號,設置host的路由,設置默認路由為到host的端口。
? 同上。
? 同上。

現在拓撲關系已經搜索出來了。下面就是配置路由,因為上述搜索過程的路由配置不一定是最優配置,也不滿足用戶的需求。 所以現在需要按照設計需求,生成路由表然后寫到各個Switch。

zynq SRIO驅動

這里實現Linux用戶態的驅動,數據結構定義,

struct srioEndpoint
{
unsigned int devId;
unsigned int hopCnt;
struct srioSwitch* pSw;
unsigned int port;
};

#define SRIO_SW_MAX_PORT 18//get from cps1848
struct srioSwitch
{
unsigned int hopCnt;
unsigned int componentTag;//component tag

unsigned int portNum;
struct srioEndpoint* pEp[SRIO_SW_MAX_PORT];//port connected
unsigned int epNum;
unsigned int portEp[SRIO_SW_MAX_PORT];//for get ep info for certain port fastly
struct srioSwitch* pSw[SRIO_SW_MAX_PORT];//switch connected, complicate and will be implenmented laterly
unsigned int swNum;
unsigned int portSw[SRIO_SW_MAX_PORT];//for get sw info for certain port fastly
struct srioSwitch* pSwParent;
unsigned int portParent;
};

#define SRIO_SYS_MAX_EP_NUM 64
#define SRIO_SYS_MAX_SW_NUM 4
struct srioSystem
{
struct srioEndpoint epInfo[SRIO_SYS_MAX_EP_NUM];
unsigned int epNum;
struct srioSwitch swInfo[SRIO_SYS_MAX_SW_NUM];
unsigned int swNum;
};

編輯:hfy


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

    關注

    71

    文章

    2163

    瀏覽量

    121004
  • RapidIO
    +關注

    關注

    1

    文章

    38

    瀏覽量

    20798
  • Zynq
    +關注

    關注

    9

    文章

    608

    瀏覽量

    47125
收藏 人收藏

    評論

    相關推薦

    淺談zynq啟動,BootROM和FSBL等的執行過程

    可在非POR復位后直接運行(不經過硬件啟動),其內容固化在內部ROM中,不能修改,主要初始化MMU和一些系統資源(以使其滿足
    發表于 11-23 14:53 ?9307次閱讀
    淺談<b class='flag-5'>zynq</b><b class='flag-5'>啟動</b>,BootROM和FSBL等的執行<b class='flag-5'>過程</b>

    RT-Thread自動初始化詳解

    初始化函數不需要被顯式調用,只需要在函數定義處通過宏定義的方式進行申明,就會在系統啟動過程中被執行,非常的方便。 1 普通初始化 前面也講了,我們在寫單片機的程序時,需要對硬件進行初始化
    的頭像 發表于 06-25 21:38 ?1.1w次閱讀
    RT-Thread自動<b class='flag-5'>初始化</b>詳解

    自動初始化機制原理詳解

    自動初始化機制是指初始化函數不需要被顯式調用,只需要在函數定義處通過宏定義的方式進行申明,就會在系統啟動過程中被執行。這篇文章就來探索一下其中的奧秘, 簡單理解其原理!
    的頭像 發表于 12-16 09:33 ?965次閱讀
    自動<b class='flag-5'>初始化</b>機制原理詳解

    Linux內核啟動過程和Bootloader(總述)

    初始化過程中一般都會初始化一個串口做為內核的控制臺,這樣內核在啟動過程中就可以通過串口輸出信息以便開發者或用戶了解系統
    發表于 08-18 17:35

    Linux和Windows系統啟動過程的簡單分析

    AT PPC.....bootloader特性:以命令為基礎。一旦引導啟動系統后,bootloader就不存在。Linux和Windows啟動過程中,基本的原理都差不多,都先加載一個bootloader來
    發表于 08-28 11:27

    玩轉Zynq連載1——Zynq的linux啟動過程

    是stage 0 - BootROM、stage 1 - FSBL和stage 2 - 操作系統啟動。 硬件初始化相對簡單明了,不多費口舌。下面我們看看軟件啟動過程。2 BootROM階段
    發表于 04-16 06:56

    如何解決Xilinx rapidio ip核端口不能初始化問題?

    我用ise產生了rapidio的核,然后做功能仿真沒有問題,我把自己的邏輯與核結合起來后做功能仿真,卻發現端口不能初始化了,具體情況是port_initialized變成了不定值。求幫忙!!
    發表于 05-16 09:39

    Zynq在非JTAG模式下的啟動配置流程

    BootROM 加載到 OCM 中的啟動鏡像。FSBL 完成的任務是 Zynq 啟動過程中的關鍵一環,可以分為以下4項:  1. 完成 PS 的初始化  2. 加載 PL 的bit流
    發表于 01-08 16:33

    STM32啟動過程

    一、STM32 啟動過程通過Boot引腳設定,尋找初始地址初始化棧指針 __initial_sp指向復位程序 Reset_Hander設置異常中斷 HardFault_Handler設置系統
    發表于 08-11 06:02

    FreeRTOS系統啟動過程

    FreeRTOS系統啟動過程主要分為三部分:匯編部分、main函數初始化部分、開啟任務調度部分。對于匯編部分主要是設置一些中斷向量表、設置堆和棧等一些C語言運行需要的條件,當這些部分設置完成時候
    發表于 12-13 07:07

    系統啟動過程

    系統啟動過程系統啟動過程主要由一下幾步組成(以硬盤啟動為例):1. 開機2. BIOS 加電自檢 ( Power On Self Test -- POST ),內存地址為 0ffff:00003. 將硬盤第一個
    發表于 10-11 12:17 ?2250次閱讀

    交換機的啟動過程及運作原理

    交換機的通常啟動過程包括啟動裝載軟件的操作,完成以下任務:完成低級交換機CPU初始化。它將初始化控制映象的物理內存、CPU寄存器,包括數量、速度等參數。為CPU子
    發表于 11-15 11:52 ?1.9w次閱讀

    Xilinx FSBL如何操作啟動Zynq器件

    了解Xilinx FSBL如何操作以啟動Zynq器件。 包括程序執行概述,調試技巧以及有關特定引導設備的信息。 還包括FSBL角度的啟動
    的頭像 發表于 11-23 06:32 ?4551次閱讀

    Armlinux內核移植及系統初始化過程分析

    Armlinux內核移植及系統初始化過程分析說明。
    發表于 04-06 15:53 ?11次下載

    認識linux文件系統——文件系統啟動過程介紹

    系統啟動流程 1)內核啟動包括初始化串口、內存、中斷等必要的設備以及其他設備初始化(當然初始化東西很多,這里不一一列舉); 2)內核
    發表于 10-28 11:05 ?1次下載