目标:根据以太网光中继的特点,以及光信号容易被外界光干扰从而会带来误码的特性,设计以太网的发送端。
核心:使用rec_en待发送数据使能信号及rec_data待发送数据,从复杂的以太网帧中提取出有用的数据(源IP、目的IP、UDP长度、有效数据)4部分进行发送,提高光信道的利用率并且减少误码(数据少了,误码相对也会变少)的可能性。
实现粗略过程:使用状态机对以太网包进行拆帧,并实现提取。这就要求必须对以太网的帧结构非常熟悉。UDP帧结构共有50个首部字节(包括前导码、MAC帧头、IP帧头、UDP帧头),各帧头中又有不用内容,因此通过字节计数器对字节进行计数,根据计数就能判断出接收到的字节是否是需要的内容,若需要则拉高rec_en信号,并将rx_data赋值至rec_data。在此之中,关键的一步是对目的MAC的判断,由于目的IP与目的MAC绑定后,发送目的IP时上位机会自动填入目的MAC,因此可在代码中提前输入绑定好的MAC地址,并将其与接收到的MAC地址进行判断,若相同才说明是用户真正想要发出的数据,从而过滤掉以太网口不间断的吐出的错误数据。至此,以太网的发送完成。
实现详细过程见源码