一、构造输入报文
1.创建网络报文内容的txt文件,16字节为一行
2.编写tb文件,读入txt,并以mac的接口输出
task read_gtp_pkt_data_file;
integer i;
begin
$readmemh("/GTP_PKT.txt",R_data);
for (i = 0; i<PKT_NUM*32; i=i+1) // 32行
begin
$display("R_pkt_data[%d] = %h",i,R_data[i]);
end
end
endtasktask config_deparser_gateway;
reg [MAX_PKT_LEN*8-1:0] pkt_data;
integer i;begin
for(i=0; i<DEPARSER_GATEWAY_CFG_MSG_NUM; i=i+1) begin
pkt_data = {R_data[i*8],
R_data[i*8+1],
R_data[i*8+2],
R_data[i*8+3],
R_data[i*8+4],
R_data[i*8+5],
{(MAX_PKT_LEN-64){8'h0}}};
gen_pcie_pkt(pkt_data,64,0);
insert_cycles(50);
end
end
endtasktask gen_pcie_pkt;
input [MAX_PKT_LEN*8-1:0] pcie_pkt;
input [15:0] len;
input msg_pkt_flag;//0:MSG 1:ETH PKT
reg [MAX_PKT_LEN*8-1:0] pkt_data;
reg rem;
reg [9:0] beats;
integer i;
begin
rem = (len[5:0] == 6'h0) ? 1'b0 : 1'b1;
beats = len[13:6] + rem;
pkt_data = pcie_pkt;
// wait(W_pktdown_pciedma_rdy);
wait(W_mac_link_state == 2'b11);
for (i = 0; i < beats; i = i + 1) begin
@(posedge R_sys_clk);
//#1;
pciedma_pktdown_ena <= 1'b1;
if (i == 0) begin
pciedma_pktdown_sop <= 1'b1;
pciedma_pktdown_qid <= msg_pkt_flag ? 7'h1b : 7'h1c ;
pciedma_pktdown_err <= 1'b0;
end
else begin
pciedma_pktdown_sop <= 1'b0;
end
if (i == (beats - 1)) begin
pciedma_pktdown_eop <= 1'b1;
pciedma_pktdown_mty <= 64 - len[5:0];
end
else begin
pciedma_pktdown_eop <= 1'b0;
pciedma_pktdown_mty <= 6'h0;
end
pciedma_pktdown_data <= pkt_data[(MAX_PKT_LEN*8-1)-:512];
pkt_data <= pkt_data << 512;
end
@(posedge R_sys_clk);
//#1;
pciedma_pktdown_ena <= 1'b0;
pciedma_pktdown_sop <= 1'b0;
pciedma_pktdown_eop <= 1'b0;
end
endtask
二、输出报文写入到log
1..在tb和global define定义文件
parameter GTP_PKT_FILE = "";
integer log_gtp_pkt_info;
initial begin
log_gtp_pkt_info = $fopen(GTP_PKT_FILE );
end
三、wireshark联合进行报文解析
将上述log转换为txt文件,导入到wireshark可以快速分析报文的各个字段封装是否正确。
-
使用wireshark解析16进制报文
使用wireshark解析16进制报文_16进制报文解析_在线98的博客-CSDN博客
将报文整理为一行,必须是16进制数,软件里打印的时候就以16进制的形式输出,每个数据以空格分开,并在该数据的最前边加上8个0.
00000000 ff ff ff ff ff ff b0 83 fe a7 29 17 08 06 00 01 08 00 06 04 00 01 b0 83 fe a7 29 17 00 00 00 00 00 00 00 00 00 00 c0 a8 13 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00