ZYNQ:zedboard开发板的 VGA彩条显示实验

        使用zedboard完成PL部分驱动VGA彩条显示实验。使用的代码在下面的帖子里的代码的基础上做了少量修改。

FPGA基础之VGA(二)彩条显示_不会一直在门外的博客-CSDN博客

实验效果如下图:

VGA接口的时序

关于VGA的内容,下面这篇文章已经写的很好了,我就不再多细讲了:

VGA入门学习_风中少年的博客-CSDN博客

简单说一下下面的五个信号在工作时的时序吧:

HS

行同步信号

VS场同步信号
R四位红色信号
G四位绿色信号
B四位蓝色信号

工作时序如下:

 简单来讲,一个周期为四段,分别为a、b、c、d。

以行时序举例:1、行同步信号在a段为低电平b、c、d段为高电平。

                         2、R、G、B信号只在c段发送有效信号,其他的a、b、d段时要严格保持信号值为0。

VGA彩条显示实验完整代码

下面的为分频模块,可以将100M时钟分频为25M

div_clk.v

module div_clk(
	rst_n,
	sys_clk,
	clk
);

    input rst_n;
    input sys_clk;
    output clk;
    
    reg clk;
    reg[1:0] h;
    
always@(posedge sys_clk)
	if(!rst_n)
		begin
			h <= 0;
			clk <= 0;
		end
    else
	   if(h == 2'b00)
		  begin
			 clk <= 0;
			 h <= h + 1;
		end
	else if(h == 2'b01)
		begin
			clk <= 0;
			h <= h + 1;
		end
	else if(h == 2'b10)
		begin
			clk <= 1'b1;
			h <= h + 1;
		end
	else
		begin
			clk <= 1'b1;
			h <= h + 1;
		end

endmodule

内容比较简单,就是0-3循环计数,计数到0、1时输出低电平信号,2、3时输出高电平信号。

下面为VGA显示模块:

vga_ctrl.v

`define VGA_640x480x60					// choose different video standard,revise PLL clk ,alter cnt WIDTH

module vga_ctrl (

	input		wire			clk,
	input		wire			rst_n,

	output	reg		[11:0]		vga_rgb,
	output	reg					vga_hs,
	output	reg					vga_vs
);

//================ VGA_680X480X60 =========================================================

`ifdef VGA_640x480x60								// PLL clk = 25M = 640x480x60

	localparam			HS_A	=	96;				// synchronous pulse, horizontal
	localparam			HS_B	=	48;				// back porch pulse
	localparam			HS_C	=	640;				// display interval
	localparam			HS_D	=	16;				// Front porch
	localparam			HS_E	=	800;				// horizontal cycles

	localparam			VS_A	=	2;					// synchronous pulse, vertical
	localparam			VS_B	=	33;
	localparam			VS_C	=	480;	
	localparam			VS_D	=	10;	
	localparam			VS_E	=	525;	
	
	localparam			HS_WIDTH	=	10;
	localparam			VS_WIDTH	=	10;

`endif

	
	reg		[HS_WIDTH - 1:0]		cnt_hs;				// counter for horizontal synchronous signal
	reg		[VS_WIDTH - 1:0]		cnt_vs;				// counter for vertical synchrous signal
	
	wire					en_hs;								//	dsiplay horizontal enable
	wire					en_vs;								// display vertical enable
	wire					en;									// effective display zone
	
	/*行计数器*/
	always @ (posedge clk, negedge rst_n)
		if (!rst_n)      
			cnt_hs <= 0;
		else
			if (cnt_hs < HS_E - 1)
				cnt_hs <= cnt_hs + 1'b1;    //行计数器的值小于上限,行计数器加一
			else
				cnt_hs <= 0;                //行计数器的值等于上限,行计数器清零
	/*场计数器*/			
	always @ (posedge clk, negedge rst_n)
		if (!rst_n)
			cnt_vs <= 0;
		else
			if (cnt_hs == HS_E - 1)              //如果一行扫描结束
				if (cnt_vs < VS_E - 1)           
					cnt_vs <= cnt_vs + 1'b1;       //列计数器的值少于上限,列计数加一
				else
					cnt_vs <= 0;                   //列计数器的值等于上限,列计数清零
			else
				cnt_vs <= cnt_vs;                  //如果一行扫描未结束,那列计保持不变
				
	always @ (posedge clk, negedge rst_n)
		if (!rst_n)
			vga_hs <= 1'b1;
		else
			if (cnt_hs < HS_A - 1)           //每个行周期开头,都有一段时间的同步低电平时间
				vga_hs <= 1'b0;
			else
				vga_hs <= 1'b1;             //同步低电平时间结束
				
	always @ (posedge clk, negedge rst_n)
		if (!rst_n)
			vga_vs <= 1'b1;
		else
			if (cnt_vs < VS_A - 1)
				vga_vs <= 1'b0;             //每个场周期开头,都有一段时间的同步低电平时间
			else
				vga_vs <= 1'b1;             //同步低电平时间结束

    //生成使能信号,在使能信号高电平时,才发送RGB信号,否则RGB信号为0		
	assign en_hs = (cnt_hs > HS_A + HS_B - 1) && (cnt_hs < HS_E - HS_D);
	assign en_vs = (cnt_vs > VS_A + VS_B - 1) && (cnt_vs < VS_E - VS_D);
	assign en = en_hs && en_vs;
				
	always @ (posedge clk, negedge rst_n)
		if (!rst_n)
			vga_rgb <= 12'b0000_0000_0000;
		else
			if (en)      //使能信号为高时,RGB信号正常输出
                if(cnt_hs < HS_A + HS_B + 213)                    
				    vga_rgb <= 12'b1111_0000_0000;		//每行640个像素点,0-212显示红色
				else if(cnt_hs < HS_A + HS_B + 427)
				    vga_rgb <= 12'b0000_1111_0000;  //每行640个像素点,213-426显示绿色
				else
				    vga_rgb <= 12'b0000_0000_1111;  //每行640个像素点,427-640显示绿色
			else         //使能信号为高时,RGB信号为0,消隐
				vga_rgb <= 12'b0000_0000_0000;  

endmodule 

这段代码给了很多注释,相信初学者也可以看懂。

下面为顶层代码:

vga_stripes_top.v

module vga_stripes_top (

	input      wire					clk,
	input      wire					rst_n,
	
	output	wire		[11:0]		vga_rgb,
	output	wire					vga_hs,
	output	wire					vga_vs
);

	wire					clk_25m;
	
	//分频模块,将100M时钟分频为25M
	div_clk u0 (
	
		.rst_n 			    ( ~rst_n 	),
		.sys_clk 			( clk 		),
		.clk				( clk_25m	)
	);

    //vga显示模块
	vga_ctrl u1 (
		.clk				(clk_25m		),
		.rst_n				(~rst_n	),
                         
		.vga_rgb			(vga_rgb		),
		.vga_hs				(vga_hs		),
		.vga_vs				(vga_vs		)
	);

endmodule 

下面为约束文件

vga.xdc

set_property IOSTANDARD LVCMOS33 [get_ports {vga_rgb[11]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_rgb[10]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_rgb[9]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_rgb[8]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_rgb[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_rgb[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_rgb[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_rgb[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_rgb[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_rgb[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_rgb[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_rgb[0]}]
set_property PACKAGE_PIN V20 [get_ports {vga_rgb[11]}]
set_property PACKAGE_PIN U20 [get_ports {vga_rgb[10]}]
set_property PACKAGE_PIN V19 [get_ports {vga_rgb[9]}]
set_property PACKAGE_PIN V18 [get_ports {vga_rgb[8]}]
set_property PACKAGE_PIN AB22 [get_ports {vga_rgb[7]}]
set_property PACKAGE_PIN AA22 [get_ports {vga_rgb[6]}]
set_property PACKAGE_PIN AB21 [get_ports {vga_rgb[5]}]
set_property PACKAGE_PIN AA21 [get_ports {vga_rgb[4]}]
set_property PACKAGE_PIN Y21 [get_ports {vga_rgb[3]}]
set_property PACKAGE_PIN Y20 [get_ports {vga_rgb[2]}]
set_property PACKAGE_PIN AB20 [get_ports {vga_rgb[1]}]
set_property PACKAGE_PIN AB19 [get_ports {vga_rgb[0]}]
set_property PACKAGE_PIN Y9 [get_ports clk]
set_property PACKAGE_PIN T18 [get_ports rst_n]
set_property IOSTANDARD LVCMOS33 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports rst_n]
set_property PACKAGE_PIN AA19 [get_ports vga_hs]
set_property PACKAGE_PIN Y19 [get_ports vga_vs]
set_property IOSTANDARD LVCMOS33 [get_ports vga_hs]
set_property IOSTANDARD LVCMOS33 [get_ports vga_vs]

这个部分是根据zedboard的原理图编写的。原理图如下:

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: zedboard是一款由Xilinx公司推出的基于Zynq-7000 SoC的开发板。该开发板集成了ARM Cortex-A9双核处理器和FPGA,同时提供了丰富的资源和接口,非常适合用于嵌入式系统的开发和学习。 关于zedboard开发板的PCB资料,我们可以了解以下几个方面: 1. 原理图:zedboard开发板的原理图提供了板上各个电子元件以及其之间的连接和布局关系。通过原理图,我们可以了解板上各个部分的功能和通信关系,为后续的硬件设计和调试提供依据。 2. BOM表:BOM表即Bill of Materials,列出了zedboard开发板上所使用的各个电子元件的详细信息。对于开发者和制造商来说,了解这些元件的型号、供应商和参数是非常重要的,可以保证在维修和扩展开发板时可以快速采购到合适的元件。 3. PCB设计文件:zedboard开发板的PCB设计文件包括布局文件和焊盘文件。布局文件展示了元件在PCB板上的位置和放置方式,保证了元件之间的电气连接和信号传输的可靠性。焊盘文件则提供了元件焊接的位置和形状信息,制作者可以根据这些信息进行元件的焊接工作。 4. PCB尺寸和层数:zedboard开发板的PCB尺寸和层数决定了整个开发板的尺寸和容量。这些信息对于开发者和制造商来说是非常重要的,可以根据开发需要选择合适的尺寸和层数的开发板。 总的来说,zedboard开发板的PCB资料对于开发者和制造商来说非常重要。通过这些资料,我们可以深入了解整个开发板的设计和布局,帮助我们进行更加方便和高效的嵌入式系统开发工作。 ### 回答2: Zedboard开发板是一款基于Xilinx Zynq-7000系列FPGA(可编程逻辑与ARM Cortex-A9处理器相结合的芯片)设计的开源硬件开发平台。其提供了一系列官方资料供开发者参考使用。 首先,Zedboard开发板提供详尽的用户手册,其中包含了对硬件结构的详细说明以及使用教程。用户手册中涵盖了板载引脚布局、开关、按键、连接器定义,以及各个外设模块的功能和使用方法等。 其次,Zedboard还提供了硬件设计文件,包括原理图和PCB布局设计文件,以供开发者参考和自定义设计。这些文件可以帮助开发者理解板上各模块的电路连接方式,辅助进行灵活的硬件扩展和修改。 此外,官方还提供了软件开发工具的支持。包括Xilinx Vivado开发套件,用于FPGA逻辑的设计、仿真和调试。还有Xilinx SDK,用于基于ARM处理器的软件开发和调试。这些工具的详细使用手册和教程可以帮助开发者快速了解和掌握开发流程。 此外,Zedboard官方网站上还提供了广泛的示例代码和项目资源。这些示例代码涵盖了从最基础的GPIO控制到复杂的图像处理和通信系统等各种应用领域。开发者可以通过参考这些示例代码来加速开发过程,减少重复工作。 总而言之,Zedboard开发板提供了丰富的资料和工具,为开发者提供了很好的学习和开发平台。无论是硬件设计还是软件开发开发者都能得到全面的支持,从而更加高效地进行开发工作。 ### 回答3: ZedBoard开发板是一款基于Xilinx Zynq SOC的开发板,可以广泛应用于嵌入式系统开发和学习。该开发板提供了丰富的资料和pcb设计方案,以便用户进行深入的学习和开发。 首先,关于ZedBoard开发板的资料方面,用户可以通过Xilinx官方网站或其他相关的技术资讯网站下载到开发板的用户手册、参考手册和技术说明等文档。这些资料详细介绍了开发板的硬件架构、电气特性和接口定义等内容,对于了解和使用开发板提供了很大的帮助。 其次,关于ZedBoard开发板的pcb设计方案,用户可以获取到开发板的完整源代码和原理图等相关文件。这些文件能够指导用户了解和研究开发板的电路设计,包括各模块的连接、器件的选型和布局等的详细信息。用户可以根据这些设计方案进行二次开发,满足自己的需求。 除此之外,ZedBoard开发板还提供了丰富的示例项目和学习资料,用户可以通过这些资料进行各种实验和项目开发。这些资料包括了不同的应用场景和实验,用户可以根据自己的需求选择合适的示例项目进行学习和实践。同时,Xilinx还提供了一系列的视频教程和在线论坛等资源,用户可以通过这些资源进行交流和学习。 综上所述,ZedBoard开发板提供了丰富的资料和pcb设计方案,为用户提供了良好的学习和开发平台。用户可以通过这些资料和设计方案,深入了解硬件架构和电路设计,进行各种实验和项目开发,提高自己在嵌入式系统开发领域的能力和技术水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值