刷题推荐

链接: Verilog刷题

1,实验简介

通过LED流水灯实验,熟悉vivado软件开发FPGA的基本流程。包括器件选择、设置、代码的编写、编译、分配管脚、下载、程序FLASH固化烧录等。

2,实验环境

vivado 2019.1
黑金AX7035开发板

3,实验原理

3.1,LED硬件电路



从原理图可以看出,FPGA的IO输出低电平点亮LED,输出高电平LED熄灭。

4,程序设计

FPGA的设计中通常使用计数器来计时,对于50MHZ的系统时钟,一个时钟周期是20ns,那么表示1秒需要50_000_000个时钟周期。

4.1,vivado工程创建

1,打开vivado,在IDE里双击Create Project,如下图:

2,弹出一个vivado的工程向导,点击Next;
3,在弹出的对话框中输入工程名和工程存放的目录,工程可以选择自定义一个文件夹存放,这里取一个led_test的工程名,点击Next;

4,在下面的对话框中默认选择RTL Project,因为这里使用Verilog行为描述语言来编程。下面的Do not specify source at this time 的勾也可以打上。如果不打上,下一步会进入添加source file界面;

5,进入添加source file 界面,这里先不添加任何设计文件,点击Next;
6,提示是否添加已有的约束文件,这里约束文件也没有设计,所以不添加;
7,选择所用的FPGA器件,以及进行配置。首先在Family栏里选择Artix - 7,Speed grade栏选择-2,在Package栏选择fgg484,然后在下面列表中选择xc7a35tfgg484-2,单击Next;

8,再次确认板子型号是否正确,没有问题点击Finish完成工程创建。

4.2,编写流水灯的Verilog代码

1,点击Project Manager下的Add Sources图标;

2,选择Add or create design sources,点击Next;

3,点击Add Files可以添加源文件,点击AddDirectories可以按目录添加源文件,因为还没设计程序,所以点击Create File按钮;

在弹出的对话框里选择File type是Verilog,File name是led_test,点击OK,点击Finish;

4,向导会提示定义I/O端口,可以在后面编写,单击OK,单击Yes。这时在Project Mannager界面下的Design Sources已经有了一个led_test.v文件,并自动成为项目的top模块;

5,编写代码,control+s保存好代码;

`timescale 1ns / 1ps
module LED_test
(input sys_clk,      //system clock 50MHZ on boardinput rst_n,        //reset low activeoutput [3:0] led    //LED use of control the LED signal on board
); reg [31:0] timer;
reg [3:0] led;
//==============================
/cle counter : from 0 to 4 sec
//==============================
always @(posedge sys_clk or posedge rst_n)beginif(~rst_n)timer <= 32'd0;                 //when the reset signal valid,time counter clearingelse if(timer == 32'd199_999_999)   //4 seconds count(50M * 4 - 1 = 199_999_999)timer <= 32'd0;                 //count done,clearing the time counterelsetimer <= timer + 1'b1;          //timer counter = timer counter + 1end
//==============================
//LED control
//==============================
always @(posedge sys_clk or posedge rst_n)beginif(~rst_n)led <= 4'b1111;else if(timer == 32'd49_999_999)led <= 4'b0111;else if(timer == 32'd99_999_999)led <= 4'b1011;else if(timer == 32'd149_999_999)led <= 4'b1101;else if(timer == 32'd199_999_999)led <= 4'b1110;endila ila_inst
( .clk(sys_clk),.probe0(timer),.probe1(led)
);
endmodule

4.3,添加XDC管脚约束文件

4.3.1,添加LED管脚约束

1,点击RTL Analysis下的Open Elaboratred Design图标;

2,在I/O Ports添加I/O口和时钟、复位口的引脚,如果在栏目找不到,到菜单栏单击Window,选择I/O Ports。将原理图的I/O写入,复位引脚在这里默认低电平复位,将I/O口用一个按键替代即可;

3,control+s保存,在弹出的向导里File type 默认是XDC,Project name自定义,在这里是led,单击OK;

4.3.2,添加时钟约束

1,点击Synthesis下的Open Synthesized Design图标,选择Constranits Wizard,点击Next;

2,在Frequency栏下输入50,点击Skip to Finish,点击Finish;

3,打开xdc文件,会出现约束语句。

4.4,vivado仿真验证

可以用vivado自带的仿真工具来验证流水灯程序的结果
1,设置vivado的仿真配置,右击SIMULATION 中的Simulation Settings;

2,设置成需要的仿真时间,这里设置成50ms,单击OK;

3,添加激励测试文件,点击Project Manager下的Add Sources图标;
4,选择Add or create simulation sources,点击Next;

5,点击Create File生成仿真激励文件;

在弹出的对话框中输入激励文件的名字,这里为vtf_led_test,点击Finish,点击OK,点击Yes;

6,编写仿真程序,control+s保存好代码;

`timescale 1ns / 1ps
module vtf_LED_test;reg sys_clk;reg rst_n;wire [3:0] led;LED_test uut(.sys_clk(sys_clk),.rst_n(rst_n),.led(led));initial beginsys_clk = 0;rst_n = 0;#1000;rst_n = 1;#20000;endalways #10  sys_clk = ~sys_clk;
endmodule

