上一篇7系列收發器博文講解了GTP IP核的基本配置,本文繼續分析如何將它使用起來。生成IP核後打開example design,先看看工程中包含的文件結構。函數
頂層文件下包含了gtp ip核系統頂層文件、frame_gen以及frame_check三類模塊。frame_gen和frame_check用於測試過程當中的數據包產生和接收檢測(因爲我在配置IP核時使能了兩個通道,所以工程中有兩組frame_gen和frame_check模塊),gen模塊讀發送樣式,check模塊則將接收到數據與本地存儲樣式對比,從而判斷數據傳輸是否正確。下面截取一段gen模塊內代碼:測試
發現gen模塊是經過系統函數$readmem讀取gt_rom_init_tx.dat文件來初始化rom,發送數據則直接從rom中讀取。雖然$readmem和initial是不可綜合語句,但其功能與.mif文件初始化ROM IP核是相似的。check模塊與gen模塊相似,但有一點比較值得借鑑。spa
根據上邊的註釋能夠看出,這個IP核在使用32bit用戶數據位寬時,會發生錯位現象。所以發送數據時全部comma碼要放在32bit數據四個字節的同一字節中,最多見的是均放在最低字節,這樣接收端能夠根據控制字指示信號爲1的位置找出錯位狀況,進而讀數據進行從新對齊。好比當rxctrl == 4'b1000,則錯誤狀況和重對齊方式以下:ip
d0'表明上一個數據的最低字節部分。其餘錯位狀況的重對齊方式同理,如今看下check模塊中根據sel信號對接收數據重對齊的邏輯。it
能夠看出重對齊方式與剛纔講的方法一致。所以當測試完畢後,去除frame_gen和frame_check模塊並將gt數據端口開放到頂層後,接收端用戶側也要有相似的邏輯防止數據錯位。class
再來看下頂層文件中關於原語的使用:配置
IBUFDS是差分信號輸入緩衝器,用來將差分信號變爲單端信號。而BUFG是全局緩衝,其輸出到達FPGA內部CLB IOB RAM的時鐘延遲和抖動是最小的,從而使系統工做穩定。方法
最後,爲保證最基本的通訊功能,還需作三件事:im
1. 去除gen和check邏輯塊,並將用戶數據端口開放到工程頂層;通信
2. 接收端用戶側例化數據重對齊模塊保證接收正確;
3. 例化PLL產生100MHz時鐘信號做爲GTP子系統工做時鐘;