FC-AL系統中FPGA的彈性緩存設計
引 言
本文引用地址:http://dyxdggzs.com/article/163266.htm一個(gè)簡(jiǎn)化的異步數據通信系統如圖1所示。接收機端從接收到的來(lái)自串行鏈路的比特流中提取時(shí)鐘信號Clk1,作為其工作時(shí)鐘源;而發(fā)送機端采用本地晶振和鎖相環(huán)產(chǎn)生的時(shí)鐘Clk2,作為其工作時(shí)鐘源。接收機在時(shí)鐘Clk1的上升沿把數據寫(xiě)入彈性緩存,發(fā)送機在時(shí)鐘Clk2的上升沿從彈性緩存中讀出數據,從而實(shí)現數據的同步。
雖然光纖通道仲裁環(huán)中的所有通信設備必須工作在同一頻率,但圖1中兩個(gè)不同源的時(shí)鐘信號Clk1和Clk2除了在相位上可能存在差異外,由于制造工藝的因素,晶振產(chǎn)生時(shí)鐘時(shí)其頻率也是被允許有一定誤差存在的。這個(gè)誤差范圍為±100×10-6,即在每一百萬(wàn)個(gè)理想時(shí)鐘周期的時(shí)間內容許±100個(gè)時(shí)鐘周期的偏差。兩個(gè)不同的晶振產(chǎn)生同一頻率的時(shí)鐘時(shí),它們之間可能存在的誤差最大為200×10-6。所以,對于由不同晶振產(chǎn)生的同一頻率的2個(gè)時(shí)鐘,除了相位上的不同外,在最壞情況下,經(jīng)過(guò)106/200=5 000個(gè)周期后,它們之間將出現一個(gè)時(shí)鐘周期的偏移。對于連續的數據流,由于用于時(shí)鐘同步的彈性緩存的大小有限,如果不能正確處理這個(gè)時(shí)鐘周期的偏移,將會(huì )導致緩存溢出,損壞有效數據,嚴重影響系統的性能。
1 FC-AL彈性緩存管理的基本原理
FC-AL通信系統中,也采用彈性緩存來(lái)解決數據在不同時(shí)鐘域的同步問(wèn)題,并通過(guò)對彈性緩存的管理適時(shí)地向緩存中添加或刪除填充字,以控制緩存中有效傳輸字的數量(本設計中彈性緩存的存儲單位為字),從而達到對時(shí)鐘傾斜的補償。填充字是FC-AL協(xié)議中定義的一類(lèi)特殊的傳輸字,它們在幀與幀的間隙,且在幀界定符之外被傳輸。所以,彈性緩存的管理對這些特殊傳輸字進(jìn)行的適當的添加或刪除操作,不會(huì )損壞數據幀或影響環(huán)網(wǎng)的正常運作。何時(shí)對彈性緩存添加或刪除填充字,是由緩存的占用率來(lái)決定的。彈性緩存空間的使用狀態(tài)分為4個(gè)等級:添加填充字等待、保持狀態(tài)、低級別的刪除填充字等待以及高級別的刪除填充字等待。當彈性緩存的寫(xiě)時(shí)鐘慢于讀時(shí)鐘時(shí)(如圖1中Clk1的頻率略低于Clk2的頻率),緩存可能被讀空而出現誤讀,此時(shí)需要添加填充字,相當于增加緩存中可讀的數據量,防止緩存出現下溢;當彈性緩存的寫(xiě)時(shí)鐘快于讀時(shí)鐘時(shí)(如圖1中Clk1的頻率略高Clk2的頻率),緩存可能出現被寫(xiě)滿(mǎn)導致錯誤的數據覆蓋,此時(shí)需要刪除填充字,以增加緩存中的可用空間防止緩存出現上溢。
彈性緩存管理的基本原理如圖2所示。假設彈性緩存的深度為4,圖中被標識為0或1的每一個(gè)小格代表彈性緩存的一個(gè)存儲空間。置1,表示相應的存儲空間已被寫(xiě)入有效數據,且未被讀出;置0,表示相應的存儲空間未被寫(xiě)入,或寫(xiě)入的數據已被讀出。

