FPGA知识基础之--按键控制LED灯项目

文章目录

  • 前言
  • 一、按键简介
    • 按键:通过按下或者释放来控制电路通断的电子元件
    • 按键原理图
  • 二、实验要求
  • 三、程序设计
    • 3.1思路整理
    • 3.2 模型搭建
    • 3.3 顶层模块
    • 3.4 波形分析
  • 四、代码整理
    • 4.1RTL代码
    • 4.2 仿真
        • 只需在Testbench上增加上述一段代码即可将参数实例化,可达到在Testbench上更改参数的目的


前言

笔者将基于正点原子的达芬奇开发板,结合夏宇闻老师的Verilog数字系统设计教程,来记录自己学习FPGA的学习思路,希望能给与读者一些帮助


一、按键简介

按键:通过按下或者释放来控制电路通断的电子元件

自锁按键:按下之后能保持,类似于开发板的电源按键

轻触摸式按键:按下就通,松开即断

按键原理图

按下是低电平,断开高电平

在这里插入图片描述

二、实验要求

在这里插入图片描述


三、程序设计

3.1思路整理

在这里插入图片描述

3.2 模型搭建

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.3 顶层模块

在这里插入图片描述

3.4 波形分析

在这里插入图片描述

四、代码整理

4.1RTL代码

