chop147的个人空间 https://blog.eetop.cn/1468735 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

综合项目实践课——千兆网项目专题课

已有 21 次阅读2022-5-17 08:35 |个人分类:FPGA学习汇总贴|系统分类:芯片设计| FGPA

         明德扬整理了的同学们提出的问题,本帖将所有问题进行一个汇总,大家可以从这里找到您想要学习或疑惑的问题,然后进入对应的汇总贴进行学习。为方便您随时找到答案,敬请您收藏本网址!
http://www.mdy-edu.com/fpgake/2021/0410/1279.html


【问题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.mdy-edu.com/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】







点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 3

    周排名
  • 17

    月排名
  • 0

    总排名
  • 0

    关注
  • 3

    粉丝
  • 1

    好友
  • 3

    获赞
  • 2

    评论
  • 355

    访问数

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网 ( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2022-7-3 16:38 , Processed in 0.031245 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部