如题,用vga显示彩色条纹是可以的,但是换成显示存在rom里面的图片就不行了,求教。
想把一张40*30的图片显示出来。
代码如下:
module VGA(
input wire clk,
input wire rst,
output wire HSYNC,VSYNC,//行和列同步信号
output wire[3:0]red,green,
output wire[3:0]blue
);
clk_40m clk40m
(
// Clock in ports
.clk_in1(clk), // input clk_in1
// Clock out ports
.clk_out1(clk40m), // output clk_out1
// Status and control signals
.reset(rst), // input reset
.locked(locked)); // output locked
man_test man (
.clka(clk40m), // input wire clka
.ena(en_rom), // input wire ena
.addra(addr), // input wire [16 : 0] addra
.douta(rom_dout) // output wire [11 : 0] douta
);
wire en_rom;
wire [17:0] addr;
wire [11:0] rom_dout;
wire clk40m,locked;
parameter hpixels=1056;//行同步列像素1056
parameter vlines=628; //场同步行数628
parameter hfp=40;//行同步前沿front porch
parameter hbp=88;//行同步后沿back porch
parameter hsp=128;//行同步脉冲sync pulse
parameter vfp=1;//场同步前沿
parameter vbp=23;//场同步后沿
parameter vsp=4;//场同步脉冲
reg[10:0]cnt_h;//行扫描计数器
reg[9:0]cnt_v;//场扫描计数器
assign HSYNC = (cnt_h<=hsp)? 1'b0 : 1'b1;//行同步信号
assign VSYNC = (cnt_v<=vsp)? 1'b0 : 1'b1;//场同步信号
always@(posedge clk40m or posedge rst)
if(rst)
cnt_h <=11'd0;
else if(cnt_h == hpixels)
cnt_h <=11'd0;
else
cnt_h <= cnt_h +11'd1;
always@(posedge clk40m or posedge rst)
if(rst)
cnt_v <= 10'd0;
else if (cnt_v == vlines)
cnt_v <= 10'd0;
else if (cnt_h == hpixels)
cnt_v <= cnt_v +10'd1;
assign {red,green,blue} =((cnt_h >= 11'd300) && (cnt_h <= 11'd340) && (cnt_v >= 10'd400) && (cnt_v <= 10'd430))? rom_dout : 12'b0000_0000_0000;
assign en_rom =((cnt_h >= 11'd300) && (cnt_h <= 11'd340) && (cnt_v >= 10'd400) && (cnt_v <= 10'd430))? 1 : 0;
assign addr = (en_rom)? (cnt_v - 10'd401) * 40 + (cnt_h - 11'd301) : 17'bzzzzzzzzzzzzzzzzz;
endmodule
求大神解决
需要把图片按VGA的取色位数进行转换,转换为mif文件或者hex文件,初始化到rom中,通过控制读rom地址读出ROM的数据,发送给VGA进行显示。