1 FPGA ZYBO Xilinx 按键控制LED灯 key_led

news2024/11/15 13:57:29

视频教程:第11.1讲 按键控制LED灯实验原理讲解_哔哩哔哩_bilibili

约束文件:digilent-xdc/Zybo-Master.xdc at master · Digilent/digilent-xdc (github.com)

原理图:Zybo Z7 - Digilent Reference B

实验任务

使用ZYBO上的PL端按键,分别控制两个PL端的LED,按下不同的按键时, 两个LED显示不同效果:

按键状态LED显示效果
无按键按下两个LED全亮
按下KEY0两个LED交替闪烁
按下KEY1两个LED同时闪烁

不同效果下两个LED灯led[0]和led[1]状态的变化:

无按键按下:led=11,11,11,11,…

按下key[0]: led=10,01,10,01,…

按下key[1]: led=11,00,11,00,…

程序设计

在这里插入图片描述
时钟频率50MHz =》时钟周期20ns

当key按下后每0.5s LED灯变化一次,计数器一个周期累加一次,所以计数器从0累加到25M=2500_0000后归零

key_led.v

module key_led(
    input   sys_clk,
    input   sys_rst_n,
    input   [1:0] key,
    output reg [1:0] led
);

reg [24:0] cnt;
reg led_controller;

always @(posedge sys_clk or negedge sys_rst_n) begin
    if(!sys_rst_n)
        cnt <= 25'd0;
    else if(cnt < 2500_0000)
        cnt <= cnt + 1'b1;
    else 
        cnt <= 25'd0;
end

always @(posedge sys_clk or negedge sys_rst_n) begin
    if(!sys_rst_n)
        led_controller <= 1'b0;
    else if(cnt == 2500_0000)
        led_controller <= ~led_controller; 
end

