`
Marshal_R
  • 浏览: 132442 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Verilog实现VGA显示控制器

阅读更多

Verilog实现VGA显示控制器

 

    具体原理就不详细讲了,这里给出完整的代码以及Nexys3开发板的引脚文件。

 

    最终实现的效果是:

        以 640*480 的分辨率在显示器屏幕显示一个矩形方块,方块在屏幕中以 45 度的角度、60 像素/秒的速度移动,到达屏幕边沿的时候反弹。

 

 

// 设计文件:vga_controller.v
`timescale 1ns / 1ps

module vga_controller(
    input clk,
    input rst,
    output reg [2:0] r,
    output reg [2:0] g,
    output reg [1:0] b,
    output hs,
    output vs
    );

	parameter UP_BOUND = 31;
	parameter DOWN_BOUND = 510;
	parameter LEFT_BOUND = 144;
	parameter RIGHT_BOUND = 783;
	
	reg h_speed, v_speed;
	reg [9:0] up_pos, down_pos, left_pos, right_pos;

	wire pclk;
	reg [1:0] count;
	reg [9:0] hcount, vcount;
	
	// 获得像素时钟25MHz
	assign pclk = count[1];
	always @ (posedge clk)
	begin
		if (rst)
			count <= 0;
		else
			count <= count+1;
	end
	
	// 列计数与行同步
	assign hs = (hcount < 96) ? 0 : 1;
	always @ (posedge pclk or posedge rst)
	begin
		if (rst)
			hcount <= 0;
		else if (hcount == 799)
			hcount <= 0;
		else
			hcount <= hcount+1;
	end
	
	// 行计数与场同步
	assign vs = (vcount < 2) ? 0 : 1;
	always @ (posedge pclk or posedge rst)
	begin
		if (rst)
			vcount <= 0;
		else if (hcount == 799) begin
			if (vcount == 520)
				vcount <= 0;
			else
				vcount <= vcount+1;
		end
		else
			vcount <= vcount;
	end
	
	// 显示方块
	always @ (posedge pclk or posedge rst)
	begin
		if (rst) begin
			r <= 0;
			g <= 0;
			b <= 0;
		end
		else begin
			if (vcount>=up_pos && vcount<=down_pos
					&& hcount>=left_pos && hcount<=right_pos) begin
				r <= 3'b000;
				g <= 3'b111;
				b <= 2'b00;
			end
			else begin
				r <= 3'b000;
				g <= 3'b000;
				b <= 2'b00;
			end
		end
	end
	
	// 每一帧动画之后根据方块当前位置调整速度
	always @ (negedge vs or posedge rst)
	begin
		if (rst) begin
			h_speed <= 1;
			v_speed <= 0;
		end
		else begin
			if (up_pos == UP_BOUND)
				v_speed <= 1;
			else if (down_pos == DOWN_BOUND)
				v_speed <= 0;
			else
				v_speed <= v_speed;
			
			if (left_pos == LEFT_BOUND)
				h_speed <= 1;
			else if (right_pos == RIGHT_BOUND)
				h_speed <= 0;
			else
				h_speed <= h_speed;
		end
	end
	
	// 每一帧动画之后根据速度值更新方块的位置
	always @ (posedge vs or posedge rst)
	begin
		if (rst) begin
			up_pos <= 391;
			down_pos <= 510;
			left_pos <= 384;
			right_pos <= 543;
		end
		else begin
			if (v_speed) begin
				up_pos <= up_pos+1;
				down_pos <= down_pos+1;
			end
			else begin
				up_pos <= up_pos-1;
				down_pos <= down_pos-1;
			end
			
			if (h_speed) begin
				left_pos <= left_pos+1;
				right_pos <= right_pos+1;
			end
			else begin
				left_pos <= left_pos-1;
				right_pos <= right_pos-1;
			end
		end
	end

endmodule

 

 

// Nexys3开发板引脚文件
NET "clk" LOC = "V10";
NET "rst" LOC = "C9";

NET "r[0]" LOC = "U7";
NET "r[1]" LOC = "V7";
NET "r[2]" LOC = "N7";
NET "g[0]" LOC = "P8";
NET "g[1]" LOC = "T6";
NET "g[2]" LOC = "V6";
NET "b[0]" LOC = "R7";
NET "b[1]" LOC = "T7";

NET "hs" LOC = "N6";
NET "vs" LOC = "P7";

 

 

 

 

分享到:
评论

