今天给大侠带来基于 FPGA Vivado 的数字钟设计,开发板实现使用的是Digilent basys 3,如有想要入手 basys 3 开发板的,可以联系牛总:18511371833。话不多说,上货。
本篇掌握基于diagram的Vivado工程设计流程,学会使用IP集成器,添加 IP 目录并调用其中的IP。本篇实现了一个简单的数字钟,能实现计时的功能。由于数码管只有4位,因此本数字钟只能计分和秒。本系统的逻辑部分主要由74系列的IP构成。
获取本篇相关源工程代码,可在公众号内回复“数字钟设计源工程”,本篇涉及到两个操作软件,分别是“Agent软件”和“WaveForms软件”,获取软件安装包,可在公众号内对应回复“WaveForms软件安装包”,“Agent软件安装包”。
操作步骤
1. 创建新的工程项目
1) 双击桌面图标打开Vivado 2017.2,或者选择开始>所有程序>Xilinx Design Tools> Vivado 2017.2>Vivado 2017.2;
2) 点击‘Create Project’,或者单击File>New Project创建工程文件;
3) 将新的工程项目命名为‘lab2’,选择工程保存路径,勾选‘Create project subdirectory’,创建一个新的工程文件夹,点击Next继续;
4) 选择新建一个RTL工程,由于本工程无需创建源文件,故将Do not specify sources at this time(不指定添加源文件)勾选上。点击 Next继续;
5) 选择目标FPGA器件:xc7a35tcpg236-1或Basys3;
6) 最后在新工程总结中,检查工程创建是否有误。没有问题,则点击Finish,完成新工程的创建;
2. 添加已经设计好的IP核
工程建立完毕,我们需要将lab2这个工程所需的IP目录文件夹复制到本工程文件夹下。本工程需要两个IP目录:74LSXX_LIB与Interface。74LSXX_LIB 和Interface都位于\Basys3_workshop\sources\lab2文件夹下
1) 在Flow Navigator中展开PROJECT MANAGER,选择‘Settings’。
2) 在Project Settings栏中展开IP项,选择‘Repository’,点击‘+’添加。
3) 选择之前复制的IP文件夹
4) 确认弹窗提示一共添加了27个IP核
3. 创建原理图,添加IP,进行原理图设计。
1) 在Project Navigator下,展开IP INTEGRATOR,选择‘Create Block Design’创建新的原理图设计。
2) 将新的设计命名为‘digital_clock’。
3) 在原理图设计界面中,主要有两种方式添加IP核:①Diagram窗口上方的快捷键;②在原理图界面中鼠标右击,选择‘Add IP’。
4) 在IP选择框中搜索需要添加的IP,例如74LS90。
5) 按Enter键,或者鼠标双击该IP,可以完成添加。本设计共需要添加4个74LS90,以及74LS08、seg7decimal、clk_div各1个。添加完成后如下图所示:
6) 添加一个clock IP,在IP搜索框中搜索‘clock’,选择‘Clocking Wizard’添加。双击IP进行配置,在‘Output Clocks’一项,设置输出时钟为两路100MHz输出。
7) 在Output Clocks下方,不要勾选‘reset’和‘locked’,点击OK完成IP配置。
8) 再添加一个concat IP,在IP搜索栏中搜索‘concat’并添加。双击IP进行配置,将端口数设为16。
9) 同样的,再添加一个端口数为8的concat IP。至此,我们已经完成添加本设计中所有需要使用的IP。如下图所示:
10) 创建输出端口,鼠标右键选择8位concat的‘dout[7:0]’引脚,选择‘Make External’。
11) 完成后,如下图所示:
12) 同样的,将seg7decimal IP的clr、a_to_g、an、dp这4个引脚,以及clock IP的clk_in1引脚,以及任意一个74ls90 IP的r9_1引脚make external。
13) 修改端口名,双击端口‘r9_1’,在左侧的External Port Properties窗格中将其命名为GND。
14) 同样的,将‘clk_in1’更名为‘clk’,‘dout[7:0]’更名为‘JC[7:0]’,‘a_to_g[6:0]’更名为‘seg[6:0]’,如下图所示:
15) 按照下图连线,可以参考‘连线攻略.txt’文件。
16) 点击图纸上方的按键,验证设计的正确性。
17) 通过验证后,点击OK继续。Ctrl+S保存设计。
18) 在Sources窗格中鼠标右键‘digital_clock’,选择‘Generate Output Products’。
19) 在弹出窗口中,综合选项选择‘Global’,点击‘Generate’继续。
20) 完成后,点击‘OK’继续。
21) 在Sources窗格中鼠标右键‘digital_clock’,选择‘Create HDL Wrapper’。
22) 使用默认选项,点击OK继续,完成HDL文件的创建。
23) 至此,原理图的设计已经完成。
4. 添加约束文件
1) 在Flow Navigator中,展开PROJECT MANAGER,点击‘Add Sources’。
2) 选择‘Add or create constraints’,点击Next继续。
3) 选择‘Add Files’,找到并添加‘Digital_Clock.xdc’文件。注意,要勾选Copy constraints files into project(文件路径:\Basys3_workshop\sources\lab2)
5. 综合、实现、生成比特流文件
1) 实验一已经介绍过流程了,为了节省时间,这里就不一步一步再做赘述了,我们直接在Flow Navigator中展开PROGRAM AND DEBUG,点击Generate Bitstream。Vivado工具会提示没有已经实现的结果,点击‘Yes’,Vivado工具会依次执行综合、实现和生成比特流文件。
2) 完成后,选择‘Open Hardware Manager’打开硬件管理器。
3) 连接Basys3开发板,点击‘Open target’,选择‘Auto connect’。
4) 连接完成后,点击‘Program device’。
5) 检查弹出框中所选中的bit文件,然后点击Program进行下载。
6. 使用逻辑分析仪验证结果
Analog Discovery2(AD2)
1) 按照下图接线,将PMOD 1-4口分别连接AD2 0-3数字I/O口,PMOD 5(GND)口与AD2 GND口连接,PMOD 7-10口分别与AD2 4-7数字I/O口连接。
2) 连接AD2与电脑,打开WaveForms软件,获取WaveForms软件,可以在公众号内部回复“WaveForms软件安装包”。
3) 在工具栏选择Settings>Device Manager,打开设备管理器。
4) 选择连接的设备,点击‘Select’。
5) 在左侧的功能选择栏选择‘Logic’,使用逻辑分析仪。
6) 在窗口中点击‘Click to Add channels’,选择‘Bus’。
7) 将DIO 0-3端口添加到Bus1。
8) 同样的,点击左上角,将DIO 4-7端口添加到Bus2。完成后,如下图所示:
9) 点击‘Run’,观察数字时钟的秒针输出。
OpenScope
1) 按照下图接线,将PMOD 1-4口分别连接OpenScope 1-4数字I/O口,PMOD 5(GND)口与OpenScope GND口连接,PMOD 7-10口分别与AD2 5-8数字I/O口连接。
2) 连接OpenScope与电脑,打开Digilent Agent软件,获取Agent软件,可以在公众号内部回复“Agent软件安装包”。
3) 在Windows工具栏右侧,右键Digilent Agent图标,选择‘Launch WaveForms Live’,在浏览器中打开WaveForms Live。
4) 在浏览器页面中,点击‘ADD A DEVICE’添加设备。
5) 选择AGENT。
6) 输入设备的hostname或者IP地址,点击‘+’按钮添加。
在本地电脑中,默认值为http://localhost:42135
7) 选择连接OpenScope的串口,点击Open打开串口。
8) 使用默认设置,在最下方点击‘DONE’完成添加。
9) 点击打开添加的设备,在界面右侧将Time设置为5s,在Trigger一栏选择OFF。
10) 在界面右侧找到Digital一项,选择ANALYZER,依次点击1-8端口。
11) 点击右上方的‘SINGLE’按钮运行一次,完成后在左侧波形图中可以观察秒针的输出,可以使用鼠标拖动波形,方便观察。