一、学习内容

1、学习使用vivado软件

2、Verilog的学习

二、实验

1、led灯闪烁实验

 实验任务:使用ZYNQ开发板PL端LED,实现交替闪烁。

晶振时钟:50MHz

利用计数器cnt来计数,每数一个时钟周期20ns(1s=10^9 ns),数到5k万,为1s。、

 当cnt大于2.5k万时,led反转一次。0.5s led切换一次。

代码:

FPGA学习(一)_FPGA 学习

XDC文件

建立约束管脚,电平

FPGA学习(一)_FPGA 学习_02

 tb仿真文件

FPGA学习(一)_FPGA 学习_03

FPGA学习(一)_FPGA 学习_04

*仿真时候,为了更好的观察和减小采样深度,把时钟个数减少。

ila ip核

FPGA学习(一)_FPGA 学习_05


2、按键控制LED灯实验

利用zynq上的PL端按键,分别控制PL端的LED灯。当无按下状态,两个LED全亮。按下KEY0,两个LED灯交替闪烁。

按下KEY1,两个LED灯同时闪烁。


计数器代码

FPGA学习(一)_FPGA 学习_06

控制器

FPGA学习(一)_FPGA 学习_07

按键控制(利用case语句)

FPGA学习(一)_FPGA 学习_08

XDC约束文件

FPGA学习(一)_FPGA 学习_09



tb文件

模拟激励和例化

FPGA学习(一)_FPGA 学习_10

模拟时钟

FPGA学习(一)_FPGA 学习_11


3、按键控制蜂鸣器实验 (按键消抖)

按键消抖的实现:当按键按下第一次时,电平会发生变化,将按键的值放入到寄存器中,在下一个时钟时,检测按键的当时值和寄存器中存储的上一个值是否相等。若相等,则无抖动;若不等,则判定为抖动,此段电平无效。当稳定相等时候,则输出电平。


FPGA学习(一)_FPGA 学习_12

按键消抖


FPGA学习(一)_FPGA 学习_13


设置标志位、判断稳定周期

FPGA学习(一)_FPGA 学习_14

控制模块

FPGA学习(一)_FPGA 学习_15

顶层模块&调用子模块

FPGA学习(一)_FPGA 学习_16



​三、总结​

​第一个LED灯实验,简单认识了FPGA的整个设计流程,利用计时器进行LED闪烁的控制。

FPGA学习(一)_FPGA 学习_17

第二个实验,相较于第一个实验,增加了按键控制和判断模块,利用case语句进行状态控制。

第三个实验,是按键消抖实验,为了防止按键抖动来影响输出,LED的控制实验中没考虑按键抖动,是考虑到按键抖动对于LED的闪烁影响不大。按键消抖实验中,利用寄存器存储上一个状态与当前的状态进行对比,若相等并且持续一段时间,则判断为稳定;若不相等,则判为抖动,并将当前信号不输出。此实验中,涉及不同的模块,消抖模块和按键控制模块,顶层模块。并在顶层模块中对另外两个模块进行调用。


通过学习三个实验,熟悉了vivado软件和Verilog语言,也对FPGA设计有了进一步的了解,但独立完成实验代码则出现很多错误,对Verilog的掌握还不够熟悉,对实验设计思路还没真正理解掌握。