⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vga_controller.v

📁 VGA sourcecodes/documents
💻 V
字号:
module	vga_controller 	 (	clock,
							reset,
							///// interface VGA ///////
							vga_clk,
							vga_hs,
							vga_vs,
							vga_blank,
							vga_sync,
							vga_r,
							vga_b,
							vga_g,
							///// out signal for VGA_Ram ////////
							wr_address,
							do_write,
							data_colour,
							clear_do_read_on_SRAM,
							enable_do_read_on_SRAM,
							///// out signal for SRAM_Controller ////////
							wr_request,
							done_dislay1
					  );
	input	clock;
	input	reset;
	
	//input	set_wr_request_from_SRAM;
	input	clear_do_read_on_SRAM;
	input	enable_do_read_on_SRAM;
	
	output	vga_clk;
	output	vga_hs;
	output	vga_vs;
	output 	vga_blank;
	output	vga_sync;
	output	[9:0]vga_r;
	output	[9:0]vga_g;
	output	[9:0]vga_b;
	
	input	[13:0]wr_address;
	input	do_write;
	input	[7:0]data_colour;
	
	output	wr_request;
	output	done_dislay1;
	
	wire	[7:0]q;
	ram_vga VGA_khoi1(
						.address(address),
						.data(data_colour),
						.clock(clock),
						.wren(do_write),
						.q(q)
					  );
					
	vga_sync	VGA_khoi2( 	  .clock(clock),
							  .reset_n(reset),
							/////////////////////////
							  .oVGA_CLK(vga_clk),
							  .oVGA_BLANK(blank),
							  .oVGA_SYNC(vga_sync),
							  .oVGA_HS(hs),
							  .oVGA_VS(vs),
							//////////////////////////
							  .Cursor_X(Cursor_X),
							  .Cursor_Y(Cursor_Y),
							//////////////////////////
							  .area_dislay(area_dislay),
							  .area_reading(area_reading),
							  .done_dislay(done_dislay),
							  .done_dislay1(done_dislay1)
					     );
	wire	[7:0]Cursor_X,Cursor_Y;	
	wire	area_dislay;			
	wire	done_dislay;				
	wire	area_reading;
	
	////////////// create address for Ram_VGA /////////////////////
	wire	[13:0]rd_address = {Cursor_Y[7:1],Cursor_X[7:1]};
	wire	[13:0]address = do_write ? wr_address : rd_address;
		
	//////////////// data write for Ram VGA ///////////////////////					
	wire	[7:0]data_vga = q;
	
	assign	vga_r = area_dislay2 ? {data_vga,2'b11} : 10'd0;
	assign	vga_g = area_dislay2 ? {data_vga,2'b11} : 10'd0;
	assign	vga_b = area_dislay2 ? {data_vga,2'b11} : 10'd0;
	
	wire	blank,blank1;
	wire	hs,hs1;
	wire	vs,vs1;
	
	D_FFs 	C2	(clock,reset,blank,blank1);
	D_FFs 	C3	(clock,reset,blank1,vga_blank);

	D_FFs 	C4	(clock,reset,hs,hs1);
	D_FFs 	C5	(clock,reset,hs1,vga_hs);
	
	D_FFs 	C6	(clock,reset,vs,vs1);
	D_FFs 	C7	(clock,reset,vs1,vga_vs);

	wire	area_dislay1,area_dislay2;
	
	D_FFs 	C8	(clock,reset,area_dislay,area_dislay1);
	D_FFs 	C9	(clock,reset,area_dislay1,area_dislay2);
	
	// after 15/60s  meaning after 4 signal done_dislay active //
	// then signal wr_request_in active //
	reg	[1:0] count_dislay;
	always @ (posedge clock or negedge reset)
		begin
			if(! reset)
				count_dislay <= 2'b00;
			else
				begin
					if(enable_count_dislay)
						begin
							if(done_dislay)
								count_dislay <= count_dislay + 1'b1;
							end
					else
						count_dislay <= 2'b00;
				end
		end
		
	wire	flag_do_read_on_SRAM = (count_dislay == 2'b00) ? 1'b1 : 1'b0;
	wire	enable_count_dislay = enable_do_read_on_SRAM;
	wire	set_do_read_on_SRAM;
	
	Khoi_phat_hien_canh_len VGA_CONTROLLER(clock,flag_do_read_on_SRAM,set_do_read_on_SRAM);
	
	reg		do_read_on_SRAM_in;
	always @ (posedge clock or negedge reset)
		begin
			if(! reset)
				do_read_on_SRAM_in <= 0;
			else
				begin
					if (clear_do_read_on_SRAM)
						do_read_on_SRAM_in <= 0;
					else 
						begin
							if (enable_do_read_on_SRAM )
								begin
									if (set_do_read_on_SRAM)
										do_read_on_SRAM_in <= 1;
									else;	
								end		
							else
								do_read_on_SRAM_in <= 0;
						end
				end
		end
	
	wire	wr_request_in = do_read_on_SRAM_in & ~area_reading ;	
	D_FFs 	C12	(clock,reset,wr_request_in,wr_request);
	
endmodule

/////////////////////////////////////////////////////////////////////////////
module	Khoi_phat_hien_canh_len (clock,in,out);

 input 	clock;
 input 	in;
 output	out;

 wire	temp1,temp2;

D_FFs 	C10	(clock,1'b1,in,temp1);
D_FFs 	C11	(clock,1'b1,temp1,temp2);

assign	out = (~temp2 && temp1) ? 1'b1 : 1'b0;

endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -