張琴1,楊瑩1,楊燦美2,林福江1
?。?.中國科學技術大學 信息科學技術學院,安徽 合肥 230027;2.中國科學技術大學 先進技術研究院,安徽 合肥 230027)
摘要:10GBASE-KR變速箱的功能是實現156.25 MHz下66 bit數據與644.53 MHz下16 bit數據之間的通信。該文在深入研究萬兆以太網物理編碼子層(Physical Coding Sublayer ,PCS)的功能以及變速箱原理的基礎上,提出一種新的變速箱實現方法,將其分成讀寫數據轉換和異步FIFO(First In First out)兩個模塊,完成發(fā)送通道和接收通道的設計。該方法有效減少了存儲器的數目,使存儲器數目由原來的528個減少到82個。本設計使用Verilog硬件描述語言,采用ModelSim進行功能仿真,并利用EDA(Electronic Design Automation)工具完成邏輯綜合。仿真結果表明,該方法實現了變速箱的功能要求,并具有面積小、速度快的特點。
關鍵詞:變速箱;萬兆以太網;PCS;邏輯綜合
0引言
圖1PCS層功能結構圖變速箱的功能是在保證數據率不變的前提下,完成高速信號與低速信號之間的通信,廣泛應用于高速通信系統(tǒng)中。萬兆以太網作為以太網領域的先進技術,具有工作速率快、可靠性高、應用范圍廣的特點,有著廣泛的發(fā)展前景。本文根據10GBASEKR協議標準,設計了一種新的物理編碼子層(PCS)變速箱實現方法,有效地簡化了電路的復雜度。
1PCS層的功能與結構
PCS層位于媒體訪問控制子層(MAC)與物理介質連接子層(PMA)之間,通過XGMII接口和PMA服務接口與上下層實現通信[1]。PCS層的結構圖如圖1所示。由圖可知,PCS層由發(fā)送通道和接收通道構成,發(fā)送通道將XGMII傳輸的72 bit(兩路32 bit的TXD和4 bit的TXC)數據轉換成16 bit的數據發(fā)送到PMA層,包括CRC8插入模塊、64 B/66 B編碼器、擾碼器和變速箱;接收通道接收PMA傳輸的16 bit的數據并轉換為72 bit(兩路32 bit的RXD和4 bit的RXC)數據,包括CRC8移除模塊、64 B/66 B解碼器、解擾碼器和變速箱。整個PCS層以及XGMII接口的時鐘頻率為156.25 MHz,PMA層的時鐘頻率為644.53 MHz[2]。
2變速箱原理及傳統(tǒng)設計方法
由PCS層結構圖可知,變速箱位于擾碼器/解擾碼器和PMA層之間,完成156.25 MHz的低速信號與644.53 MHz的高速信號間的通信。
發(fā)送通道中,變速箱的輸入為由擾碼器輸出的64 bit數據和64 B/66 B編碼器輸出的2 bit同步頭構成的66 bit數據,輸出是16 bit數據,并發(fā)送到PMA層;接收通道中,變速箱輸入為PMA傳輸的16 bit數據,輸出66 bit數據,并將同步后的64 bit數據傳送到解擾碼器以及將2 bit同步頭傳送到64 B/66 B解碼器。
變速箱完成數據率為10.312 5 Gb/s信號間的傳輸,實現156.25 MHz下66 bit數據與644.53 MHz下16 bit數據的轉換。
傳統(tǒng)的變速箱結構圖如圖2和圖3所示[3]。圖2為發(fā)送通道變速箱結構圖,其中,1 T~8 T是8個存儲單元,深度為66 bit,總共528 bit的存儲單元,每個存儲單元對應每個時鐘周期的輸入數據,然后通過數據選擇器在輸出時鐘有效沿到來時選擇一路數據輸出。該結構實現的是8個66 bit數據轉換為33個16 bit數據。
圖4發(fā)送通道變速箱電路結構圖圖3為接收通道變速箱結構,其中,1 T~33 T是33個存儲單元,深度為16 bit,同樣耗費528 bit的存儲單元,每個存儲單元對應每個時鐘周期的輸入數據,然后通過數據選擇器在輸出時鐘有效沿到來時選擇一路數據輸出。從而實現16 bit數據到66 bit數據的轉換。
這種電路結構耗費的存儲器太多,導致整個電路的面積很大,并且造成很大的延遲。為了保證數據輸出時輸入數據已經穩(wěn)定建立,數據選擇器的第一次輸出選擇的是第12個16 bit,還需人為加入17.05 ns的延遲[3]。另外,這種結構的控制信號不易產生,電路的穩(wěn)定性大大降低。本文提出一種新的設計方法能夠有效地解決上述問題。
3新的變速箱設計
變速箱的設計難點是輸入數據寬度與輸出數據寬度不成整數倍,所以每次發(fā)送或者接收到的數據不能正好全部發(fā)完,剩下的數據必須等下一時刻數據到來時再發(fā)送。而且每次剩余的數據位置是不固定的。
本文將變速箱分為兩個部分:讀寫數據轉換模塊和異步FIFO模塊。讀寫數據轉換模塊完成數據轉換和處理剩余比特數據問題,異步FIFO模塊完成跨時鐘域的數據傳輸。
發(fā)送通道中,本文選用16位的寄存器緩存每次讀取數據所余下的2 bit數據。每次寫操作對應4次讀操作,在第8次寫操作時,16位的寄存器中緩存了16 bit的數據,所以,對應5次讀操作,以實現8個66 bit的寫數據轉換為33個16 bit的讀數據。
本設計難點在于如何設計控制信號。因為每次讀寫操作結束后,余下的2 bit數據在16位寄存器中的位置是不固定的。本文設置了一個與讀時鐘同步的7位計數器,在每次讀操作結束,計數器累加16,同時,設置了一個與讀時鐘同步的模33計數器,控制每33個讀時鐘周期只讀8次。電路結構圖如圖4所示。在PCS時鐘有效沿將輸入的66 bit數據通過異步FIFO與PMA時鐘域同步,并通過模33計數器控制PMA的讀操作,輸出寄存在66位的寄存器中,將其高16 bit寄存到16位的緩存器中。
該方法有效減少了存儲器的數量,由傳統(tǒng)方法的528個存儲器減少到了82個存儲器(66+16=82),降低了異步FIFO的復雜度,并且減少了整個電路的面積。使用Verilog HDL[4]語言描述,部分關鍵代碼如下:
always @ (*)
case(counter)
7′d0:tx _group= shift_reg2[15: 0];
7′d2:tx _group={shift_reg1[1:0],shift_reg2[15:2]};
7′d4:tx _group={shift_reg1[3:0],shift_reg2[15: 4]};
7′d6:tx _group={shift_reg1[5:0],shift_reg2[15: 6]};
7′d8:tx _group={shift_reg1[7: 0],shift_reg2[15: 8]};
接收通道中,設置4個16位寄存器級聯,將每個寄存器的輸出與輸入拼接構成66 bit數據。設計難點同樣在于如何設計控制信號。4個16 bit數據只能組成64 bit數據,需要拼接2 bit數據,而這2 bit數據的位置是不確定的,另外寫時鐘頻率比讀時鐘頻率快很多,直接利用異步FIFO將導致FIFO總是寫滿狀態(tài)。
本文設置了一個與寫時鐘同步的模33計數器,控制選擇正確的66 bit的拼接數據,同時控制每33個寫時鐘周期只寫8次數據,輸入到異步FIFO中,避免了由于寫時鐘頻率比讀時鐘頻率快很多而導致FIFO總是寫滿的情況。電路結構如圖5所示。在PMA時鐘有效沿,計數器開始計數,生成的控制信號作為8選1 MUX的選擇信號,選擇正確的信號作為異步FIFO的寫信號。同時,模33計數器開始計數,控制寫使能信號的產生,控制異步FIFO的寫操作,輸出正確的66 bit信號。本文中的異步FIFO均采用傳統(tǒng)的異步FIFO設計結構[5],利用2級D觸發(fā)器級聯,并采用格雷碼完成寫地址與讀時鐘以及讀地址與寫時鐘的同步,避免電路出現亞穩(wěn)態(tài)。與傳統(tǒng)設計方法相比,本設計有效地降低了電路的復雜度和整個電路的面積。部分關鍵代碼為:
圖5接收通道變速箱電路結構圖always @ (*)
case(rx_fetch_cnt[4:2])
3'd0: rx_pcs_66b={rx_pma_group[1:0],rx_pma_group1,
rx_pma_group2,rx_pma_group3,rx_pma_group4};
3'd1: rx_pcs_66b={rx_pma_group[3 :0],rx_pma_group1,
rx_pma_group2,rx_pma_group3,rx_pma_group4[15: 2]};
3'd2: rx_pcs_66b={rx_pma_group[5 :0],rx_pma_group1,
rx_pma_group2,rx_pma_group3,rx_pma_group4[15: 4]};
3'd3: rx_pcs_66b={rx_pma_group[7 :0],rx_pma_group1,
rx_pma_group2,rx_pma_group3,rx_pma_group4[15: 6]};
3'd4: rx_pcs_66b={rx_pma_group[9 :0],rx_pma_group1,
rx_pma_group2,rx_pma_group3,rx_pma_group4[15: 8]};
3'd5: rx_pcs_66b={rx_pma_group[11:0],rx_pma_group1,
rx_pma_group2,rx_pma_group3,rx_pma_group4[15:10]};
4功能仿真與邏輯綜合
本設計通過編寫測試向量采用ModelSim工具完成各個模塊的功能仿真,仿真結果如圖6和圖7所示。圖6中,當輸入信號為A_in時,對應的輸出為A_out;當輸入信號為B_in時,對應的輸出為B_out。圖7中,當輸入信號為A_in時,對應的輸出為A_out;當輸入信號為B_in時,對應的輸出為B_out;當輸入信號為C_in時,對應的輸出為C_out。為了保證信號的穩(wěn)定性,人為地加入了一定的延遲。從仿真結果可以看出,輸入所對應的輸出都是正確的,表明本設計實現了PCS層發(fā)送通道和接收通道的變速箱功能仿真。
另外,本設計采用Synopsys公司的Design Compiler[6]工具完成了邏輯綜合。綜合結果表明設計完全符合PCS變速箱的時序要求。發(fā)送和接收電路分別留有4.56 ns、3.92 ns的時鐘裕量,且面積小,分別使用了近1 000個邏輯門;在工作頻率方面,發(fā)送電路使用了286個D觸發(fā)器,最高寫時鐘頻率分別為232.56 MHz、927.35 MHz,最高讀時鐘頻率分別為961.54 MHz、211.42 MHz,使用了近1 300個邏輯門。與傳統(tǒng)的設計方法[3]相比,面積縮小了近30%,工作速度提高了近50%。
5結論
本文在研究變速箱原理的基礎上,根據其內在的邏輯關系,將電路分成寫數據轉換模塊和異步FIFO兩部分,設計了PCS層發(fā)送通道和接收通道的變速箱。完成了功能仿真和邏輯綜合。綜合結果表明,該方法有效地解決了控制信號不易設計和亞穩(wěn)態(tài)的問題,縮小了面積,提高了工作速率。
參考文獻
[1] Vivado design suite user guide: 10 GB Ethernet PCS/PMA v4.0[Z]. PG068 October 2, 2013.
?。?] IEEE Std 802.3ap[S]. 2012 Edition.
?。?] 敖志剛.萬兆位以太網及其實用技術[M].北京:電子工業(yè)出版社,2007.
[4] 夏宇聞.Verilog數字系統(tǒng)設計(第二版)[M].北京:北京航空航天大學出版社,2008.
?。?] VERILOG E, CUMMINGS C E. Simulation and synthesis techniques for asynchronous FIFO design[M]. Snug, 2002.