【【萌新的FPGA学习之按键控制LED实验】】

按键控制LED实验

在写这篇文章之前我必须对我的错误表示深刻的道歉
因为我之前的文章自己也是边看边学给大家带来了大的困扰
抱歉抱歉
我们这里讲述一下综合和仿真的关系
其实我们更多的是应该关注仿真下得到的波形情况 然后分析
对于综合,综合的最大的目的还是看功耗,面积使用效率等问题 。而对于网表 我以前看的太重要了 该该放下了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本节实验任务是使用底板上的 PL_KEY0 和 PL_KEY1 按键来控制底板上的 PL_LED0 和 PL_LED1 两
个 LED 闪烁。没有按键被按下时,两个 LED 保持常灭;如果按键 PL_KEY0 被按下,则两个 LED 交替闪
烁;如果按键 PL_KEY1 被按下,则两个 LED 同时闪烁。
在这里插入图片描述
在这里插入图片描述

根据上面的流水灯的案例我们知道当我们给灯的输出口高电平时点亮LED 0 就是灭

这次实验我们使用的是当我们按下按键的时候才会进行模式的各种变化 虽然我还没有往下品读 但是我大胆的猜测应该不会在这么靠前的地方就讲述按键消抖的原理吧 毕竟按键消抖挺麻烦的 所以这里的设计只是长按
我们在此处设计的方向是 按键设置为低电平有效,好处自己想
而对于灯的控制,我们设置为1为亮 0为灭
长按 KEY0 按键时,key 信号值为 2’b10,此时需要根据 LED 状态控制信号(led_flag)来判断 LED 灯
的状态。led_flag 为低电平时,给 LED 灯信号(led)赋值 2’b01,表示 LED0 灯亮,LED1 灯灭;led_flag 为
高电平时给 LED 灯赋值 2’b10,表示 LED0 灯灭,LED1 灯亮。长按 KEY0 按键,随着 led_flag 信号的翻转,
LED 在 2’b01 与 2’b10 之间交替变化,实物观察的现象就是两个 LED 灯交替闪烁了。
长按 KEY1 按键时,key 信号值为 2’b01,此时需要根据 LED 状态控制信号(led_flag)来判断 LED 灯
的状态。led_flag 为低电平时,给 LED 灯信号(led)赋值 2’b11,表示 LED0 与 LED1 都亮灯;led_flag 为
高电平时给 LED 灯赋值 2’b00,表示 LED0 与 LED1 都灭灯。长按 KEY1 按键,随着 led_flag 信号的翻转,
LED 在 2’b11 与 2’b00 之间交替变化,实物观察的现象就是两个 LED 灯同时闪烁了。
因为对于整个时序的变化其实只有两种,相互交错的跳跃 所以在此处我们引入了一个局内的变量用来控制这两种不同的状态

下面讲述一下代码的基本逻辑
对于整个逻辑思考能力很有帮助 因为电路是并行结构
我们观察可以将电路剖析成3部分
第一部分 因为我们要用系统时钟
所以我们设置一个随着时间而动的计数器 计数25000000次 正好是0.5s
然后我们再根据我们的功能
第二段
因为要求我们在摁下后功能持续变化 那么控制单元 就设置随着计数器的变化而变化
接下来第三段
在按键key 下case if(led_flag)就行
下面是代码详解

module key_led(input sys_clk , //系统时钟input sys_rst_n , //系统复位,低电平有效input [1:0] key , //按键
output reg [1:0] led //LED 灯
);//parameter defineparameter CNT_MAX = 25'd2500_0000; //LED 灯闪烁频率//reg definereg [24:0] cnt; //计数器reg led_flag; //LED 控制信号//*****************************************************//** main code//*****************************************************//计数器计时 0.5salways @(posedge sys_clk or negedge sys_rst_n) beginif(!sys_rst_n)cnt <= 25'd0;else if(cnt < (CNT_MAX - 25'd1))cnt <= cnt + 25'd1;elsecnt <= 25'd0;end//每隔 500ms 就更改 LED 的闪烁状态always @ (posedge sys_clk or negedge sys_rst_n) beginif(!sys_rst_n)led_flag <= 1'b0;else if(cnt == (CNT_MAX - 25'd1))led_flag <= ~led_flag;end//根据按键的状态以及 LED 的闪烁状态来赋值 LEDalways @ (posedge sys_clk or negedge sys_rst_n) beginif(!sys_rst_n)led <= 2'b00;else case(key)2'b10 : //如果按键 0 被按下,则两个 LED 交替闪烁if(led_flag == 1'b0)
led <= 2'b01;
else
led <= 2'b10;2'b01 : //如果按键 1 被按下,则两个 LED 同时亮灭交替if(led_flag == 1'b0)led <= 2'b11;elseled <= 2'b00;2'b11 : //如果两个按键都未被按下,则两个 LED 都保持常灭
led <= 2'b00;default: ;endcaseendendmodule

