MGT(Multi-gigabit transceiver)在業(yè)界MGT是高速串行收發(fā)器模塊的簡稱,xilinx公司在其artix7、kintex7以及virtex7里集成了數量不同的MGT用于實現(xiàn)FPGA與外界的高速串行通信,并且根據支持線速度的不同賦予了它新的名稱。另外,Spartan7里面沒有MGT。 在artix7里面,MGT被稱作GTP;在kintex7里面,MGT被稱作GTX;在virtex7里面,MGT被稱作GTX/GTH/GTZ; GTP最高線速度6.6Gb/s,GTX最高線速度12.5Gb/s,GTH最高線速度13.1Gb/s,GTZ最高線速度28.05Gb/s(太牛逼,沒用過,本篇不做介紹了)。 無論是GTP、GTX還是GTH,都是由3個模塊構成:1、時鐘模塊2、數據發(fā)送模塊3、數據接收模塊 首先我們看看GTP的構成,如圖1所示:
圖1:GTP結構圖
在artix7中,每個GTP包含1個時鐘模塊、4個數據發(fā)送模塊以及4個數據接收模塊。一個時鐘模塊負責管理4對收發(fā)器(1個發(fā)送模塊和1個接收模塊合為一對收發(fā)器)。
時鐘模塊的輸入端可以接2組差分參考時鐘,內部也有2個頻率為1.6GHz~3.3GHz的PLL,這樣就允許RX和TX工作在不同的參考時鐘下。
我們在來看看GTX/GTH的構成,如圖2所示:
圖2:GTX/GTH結構圖
在kintex7/virtex7中,每個GTX/GTH同樣包含1個時鐘模塊、4個數據發(fā)送模塊以及4個數據接收模塊。一個時鐘模塊負責管理4對收發(fā)器。但是時鐘模塊內有4個CPLL,即每個收發(fā)器都包含一個。同時還有一個QPLL。那么CPLL和QPLL有何不同呢? 在GTX里面,CPLL的頻率范圍為1.6GHz~3.3GHz,支持的最高線速度為6.6Gb/s。在GTH里面,CPLL的頻率范圍為1.6GHz~5.16GHz。當收發(fā)器的線速度非常高,其CPLL的頻率范圍已無法滿足需求時,QPLL就出場了。 在GTX里面,QPLL的工作頻率在低波段模式時為5.93 GHz~8.0GHz,在高波段的工作頻率為9.8GHz~12.5GHz。在GTH里面,QPLL的工作頻率為8.0GHz~13.1GHz。 因此,無論是artix、kintex還是virtex,PLL的頻率范圍決定了收發(fā)器的最高線速度。 咱們再看看數據發(fā)送模塊的結構,如圖3所示:
圖3:TX模塊
TX模塊的每一個單元模塊在其datasheet都有詳細的描述,有興趣的可以仔細去研究。咱們在使用TX功能時,大概知道其工作原理即可。
正如圖上所標識的,咱們將需要發(fā)送的16/32bit并行數據通過內部接口fifo“1”傳遞給8/10編碼模塊“2”,模塊“2”的10bit數據由于需要跨時鐘域,因此緩存到fifo“3”后再傳遞到并串轉換模塊“4”,“4”輸出的串行數據再通過接口5處理,調整數據的電氣性能就通過高速IO口發(fā)送出去了。 咱們再看看數據接收模塊的結構,如圖4所示:
圖4:RX模塊
RX模塊的使用相對發(fā)送模塊來說復雜一點點,但僅僅也是一點點而已。其數據流通的路徑和TX模塊正好相反,咱們這里就不再細說。 根據實際使用的經驗來看,RX模塊數據接收時,串并轉換的時鐘域、數據緩存的時鐘域、RX與FPGA內部邏輯之間的時鐘域,咱們千萬要注意,只要一混淆,數據接收就會出現(xiàn)莫名的bug。最簡單的方式就是使用RX接收數據的恢復時鐘,datasheet也推薦了其他幾種方式,大家也可以研究研究。 另外,RX數據的對齊咱們只要管理好上圖標注?的部分,監(jiān)測其輸出的三兩個標識信號,就可完成數據的正確獲取。
總之GTP、GTX、GTZ的使用沒有想象的復雜,例化這些IP核時,xilinx官方都給出了帶詳細注解的源碼例程,咱們少量改動就可以用在自己項目上了,其四五百頁的英文datasheet很多的內容都可以走馬觀花,不會影響咱們使用它的功能。