我的FPGA连续使用10/100/1000 Mbps以太网网络上发送的UDP数据包,我已经写了一个MATLAB代码捕获数据。 FPGA试剂盒连接到1 Gbps的切换,然后到PC。
的问题是,在Matlab中接收到的分组(大约1080000字节)的一定数目后,所接收的下一个分组虽然FPGA正在发送我已通过使用Wireshark运行Matlab的验证正确的数据被损坏。
1)它是否有东西做的事实,从FPGA的传输速率高(5.18 Mbps的在Wireshark中)在Matlab中接收率是低?
2)是不是因为一些内部记忆问题。 没有更多的UDP数据大约108万字节值得被接收(如图问题)后收到的数据包? 我试图改变BUFFER_SIZE&buffer_read_count但无济于事。
3)难道是因为Matlab的内部缓冲区快满的? 将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
线程我以前发布的提供了一个链接到这个问题。
在Matlab UDP接收慢速
请提供有关此问题的任何指导。
谢谢。
问候,