0
点赞
收藏
分享

微信扫一扫

实验二 数据选择器的设计与vivado集成开发环境【Verilog】


实验二 数据选择器的设计与vivado集成开发环境【Verilog】

  • ​​前言​​
  • ​​实验二 数据选择器的设计与vivado集成开发环境​​
  • ​​一、实验目的​​
  • ​​二、实验环境​​
  • ​​三、实验任务​​
  • ​​四、实验原理​​
  • ​​五、实验步骤​​
  • ​​六、实验思考​​
  • ​​vivado开发设计流程文档​​
  • ​​工程创建​​
  • ​​添加源文件​​
  • ​​下板​​
  • ​​Code资料​​
  • ​​最后​​

前言

以下内容源自Verilog实验
仅供学习交流使用

实验二 数据选择器的设计与vivado集成开发环境

一、实验目的

  1. 掌握数据选择器的工作原理和逻辑功能。
  2. 熟悉vivado集成开发环境。
  3. 熟悉vivado中进行开发设计的流程。

二、实验环境

  1. 装有vivado的计算机。
  2. Sword实验系统。

三、实验任务

  1. 用VerilogHDL语言设计实现4位二选一数据选择器电路,完成功能仿真。
  2. 设计顶层电路,关联外设,在vivado下完成综合等设计步骤,下载至Sword实验系统验证电路功能,熟悉vivado操作流程。

四、实验原理

  1. 数据选择器的设计
    设计二选一数据选择器,并验证该电路功能。采用三个拨动开关分别作为数据选择器的选择输入和数据输入,输出接到发光二极管上,由发光二极管显示选择器的输入状态。电路连接图如下(具体连接引脚可以自定修改):
  2. 为了验证电路功能,需要设计顶层模块,实例化所设计的多路选择器模块。根据sword平台设计,led的驱动需要调用LED_P2S.ngc,这是已经封装好的代码。由于实验台的设计是将驱动led的数据并行转为串行输出,此时还需要在工程中加入时钟clk_div.v。在顶层设计中,将SW与所设计的mux的输入关联,led与所设计的mux的输出关联。完成电路功能验证。在这个过程中,熟悉vivado工具设计流程。

五、实验步骤

  1. 参考ISE开发设计流程文档,新建工程,设计四位二选一多路选择器模块mux21_4.v(采用实验一的设计)。
  2. 完成该模块的功能仿真。
  3. 参照vivado开发设计流程文档,依次在工程中加入LED_P2S.ngc和LED_P2S_IO.v(用于led显示),clk_div.v(时钟模块),MUX-top.v(顶层模块),依次完成以下步骤:综合、管脚映射、实现、生成bit流文件。
  4. 参照vivado开发设计流程文档,将设计文件下板,运行,验证电路功能。

六、实验思考

在此基础上,完成四选一多路选择器设计,并修改顶层模块设计,完成下板,验证所设计的电路是否正确运行。完成实验报告撰写。

vivado开发设计流程文档

工程创建

1 新建工程

实验二 数据选择器的设计与vivado集成开发环境【Verilog】_选择器

2 建立RTL Project
3 可以先不用创建文件或者添加文件,直接点击next

实验二 数据选择器的设计与vivado集成开发环境【Verilog】_选择器_02


4 选择设置项,这是下图是sword实验箱对应的设置选项。如果不按照该选项,会因为器件引脚不对应等问题下板出现报错

实验二 数据选择器的设计与vivado集成开发环境【Verilog】_选择器_03

5 点击finish,完成工程创建

实验二 数据选择器的设计与vivado集成开发环境【Verilog】_数据_04

添加源文件

6 点击add source,添加文件。

实验二 数据选择器的设计与vivado集成开发环境【Verilog】_fpga开发_05

7也可以在vivado环境下直接创建文件,编译一个verilog 文件.

实验二 数据选择器的设计与vivado集成开发环境【Verilog】_选择器_06


实验二 数据选择器的设计与vivado集成开发环境【Verilog】_选择器_07

8 加载好文件,如下图所示。其中Prep-IO是我们自己写的顶层,调用了LED_P2S和P2S这两个IP核,分别完成16位led数据和64位八个七段数码管显示数据的并-串的转换。为了能够使用机箱上的led和七段数码管,必须在自己的工程里添加如下文件。

实验二 数据选择器的设计与vivado集成开发环境【Verilog】_ios_08

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资料

最后

这篇博客能写好的原因是:站在巨人的肩膀上

这篇博客要写好的目的是:做别人的肩膀

开源:为爱发电

学习:为我而行


举报

相关推荐

0 条评论