以太网收发+HDMI叠加显示


前言

本文就是介绍几个工具的使用,以太网模块使用的是紫光同创提供的官方例程,使用的是PCtoLCD软件和NetAssist。


一、任务内容

通过以太网接口,从PC机发送数据到FPGA开发板,在通过FPGA驱动hdmi显示该文字。大概的数据流程框图如下图所示:
在这里插入图片描述

二、流程

在模块中完成了PC通过网口发来的数据进行叠加的操作,正常显示一帧图像的流程是从ddr中读取数据。数据从摄像头写入ddr,从ddr读出传输到显示模块,在上述流程中用Module代替这个流程操作,现在要给到的HDMI模块要先经过一个数据处理模块,用来指示当前需要显示什么样的内容。
字符在图像中的位置确定,使用的测试模块中,接收到的都是32x32点阵字符(每个字符为[31:0]char),首先要确定字符显示的起始位置x_star、y_star,点阵字符就是表示从起始(x_star,y_star)横向和纵向各加32bit。具体显示还要根据我们实时刷新的x_act、y_act来确定,当char[31+x_star-x_act]==1时,表示这个点已经刷新到char里面包含的数据该显示出相应的颜色。

wire char_de= (x_act >= CHAR_X_START) && (x_act < CHAR_X_START+CHAR_WIDTH)&&(y_act >= CHAR_Y_START) && (y_act < CHAR_Y_START+CHAR_HEIGHT);
assign x_cnt = x_act-CHAR_X_START;

begin if(udp2hdmi_buf0[CHAR_WIDTH-1-x_cnt])  o_rgb<= color; else o_rgb<= pix_data ;end

由于第一次使用PDS软件,刚开始用二维数组的时候软件报错了,所以用了最笨的方法,罗列出来所有的寄存器。
算法流程图如下图所示:
在这里插入图片描述
当屏幕的刷新点到达字符的起始(x,y)时候,开始判断此时是否需要进行点的更新。
现在算法有了,就是看怎么接收到相应的字符了,主要就是以太网的接收模块了。

    input               udp_rec_data_valid ,
    input [7:0]         udp_rec_rdata      ,
    input [15:0]        udp_rec_data_length ,
---------------------------------------------------------
always@(posedge rgmii_clk) begin
    if(udp_rec_data_valid)begin
        begin
            case(rec_cnt)
                3'd0:udp2hdmi_buf[31:24] <= udp_rec_rdata;
                3'd1:udp2hdmi_buf[23:16] <= udp_rec_rdata;
                3'd2:udp2hdmi_buf[15:8]  <= udp_rec_rdata;
                3'd3:udp2hdmi_buf[7:0]   <= udp_rec_rdata;
                default:  udp2hdmi_buf<=32'd0;
            endcase
            //udp2hdmi_buf[4'd15-{rec_cnt[0],3'b0} -: 8] <= udp_rec_rdata    ;
            //rec_cnt <= rec_cnt + 1'b1;
            //y_cnt_en<=1'b0;
        end
    end
    else begin
        udp2hdmi_buf <= 32'd0;       
    end
end
always@(posedge rgmii_clk) 
    if(!phy_rstn)
        rec_cnt <= 3'd0;
    else if(udp_rec_data_valid)
        if(rec_cnt == 3'd3)
            rec_cnt <= 3'd0;
        else
            rec_cnt <= rec_cnt + 1'd1;
    else
        rec_cnt <= 3'd0;
always@(posedge rgmii_clk) begin
    if(udp_rec_data_valid)begin
       if(y_cnt == udp_rec_data_length >>1) 
           y_cnt <= 0;
       else if(rec_cnt==3'd3)
           y_cnt <= y_cnt + 15'd1;
       else
           y_cnt <= y_cnt;
    end
    else
        y_cnt <= 0;
end

这里用y_cnt来表示已经接收到了该字符的第几行。
这是字符的行列表现形式
在这里插入图片描述

三、软件的使用

PCtoLCD界面如下。
在这里插入图片描述
生成FPGA中所需要的字符需要把前缀后缀等都去掉如下:
在这里插入图片描述
生成文件就可以直接使用了。

NetAssist软件是PC上位机用来和FPGA通信的软件,在我理解,和串口使用一样只不过发送的数据量更大些。。
在这里插入图片描述
需要配置的地方就是一定要先配置好FPGA的mac层,在命令行中能检测到,打开软件后可以直接连接。


总结

本文相对较短,以太网接收发送模块稍微简单,只是结合hdmi动态刷新对我而言算是一个新东西。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值