1. 程式人生 > >TMS320C6678中Hyperlink介面的理解

TMS320C6678中Hyperlink介面的理解

一、hyperlink的使用

1.overview

    1.DSP之間用於高速,低延遲,少管腳的通訊介面,可以模擬多種當前使用的外設介面。

    2.hyperlink包括數字訊號和邊頻帶控制訊號。數字訊號是基於serdes的,邊頻帶訊號是基於LVCMOS的。當前的hyperlink提供點對點的連線方式。 2.feeatures

    1.少量的pin只有26個,資料傳輸才用serdes,控制訊號才用LVCMOS

    2.所有的訊號都由一個裝置驅動和提供,所有的LVCMOS邊頻帶訊號都使用源同步時鐘

    3.每個通道12.5G,1or4通道用於傳送和接收,可以支援serdes全速,半速,四分之一和八分之一的更低的速度。serdes自動偵測和校正polarity,自動識別通道和校正。

    4.基於簡單的包的對映記憶體間的傳輸協議,寫請求,寫資料,讀請求,讀反饋資料,中斷請求,支援多種優秀的傳輸。

    5.點對點的連線,請求和反饋資料通過一個物理管腳被複用?支援主機/外圍裝置以及點對點的通訊模式

    6.提供的LVCMOS管腳可以用於留空和電源管理,支援單個方向單個通道的流控,支援單個lane單個方向的電源管理

    7.省電模式自動調整Lane位寬。

    8.用於診斷和除錯模式的serdes內部迴環

    9.無需外部上拉或者下拉電阻

    10.64個硬體和軟體中斷。

    11.8箇中斷指標地址

    12.不支援寫反饋的包e

    13.TX和RX必須執行在同一個速度下。

    14.該版本中沒有外部的控制字命令。

    15.最大支援64bytes的遠端暫存器,超過寄回引起匯流排衝突。

    16.不支援獨佔傳輸操作。

    17.CBA constant mode is not supported for bursts larger than 256-byte aligned burst 3.功能框圖

    1.從FIFO來的資料流通過MAC和PLS到達wire

 2.每一個lane可以工作在12.5G,hyperlink有自己有效的編碼方式來支援物理層。和傳統的8b10b編碼方式相比,hyperlink去掉了編碼的overhead。

 3.邊帶訊號提供流控和電源管理控制資訊。硬體自己控制,軟體無法配置干預。如下:

4.架構

1.hyperlink需要一個參考時鐘為SerDes模組服務,可以選擇156.25Mhz,250Mhz,312Mhz。

2.管腳描述,serdes是資料傳輸,LVCMOS是邊帶訊號用於控制,數了一下一共26根線,8*2的LVCMOS線,10根serdes線。具體功能如下圖:

3.TXPM和TXFL控制serdes的TXDATA;RXPM和RXFL控制serdes的RXDATA。

4.電源管理和流控管理的四個位D3D2D1D0只有前兩位D0D1是有效的,D0=1表示支援高於12.5G的Baud,D0=0表示支援12.5G和低於。D1=1表示支援4個通道,D0=0表示不支援4個通道。

5.啟用通道:

    啟用通道,傳輸方通過TXPM傳送一個power-up事件告知接收者。接收方通過RXPM接收該power-up事件,然後使能接收。檔接收方已經完全和傳送方的訓練序列同步之後,接收方傳送個事件回去告訴傳送者現在可以使用通道來進行資料傳輸了。然後接收方偵測到該傳輸並從訓練佇列切換到資料接收模式。

    在serdes內支援符號對齊,PLS需要使能去通知serdes符號對齊會發生。同步字包含一個comma"逗號?"以方便serdes可以輕易的完成。每一個通道都需要符號對齊,取決於其他通道的狀態,相位矯正也許會在所有活動的lane中發生。這使得開發一個通道到四個通道的時候,在對齊過程中不會taken down。

    流控對使用者是透明的,hyperlink的接收端自動管理可用資源的傳輸流量,並且限制TX端的流量通過邊帶訊號。

