【【萌新的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,一经查实,立即删除!

相关文章

python+opencv寻找图片或视频中颜色进行追踪之HSV颜色处理

pythonopencv寻找图片或视频中颜色进行追踪之HSV颜色处理 1.颜色空间转换 import cv2img cv2.imread(1.jpg) # 转换为灰度图 img_gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)cv2.imshow(img, img) cv2.imshow(gray, img_gray) cv2.waitKey(0)cv2.cvtColor()用来进行颜色模…

uniapp项目实践总结(十九)版本更新和热更新实现方法

导语:当一个 APP 应用开发完成以后,就要上架应用商店,但有时候修改一些小问题或者推出一些活动,又不想频繁地提交应用商店审核,那么就可以使用应用内更新功能来进行应用的版本升级更新或热更新,下面就介绍一下实现的方法。 目录 准备工作原理分析实战演练案例展示准备工作…

打印大对象日志导致GC问题的解决

内容&#xff1a; rpc调用外部服务时&#xff0c;需要将req和resp的信息打印出来&#xff0c;以便于排查问题。但是有的rpc服务的resp信息过于庞大&#xff0c;比如resp中有List<>信息&#xff0c;list很大很大时会导致log.info打印信息时&#xff0c;产生GC&#xff0c…

国足亚运会4:0战胜缅甸

9月21日晚&#xff0c;中国男足亚运队以4:0战胜小组赛对手缅甸队&#xff0c;谭龙5分钟打入两球&#xff0c;王振澳、戴伟浚各进一球。 这是继9月19日5:1战胜印度队后&#xff0c;中国队取得的第二场胜利。 目前&#xff0c;国足亚运队已提前锁定淘汰赛资格&#xff0c;球队最后…

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…

安装k8s集群

一、前置环境配置 安装两台centos 实验环境&#xff0c;一台pc配有docker环境&#xff0c;有两个centsos7容器&#xff0c;其中一个容器作为master&#xff0c;一个作为node。如果master与node都是用默认端口&#xff0c;会存在冲突&#xff0c;所以在此基础上做细微的调整。…

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…

sum = sum * 10 + ch - ‘0‘;的含义

scanf中以%c格式获取的是单个字符[1]&#xff0c;实际存储的是该字符对应的编码。 字符1实际存储的值是该字符的ascii码[2]&#xff0c;即49。 如果想得到整数1&#xff0c;就需要用1减去48&#xff0c;48就是0。 1 - 0 49 - 48 1

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

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

自定义类型详解(上)

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

linux常见下载安装工具

linux常见下载安装工具 wget、rpm、yum、apt 和 curl 是在Linux系统中常用的命令和工具&#xff0c;用于不同的系统管理和网络操作任务。以下是它们之间的联系与区别&#xff1a; wget&#xff1a; 用途&#xff1a;wget用于从网络上下载文件。它是一个命令行工具&#xff0c…

【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;英语&…