always @(posedge sys_clk or negedge sys_rst_n) begin
    if(!sys_rst_n)
        led<=2'b11;
    else case (key)
        2'b10: 
            if(led_controller == 1'b0)
                led <= 2'b10;
            else 
                led<= 2'b01;
        2'b01:
            if(led_controller == 1'b0)
                led <= 2'b11;
            else 
                led<= 2'b00;
        default: ;
    endcase 
end
endmodule

testbench: tb_key_led.v

首先定义要输入的信号,然后对其初始化,在initial模块里对时序进行控制

  • 初始时钟为0,复位为0,按键全安
  • 60ns,三个周期后,复位为高电平
  • 40ns,两个周期后,按下按键0, key = 10, led灯交替闪烁
  • 交替闪烁2000ns后,按键全按下,key=11
  • 100ns后,按键1按下,key=01, led灯同时闪烁
  • 同时闪烁2000ns后,按键全按下

例化key_led模块

时钟周期为20ns,所以每10ns取反

`timescale 1ns/1ps

module tb_key_led ();

reg sys_clk;
reg sys_rst_n;

reg [1:0] key;
wire [1:0] led;

initial begin
    sys_clk = 1'b0;
    sys_rst_n = 1'b0;
    key = 2'b11;

    #60
    sys_rst_n = 1'b1;

    #40
    key = 2'b10;

    #2000
    key = 2'b11;

    #100
    key = 2'b01;

    #2000
    key = 2'b11;
end


key_led u_key_led(
    .sys_clk(sys_clk),
    .sys_rst_n(sys_rst_n),

    .key(key),
    .led(led)
);

always #10 sys_clk <= ~sys_clk;
endmodule

ModelSim仿真

改变工作目录:File->Change Directory,添加verilog文件 -> Compile ->Compile All

在这里插入图片描述

开始仿真:Simulate->start simulate,添加设计文件 tb_key_led.v,取消使能优化enable optimization

在这里插入图片描述

添加需要查看波形图的信号:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8vlLol5q-1669973218216)(https://gitee.com/xiongyuqing/PicGo-bed/raw/master/img/image-20221202165245981.png)]

由于每0.5s也就是cnt计数到25M后led变化一次时间太长,改为25后保存,重新编译仿真

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tw6nKjDN-1669973218216)(https://gitee.com/xiongyuqing/PicGo-bed/raw/master/img/image-20221202165744123.png)]

设置运行时间100ms,点击运行

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F7v5kp2A-1669973218216)(https://gitee.com/xiongyuqing/PicGo-bed/raw/master/img/image-20221202165421158.png)]

放缩到合适的尺度[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Itfiq3mI-1669973218216)(https://gitee.com/xiongyuqing/PicGo-bed/raw/master/img/image-20221202170053438.png)]

三周期系统复位,再两周期后 按下按键0:key=10:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8DihJQBn-1669973218216)(https://gitee.com/xiongyuqing/PicGo-bed/raw/master/img/image-20221202170211334.png)]

两个led灯交替闪烁:10,01,10,01

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lrwm2pcF-1669973218217)(https://gitee.com/xiongyuqing/PicGo-bed/raw/master/img/image-20221202170647472.png)]

2100ns后,key变为11

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bZY1xkMZ-1669973218217)(https://gitee.com/xiongyuqing/PicGo-bed/raw/master/img/image-20221202170827119.png)]

2200ns后,按键1被按下,key=01:两个led灯同时闪烁:11,00,11,00

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uSDrVGue-1669973218217)(https://gitee.com/xiongyuqing/PicGo-bed/raw/master/img/image-20221202171003896.png)]

vivado下载验证

添加

  • 设计文件:key_led.v
  • 约束:key_led.xdc
    • 总的约束文件:digilent-xdc/Zybo-Master.xdc at master · Digilent/digilent-xdc (github.com)

修改:

  • 将cnt计数改为25M
  • zybo没有复位按键,将按键3 btn[2] 变为复位按钮
    • 按钮是按下变成高电平有效,不安下是低电平,所以sys_rst_n前面的 ! 要去掉
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zDyrDE4i-1669973218217)(https://gitee.com/xiongyuqing/PicGo-bed/raw/master/img/image-20221202171734633.png)]
module key_led(
    input   sys_clk,
    input   sys_rst_n,
    input   [1:0] key,
    output reg [1:0] led
);

reg [24:0] cnt;
reg led_controller;

always @(posedge sys_clk or negedge sys_rst_n) begin
    if(sys_rst_n)
        cnt <= 25'd0;
    else if(cnt < 2500_0000)
        cnt <= cnt + 1'b1;
    else 
        cnt <= 25'd0;
end

always @(posedge sys_clk or negedge sys_rst_n) begin
    if(sys_rst_n)
        led_controller <= 1'b0;
    else if(cnt == 2500_0000)
        led_controller <= ~led_controller; 
end

always @(posedge sys_clk or negedge sys_rst_n) begin
    if(sys_rst_n)
        led<=2'b11;
    else case (key)
        2'b10: 
            if(led_controller == 1'b0)
                led <= 2'b10;
            else 
                led<= 2'b01;
        2'b01:
            if(led_controller == 1'b0)
                led <= 2'b11;
            else 
                led<= 2'b00;
        default: ;
    endcase 
end
endmodule

取消需要接口的注释,并更改端口名称与程序对应:

## This file is a general .xdc for the ZYBO Rev B board
## To use it in a project:
## - uncomment the lines corresponding to used pins
## - rename the used signals according to the project


##Clock signal
set_property -dict { PACKAGE_PIN L16   IOSTANDARD LVCMOS33 } [get_ports { sys_clk }]; #IO_L11P_T1_SRCC_35 Sch=sysclk
#create_clock -add -name sys_clk_pin -period 8.00 -waveform {0 4} [get_ports { clk }];


##Switches
#set_property -dict { PACKAGE_PIN G15   IOSTANDARD LVCMOS33 } [get_ports { sw[0] }]; #IO_L19N_T3_VREF_35 Sch=SW0
#set_property -dict { PACKAGE_PIN P15   IOSTANDARD LVCMOS33 } [get_ports { sw[1] }];  #IO_L24P_T3_34 Sch=SW1
#set_property -dict { PACKAGE_PIN W13   IOSTANDARD LVCMOS33 } [get_ports { sw[2] }]; #IO_L4N_T0_34 Sch=SW2
#set_property -dict { PACKAGE_PIN T16   IOSTANDARD LVCMOS33 } [get_ports { sw[3] }]; #IO_L9P_T1_DQS_34 Sch=SW3


##Buttons
set_property -dict { PACKAGE_PIN R18   IOSTANDARD LVCMOS33 } [get_ports { key[0] }]; #IO_L20N_T3_34 Sch=BTN0
set_property -dict { PACKAGE_PIN P16   IOSTANDARD LVCMOS33 } [get_ports { key[1] }]; #IO_L24N_T3_34 Sch=BTN1
set_property -dict { PACKAGE_PIN V16   IOSTANDARD LVCMOS33 } [get_ports { sys_rst_n }]; #IO_L18P_T2_34 Sch=BTN2
#set_property -dict { PACKAGE_PIN Y16   IOSTANDARD LVCMOS33 } [get_ports { btn[3] }]; #IO_L7P_T1_34 Sch=BTN3


##LEDs
set_property -dict { PACKAGE_PIN M14   IOSTANDARD LVCMOS33 } [get_ports { led[0] }]; #IO_L23P_T3_35 Sch=LED0
set_property -dict { PACKAGE_PIN M15   IOSTANDARD LVCMOS33 } [get_ports { led[1] }]; #IO_L23N_T3_35 Sch=LED1
#set_property -dict { PACKAGE_PIN G14   IOSTANDARD LVCMOS33 } [get_ports { led[2] }]; #IO_0_35=Sch=LED2
#set_property -dict { PACKAGE_PIN D18   IOSTANDARD LVCMOS33 } [get_ports { led[3] }]; #IO_L3N_T0_DQS_AD1N_35 Sch=LED3

生成bitstream

连接开发板->Open Hardware Manager->Open Target->Program Device:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ph26lhTD-1669973218217)(https://gitee.com/xiongyuqing/PicGo-bed/raw/master/img/image-20221202172334166.png)]

在开发板上测试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/56163.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AD域控服务器部署

AD服务器部署 一、主域控的部署&#xff08;主域控名2012DC1&#xff0c;ip192.168.15.1&#xff09;&#xff1a; 1、添加角色和功能向导 2、基于角色或基于功能的安装 3、从服务器池中选择服务器 4、选择Active Directory域服务 5、默认&#xff0c;下一步 6、默认&#xff0…

区间信息维护与查询【分块】 - 原理 分块详解

区间信息维护与查询【分块】 - 原理 分块详解 树状数组和线段树虽然非常方便&#xff0c;但维护的信息必须满足信息合并特性&#xff08;如区间可加、可减&#xff09;&#xff0c;若不满足此特性&#xff0c;则不可以使用树状数组和线段树。分块算法可以维护一些线段树维护不…

简单入门编写html登录界面

<!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>你好呀&#xff0c;登录吧</title><style&…

MySQL锁,锁的到底是什么

作者&#xff1a;蝉沐风 博客站点&#xff1a;https://www.chanmufeng.com 公众号&#xff1a;蝉沐风的码场 本文目录1. 资源的竞争方式2. 读—写/写—读下的问题2.1. 幻读2.2. 不可重复读2.3. 脏读2.4. 锁与MVCC的关系2.5. 锁与事务的关系3. 写—写情况4. 锁的粒度5. 锁的基本…

[附源码]计算机毕业设计JAVA校园失物招领管理系统

[附源码]计算机毕业设计JAVA校园失物招领管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM my…

[附源码]计算机毕业设计JAVA新闻发布和评论管理系统

[附源码]计算机毕业设计JAVA新闻发布和评论管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM …

ELK日志平台搭建

平时查看错误日志&#xff0c;都是登录到服务器&#xff0c;然后用命令进行查看&#xff0c;不是很好的定位问题&#xff0c;决定搭建一个ELK的日志查看平台。ELK是Elasticsearch、Logstash、Kibana三个的简称。Elasticsearch是一个分布式的实时搜索引擎&#xff0c;Logstash是…

室内定位:5G定位开启高精度定位新纪元

“5G定位”作为一个新的方向将会对于解决室外到室内的“最后一公里”高精度定位问题发挥更强的赋能和带动作用。 室内定位作为室外定位的技术延伸&#xff0c;弥补了传统定位技术的不足&#xff0c;而5G定位正推动信息社会数字化步入快车道的大趋势&#xff0c;赋能千行百业。 …

DNS查询流程

&#x1f468;‍&#x1f4bb;个人主页&#xff1a; 才疏学浅的木子 &#x1f647;‍♂️ 本人也在学习阶段如若发现问题&#xff0c;请告知非常感谢 &#x1f647;‍♂️ &#x1f4d2; 本文来自专栏&#xff1a; 计算机网络 ❤️ 支持我&#xff1a;&#x1f44d;点赞 &#…

精选20个爆火的Python实战项目(含源码),直接拿走不谢

今天给大家介绍20个非常实用的Python项目&#xff0c;帮助大家更好的学习Python。 ① 猜字游戏 在这个游戏中&#xff0c;你必须一个字母一个字母的猜出秘密单词。 如果你猜错了一个字母&#xff0c;你将丢掉一条命。 正如游戏名那样&#xff0c;你需要仔细选择字母&#x…

Vue笔记_03组件_mavonEditor(基于vue)

目录下载mavonEditor导入并注册mavonEditor组件[1] 全局注册[2]局部注册使用mavonEditor属性修改举例说明1-不展示预览分屏工具栏修改举例说明-根据配置显示工具栏编辑器插槽举例说明-自定义工具栏按钮函数监听下载mavonEditor 使用命令 npm install mavon-editor --s 进行下载…

[附源码]Python计算机毕业设计SSM抗包虫病药物查询与推荐系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

[附源码]计算机毕业设计预约挂号appSpringboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【Flink】flink 状态恢复 because the operator is not available in the new program

1.概述 感谢您抽出 一个flink环境做状态恢复报错:because the operator is not available in the new program。详细错误如下 2.源码分析 2.1 restoreSavepoint restoreSavepoint 是从给定的检查点进行恢复。主要做了如下步骤 检测恢复路径是否存在从外部存储获取 Checkpoi…

【Linux】常用命令

文章目录Linux 常用命令目录结构命令结构目录操作文件操作用户操作通配符Linux 常用命令 目录结构 Windows 以存储介质为主&#xff0c;以盘符&#xff08;C盘D盘&#xff09;分区实现文件管理。Linux 以树形目录为主构建系统&#xff0c;大部分目录结构已规定。Linux中一切皆…

将本地项目添加到github中的其他办法

目录 1.在github上创建一个新仓库 2.git clone 3.将本地的文件夹里面的所有内容拷贝到新克隆下来的文件夹中 4.打开克隆下来的文件 5.git add . 6.git commit -am “注释” 7.git push -u origin master 1.在github上创建一个新仓库 2.git clone 本地克隆刚才创建的项目 3.…

C++数据结构X篇_04_单向链表框架搭建、实现和测试(链表的定义,常用操作的实现等)

接上篇C数据结构X篇_03_线性表的顺序存储和动态数组案例&#xff08;基本概念&#xff1b;操作要点&#xff1b;顺序存储算法&#xff1b;动态数组案例实现&#xff09;&#xff0c;本篇将会开始介绍线性表的链式存储。 参考博文&#xff1a;最详细的C单向链表实现&#xff0c;…

细胞衰老β-半乳糖苷酶染色试剂盒丨艾美捷解决方案

细胞衰老&#xff08;Cell senescence&#xff09;是细胞控制其生长潜能的保障机制&#xff0c;一般含义是复制衰老&#xff08;Replicative senescence&#xff0c;RS&#xff09;&#xff0c;指正常细胞经过有限次数的分裂后&#xff0c;停止分裂&#xff0c;此时细胞虽然是存…

DSP篇--C6678功能调试系列之EMIF、GPIO调试

目录 1、EMIF调试 2、GPIO调试 前言不用多说&#xff0c;详见DSP篇--C6678功能调试系列之DDR3调试_nanke_yh的博客-CSDN博客 1、EMIF调试 EMIF主要是提供挂载的NOR FLASH/NAND FLASH/**RAM上的时序。 EMIF16 can operate in the following modes: • WE Strobe Mode • Sele…

【元胞自动机】元胞自动机求解城市小区开放对周边道路通行影响研究【含Matlab源码 233期】

⛄一、元胞自动机简介 1 元胞自动机发展历程 最初的元胞自动机是由冯 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视. 1970 年, 剑桥大学的约翰 何顿 康威设计了一个电脑游戏 “生命游戏” 后, 元胞自动机才吸引了科学家们的注意. 1983 年…