由于對于緩存的讀操作必須是在有數據已寫(xiě)入緩存后才能開(kāi)始,假設當緩存中有2個(gè)空間被寫(xiě)入時(shí)才開(kāi)始讀操作。所以,對于隨后的彈性緩存管理,當緩存中剛好有2個(gè)空間被占用時(shí),其處于保持狀態(tài),執行正常的讀寫(xiě)操作;當緩存中超過(guò)2個(gè)的空間被占用時(shí),其處于刪除填充字等待的狀態(tài),說(shuō)明寫(xiě)時(shí)鐘的頻率高于讀時(shí)鐘的頻率,需要進(jìn)行刪除填充字的操作;當緩存中少于2個(gè)空間被占用,其處于添加填充字等待狀態(tài),說(shuō)明寫(xiě)時(shí)鐘的頻率低于讀時(shí)鐘的頻率,需要進(jìn)行添加填充字的操作。
2硬件電路設計
用異步FIFO實(shí)現彈性緩存的關(guān)鍵是監測緩存空間的占用率,以此來(lái)判斷讀寫(xiě)時(shí)鐘可能存在的微小差異,預見(jiàn)彈性緩存可能出現讀空還是寫(xiě)滿(mǎn),并決定在何時(shí)進(jìn)行填充字的添加或刪除操作,以及何種等級的刪除操作,并保證在添加或刪除操作之后不對其后的數據讀寫(xiě)產(chǎn)生任何影響。需要注意的是,這里的添加或刪除填充字的操作都必須在讀時(shí)鐘域進(jìn)行。
在異步數據通信系統中,使用彈性緩存實(shí)現數據在多時(shí)鐘域之間的同步存在兩個(gè)問(wèn)題――數據延時(shí)和緩存大小。數據延時(shí)指的是,數據從被寫(xiě)入緩存到從緩存中讀出的時(shí)間差。假設彈性緩存的大小為N,在不出現數據覆蓋的前提下,當前數據被寫(xiě)入緩存的第N個(gè)存儲空間,而此時(shí)緩存中還有N-1個(gè)空間中的數據還未被讀出,至少在讀時(shí)鐘域看來(lái)是這樣的,那么當前被寫(xiě)入的數據需要至少N-1個(gè)讀時(shí)鐘周期的延時(shí)后才能被讀出。由此可見(jiàn),緩存空間越大,經(jīng)過(guò)緩存的數據的延時(shí)可能越大。但是,為了防止緩存將滿(mǎn)或將空而添加或刪除填充字的操作不能得到及時(shí)的執行而致使緩存溢出,須設置較大的緩存空間,給緩存管理提供較充足的時(shí)間范圍,從而減小了緩存出現溢出的可能性。
為了獲得盡可能小的數據延時(shí),同時(shí)不對數據的正常傳輸產(chǎn)生影響,在緩存大小滿(mǎn)足系統基本要求的情況下,如何更精確地判斷彈性緩存空間的占用率就變得很重要了。為了提高緩存管理的精度,本文中所采取的彈性緩存的設計方法如圖3所示。在寫(xiě)時(shí)鐘的上升沿將數據寫(xiě)入到基于寫(xiě)時(shí)鐘上升沿的寫(xiě)地址產(chǎn)生邏輯的輸出,即寫(xiě)指針所指向的彈性緩存空間;在讀時(shí)鐘的上升沿將基于讀時(shí)鐘上升沿的讀地址產(chǎn)生邏輯的輸出,即讀指針所指向的彈性緩存空間的數據讀出。此外,還各設置了一個(gè)基于時(shí)鐘下降沿的讀和寫(xiě)地址產(chǎn)生邏輯,但它們不對彈性緩存的讀寫(xiě)操作產(chǎn)生影響。分別對基于讀時(shí)鐘上升沿的讀地址和經(jīng)過(guò)延時(shí)后的基于寫(xiě)時(shí)鐘上升沿的寫(xiě)地址,以及基于讀時(shí)鐘下降沿的讀地址和經(jīng)過(guò)延時(shí)后的基于寫(xiě)時(shí)鐘下降沿的寫(xiě)地址進(jìn)行異步比較。綜合兩個(gè)比較結果,判斷因同頻但不同源的讀寫(xiě)時(shí)鐘之間可能存在的差異而導致的彈性緩存空間占用率的變化。判斷得到的異步信號通過(guò)一個(gè)同步邏輯被同步到讀時(shí)鐘域,控制基于讀時(shí)鐘上升沿的讀地址產(chǎn)生邏輯的輸出,從而實(shí)現對彈性緩存中填充字的添加或刪除,達到預防緩存出現溢出的目的。
3仿真結果分析
用Verilog語(yǔ)言實(shí)現圖3所示電路的RTL描述,并對其用ModelSim進(jìn)行仿真,仿真結果如圖4和圖5所示。兩圖中,CLK_rcv和CLK_local分別為頻率非常相近的緩存的寫(xiě)時(shí)鐘和讀時(shí)鐘。


圖4中,CLK_rcv的時(shí)鐘頻率略低于CLK_local的時(shí)鐘頻率,彈性緩存有被讀空的可能。當CLK_local比CLK_rcv多出半個(gè)時(shí)鐘周期左右后,緩存管理就發(fā)出添加填充字的請求,以在最近的幀間隙進(jìn)行添加操作。
圖5中,CLK_rcv的時(shí)鐘頻率略高于CLK_local的時(shí)鐘頻率,彈性緩存有被寫(xiě)滿(mǎn)的可能。當CLK_local比CLK_rcv少了半個(gè)時(shí)鐘周期左右后就發(fā)出較低級別的刪除填充字的請求,以在最近的間隙進(jìn)行刪除操作。若低級別的刪除操作未被及時(shí)執行,致使緩存空間占用率進(jìn)一步提高,則請求較高級別的刪除操作。
從圖4和圖5中可以看出,添加填充字,即在當前時(shí)鐘周期不讀緩存空間的數據,而是發(fā)送一個(gè)當前填充字;刪除填充字,即在條件滿(mǎn)足的情況下跳過(guò)當前讀地址空間,直接讀取下一個(gè)地址空間中的數據。
結 語(yǔ)
本文提出的彈性緩存設計方法,充分利用了光纖通道協(xié)議的特性,通過(guò)提高對彈性緩存的管理精度,減小了數據在彈性緩存中可能的最大延時(shí),有利于提高仲裁環(huán)網(wǎng)的整體性能。
評論