一、实验要求
验证udp传输过程中是否发生了如下问题:
- 数据包内数据损坏
- 丢包
- 数据包的顺序不正确
二、任务分析
在上述实验的基础上进行修改,利用FPGA设计计数器电路替换ADC采集模块,通过不断循环+1的数据,即可在接收端判断接收数据的连续性。生成的数据送入FIFO通过zynq读取,在数据包前添加udp包序号即可在上位机接收时验证是否丢包或错序。udp发送到主机,分析数据的连续性,验证udp传输的特性。
三、实验设计
3.1硬件环境搭建
大致设计与上述实验类似,不过需要将FPGA+DAC产生正弦波的部分删除,替换自定义IP核ad9280_sample,并删除其相关的端口。
因为涉及了PL-PS的数据交互,因此采用自定义 IP核的形式实现计数器电路,本IP核在上一实验的自定义 IP核ad9280_sample上修改,其中axis interface相关部分、状态机部分、xpm定义的fifo模块(注意修改写wr_clk、wr_en、din的例化实参)无需改动,计数器代码如下所示:
parameter cnt_max= 255;
//计数范围0-255
always @ (posedge cnt_clk or negedge cnt_rst_n) begin
if (!cnt_rst_n)begin
cnt_next<=8'd0;
end
else begin
if(cnt_next < cnt_max)begin// 未计数到最大值, 下一值加1
cnt_next<=cnt_next+1'b1;
end
else begin
cnt_next= 0;// 计数到最大值,下一计数值为0
end
end
end
// 时序逻辑 更新下一时钟周期的计数值
// CNTVAL 会被编译为D触发器
always @ (posedge cnt_clk or posedge cnt_rst_n) begin
if(!cnt_rst_n)
cnt <= 0;
else
cnt <= cnt_next;
end
由于保留了8位数据位宽的设定,因此技计数范围为0-255
.sample_len (slv_reg1 ),
.sample_start (slv_reg0[0]),
采样长度sample_len与开始采样标志sample_start同样例化为寄存器1与寄存器0</