module key_led(
input 					sys_clk,
input 					sys_rst_n,
input 	[3:0]			key,output	reg [3:0] 		led);parameter CNT_MAX = 25'd25000000;//可在仿真时改为25'd25;,对应500nsreg [24:0] cnt;
reg [1:0] led_flag;//计数0.5s
always @(posedge sys_clk or negedge sys_rst_n) beginif(!sys_rst_n)cnt <= 25'd0;elseif (cnt < (CNT_MAX- 25'd1))cnt <= cnt+ 25'd1;else	cnt <= 25'd0;end//LED状态切换标志位
always @(posedge sys_clk or negedge sys_rst_n) beginif(!sys_rst_n)led_flag <= 2'd0;elseif (cnt < (CNT_MAX- 25'd1))led_flag <= led_flag + 2'd1;else cnt <= 25'd0;end//LED控制
always @(posedge sys_clk or negedge sys_rst_n) beginif(!sys_rst_n)led <= 4'd0;elsebegincase(key)4'b1111 : led <= 4'b0000;4'b1110 :beginif(led_flag == 2'd0)led <= 4'b0001;else if(led_flag == 2'd1)led <= 4'b0010;else if(led_flag == 2'd2)led <= 4'b0100;else led <= 4'b1000;end4'b1101 :beginif(led_flag == 2'd0)led <= 4'b1000;else if(led_flag == 2'd1)led <= 4'b0100;else if(led_flag == 2'd2)led <= 4'b0010;else led <= 4'b0001;end4'b1011 : beginif((led_flag == 2'd0)||(led_flag == 2'd2))led <= 4'b1111;else led <= 4'b0000;end4'b0111 :  led <= 4'b1111;default : ;endcaseend
end
endmodule

4.2 仿真

需要注意的是,在modelsim仿真时,可以将0.5s改为20ns以缩短仿真时间,仅需将CNT_MAX改为25’d25即可
testbench代码

`timescale	1ns/1ns //仿真的单位/仿真的精度s
module tb_key_led();parameter CLK_PERIOD = 20;reg 		sys_clk;  //周期20ns
reg 		sys_rst_n; //并非所有的输入都是reg,根据代码编写情况
reg [3:0] 	key;wire  [3:0]	led;initial beginsys_clk <= 1'b0;sys_rst_n <=1'b0;key <= 4'b1111;#200 sys_rst_n <= 1'b1;#2000key <= 4'b1110;//按下key0#2000key <= 4'b1111;//松开key0#2000key <= 4'b1101;//按下key1#2000key <= 4'b1111;//松开key1#2000key <= 4'b1011;//按下key2#2000key <= 4'b1111;//松开key2#2000key <= 4'b0111;//按下key3#2000key <= 4'b1111;//松开key3endalways #(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

笔者在进行仿真分析是发现了自己代码编写的一些小错误
例如,在编写rtl代码时,输入输出信号用的是分号,而不是逗号
在编写Testbench代码的时候,笔者发现自己在进行实例化时忘记改名了

同时,在仿真时,若是每次仿真都要改RTL代码,还是比较繁琐的,为此,笔者希望可以在Testbench上进行修改,以下是笔者根据资料学习的办法

parameter CNT_MAX = 25'd25;u_key_led #(.CNT_MAX  (CNT_MAX));
只需在Testbench上增加上述一段代码即可将参数实例化,可达到在Testbench上更改参数的目的

关于modelsim的用法心得:指令篇
restart -f 即重新开始仿真
run -time 即仿真时间;

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

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

相关文章

卷积神经网络的入门基本介绍 | 带你快速上手各种概念【附图解】

文章目录 1、简介2、核心概念3、关键操作4、常见架构5、训练过程6、重要概念图解⭐6.1、卷积神经网络工作⭐6.2、卷积核6.3、全连接与卷积网络的对比6.4、池化层6.5、感受野和卷积堆叠6.6、神经元计算和激活函数 7、卷积网络可以改进的地方8、结论 &#x1f343;作者介绍&#…

vue3集成LuckySheet实现导入本地Excel进行在线编辑

第一步&#xff1a;克隆或者下载下面的代码 git clone https://github.com/dream-num/Luckysheet.git第二步&#xff1a;安装依赖 npm install npm install gulp -g 第三步&#xff1a;运行 npm run dev效果如下图所示 第四步&#xff1a;打包 打包执行成功后&#xff0c;…

TypeError: Components is not a function

Vue中按需引入Element-plus时&#xff0c;报错TypeError: Components is not a function。 1、参考Element-plus官方文档 安装unplugin-vue-components 和 unplugin-auto-import这两款插件 2、然后需要在vue.config.js中配置webPack打包plugin配置 3、重新启动项目会报错 T…

程序员开发指南

在这个快节奏的时代&#xff0c;作为一名程序员&#xff0c;大家都希望能更快地开发出高质量的应用&#xff0c;而不是花费大量时间在基础设施和后台服务的搭建上。今天&#xff0c;我要向大家介绍一款专为懒人开发者准备的一站式开发应用的神器——MemFire Cloud。 一站式开发…

制品库nexus

详见&#xff1a;Sonatype Nexus Repository搭建与使用&#xff08;详细教程3.70.1&#xff09;-CSDN博客 注意事项&#xff1a; 1.java8环境使用nexus-3.69.0-02-java8-unix.tar.gz包 2.java11环境使用nexus-3.70.1-02-java11-unix.tar.gz包 3.注意使用制品库/etc/yum.repos.…

动物大联盟游戏攻略:必备游戏攻略!VMOS云手机升级攻略教程!

在《动物大联盟》中&#xff0c;合理的称号选择、活动参与和组队合作可以极大提升游戏体验和效率。以下是详细的攻略建议&#xff1a; 称号选择 称号不仅能展示玩家的实力和成就&#xff0c;还能提供额外的属性加成。合理选择和更换称号是提升战力的重要途径。 前期称号选择&…

Matlab编程资源库(19)级数与符号方程求解

一、级数符号求和 求无穷级数的和需要 符号表达式求和函数 symsum &#xff0c;其调用 格式为&#xff1a; symsum(s,v,n,m) 其中 s 表示一个级数的通项&#xff0c;是一个符号表达式。 v 是求和变 量&#xff0c; v 省略时使用系统的默认变量。 n 和 m 是求和的开始项 和…

【康复学习--LeetCode每日一题】3111. 覆盖所有点的最少矩形数目

题目&#xff1a; 给你一个二维整数数组 point &#xff0c;其中 points[i] [xi, yi] 表示二维平面内的一个点。同时给你一个整数 w 。你需要用矩形 覆盖所有 点。 每个矩形的左下角在某个点 (x1, 0) 处&#xff0c;且右上角在某个点 (x2, y2) 处&#xff0c;其中 x1 < x…

职业教育计算机网络综合实验实训室建设应用案例

近年来&#xff0c;职业教育在培养技能型人才方面发挥着越来越重要的作用。然而&#xff0c;传统的计算机网络技术教学模式往往重理论、轻实践&#xff0c;导致学生缺乏实际操作能力和职业竞争力。为了改变这一现状&#xff0c;唯众结合职业教育特点&#xff0c;提出了“教、学…

04.FreeRTOS任务创建

04. FreeRTOS任务创建与任务删除 1. FreeRTOS创建和删除任务相关API函数 函数描述xTaskCreate()动态方式创建任务xTaskCreateStatic()静态方式创建任务xTaskCreateRestricted()动态方式创建使用 MPU 限制的任务xTaskCreateRestrictedStatic()静态方式创建使用 MPU 限制的任务…

C# Unity 面向对象补全计划 之 继承(字段与属性)

本文仅作学习笔记与交流&#xff0c;不作任何商业用途&#xff0c;作者能力有限&#xff0c;如有不足还请斧正 本系列旨在通过补全学习之后&#xff0c;给出任意类图都能实现并做到逻辑上严丝合缝 Q&#xff1a;为什么要单讲继承字段与属性&#xff0c;不讲继承方法了吗&#x…

Centos 7配置问题

在VMWare12上面安装Centos 7 Linux虚拟机&#xff0c;在切换到命令界面时&#xff0c;需要登录用户名和密码&#xff0c;但发现输入用户后有字符显示&#xff0c;但是密码没有。 经过一系列查看后&#xff0c;发现这个是Linux的一种机制&#xff0c;即当你输入密码时不显示&…

为什么阿里开发手册不建议使用Date类?

在日常编码中&#xff0c;基本上99%的项目都会有一个DateUtil工具类&#xff0c;而时间工具类里用的最多的就是java.util.Date。 大家都这么写&#xff0c;这还能有问题&#xff1f;&#xff1f; 当你的“默认常识”出现问题&#xff0c;这个打击&#xff0c;就是毁灭性的。 …

Python学习计划——7.2数据可视化

数据可视化是数据分析的重要组成部分&#xff0c;通过图表和图形将数据直观地展示出来&#xff0c;帮助我们发现数据中的模式和趋势。Python中常用的数据可视化库有matplotlib和seaborn。以下是对这些库的详细讲解及可运行的Python案例。 1. matplotlib 库 matplotlib 是一个…

Git 基础操作手册:轻松掌握常用命令

Git 操作完全手册&#xff1a;轻松掌握常用命令 引言一、暂存&#xff1a;git add ✏️二、提交&#xff1a;git commit &#x1f4dd;三、拉取、拉取合并 &#x1f504;四、推送&#xff1a;git push &#x1f310;五、查看状态&#xff1a;git status &#x1f4ca;六、查看历…

数据库管理-第225期 Oracle DB 23.5新特性一览(20240730)

数据库管理225期 2024-07-30 数据库管理-第225期 Oracle DB 23.5新特性一览&#xff08;20240730&#xff09;1 二进制向量维度格式2 RAC上的复制HNSW向量索引3 JSON集合4 JSON_ID SQL函数5 优化的通过网络对NVMe设备的Oracle的原生访问6 DBCA支持PMEM存储7 DBCA支持标准版高可…

[PM]面试题-工作问题

画一个原型需要多久?写一篇PRD文档需求多久? 时间长短取决于项目规模和业务难度, 规模大难度高,就要花费很长的时间, 规模下难度低时间就短, 一般来说, 1-2周的时间就可以完成原型和RED文档 市场需求文档写什么? 从打到下进行编写, 大的方面以市场为主体,包括市场规模, 发…

AI-PaddleOCR2.8在VS2019编译运行基于C++引擎推理CPU版本

1、下载PaddleOCR-release-2.8开源项目 https://github.com/PaddlePaddle/PaddleOCR https://github.com/PaddlePaddle/PaddleOCR/releases https://gitee.com/paddlepaddle/PaddleOCR?_fromgitee_search 2、下载安装Windows预测库 https://paddleinference.paddlepaddle.o…

轻量级服务器资源监控平台Beszel

什么是 Beszel &#xff1f; Beszel 是一个轻量级平台&#xff0c;借助 Beszel&#xff0c;可以访问 CPU 和内存使用情况的历史数据&#xff0c;以及 Docker 容器指标&#xff08;例如特定于容器的 CPU 和内存统计信息&#xff09;。还能收到针对潜在问题的可自定义警报通知&am…

【Docker】安装 Docker(Server-Centos、GUI-Windows11)—— 超详细教程

一、各版本平台支持情况 1、Server 版本 2、桌面版本 二、Server 版本安装&#xff08;Centos&#xff09; 1、安装依赖 &#xff08;1&#xff09;支持的操作系统 CentOS 7&#xff1a;推荐 CentOS 8 (stream) CentOS 9 (stream) &#xff08;2&#xff09;支持的 CPU A…