实验二 数据选择器的设计与vivado集成开发环境【Verilog】
- 前言
- 实验二 数据选择器的设计与vivado集成开发环境
- 一、实验目的
- 二、实验环境
- 三、实验任务
- 四、实验原理
- 五、实验步骤
- 六、实验思考
- vivado开发设计流程文档
- 工程创建
- 添加源文件
- 下板
- Code资料
- 最后
前言
以下内容源自Verilog实验
仅供学习交流使用
实验二 数据选择器的设计与vivado集成开发环境
一、实验目的
- 掌握数据选择器的工作原理和逻辑功能。
- 熟悉vivado集成开发环境。
- 熟悉vivado中进行开发设计的流程。
二、实验环境
- 装有vivado的计算机。
- Sword实验系统。
三、实验任务
- 用VerilogHDL语言设计实现4位二选一数据选择器电路,完成功能仿真。
- 设计顶层电路,关联外设,在vivado下完成综合等设计步骤,下载至Sword实验系统验证电路功能,熟悉vivado操作流程。
四、实验原理
- 数据选择器的设计
设计二选一数据选择器,并验证该电路功能。采用三个拨动开关分别作为数据选择器的选择输入和数据输入,输出接到发光二极管上,由发光二极管显示选择器的输入状态。电路连接图如下(具体连接引脚可以自定修改): - 为了验证电路功能,需要设计顶层模块,实例化所设计的多路选择器模块。根据sword平台设计,led的驱动需要调用LED_P2S.ngc,这是已经封装好的代码。由于实验台的设计是将驱动led的数据并行转为串行输出,此时还需要在工程中加入时钟clk_div.v。在顶层设计中,将SW与所设计的mux的输入关联,led与所设计的mux的输出关联。完成电路功能验证。在这个过程中,熟悉vivado工具设计流程。
五、实验步骤
- 参考ISE开发设计流程文档,新建工程,设计四位二选一多路选择器模块mux21_4.v(采用实验一的设计)。
- 完成该模块的功能仿真。
- 参照vivado开发设计流程文档,依次在工程中加入LED_P2S.ngc和LED_P2S_IO.v(用于led显示),clk_div.v(时钟模块),MUX-top.v(顶层模块),依次完成以下步骤:综合、管脚映射、实现、生成bit流文件。
- 参照vivado开发设计流程文档,将设计文件下板,运行,验证电路功能。
六、实验思考
在此基础上,完成四选一多路选择器设计,并修改顶层模块设计,完成下板,验证所设计的电路是否正确运行。完成实验报告撰写。
vivado开发设计流程文档
工程创建
1 新建工程
2 建立RTL Project
3 可以先不用创建文件或者添加文件,直接点击next
4 选择设置项,这是下图是sword实验箱对应的设置选项。如果不按照该选项,会因为器件引脚不对应等问题下板出现报错
5 点击finish,完成工程创建
添加源文件
6 点击add source,添加文件。
7也可以在vivado环境下直接创建文件,编译一个verilog 文件.
8 加载好文件,如下图所示。其中Prep-IO是我们自己写的顶层,调用了LED_P2S和P2S这两个IP核,分别完成16位led数据和64位八个七段数码管显示数据的并-串的转换。为了能够使用机箱上的led和七段数码管,必须在自己的工程里添加如下文件。
9 开始综合,为设计添加约束。点击run synthesis。综合时,可以从右上角看到正在综合的状态
9 综合结束,点击 open Synthesied Design
10 进行管脚约束,制定具体输入输出信号在FPGA上的引脚位置。
11 管脚约束要用到sword的约束文件。以下是我们做课内实验需要用到的引脚的约束文件。具体表明了和FPGA芯片哪个引脚相连,以及采用到的电平标准。这里必须严格按照约束文件来选择。例如约束SW[0]到SW[15]引脚,文件中标出红色的部分,约束好后如下图所示。如果这里引脚映射出现问题,进行后续步骤会有错误提示,按照提示的错误修改就可以。
#NET "seg_sout" LOC = L24 | IOSTANDARD = LVCMOS33 ;
#NET "SEG_PEN" LOC = R18 | IOSTANDARD = LVCMOS33 ;
#NET "RDY" LOC = U21 | IOSTANDARD = LVCMOS33 ;
#NET "readn" LOC = U22 | IOSTANDARD = LVCMOS33 ;
#NET "CR" LOC = V22 | IOSTANDARD = LVCMOS33 ;
#NET "tri_led1_r_n" LOC = U24 | IOSTANDARD = LVCMOS18 ;
#NET "tri_led1_g_n" LOC = U25 | IOSTANDARD = LVCMOS18 ;
#NET "tri_led1_b_n" LOC = V23 | IOSTANDARD = LVCMOS18 ;
#NET "BTN_x[0]" LOC = V17 | IOSTANDARD = LVCMOS18 ;
#NET "BTN_x[1]" LOC = W18 | IOSTANDARD = LVCMOS18 ;
#NET "BTN_x[2]" LOC = W19 | IOSTANDARD = LVCMOS18 ;
#NET "BTN_x[3]" LOC = W15 | IOSTANDARD = LVCMOS18 ;
#NET "BTN_x[4]" LOC = W16 | IOSTANDARD = LVCMOS18 ;
#NET "BTN_y[0]" LOC = V18 | IOSTANDARD = LVCMOS18 ;
#NET "BTN_y[1]" LOC = V19 | IOSTANDARD = LVCMOS18 ;
#NET "BTN_y[2]" LOC = V14 | IOSTANDARD = LVCMOS18 ;
#NET "BTN_y[3]" LOC = W14 | IOSTANDARD = LVCMOS18 ;
NET "SW[0]" LOC = AA10 | IOSTANDARD = LVCMOS15 ;
NET "SW[1]" LOC = AB10 | IOSTANDARD = LVCMOS15 ;
NET "SW[2]" LOC = AA13 | IOSTANDARD = LVCMOS15 ;
NET "SW[3]" LOC = AA12 | IOSTANDARD = LVCMOS15 ;
NET "SW[4]" LOC = Y13 | IOSTANDARD = LVCMOS15 ;
NET "SW[5]" LOC = Y12 | IOSTANDARD = LVCMOS15 ;
NET "SW[6]" LOC = AD11 | IOSTANDARD = LVCMOS15 ;
NET "SW[7]" LOC = AD10 | IOSTANDARD = LVCMOS15 ;
NET "SW[8]" LOC = AE10 | IOSTANDARD = LVCMOS15 ;
NET "SW[9]" LOC = AE12 | IOSTANDARD = LVCMOS15 ;
NET "SW[10]" LOC = AF12 | IOSTANDARD = LVCMOS15 ;
NET "SW[11]" LOC = AE8 | IOSTANDARD = LVCMOS15 ;
NET "SW[12]" LOC = AF8 | IOSTANDARD = LVCMOS15 ;
NET "SW[13]" LOC = AE13 | IOSTANDARD = LVCMOS15 ;
NET "SW[14]" LOC = AF13 | IOSTANDARD = LVCMOS15 ;
NET "SW[15]" LOC = AF10 | IOSTANDARD = LVCMOS15 ;
#ArDUNIO-IO
#NET "Buzzer" LOC = AF24 | IOSTANDARD = LVCMOS33 ;
#NET "SEGMENT[0]" LOC = AB22 | IOSTANDARD = LVCMOS33 ;#a
#NET "SEGMENT[1]" LOC = AD24 | IOSTANDARD = LVCMOS33 ;#b
#NET "SEGMENT[2]" LOC = AD23 | IOSTANDARD = LVCMOS33 ;
#NET "SEGMENT[3]" LOC = Y21 | IOSTANDARD = LVCMOS33 ;
#NET "SEGMENT[4]" LOC = W20 | IOSTANDARD = LVCMOS33 ;
#NET "SEGMENT[5]" LOC = AC24 | IOSTANDARD = LVCMOS33 ;
#NET "SEGMENT[6]" LOC = AC23 | IOSTANDARD = LVCMOS33 ;#g
#NET "SEGMENT[7]" LOC = AA22 | IOSTANDARD = LVCMOS33 ;#point
#NET "AN[0]" LOC = AD21 | IOSTANDARD = LVCMOS33 ;
#NET "AN[1]" LOC = AC21 | IOSTANDARD = LVCMOS33 ;
#NET "AN[2]" LOC = AB21 | IOSTANDARD = LVCMOS33 ;
#NET "AN[3]" LOC = AC22 | IOSTANDARD = LVCMOS33 ;
#NET "LED[0]" LOC = AB26 | IOSTANDARD = LVCMOS33 ;
#NET "LED[1]" LOC = W24 | IOSTANDARD = LVCMOS33 ;
#NET "LED[2]" LOC = W23 | IOSTANDARD = LVCMOS33 ;
#NET "LED[3]" LOC = AB25 | IOSTANDARD = LVCMOS33 ;
#NET "LED[4]" LOC = AA25 | IOSTANDARD = LVCMOS33 ;
#NET "LED[5]" LOC = W21 | IOSTANDARD = LVCMOS33 ;
#NET "LED[6]" LOC = V21 | IOSTANDARD = LVCMOS33 ;
#NET "LED[7]" LOC = W26 | IOSTANDARD = LVCMOS33 ;
12 约束好引脚,点击保存按钮,输入文件名,保存文件。
13 可以查看生成的约束文件。如下图。
14 继续执行Implementation,生成在具体FPGA器件资源上实现的电路网表。可以点击∑图标查看当前的执行情况。如下图所示。
15 继续点击Generate Bitstream
16 执行过程中可以从下图红标出看到执行状态
17实现后生成了针对板卡的配置文件。打开调试管理。
下板
18 打开了Hardware Manager,和实验箱连接
19 查找到设备,将文件下板
20 完成,观察电路运行现象
Code资料
最后
这篇博客能写好的原因是:站在巨人的肩膀上
这篇博客要写好的目的是:做别人的肩膀
开源:为爱发电
学习:为我而行