Aurora核使用中tx_dst_rdy信号拉低问题(续)

前言

 

上次说到采用“将Aurora核输出的时钟,人为进行1ns的延迟,然后用延迟之后的时钟再去进行数据的读取”这个方法解决了Aurora核仿真出现的问题,但在上板中遇到了其他的问题,现在这篇文章中进行讨论。

问题提出

在上次仿真正确无误之后,我将工程放入到实际环境中去测试,果然没有那么顺利。通过mark_debug发现在上板过程中自己写的FIFO满,然后导致Aurora核存在丢帧现象,那么是什么原因导致FIFO满信号拉高了呢?

问题分析

由于丢帧现象是在几百万帧的时候才会出现,因此仿真无法重现问题,只好通过上板抓信号的方式进行分析解决。(由于当时调试的时候,笔者在外出差,因此暂时没有实例的截图,后期再补)

最终发现,不光是有丢帧问题,更有错帧问题。每一帧的帧数据会出现某64bit(采用的是64/66B编码的Aurora核)重复发两次的现象,经过多次仿真与上板,最终确定是由于之前加入了100ps的时延导致出错(这时已接近崩溃)。此时,通过仿真去观察tx_dst_rdy信号与其产生的时钟clk_rd,发现两者之间的100ps的延时竟然不复存在!!!!所以,一切的罪魁祸首都在这个tx_dst_rdy信号中!!!

问题解决

为了解决这个问题,删除掉原来所有的做的工作(心疼啊),重新生成一个Aurora核的example design,花了一整天的时间去研究官方例程中对rdy信号的处理流程,最后发现其处理流程相当于是一个异步FIFO的时序!!!!

因此,将原来所有需要Aurora核发送的数据,全部存储到异步FIFO中,该异步FIFO的读使能采用tx_dst_rdy信号,经过上板测试完美解决之前所遇到的问题。

后记

这次调试虽说走了很多的弯路,但是也学习到了很多东西。足以见得吃透官方的example design是有多么重要,以后还是要多去理解官方的例程。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
引用\[1\]:在使用netfilter框架,在NF_IP_FORWARD点做钩子,并将钩到的包从指定的物理接口发出去的实现方法如下: 1. 首先,需要重新修改路由。可以使用以下代码来设置新的路由: skb_dst_drop(skb); skb_dst_set(skb, &newroute->dst); 这里的newroute是一个包含新路由信息的结构体。 2. 接下来,可以使用NF_HOOK函数来将包发送到指定的物理接口: NF_HOOK(NFPROTO_IPV4, NF_INET_LOCAL_OUT, skb, NULL, skb_dst(skb)->dev, dst_output); 这里的skb是要发送的包,skb_dst(skb)->dev是指定的物理接口。 引用\[2\]:在netfilter框架,对于输入报文处理或输出报文处理,如果命了路由缓存条目,则会累积该路由缓存条目的引用计数和全局命统计,并将路由缓存条目的心内容赋给报文skb的_skb_dst字段。这个心内容是rtable下的dst_entry,其包含了出接口、邻居节点、下一步的处理函数等信息。通过修改skb的_skb_dst字段,可以实现从指定的物理接口出来。 引用\[3\]:在以太网的报文头格式,最后两个字节表示以太网的类型。当这两个字节小于0x600时,表示该不是Ethernet II格式,而是802.2 LLC格式或其他格式。在OpenFlow和Open vSwitch,只支持IEEE 802.3 SNAP格式的LLC头,即DSAP=0xaa、SSAP=0xaa、cntl=0x03,后面跟着一个5个字节大小的SNAP。当插入802.1Q头或在802.3 SNAP格式插入802.1Q头时,eth_type/dl_type取自Ethertype字段。如果报文头不满足上述格式,OVS和OpenFlow会将eth_type/dl_type设为0x5ff(OFP_DL_TYPE_NOT_ETH_TYPE)。 综上所述,要实现在NF_IP_FORWARD点钩子将钩到的包从指定的物理接口发出去,可以通过重新修改路由和设置skb的_skb_dst字段来实现。同时,需要注意报文的以太网格式和类型。 #### 引用[.reference_title] - *1* *2* [skb_dst_set - struct dst_entry dst 路由子系统使用。](https://blog.csdn.net/tycoon1988/article/details/45487343)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Open vSwitch ETHERNET相关字段详解(eth_src/dl_src、eth_dst/dl_dst、eth_type/dl_type)](https://blog.csdn.net/u012124304/article/details/103227684)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值