实体硬件:Digilent的zybo-z7-20开发板;
开发环境:Vivado 2018.3;
目标:通过PL部分,进行FPGA编程,点亮开发板上的四盏led灯。
参考:博文ZYBOZ7从入门到进阶-2 zyboz7纯PL开发之LED点灯这片博文写的比较清晰完整,这里的实验过程基本一致,不过有两点区别:
1、这里提供了两个录屏的视频作为参考;
2、我把实验分成两步:(1)点亮led灯,(2)让led闪烁起来。分成两部分应该更容易理解。
基本步骤1:
1、Vivado 新建工程
2、添加 led.v 程序,则也就是顶层模块,用来点亮小灯泡。
module led(
input sys_clk, //系统时钟 125MHz
output reg[3:0] led //4盏 led灯,
);
always @(posedge sys_clk)
begin
led <= 4'b1001;
end
endmodule
3、添加板子上管脚的约束文件
3.1 从Git(https://github.com/Digilent/digilent-xdc)上下载的约束文件:Zybo-Z7-Master.xdc;
3.2 去掉sysclk系统时钟和led部分的注释;
3.3 修改时钟部分的引脚命名。
4、直接生成Bitstream文件
5、下载到板子上,观察结果。
6、修改代码,增加计数器,统计时间。根据时间改变led灯的亮灭方式。
module led(
input sys_clk, //系统时钟,125MHz
output reg[3:0] led //四盏灯
);
parameter ONE_SECOND = 32'd124_999_999;
parameter HALF_SECOND = (32'd124_999_999-1)/2;
reg [32:0] counter;
initial begin //初始化,这里让开头和结尾的两盏灯亮一下,不过估计这个时间太短了,看不到。
led <= 4'b1001;
counter <= 32'd0;
end
always @(posedge sys_clk) // 增加一个计数器,统计半秒钟内来的上升沿个数;
begin
if (counter < HALF_SECOND) // 如果计数没有到半秒钟,继续计数
begin
counter <= counter + 32'd1;
end
else // 如果计数到了半秒钟,计数器清零;改变led灯的状态,{}
begin
counter <= 32'd0;
led <= {led[2:0],~led[3]};
end
end
endmodule
两个参考视频,没有声音,建议倍速播放:
01-点亮zybo-z7的led
02-让led灯闪烁起来 ↩︎