OpenEdv-开源电子网

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

[ALTERA] upd通信实验接收数据在数码管显示?

[复制链接]

11

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2022-12-5
在线时间
6 小时
发表于 2022-12-12 13:42:08 | 显示全部楼层 |阅读模式
请问我从上位机发送一个1到fpga,这个32位的rec_data是接收到这个1并且保存的吗?如果是的,那么这个我想显示这个1在数码管上。直接判断这个rec_data可不可呢?
目前情况是我下载好代码数码管默认显示全部是6,发送1还是全部显示6。
module udp_rx(
    input                clk         ,    //时钟信号
    input                rst_n       ,    //复位信号,低电平有效

    input                gmii_rx_dv  ,    //GMII输入数据有效信号
    input        [7:0]   gmii_rxd    ,    //GMII输入数据
    output  reg          rec_pkt_done,    //以太网单包数据接收完成信号
    output  reg          rec_en      ,    //以太网接收的数据使能信号
    output  reg  [31:0]  rec_data    ,    //以太网接收的数据
    output  reg  [15:0]  rec_byte_num,     //以太网接收的有效字节数 单位:byte  
    output               beep        ,  //电机信号
    output  reg  [5:0]   sel         ,
    output  reg  [7:0]   seg_led      

    );
。。。。。
always @ (posedge clk or negedge rst_n) begin  //数码管全选
    if (!rst_n)
        sel <= 6'b111111;
    else
        sel <= 6'b000000;
end
always @ (posedge clk or negedge rst_n) begin
    if (!rst_n)
        seg_led <= 8'b0;
    else begin
        case (rec_data)
            32'h0 :    seg_led <= 8'b1100_0000;
            32'h1 :    seg_led <= 8'b1111_1001;
            32'h2 :    seg_led <= 8'b1010_0100;
            32'h3 :    seg_led <= 8'b1011_0000;
            32'h4 :    seg_led <= 8'b1001_1001;
            32'h5 :    seg_led <= 8'b1001_0010;
            32'h6 :    seg_led <= 8'b1000_0010;
            32'h7 :    seg_led <= 8'b1111_1000;
            32'h8 :    seg_led <= 8'b1000_0000;
            32'h9 :    seg_led <= 8'b1001_0000;
            32'ha :    seg_led <= 8'b1000_1000;
            32'hb :    seg_led <= 8'b1000_0011;
            32'hc :    seg_led <= 8'b1100_0110;
            32'hd :    seg_led <= 8'b1010_0001;
            32'he :    seg_led <= 8'b1000_0110;
            32'hf :    seg_led <= 8'b1000_1110;
            default : seg_led <= 8'b1100_0000;
        endcase
    end
end
。。。。。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

1979

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5520
金钱
5520
注册时间
2018-10-21
在线时间
1561 小时
发表于 2022-12-13 09:22:50 | 显示全部楼层
你要在rec_en拉高的时候,寄存rec_data,可以在线调试抓一下,收到的数据对不对
回复 支持 反对

使用道具 举报

3

主题

1979

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5520
金钱
5520
注册时间
2018-10-21
在线时间
1561 小时
发表于 2022-12-13 09:25:17 | 显示全部楼层
另外先收到的数据是放在了高位,如果你只发送一个字节,你的判断条件可以写成rec_data[31:24]
回复 支持 反对

使用道具 举报

11

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2022-12-5
在线时间
6 小时
 楼主| 发表于 2022-12-14 19:17:35 | 显示全部楼层
QinQZ 发表于 2022-12-13 09:25
另外先收到的数据是放在了高位,如果你只发送一个字节,你的判断条件可以写成rec_data[31:24]

对 这个我知道 我想请问如果我发送了6个字节,rec_data是32位的,不能全部接收,我把rec_data变成了47位,但还是不能接收成功。怎么解决呢?
回复 支持 反对

使用道具 举报

3

主题

1979

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5520
金钱
5520
注册时间
2018-10-21
在线时间
1561 小时
发表于 2022-12-15 09:08:47 | 显示全部楼层
nzlyyds 发表于 2022-12-14 19:17
对 这个我知道 我想请问如果我发送了6个字节,rec_data是32位的,不能全部接收,我把rec_data变成了47位 ...

可以这么改,得看你改的对不对了,不是仅仅改位宽,接收模块的接收逻辑代码要由原来的8转32位,改成8转48位
回复 支持 反对

使用道具 举报

3

主题

1979

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5520
金钱
5520
注册时间
2018-10-21
在线时间
1561 小时
发表于 2022-12-15 09:10:57 | 显示全部楼层
QinQZ 发表于 2022-12-15 09:08
可以这么改,得看你改的对不对了,不是仅仅改位宽,接收模块的接收逻辑代码要由原来的8转32位,改成8转48 ...

你可以参考环回实验,实际上接收多个数据不用改UDP的代码,再定义一个48位寄存器,分两次寄存rec_data的值就是了
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-10-4 04:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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