前言
本文就是介绍几个工具的使用,以太网模块使用的是紫光同创提供的官方例程,使用的是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动态刷新对我而言算是一个新东西。