FPGA与网络通信时相关的字节/bit序

人盡茶涼 提交于 2019-12-19 10:17:37

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

MAC是先传输低位比特,网络字节顺序是大端模式

网络字节序是大端模式(地址低位存储高位,地址高位存储低位,这种方式很符合人的直观感,比如 0x12345678数据,在大端模式的情况下存储方式为:

存储地址0 存储地址1 存储地址2 存储地址3
  0x12       0x34      0x56     0x78

而在小端模式下的存储方式为:

存储地址0 存储地址1 存储地址2 存储地址3
   0x78      0x56      0x34     0x12

这说明小端模式适合人的逻辑思维方式,因为0x78本来就是最低位数据,放在最小地址中存储,0x12本来就是最高位数据,放在最大址中存储,这种方式是一对一的,所以称之为符合人的逻辑思维方式。而大端模式下,数据最高位放在地址最低位,数据最低位放在地址最高位,从逻辑上来说是反的,但因为地址总是从低到高排列,当将地址和数据一齐并列显示出来的时候,就能被人眼睛直观地看到高位数据在前面,低位数据在后面了,当然就符合人的直观感了。

MAC协议格式中,每个字段的字节顺序是先传输的字节在左(与前面网络字节顺序是大端模式相符),后传输的字节在右。每个字节中的位次序正好相反,低位在前,高位在后。字节次序和位的次序通常用于除FCS之外的所有字段,FCS字段将作为一个特殊的32位字段(最高位在左)而不是4个单独的字节(这样说不就是还是指网络字节大端模式+先传低BIT位一样的吗?)

 

在上位机软件发送字符abcd
在鲨鱼上抓包
这里写图片描写叙述
用逻辑分析仪从FPGA网络接收管脚分析
这里写图片描写叙述
数据接收后存储在位宽为8bit的ram中
从ram中读32bitUDP数据为

64636261

依据以上那个现象,
之前有个理解偏差,
所谓的大端小端就是一个读数的顺序不一样。
对于UDP数据段而言。其数据组成格式是有两方来定的。
仅仅有协议的头等等,是依照大端来组织,为了是在不同cpu体系中进行通信,
比方上边发送的是abcd。则udp数据段就是依照abcd来发送的。
数据到FPGA中
存储在8bit宽度的ram中(地址从小到大)
0x61
0x62
0x63
0x64
nios软核cpu也是小端的,所以
将这4个字节读取到32bit无符号变量时
比方alt_u31 buff
buff=0x64636261;
高地址数据放在高位
假设将buff强制转换成(alt_u8)buff输出
则输出的是0x61,这也是证明nios是小端的一种方法。

所以整体来讲,网络数据事实上并无什么大小端之说,大小端仅仅是相对于硬件cpu或者网络设备而言的。
即传输过来的数据是怎样被表示的

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!