FPGA-将RAM中储层的图像调取到VGA中显示

从RAM中提取因此不需要用到写使能,只需要读使能。此次用到的RAM中图片大小为200*200.想做个动态图的话可以取5副图片,每个大小100*100,定义读取的时间,可以实现图片交替的转换,人眼看到的便是动图。VGA扫描一次为1/60HZ,当每扫n次换一副图片,这样就可以控制图片的转换速度
程序编写:
module ram(
input wire clk,
input wire rst_n,
output reg[7:0] rgb,
output reg h_sync,
output reg v_sync
);
reg[9:0] x;
reg[9:0] y;
reg x_flag;
reg y_flag;
reg[10:0] h_cnt;
reg[9:0] v_cnt;
wire CLK_65MHZ;

reg[15:0] addrb;
wire[7:0] dout;

clk_wiz_v3_6 clk_wiz_v3_6_inst
(// Clock in ports
.CLK_IN1(clk), // IN
// Clock out ports
.CLK_OUT1(CLK_65MHZ)); // OUT

//h_cnt
always@(posedge CLK_65MHZ or negedge rst_n)
if(rst_n==0)
h_cnt = 0;
else if(h_cnt==1343)
h_cnt = 0;
else
h_cnt = h_cnt+1;
//v_cnt
always@(posedge CLK_65MHZ or negedge rst_n)
if(rst_n==0)
v_cnt = 0;
else if(v_cnt==805&&h_cnt==1343 )
v_cnt = 0;
else if(h_cnt==1343)
v_cnt = v_cnt+1;
//h_sync
always@(posedge CLK_65MHZ or negedge rst_n)
if(rst_n==0)
h_sync=0;
else if(h_cnt<136)
h_sync = 1;
else
h_sync = 0;
//v_sync
always@(posedge CLK_65MHZ or negedge rst_n)
if(rst_n==0)
v_sync=0;
else if(v_cnt<6)
v_sync = 1;
else
v_sync = 0;

//x_falg
always@(posedge CLK_65MHZ or negedge rst_n)
if(rst_n==0)
x_flag= 0;
else if(x==924)
x_flag=1;
else if(x==1)
x_flag= 0;
always@(posedge CLK_65MHZ or negedge rst_n)
if(rst_n==0)
x=0;
else if(x_flag==0&&v_cnt==805&&h_cnt==1343)
x=x+1;
else if(x_flag==1&&v_cnt==805&&h_cnt==1343)
x=x-1;
//y_falg
always@(posedge CLK_65MHZ or negedge rst_n)
if(rst_n==0)
y_flag = 0;
else if(135+y==805)
y_flag = 1;
else if(y==1)
y_flag = 0;
always@(posedge CLK_65MHZ or negedge rst_n)
if(rst_n==0)
y=0;
else if(y_flag==0&&v_cnt==805&&h_cnt==1343)
y=y+1;
else if(y_flag==1&&v_cnt==805&&h_cnt==1343)
y=y-1;

//caitiao
always@(posedge CLK_65MHZ or negedge rst_n)
if(rst_n==0)
rgb=0;
else if (h_cnt>=296+x&&h_cnt<396+x&&v_cnt>=35+y&&v_cnt<135+y)
rgb=dout;
else if (h_cnt>296&&h_cnt<1320&&v_cnt>35&&v_cnt<291)
rgb = 8’b11100000;
else if(h_cnt>296&&h_cnt<1320&&v_cnt>291&&v_cnt<547)
rgb = 8’b00011100;
else if(h_cnt>296&&h_cnt<1320&&v_cnt>547&&v_cnt<803)
rgb = 8’b00000011;
else
rgb=0;

blk_mem_gen_v7_3 your_instance_name (
.clka(CLK_65MHZ), // input clka
.rsta(~rst_n), // input rsta
.ena(1), // input ena
.wea(0), // input [0 : 0] wea
.addra(addrb), // input [15 : 0] addra
.dina(0), // input [7 : 0] dina
.douta(dout) // output [7 : 0] douta
);

//300次周期扫描
reg[8:0] cnt_300;
always@(posedge CLK_65MHZ or negedge rst_n)
if(rst_n==0)
cnt_300 <= 0;
else if(v_cnt==805&&h_cnt==1343&&cnt_300==299)
cnt_300 <= 0;
else if(v_cnt==805&&h_cnt==1343)
cnt_300 <= cnt_300 + 9’b1;

//5幅图片的动态
always@(posedge CLK_65MHZ or negedge rst_n)
if(rst_n==0)
addrb <= 0;
else if(addrb==49999&&cnt_300==299)
addrb <= 0;
else if(addrb==9999&&cnt_300>=0&&cnt_300<=59)
addrb <= 0;
else if(cnt_300>=60&&cnt_300<=119&&addrb==19999)
addrb <= 10000;
else if(cnt_300>=120&&cnt_300<=179&&addrb==29999)
addrb <= 20000;
else if(cnt_300>=180&&cnt_300<=239&&addrb==39999)
addrb <= 30000;
else if(cnt_300>=240&&cnt_300<=299&&addrb==49999)
addrb <= 40000;
else if(h_cnt>=296+x&&h_cnt<396+x&&v_cnt>=35+y&&v_cnt<135+y)
addrb <= addrb +1 ;
endmodule

你可能感兴趣的:(FPGA-将RAM中储层的图像调取到VGA中显示)