【FPGA入门三】按键+LED灯
文章目录
- 一.跑马灯
- 二.按键+LED灯
- 实验任务
- Verilog HDL文件编写
- 编译查看RTL门级电路
- 测试文件编写
- 编译仿真
- 硬件测试
- 三.总结
一.跑马灯
实现一个简单的跑马灯
module horse_led(input wire clk_50M, //1秒震荡50_000_000次,周期是20nsinput wire rst_n, //1s = 1_000_000_000ns,震荡一次是20bsoutput wire[3:0] led //always语句赋值就不是wire类型 []矢量写法
);reg [27:0] cnt; //定义一个1s计数器:50_000_000,需要26个位宽reg [7:0] led_r;parameter MUX = 28'd10_000_000;//1秒钟计数器模块
always@(posedge clk_50M or negedge rst_n)
beginif(!rst_n)cnt <= 1'b0; //按下复位键,清零else if(cnt == MUX -1) //实际值是200_000_000,仿真用200cnt <= 1'b0; //计数达到顶值,清零elsecnt <= cnt + 1'b1;
end//led移位操作
always@(posedge clk_50M or negedge rst_n)
beginif(!rst_n)led_r <= 8'b0001111;else if(cnt == MUX - 1) //计数器达到指定值,led_r移位操作led_r <= {led_r[0],led_r[7:1]};//右移elseled_r <= led_r;
endassign led = led_r[3:0]; //将寄存器led_r中的低四位赋值给ledendmodule
说明:
使用{}拼接符将led_r的最低位移到最高位,然后将高位依次向右移动一位,就能实现跑马灯效果
编译:
引脚绑定:
查看RTL门级电路:
硬件测试:
二.按键+LED灯
实验任务
思路:
一共有4个LED灯,任务中最多有4种状态,可以定义状态计时器,记录LED的状态
Verilog HDL文件编写
key_led.v
module key_led(input wire clk,input wire rst_n,input wire [3:0] key,output reg [3:0] led
);//定义0.2s计数器,10_000_000次,仿真用10
parameter T = 10_000_000;//定义状态计数器,4个灯4个状态
reg [1:0] flag; reg [23:0] cnt = 0; //计时器赋初值为0//0.2s计数器模块
always@(posedge clk or negedge rst_n)beginif(!rst_n)cnt <= 1'b0; //按下复位键,清零else if(cnt == T -1) //计时器达到最大值,清零重新计数cnt <= 1'b0;elsecnt <= cnt + 1'b1;
end//状态切换计数器模块 flag的状态基于0.2s
always@(posedge clk or negedge rst_n)beginif(!rst_n)flag <= 1'b0;else if(cnt == T - 1)flag <= flag + 1'b1; //超出宽度截取低两位elseflag <= flag;
end //根据按键和状态选择不同的LED模式
always@(posedge clk or negedge rst_n)beginif(!rst_n)led <= 4'b0000;else if(!key[0]) //按下key0键,自右向左流水灯case(flag)2'b00 : led <= 4'b0001;2'b01 : led <= 4'b0010;2'b10 : led <= 4'b0100;2'b11 : led <= 4'b1000;default: led <= 4'b0000;endcaseelse if(!key[1]) //按下key1键,自左向右流水灯case(flag)2'b00 : led <= 4'b1000;2'b01 : led <= 4'b0100;2'b10 : led <= 4'b0010;2'b11 : led <= 4'b0001;default: led <= 4'b0000;endcaseelse if(!key[2]) //按下key2键,闪烁case(flag)2'b00 : led <= 4'b1111;2'b01 : led <= 4'b0000;2'b10 : led <= 4'b1111;2'b11 : led <= 4'b0000;default: led <= 4'b0000;endcaseelse if(!key[3]) //按下key3,全亮led <= 4'b1111;elseled <= led;
endendmodule
编译查看RTL门级电路
测试文件编写
key_led_tb.v
`timescale 1ns/1ns //时间单位和时间精度,两者最多一样大,精度不能大于单位module key_led_tb;reg clk; //wire型改为reg类型,可以起不同的名字
reg rst_n;
reg [3:0] key;wire [3:0] led; //激励信号
always #10 clk = ~clk; //每过10ns,时钟取反,总是执行//信号初始化
initial beginclk = 1'b0;rst_n = 1'b0;#10; //复位信号延迟10纳秒变为无效rst_n = 1'b1;key = 4'b1111;#(20*10*4)key = 4'b1110;#(20*10*4)key = 4'b1101;#(20*10*4)key = 4'b1011;#(20*10*4)key = 4'b0111;#(20*10*4); //延迟后停止$stop;
endkey_led inst_key_led( //instance实例化,实例化的输入输出名要和被测试文件一致
.clk (clk ),
.rst_n (rst_n ),
.key (key ), .led (led )
);endmodule
编译仿真
每个按键的状态持续时间就是测试文件的20104=800
且每种按键状态的led明亮状态满足任务要求。
硬件测试
绑定引脚:
下载测试:
按下KEY1:
按下KEY2:
按下KEY3:
按下KEY4:
三.总结
不同按键下不同的led亮灭方式,在已经定下灯的所有状态后,只需要用if-else语句给led赋不同的值就能够实现任务要求的功能,每个always块互不干扰,并发运行,反应速度快。
【FPGA入门三】按键+LED灯相关推荐
- 单片机两个IO口控制三个LED灯
在项目中经常会遇到单片机IO口资源不够用的情况,那么如何让单片机的IO口利用最大化呢,这里分享一下用单片机两个IO口控制三个LED灯的几种方法. 方法一: S1和S2分别接单片机两个IO口, ...
- 智能wifi小车-RGB三色LED灯驱动
RGB三色LED灯简介 RGB指的就是三基色光,R=红色,G=绿色,B=蓝色.LED芯片所发出的光一般都是蓝光,都是要通过红 绿 蓝这三种颜色的荧光粉去调颜色的.RGB色彩模式是工业界的一种颜色标准, ...
- 控制三色LED灯的闪烁——Arduino
最近要弄下Arduino.动过手,知道问题,细节可能在哪. 知识点我不清楚,直接看程序.直接控制也相对简单. 程序 /*实战案例1:控制三色LED灯的闪烁2019/3/12 */ int redpin ...
- 【Arduino基础】三色LED灯实验
实验现象 使用Arduino驱动RGB三基色LED灯产生七色光的变化. 理论学习 三基色组合七色光原理: 红+绿=黄 绿+蓝=青 红+蓝=紫 红+绿+蓝=白 可以由3种基色组合出来"红黄绿青 ...
- Arduino简单实例十一_四脚三色LED灯
1) 说明: LED灯是发光二级管,反着接电阻无穷大,正着接不需要考虑电阻.一般小的LED灯可通过的最大电流为30mA,如电压为5V,加一个220欧电阻后,电流约22mA左右,则可以保证不 ...
- Arduino UNO R3开发板+MQ-2烟雾浓度传感器+火焰传感器+舵机+无源蜂鸣器+风扇+步进电机+WIFI模块+RGB三色LED灯+SIM900A所构成的室内安全报警模块
该系统模块主要由Arduino UNO R3开发板+MQ-2烟雾浓度传感器+火焰传感器+舵机+无源蜂鸣器+风扇+步进电机+WIFI模块+RGB三色LED灯+SIM900A所组成,MQ-2烟雾浓度传感器 ...
- 51单片机入门学习篇-led灯、按键、数码管、中断
文章目录 前言 一.Proteus仿真 二.Keil代码编写 1.流水灯 2.来回点灯 3.按键操作 4.中断操作 5.数码管 6 动态数码管 三. 练习题 总结 前言 本文用来记录博主学习单片机的过 ...
- 按键控制三个LED灯亮关
实验材料: arduino模版 面包板 LED灯 按键 源代码如下: int LED 8 int buttonPin 2 int buttonPin_NUM = 0; void setup() { p ...
- 51单片机入门 第一篇:LED灯
文章目录 前言 一.LED原理图 二.创建keil5工程 三.代码的编写 四.程序的烧录 总结 前言 本篇文章讲正式带大家开始学习51单片机,希望这些文章能够很好的帮助到大家学习51单片机. 一.LE ...
最新文章
- 【Java 并发编程】线程简介 ( 原子操作 | volatile 关键字使用场景 )
- 2017-9-26 NOIP模拟赛
- List和Set以及Map的选用
- 14010.xilinx-EMIO扩展SPI设备
- 单一工作流的执行➕回滚框架初步想法(基于事件驱动模式)
- 抽象工厂模式java_抽象工厂模式
- 【软件测试】单元测试是软件测试的最基础环节
- java地铁最短,地铁最短路径
- 机器学习中为什么需要梯度下降_机器学习 —— 多元梯度下降
- Android图片压缩
- Intel 64 Memory ordering principles
- 什么是WAP?wap技术简介(转)
- 数字钟Matlab仿真,简单数字钟仿真电路图大全(五款数字钟仿真电路图) - 全文...
- Java实现九宫格游戏
- shopnc route.php,shopnc商城专题页的伪静态支持
- 如何读写8bit rgb彩色png图像
- Git与GitHub基础全套完整版教程(持续更新....)
- bilibili_api,仅用 3 行代码获取B站(弹幕、评论、用户)数据
- [转]git图解(3):分支操作
- STM32简易示波器
热门文章
- 北航22届的朋友,去年拿到大厂Offer,用同样简历去找工作,今年。。。
- drop table可以删除多张表吗_python全球疫情分析,告诉你海外疫情到底有多严峻 | 附290行代码...
- Linux安装人大金仓v7,人大金仓kingbaseV7 windows环境下安装
- 防己黄芪汤五苓散与“渴肿膝痛综合征”
- python的各种推导式
- 极坐标t1t2几何意义_选修44极坐标与参数方程
- 第2节 物理层基本概念及PacketTracer仿真
- web开发作品演示之每天都要上报体温微信小程序
- 易源数据_易源数据-今日油价【最新版】_商业智能_数据API_数据应用-云市场-阿里云...
- 抖音小店无货源——手把手教你开店,新手必看这七点