FPGA基础入门【4】Blink开发板实现

继上一篇博文仿真模拟了blink代码后我们可以实际的操作vivado编译真正的image了

FPGA基础入门【4】Blink开发板实现

  • 开发板信息
  • Vivado新建项目
  • 配置constraints文件
  • 编译及烧写

开发板信息

我们使用的开发板是Digilent的NEXYS 4 DDR开发板,这是一款在学生圈中使用广泛的开发板,相信受众不少,使用其他板子例如Zybo或者Zedboard也可以参考相应流程。在这个链接可以看到此开发板的信息:
Digilent NEXYS 4 DDR
Digilent NEXYS 4 DDR Manual PDF
FPGA基础入门【4】Blink开发板实现_第1张图片

我们需要的信息有这么些,首先我们需要的三个接口(时钟、按钮、LED灯)分别在FPGA的哪个管脚。NEXYS 4 DDR开发板所用的FPGA XC7A100T-1CSG324C 有210个I/O接口,好在这个开发板很贴心的在PCB板上相应位置上写上了对应FPGA管脚名称。比如LED0对应的是H17,开关SW0对应的是J15,我们只需要再找时钟的位置。

从手册中可以看到NEXYS 4 DDR上自带了一个板载晶振,大多数情况下这个晶振提供的时钟足够我们用了。这个时钟是100MHz的,对应引脚是E3。

Vivado新建项目

在Vivado新建NEXYS相关工程时会发现没有自带相关开发板信息,我们可以在网上下载开发板架构,加载入vivado的默认文件夹中,今后可以方便使用NEXYS 4 开发板。
Digilent archive

下载好之后,打开vivado-boards-master.zip,解压后,将vivado-boards-master/new/board_files文件夹拷贝覆盖上C:\Xilinx\Vivado\2018.3\data\boards\board_files,根据安装路径和版本按需要改动。重启后创建project时就可以看到相应的开发板信息了。

开始创建project
FPGA基础入门【4】Blink开发板实现_第2张图片
FPGA基础入门【4】Blink开发板实现_第3张图片
FPGA基础入门【4】Blink开发板实现_第4张图片
搜索相应的开发板信息
FPGA基础入门【4】Blink开发板实现_第5张图片
这一步可以用搜索FPGA part来替代:
FPGA基础入门【4】Blink开发板实现_第6张图片
完成创建
FPGA基础入门【4】Blink开发板实现_第7张图片
添加code:
FPGA基础入门【4】Blink开发板实现_第8张图片
FPGA基础入门【4】Blink开发板实现_第9张图片
FPGA基础入门【4】Blink开发板实现_第10张图片

配置constraints文件

对于Diligent NEXYS 4 DDR 这种使用量比较大的开发板,都会有完整的constraints模板供下载,模板链接在这里:NEXYS 4 DDR Master XDC

由于访问github不方便,对应的代码中与此教程有关的内容在这里附上:

## This file is a general .xdc for the Nexys4 DDR Rev. C
## To use it in a project:
## - uncomment the lines corresponding to used pins
## - rename the used ports (in each line, after get_ports) according to the top level signal names in the project

## Clock signal
set_property -dict { PACKAGE_PIN E3    IOSTANDARD LVCMOS33 } [get_ports { clock }]; #IO_L12P_T1_MRCC_35 Sch=clk100mhz
create_clock -add -name sys_clk_pin -period 10.00 -waveform {0 5} [get_ports {clock}];

##Switches
set_property -dict { PACKAGE_PIN J15   IOSTANDARD LVCMOS33 } [get_ports { reset }]; #IO_L24N_T3_RS0_15 Sch=sw[0]

## LEDs
set_property -dict { PACKAGE_PIN H17   IOSTANDARD LVCMOS33 } [get_ports { led }]; #IO_L18P_T2_A24_15 Sch=led[0]

这其中设置了clock、reset和led端口的引脚名称和电压,PACKAGE_PIN为引脚,IOSTANDARD为电压标准。另外设置了时钟频率100MHz,之所以要设置时钟频率,是因为vivado会根据这个频率来分析编译好以后的image会不会在这个频率下出错。

100MHz是相对较低的频率,一般FPGA在逻辑不太复杂的情况下可以在300MHz以内运行,太复杂的逻辑可能会在100MHz出错,这也是防止image不能按照设计运行的一个保险。

将这个文件以blink_constraint.xdc保存下来,名字可以自己替换,还是sources中的加号按钮来加载constraints文件:
FPGA基础入门【4】Blink开发板实现_第11张图片
FPGA基础入门【4】Blink开发板实现_第12张图片
FPGA基础入门【4】Blink开发板实现_第13张图片

编译及烧写

到此万事俱备,可以开始编译:
FPGA基础入门【4】Blink开发板实现_第14张图片
在左侧的flow navigator可以看到一系列操作,按下的Generate Bitstream实际上会经过另外两个步骤,Synthesis和Implementation。Synthesis会分析代码,看其中是否有语法错误;Implementation就将逻辑翻译成FPGA中的电路。

对于blink project来说,FPGA应该游刃有余,不太可能出错,并且不会跑太久,现在我们就可以尝试着烧写进开发板了。用USB线将电脑和开发板上的J6 PROG UART接口,之后
FPGA基础入门【4】Blink开发板实现_第15张图片
FPGA基础入门【4】Blink开发板实现_第16张图片
FPGA基础入门【4】Blink开发板实现_第17张图片
下载代码之后,拨动开关SW0应该就可以看到闪烁了。如果看到常亮灯,可以去blink.v里检查一下是不是忘记把50k改回50M了。

你可能感兴趣的:(FPGA)