PGL22G開發板中包含一個以太網接口,紫光同創FPGA通過RGMII接口與外部PHY芯片互連。而在千兆模式下,RGMII的運行速度為125MHz的雙沿并行數據采樣(DDR)。
在本工程中計劃測試以太網在千兆速率下,以滿流量收發包時的丟包率問題。個人認為如果千兆以太網測試能夠達到要求的話,該芯片應該可以滿足大多數中低端的應用場景。
整個設計的系統結構如下圖所示:其中①串口模塊用作命令行交互控制工具,用于對內部模塊進行控制和內部模塊狀態信息輸出,從而方便調試;②以太網0包含一個完整的MAC以及報文產生、報文解析模塊、報文統計功能,是本工程的主要測試對象;③以太網1包含一個完整的MAC,在本工程中沒有實際用途,僅用于“消耗”FPGA資源,從而便于測試FPGA在資源“壓力”下的性能。
由于千兆以太網在工作時需要125MHz的時鐘,因此本設計全局系統時鐘初步定為125MHz。由于本工程已有一些現成的模塊加上ALINX提供的參考工程,設計/整理/仿真一步步走下來,很快就可以上PANGO軟件來實現了。
第一次運行結果如下,出現了一眾時序違規路徑,125MHz的主工作時鐘頻率無法滿足。
首先想到的是對系統工作時鐘進行修改,將系統時鐘頻率降低為100MHz,僅RGMII接口模塊部分功能使用125MHz工作頻率。
第二次運行結果,時序通過(實際運行了多次,生成時鐘約束、跨時鐘域路徑false等約束被逐漸加入)。結果還算不錯。
上板運行,通過串口輸入到FPGA或FPGA內部信息打印輸出均正常。
再次嘗試125MHz的系統時鐘。分析第一步中的時序falling結果,發現是hold時序路徑違規數比較多。其實在多次嘗試后發現出現hold時序違規的次數比較多,經驗表明可以通過工程設置來嘗試一下,在軟件中逐個設置選項查看,果然有一項可以設置:
勾選Optimize Hold Timing選項并將最大優化值改大一些,再次運行。但是結果似乎不太明顯。
為驗證FPGA性能,暫時不考慮使用設計優化的方式去優化時序,繼續查找通過設置工具的實現條件來嘗試。這里主要嘗試改變如下圖中的2個條件。通過多次編譯發現,改變“Seed”的效果不太明顯,但是將迭代次數“Placement Iteration”增加可以起到比較明顯的效果(同時編譯時間會變長)。
時序有好轉但是還沒有達到想要的時鐘頻率。