一、学习内容
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切换一次。
代码:
XDC文件
建立约束管脚,电平
tb仿真文件
*仿真时候,为了更好的观察和减小采样深度,把时钟个数减少。
ila ip核
2、按键控制LED灯实验
利用zynq上的PL端按键,分别控制PL端的LED灯。当无按下状态,两个LED全亮。按下KEY0,两个LED灯交替闪烁。
按下KEY1,两个LED灯同时闪烁。
计数器代码
控制器
按键控制(利用case语句)
XDC约束文件
tb文件
模拟激励和例化
模拟时钟
3、按键控制蜂鸣器实验 (按键消抖)
按键消抖的实现:当按键按下第一次时,电平会发生变化,将按键的值放入到寄存器中,在下一个时钟时,检测按键的当时值和寄存器中存储的上一个值是否相等。若相等,则无抖动;若不等,则判定为抖动,此段电平无效。当稳定相等时候,则输出电平。
按键消抖
设置标志位、判断稳定周期
控制模块
顶层模块&调用子模块
三、总结
第一个LED灯实验,简单认识了FPGA的整个设计流程,利用计时器进行LED闪烁的控制。
第二个实验,相较于第一个实验,增加了按键控制和判断模块,利用case语句进行状态控制。
第三个实验,是按键消抖实验,为了防止按键抖动来影响输出,LED的控制实验中没考虑按键抖动,是考虑到按键抖动对于LED的闪烁影响不大。按键消抖实验中,利用寄存器存储上一个状态与当前的状态进行对比,若相等并且持续一段时间,则判断为稳定;若不相等,则判为抖动,并将当前信号不输出。此实验中,涉及不同的模块,消抖模块和按键控制模块,顶层模块。并在顶层模块中对另外两个模块进行调用。
通过学习三个实验,熟悉了vivado软件和Verilog语言,也对FPGA设计有了进一步的了解,但独立完成实验代码则出现很多错误,对Verilog的掌握还不够熟悉,对实验设计思路还没真正理解掌握。