NetFPGA-SUME10G以太網接口仿真問題

NetFPGA-SUME使用的是Xilinx的10G 子系統IP核心

該IP核心包含了PCS/PMA核和MAC核,方便使用,有樣板工程,很有意思的是官方根據是否包含share logic分別提供了兩個樣板工程。example design的仿真TB文件包含了豐富的內容,模擬了 以太網64/66B編碼、解碼和同步的過程,對理解以太網底層原理很有幫助,1500行左右代碼。想借助該TB文件仿真NetFPPGA-SUME工程中封裝的10G IP核心,以便加深理解,遇到些問題:

1.NetFPPGA-SUME原工程師block Design模式,而且裏面的IP是使用“預定製的官方IP”(實際沒有產生)結合自己代碼再封裝爲各個IP,包括網口、PCIE等等,在創建工程時,先創建定製的官方IP,然後再生成block Design,在Vivado2006環境下這樣搞,你打開再封裝的IP你會發現系統找不到,“預定製的官方IP”,雖然工程裏確實有,看下面兩張圖。明明生成了IP核,但就是找不到。

最神奇的是,整個工程綜合、實現和生成bit文件都沒啥問題。但是這樣仿真是不行的,我試過。最後沒辦法,我把工程改爲了非block design模式,預定製的官方IP”就可以被正常找到了。

 

2.10G IP核需要使用sim_speedup_control信號,原工程時沒有的,需要引出。

 

3.example design的仿真TB文件用到了core_ready信號,該信號用來判斷IP核是否就位,由MAC核PCS/PMA的狀態輸出向量決定,具體看example design的生成方法,需要注意的NetFPPGA-SUME工程中封裝的10G IP核(nf_10g_interface_shared)對MAC核PCS/PMA的狀態輸出向量進行了二次處理,最好使用官方10G IP核直接出來的狀態輸出向量生成。

 

4.nf_10g_interface_shared中nf_10g_attachment用來將數據進行跨時鐘域轉換和位寬轉換,裏面用到FIFO36E1,仿真過程中報錯如下:

DRC Error : Reset is unsuccessful at time               106722.  RST must be held high for at least five RDCLK clock cycles, and RDEN must be low before RST becomes active high, and RDEN remains low during this reset cycle.
DRC Error : Reset is unsuccessful at time               106722.  RST must be held high for at least five WRCLK clock cycles, and WREN must be low before RST becomes active high, and WREN remains low during this reset cycle.

仿真看了下相關信號如下圖,發現讀時鐘(core_clk)晚於復位信號(arest_clk156),分析了下代碼,發現主要原因是因爲讀時鐘與復位信號無關聯造成,時鐘是由MMCM生成,但是arest_clk156卻是由10G IP核生成,於是將FIFO36E1的復位信號與MMCM的locked信號進行了關聯,使用reference_nic_proc_sys_reset輸出的復位信號,問題得到解決

5.原工程的復位控制用的proc_sys_reset IP核心,該IP核心不使用的輸入復位信號應當懸空,之前沒處理好,導致復位輸出異常(見上圖)

 

上述問題解決後,將AXIS總線進行了換回,仿真測試通過,仿真模擬網口收發數據正常

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章