# 功能分析 ## 原先 UDP_data_process.v主要负责接收UDP传过来的信息,然后执行对应操作。比如说接收到一个TOE写的网络包,然后会进行解析与执行。接收到开启秒脉冲的包,就会控制pluse_second。 转发功能全打包到status_to_udp.v中,实现功能解耦,代码也更好看。从TOE和另外3个信息模块拿到数据,打包成UDP帧结构,然后发送出去。 ## 现在 ![a83dc5096e9434783ed57f826a2f50e2](./变成两个udp,一个负责收一个负责发.assets/a83dc5096e9434783ed57f826a2f50e2.png) 本来是一个udp接口收发数据,现在实际是两个。udp1只负责发送状态数据,**不需要接收**,udp0负责配置数据和指令等,**需要接收TOE命令**。所以在你的模块顶层会有两组这个udp数据接口。 # 改动 ## status to udp 仲裁存储状态机不用改。TOE valid的来进的是TOE_rec_fifo 。而状态信息进的是info_cache_fifo。 发送状态机需要改。关键是fifo_wr_en fifo_wr_data得改。 改了fifo发现,端口添加很容易,关键是添加了fifo_wr_en_TOE,fifo_wr_data_TOE! ## UDP_data_process 除了端口改了。 由于该模块主要是执行功能,所以主要改接口就ok了 ![局部截取_20260109_212429](./变成两个udp,一个负责收一个负责发.assets/局部截取_20260109_212429.png) # 仿真 ## Status to udp 转发模块验证 ### 保证状态信息info转发正确 //秒脉冲开启//////////////////////////////////// send_fifo_data(64'h4d44000410000001); send_fifo_data_32(31'h34D1ED6F); \#100000; send_fifo_data(64'h4d44000410000000); send_fifo_data_32(31'h3010F0D8); ////////////////////////////////////////////// 之后验证fifo_wr_en fifo_wr_data[31:0]是否正确 ![局部截取_20260109_211614](./变成两个udp,一个负责收一个负责发.assets/局部截取_20260109_211614.png) ### 保证状态TOE转发正确 \#1000; send_toe_data(66'h10102030405060708,66'h2b1b2b3b4b5b6b7b8,66'h3c1c2c3c4c5c6c7c8,66'h0a1a2a3a4a5a6a7a8,4); \#5000; 之后验证fifo_wr_en_TOE fifo_wr_data_TOE[31:0]是否正确 ![局部截取_20260109_211301](./变成两个udp,一个负责收一个负责发.assets/局部截取_20260109_211301.png) 成功! ## udp_data_process ![局部截取_20260109_214254](./变成两个udp,一个负责收一个负责发.assets/局部截取_20260109_214254.png) 成功!