?

解復用處理電路中成幀器模塊的設計與仿真

2018-08-29 09:41韓美林喬成芳
計算機與數字工程 2018年8期
關鍵詞:行列字符字節

韓美林 喬成芳

(商洛學院電子信息與電氣工程學院 商洛 726000)

關鍵字 解復用電路;成幀器;幀頭字符定位

1 引言

從高速的串行數據中恢復出來的不同類型的數據只是按照順序以各自的bit寬度重新放置,并沒有按照正確的幀格式字節對齊,導致后續電路無法直接使用這樣的數據,所以成幀器是尋找標準幀格式起始位置的關鍵電路[5]。

光傳送網的幀格式是一個4行×4080字節的塊狀幀結構,其中第1列至第16列字節是開銷字節,第17列至第3824列字節是凈荷數據,第3825列至第 4080列字節是前向糾錯(FEC)編碼數據[6]。G.709規定,幀定位開銷字節是一個OTUk/ODUk幀的起始字節,占用OTUk/ODUk幀結構的第1行的前7個字節,第一行的1到6個字節為幀定位開銷(FAS),這6個字節的內容為“0xF6F6F6282828”,第七個字節為復幀定位MFAS復幀定位開銷(MFAS)[7]。

2 OTU2_64bit成幀器設計

2.1 OTU2_64bit幀頭字符定位檢測設計

OTU2字符定位檢測就是要從64bit數據中找到FAS(0xF6F6F6282828),考慮到OTU2信號是由SFI4.2接口中的串并轉換單元不考慮數據幀頭的位置隨機將相鄰64bit數據劃分在一起輸出的[8],所以連續的48bit幀頭數據可能處在一個時鐘周期的64bit數據中,也可能處在兩個時鐘周期的64bit數據之間。所以首先把第一個時鐘周期的64bit數據緩存,再與下一個周期的64bit組合成128bit數據[9]。通過比較器與128bit數據比較,最終檢測出固定的48bit幀頭數據。具體實現結構如圖1所示。

圖1 OTU2_64bit的幀頭字符檢測模塊結構圖

如圖1所示,首先將第一個時鐘周期的64bit數據緩存再與下一個周期的64bit數據組合為128bit的join_data數據;其次,在128bit數據里找48bit幀頭時先將0x28與join_data的第16位到第23位逐一進行比較,如果比較結果為高則在join_data出現0x28的位置向前繼續與0x2828進行比較,如果比較結果為高則在join_data出現0x282828的位置逐一向前繼續與0xf6f6進行比較,如果比較結果為高則在join_data出現0xf6f6282828的位置逐一向前繼續與0xf6進行比較,如果結果為高則鎖定數據,將其看做為幀頭數據,并給出幀頭指示信號check_1st。根據給出的幀頭指示信號將行列指示清零重新進行計數[10]。如果其中有一次比較結果為低則從比較結果為低的位置向前重新開始比較,直到找到幀頭。

2.2 OTU2_64bit幀同步電路設計

找到幀頭指示信號后,需要通過幀頭同步來確定是否是數據流的正確幀頭。通過分析得知幀同步過程中有幀丟失、幀失步、和重新發現幀頭等多種可能性,考慮到這點所以此電路設計采用有限狀態機來實現其包含的所有狀態[11]。如圖2所示為各個狀態跳轉的狀態轉移圖。

圖2 OTU2_64bit的幀同步狀態轉移圖

幀同步狀態轉移圖所有狀態的具體含義為

1)幀丟失狀態:電路在復位狀態下處于幀丟失狀態,通過幀頭檢測模塊給出的幀頭使能信號與行列指示信號來判斷是否進入下一狀態。如果幀頭使能信號為高且幀頭位置在第一行第一列則進入找到幀頭狀態,否則一直保持幀丟失狀態。

2)找到幀頭狀態:電路處于找到幀頭狀態后,在下一幀幀頭位置繼續檢測是否為幀頭,如果連續三次在幀頭位置都能找到幀頭則進入到幀同步狀態,否則返回到幀丟失狀態,重新開始檢測幀頭。

3)幀同步狀態:在幀同步狀態時電路一直處于幀同步狀態直到在幀格式的起始位置沒有檢測到幀頭指示信號,則進入到幀失步狀態。

4)幀失步狀態:在幀失步狀態時,繼續在前同步狀態的幀格式起始位置尋找幀頭,如果三次及三次以內重新找到幀頭則電路進入幀同步狀態,否則進入幀丟失狀態[12]。

本狀態機是根據G.709的幀格式設計出來的,因為OTU2、ODU1、ODU0的幀格式本質相同,所以OTU2、ODU1、ODU0的幀同步電路狀態機基本一致,此處不再說明。

3 ODU1_16bit成幀器設計

