图像数据生成模块在VGA显示系统中主要用来根据坐标数据产生颜色数据。
模块接口设计
本模块是时序模块,因此pix_data落后pix_x,pix_y一个时钟周期。理解上没有什么难点,类似于查找表的结构。
代码编写
module vga_pic(
input wire [9:0] pix_x,
input wire [9:0] pix_y,
input wire clk,
input wire rest,
output reg [15:0] pix_data
);
parameter H_VALID = 10'd640 , //行有效数据长度
V_VALID = 10'd480 ; //场有效数据长度
parameter RED = 16'hF800, //红色
ORANGE = 16'hFC00, //橙色
YELLOW = 16'hFFE0, //黄色
GREEN = 16'h07E0, //绿色
CYAN = 16'h07FF, //青色
BLUE = 16'h001F, //蓝色
PURPPLE = 16'hF81F, //紫色
BLACK = 16'h0000, //黑色
WHITE = 16'hFFFF, //白色
GRAY = 16'hD69A; //灰色
always@(posedge clk)begin
if(reset == 1'b1)begin
pix_data <= 16'd0;
end else if((pix_x >= 0) && (pix_x < (H_VALID/10)*1)) //0~1/10
pix_data <= RED;
else if((pix_x >= (H_VALID/10)*1) && (pix_x < (H_VALID/10)*2))//1/10 ~ 2/10
pix_data <= ORANGE;
else if((pix_x >= (H_VALID/10)*2) && (pix_x < (H_VALID/10)*3))//2/10 ~ 3/10
pix_data <= YELLOW;
else if((pix_x >= (H_VALID/10)*3) && (pix_x < (H_VALID/10)*4))//like up
pix_data <= GREEN;
else if((pix_x >= (H_VALID/10)*4) && (pix_x < (H_VALID/10)*5))//like up
pix_data <= CYAN;
else if((pix_x >= (H_VALID/10)*5) && (pix_x < (H_VALID/10)*6))//like up
pix_data <= BLUE;
else if((pix_x >= (H_VALID/10)*6) && (pix_x < (H_VALID/10)*7))//like up
pix_data <= PURPPLE;
else if((pix_x >= (H_VALID/10)*7) && (pix_x < (H_VALID/10)*8))//like up
pix_data <= BLACK;
else if((pix_x >= (H_VALID/10)*8) && (pix_x < (H_VALID/10)*9))//like up
pix_data <= WHITE;
else if((pix_x >= (H_VALID/10)*9) && (pix_x < H_VALID))//like up
pix_data <= GRAY;
else
pix_data <= BLACK;
end
endmodule
波形图
由图可看到颜色数据reg[15:0]在h_valid为高是被成功赋值。
并且颜色切换也是以64为间隔。
模块测试成功,下一步我们将进行顶层模块组装以及FPGA上板调试。