如果同學們的學習問題我們帖子里面沒有的,請第一時間聯系我微信同步:易老師13112063618
明德揚還做了抖音系列短視頻,感興趣可以關注明德揚抖音號:FPGA技巧分享(87481069842)內容不斷更新!點贊+關注,學習不迷路!
【問題1】千兆網課程里的udp和百兆網通用的嗎?
答:本課程講述的是千兆網,對于百兆網來說,UDP IP MAC和ARP協議都是相同的,不同的是MAC IP核、FPGA和PHY芯片的接口不同。本課程提供的是千兆網的工程,如果要使用百兆網,需要根據上面的內容來修改。
【問題2】千兆網課程有實現TCP協議嗎?
答:本千兆網課程實現的是UDP協議,沒有TCP協議。
【問題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頭,剩下就是效數據。這樣處理就方便很多了。
【問題4】 只要勾選了32bit對齊功能,IP核自動添加2字節的無效數據?
答:勾選對齊后,接收方向將刪除無效數據,直接輸出數據,即SOP位置的高2字節也是有效的,一直到EOP位置。發送方向,認為從SOP到EOP的位置都是有效的。不勾選的話,接收方向,IP核輸出、SOP位置的高2字節是無效數據。發送方向,進到IP核的數據里,將SOP位置的高2字節視為無效數據。
【問題5】如下圖所示,當使用了PAD_EN功能時,接收方向,會將PAD去掉,但實際上沒有去除,是怎么回事?
答:請看下面描述:第一段,當值小于600,該域反映的是長度,才會繼續檢查PAYLOAD長度,進而才會有REMOVAL。當值大于600時,該域反映的是類型而已,則不會REMOVAL。
【問題6】課程里會包含TCP協議嗎?
答:TCP協議使用邏輯實現非常復雜,所以本課程不會包含此部分內容。
【問題7】RGMII支持10M/100M/1000M三種模式嗎?
答:RGMII是"吉比特介質獨立接口"的含義,即1000M的傳輸接口。其他幾種接口包括GMII、MII等。注意一下,10M/100M/1000M三種模式,指的是該“芯片”支持這三種接口,不是說RGMII支持。
當芯片采用了RGMII或GMII時,就傳輸1000M;當采用了MII 100M時,就是傳輸100M。注意的是,RGMII和MII的部分管腳是可以復用的。
【問題8】千兆網配置寄存器的定義代碼中,下面兩個IP核數據手冊中沒有說明,是什么作用的?
答:第一行語句的作用是“等待10000個時鐘周期”。目的是當完成前面的配置后,等待10000個時鐘后,再去配置下面的寄存器。這是因為有時候,配置完上面寄存器后,有可能要等一段時間才起作用,所以要等一等。這個“等待”功能是FPGA里面代碼實現的。第二句作用是測試使用的,可以刪除,在調試時看看接口是否正確。
【問題9】本項目有沒有配置外部的PHY芯片?
答:本項目是沒有配置的,因為默認PHY芯片是不用配置就能正確使用的。
【問題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位。
【問題11】問:老師,咱們千兆網項目中,為啥用sharkwire抓包的時候最大傳輸速率到不了千兆呢?
答:因為包文傳輸的時候,會有消耗的,例如包與包之間有幀間隙,并且每個包會有前導碼和FCS部分。因此達不到理論的千兆。
【問題12】請問一下在千兆網工程里,初始化mac IP核時,signaltapii有些reg_cnt剛開始時,add_wdata會出現一小段莫名其妙的數據,是怎么回事 ?
答:請注意這個signaltap采樣的時鐘一定要跟代碼模塊的時鐘一致。
SignalTap使用教程:http://www.cqqtmy.cn/jishuwenz/2019/1210/107.html
【問題13】在千兆網的rx_filter模塊中,讀數據的時候為什么用add_cnt=m_empty==0,這個信息FIFO的不空作為讀條件?
答:信息FIFO非空,表示數據FIFO中存有一個完整的包文,因為需要判斷包文是否正確,所以需要數據FIFO中保存一個完整包文之后再讀出。
由于本模塊需要將32位的數據轉成16位的,計數器cnt數兩次,表示數據FIFO需要兩個時鐘讀出一次,當遇到最后eop的時候,由于可能存在無效字節,所以當無效字節為2個或者3個的時候,計數器只需要數一次就夠了。
【問題14】在千兆網的rx_filter模塊中,信息FIFO深度為什么設置為32,設置為1就可以了吧?
答:這里設置為32只是順手而為,而且占用的資源也不是很多,所以就沒有進行修改,深度改為1也是可以的。
【問題15】在udp發送的過程中,假設源端口為0x1234,目的端口為0x5678,那么發送的是12345678還是56781234?
答:發送的時候是按照12345678來發送的。
【問題16】為什么udp協議在發送和接收的時候,源端口和目的端口順序會反?
答:包文的協議時固定的,只會按照源地址加目的地址的格式發送。
1.FPGA發送的時候,FPGA產生包文,端源端口是1234,目的端口是5678。然后發送格式是源+目,因此發送的是1234_5678
2.FPGA接收的時候,PC產生包文,源端口是5678,目的是1234,然后發送的是源+目,因此是5678_1234。
【問題17】請問一下,我編譯千兆以太網的時候,為什么把這個clogb2文件添加進去就會報錯,說是sv文件?還有這個文件有什么作用?謝謝
答:clogb2不是一個完整的module文件,它是被用include的方法加入代碼中的。它不需要加到工程上,所以可以把它去掉。
【問題18】請問下,在做練習工程的時候,需要自己設計MAC首部發送電路,MAC首部14字節,但數據位是4字節的,我需要定義 發送首部的計數器,這里4是不能被14整除的,我應該怎么處理?
答:
1、可以在設計代碼的時,把產生的mac頭、IP頭、UDP頭拼接起來的時候,在最高位補2字節的無效數據零。
2、或者在mac_ip核進行相關的設置,具體可以查看相關數據手冊附:數據手冊在打開IP核后如圖所示位置查看
【問題19】千兆網轉百兆網的時候,需要給phy芯片一個參考時鐘,是怎么給的?
答:開發板上有一個12M的時鐘芯片,是給phy芯片的。外部晶振的事,跟FPGA無關
【問題20】我的采樣時鐘就是模塊的工作時鐘(always塊里的);現在從MAC_IP核輸出的數據不正確,根據常見問題PDF里問題1和6的解答,有兩種情況,如果時鐘沒問題那就有可能是IP核的輸入信號有問題。我對應的代碼和signaltap采集到的數據如圖:
請問這種情況下,輸入的數據算是正確的嗎?
答:結果是正確的。原因同上【問題9】
【問題21】再設置好電腦的IP地址之后,把界面關掉,然后再打開就沒有了,需要重新設置,怎么解決?
答:
1、點擊左下角的WIN圖標,輸入CMD然后回車,打開DOS模式窗口。
2、在DOS命令行提示符下直接輸入:“netsh winsock
3、reset”,然后回車,會提示需要重啟,不要管它。
4、在DOS命令行提示符下直接輸入:“netsh int ip reset
5、reset.log”,然后回車,提示重新啟動計算機完成此操作。
6、關閉DOS窗口,重新啟動計算機,問題解決。
【問題22】千兆網我們的和用mdio接口的有什么區別? 我們的教程是沒有用到這個接口的
答:MDIO接口是用來配置外部的PHY芯片的,不是用來傳輸數據的,也就不是做網絡協議使用的。 當您需要配置外部的PHY芯片時,可以使用MDIO接口,否則可以不用。
【問題23】請問千兆網工程里,輸入給MAC_IP核的ff_rx_rdy信號為什么直接置1?跟速率和帶寬有關嗎?
答:rdy表示下游模塊準備好指示信號,如果準備好了就為1,沒準備好就為0。 在本案例中,下游模塊是rx_mac_analy模塊,該模塊支持rtl8122_a_mac_ip模塊任意速度的數據,即無論怎么來,下游模塊都能接收并正確處理,所以在此處置為1(時刻準備好)就可以了
【問題24】請問,一個基礎問題,千兆網工程里多個模塊都調用了FIFO,在不同模塊里調用的fifo的例化名(比如:u_dfifo)能否重復?
答:可以試試操作,在不同模塊是可以重復的。
【問題25】這個是因為IP核沒有破解嗎?
答:這個錯誤就是高版本生成的工程在低版本中打開出現的編譯錯誤,用高版本的quartus打開即可(如18版本的)
【問題26】千兆網課程使用的是哪個PHY芯片?
答:本課程使用的是MP801芯片,使用提RTL8211芯片。但課程中,幾乎沒有涉及到PHY芯片的內容,PHY芯片使用的是默認配置。對于其他PHY芯片,也是通用的。
【問題27】千兆網課程是ALTERA,是否與XILINX的通用?
答:本課程主要涉及到各個協議的RTL實現,這部分代碼是通用的。但有一個MAC IP核,本課程的工程是使用ALTERA的,XILINX的亦有相同的IP,需要您移植。總的來說,MAC IP占整個課程的比重不大,大概是5%的內容。
【問題28】您的UDP教程里面包不包含ARP和CRC328bit這兩個地方的講解?
答:有arp的講解,但crc就不包括。
【問題29】千兆網課程的源碼中有相應的tb仿真代碼嘛?
答:沒有,但如果要驗證功能正確性可以上板驗證和仿真文件
【問題30】請問下載程序后,電腦檢測不到本地以太網,把程序刪除又可以檢測?
答:可能程序里有復位管腳,把這些PHY芯片復位了。
【問題31】以太網通信中,抓包工具wireshark能抓到 但網絡調試助手收不到 是怎么回事?
答:可能性有如下幾種,請逐一排除。
1. IP地址不正確,請檢查IP地址,尤其注意目的IP和源IP的區別
2. 端口號不正確,請檢查端口號,尤其注意目的端口和源端口的區分。
3. 目的MAC地址不正確,可以嘗試發送廣播包文(非ARP包文)測試。
4. 包文過短,小于60字節。
【問題32】工程仿真的前導碼后為什么有兩個字節的0呢? 按理說應該緊跟目的MAC地址 圖中e8 6a就是目的MAC開頭.
答:MAC IP核的有一個32bit對齊的功能,關于該功能意義,請看【問題7.3】。
如果出現上圖中問題,有可能是MAC IP核中的32bit對齊功能設置有誤。
【問題33】千兆網項目中,是否包括TCP協議實現?
答:千兆網項目是使用的UDP協議,而非TCP協議。目前來說,TCP協議由于有握手機制、重發機制等功能,在邏輯上實現相當困難,暫未看到商用的案例。
【問題34】高速采集后的數據 是存到內存或者flash嗎 ?
答:激光項目:采集到數據后,內部進行計算和處理,并將結果通過千兆網上傳到上位機。大數據采集項目:從光纖采集到數據后,保存到DDR3中,然后讀出送到PCIE上位機。
【問題35】請問插上千兆網模塊后,PING不通?
答:千兆網模塊是一個基于PHY層的模塊,不是完整的網卡,實現的是PHY層的協議,沒有實現MAC層、TCP/IP層協議。因此,不可能PING通(因為PING功能是在TCP/IP層實現的)。要實現PING功能,需要編寫FPGA程序來實現。
【問題36】插上設備后,電腦識別成百兆網問題?
答:上電后,電腦與千兆網模塊之間會開展自協商對話,根據雙方的環境確定通信速率。如果希望工作在1G,而實質協商成100M,則依次按如下檢查。
1. 檢查電腦網卡是否支持1G,具體請看網卡設置
2. 檢查網線是否支持1G,有類型的要求。
3. 換臺電腦試試
4. 以上都測試過后還不行,請找指導老師確認。
【問題37】請問千兆網的rx_ip_analy.v文件,getlen是獲取總長度,第二個圖片get_len_4byte是完全不懂,請老師給個提示?還有+5又是什么意思呢
答:IP長度是20字節,get_len_byte是實質獲取到的數據長度(不包括IP頭),單位為字節;get_len_4byte是實質獲取到的長度(包括IP頭),單位為32bite。
【問題38】你好,這個rx_ip_analy部分的,我不太清楚到底是實際的采集長度小于等于輸入獲取的長度還是輸入獲取的長度小于等于實際采集的長度。感覺上面說應該cnt <get_len_4byte,下面又說act_len_byte < get_len是錯的
答:get_len:從長度字段獲取到的長度;get_len_4byte:從長度字段獲取到的長度,單位為4字節;act_len_byte:從數據字段中獲取到的長度;所以,從數據中獲取到的長度,小于“字段指示的長度”,就是錯的。
【問題39】請教大家一個問題,以太網調試的時候,主機網卡不是realtek PCIE FE Family,主機接收不到fpga發送的報文怎么辦?
答:一般來說,只要發送端發送的包文符合網口傳輸協議,無論什么網卡都可以都到包文。可以檢查一下
①fpga發送的包文協議是否正確;
②檢查網口識別的速率是否與工程速率匹配;
③檢查網卡是否有問題
【問題40】千兆網工程使用sgmii接口,請問在vivado中用哪個ip核呀?
答:GMII和RGMII接口使用的VIVADO?IP核為:tri_mode_ethernet_mac。而SGMII接口使用的IP核為:1G/2.5G Ethernet PCS/PMA OR SGMII。注意:SGMII模式,使用上面的這個IP核。注意,SGMII協議會與本課程中的MAC協議不同,要特別留意。
【問題41】問:千兆網課程的MAC是使用的官方IP核,還是自己RTL寫的?
答:本課程的UDP、IP、ARP等協議,是MDY的RTL代碼寫的。而MAC部分,使用的是官方IP核。 在平時使用中,MDY也自己寫了簡化版的MAC層部分代碼,主要實現的是添加前導碼和校驗和。 這一部分沒有文字說明,也沒有教程,如果有疑問,請自行消化。下載鏈接如下:http://fpgabbs.com/forum.php?mod=viewthread&tid=4481&page=1&extra=#pid5534
【問題42】問題:以太網約束中,建立時間的時序報告如圖一,請問下為什么?上面是4ns,下面又是加8ns呢?保持時間分析如圖二,為什么這兩個都加4?
圖一
答:
1. 這項目是RGMII模式,時鐘為125M,上升沿和下降沿均采樣,相當于時鐘周期是4ns。
2. 建議時間和保持時間都是從4ns開始計算,可能是約束時鐘時指定的,指定從4,可以看時鐘約束。(有些是從0開始)
3. 建立時間分析時,目的時鐘路徑要加上時鐘周期(4ns),保持時間分析時,目的時鐘路徑不需要加上時鐘周期。 原因請看時序約束問題匯總貼8.16 (http://www.cqqtmy.cn/wentijieda/20210410/1294.html)。
【問題43】請問一下,IP校驗和,校驗和字段不加,這部分應該是5吧,16*5。
解答: 如圖所示,ip_head[16*5-1 -:16]對應的是IP校驗和的值,但此時還未計算出IP校驗和的值,所以ip_sum=0,因此可以省略對ip_head[16*5-1 -:16]的求和計算。
【問題44】想請問一下,以太網tx_pack模塊的測試文件,這條語句是什么作用呀?
解答:用于計算長度的有多少個2字節長度的數據。length表示長度有多少字節,而len_2b表示長度有多少個2字節。信號length不取最低位,相當于數據除以2。
【問題45】問:當把板子和電腦的網線相連后,電腦那里顯示“未識別網絡”,如何解決“未識別網絡”問題?
答:“未識別網絡”這是正常現象。當把FPGA板子和電腦相連后,無論FPGA有沒有程序,此時雙方通信均是“MAC層”的協議。該層協議只識別出速率,即1G還是100M速率。而“未識別網絡”是指TCP/IP層的協議,需要TCP/IP層的完整協議支持,這是FPGA板子沒有的,也難以實現的功能,所以肯定是處于“未識別網絡”狀態。在真正應用中,FPGA板子和電腦只是點對點通信,不需要組網。
【問題46】問:如果我想將GMII口換成RGMII口的話,是只需要將位寬以及MAC重新配置一下就可以了嗎?由于RGMII口是雙邊沿采樣,所以不確定需不需要加額外的操作。我看網上用vivado的時候還需要用原語將phy給的rxclk處理一下才行。
答:將GMII口換成RGMII口的話,除了需要將位寬以及MAC重新配置一下,還需要更換一下硬件電路部分電阻。
【問題47】問:就是這個選項卡里面,勾選local loopback的時候,這個回環是MAC側回環還是phy側的回環呀
答:這個回環是MAC側回環。
【問題48】問:千兆網工程里有一個用戶時鐘:100M。這個100M時鐘是否可以用125M代替。
答:用戶時鐘只要大于75M即可。在提供的參考工程文檔里,有這個說明,可以看文檔。
【問題49】問:為什么是干什么用的?是不是IP頭?
答:偽首部僅是參與校驗和計算而使用的,不會放到包文中進行傳輸。
【問題50】問:如下圖,UDP包文協議中,各部分的位置在哪?
答:按照一個包文的先后順序,其包文字段分別是: 前導碼+MAC頭+IP頭+UDP頭(不包括偽首部)+UDP數據+校驗碼。
【問題51】問:接收方向做CRC校驗,是如何確認結果的正確性的?
答:CRC接收校驗有兩種方式。 第一種,接收過來的數據做CRC校驗,結果與接收過來的CRC校驗值比較,相同則接受正確,第二種,數據和接受過來的CRC結果一起做CRC校驗,結果應該為“固定數”。注意,這里是固定一個數,不一定是0,因為CRC算法里,還存在輸出結果反轉和異或等操作,會導致結果不一定為0。
【問題52】問:接收方向做CRC校驗,將數據和CRC位一起計算,結果一定是0嗎?
答:數據和接受過來的CRC結果一起做CRC校驗,結果應該為“固定數”。注意,這里是固定一個數,不一定是0,因為CRC算法里,還存在輸出結果反轉和異或等操作,會導致結果不一定為0。
【問題53】問:在千兆網工程中,很多模塊都有使用到了rdy信號,該信號的產生有些是跟FIFO的存儲數據個數關聯。如FIFO深度為4096,當存儲數據大于4086時,rdy為0;小于4086時,rdy為1。為什么這樣設計?
答:rdy是本模塊準備好信號,為1時表示可以接收數據,并且保證能夠正確處理。為0時,要求上游模塊不能發送。 當FIFO滿了的話,進來的數據無法保存,就會丟失。所以滿了當然rdy為0。為了讓上游模塊有一定的緩沖時間,將提示的水線設置小一些,例如4096的,就設為4086,這樣上游模塊可以晚幾個時鐘響應也是可以的。 至于是4086,還是4090,根據項目情況自己設置。
【問題54】問:千兆以太網的macIP核部分的完整視頻有沒有?我看這個IP核說是也需要配置,還有ctc校驗,這些都是自動完成的嗎?
答:沒有,這部分不是直接使用就可以了,我們工程里有一個配置表代碼 直接可以用的,ctc是自動完成的 不需要參與
【問題55】問:請問老師這部分講解有嗎,找不到?

答:沒有講解,直接使用
【問題56】問:麻煩問下千兆以太網接收mac地址是0是怎么回事呢?

答:廣播包應該是這么顯示的
【問題57】問:這個代碼里的注釋要怎么打開才看得到呢?
答:注釋變成亂碼:http://fpgabbs.com/forum.php?mod=viewthread&tid=813&highlight=%C2%D2%C2%EB
【問題58】千兆網課程提供工程源代碼嗎? 在課程網盤沒有找到,是哪個文件?
答:
溫馨提示:明德揚2023推出了全新課程——邏輯設計基本功修煉課,降低學習FPGA門檻的同時,增加了學習的趣味性,并組織了考試贏積分活動
http://www.cqqtmy.cn/ffkc/415.html
(點擊→了解課程詳情?)感興趣請聯系易老師:13112063618(微信同步)
明德揚除了培訓學習還有項目承接業務,擅長的項目主要包括的方向有以下幾個方面:
1. MIPI視頻拼接
2. SLVS-EC轉MIPI接口(IMX472 IMX492)
3. PCIE采集系統
4. 圖像項目
5. 高速多通道ADDA系統
6. 基于FPGA板卡研發
7. 多通道高靈敏電荷放大器
8. 射頻前端
需要了解相關信息可以聯系:易老師13112063618(微信同號)