硬件:Zedboard
软件:Vivado2018.2 + Win10

本文参考了http://blog.chinaaet.com/cuter521/p/35946,原文代码有错误,已更正。

1 设计

功能:PL流水灯
语言:verilog
流程:建立工程->代码编辑->功能仿真->综合、实现->生成Bitstream->烧写进板子,观察现象
功能图:

timer500ms模块:
产生2hz的时钟,为led_ctrl模块提供时钟。

led_ctrl模块:
实现循环移位,在硬件上的体现就是流水灯。输入时钟为2hz,时钟上升沿进行一次移位操作,每个led点亮0.5s。

2 代码

runled_top.v

`timescale 1ns / 1psmodule runled_top(input iClk,input iRst_n,output [7:0] oLed);
wire    clk2hz_sig;timer500ms timer500ms_inst(.iClk100mhz(iClk),.iRst_n(~iRst_n),.oClk2hz(clk2hz_sig)
);led_ctrl led_ctrl_inst(.iClk(clk2hz_sig),.iRst_n(~iRst_n),.oLed(oLed)
);
endmodule

timer500ms.v

`timescale 1ns / 1ps/*
oFreq = iFreq/(2*N)
N = iFreq/(2*oFreq) = 100,000,000/(2*2) = 25,000,000 = 0x17d7840
*/module timer500ms(input   iClk100mhz,input    iRst_n,output   reg oClk2hz  // period = 1/2s);
reg [31:0]  cnt2hz;
always @(posedge iClk100mhz)
beginif(iRst_n==1'b0)beginoClk2hz <= 1'b0;cnt2hz <= 32'b0;endelsebeginif(cnt2hz==32'd25000000)begincnt2hz <= 32'b0;oClk2hz <= ~oClk2hz;end elsebegincnt2hz <= cnt2hz + 1'b1;oClk2hz <= oClk2hz;endend
endendmodule

led_ctrl.v

`timescale 1ns / 1psmodule led_ctrl(input iClk,input iRst_n,output [7:0] oLed);
reg [7:0] led;always @(posedge iClk)
beginif(iRst_n == 1'b0)led <= 8'b1;else//实现循环左移led <= {led[6:0], led[7]};
endassign oLed = led;endmodule

3 流程

3.1 创建工程

vivado2018.2的界面如下所示

选择Create Project,出现如下界面

选Next

输入工程保存目录,点Next

这里选择RTL Project,并且勾选Do not specify sources at this time。这样可以跳过源文件指定步骤,在后续过程中再输入源文件。点Next

在Boards下选择ZedBoard,这样就成功创建了工程

3.2 添加源文件

工程创建后界面如下

点击Add Sources,出现如下界面

选择Add or create design sources,出现如下界面

选择Create File

输入runled_top,然后OK

点Finish,出现如下界面

选择OK,YES

在Sources模块的Design Sources里能看到创建的runled_top.v文件,双击该文件

将内容替换为第二部分的代码,并按照此方法创建timer500ms.v和led_ctrl.v,完成后如下图。vivado能根据代码内调用关系生成文件层级(runled_top.v内调用了timer500ms和led_ctrl模块)。至此,源文件输入完毕。

3.3 RTL行为级仿真

输入代码后,在综合之前,我们可以通过仿真来验证代码逻辑的正确性。
首先应该添加仿真文件,这一步依然应该选择Add Sources

这里要选择Add or create simulation sources,后面过程与添加源文件一模一样,仿真文件代码如下:

`timescale 1ns / 1psmodule simulation1();
reg CLK;
reg RSTn;
wire [7:0] sim_oled;
wire clk2hz_sig;initial
beginCLK = 0;RSTn = 0;#100;RSTn = 1;
endalways
begin#5;CLK = ~CLK;
endtimer500ms timer500ms_inst(.iClk100mhz(CLK),.iRst_n(RSTn),.oClk2hz(clk2hz_sig)
);led_ctrl led_ctrl_inst(.iClk(clk2hz_sig),.iRst_n(RSTn),.oLed(sim_oled)
);endmodule

完成后界面如下

选择SIMULATION的RUN Simulation->Run Behavioral Simulation,界面如下,注意保证红框内的simulation1是选中的状态。

切换到timer500ms.v编辑界面

为更加明显看到timer500ms.v的分频效果,将分频系数调小。在timer500ms.v中将25000000修改为25,并保存

点击Relaunch Simulation

点击Zoom In放大波形

这样就验证了分频效果。
验证完成后将timer500ms.v中的25改回为25000000,并保存

3.4 综合(Synthesis)

综合之前,先添加约束文件,与添加源文件和仿真文件添加方式相同。

约束文件代码如下

#In the following the XDC constraint is matched to the origanal UCF constraint, XDC above, UCF below # Commentedset_property PACKAGE_PIN Y9 [get_ports {iClk}]set_property IOSTANDARD LVCMOS33 [get_ports {iClk}]#NET GCLK          LOC = Y9   | IOSTANDARD=LVCMOS33;  # "GCLK"# Bank 33, Vcco = 3.3V#set_property IOSTANDARD LVCMOS33 [get_ports -filter { IOBANK == 33 } ]set_property PACKAGE_PIN T22 [get_ports {oLed[0]}]set_property IOSTANDARD LVCMOS33 [get_ports {oLed[0]}]#NET LD0           LOC = T22  | IOSTANDARD=LVCMOS33;  # "LD0"set_property PACKAGE_PIN T21 [get_ports {oLed[1]}]set_property IOSTANDARD LVCMOS33 [get_ports {oLed[1]}]#NET LD1           LOC = T21  | IOSTANDARD=LVCMOS33;  # "LD1"set_property PACKAGE_PIN U22 [get_ports {oLed[2]}]set_property IOSTANDARD LVCMOS33 [get_ports {oLed[2]}]#NET LD2           LOC = U22  | IOSTANDARD=LVCMOS33;  # "LD2"set_property PACKAGE_PIN U21 [get_ports {oLed[3]}]set_property IOSTANDARD LVCMOS33 [get_ports {oLed[3]}]#NET LD3           LOC = U21  | IOSTANDARD=LVCMOS33;  # "LD3"set_property PACKAGE_PIN V22 [get_ports {oLed[4]}]set_property IOSTANDARD LVCMOS33 [get_ports {oLed[4]}]#NET LD4           LOC = V22  | IOSTANDARD=LVCMOS33;  # "LD4"set_property IOSTANDARD LVCMOS33 [get_ports {oLed[5]}]set_property PACKAGE_PIN W22 [get_ports {oLed[5]}]#NET LD5           LOC = W22  | IOSTANDARD=LVCMOS33;  # "LD5"set_property PACKAGE_PIN U19 [get_ports {oLed[6]}]set_property IOSTANDARD LVCMOS33 [get_ports {oLed[6]}]#NET LD6           LOC = U19  | IOSTANDARD=LVCMOS33;  # "LD6"set_property IOSTANDARD LVCMOS33 [get_ports {oLed[7]}]set_property PACKAGE_PIN U14 [get_ports {oLed[7]}]#NET LD7           LOC = U14  | IOSTANDARD=LVCMOS33;  # "LD7"# Bank 34, Vcco = Vadj#set_property IOSTANDARD LVCMOS18 [get_ports -filter { IOBANK == 34 } ]set_property IOSTANDARD LVCMOS18 [get_ports {iRst_n}]set_property PACKAGE_PIN P16 [get_ports {iRst_n}]#NET BTNC          LOC = P16  | IOSTANDARD=LVCMOS18;  # "BTNC"


点SYNTHESIS->Run Synthesis,在出现的界面上选OK,然后等待即可。

3.5 实现(Implementation)


可在左下角IMPLEMENTATION选Run Implementation,也可以直接在中间界面选定Run Implementation然后选OK

3.6 生成Bitstream


过程与上一步类似,选择Generate Bitstream

右上角显示当前的状态

3.7 烧写


选Open Hardware Manager

给Zedboard上电,连上JTAG线后点击Open target的Auto Connect

软件成功识别板子后,点击Program device

Bitstream file会自动选择当前工程生成的bit文件,点Program后在板子上即可看见流水灯现象。

ZedBoard+Vivado(一)——纯PL实现流水灯相关推荐

  1. Zedboard学习(三):PL下流水灯实验

    zynq系列FPGA分为PS部分和PL部分. PL: 可编程逻辑 (Progarmmable Logic), 就是FPGA部分. PS: 处理系统 (Processing System) , 就是与F ...

  2. arm ds开发基于iTOP4412开发板的纯汇编LED流水灯

    前言 arm ds软件作为arm公司发布的ADS.DS5软件的延续,具备前两款软件的所有功能.同时将Keil MDK单片机开发软件的功能直接整合到了arm ds软件中.现在arm ds就相当于DS5+ ...

  3. 普中科技51纯代码(流水灯)

    流水灯 1.点亮一个灯 2.一个灯闪烁 3.流水灯 4.灯左右来回流水 5.左右来回不定位平移 6.番外:蜂鸣器 7.流水灯+蜂鸣器 1.点亮一个灯 #include <reg51.h>s ...

  4. pynq-z2 使用PL做流水灯

    一 实验目标 轮流点亮开发板下面的4颗LED灯 二 实验步骤 启动Vivado,点击创建一个新工程,工程名为turn_led 选择RTL工程 选择开发板Boards,在其中选择PYNQ-Z2 点击Ad ...

  5. Vivado入门创建工程之----流水灯

    本文参考米联客提供的教程,对vivad开发过程部分进行总结和记录.笔者使用的版本是vivado 2017.3 step1.1,新建工程 step1.2,点击next step1.3,设置工程名称与路径 ...

  6. 基于verilog流水灯设计

    使用verilog语言实现流水灯设计并进行仿真波形验证如下: 下面是在vivado下仿真截图: 流水灯顶层模块包括分频器和状态机组成 顶层模块如下: module ledwater( input cl ...

  7. 单片机(AT89C51)按钮控制LED灯实现流水灯,闪烁流水灯

    目录 前言 实验要求和目的 实验电路图 实验过程 实验一 实验二 实验三 实验总结 后言 前言 好久没有写单片机系列了,话不多说,直接进入正题吧!本次要讲解和分享的实验是一个比较著名的流水灯实验,但这 ...

  8. 【FPGA】vivado使用(led流水灯实例,附图,详细)

    整理时间:2021-03-08 前言: FPGA型号:XC7Z020-CLG400 vivado版本:2019.1 安装好vivado开发工具,拥有了FPGA开发硬件平台. 本文目录: 1.建立工程 ...

  9. 米联客 ZYNQ/SOC精品教程 S01-CH04 VIVADO创建工程之流水灯

    软件版本:VIVADO2017.4 操作系统:WIN10 64bit 硬件平台:适用米联客 ZYNQ系列开发板 米联客(MSXBO)论坛:www.osrc.cn答疑解惑专栏开通,欢迎大家给我提问!! ...

最新文章

  1. JavaScript - JavaScript通用表单验证函数(实例)
  2. 申请鸿蒙选择应用程序是什么,申请鸿蒙系统有一个应用选择怎么选择呢
  3. 友情链接交换看的不是“真友情”!
  4. ML之FE:基于FE特征工程对RentListingInquries数据集进行预处理并导出为三种格式文件(csv格式/txt格式/libsvm稀疏txt格式)
  5. 趣说游戏AI开发:曼哈顿街角的A*算法
  6. 【Qt】Qt中QJsonObject类
  7. 一条查询SQL 语句是如何执行的?
  8. qt中new与delete使用示例
  9. wpf 点击按钮弹出选择框_WPF-PopupWindow wpf右下角弹出框,通过按钮调用,类似QQ CSharp C#编程 238万源代码下载- www.pudn.com...
  10. 机器学习 | 决策树的理论与实践
  11. 迭代器——STL关键所在
  12. 《玩转Python轻松过二级》配套视频免费观看地址
  13. 如何自动维护全文索引和目录
  14. Python 分析二手房源信息,揭晓土地交易现状
  15. Linux 与 Windows 计算文件夹大小
  16. 从零开始搭建“表情包小程序”
  17. 广东电大计算机绘图试题,2014年电大计算机绘图期末复习试题及答案参考小抄.doc...
  18. MIT牛人解说数学体系
  19. 事件分类及正则表达式
  20. webrtc 带宽估计

热门文章

  1. 杂乱身份证整理之终极大法
  2. PID控制中P、I、D参数的作用是什么?
  3. Android - Adapter 适配器
  4. uniapp 电子印章_初探uni-app框架 踩坑
  5. opencv 的 ROI 和 COI
  6. Docker 在 openSUSE 下的安装、使用
  7. 求解多目标旅行商问题的遗传算法参数研究(2017的ieee)
  8. 此情可待成追忆——九山顶畅游随想曲(九)
  9. JAVA两个表相关联_java实现两张表的关联查询(非数据库语言)
  10. C++:cannot open source file问题