6.電源管理:

    hyperlink根據lane power management register決定通道的電源狀態,並且通過sideband signals統治相關的接收者進入相同的電源狀態。

    在重啟階段,serdes和所有通道一樣處於掉電模式。當退出掉電模式之後,HYPERLINK模組通過sideband匯流排傳送一條訊息給遠端的相關裝置請求其能力。當收到應答之後,HYPERLINK自動的進入一種可操作的狀態。serdes只有在PWRMGT暫存器被清零或者傳送掛起的時候才會被帶出復位。hyperlink模組會基於PWRMGT暫存器和outbound load來自動的改變電源模式。預設情況下,HYperlink 讓傳輸連線空閒知道節後到從VBUS的從埠來的傳輸。然後hyperlink進入單一通道模式為該傳輸服務並且一個通道的上電處理也已經完成。hyperlink根據traffic load動態的管理他的電源模組。當一個通道跟不上資料傳輸的時候,hyperlink就會自動進入四個通道的模式,如果流量低於一個通道的,那就自動轉到單通道模式。如果流量進一步減少,Hyperlink會自動的進入0通道模式,關閉serdes的傳輸,直到通道內有傳輸來。傳送和接收都是獨立控制的一遍一些應用只有一個方向的傳輸。

    不同模式的傳輸是被lane power management暫存器控制的。

7.serdes配置和時鐘

    該模組控制hyperlink的開發速率,提供hyperlink的傳送和接收以及外部裝置的管腳之間的介面。文件末尾體供了配置serdes的相關例子。serdes暫存器是晶片級的,並不在hyperlin的配置暫存器空間。在操作這些暫存器之前,必須對Kick暫存器操作以允許有對暫存器操作的許可權。

    serdes的時候取決於hyperlink serdes PLL和傳送接收的RATESCALE,速率比例因子。環路頻寬?loop bandwidth。

    hyperlink serdes的主要目的是由一個低頻率的參考時鐘(REFCLK)生成一個高頻率的輸出時鐘。PLL輸出頻率由MPY決定,MPY在HYPERLINK_SERDES_CFGPLL中,計算公式如下:

    PLL_OUTPUT=REFCLK*MPY

    輸出範圍必須在1.5625GHz到3.125GHz的範圍內。

    為了消除抖動帶來的干擾,引入了LOOP_BANDWIDTH來設定,公式如下:

    PLL_BANDWIDTH = REFCLK/BWSCALE

    BWSCALE和PLL_OUT以及LOOP_BANDWIDTH的關係如下表,8~30MHZ是一個特殊範圍,可以根據下面的表來進行配置:

    RateBITS可以設定一個頻率係數,例如0.25.0.5等,LINRATE的計算公式如下:

    LINERATE=REFCLK*MPY/RATESCALE,最大為12.5GHZ

    有一個參考的配置表如下:

8.SerDes的接收介面

    有四個資料通道,可以在HYPERLINK_SERDES_CFGRX[3-0]的系統級暫存器中,ENRX域會給出接收模組的狀態。hyperlink自動使能接收模組。接收模組的主要作用是在接收訊號來的時候處理資料和時鐘。CDR暫存器配置該功能。時鐘資料recover演算法的目的是簡化RXp和RXn以至於資料樣本在資料傳輸中途可以被提取,這是為了決定樣本式中是被空閒了還是需要傳輸的早一些或者晚一些。

    可以檢測到訊號丟失的情況,配置LOS域的暫存器。

9.SerDes的傳送介面

    對應接收介面的ENTX域暫存器可以給出傳送介面的狀態,該模組自動使能。

    傳送介面使能傳送通道,提供訊號傳輸中的訊號調製選項,關注SWING,TWPRE,TWPST1暫存器。

