欢迎光临散文网 会员登陆 & 注册

FPGA学习笔记day5

2023-04-09 20:57 作者:崔崔TV  | 我要投稿

来做流水灯实验。

需要注意的是仿真软件的使用过程,体会一下其实际作用。

一、LED简介

发光二极管,单向导电性

长的是正极,3.3v,短的负极接地

直插式led

那个小三角表示负极

贴片式led

但是板子上那些好像和这个也不一样。不知道板子上那些是什么型号的


二、硬件设计

LED0-3是连接到FPGA的输出。通过控制输出3.3v还是0v控制亮灭。

流水灯:同一时刻只有一个灯亮。

1000

0100

0010

0001

一直通过这种方式变化,就实现了流水灯


三、程序设计

首先确定输入输出的端口

输入:时钟clk,复位rst,

输出端口:4位的[3:0]led


然后就是需要一个定时器(计数器),以及一个移位操作。

框图:

波形图:

在这里解释了一下10000000这个数字是怎么出来的。0.2s是我们想要的流水灯的间隔时间,20ns是50mhz的晶振所能提供的一个时钟周期的时间。那么10000000就是通过这个计数器实现0.2s定时的时候所需要计数的个数。到10000000之后清零,重新计数,周而复始。这里其实不是很严谨,应该计数到10000000-1,这样0到10000000-1才是正好10000000个时钟周期。

看来写程序之前最好还是先画个图。理清逻辑。这是个可取的好习惯。


然后创建工程,来一遍之前学过的那个流程,就不重复了。

然后用notepad++写代码

然后开始搞仿真

首先要写一个testbench

还是用notepad++写一个.v文件,保存到工程目录下面的sim文件夹

提前保存的目的是,确定好这个后缀之后,编写程序会产生高亮,便于检查

所以其实观察可以发现这个所谓的tb文件里面需要做的无非就是这几项工作:

1、`timescale确定仿真的时间单位和精度

2、always #   确定一下时钟频率。

3、initial begin end  时钟置零,复位置零,延时,复位置数

4、模块例化。

然后modelsim仿真

遇到一个问题就是

倒腾半个小时

记住一个点:例化程序的写法

要例化的模块 例化模块名字(

………………

不要上来就写例化模块的名字,那样他在反复例化自己,就会出现一个超长的路径。

操真他妈傻逼。

太傻逼了。明天学下一个。


FPGA学习笔记day5的评论 (共 条)

分享到微博请遵守国家法律