相关推荐

    VGA verilog实现显示

    总结来说,利用Verilog实现VGA显示涉及了硬件描述语言编程、时序控制、同步信号生成、数据驱动等多个方面的知识,是数字系统设计中的一个重要实践。通过这样的项目,可以提升设计者的综合能力,为更复杂的系统设计...

    基于VERILOG实现的VGA显示模块代码

    - 设计一个VGA控制器模块,包含行计数器、场计数器、像素计数器等,它们根据时钟信号递增。 - 当计数器达到特定值时,产生行同步和场同步信号。 - 输出RGB数据,用于驱动显示器的红、绿、蓝三原色。 5. **FPGA与...

    fpga-Verilog-图片-文字vga显示

    首先,我们需要在Verilog中编写一个VGA控制器,该控制器负责产生HS、VS和RGB信号。这通常涉及到计数器和比较器的使用,以确保在正确的时机产生同步信号,并且在适当的位置输出颜色数据。计数器会跟踪行和帧的进度,...

    vga控制器的verilog代码

    本篇文章将深入探讨VGA控制器的Verilog实现及其相关知识点。 首先,VGA(Video Graphics Array)是计算机显示器的一种标准分辨率,它支持多种显示模式,如640x480、800x600、1024x768等。VGA控制器的主要任务是生成...

    VGA.txt.rar_VGA彩条显示_VGA显示控制器_vga_基于fpga的vga显示

    总之,这个压缩包提供的内容涉及到了使用FPGA设计和实现VGA显示控制器的专业知识,这对于电子工程和嵌入式系统的开发者来说是非常有价值的资源。通过理解和实践这部分内容,不仅可以掌握FPGA的基本应用,还能深入...

    基于Verilog的VGA转HDMI实验

    在这个实验中,设计者利用Verilog编写代码,将传统的模拟视频信号VGA(Video Graphics Array)转换为数字高清多媒体接口HDMI(High-Definition Multimedia Interface)信号,以便在现代高清显示器上显示由0V7725...

    verilog之VGA显示器接口控制程序设计及实现

    4. **Verilog实现VGA控制器**: 在Verilog中,可以创建一个模块来生成这些时序信号,并通过RAM或者寄存器来存储和提供像素数据。模块需要包含状态机来管理不同阶段的时序,例如行地址计数器和列地址计数器,以及...

    利用Verilog写的VGA彩条显示控制电路

    在本项目中,我们关注的是如何利用Verilog硬件描述语言来设计一个VGA彩条显示控制电路。Verilog是一种用于数字系统设计的编程语言,常用于FPGA(Field-Programmable Gate Array)的开发,它允许工程师用代码来描述...

    基于FPGA的VGA显示控制器设计研究.pdf

    在本设计中,使用了Verilog HDL硬件描述语言对VGA显示控制器的不同功能模块进行编写和描述。Verilog HDL是一种广泛使用的硬件描述语言,它允许设计者描述硬件电路的结构和行为,并在EDA(Electronic Design ...

    基于FPGA的VGA图像控制器的设计与实现

    ### 基于FPGA的VGA图像控制器的设计与实现 #### 摘要与关键词解析 本研究提出了一种基于现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)的视频图形阵列(Video Graphics Array,简称VGA)多图像控制...

    VGA显示verilog程序

    2. VGA控制器:生成HSync和VSync信号,以及行和场计数器。 3. 颜色发生器:根据RGB值生成相应的模拟信号。 4. 乒乓游戏逻辑:状态机、位置更新、碰撞检测等。 在实际的设计过程中,我们还需要考虑到FPGA资源的优化...

    用VHDL和Verilog实现的VGA资料大全

    在数字系统设计领域,特别是FPGA(Field-Programmable Gate Array)应用中,用VHDL(VHSIC Hardware Description Language)或Verilog(硬件描述语言)实现VGA控制器是常见的实践,这允许自定义视频输出以满足特定...

    Verilog语言编写的VGA显示-俄罗斯方块

    【Verilog语言编写的VGA显示-俄罗斯方块】是一个基于CPLD(复杂可编程逻辑器件)的项目,它利用硬件描述语言Verilog来实现对VGA显示器的控制,并展示经典的电子游戏——俄罗斯方块。这个项目展示了如何将软件编程的...

    VGA显示控制器设计[定义].pdf

    VGA显示控制器设计是电子...这些内容构成了实现VGA控制器的关键步骤,也是电子工程师必备的专业技能。通过这样的课程设计,学生不仅可以掌握理论知识,还能获得实际操作经验,为未来从事电子设计工作打下坚实的基础。

    vga_control.rar_verilog vga_vga 图片_vga verilog_vga显示

    6. **测试平台**:在实际验证设计时,可能需要一个Verilog测试平台来模拟不同的输入图像数据和测试VGA控制器的输出是否符合预期。 在“vga_control”文件中,可能包含了实现以上功能的Verilog模块和相关的测试用例...

    11_vga_colorbar_verilog_vga_vga显示_

    在本项目"11_vga_colorbar_verilog_vga_vga显示"中,我们探讨的是如何使用Verilog硬件描述语言来设计一个FPGA(Field-Programmable Gate Array)驱动的VGA控制器,实现彩条显示的功能。 Verilog是一种被广泛使用的...

    FPGA_VGA.zip_verilog vga_vga vivado_vga显示_vivado VGA_vivadoVGA显示

    本项目“FPGA_VGA.zip_verilog vga_vga vivado_vga显示_vivado VGA_vivadoVGA显示”是基于Xilinx的Vivado工具,使用Verilog硬件描述语言来设计和实现一个VGA控制器。 Verilog是一种广泛使用的硬件描述语言,它允许...

    基于verilog的vga彩条控制

    在Verilog中实现VGA彩条控制,你需要了解以下关键概念: 1. **时钟信号**:VGA工作依赖于一个精确的时钟信号,通常是25MHz或31.5kHz。这个时钟决定了图像的刷新率,即屏幕每秒更新图像的次数。 2. **行同步(HSync...

    用FPGA实现VGA的显示,VGA.rar

    接着,我们需要编写Verilog或VHDL代码来实现VGA控制器。控制器主要负责生成VGA的时序信号,包括行同步(HS)、场同步(VS)和像素时钟(PCLK)。这些信号必须精确地与VGA显示器的规格匹配,例如分辨率(如640x480)...

Global site tag (gtag.js) - Google Analytics