99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

xilinx zynq RapidIO系統(tǒng)的初始化啟動過程概述

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移植學(xué)習(xí)筆記之14-RapidIO驅(qū)動開發(fā)

host初始化

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

系統(tǒng)啟動過程概述

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

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

啟動要求

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

枚舉

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

Xilinx Srio IP

xilinx zynq RapidIO系統(tǒng)配置

xilinx zynq RapidIO系統(tǒng)配置

xilinx zynq RapidIO系統(tǒng)配置

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

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

xilinx zynq RapidIO系統(tǒng)配置

2. Base Device ID CSR,設(shè)置器件ID,host可設(shè)為1,默認(rèn)值在vivado里設(shè)置。

xilinx zynq RapidIO系統(tǒng)配置

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

xilinx zynq RapidIO系統(tǒng)配置

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

xilinx zynq RapidIO系統(tǒng)配置

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

xilinx zynq RapidIO系統(tǒng)配置

IDT CPS1848

1. CPS1848結(jié)構(gòu)圖,注意的是port從0到17,即0x00到0x11。

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

xilinx zynq RapidIO系統(tǒng)配置

3. 單播(unicast)編程,CPS1848每個端口都有自己的路由表,所以可以支持虛擬網(wǎng)絡(luò),路由配置時,有寄存器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系統(tǒng)配置

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

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

xilinx zynq RapidIO系統(tǒng)配置

6. Switch Port Information CAR寄存器,這個寄存器很重要,在多個Switch互聯(lián)的系統(tǒng)里,用于確定拓?fù)潢P(guān)系。

xilinx zynq RapidIO系統(tǒng)配置

7. Port General Control CSR寄存器,會用到DISCV位,是發(fā)現(xiàn)標(biāo)志位。

xilinx zynq RapidIO系統(tǒng)配置

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

xilinx zynq RapidIO系統(tǒng)配置

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

xilinx zynq RapidIO系統(tǒng)配置

zynq SRIO系統(tǒng)初始化過程

1. 使能host模式。
2. 配置ID。
3. 配置CPS1848路由,使能端口收發(fā)(手冊默認(rèn)是打開的)。
4. 鎖定host。
5. 搜索系統(tǒng)拓?fù)洹?/p>

鎖定host

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

搜索系統(tǒng)拓?fù)?/strong>

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

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

? 搜索CPS1848,設(shè)置0x13c寄存器Port General Control CSR的DISCV位,表示這個switch已經(jīng)被發(fā)現(xiàn),設(shè)置Component Tag CSR,它是一個設(shè)備的身份標(biāo)識。

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

? 循環(huán)搜索每個port,如果是host port則使能端口收發(fā),如果是其他port,讀取鏈路狀態(tài),如果正常,用默認(rèn)ID 0xFF配置路由,使能端口收發(fā),然后嘗試鎖定該端口設(shè)備(Endpoint或Switch),鎖定過程和鎖定host是一樣的。
-如果鎖定成功,讀取Processing Elements Features CAR寄存器,等到Function,判斷設(shè)備類型,決定下一步拓?fù)浞绞健H绻荅ndpoint類型,關(guān)閉Master Enable,置位Discovered,分配ID號,配置該port的路由表。如果是Switch類型,則遞歸調(diào)用Switch枚舉過程。
-如果是已經(jīng)鎖定狀態(tài)(存在環(huán)路),直接更新拓?fù)?,不做任何配置?/p>

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

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

現(xiàn)在拓?fù)潢P(guān)系已經(jīng)搜索出來了。下面就是配置路由,因為上述搜索過程的路由配置不一定是最優(yōu)配置,也不滿足用戶的需求。 所以現(xiàn)在需要按照設(shè)計需求,生成路由表然后寫到各個Switch。

zynq SRIO驅(qū)動

這里實現(xiàn)Linux用戶態(tài)的驅(qū)動,數(shù)據(jù)結(jié)構(gòu)定義,

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


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

    關(guān)注

    73

    文章

    2185

    瀏覽量

    125405
  • RapidIO
    +關(guān)注

    關(guān)注

    1

    文章

    41

    瀏覽量

    21184
  • Zynq
    +關(guān)注

    關(guān)注

    10

    文章

    615

    瀏覽量

    48262
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    淺談zynq啟動,BootROM和FSBL等的執(zhí)行過程

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

    RT-Thread自動初始化詳解

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

    自動初始化機制原理詳解

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

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

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

    Linux和Windows系統(tǒng)啟動過程的簡單分析

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

    玩轉(zhuǎn)Zynq連載1——Zynq的linux啟動過程

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

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

    我用ise產(chǎn)生了rapidio的核,然后做功能仿真沒有問題,我把自己的邏輯與核結(jié)合起來后做功能仿真,卻發(fā)現(xiàn)端口不能初始化了,具體情況是port_initialized變成了不定值。求幫忙?。?/div>
    發(fā)表于 05-16 09:39

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

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

    STM32啟動過程

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

    FreeRTOS系統(tǒng)啟動過程

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

    系統(tǒng)啟動過程

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

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

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

    Xilinx FSBL如何操作啟動Zynq器件

    了解Xilinx FSBL如何操作以啟動Zynq器件。 包括程序執(zhí)行概述,調(diào)試技巧以及有關(guān)特定引導(dǎo)設(shè)備的信息。 還包括FSBL角度的啟動
    的頭像 發(fā)表于 11-23 06:32 ?4880次閱讀

    Armlinux內(nèi)核移植及系統(tǒng)初始化過程分析

    Armlinux內(nèi)核移植及系統(tǒng)初始化過程分析說明。
    發(fā)表于 04-06 15:53 ?11次下載

    認(rèn)識linux文件系統(tǒng)——文件系統(tǒng)啟動過程介紹

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