千兆网数据接收(二)

        在上一篇中,通过iddr_ctrl模块将DDR信号转换为SDR信号,并输出rx_data[7:0]信号和对应的rx_en数据有效信号。本篇将在此基础上对信息进行CRC校验和有效包检测,以达到包过滤的目的。

目录

为什么要包过滤?

有效包检测

错误检测(CRC校验)

模块整体介绍

fifo设置

RX_FILTER 帧过滤     


一、为什么要包过滤?

       在一个系统的发送端(这里指上位机)可能有不同的应用程序,接收端也可能有不同的接收设备。那么在数据接收中就需要考虑两个问题:1.当一包数据到来时(rx_en==1),这一包数据是不是发给我的?2.传来的数据有没有错误?

        例如,我只想接收上位机中的A应用发来的数据,而A应用也只想让我自己收到数据。那么我在接收到数据的时候就要进行判断,如果是发给我的,并且数据在传输过程中没有发生错误,就留下这包数据;如果不是发给我的,或者发生了错误,就将这包数据过滤掉。

二、有效包检测

       从以太网的包结构中可以看到,前50字节是以太网包头,其中具体包括了MAC首部、IP首部和UDP首部。最后还有四个字节的数据校验位,传输的信息存放在data中。我们进行有效包检测就是利用以太网包头中的信息进行判断。已知UDP协议字段为8'h11,我们设置PC端应用端口号为1234,目的端口号为123,我们可以通过判断这三个信息来证明此包为来自于我们需要的应用。

以太网包结构


        具体实现上,定义两个计数器rx_cnt和vld_cnt,rx_cnt根据rx_en进行计数,当rx_cnt==31时判断UDP协议字段,当rx_cnt==42-43时判断源端口,当rx_cnt==44-45时判断目的端口,共要进行5次判断。每满足一个判断条件就给vld_cnt+1,当vld_cnt==5时,将vld_pkg信号拉高,代表包有效。

reg [13:0]	rx_cnt;
reg [3:0]	filter_cnt;
reg 		vld_pkg;

always @(posedge sclk) begin
	if
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值