DSP6678網絡子系統之交換子系統
網絡交換子系統由EMAC模塊、SGMII模塊、PHY設備、MDIO模塊、網絡交換機、以及系統集成的其他相關的子模塊。
NETCP的網絡交換子系統的主要作用是提供一個在主設備和其他連接設備間進行數據傳輸的接口。
網絡交換子系統主要包括如下三個模塊:
? 網絡交換部件
? MDIO模塊
? 兩個SGMII模塊(KeyStone I設備兩個;KeyStone II設備四個)
網絡交換子系統的交換機有三個端口,以及可以給主機的一組中斷。可以通過配置總線進行配置。如圖 1.1所示:
圖 1.1 KeyStone I 網絡交換子系統框圖
KeyStone II的網絡交換子系統,擁有兩個額外的SGMII端口。網絡交換子系統內部的交換機有四個SGMII端口以及一個主機端口。如圖 1.2所示:
圖 1.2 KeyStone II 網絡交換子系統框圖
? 其中端口0是主機端口,該端口允許交換子系統和NETCP進行雙向通信
? 端口1至端口4用於在SGMII和交換子系統之間進行雙向通信
? 交換子系統的中斷連接到DSP上,以允許通知交換狀態;
? 配置總線用於連接交換子系統和NETCP,以允許用戶配置交換子系統;
? 每個SGMII模塊都能獨立地連接到網絡交換子系統、SerDes、以及配置總線。
? 配置總線允許用戶配置SGMII、交換部件、以及
2 網絡子系統架構
2.1 時鐘
2.1.1 網絡交換子系統使用了如下時鐘:
? 網絡交換子系統的時鐘
? SGMII SerDes的參考時鐘
? IEEE 1588 時間同步時鐘
? MDIO時鐘
? GMII時鐘
2.1.2 網絡交換子系統時鐘
網絡交換子系統的時鐘通常用於網絡交換子系統的大多數邏輯,通常為350MHz。
2.1.3 SGMII SerDes參考時鐘
SGMII SerDes的參考時鐘是DSP的輸入時鐘。SGMII SerDes參考時鐘作為SGMII SerDes PLL的輸入,可以通過SGMII_SERDES_CFG_PLL寄存器配置。SGMII SerDes PLL控制在
2.1.4 MDIO時鐘
MDIO的時鐘有外設系統時鐘分頻而來。MDIO時鐘可以配置達到2.5MHz,但通常配置為1.0MHz。
2.1.5 IEEE 1588時間同步時鐘
IEEE 1588時間同步時鐘主要用於網絡交換子系統的時間同步模塊。可以通過配置CPTS_RFTCLK_SEL寄存器的CPTS_RFTCLK_SEL字段,選擇一個CPTS_RCLK的輸入時鐘源
2.1.6 GMII時鐘
GMII的時鐘頻率由802.3指定。
? 10Mbps : 2.5MHz
? 100Mbps : 25MHz
? 1000Mbps: 125MHz
2.2 GbE交換機的結構
GbE在網絡交換子系統中的兩個SGMII模塊和NETCP之間,提供了一個交換機。如圖 2.1所示,GbE交換機包括如下部分:
? 包數據流接口
? MAC子模塊
? MAC接收FIFO
? 統計子模塊
? 時間同步子模塊
? 地址查詢引擎(ALE)子模塊
圖 2.1 GbE交換機
GbE的交換機有三個端口:端口0與包數據流交換部件通信;端口1與SGMII0通信;端口2與SGMII1通信。
GbE交換機內部的模塊如下:
? 包數據流接口:用於GbE交換機與NETCP的包數據流交換部件之間通信;
? MAC子模塊:用於在交換機內部信號和SGMII模塊的GMII信號之間做轉換;
? 統計子模塊:用於統計網絡交換子系統接收和發送的數據包的個數;
? 時間同步子模塊:用於支持IEEE 1588時鐘同步;
? 地址查詢引擎(ALE):用於依據地址來推送和過濾數據包。
2.2.1 包數據流接口:
包數據流接口用於GbE交換機與NETCP的包數據流交換部件之間通信。
1. 包數據流發送接口
發送接口主要用於將數據包從GbE交換機的端口0發送到NETCP的包數據流交換部件。GbE交換部件有兩個相同的包數據流發送接口。第一個接口(TXA)將端口1的數據包從端口0發送出去;第二個端口(TXB)將端口2的數據包從端口0發送出去。
在包DMA接收流收到的數據包中,除了包數據之外,還提供額外的信息。這些額外信息包括來源的識別信息。如果數據包來自端口1,那麽P0_CPPI_SRC_ID寄存器的TXA_SRC_ID字段將被放在接收數據包描述符中的SRC_ID字段中。同樣,如果包來自端口2,則P0_CPPI_SRC_ID寄存器的TXB_SRC_ID字段中的值將放在接收包描述符的SRC_ID字段中。
TXA和TXB發送接口都有兩個22KB的緩存。只有當發送接口輸出緩存中有了整個包數據,或者超過CPPI_THRESH兩個字時,才開始發送數據包。加上2是因為還有一個兩個字的雙緩沖
對於KeyStone II, 還存在端口TXC和TXD。
2. 發送VLAN的處理過程
當CPSW_CONTROL寄存器的VLAN_AWARE被置位時,GbE交換機進入VLAN-aware模式。在VLAN-aware模式下,按照與MAC輸出VLAN數據包過程相同的規則對TAG進行添加、刪除或替換。當VLAN_AWARE被清零時,發送包不會被修改。
3. 包數據流接收接口
GbE交換機端口0的接收流接口負責從NETCP的包數據流交換部件接收數據包。GbE交換機只有一個包數據流接收端口。
除了包數據,接收流接口還可以提供附加的控制信息,這些信息駐留在發送到GbE交換機的包的描述符的PS_FLAGS字段中。
對於傳輸到GbE的數據包,PS_FLAGS字段的配置如下:
? RX_PASS_CRC:1,表示包中已經包含CRC;0,表示包中沒有CRC,需要MAC模塊生成。
? TO_PORT:設置非0值時,數據包會跳過ALE,直接從指定端口發送出去。當為0時,表示無效;當為1時,發送數據包到GbE交換機的端口1;當為2時,發送數據包到GbE交換機端口2。對於KeyStone II,還有3和4可供選擇。
2.2.2 MAC子模塊
MAC子模塊支持IEEE802.3標準,並支持10/100/1000 Mbps模式。MAC模塊在GbE和SGMII模塊之間提供了一個接口。MAC模塊主要是在GbE交換機信號和SGMII模塊GMII信號之間進行轉換。
除了在SGMII模塊和GbE交換機之間進行轉換外,MAC模塊還負責IEEE 802.3以太網幀相關的操作。對於所有包,MAC模塊添加或刪除前言,開始幀分隔符,以及包間的間隔。MAC模塊驗證並可選地生成CRC校驗和。
2.2.3 MAC接收FIFO
在GbE交換機內部,兩個MAC端口都有一個相同的數據包FIFO。每個包FIFO都包含一個獨立的邏輯接收隊列和四個邏輯發送隊列(優先級從0到3)。每個包FIFO包含81920個字節(80k),被組織成10240個64位字。該FIFO存儲空間被端口的發送和接收隊列共享。可以通過MAX_BLKS寄存器來分配隊列占用空間的大小。其中TX_MAX_BLKS字段用於配置發送FIFO的大小,單位是4k;RX_MAX_BLKS字段用於配置接收FIFO的大小,單位也是4k。建議TX_MAX_BLKS與RX_MAX_BLKS字段的和為20,否則會存在空間浪費,默認是17。
2.2.4 統計子模塊
GbE交換機有兩個統計模塊,用於記錄數據包進出交換機的事件。對於KeyStone I,統計模塊A用於記錄端口0的事件;統計模塊B用於記錄端口1和端口2的事件。
對於KeyStone II,網絡交換機有四組統計模塊。STATSA用於統計端口0的接收,以及端口0的TXA和TXB;STATSC用於統計端口0的TXC和TXD;STATSB用於統計端口1的事件;STATSD用於統計端口3和端口4。
默認情況下,統計模塊是關閉的。當關閉時,所有的統計寄存器可以被正常讀寫,可以通過寫0x00000000對統計寄存器清零。在統計模塊使能之後,所有統計數據都是只讀的;但是,當此時向寄存器寫數據時,會起到減值的作用,即新的寄存器值=原寄存器值-寫入的值。如果寫入的值大於當前寄存器的值,那麽寄存器的值會被清零。可以通過配置STAT_PORT_EN寄存器的3:0位來使能統計模塊。
2.2.5 時間同步子模塊
根據IEEE 1588規範的附件F, KeyStone 1時間同步模塊用於促進主機對時間同步操作的控制。大多數IEEE 1588標準超出了時間同步模塊的範圍,必須由主機軟件處理。
時間同步模塊的主要目的是檢測時間同步事件並生成時間戳,然後將這些信息提供給托管軟件進行處理。KeyStone I的時間同步子模塊主要監測以下六種類型的時間同步事件:
? 網絡接收事件
? 網絡發送事件
? 軟件時間戳推送事件
? 時間戳翻轉事件
? 時間戳半翻轉事件
每個網絡端口都可以觸發發送和接收事件,時間戳推送事件由軟件觸發。事件同步模塊包含如下幾個部分:
? 時間戳計數器
? 網絡端口1和端口2接口
? 事件FIFO
? 事件掛起接口
2.2.6 地址查找引擎(ALE)
地址查找引擎(ALE)處理所有接收到的數據包,以確定數據包應該轉發到哪個端口(如果有的話)。ALE使用接收到的數據包的端口號、目標地址、源地址、長度/類型和VLAN信息來確定如何轉發數據包。ALE將端口掩碼輸出到交換機構,該機構指示應該轉發到的端口。當ALE_CONTROL寄存器中的ALE_ENABLE位被設置時,ALE被啟用。當ALE_ENABLE位被清除為0時,所有包被刪除。
可以通過ALE_CONTROL寄存器的ALE_BYPASS位,將ALE配置為bypass(跳過)模式。當為bypass模式時,所有由MAC模塊接收到的數據包都被發往主機端口(端口0)。主機端口同樣可以跳過ALE,直接將數據包發送到MAC端口。
1. ALE 表
ALE表包含1024個表項。每個表項表示一個空閑條目、一個地址、一個VLAN、一個地址/VLAN對或一個OUI地址。
2. ALE數據包轉發流程
對於發送到ALE的每一個數據包,ALE會確定該數據包是否應該丟棄或者轉發。如果需要轉發,那麽ALE需要確定該數據包應該發往哪一個或哪些端口。每個端口都有一個相應的數據包轉發狀態,該狀態可以是以下四個中的一個:
? Disable(無效)
? Blocked(阻塞)
? Learning(學習)
? Forwarding(轉發)
默認狀態下,所有端口都是關閉的。為了使能端口,主機必須通過設置各自的ALE_PORTCTL寄存器以配置數據包轉發狀態。
一個數據包的轉發需要經過以下四個步驟
1、 入口過濾
2、 VLAN Aware查詢
3、 VLAN Unaware查詢
4、 發出
2.3 SGMII架構
SGMII模塊的主要功能是在CPGMAC模塊和SerDes模塊之間做數據格式轉換。SGMII模塊也負責與其他設備建立連接和自協商。
2.3.1 SGMII接收端口
SGMII接收端口主要負責將經過編碼的SerDes信號,轉換成MAC模塊需要的GMII信號。
2.3.2 SGMII發送端口
SGMII發送端口主要負責將MAC模塊的GMII信號,轉換成SerDes模塊需要的8B/10B編碼信號。
2.3.3 SGMII的操作模式
1、 回環模式
SGMII模塊支持在內部將發送信號和接收信號連接起來。這樣連接起來後,是不會經過SerDes的。當處於回環模式時,發送時鐘同時作用於接收時鐘。可以通過SGMII_CONTROL寄存器的LOOPBACK位設置回環模式。當進入或退出回環模式時,一定要通過SOFT_RESET寄存器的RT_SOFT_RESET位,重置發送和接收邏輯。進入和退出回環模式的配置步驟如下:
? 將SGMII_CONTROL寄存器的MR_AN_ENABLE位清零
? 將SOFT_RESET寄存器的RT_SOFT_RESET位置位
? 將SGMII_CONTROL寄存器的LOOPBACK位置位
? 將SOFT_RESET寄存器的RT_SOFT_RESET位清零
2、 與PHY的連接配置
當連接到外部PHY時,PHY作為主設備,SGMII模塊需要被配置為從設備,配置步驟參見數據手冊。連接如圖 2.2所示:
圖 2.2 SGMII與PHY連接
3、 SGMII與SGMII自協商
當兩個SGMII設備以自協商的方式連接時,一個SGMII必須配置為主設備,另一個必須配置為從設備,配置步驟參見數據手冊。如圖 2.3所示:
圖 2.3 兩個SGMII以自協商的方式連接
4、 SGMII與SGMII強制連接
當兩個SGMII設備強制連接,那麽每個SGMII設備都必須被配置為主設備,配置過程參見數據手冊。如圖 2.4所示:
圖 2.4 兩個SGMII以強制方式連接
2.4 MDIO架構
MDIO模塊可以最多管理32個連接到EMAC的PHY設備。MDIO模塊允許幾乎透明的MDIO接口操作,幾乎沒有DSP的維護。MDIO模塊通過不斷輪詢32個MDIO地址來枚舉系統中的所有PHY設備。當它檢測到一個PHY設備時,MDIO模塊讀取PHY狀態寄存器來監控PHY鏈接狀態。
2.5 KeyStone I SerDes架構
SerDes宏是一個自包含的宏,包括兩對發送(TX)和接受(RX),以及鎖相環(PLL)。每對發送和接收端口對應一個SGMII模塊。內部的PLL會乘以一個用戶提供的參考時鐘。
2.6 GbE交換子系統初始化流程
? 配置CPSW_CONTROl寄存器
? 配置MAC1_SA和MAC2_SA源地址寄存器
? 通過CPSW_STAT_PORT_EN寄存器,使能需要統計的端口
? 配置ALE
? 配置MAC模塊
? 配置MDIO和PHY
? 配置SGMII模塊
2.7 中斷
在GbE交換子系統中,有三個模塊可以生成中斷,分別是MDIO模塊、統計模塊、以及時間同步模塊。
DSP6678網絡子系統之交換子系統