这里PING请求解析部分的代码在mac_rx文件里,其中相关代码如下:
wire [15:0] icmp_chksum ;
always @ (posedge clk) case (st4)//write to bram
21:begin wr_addr <= 0; wr_en = 1 ; wr_data<=0; end //0: reply 8:request
22:begin wr_addr <= 1; wr_en = 1 ; wr_data<=0; end //0
23:begin wr_addr <=2 ; wr_en = 0 ; wr_data<=0; end //will be overwrite when all playload copied
24:begin wr_addr <=3 ; wr_en = 0 ; wr_data<=0; end //will be overwrite when all playload copied
25:begin wr_addr <= wr_addr+1; wr_en = 1 ; wr_data<=s_din; end
30:begin wr_addr <= 0; wr_en = 0 ; wr_data<=0; end
34:begin wr_addr <=2 ; wr_en = 1 ; wr_data<= icmp_chksum[15:8]; end
35:begin wr_addr <=3 ; wr_en = 1 ; wr_data<= icmp_chksum[7:0]; end
default begin wr_en<=0; wr_addr<=0; wr_data<=s_din;end endcase
reg sum_do_cal ,sum_gen_clr,sum_gen_feed;
always @ (posedge clk ) sum_do_cal <= st4 == 31 ;
always @ (posedge clk ) sum_gen_clr <= st4 == 10 ;
always @ (posedge clk) case (st4 ) 25: icmp_rep_pack_len <= wr_addr ; endcase
always @(posedge clk) case (st4) 32,33,34,35: sum_gen_feed <= 0;default sum_gen_feed <= wr_en ;endcase
reg[7:0] sum_din ;always @(posedge clk) sum_din <= wr_data ;
ram2port #( .DWIDTH(8),.AWIDTH(12))ram2port_icmp(.clk(clk),.wr_en(wr_en),
.wr_addr(wr_addr) ,.rd_addr(rd_addr) ,.wr_data(wr_data),.rd_data(rd_data) );
cal_byte_sum cal_byte_sum(.clk(clk),.rst(rst), .clr(sum_gen_clr ),.feed(sum_gen_feed),
.do_cal(sum_do_cal),.din(sum_din ) ,.chk_sum(icmp_chksum ) ,.result_valid() );
always @ (posedge clk) if ( st4 == 36 )icmp_rep_pack_valid <= 1 ;else if ( icmp_byte_ack ) icmp_rep_pack_valid<=0;
always @ (posedge clk) if (st4 == 36) rd_addr<=0; else if (icmp_byte_ack) rd_addr <= rd_addr+1;
always @ (posedge clk) icmp_rep_last <= icmp_rep_pack_len == rd_addr ;
always @ (*) icmp_rep_dout = rd_data ;
硬件环境调试已经搭好直接在SIGNAL TPA II 里面抓信号进行调试。
-----
PC端一直ping着FPGA板子。
在SIGNAL TAP II 抓到ST4的状态转换完全正确。
另外看到了将这个ICMP包保存到了RAM,
其中前两个字节都事type和id,根据协议都事0.
第3,4字节是check sum在最后计算得到后写入ram,
之后我们对照数据包逐一核对一下打入的数据,目测OK。
---------------------------------------------------------------
---------------------------------------------------------------
---------------------------------------------------------------
---------------------------------------------------------------
刚才一着急没有写BLOG直接做实验做完了,现在可以PING通了。
另外可以根据WAVESHARK 的时间看一下,发出ping request到收到ping reply用的时间是几十us。
再多PING一会儿,闲着也是闲着。
{{aAxvOXMOIvVUoXMxvoxiowMwWV8xxWTxoxOIOVIUUOvwVOUiIoUvvTMMVMwovWHWX8vOUOwWvXOIVHoVwiOwXiXIiHImWOHVooOXoWi8iTXTIvUVHOMoiHIoVU8VvmvIWXTvvOvv8xvMovOWMMmVUIHO8UmooOTvvwUIoTwvmWUoiTw8VmvoHWwMIUWOixiowiUoiXwiwwMMIiIXHwUmOWUVmXXwV8iHWOTUiwTU8xwOoV8HVmTWZz}}
{{aAxvOXMOIvVUoXMxvoxiowMwWV8xxWTxoxOIOVIUUOvwVOUiIoUvvTMMVMwovWHWX8vOUOVOUHTwUXooXviMWvvWiUTHXWIWoUToMOoWMVXUIIV8iOMoiHIoVU8VvmvIWXTvvOvv8xvMovOWMimIUiHm8UmooOTvvwUIoTwvmWUoiTw8VmvoHWwMIUWOixiowiUoiXwiwwMMIiIXHwUmOWUVmXXwV8iHWOTUiwTU8xwOoV8HVmTWZz}}