Vivado初体验LED工程 1

简介: Vivado初体验LED工程

前言

本节我们要做的是熟练使用 Vivado 创建工程并实现对 LED 灯控制,每秒钟控制开发板上的 LED 灯翻转一次,实现亮、灭、亮、灭的控制。会控制 LED 灯,其它外设也慢慢就会了。


一、PL 和 PS

在FPGA中

  • PS:处理系统 (Processing System) :就是与 FPGA 无关的 ARM 的 SOC 的部分。
  • PL:可编程逻辑 (Progarmmable Logic): 就是 FPGA 部分。之所以叫 PL,而不是叫 FPGA,用英文简写可能便于理解区分,或者显得比较专业吧。

对于 ZYNQ,就是两大功能块,PS 部分和 PL 部分, ARM 的 SOC 部分,和 FPGA 部分。我们可以通过调用 IP 核,系统会使用 AXI(Advanced eXtensible Interface)接口将 IP 与处理器连接,也就是实现 PL 与 PS 互联。

我们就是要实现基于 PL 的点灯实验。

二、LED 硬件介绍

1、开发板的 PL 部分连接了 1 个红色的用户 LED 灯。这 1 个灯完全由 PL 控制。

2、我们可以根据原理图的连线关系确定 LED 和 PL 管脚的绑定关系。

LED -> R19

3、原理图中以 PS_MIO 开头的 IO 都是 PS 端 IO,不需要绑定,也不能绑定。

三、创建 Vivado 工程

1、启动 Vivado,在 Vivado 开发环境里点击 “Create New Project”,创建一个新的工程

2、弹出一个建立新工程的向导,点击 “Next”

3、在弹出的对话框中输入工程名和工程存放的目录,我们这里取一个 led 的工程名。需要注意工程路径 “Project location” 不能有中文、空格,路径名称也不能太长。点击 next

4、在工程类型中选择 “RTL Project”

5、目标语言 “Target language” 选择 “Verilog”,虽然选择 Verilog,但 VHDL 也可以使用,支持多语言混合编程。

6、点击 “Next”,不添加任何文件

7、在 “Default Part” 选项中,器件家族 “Family” 选择 “Zynq-7000”,封装类型 “Package” 选择 “clg400”,减少我们选择范围。AC7010 在下拉列表中选择 “xc7z010clg400-1”,AC7020 在下拉列表中选择 “xc7z020clg400-2”“-2” 表示速率等级,数字越大,性能越好,速率高的芯片向下兼容速率低的芯片。

8、点击 “Finish” 就可以完成以后名为 “led” 工程的创建。

9、Vivado 软件界面

四、创建 Verilog HDL 文件

1、点击 Project Manager 下的 Add Sources 图标(或者使用快捷键 Alt+A)

2、选择添加或创建设计源文件 “Add or create design sources”,点击 “Next”

3、选择创建文件 “Create File”

4、文件名 “File name” 设置为 “led”,点击 “OK”

5、点击 “Finish”,完成 “led.v” 文件添加

6、在弹出的模块定义 “Define Module” 中可以指定 “led.v” 文件的模块名称 “Module name”,这里默认不变为 “led”,还可以指定一些端口,这里暂时不指定,点击 “OK”

7、在弹出的对话框中选择 “Yes”

8、双击 “led.v” 可以打开文件,然后编辑

9、编写 “led.v”,这里定义了一个 32 位的寄存器 timer,用于循环计数 0~49999999(1 秒钟),计数到 49999999(1 秒)的时候,寄存器 timer 变为 0,并翻转一个 LED。这样原来 LED 是灭的话,就会点亮,如果原来 LED 为亮的话,就会熄灭。编写好后的代码如下:

`timescale 1ns / 1ps
module led(
    input sys_clk,
    input rst_n,
    output reg  led
    );
reg[31:0] timer_cnt;
always@(posedge sys_clk or negedge rst_n)
begin
  if(~rst_n) begin
        led <= 1'b0;
        timer_cnt <= 32'd0;
    end
    else if(timer_cnt >= 32'd49_999_999)
    begin
        led <= ~led;
        timer_cnt <= 32'd0;
    end
    else
    begin
        led <= led;
        timer_cnt <= timer_cnt + 32'd1;
    end
end
endmodule

目录
相关文章
|
安全 Linux 网络安全
Vivado 2017.04版本安装教程
Vivado 2017.04版本安装教程
1265 0
|
Go 芯片 异构计算
Vivado初体验LED工程 3
Vivado初体验LED工程
213 0
|
9月前
|
存储 编译器 C语言
【C语言】指针大小知多少 ?一场探寻C语言深处的冒险 !
在C语言中,指针的大小(即指针变量占用的内存大小)是由计算机的体系结构(例如32位还是64位)和编译器决定的。
1064 9
|
安全 网络安全 网络虚拟化
IPSec——如何快速搭建IPSec服务
IPSec——如何快速搭建IPSec服务
968 0
|
自然语言处理 Linux 芯片
实践经验分享:以太网MAC和PHY层问题的解决方案
实践经验分享:以太网MAC和PHY层问题的解决方案
|
异构计算
Vivado初体验LED工程 2
Vivado初体验LED工程
975 0
|
异构计算 内存技术
FPGA进阶(1):基于SPI协议的Flash驱动控制(二)
FPGA进阶(1):基于SPI协议的Flash驱动控制
165 0
|
开发工具 芯片 Perl
【ZYNQ】裸机 PS + PL 双网口实现之 ZYNQ 配置
【ZYNQ】裸机 PS + PL 双网口实现之 ZYNQ 配置
2710 0
|
C++ 芯片 异构计算
【ZYNQ】教你用 Vivado HLS 快速设计一个 IP
【ZYNQ】教你用 Vivado HLS 快速设计一个 IP
342 0