10.SesDes的訓練過程

    一旦PLL設定好了,穩定輸出了,lock了,就開始邊帶訊號和訓練步驟。

    當一個非0的MPY值寫到HYPERLINK_SERDES_CFGPLL暫存器中的時候,會鎖定鎖相環並且傳輸步驟被觸發,為了保證hyperlink配合暫存器被合適的設定在初始化訓練步驟的時候,並且確保自動協商,以下步驟需要被遵守:

    1.復位要做好

    2.出reset狀態,在執行應用程式

    3.配置hyperlink暫存器和SerDes的傳送和接收配置暫存器

    4.配置MPY和PLL暫存器,如果配置有效,PLL會鎖定並且給出期望的頻率輸出。

    5.HYperlink會等待SerDes的PLL鎖定,並且開始Hyperlink的邊帶訊號和傳輸步驟。

    SDCS1(sleep_cnt)控制標識的通道進入睡眠或者使能的狀態。這樣可以允許在連結建立之前電源供電穩定。該暫存器是控制連結和恢復狀態前的一個穩定狀態。

    Sleep masked symbol count = sleep_cnt x 16 x Unit Interval     Disable masked symbol count = disable_cnt x 16 x Unit Interval

    sleep_cnt和disable_cnt的建議值為最大值0xff

11.Hyperlink的協議

    h提供三種類型的傳輸,讀,寫和中斷事件。

    1.hyperlink寫操作

    從slave VBUSM埠接收寫傳輸,寫命令被寫在outbound Command FIFO裡面,資料被立即從FIFO中讀取,被封裝成一個寫請求的包。輸出地址傳輸邏輯overly將控制資訊輸出到地址域,包被編碼並且序列化在被傳輸到遠端裝置之前。遠端裝置收到包,解串,解碼收到的資料。遠端的h模組儲存收到的寫資料包到inbound commandFIFO裡面。入口地址傳輸邏輯啟用新的對映笛之愛並且為寫傳輸其他的控制資訊啟用例如安全和PRIVID。遠端裝置內部的h模組初始化一個VBUSM maste的寫操作,基於新的地址和其他控制資訊。寫的資料Land到遠端裝置,每次寫是256B,如果資料大於這個,那就拆包,並且每一個256B的包都會重複上述步驟。見下圖紅色箭頭走向。

   2.hyperlink讀操作

    hyperlink接收一個VBUSM從埠的讀請求,讀的請求被存放在outbound command FIFO裡面,讀的命令被存放在outbound command的FIFO裡面,輸出地址轉換邏輯識別要讀的地址,並且加上控制資訊,然後再打包成一個讀的請求包。這個包被編碼,序列化傳送到遠端裝置去了,遠端裝置通過自己的h介面接收讀請求包。該包被解串,解碼並且寫到inbound command FIFO裡面。遠端裝置從inbound command FIFO裡面讀出讀請求包並且初始化一個讀請求,該請求基於地址和控制資訊。(之前傳送讀請求那一端打包進來的)。讀請求從h的masterVBUSM埠到從埠之間一個的終點。當遠端裝置的h模組接收到了讀的返回資料,資料被寫到return datd FIFIO裡面,然後進行序列化。遠端裝置將讀返回的資料傳送出去通過h模組的介面,本地的h模組介面接收到資料。傳輸大小256B,一次傳輸大於這個會被拆包。具體路徑見下圖紅色和藍色。

3.hyperlink的格式化

    hyperlink傳輸到遠端裝置是通過控制字和資料字,每一個Hyperlink包都包括一到兩個控制字和多個數據字。控制字和控制字擴充套件被定義在section 0和0相關的地方。extend control位為1的時候,擴充套件控制域才會被包含進去。具體的協議資訊,不需要太關注。

    一個數據包總是以一個控制字開始,一共有四中型別的控制字:write post ,read,interrupt和read data return。如下:

具體的每一位的表在datasheet的協議節,需要去對應。

