---
title: 基于ZYNQ ECO开发板的呼吸灯实验
url: "https://www.fpgalearn.com/197.html"
kind: article
id: 197
excerpt: 一、简介 呼吸灯常见于我们的手机指示灯上，本实验将会教会大家利用FPGA构建一个呼吸灯。 二、需要的工具与知识 我们的开发工具运用的Vivado 2020.1 …
published_at: 2021-12-20
author: shaonianxue_guojp
word_count: 2080
source: "https://www.fpgalearn.com"
---

# 基于ZYNQ ECO开发板的呼吸灯实验

> 一、简介 呼吸灯常见于我们的手机指示灯上，本实验将会教会大家利用FPGA构建一个呼吸灯。 二、需要的工具与知识 我们的开发工具运用的Vivado 2020.1 …

> 一、简介 呼吸灯常见于我们的手机指示灯上，本实验将会教会大家利用FPGA构建一个呼吸灯。 二、需要的工具与知识 我们的开发工具运用的Vivado 2020.1 …

## 一、简介
呼吸灯常见于我们的手机指示灯上，本实验将会教会大家利用FPGA构建一个呼吸灯。
## 二、需要的工具与知识
我们的开发工具运用的Vivado 2020.1 硬件平台选择的是ZYNQ ECO开发板，你需要了解一下PWM波。
呼吸灯的原理是当你不断的增加PWM波的占空比就可以让灯不断的变亮，当降低占空比的时候灯就会逐渐变暗。
## 三、Vivado的使用
创建项目以及芯片选型
![图片](https://admin.shaonianxue.cn/wp-content/uploads/2021/12/1640012266-b4f6b3b34d79fd6.jpg)
![图片](https://admin.shaonianxue.cn/wp-content/uploads/2021/12/1640012267-f33f6d705e61258.jpg)
![图片](https://admin.shaonianxue.cn/wp-content/uploads/2021/12/1640012269-d99cdb2a8c33a44.jpg)
![图片](https://admin.shaonianxue.cn/wp-content/uploads/2021/12/1640012270-4b881b9703df564.jpg)
![图片](https://admin.shaonianxue.cn/wp-content/uploads/2021/12/1640012271-8493409be7958c7.jpg)
![图片](https://admin.shaonianxue.cn/wp-content/uploads/2021/12/1640012272-38470f68b6876f7.jpg)
![图片](https://admin.shaonianxue.cn/wp-content/uploads/2021/12/1640012273-3b705d1525cb4ca.jpg)
创建源文件（.v文件）
![图片](https://admin.shaonianxue.cn/wp-content/uploads/2021/12/1640012275-e15aa8237c0fce9.jpg)
![图片](https://admin.shaonianxue.cn/wp-content/uploads/2021/12/1640012276-b32841c3fddb914.jpg)
![图片](https://admin.shaonianxue.cn/wp-content/uploads/2021/12/1640012278-97191341d0b083a.jpg)
![图片](https://admin.shaonianxue.cn/wp-content/uploads/2021/12/1640012279-01a7d4adcc4a02a.jpg)
![图片](https://admin.shaonianxue.cn/wp-content/uploads/2021/12/1640012279-1b5429e53f7c67f.jpg)
![图片](https://admin.shaonianxue.cn/wp-content/uploads/2021/12/1640012281-3444ceff794fd92.jpg)
![图片](https://admin.shaonianxue.cn/wp-content/uploads/2021/12/1640012281-d6441f03803a1e8.jpg)
![图片](https://admin.shaonianxue.cn/wp-content/uploads/2021/12/1640014453-2339a539b74da32.jpg)
### 四、呼吸灯代码
如果你是新手可以复制以下代码替换掉原有.v文件的内容
```
`timescale 1ns / 1ps
module PWM_live_led(
input sysclk ,
input rst_n ,
output reg led
);
reg [31:0] cnt;
reg [28:0] cnt_1000us;
reg [28:0] cnt_1000ms;
reg cnt_s;
always@(posedge sysclk or negedge rst_n)begin
if(!rst_n)
cnt=50-1)
cnt<=0;
else
cnt<=cnt+1;
end
always@(posedge sysclk or negedge rst_n)begin
if(!rst_n)
cnt_1000us<=0;
else if(cnt==50-1&&cnt_1000us==1000-1)
cnt_1000us<=0;
else if(cnt==50-1)
cnt_1000us<=cnt_1000us+1;
else
cnt_1000us<=cnt_1000us;
end
always@(posedge sysclk or negedge rst_n)begin
if(!rst_n)
cnt_1000ms<=0;
else if(cnt==50-1&&cnt_1000us==1000-1&&cnt_1000ms==1000-1)
cnt_1000ms<=0;
else if(cnt==50-1&&cnt_1000us==1000-1)
cnt_1000ms<=cnt_1000ms+1;
else
cnt_1000ms<=cnt_1000ms;
end
always@(posedge sysclk or negedge rst_n)begin
if(!rst_n)
cnt_s<=0;
else if(cnt==50-1&&cnt_1000us==1000-1&&cnt_1000ms==1000-1)
cnt_s<=cnt_s+1;
else
cnt_s<=cnt_s;
end
always@(posedge sysclk or negedge rst_n)begin
if(!rst_n)
led<=0;
else if(cnt_s==0)begin
if(cnt_1000us<=cnt_1000ms)
led<=1;
else
led<=0;
end
else begin
if(cnt_1000us<=cnt_1000ms)
led<=0;
else
led<=1;
end
end
endmodule
```
五、添加管脚约束
![图片](https://admin.shaonianxue.cn/wp-content/uploads/2021/12/1640014839-7c6462a745318b3.jpg)
![图片](https://admin.shaonianxue.cn/wp-content/uploads/2021/12/1640014840-4d171d4a8500ad6.jpg)
![图片](https://admin.shaonianxue.cn/wp-content/uploads/2021/12/1640014843-1f6ac6b3fa3d98b.jpg)
![图片](https://admin.shaonianxue.cn/wp-content/uploads/2021/12/1640014841-b2043c424491db1.jpg)
![图片](https://admin.shaonianxue.cn/wp-content/uploads/2021/12/1640014983-ae9cf082786393f.jpg)
### 六、约束文件代码
```
set_property -dict { PACKAGE_PIN K17 IOSTANDARD LVCMOS33 } [get_ports { sysclk }];
set_property -dict { PACKAGE_PIN T12 IOSTANDARD LVCMOS33 } [get_ports { led }];
set_property -dict { PACKAGE_PIN M20 IOSTANDARD LVCMOS33 } [get_ports { rst_n }];
```
#### 七、生成bitstream （比特流）
![图片](https://admin.shaonianxue.cn/wp-content/uploads/2021/12/1640140637-c24913ef16b7326.jpg)
![图片](https://admin.shaonianxue.cn/wp-content/uploads/2021/12/1640140639-b33b42990833af9.jpg)
![图片](https://admin.shaonianxue.cn/wp-content/uploads/2021/12/1640140640-fb00e773aff8c47.jpg)
![图片](https://admin.shaonianxue.cn/wp-content/uploads/2021/12/1640142362-5cb5f9cbb3728fe.jpg)
![图片](https://admin.shaonianxue.cn/wp-content/uploads/2021/12/1640140641-f0ebc07c1a9330f.jpg)
![图片](https://admin.shaonianxue.cn/wp-content/uploads/2021/12/1640140628-0b6455bf976baf6.jpg)
![图片](https://admin.shaonianxue.cn/wp-content/uploads/2021/12/1640140642-df6dd6a51fce47b.jpg)
![图片](https://admin.shaonianxue.cn/wp-content/uploads/2021/12/1640140644-d9d9e6a671caf6d.jpg)
现在你就能在ECO板上看见一颗正在“呼吸”的LED。
其实呼吸灯有很多写法，这里笔者提供了另一种仅9行就实现功能的呼吸灯代码，感兴趣的同学可以登录查看！
```
module PWM_live_led(
input sysclk,
output led
);
reg [27:0] cnt;
always@(posedge sysclk)
cnt=cnt[16:7]?1'b1:1'b0):(cnt[26:17]>=cnt[16:7]?1'b0:1'b1);
endmodule

约束文件

set_property -dict { PACKAGE_PIN K17 IOSTANDARD LVCMOS33 } [get_ports { sysclk }];
set_property -dict { PACKAGE_PIN T12 IOSTANDARD LVCMOS33 } [get_ports { led }];
```