ODU1的幀頭字符檢測設計與OTU2的幀頭字符檢測設計最大的不同在于輸出的數據比特位寬度不同,OTU2一個時鐘周期輸出64bit數據,ODU1一個時鐘周期輸出16bit數據,這使得ODU1幀頭字符檢測設計與OTU2的幀頭字符檢測設計有所不同[13]。

ODU1一個時鐘周期輸出16bit數據,則至少需要三個時鐘周期才可以找到FAS(0xF6F6F6282828),考慮到數據的連續性,將輸出的ODU1數據進行數據的組合[14]。具體實現結構如圖3所示。

圖3 ODU1_16bit的幀頭字符檢測模塊結構圖

如圖3所示,將ODU1輸入數據延遲一個節拍再與下一節拍輸入數據拼接為32bit的join_data0數據,再將join_data0數據與下一節拍輸入數據拼接為48bit的join_data1數據,最后將join_data1數據與下一節拍輸入數據拼接為64bit的join_data2數據,最終完成數據的拼接,為找幀頭檢測電路提供數據的連續性[15]。幀頭檢測首先采用16位的比較器比較data_in與0x28是否一致,其次用32位的比較器比較join_data0的8至32位的數據是否與0x2828一致,再次用48位的比較器比較join_data1的24~47位的數據是否與0xF6F6一致,然后用64位的比較器比較join_data2的40至55位的數據是否與0xF6一致,最后將這幾個比較器的比較結果相與,如果為高則檢測到幀頭數據,如果為低則沒有檢測到幀頭數據。

ODU0_8bit的幀頭字符檢測模塊的設計與ODU1的幀頭字符檢測模塊的設計方法一致,此處不再說明。

4 成幀器模塊功能仿真及結果分析

如圖4為OTU2成幀器的幀頭字符定位檢測和幀同步電路仿真結果圖。data_in表示幀頭字符定位檢測的輸入數據,join_data為128bit的拼接數據,check_1st置高表示找到幀頭,combine_data表示找到幀頭后輸出的數據,line和colunm分別表示輸出數據的行列指示。從圖中可以看出當check_1st為高時行列指示全部清零重新開始計數,并且將join_data中拼接的幀頭信息找到后提取出來作為combine_data數據的第一行第一列為幀頭數據“f6f6f6282828xxxx”。data_in_0表示幀同步的輸入數據,state為四種狀態轉移信號,check_1st為高表示找到幀頭,data_out為OTU2成幀后的數據輸出,line和colunm分別表示輸出數據的行列指示。從圖中可以看出當找到幀頭時行列指示清零開始重新計數,幀頭位置數據為“f6f6f6282828xxxx”。

如圖5為ODU1成幀器的幀頭字符定位檢測和幀同步電路仿真結果圖。read_en_gap為ODU1時鐘的使能信號,data_in表示幀頭字符定位檢測的輸入數據,join_data0、join_data1、join_data2分別為輸入數據的拼接,check_out置高表示找到幀頭,com?bine_data表示找到幀頭后輸出的數據,line和col?unm分別表示輸出數據的行列指示。從圖中可以看出當check_out為高時行列指示全部清零重新開始計數,并且將join_data2中拼接的幀頭信息找到后提取出來作為combine_data數據的第一行第一列為幀頭數據的起始數據。data_in1表示幀同步的輸入數據,state為四種狀態轉移信號,check_out為高表示找到幀頭,data_out為ODU1成幀后的數據輸出,line和colunm分別表示輸出數據的行列指示。從圖中可以看出當找到幀頭時行列指示清零開始重新計數。

圖4 OTU2成幀器的幀頭字符定位檢測和幀同步電路仿真結果圖

圖5 ODU1成幀器的幀頭字符定位檢測和幀同步電路仿真結果圖

5 結語

本文設計的成幀器模塊完成的主要功能是從輸入的OTU2或ODUK數據單元中找到處于任意位置的固定48bit數據,找到固定的48bit數據后判斷是否是合法的幀頭,如果合法則給出行列指示,否則重新進行查找。對于不在數據格式首位的幀頭進行數據重排并校正行列指示,再進行后續處理。有效地解決了解復用處理電路中沒有按照正確的幀格式字節對齊的數據所帶來的問題。通過仿真結果表明,該電路能夠準確地完成幀頭字符定位檢測。

猜你喜歡
行列字符字節
No.8 字節跳動將推出獨立出口電商APP
超級快遞員
論高級用字階段漢字系統選擇字符的幾個原則
字符代表幾
一種USB接口字符液晶控制器設計
圖片輕松變身ASCⅡ藝術畫
No.10 “字節跳動手機”要來了?
一節公開課的點點滴滴
人類進入“澤它時代”
重要更正
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合