SPI4.2總線應用和調試
因為狀態鏈路的寬度是2位,所以每次突發傳輸至少傳輸16位數據(4個時鐘周期)。反映FIFO隊列的狀態信息有3種:飽(SaTIsfied)、餓(Hungry)、極餓(Starving),分別對應二進制數字10、01和00。11表示鏈路處于失步狀態,正在同步過程中。當狀態是“飽”時,說明隊列幾乎滿了,只接收當前正在傳送的數據包,其他數據包只有等狀態更新后才能接收。當狀態是“餓”時,可以接收最大MaxBurst2個數據塊。當狀態是“極餓”時,說明隊列幾乎空了,可以接收最大MaxBurst1個數據塊。MaxBurst1和MaxBurst2是SPI4.2總線初始化時設定的參數,MaxBurst1不得小于MaxBurst2。
2 SPI4.2總線的初始化和同步
SPI4.2總線初始化時必須設定一些基本參數,如表1所列。
SPI4.2總線協議定義了一個叫“日歷”的數據結構CALENDAR[i](i=1,…,CALENDAR_LEN)。CALENDAR_LEN(日歷長度)參數規定了邏輯端口(或稱為虛擬通道)的數目,該數值不能小于實際的邏輯端口數目。例如,如果SPI4.2總線用于10 Gb/s以太網口,那么日歷長度是1(即CALENDAR_LEN = 1);如果SPI4.2總線用于10個1 Gb/s以太網口,那么日歷長度是10(CALENDAR_LEN = 10),CALENDAR[i] = 1,2,…,10,代表了10個以太網端口。CALENDAR[i]中承載的數據被周而復始地依次傳輸,重復次數是CALENDAR_M次。圖3為日歷長度和重復次數都是4的數據傳輸示意圖。SPI4.2總線被初始化時,必須確保接口兩端的CALENDAR_LEN和CALENDAR_M分別相等。從這個角度看,SPI4.2是一種時分復用的總線:總帶寬是固定的,“日歷”數據結構決定了帶寬和邏輯端口的分配。
當SPI4.2正常工作時,數據和狀態鏈路會不定期地發送訓練序列。在數據鏈路,訓練序列至少應該在DATA_MAX_T個時鐘周期內發送一次。在狀態鏈路,訓練序列至少應該在FIFO_MAX_T個時鐘周期內發送一次。設置DATA_MAX_T或FIFO_MAX_T為0將取消各自鏈路的訓練序列,一般情況下不推薦這種設置。
圖4以XLR732為參照描述了SPI4.2總線的收發同步過程。啟動之后,在發送方向,發送模塊(TX)通過數據鏈路發送連續的訓練序列,對端的接收模塊成功收到訓練序列后,會設置本端的接收同步標志;然后通過狀態鏈路發送訓練序列給對端,一旦發送模塊成功接收到訓練序列后,就設置本端的發送同步標志。
在接收方,接收模塊(RX)在數據鏈路成功接收到對端發送的訓練序列后,會設置本端的接收同步標志;然后通過狀態鏈路發送訓練序列,一旦發送模塊成功接收到訓練序列后,就設置本端的發送同步標志。在同步過程中,訓練序列由指定的連續的DIP4碼字組成。發送模塊必須連續發送訓練序列,直到本端的狀態鏈路收到有效信息。同時,接收模塊忽視所有接收到的數據,直到觀察到訓練序列,獲得數據同步。一旦數據鏈路同步之后, FIFO隊列狀態信息就開始傳送。
如果發送方接收到有效的狀態信息,它就可以開始進行數據突發傳輸。如果在工作過程中,由于某些原因(例如一端器件掉電或重啟)導致總線失步,那么為了再次獲得同步,雙方需要按照上述過程發送連續的訓練序列,直到建立同步為止。
表1 SPI4.2初始化基本參數


評論