OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6565|回复: 10

[ALTERA] 高速ad采集的实验和以太网通结合的实验结合出了bug,求解决

[复制链接]

16

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
146
金钱
146
注册时间
2020-5-14
在线时间
35 小时
发表于 2020-7-16 22:32:58 | 显示全部楼层 |阅读模式
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不合适,还是哪出了问题??
感谢感谢

44_hs_ad_da.rar

6.39 MB, 下载次数: 39

工程源码

最佳答案

查看完整内容[请看2#楼]

那你的数据写进去FIFO了么,如果写进去了,读出来的数据全是0,那么你可以看下你的FIFO是不是一直处于复位状态
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

132

帖子

0

精华

高级会员

Rank: 4

积分
648
金钱
648
注册时间
2020-4-21
在线时间
83 小时
发表于 2020-7-16 22:32:59 | 显示全部楼层
那你的数据写进去FIFO了么,如果写进去了,读出来的数据全是0,那么你可以看下你的FIFO是不是一直处于复位状态

回复

使用道具 举报

2

主题

132

帖子

0

精华

高级会员

Rank: 4

积分
648
金钱
648
注册时间
2020-4-21
在线时间
83 小时
发表于 2020-7-17 10:04:53 | 显示全部楼层
你电脑的ip地址和MAC地址绑定了么
回复

使用道具 举报

16

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
146
金钱
146
注册时间
2020-5-14
在线时间
35 小时
 楼主| 发表于 2020-7-17 10:07:53 | 显示全部楼层
932904676xy 发表于 2020-7-17 10:04
你电脑的ip地址和MAC地址绑定了么

绑定过了,烧了个以太网环回的实验的代码进去,没有问题。
我的顶层模块写的有没有问题?直接这么存ad数据到 fifo,完了udp读取后发送可以吧
回复

使用道具 举报

2

主题

132

帖子

0

精华

高级会员

Rank: 4

积分
648
金钱
648
注册时间
2020-4-21
在线时间
83 小时
发表于 2020-7-17 10:08:39 | 显示全部楼层
你可以先用我们的udp环回实验验证下,看能不能抓到包
回复

使用道具 举报

16

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
146
金钱
146
注册时间
2020-5-14
在线时间
35 小时
 楼主| 发表于 2020-7-17 10:26:47 | 显示全部楼层
932904676xy 发表于 2020-7-17 10:08
你可以先用我们的udp环回实验验证下,看能不能抓到包

UDP环回实验的代码没有问题,是可以抓到包的。我用signalTap II看, tx_data一直为0,像是存到FIFO的ad数据一直读不出来的情况。您看看是不是顶层模块写的有问题?
回复

使用道具 举报

16

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
146
金钱
146
注册时间
2020-5-14
在线时间
35 小时
 楼主| 发表于 2020-7-17 16:35:18 | 显示全部楼层
本帖最后由 zdyzILS 于 2020-7-17 17:14 编辑
932904676xy 发表于 2020-7-17 10:43
那你的数据写进去FIFO了么,如果写进去了,读出来的数据全是0,那么你可以看下你的FIFO是不是一直处于复位 ...

改了,现在fifo可以正常写入读出,输入给ip_send的发送数据tx_data是正常的,但是有个问题,tx_done和tx_req一直是0,现在的问题应该是在这里,导致发不出去数据。AD现在用的是PLL生成的1Mhz的时钟,以太网用的是例程里的时钟。请问怎么解决有数据,但是一直发送失败啊?
//脉冲信号同步处理模块
pulse_sync_pro u_pulse_sync_pro(
    .clk_a          (ad_clk),                                        //获得AD数据的时钟
    .rst_n          (sys_rst_n),                                       //复位信号
    .pulse_a       (怎么设置),                                        //接受一个数据的信号               
    .clk_b          (eth_tx_clk),                               //发送数据的时钟
    .pulse_b        (tx_start_en)                             //开始发送的使能信号
    );

这个模块咋设置?感觉是这里的问题
回复

使用道具 举报

3

主题

1979

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5520
金钱
5520
注册时间
2018-10-21
在线时间
1561 小时
发表于 2020-7-20 09:29:51 | 显示全部楼层
zdyzILS 发表于 2020-7-17 16:35
改了,现在fifo可以正常写入读出,输入给ip_send的发送数据tx_data是正常的,但是有个问题,tx_done和tx_ ...

你看下文档,文档里描述的很清楚,就是一个时钟下的脉冲信号,转换到另一时钟下的脉冲信号。
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2020-8-20
在线时间
4 小时
发表于 2020-8-27 20:17:10 | 显示全部楼层
兄弟你好,我目前也在做AD+以太网传输的demo,方便的话可以加个qq735746191一起交流学习下嘛~
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165186
金钱
165186
注册时间
2010-12-1
在线时间
2106 小时
发表于 2020-8-28 01:51:51 | 显示全部楼层
帮顶
回复

使用道具 举报

16

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
146
金钱
146
注册时间
2020-5-14
在线时间
35 小时
 楼主| 发表于 2020-9-4 13:57:49 | 显示全部楼层
18114926770 发表于 2020-8-27 20:17
兄弟你好,我目前也在做AD+以太网传输的demo,方便的话可以加个qq735746191一起交流学习下嘛~

我现在没搞altera了,用的是zynq的ps端做的,可能帮不了你太多了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-10-3 13:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表