FPGA——按键控制led灯

news/2024/4/28 21:02:48/文章来源:https://blog.csdn.net/asdhnkhn/article/details/131717844

文章目录

    • 一、实验环境
    • 二、实验任务
    • 三、系统设计
    • 四、实验过程
      • 4.1 编写verilog代码
      • 4.2 引脚配置
    • 五、仿真
      • 5.1 仿真代码
      • 5.2 仿真结果
    • 六、实验结果
    • 七、总结

一、实验环境

quartus 18.1
modelsim
vscode
Cyclone IV开发板

二、实验任务

使用开发板上的四个按键控制四个LED灯。按下不同的按键时,四个LED灯显示不同效果。
在这里插入图片描述

三、系统设计

四个按键外加时钟和复位信号作为输入,两个计数器模块分别用于0.2s时间的计数和状态的计数。led模式选择模块根据状态计数器的改变,来改变四个led的状态,形成不同的样式。
在这里插入图片描述

四、实验过程

4.1 编写verilog代码

module key_led(input 				clk  ,//时钟50MHzinput 				rst_n,//复位信号,下降沿有效negtiveinput 	[3:0]		key  ,//四个按键output 	reg [3:0]	led   //四个led灯);parameter TIME = 24'd10_000_000;//0.2S
reg [23:0]	cnt ;//计数器0.2S
reg [1:0]	state;//记录四个led状态//0.2s计数器模块
always@(posedge clk or negedge rst_n)beginif(!rst_n)begin//复位cnt <= 24'd0;//计数器清0end else if(cnt == TIME - 1)begin//记满10_000_000,0~9_999_999cnt <= 24'd0;//计数器清0end else begincnt <= cnt + 1'd1;//其他情况下计数器加1end 
end //状态计数模块
always@(posedge clk or negedge rst_n)beginif(!rst_n)begin//复位信号state <= 2'd0;//状态清0end else if(cnt == TIME - 1)begin//记满10_000_000,0~9_999_999 0.2sstate <= state + 2'd1;//状态加1end else beginstate <= state;//其他情况状态保持不变end 
end //状态控制led模块
always@(posedge clk or negedge rst_n)beginif(!rst_n)begin//复位信号led <= 4'b0000;//led全灭end else if(key[0] == 0)begin//右边第1个按键按下,按键低电平0有效case(state)//判断状态的值2'd0: led <= 4'b0001;//右边第1个led灯亮2'd1: led <= 4'b0010;//右边第2个led灯亮2'd2: led <= 4'b0100;//右边第3个led灯亮2'd3: led <= 4'b1000;//右边第4个led灯亮default:;//默认情况不能忘,可以不写,但是要把stat情况考虑完endcase end else if(key[1] == 0)begin//右边第2个按键按下,按键低电平0有效case(state)//判断状态的值2'd0: led <= 4'b1000;//左边第1个led灯亮2'd1: led <= 4'b0100;//左边第2个led灯亮2'd2: led <= 4'b0010;//左边第3个led灯亮2'd3: led <= 4'b0001;//左边第4个led灯亮default:;endcase end else if(key[2] == 0)begin//右边第3个按键按下,按键低电平0有效case(state)2'd0: led <= 4'b1111;//全亮2'd1: led <= 4'b0000;//全灭2'd2: led <= 4'b1111;//全亮2'd3: led <= 4'b0000;//全灭default:;endcase endelse if(key[3] == 0)begin//右边第4个按键按下,按键低电平0有效case(state)2'd0: led <= 4'b1111;//全亮2'd1: led <= 4'b1111;//全亮2'd2: led <= 4'b1111;//全亮2'd3: led <= 4'b1111;//全亮default:;endcase endelse beginled <= 4'b0000;//其他情况默认4个led灯全灭end 
end 
endmodule 

4.2 引脚配置

在这里插入图片描述

五、仿真

5.1 仿真代码

`timescale 1ns/1ns//单位/精度
module key_led_tb();reg 		clk  ;//时钟信号
reg 		rst_n;//复位信号
reg	 [3:0]	key  ;//按键信号wire [3:0]	led  ;//led灯信号parameter TIME  = 10;//间隔时间,由10_000_000变为10,便于仿真观察
parameter CYCLE = 20;//周期20ns
always #(CYCLE/2) clk = ~clk;//每10ns翻转一次,刚好模拟时钟周期50MHzinitial beginclk   = 1'b0;//初始时钟为低电平rst_n = 1'b0;//复位信号置0,下降沿有效,初始化#(CYCLE);//时钟20nsrst_n = 1'b1;//复位信号置1#(CYCLE * TIME * 4);//4个led灯,4个间隔,所以乘以4key   = 4'b1110;//按下右边第1个按键#(CYCLE * TIME * 4);key   = 4'b1101;//按下右边第2个按键#(CYCLE * TIME * 4);key   = 4'b1011;//按下右边第3个按键#(CYCLE * TIME * 4);key   = 4'b0111;//按下右边第4个按键#(CYCLE * TIME * 4);$stop;//停止
end //实例化模块
key_led	 #(.TIME (TIME)) u_key_led(
.clk  		(clk)  ,//时钟50MHz
.rst_n		(rst_n),//复位信号,下降沿有效
.key  		(key)  ,//按键信号.led		(led)//led灯
); 
endmodule 

5.2 仿真结果

在这里插入图片描述

六、实验结果

七、总结

本次实验除了使用了计数的寄存器,还引入了状态寄存器,使得逻辑结构更加清晰直观,但是本次实验中我们没有进行按键消抖,因此必须把按键按住不放才能实现led灯对应的状态。

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

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

相关文章

【微信小程序创作之路】- 小程序窗口整体配置(导航栏、标题)

【微信小程序创作之路】- 小程序窗口导航栏配置 第五章 微信小程序窗口导航栏配置 文章目录 【微信小程序创作之路】- 小程序窗口导航栏配置前言一、入口文件的配置二、页面配置三、全局默认窗口配置1.navigationBarTitleText&#xff1a;导航栏标题文字2.navigationBarBackgr…

​​Layui之用户管理实例(对数据的增删改查)

目录 ​编辑一、R工具介绍&#xff08;&#xff09; ​编辑二、数据表的增删改查 ​编辑2.1我们先得从查询数据库的语句入手 2.2优化dao类 2.4UserAction类 2.5前台的页面实现增删改查操作 2.6 userManage页面JS 2.7user新增、修改iframe层js 前言 上一篇我分享了…

SpringCloudAlibaba:消息驱动之RocketMQ学习

目录 一、MQ简介 &#xff08;一&#xff09;什么是MQ &#xff08;二&#xff09;MQ的应用场景 1、异步解耦 2、流量削峰 &#xff08;三&#xff09;常见的MQ产品 二、RocketMQ入门 &#xff08;一&#xff09;RocketMQ安装部署 1、环境要求 2、下载RocketMQ 3、安…

nginx的前端集成

对于springcloud项目&#xff0c;后端我们有很多的微服务&#xff0c;当然前端我们也可以有很多的小项目进行集成 前端项目部署思路 通过nginx来进行配置&#xff0c;功能如下 通过nginx的反向代理功能访问后台的网关资源 通过nginx的静态服务器功能访问前端静态页面 配置ng…

CSS3绘制3D银行卡片层叠展示特效

使用纯css3绘制3D银行卡层叠展示特效 具体示例如下 <template><div><div class"tariffCards"><div class"economy"><img src"../images/css-article-imgs/example-css3D-card/tarcs.png" alt"中信银行" he…

图腾柱电路

驱动MOS或者IGBT管&#xff0c;需要比较大的驱动电流或者灌电流 使用图腾柱电路或许是一个好的办法 电流路径是这样的 当CTL1端口输出为高电平的时候 三极管Q2的2脚为高&#xff0c;三极管Q2不导通 三极管Q1的2脚为高&#xff0c;三极管导通 所以Q1的3脚和1脚导通 VCC--…

Linux线程的生产者消费者模型 --- 阻塞队列(blockqueue)

文章目录 线程同步条件变量条件变量的接口 生产者消费者场景消费者和消费者的关系生产者和生产者的关系生产者和消费者的关系从何体现出效率的提高 Blockqueueblockqueue.hpp为什么条件变量的接口有锁作为参数 CP.cc生产者 -> queue -> 消费者兼生产者 -> queue ->…

【HarmonyOS】Stage模型二维码/条码生成与解析

HarmonyOS的官方API中提供了QRCode组件&#xff08;QRCode-基础组件-组件参考&#xff08;基于ArkTS的声明式开发范式&#xff09;-ArkTS API参考-HarmonyOS应用开发&#xff09;&#xff0c;这个组件有个缺点只能用于显示二维码&#xff0c;无法显示条码与解析码内容&#xff…

【已解决】Flask项目报错TypeError: tuple indices must be integers or slices, not str

文章目录 问题情境报错及分析报错代码分析 解决方案必要的解决方法可能有用的解决方法 问题情境 本解决方案适用情境&#xff1a;在本地可以正常运行的flask项目&#xff0c;放到云服务器报错TypeError: tuple indices must be integers or slices, not str&#xff0c;即代码…

《深度学习推荐系统》笔记

目录 一、推荐系统是什么1.作用和意义2.推荐系统的架构2.1 逻辑架构2.2 技术架构 二、传统的推荐系统方法1. 协同过滤算法1.1 userCF&&ItemCF1.3 矩阵分解算法 2. 逻辑回归算法3. 因子分解机3.1 POLY2模型3.2 FM模型3.3 FFM模型3.4 小结 4. 组合模型4.1 GBDTLR组合模型…

【C++/嵌入式笔试面试八股】二、24.TCP三次握手四次挥手 | TCP可靠性

TCP三次握手四次挥手 64.TCP头部中有哪些信息?❤️ TCP数据报格式(左图) UDP数据报格式也放这(右图),不具体解释了。 结合三次握手四次挥手来看 端口: 区分应用层的不同应用进程 扩展:应用程序的端口号和应用程序所在主机的 IP 地址统称为 socket(套接字),IP:端口…

Docker安装ElasticSearch/ES

目录 前言准备拉取ElasticSearch镜像安装ElasticSearch拉取elasticsearch-head镜像安装elasticsearch-head参考 前言 TencentOS Server 3.1Docker version 19.03.14, build 5eb3275d40 准备 docker 已安装。 安装 docker 参考&#xff1a;【Centos 8】【Centos 7】安装 docke…

基于STM32 ARM+FPGA伺服控制系统总体设计方案(一)

设计需求 一套完整的伺服控制方案包括了上位机、驱控一体控制器和功率板三者。操作人员 通过上位机发送各种不同指令&#xff0c;然后控制器解析指令后执行相应的伺服功能&#xff0c;其次控 制器将驱动信号传输至功率板驱动电机&#xff0c;最后控制器采集反馈信息进行闭环…

了解PostgreSQL sql shell和VACUUM命令

从SQL Shell进入PostgreSQL&#xff1b;没用过这东西&#xff0c;看一下&#xff1b; 一直回车&#xff1b;最后输入口令就登入了&#xff1b;此时是登入默认的数据库postgres&#xff1b;这个数据库是默认安装的&#xff1b; 看一下有没有表&#xff0c;根据资料可以用 \d 或…

大坝安全监测中需要做好检查监测

大坝安全监测是人们了解大坝运行状态和安全状况的有效手段和方法。它的目的主要是了解大坝安全状况及其发展态势&#xff0c;是一个包括由获取各种环境、水文、结构、安全信息到经过识别、计算、判断等步骤&#xff0c;最终给出一个大坝安全 程度的全过程。 此过程包括&#xf…

Linux中常用的监控性能的命令(sar、mpstat,vmstat, iostat,)详解

Linux中常用的监控性能的命令有&#xff1a; sar&#xff1a;能查看CPU的平均信息&#xff0c;还能查看指定CPU的信息。与mpstat相比&#xff0c;sar能查看CPU历史信息 mpstat&#xff1a;能查看所有CPU的平均信息&#xff0c;还能查看指定CPU的信息。 与sar相比&#xff0c…

九五从零开始的运维之路(其二十)

[TOC](文章目录) 文章目录 前言一、LAMP是什么二、配置环境及安装1.配置yum源2.关闭防火墙、网络图形化工具及SElinux3.安装软件包 三、配置apache服务器内容四、启动服务五、访问验证总结 前言 本篇将简述的内容&#xff1a;Linux系统下的LAMP平台部署 基于discuz框架的论坛搭…

阿里云无影云电脑价格_企业办公型1元_云桌面入口

阿里云无影云电脑配置费用&#xff0c;4核8G企业办公型云电脑可以免费使用3个月&#xff0c;无影云电脑地域不同费用不同&#xff0c;无影云电脑是由云桌面配置、云盘、互联网访问带宽、AD Connector、桌面组共用桌面session等费用组成&#xff0c;阿里云百科分享阿里云无影云电…

中文数据下载

研究AI离不开数据&#xff0c;数据库可以说是AI的半壁天下。有链接的数据库下载是很nice的。 语音数据集整理 目录 1.Mozilla Common Voice. 2 2.翻译和口语音频的大型数据库Tatoeba. 2 3.VOiCES Dataset 3 4. LibriSpeech. 4 5.2000 HUB5 English&#xff1a;... 4 6.…

如何用Three.js + Blender打造一个web 3D展览馆

作者&#xff1a;vivo 互联网前端团队- Wei Xing 运营活动新玩法层出不穷&#xff0c;web 3D炙手可热&#xff0c;本文将一步步带大家了解如何利用Three.js和Blender来打造一个沉浸式web 3D展览馆。 一、前言 3D展览馆是什么&#xff0c;先来预览下效果&#xff1a; 看起来像…