UDP_data_process/readme/变成两个udp,一个负责收一个负责发.md

81 lines
2.4 KiB
Markdown
Raw Permalink Normal View History

# 功能分析
## 原先
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_TOEfifo_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)
成功!