当前位置:文档之家› 程序说明文档

程序说明文档

顶层结构:
a、b结构:
random 模块是数据投保协议模块并产生[7:0]的递增数据,经过fifo 将数据以[31:0]输出,然后rdusedw[9:0]与350进行比较,比较大小,如果大的话输出fifo_flag=1。

表示后面可以添加以太帧。

寄存器wr 模块状态机:
s1状态表:construct the mac frame header and first 2bytes of udp payload,total length is
状态描述:
S0:将flag信号做一个反转,并定义flag=0&&fifoa_flag==1时channel_sel<=0;
flag=1&&fifob_flag==1时channel_sel<=1;
S1:6+6+2+20+8+1400字节;具体分为a,b;在这里针对a进行描述。

b888e3e5efb5123456789abc080045000596b3ba00000111d6e5c0a8a865c0a80001d43117710582 00000000+data_in;
1、b888e3e5efb5自己电脑本机mac地址;
2、123456789abc 板子上mac地址(自己进行配置);
3、0800 凡是携带IP包的帧的类型域都是0x0800;
4、45000 IP首部/版本
5、0596 IP头+数据长度 20+8+1402=1430;
6、b3ba 16位标示,每传1位16位标示加1;
7、0000 FLAGS/offset位;
8、01通过最多路由级数TTL;
9、11 UDP协议
10、d6e5 checksum数据
计算方法:取IP数据报报头部分(20B),数据如下:
45 00 05 96 b3 ba 00 00 01 11 d6 e5 c0 a8 a8 65 c0 a8 00 01
(1)将校验和字段置为0:
将d6 e5置为00 00,即变成:
45 00 05 96 b3 ba 00 00 01 11 00 00 c0 a8 a8 65 c0 a8 00 01
(2)反码求和
4500 + 0596 /021c+ b3ba + 0000 + 0111 + 0000 + c0a8 + a865 + c0a8 + 0001 = 32917
将将进位(3)加到低16位(2917)上:0003+2917=291a;
(3)取反码
将291a取反得:checksum= d6e5
0010100100011010=291a
1101011011100101 = d6e5;
11、c0a8a865 源IP地址,板子上自定义的IP地址;
12、c0a80001目的IP地址,pc机上使用的协议4静态地址;
13、d431 源端口号1771目的端口号(不用更改)
14、0582 UDP头+数据长度8+1402=1410 0x582;
15、 0000检验校验checksum是否正确
计算方法:
(1)对首部中每个16 bit进行二进制反码求和;
(2)将(1)中得到的和再取反码 ,看是否为0.
接收到的IP数据报首部:
45 00 05 96 b3 ba 00 00 01 11 d6 e5 c0 a8 a8 65 c0 a8 00 01
下面来验证下:
(1)反码求和
4500+0030+804c+4000+8006+b52e+d343+117b+cb51+153d=3fffc
4500 + 0596 + b3ba + 0000 + 0111 + d6e5 + c0a8 + a865 + c0a8 + 0001 = 3fffc
0003+fffc=ffff;
(2)取反码:~ffff=0 正确
16、 0000 两字节的UDP载荷
17、data_in;random中产生的data_in包含了数据头包协议,在数据段用户使用自定义应用时(例如传输图片)使用该协议对数据进行一个加协议头的操作;
S2:数据传输状态
datacnt==348时将fifo_rd<=0进行清零操作;
datacnt==350时mac_end<=1;拉低输入使能信号;
datacnt==351时所有数据置零并回到S0状态;
其他mac_dataout<={temp_data[7:0],temp_data[15:8],temp_data[23:16],temp_data[31:24]}; 使用SignalTap II结果
现使用512字节数据,需要更改如下:
0596 IP头+数据长度 20+8+1402=1430,改为0x21c = 20+8+512=540;
d6e5 checksum数据改为25a0;
0582 UDP头+数据长度8+1402=1410改为8+512 =520 = 0x208;
compare模块中将350更改为143;
注释:512中包括2字节udp载荷以及数据头包协议部分
IP核接口
ff_tx_crc_fwd:插入CRC 校验码,如果该端口和tx_ff_eop 一起设置为0,则自动
计算CRC 并且插入到帧中。

负责,将不会插入。

接GND;
ff_tx_data[31:0]/mac_datain[31:0] :发送信息,发送的第一个字节是
mac_datain[31:24],第二个字节是mac_datain[23:16],……;
ff_tx_eop/mac_end:一帧传送结束的标志位,设为1 证明最后一位传送完毕;
ff_tx_err:接GND,错误提示信号,若最后一字节被设定则证明前面的信息无效;
ff_tx_mod[1:0]:接GND,证明ff_tx_data[31:0]是有效的。

其他不同的状态代表:11: ff_tx_data[23:0]无效;10: ff_tx_data[15:0]无效;01: ff_tx_data[7:0]无效;
ff_tx_sop/mac_start:一帧开始发送的标志,设为1 表示开始;
ff_tx_wren/mac_wr:写入信号使能,证明ff_tx_data,ff_tx_sop,ff_tx_eop 的有效性;
ff_tx_clk/clk_50M:发送的FIFO 时钟;
ff_rx_rdy:接VCC,证明MAC 层准备就绪;
ff_rx_clk/clk_50M:接收FIFO 的时钟输入,上升沿有效;
address[7:0]/mac_reg_addr[7:0]:存储32 比特信息的寄存器地址;
writedata[31:0]/mac_reg_wr_data[31:0]:写入寄存器的数据,共32 位;
write/mac_reg_wren:寄存器写入信息的使能端;
clk/clk50M:寄存器参考时钟信号;
reset/nreset:复位信号;
tx_clk/clk_125M:GMII/RGMII/MII 发送参考时钟信号,为GMII/MII 提供参考时钟;rx_clk:GMII/RGMII/MII 接收参考时钟信号,为所有和接收rx 有关的信号提供
参考时钟;
set_10:(处于GND 状态)选择10Mbps 的以太网模式。

如果接地,说明现在
MAC 层不是处于该模式下;
set_1000:(处于VCC 状态)选择1Gbps 的以太网模式,置0 说明不在该模式下,置1 说明工作于该状态模式下;
gm_rx_d[7:0]:GMII 接收信号总线;
gm_rx_dv:置1 说明接收信号总线接收的数据是有效的,从接收帧的开始到帧的
结束,该信号应该都置于有效状态;
gm_rx_err:由物理层决定的,证明接收帧中出现了错误,错误提示信号;
输出:
gm_tx_d[7:0]:GMII 发送数据总线;
gm_tx_en:证明数据gm_tx_d[7:0]的有效性;
gm_tx_err:错误提示信号;
以太网IP核配置。

相关主题