下面讲述的是testbench

 `timescale 1ns / 1ns //仿真单位/仿真精度module tb_key_led();//parameter defineparameter CLK_PERIOD = 20; //时钟周期 20ns//reg definereg sys_clk;reg sys_rst_n;reg [1:0] key;//wire define
wire [1:0] led;
//信号初始化initial beginsys_clk <= 1'b0;sys_rst_n <= 1'b0;key <= 2'b11;#200sys_rst_n <= 1'b1;//key 信号变化#200key <= 2'b11; //两个 PL 按键都未被按下#1000key <= 2'b10; //按下按键 0#2000key <= 2'b11; //两个 PL 按键都未被按下#1000key <= 2'b01; //按下按键 1end//产生时钟always #(CLK_PERIOD/2) sys_clk = ~sys_clk;//例化待测设计key_led u_key_led(.sys_clk (sys_clk),.sys_rst_n (sys_rst_n),.key (key),.led (led));endmodule

评价是很简单

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

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

相关文章

leetcode:2446. 判断两个事件是否存在冲突(python3解法)

难度&#xff1a;简单 给你两个字符串数组 event1 和 event2 &#xff0c;表示发生在同一天的两个闭区间时间段事件&#xff0c;其中&#xff1a; event1 [startTime1, endTime1] 且event2 [startTime2, endTime2] 事件的时间为有效的 24 小时制且按 HH:MM 格式给出。 当两个…

网站接入公网并配置域名访问【详细教程】

网站接入公网并配置域名访问【详细教程】 安装Nginx上传网页文件配置Nginx腾讯云配置域名映射接入公网备案流程 本教程将以腾讯云服务器和腾讯云域名为例&#xff0c;介绍如何快速将网站接入公网并配置域名访问。我们将使用xshell工具进行操作&#xff0c;并涵盖安装nginx、上传…

Python项目Flask ipv6双栈支持改造

一、背景 Flask 是一个微型的(轻量)使用Python 语言开发的 WSGI Web 框架(一组库和模块),基于Werkzeug WSGI工具箱/库和Jinja2 模板引擎,当然,Python的WEB框架还有:Django、Tornado、Webpy,这暂且不提。 Flask使用BSD授权。 Flask也被称为microframework(微框架),F…

Windows安装Docker Desktop并配置镜像、修改内存占用大小

启用Hyper-V Win S 搜索控制面板 安装WSL2 第一种方法&#xff08;推荐&#xff09; 以管理员运行命令提示符&#xff0c;然后重启Docker Desktop wsl --updatewsl --set-default-version 2第2种方法去微软官网下载WSL2并安装 《微软官网下载WSL2》 配置WSL2最大内…

Linux三大搜索指令的区别

find&#xff1a;可以在指定的路径下进行文件的搜索 —— 真的在磁盘文件中查找 例如find /usr/bin/ -name ls which 可以在指令路径下&#xff0c;/usr/bin,搜索指令文件 例如&#xff1a;which ls whereis:在系统特定的路径下查找&#xff0c;既可以找到可执行程序&#xff…

Kafka的消息传递保证和一致性

前言 通过前面的文章&#xff0c;相信大家对Kafka有了一定的了解了&#xff0c;那接下来问题就来了&#xff0c;Kafka既然作为一个分布式的消息队列系统&#xff0c;那它会不会出现消息丢失或者重复消费的情况呢&#xff1f;今天咱们就来一探。 实现机制 Kafka采用了一系列机…

pycharm 中package, directory, sources root, resources root的区别

【遇到的问题】 导入yolov5中有utils文件&#xff0c;自己的代码中也有utils文件&#xff0c;使得yolov5中的这部分引用出错了。 【解决方案】 单独建立detection文件夹&#xff0c;把检测相关的都放在这里&#xff0c;yolov5是github上拉取的源码&#xff0c;发现yolov5中fr…

解决模型半透明时看到内部结构的问题

大家好&#xff0c;我是阿赵。   之前在做钢铁侠线框效果的时候&#xff0c;说到过一种技术&#xff0c;这里单独拿出来再说明一下。   我们经常要做一些模型半透明效果&#xff0c;比如这个钢铁侠的模型&#xff0c;我做了一个Rim边缘光的效果&#xff0c;边缘的地方亮一点…

自定义类型详解(上)

结构体 1 结构体的声明 1.1 结构的基础知识 结构是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 1.2 结构的声明 struct tag//struct是结构体的标志&#xff0c;tag是标签;名字。 {member-list;//成员变量 }variable-list;//变量列…

【AI语言模型】阿里推出音视频转文字引擎

一、前言 阿里的音视频转文字引擎可以正式使用&#xff0c;用户可体验所有AI功能&#xff0c;含全文概要、章节速览、发言总结等高阶AI功能。通过阿里云主账号登录&#xff0c;可享受以下权益&#xff1a; 每日登录&#xff0c;自动获得2小时转写时长&#xff1b; 每邀请1名好…

企业架构LNMP学习笔记53

PHP扩展安装&#xff1a; server01和server03上安装redis扩展&#xff1a; 解压编译安装&#xff1a; shell > tar xvf redis-4.3.0.tgz shell > cd redis-4.3.0 shell > phpize shell > ./configure && make && make install 配置文件php.ini&…

华为云云耀云服务器L实例评测|轻量级应用服务器对决:基于 fio 深度测评华为云云耀云服务器L实例的磁盘性能

本文收录在专栏&#xff1a;#云计算入门与实践 - 华为云 专栏中&#xff0c;本系列博文还在更新中 相关华为云云耀云服务器L实例评测文章列表如下&#xff1a; 华为云云耀云服务器L实例评测 | 从零开始&#xff1a;云耀云服务器L实例的全面使用解析指南华为云云耀云服务器L实…

Flask数据库之SQLAlchemy--介绍--链接数据库

目录 SQLAlchemy介绍 SQLAlchemy连接数据库 SQLAlchemy介绍 数据库是一个网站的基础&#xff01;&#xff01;&#xff01; 比如MySQL、MongoDB、SQLite、PostgreSQL等&#xff0c;这里我们以MySQL为例进行讲解。 SQLAlchemy是一个ORM框架 对象关系映射&#xff08;英语&…

GoAccess实时分析Nginx日志

GoAccess 是一个基于终端的实时 Web 日志分析仪。用 C 语言编写&#xff0c;它是快速&#xff0c;互动的&#xff0c;并以优雅而直观的方式显示日志。它提供了各种 Web 日志文件的支持&#xff0c;包括 Apache&#xff0c;Nginx&#xff0c;Caddy&#xff0c;Amazon S3 和 Clou…

postman-pre-request-scripts使用

一、场景 二、定义模拟接口 using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using SaaS.Framework.DataTransfer; using System.Threading.Tasks;namespace SaaS.KDemo.Api.Controllers {[Route("api/[co…

Ubuntu上线一个JAVA环境微服务架构的系统

项目介绍 项目背景: 已经有一套系统,迁移部署到新服务器,并使用不同数据,相同框架,提供对应业务服务 单机测试,从裸机-系统安装-软件架构-部署-数据迁移-发版-上线,整体流程与思路分享,包含后端、数据,测试、网络、运维等相关事务。 项目目的: 部署并迁移系统,…

【QT】Qt的随身笔记(持续更新...)

目录 Qt 获取当前电脑桌面的路径Qt 获取当前程序运行路径Qt 创建新的文本文件txt&#xff0c;并写入内容如何向QPlainTextEdit 写入内容QTimerQMessageBox的使用QLatin1StringQLayoutC在c头文件中写#include类的头文件与直接写class加类名有何区别mutable关键字前向声明 QFontQ…

【数据结构】优先级队列(堆)

文章目录 &#x1f490;1. 优先级队列1.1 概念 &#x1f490;2.堆的概念及存储方式2.1 什么是堆2.2 为什么要用完全二叉树描述堆呢&#xff1f;2.3 为什么说堆是在完全二叉树的基础上进行的调整&#xff1f;2.4 使用数组还原完全二叉树 &#x1f490;3. 堆的常用操作-模拟实现3…

OpenCV实现的F矩阵+RANSAC原理与实践

1 RANSAC 筛选 1.1 大致原理 Random sample consensus (RANSAC)&#xff0c;即随机抽样一致性&#xff0c;其是一种用于估计模型参数的迭代方法&#xff0c;特别适用于处理包含离群点&#xff08;outliers&#xff09;的数据集 RANSAC 的主要思想是随机采样数据点&#xff0…

ExcelServer EXCEL服务器使用- 用户、角色权限配置

Excel文件服务器搭建 搭建Excel服务器 1、登录 默认 用户名 Admin 密码 3 2、角色管理 添加修改角色 角色配置在 系统管理->角色.fexm文件夹下 可以像修改excel文件一样 修改角色 3、用户管理 添加修改用户 用户的修改在 系统管理->用户.fexm 可以像excel一样编辑用户…