[笔记]VGA建模之二(Display a photo pika.bmp)

一、RTL视图

二、

sync_module

module vga_module(
input CLOCK_50,
input[3:0] KEY,
output VGA_CLK,
output[7:0] VGA_R,VGA_G,VGA_B,
output VGA_HS,VGA_VS,
output VGA_BLANK_N,
output VGA_SYNC_N
);

assign VGA_SYNC_N=1'b0;	//If not SOG,Sync input should be tied to 0;
assign VGA_BLANK_N=VGA_HS&&VGA_VS;

pll_module u1(
				.inclk0 ( CLOCK_50 ),
				.c0 ( VGA_CLK )
				);

wire[10:0] X,Y;
wire valid;

wire RST_N;
assign RST_N=KEY[0];
sync_module u2(
				.VGA_CLK(VGA_CLK),
				.RST_N(RST_N),
				.VGA_HS(VGA_HS),
				.VGA_VS(VGA_VS),
				.X(X),
				.Y(Y),
				.valid(valid)
				);
				
wire[63:0] Rom_Data;
wire[5:0] Rom_Addr;
rom_module u4(
				.clock(VGA_CLK),
				.address(Rom_Addr),
				.q(Rom_Data)
				);
				
vga_control_module u3(
						.VGA_CLK(VGA_CLK),
						.RST_N(RST_N),
						.VGA_R(VGA_R),
						.VGA_G(VGA_G),
						.VGA_B(VGA_B),
						.X(X),
						.Y(Y),
						.valid(valid),
						.Rom_Addr(Rom_Addr),
						.Rom_Data(Rom_Data)
						);
endmodule

vga_control_module

module vga_control_module(
input VGA_CLK,
input RST_N,
input[10:0] X,Y,
input valid,
input[63:0] Rom_Data,
output[5:0] Rom_Addr,
output[7:0] VGA_R,VGA_G,VGA_B
);

reg[5:0] m;
always@(posedge VGA_CLK or negedge RST_N)
	if(!RST_N)
		m<=6'b0;
	else if(valid && Y<64)
		m<=Y[5:0];
		
reg[5:0] n;
always@(posedge VGA_CLK or negedge RST_N)
	if(!RST_N)
		n<=6'b0;
	else if(valid && X<64)
		n<=X[5:0];

assign Rom_Addr=m;

assign VGA_R=valid ? {Rom_Data[6'd63-n],Rom_Data[6'd63-n],Rom_Data[6'd63-n],Rom_Data[6'd63-n],Rom_Data[6'd63-n],Rom_Data[6'd63-n],Rom_Data[6'd63-n],Rom_Data[6'd63-n]} : 8'b0;
assign VGA_G=valid ? {Rom_Data[6'd63-n],Rom_Data[6'd63-n],Rom_Data[6'd63-n],Rom_Data[6'd63-n],Rom_Data[6'd63-n],Rom_Data[6'd63-n],Rom_Data[6'd63-n],Rom_Data[6'd63-n]} : 8'b0;
assign VGA_B=valid ? {Rom_Data[6'd63-n],Rom_Data[6'd63-n],Rom_Data[6'd63-n],Rom_Data[6'd63-n],Rom_Data[6'd63-n],Rom_Data[6'd63-n],Rom_Data[6'd63-n],Rom_Data[6'd63-n]} : 8'b0;
		
endmodule
vga_module
//* Display a photo pika.bmp(64x64)
module vga_module(
input CLOCK_50,
input[3:0] KEY,
output VGA_CLK,
output[7:0] VGA_R,VGA_G,VGA_B,
output VGA_HS,VGA_VS,
output VGA_BLANK_N,
output VGA_SYNC_N
);

assign VGA_SYNC_N=1'b0;	//If not SOG,Sync input should be tied to 0;
assign VGA_BLANK_N=VGA_HS&&VGA_VS;

pll_module u1(
				.inclk0 ( CLOCK_50 ),
				.c0 ( VGA_CLK )
				);

wire[10:0] X,Y;
wire valid;

wire RST_N;
assign RST_N=KEY[0];
sync_module u2(
				.VGA_CLK(VGA_CLK),
				.RST_N(RST_N),
				.VGA_HS(VGA_HS),
				.VGA_VS(VGA_VS),
				.X(X),
				.Y(Y),
				.valid(valid)
				);
				
wire[63:0] Rom_Data;
wire[5:0] Rom_Addr;
rom_module u4(
				.clock(VGA_CLK),
				.address(Rom_Addr),
				.q(Rom_Data)
				);
				
vga_control_module u3(
						.VGA_CLK(VGA_CLK),
						.RST_N(RST_N),
						.VGA_R(VGA_R),
						.VGA_G(VGA_G),
						.VGA_B(VGA_B),
						.X(X),
						.Y(Y),
						.valid(valid),
						.Rom_Addr(Rom_Addr),
						.Rom_Data(Rom_Data)
						);
endmodule

原文地址:https://www.cnblogs.com/spartan/p/2141502.html