7,点击Run Simulation,再选择Run Behavioral Simulation,这里做一下行为级的仿真;

8,在弹出的仿真界面中可以选择双击uut,将timer拖动到Wave中观测timer的波形;

9,点击图标Restart复位一下,再点击Run All,可以看到仿真波形与设计相符;

4.5,下载和Flash固化

经过前面的编译和仿真,我们可以把bit文件下载到FPGA芯片中,看一下实际运行效果,下载程序之前先连接硬件,JTAG和开发板连接,开发板连接电源上电。

1,右击PROGRAM AND DEBUG ,单击Bitstream Setting;

2,选择生成bin文件,点击OK,生成的bin文件在后面固化程序到Flash中会用到;

3,单击Generate Bitstream生成bit和bin文件;

4,点击Open Hardware Manager,点击Open Target->Auto Councet,在hardware界面下会显示xc7a35t_0图标,说明JTAG连接成功;

5,右键xc7a35t_0,选择Program Device,选择led_test生成的bit文件,点击Program烧写FPGA【掉电程序丢失】

6,右键xc7a35t_0,选择Add Configruation Memory Device,在弹出的对话框选择正确的FLASH型号,点击OK【掉电程序不丢失】;

7,提示是否对SPI FLASH进行编程,点击OK,在弹出的窗口中,Configration file选择vivado生成的bin文件【文件默认在imp1_1目录下】,点击OK;

8,想加快上电后程序启动,可以在xdc文件添加以下几行代码,目的是为了提高SPI FLASH的读写时钟,其中前面两条设置QSPI FLASH的数据宽度和配置模式,后面一条是配置速度,这个值越大,速度越快。修改好的xdc文件需要重新编译,再次重新生成bit和bin文件。

set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design]
set_property CONFIG_MODE SPIx4 [current_design]
set_property BITSTREAM.CONFIG.CONFIGRATE 50 [current_design]

