七、綜合項目實踐課——千兆網項目專題課
【問題7.1】千兆網課程里的udp和百兆網通用的嗎?
答:本課程講述的是千兆網,對于百兆網來說,UDP IP MAC和ARP協議都是相同的,
本課程提供的是千兆網的工程,如果要使用百兆網,需要根據上面的內容來修改。
【問題7.2】千兆網課程有實現TCP協議嗎?
答:本千兆網課程實現的是UDP協議,沒有TCP協議。
【問題7.3】請問下,三速以太網IP核配置時,32bit對齊選項的意義在哪里?
答:在接口為32bit時,每個VLD有效時的數量是4個字節。由于MAC頭是14字節,不是4的整數倍,
在發送方向,在補上MAC頭后,
必須調整數據(拿出2字節與MAC頭最后2字節湊成一個4字節的有效數據),這樣處理比較麻煩。
同時道理,接收方向,去掉14字節MAC頭后,
會有一個VLD多出2字節的有效數據,這樣調整也麻煩。為此,MAC IP核里有一個功能,
就是32位對齊功能。該功能決定,在SOP位置時,
最高2字節是否為無效數據。 當是無效數據模式時,發送方向插入2字節無效數據+14字節MAC頭;
在接收方向,刪除前16字節MAC頭,剩下就是效數據。這樣處理就方便很多了。
【問題7.4】 只要勾選了32bit對齊功能,IP核自動添加2字節的無效數據?
答:勾選對齊后,接收方向將刪除無效數據,直接輸出數據,即SOP位置的高2字節也是有效的,
一直到EOP位置。發送方向,認為從SOP到EOP的位置都是有效的。
不勾選的話,接收方向,IP核輸出、SOP位置的高2字節是無效數據。
發送方向,進到IP核的數據里,將SOP位置的高2字節視為無效數據。
【問題7.5】如下圖所示,當使用了PAD_EN功能時,接收方向,會將PAD去掉,但實際上沒有去除,是怎么回事?
答:請看下面描述:第一段,當值小于600,該域反映的是長度,才會繼續檢查PAYLOAD長度,
進而才會有REMOVAL。
當值大于600時,該域反映的是類型而已,則不會REMOVAL。
【問題7.6】課程里會包含TCP協議嗎?
答:TCP協議使用邏輯實現非常復雜,所以本課程不會包含此部分內容。
【問題7.7】RGMII支持10M/100M/1000M三種模式嗎?
答:RGMII是"吉比特介質獨立接口"的含義,即1000M的傳輸接口。其他幾種接口包括GMII、MII等。
注意一下,10M/100M/1000M三種模式,指的是該“芯片”支持這三種接口,不是說RGMII支持。
當芯片采用了RGMII或GMII時,就傳輸1000M;當采用了MII 100M時,就是傳輸100M。
注意的是,RGMII和MII的部分管腳是可以復用的。
【問題7.8】千兆網配置寄存器的定義代碼中,下面兩個IP核數據手冊中沒有說明,是什么作用的?
答:第一行語句的作用是“等待10000個時鐘周期”。目的是當完成前面的配置后,等待10000個時鐘后,再去配置下面的寄存器。這是因為有時
候,配置完上面寄存器后,有可能要等一段時間才起作用,所以要等一等。這個“等待”功能是FPGA里面代碼實現的。
第二句作用是測試使用的,可以刪除,在調試時看看接口是否正確。
【問題7.9】本項目有沒有配置外部的PHY芯片?
答:本項目是沒有配置的,因為默認PHY芯片是不用配置就能正確使用的。
【問題7.10】、百兆網和千兆網的區別是什么?
答:1. IP核是一樣的
2. 千兆網使用的是GMII接口,百兆網則是MII接口。gmii數據線是8位;MII接口使用是4位數據線,也就是TXD低4位和RXD低4位。
3. 時鐘頻率不同,千兆網是125M,百兆網是25M時鐘。
4. 百兆網的TX時鐘來自于PHY芯片,芯片管腳使用的是tx_clk,而不是gtx_clk。
5. MII接口的4位數據線,是先發1個字節的低4位,再發高4位。
【問題7.11】老師,咱們千兆網項目中,為啥用sharkwire抓包的時候 最大傳輸速率到不了千兆呢?
答:因為包文傳輸的時候,會有消耗的,例如包與包之間有幀間隙,并且每個包會有前導碼和FCS部分。因此達不到理論的千兆。
【問題7.12】請問一下在千兆網工程里,初始化mac IP核時,signaltapii有些reg_cnt剛開始時,add_wdata會出現一小段莫名其妙的數據,是怎么回事 ?
答:請注意這個signaltap采樣的時鐘一定要跟代碼模塊的時鐘一致。
SignalTap使用教程:http://www.mdy-edu.com/jishuwenz/2019/1210/107.html
【問題7.13】在千兆網的rx_filter模塊中,讀數據的時候為什么用add_cnt=m_empty==0,這個信息FIFO的不空作為讀條件?
答:信息FIFO非空,表示數據FIFO中存有一個完整的包文,因為需要判斷包文是否正確,所以需要數據FIFO中保存一個完整包文之后再讀出。
由于本模塊需要將32位的數據轉成16位的,計數器cnt數兩次,表示數據FIFO需要兩個時鐘讀出一次,當遇到最后eop的時候,
由于可能存在無效字節,所以當無效字節為2個或者3個的時候,計數器只需要數一次就夠了。
【問題7.14】在千兆網的rx_filter模塊中,信息FIFO深度為什么設置為32,設置為1就可以了吧?
答:這里設置為32只是順手而為,而且占用的資源也不是很多,所以就沒有進行修改,深度改為1也是可以的。
【問題7.15】在udp發送的過程中,假設源端口為0x1234,目的端口為0x5678,那么發送的是12345678還是56781234?
答:發送的時候是按照12345678來發送的。
【問題7.16】為什么udp協議在發送和接收的時候,源端口和目的端口順序會反?
答:包文的協議時固定的,只會按照源地址加目的地址的格式發送。
1. FPGA發送的時候,FPGA產生包文,端源端口是1234,目的端口是5678。然后發送格式是源+目,因此發送的是1234_5678
2. FPGA接收的時候,PC產生包文,源端口是5678,目的是1234,然后發送的是源+目,因此是5678_1234。
【問題7.17】請問一下,我編譯千兆以太網的時候,為什么把這個clogb2文件添加進去就會報錯,說是sv文件?還有這個文件有什么作用?謝謝
答:clogb2不是一個完整的module文件,它是被用include的方法加入代碼中的。它不需要加到工程上,所以可以把它去掉。
【問題7.18】請問下,在做練習工程的時候,需要自己設計MAC首部發送電路,MAC首部14字節,但數據位是4字節的,我需要定義 發送首部的計數器,這里4是不能被14整除的,我應該怎么處理?
答:1、可以在設計代碼的時,把產生的mac頭、IP頭、UDP頭拼接起來的時候,在最高位補2字節的無效數據零。
2、或者在mac_ip核進行相關的設置,具體可以查看相關數據手冊附:數據手冊在打開IP核后如圖所示位置查看
【問題7.19】千兆網轉百兆網的時候,需要給phy芯片一個參考時鐘,是怎么給的?
答:開發板上有一個12M的時鐘芯片,是給phy芯片的。外部晶振的事,跟FPGA無關
【問題7.20】我的采樣時鐘就是模塊的工作時鐘(always塊里的);現在從MAC_IP核輸出的數據不正確,根據常見問題PDF里問題1和6的解答,
有兩種情況,如果時鐘沒問題那就有可能是IP核的輸入信號有問題。我對應的代碼和signaltap采集到的數據如圖:
請問這種情況下,輸入的數據算是正確的嗎?
答:結果是正確的。原因同上【問題9】
【問題7.21】再設置好電腦的IP地址之后,把界面關掉,然后再打開就沒有了,需要重新設置,怎么解決?
答:
1、點擊左下角的WIN圖標,輸入CMD然后回車,打開DOS模式窗口。
2、在DOS命令行提示符下直接輸入:“netsh winsock
3、reset”,然后回車,會提示需要重啟,不要管它。
4、在DOS命令行提示符下直接輸入:“netsh int ip reset
5、reset.log”,然后回車,提示重新啟動計算機完成此操作。
6、關閉DOS窗口,重新啟動計算機,問題解決。
【問題7.22】千兆網我們的和用mdio接口的有什么區別? 我們的教程是沒有用到這個接口的
答:MDIO接口是用來配置外部的PHY芯片的,不是用來傳輸數據的,也就不是做網絡協議使用的。 當您需要配置外部的PHY芯片時,可以使用MDIO接口,否則可以不用。
【問題7.23】請問千兆網工程里,輸入給MAC_IP核的ff_rx_rdy信號為什么直接置1?跟速率和帶寬有關嗎?
答:rdy表示下游模塊準備好指示信號,如果準備好了就為1,沒準備好就為0。 在本案例中,下游模塊是rx_mac_analy模塊,該模塊支持rtl8122_a_mac_ip模塊任意速度的數據,
即無論怎么來,下游模塊都能接收并正確處理,所以在此處置為1(時刻準備好)就可以了
【問題7.24】請問,一個基礎問題,千兆網工程里多個模塊都調用了FIFO,在不同模塊里調用的fifo的例化名(比如:u_dfifo)能否重復?
答:可以試試操作,在不同模塊是可以重復的。
【問題7.25】這個是因為IP核沒有破解嗎?
答:這個錯誤就是高版本生成的工程在低版本中打開出現的編譯錯誤,用高版本的quartus打開即可(如18版本的)
【問題7.26】千兆網課程使用的是哪個PHY芯片?
答:本課程使用的是MP801芯片,使用提RTL8211芯片。但課程中,幾乎沒有涉及到PHY芯片的內容,PHY芯片使用的是默認配置。對于其他PHY芯片,也是通用的。
【問題7.27】千兆網課程是ALTERA,是否與XILINX的通用?
答:本課程主要涉及到各個協議的RTL實現,這部分代碼是通用的。但有一個MAC IP核,本課程的工程是使用ALTERA的,XILINX的亦有相同的IP,需要您移植。
總的來說,MAC IP占整個課程的比重不大,大概是5%的內容。
【問題7.28】您的UDP教程里面包不包含ARP和CRC328bit這兩個地方的講解?
答:有arp的講解,但crc就不包括。
【問題7.29】千兆網課程的源碼中有相應的tb仿真代碼嘛?
答:沒有,但如果要驗證功能正確性可以上板驗證和仿真文件
【問題7.30】請問下載程序后,電腦檢測不到本地以太網,把程序刪除又可以檢測?
答:可能程序里有復位管腳,把這些PHY芯片復位了。
【問題7.31】以太網通信中,抓包工具wireshark能抓到 但網絡調試助手收不到 是怎么回事?
答:可能性有如下幾種,請逐一排除。
1. IP地址不正確,請檢查IP地址,尤其注意目的IP和源IP的區別
2. 端口號不正確,請檢查端口號,尤其注意目的端口和源端口的區分。
3. 目的MAC地址不正確,可以嘗試發送廣播包文(非ARP包文)測試。
4. 包文過短,小于60字節。
【問題7.32】工程仿真的前導碼后為什么有兩個字節的0呢? 按理說應該緊跟目的MAC地址 圖中e8 6a就是目的MAC開頭.
答:MAC IP核的有一個32bit對齊的功能,關于該功能意義,請看【問題7.3】。
如果出現上圖中問題,有可能是MAC IP核中的32bit對齊功能設置有誤。
【問題7.33】千兆網項目中,是否包括TCP協議實現?
答:千兆網項目是使用的UDP協議,而非TCP協議。
目前來說,TCP協議由于有握手機制、重發機制等功能,在邏輯上實現相當困難,暫未看到商用的案例。
【問題7.34】高速采集后的數據 是存到內存或者flash嗎 ?
答:激光項目:采集到數據后,內部進行計算和處理,并將結果通過千兆網上傳到上位機。
大數據采集項目:從光纖采集到數據后,保存到DDR3中,然后讀出送到PCIE上位機。
【問題7.35】請問插上千兆網模塊后,PING不通?
答:千兆網模塊是一個基于PHY層的模塊,不是完整的網卡,實現的是PHY層的協議,沒有實現MAC層、TCP/IP層協議。
因此,不可能PING通(因為PING功能是在TCP/IP層實現的)。要實現PING功能,需要編寫FPGA程序來實現。
【問題7.36】插上設備后,電腦識別成百兆網問題?
答:上電后,電腦與千兆網模塊之間會開展自協商對話,根據雙方的環境確定通信速率。如果希望工作在1G,而實質協商成100M,則依次按如下檢查。
1. 檢查電腦網卡是否支持1G,具體請看網卡設置
2. 檢查網線是否支持1G,有類型的要求。
3. 換臺電腦試試
4. 以上都測試過后還不行,請找指導老師確認。
審核編輯:湯梓紅
評論
查看更多