使用一个拨码开关控制LED灯的亮灭
本部分代码已经上传到github上:linxunxr/VerilogStudy (github.com),文件夹为001,仅上传了工程文件、设计文件和约束文件
任务前的准备
- 在开始实验之前我们需要完成Vivado软件的安装,此方面可直接去官网下载响应的版本安装即可,个人使用的是2022.2的版本。vivado的官网下载链接:下载 (xilinx.com)
- 在完成软件的安装之后,我们就需要来创建项目。
创建工程
- 打开软件
- 点击创建工程
- 点击Next,设置工程名称和工程目录
- 点击Next,选择RTL Project
- 添加或创建设计源文件,亦可不创建,在后续进行创建,本次再次点击创建文件
- 创建完成后即可在列表查看到该文件
- 点击Next进入约束文件的添加或创建,亦可不创建,一般不在这个界面创建约束文件,因此直接Next
- 接下来进入选芯片的界面,根据Xilinx提供的信息可知,basys3的开发板芯片型号为:xc7a35tcpg236-1,因此在芯片库中搜索到对应芯片并选择
- 点击Next即进入工程创建的最后界面,在此界面可以确认之前的信息
- 点击Finish即进入创建工程,等待创建完成
进入工程界面
- 由于我们在工程创建的同时创建了源文件,但是并没有定义模块,因此在进入工程之后会弹出让我们定义模块的界面,此处直接取消就可以
编写代码
- 我们首先需要了解Vivado的资源界面,Vivado的资源界面分为四个文件夹,目前我们需要了解的就是第一个、第二个和第三个文件夹。第一个是设计文件,相当于C语言中的源文件,在这里我们需要用verilog代码来描述我们需要使用的数字电路和系统;第二个是约束文件,如将我们编写的硬件代码下载到板子上还需要找到板子上的引脚与我们代码里的端口进行对应;第三个是仿真文件,相当于C语言中针对某一功能而写的测试代码,这部分我们下一次会用到。
- 接下来,点开led.v就需要写verilog代码,我们就写出了下面这个最为简单的代码,将输入的拨码开关值赋值给led并输出。
module led(
input sw,
output led
);
assign led = sw;
endmodule
但是在读懂上述代码之前,我们需要先了解一个概念,就是模块。我们知道,verilog的代码编写理念是自顶向下设计,即我们需要将我们拿到的任务进行模块划分,如下图
graph TD
系统级设计 --> 模块A
系统级设计 --> 模块B
系统级设计 --> 模块C
模块A --> 模块A_1
模块A --> 模块A_2
模块A --> 模块A_3
模块B --> 模块B_1
模块B --> 模块B_2
模块B --> 模块B_3
模块C --> 模块C_1
模块C --> 模块C_2
模块C --> 模块C_3
直至划分到FPGA提供的或者最基础的模块后再逐步实现。一个模块在verilog语法中以module
开始,到endmodule
结束。因此我们就能看出上述代码只有一个名为led
的模块,,这个模块具有一个名为sw
的输入信号端口,一个名为led
的输出信号端口,里面具有一个赋值语句将从sw
端口获得的信号赋值给led
的端口。赋值语句中的assign
相当于一条连线,将sw
和led
连接起来,可以参考后面通过RTL分析获得的电路图来表明。
工程流程
我们已经写完了代码,接下来就需要了解整体的工程流程。其实Vivado已经把顺序给了我们,即下图左侧从上到下的仿真、RTL分析、设计综合、设计实现、生成配置文件并下载到板子验证。由于本次任务比较简单,因此直接进入RTL分析。
- RTL分析
在导航栏内选择打开RTL下面的Open Elaborated Design,选择左侧的电路图(Schematic),然后就可以在右侧看到分析出来的电路图。
- I/O端口约束
将右上角的默认Layout切换为I/O端口,就可以在界面的下方看到I/O端口
查询basys3板子的技术手册或观察板子上所写的引脚,选择输入和输出端口对应的引脚,注意需要将I/O Std选择为LVCMOS33*即3.3V,然后使用保存快捷键Ctrl+S即可弹出保存约束文件的界面
添加约束文件的文件名点击OK即可将引脚的约束保存为约束文件,打开第二个文件夹即可看到刚刚保存的XDC文件,点开即可在右侧看到相应的描述
- 设计综合
点击Run Synthesis后弹出窗口,选择运行线程即可
点击OK执行设计的综合(设计综合的过程是由FPGA综合工具将HDL、原理图等源文件进行分析、推演出由FPGA芯片中底层基本单元表示的电路网表的过程),然后就可以看到右上角出现了正在综合的标志,此处等待完成即可
执行结束后会弹出窗口,选择Open Synthesis Design会打开综合后的设计,也可以直接选择Run Implementaion进行下一步
- 设计实现
与前面一样,选择运行线程即可
点击OK可以看到右上角正在执行操作
执行完毕后会弹出窗口,选择Generate Bitstream即为生成bit文件,用于下载到板子上进行硬件验证
仍旧选择相应的线程进行操作
可以看到右上角正在生成bit文件
等待生成完成后会弹出窗口,选择Open Hardware Manager即为打开硬件管理器
- 下载验证 上一步我们打开硬件管理器后即可在窗口上看到Open target的字符
点击后选择Auto自动连接然后等待连接完成即可
连接完成后在原来的Open target的地方可以看到Program device
点击后会弹出下载窗口
点击Program后等待下载完成即可在板子上观察到相关现象。
至此,第一个实验就已经完成。