我的FPGA正在使用10/100/1000 Mbps以太网在网络上不断发送UDP数据包,我编写了一个MATLAB代码来捕获数据。 FPGA套件连接到1 gbps交换机,然后连接到PC。
问题是在Matlab收到一定数量的数据包(大约1080000字节)之后,接收的下一个数据包已损坏,尽管FPGA正在发送我已通过验证的正确数据用Wireshark运行Matlab。
1)是否与FPGA的传输速率很高(Wireshark的5.18 Mbps)有关。 Matlab的接收率很低?
2)是不是因为内部存储器问题。收到大约1080000字节的UDP数据后,不再收到数据包(问题如图所示)?我尝试更改buffer_size& buffer_read_count但无济于事。
3)是不是因为Matlab的内部缓冲区变满了?如果缓冲区确实变为FULL,flushinput()命令在这种情况下会有任何帮助吗?
我粘贴下面的Matlab代码。
clc
clearall
closeall
packet_size = 18; %Size of 1 Packet
buffer_size = 1000*packet_size; % Buffer to store 1000 packets each of Packet_Size
buffer_read_count = 100; %How many times the buffer must be read
do_post_processing = 1;
u=udp('192.168.0.100','RemotePort',4660,'Localport',4661);
set(u,'DatagramTerminateMode','off');
set(u, 'InputBufferSize', 3*buffer_size);
set(u,'Timeout', 10);
fopen(u);
x=tic;
ii=1;
kk = 1;
while(1)
if(u.BytesAvailable>= buffer_size)
[a, count] = fread(u, buffer_size);
data(:, kk) = a;
data_buffer_read = reshape(a, packet_size, buffer_size/packet_size);
data_start(:,kk) = (data_buffer_read(18,1:10)).';
data_end(:,kk) = (data_buffer_read(18,end-10:end)).';
kk = kk + 1;
end
if(kk == buffer_read_count + 1)
break;
end
end
fclose(u);
%delete(u);
t=toc(x);
bw = (buffer_size*buffer_read_count*8)/t;
fprintf('Achieved data rate: %e bps\n', bw);
% post processing
data_reshape = reshape (data, packet_size, buffer_size*buffer_read_count/packet_size);
if(do_post_processing==1)
plot(data_reshape.');
title('UDP Data v/s Total Packets at 10 Mbps Ethernet Link');
xlabel('Total Number of Packets');
ylabel('Packet Data');
end
我之前发布的帖子提供了此问题的链接。
Slow speed of UDP reception in Matlab
请提供有关此问题的任何指导。
谢谢。
此致