ARTIX-7 XC7A35T实验项目之流水灯相关推荐

  1. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】【实验一】流水灯模块

    实验一:流水灯模块 对于发展商而言,动土仪式无疑是最重要的任务.为此,流水灯实验作为低级建模II的动土仪式再适合不过了.废话少说,我们还是开始实验吧. 图1.1 实验一建模图. 如图1.1 所示,实验 ...

  2. c语言编程流水灯与交通灯实验,C51单片机实验报告_流水灯_交通灯_定时器_双机交互_时钟.doc...

    C51单片机实验报告_流水灯_交通灯_定时器_双机交互_时钟 学 号: 班 级: 自动化10班 姓 名: 张 指导老师: 胡 2012.12 单片机核心板实验要求 流水灯实验 实验目的: 简单I/O引 ...

  3. 【微处理器与嵌入式】实验2——蜂鸣器+流水灯 汇编

    [微处理器与嵌入式]实验2--蜂鸣器+流水灯 汇编 1.流水灯 ORG 0000HAJMP MAINORG 0030H MAIN: MOV A,#0FEH;LOOP: CLR P1.0;ACALL D ...

  4. 基础实验二:流水灯设计实现【硬件课程设计】

    基础实验二:流水灯设计实现[硬件课程设计] 前言 推荐 基础实验二:流水灯设计实现 1.实验内容 2.实验原理图设计 3.实验仿真与仿真结果 4.遇到的问题及解决办法 V0:首先设计了从中间向俩边&l ...

  5. 【Arduino实验02 LED流水灯】

    目录 一.实验目的 二.实验设备与环境 三.实验重点 四.实验难点 五.实验内容 5.1实验任务 5.2实验原理 5.3实验内容 5.4实验结果 5.5思考题 一.实验目的 1熟练掌握Arduino实 ...

  6. 【连载】【STM32神舟III号实验例程】流水灯实验(实验一)

    源代码流水灯实验例程程序(神舟III号).rar

  7. 基于Atmega16的GPIO实验(以流水灯为例)

    一.实验目的 1. 掌握AVR单片机开发平台的搭建方法. 2. 掌握GPIO的编程方法. 二.实验内容 1. 验证课堂例题 编译下载运行课堂例题--"LED流水灯"和"按 ...

  8. ARTIX-7 XC7A35T实验项目之 串口发送

    刷题推荐 链接: Verilog刷题 1,实验简介 UART关键参数及时序图 UART通信在使用前需要做多项设置,最常见的设置包括数据位数.波特率大小.奇偶校验类型和停止位数. 数据位(Data bi ...

  9. ARTIX-7 XC7A35T实验项目之 二进制计数器

    刷题推荐 链接: Verilog刷题 1,实验简介 时序逻辑电路分为很多种.本次实验以最常用的计数器为例学习简单的时序逻辑电路设计.此次设计一个二进制计数器,使开发板上的LED1状态每500ms翻转一 ...

最新文章

  1. Codeforces 1036E. Covered Points
  2. mysql各种错误提示码和解决方法
  3. DICOM医学图像处理:Dcmtk与fo-dicom保存文件的不同设计模式之“同步VS异步”+“单线程VS多线程”...
  4. JavaOne 2016——首日亮点
  5. echart 数据视图_关于数据可视化图表的制作,你需要关注的30个小技巧
  6. 真正完美攻略之星月夜~Seven Tales in Spiral(中国同人文字AVG)
  7. GitHub 标星 5w+!Python 新手 100 天学习计划,这次再学不会算我输!
  8. Delphi 关键 重启 注销
  9. Windows安装RabbitMQ集群的几个注意点
  10. 前端系列教程之JS(自认为有用代码)
  11. 怎么把电子书格式转换成word文档
  12. VBA 工作表 worksheet.add 方法
  13. 哪种机械键盘更适合打游戏? 机械键盘5种常用机械轴详细介绍
  14. 2018年实现营收79.17亿元,科大讯飞能否决胜于人工智能时代?
  15. linux画国旗程序,C语言也能画国旗
  16. 微信小程序●云开发部署攻略
  17. Mendix开发介绍实用篇(一)
  18. PDF文件字体嵌入问题
  19. 企业电子邮件系统全局地址簿管理及使用方法介绍
  20. 第二届中国PWA开发者日

热门文章

  1. 记得十年前谷歌大量使用python_关于利用Python玩转百万答题
  2. C# 日期格式化的中的 正斜杠的问题
  3. python斜杠用法_Python中正反斜杠(‘/’和‘\’)的意义与用法
  4. 【LintCode 题解】小米面试算法题:搜索旋转排序数组
  5. Python实现中文转拼音功能
  6. 每日刷题记录 (一)
  7. Excel怎样把相同列数据合并到一行
  8. i7 11700k、i7 11700f和i7 11700KF选哪个
  9. 车规级芯片IC等级及其特点
  10. MAC设置L2TP连接公司内部网络