smart kids

ZED FPGA 开始工作了

0
阅读(3761)

晚上闲来无事,拿出ZED,研究了下硬件说明手册,调了几个跳线,然后写了一个LED 代码,verilog 的,然后漫长的编译配置,烧写进去,哈哈,结果好了,然后我赶紧写了一个VGA 的驱动,放进去,编译配置,烧写进去,VGA 也可以显示了,

哈哈,注明以上均为verilog 逻辑代码,没用ARM,还是FPGA 用起来直接,

LED 源码我就不上了,免得被K,VGA 代码附上,

其工程新建什么的,跟ISE12版本类似,不多说了,代码附上可以自己实践,其中跳线设置:拔掉MIO3,4,5,6,把MIO2=0,其他的不动。

//////////////////////////////////////////////////////////////////////////////////
module test
(
sys_clk,out, //CLK =100M
hsync,vsync,
vga_r,vga_g,vga_b
);

input sys_clk;
output out;

// input rst_n; //低电平复位
output hsync; //行同步信号
output vsync; //场同步信号
output vga_r; //红基色信号
output vga_g; //绿基色信号
output vga_b; //蓝基色信号

wire vsync,hsync;
wire vga_r,vga_g,vga_b;

reg out;
reg [31:0] count;

wire rst_n;
assign rst_n = 1'b1;
//==========================================================
// 测试LED
//==========================================================
always @ ( posedge sys_clk or negedge rst_n )
begin
if( !rst_n )
begin
out <= 1'b0;
count <= 32'd0;
end
else if( count== 32'd50000000)
begin
out <= ~out;
count <= 32'd0;
end
else
begin
count<=count+1'b1;
end
end
//==========================================================
// 产生 VGA clk 50M
//==========================================================
reg clk;
always @ ( posedge sys_clk )
begin
clk = ~ clk;
end

//==========================================================
// 定义行列坐标以及数据
//==========================================================
reg[10:0] x_cnt; //行坐标
reg[9:0] y_cnt; //列坐标

always @ (posedge clk or negedge rst_n)
begin
if(!rst_n) x_cnt <= 11'd0;
else if(x_cnt == 11'd1039) x_cnt <= 11'd0;
else x_cnt <= x_cnt+1'b1;
end
always @ (posedge clk or negedge rst_n)
begin
if(!rst_n) y_cnt <= 10'd0;
else if(y_cnt == 10'd665) y_cnt <= 10'd0;
else if(x_cnt == 11'd1039) y_cnt <= y_cnt+1'b1;
end
//--------------------------------------------------
wire valid; //有效显示区标志

assign valid = (x_cnt >= 11'd187) && (x_cnt < 11'd987)
&& (y_cnt >= 10'd31) && (y_cnt < 10'd631);

wire[9:0] xpos,ypos; //有效显示区坐标

assign xpos = x_cnt-11'd187;
assign ypos = y_cnt-10'd31;

//==========================================================
///同步信号产生
//==========================================================
reg hsync_r,vsync_r;

always @ (posedge clk or negedge rst_n)
begin
if(!rst_n) hsync_r <= 1'b1;
else if(x_cnt == 11'd0) hsync_r <= 1'b0; //产生hsync信号
else if(x_cnt == 11'd120) hsync_r <= 1'b1;
end

always @ (posedge clk or negedge rst_n)
begin
if(!rst_n) vsync_r <= 1'b1;
else if(y_cnt == 10'd0) vsync_r <= 1'b0; //产生vsync信号
else if(y_cnt == 10'd6) vsync_r <= 1'b1;
end

assign hsync = hsync_r;
assign vsync = vsync_r;

//==========================================================
//显示一个矩形框
//==========================================================
wire a_dis,b_dis,c_dis,d_dis; //矩形框显示区域定位

assign a_dis = ( (xpos>=200) && (xpos<=220) )
&& ( (ypos>=140) && (ypos<=460) );

assign b_dis = ( (xpos>=580) && (xpos<=600) )
&& ( (ypos>=140) && (ypos<=460) );

assign c_dis = ( (xpos>=220) && (xpos<=580) )
&& ( (ypos>140) && (ypos<=160) );

assign d_dis = ( (xpos>=220) && (xpos<=580) )
&& ( (ypos>=440) && (ypos<=460) );

//显示一个小矩形
wire e_rdy; //矩形的显示有效矩形区域

assign e_rdy = ( (xpos>=385) && (xpos<=415) )
&& ( (ypos>=285) && (ypos<=315) );

//==========================================================
//r,g,b控制液晶屏颜色显示,背景显示蓝色,矩形框显示红蓝色
//==========================================================
assign vga_r = valid ? e_rdy : 1'b0;
assign vga_g = valid ? (a_dis | b_dis | c_dis | d_dis) : 1'b0;
assign vga_b = valid ? ~(a_dis | b_dis | c_dis | d_dis) : 1'b0;

endmodule

UCF 文件:

NET "clk" LOC = Y9;
NET "out" LOC = T22;


NET "clk" IOSTANDARD = LVCMOS33;
NET "out" IOSTANDARD = LVCMOS33;
NET "clk" PULLUP;
NET "out" PULLUP;

# PlanAhead Generated physical constraints

NET "sys_clk" LOC = Y9;
NET "vga_r" LOC = V20;
NET "vga_g" LOC = B22;
NET "vga_b" LOC = Y20;
NET "hsync" LOC = AA19;
NET "vsync" LOC = Y19;

# PlanAhead Generated IO constraints

NET "sys_clk" IOSTANDARD = LVCMOS33;
NET "vga_b" IOSTANDARD = LVCMOS33;
NET "vga_g" IOSTANDARD = LVCMOS33;
NET "vga_r" IOSTANDARD = LVCMOS33;
NET "vsync" IOSTANDARD = LVCMOS33;
NET "hsync" IOSTANDARD = LVCMOS33;
NET "hsync" PULLUP;

NET "sys_clk" PULLUP;
NET "vga_b" PULLUP;
NET "vga_g" PULLUP;
NET "vga_r" PULLUP;
NET "vsync" PULLUP;

我是用notepad++ 编辑的,tab 在这里搞成了空格,notepad是可以设置tab为空格模式。用tab习惯了,不喜欢吧tab 设置成空格模式,一直保持直接跳跃的模式,大家见谅。

Baidu
map