初级会员
- 积分
- 146
- 金钱
- 146
- 注册时间
- 2020-5-14
- 在线时间
- 35 小时
|
15金钱
本帖最后由 zdyzILS 于 2020-7-17 09:41 编辑
我想用以太网把高速ad卡采的数据存到fifo里,随后用udp发送给上位机,用网口调试助手抓包。源代码的ad,da以及udp模块的代码都是例程里的,没有改。只修改了顶层模块。
//AD采集后存到fifo里,再用udp发送
module hs_ad_da(
input sys_clk , //系统时钟
input sys_rst_n , //系统复位,低电平有效
//DA芯片接口
output da_clk , //DA(AD9708)驱动时钟,最大支持125Mhz时钟
output [7:0] da_data , //输出给DA的数据
//AD芯片接口
input [7:0] ad_data , //AD输入数据
//模拟输入电压超出量程标志(本次试验未用到)
input ad_otr , //0:在量程范围 1:超出量程
output ad_clk , //AD(AD9280)驱动时钟,最大支持32Mhz时钟
//以太网接口
input eth_rx_clk , //MII接收数据时钟
input eth_rxdv , //MII输入数据有效信号
input eth_tx_clk , //MII发送数据时钟
input [3:0] eth_rx_data , //MII输入数据
output eth_tx_en , //MII输出数据有效信号
output [3:0] eth_tx_data , //MII输出数据
output eth_rst_n //以太网芯片复位信号,低电平有效
);
//开发板MAC地址 00-11-22-33-44-55
parameter BOARD_MAC = 48'h00_11_22_33_44_55;
//开发板IP地址 192.168.1.123
parameter BOARD_IP = {8'd192,8'd168,8'd1,8'd123};
//目的MAC地址 ff_ff_ff_ff_ff_ff
parameter DES_MAC = 48'hff_ff_ff_ff_ff_ff;
//目的IP地址 192.168.1.102
parameter DES_IP = {8'd192,8'd168,8'd1,8'd102};
//wire define
wire [7:0] rd_addr; //ROM读地址
wire [7:0] rd_data; //ROM读出的数据
wire udp_tx_req ; //udp发送数据请求信号
wire udp_tx_done ; //udp发送数据完成
wire tx_start_en ; //udp开始发送信号
wire [31:0] tx_data ; //udp发送的数据
wire [15:0] tx_byte_num ; //udp单包发送的有效字节数
//*****************************************************
//** main code
//*****************************************************
//DA数据发送
da_wave_send u_da_wave_send(
.clk (sys_clk),
.rst_n (sys_rst_n),
.rd_data (rd_data),
.rd_addr (rd_addr),
.da_clk (da_clk),
.da_data (da_data)
);
//ROM存储波形
rom_256x8b u_rom_256x8b(
.address (rd_addr),
.clock (sys_clk),
.q (rd_data)
);
//AD数据接收
ad_wave_rec u_ad_wave_rec(
.clk (sys_clk),
.rst_n (sys_rst_n),
.ad_data (ad_data),
.ad_otr (ad_otr),
.ad_clk (ad_clk)
);
//UDP模块
udp
#(
.BOARD_MAC (BOARD_MAC), //参数例化
.BOARD_IP (BOARD_IP ),
.DES_MAC (DES_MAC ),
.DES_IP (DES_IP )
)
u_udp(
.eth_rx_clk (eth_rx_clk ), //MII接收数据时钟
.rst_n (rst_n ),
.eth_rxdv (eth_rxdv ), //MII输入数据有效信号
.eth_rx_data (eth_rx_data ), //MII输入数据
.eth_tx_clk (eth_tx_clk ), //MII发送数据时钟
.tx_start_en (tx_start_en ),
.tx_data (tx_data ), //以太网待发送数据 ,这个地方改了
.tx_byte_num (tx_byte_num ),
.tx_done (udp_tx_done ),
.tx_req (udp_tx_req ),
.rec_pkt_done (),
.rec_en (),
.rec_data (),
.rec_byte_num (),
.eth_tx_en (eth_tx_en ), //MII输出数据有效信号
.eth_tx_data (eth_tx_data ), //MII输出数据
.eth_rst_n (eth_rst_n ) //以太网芯片复位信号,低电平有效
);
//fifo模块,用于缓存单包数据
async_fifo_2048_32b u_fifo_2048x32b(
.aclr (~sys_rst_n),
.data (ad_data ), //fifo写数据,这个地方直接把ad采集的8位数据存到fifo里
.rdclk (eth_tx_clk),
.rdreq (tx_req ), //fifo读使能
.wrclk (eth_rx_clk),
.wrreq (rec_en ), //fifo写使能
.q (tx_data ), //fifo读数据,把读出来的数据用UDP发送
.rdempty (),
.wrfull ()
);
endmodule
ad采集的是8位的数据,直接存到32位的fifo里的话,应该是直接在左边补0,没什么影响吧。
但是不知道哪出了问题,网口助手那里一直抓不到包。
用siganltapII,ad和da都没有问题。
是以太网发送,还是fifo不合适,还是哪出了问题??
感谢感谢
|
最佳答案
查看完整内容[请看2#楼]
那你的数据写进去FIFO了么,如果写进去了,读出来的数据全是0,那么你可以看下你的FIFO是不是一直处于复位状态
|