4.地址轉換

    hyperlink有獨立的內部地址外部地址的轉換模組。ingress的作用是將控制資訊覆蓋到相關的地址上,egress的作用是將進來的地址重對映到相關的記憶體區域中。hyperlink支援高大64個不同的記憶體對映。每一個記憶體區域的其實地址可以被放在任何64KB地址的邊界上,就是說要64KB對齊了?每個對映記憶體的大小可以sized of power of two,以256B為開始。

    最大對映的區域大小為256M。有些傳輸特性已經嵌入到控制字裡面,比如優先順序,監督者(supervisor),使用模式等。

    轉換格式為,先將從機的目標地址和和安全位私有ID打包在一起,形成一個覆蓋域,目標地址的低端部分拎出來組成一個lower portion of slave address,該部分和覆蓋閾組和起來變成一個輸出的yperlink地址。在接收端。有一個控制器,輸入端為rxsecsel,這個用來選擇security bit,rxsegsel用來輸出seg value,段的值,這個段的值在比較重要,和進來的低端部分的地址組和生成一個頭,打包成新的輸出地址。第三個是privIDsel,這個ID一共有16個,分別為0到15,作用暫時不明。

    輸出通道決定地址如何修剪稟賦高控制資訊,例如到遠端裝置的security 和 privID。

    Tx地址的產生髮分為三個階段,取地址,加入privid,加入security bit,這兩個都有16個不同的值。

    Rx地址部分就比較複雜,h模組有一個PrivID的表,表中有16個值,每一個入口值都可以配置4位的privID,根據包的這個值,來決定進來的資料包的對映關係。

    privID的兩個暫存器,一個是序列暫存器一個是資料暫存器,都是32位的,但是隻有4位有用,其於都是寫0.檢查的時候,要先寫index暫存器,再讀value暫存器。

    接收端的地址重對映,主要是依賴一個段和長度的表從而決定對映的地址。OFFSET_MASK使一個便宜掩碼,用來地址重對映,一共有16個,而表有64個入口,每一個入口都可以被獨立程式設計,對映一片地址。

    RX端的地址等效於:Segment Address + (Rx Address& OFFSET_MASK),其中segment address的31:16來自RXSEG_VAL的segment/length表。,0:15位均為0.每一個segment的大小可以從512B到256M,且必須是64KB邊界對齊的。

一個傳送地址的打包過程,手冊自帶的例子,地址轉換。

這是接收的過程,手冊自帶的例子,可以參考。

 一個包最大可以是256BYTES,但是讀寫都是被拆分成64B的。

5.中斷

    64箇中斷事件。HW_EVENT必須被單獨配置,步驟如下:

    寫中斷控制索引暫存器baseaddress+0x64,用十進位制數寫

    INTEN,使能位

    SIEN,軟體是否可以出發中斷

    INTTYPE: 電平觸發還是脈衝觸發,只能設定為0,根時鐘有關係

    INTPOL:極性選擇,是高電平觸發還是低電平觸發。

    ISEC:如果置1,只有安全主機才能觸發軟體中斷事件。

    DNID:未使用,寫0.

    MPS:用來發送中斷資料包給遠端裝置,只有3LSB有效,高MSB全部為0.

    VECTOR:當INT2CFG置1,那麼HW_EVENT[x],就表示哪一位中斷需要掛起。如果INT2CFG設為0,那麼HW_EVENT[x],就表示指向的中斷就開始傳送包到遠端裝置withMPS和vector域。vector很重要,可以用來表明哪一位遠端暫存器需要掛起,或者用作獲取中斷地址的索引,根據遠端裝置的int2cfg的設定。

    獲取中斷控制暫存器的值得方法:向中斷控制暫存器相關的暫存器寫數值,然後從往後便宜0x04的地方讀出來。中斷一共有0~63個,期中0-31是來自晶片級的中斷,32-64是來自QM模組等待佇列的中斷訊號。當IINTPOL寫0,佇列不為空的狀態就觸發中斷,當寫1,空佇列觸發一箇中斷。軟體中斷寫SW_INT暫存器。