ICMP协议中ping请求的解析和响应的发送

66 篇文章 22 订阅
58 篇文章 27 订阅

这里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}}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值