文章目录

  • 一.跑马灯
  • 二.按键+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灯相关推荐

  1. 单片机两个IO口控制三个LED灯

    在项目中经常会遇到单片机IO口资源不够用的情况,那么如何让单片机的IO口利用最大化呢,这里分享一下用单片机两个IO口控制三个LED灯的几种方法. 方法一:      S1和S2分别接单片机两个IO口, ...

  2. 智能wifi小车-RGB三色LED灯驱动

    RGB三色LED灯简介 RGB指的就是三基色光,R=红色,G=绿色,B=蓝色.LED芯片所发出的光一般都是蓝光,都是要通过红 绿 蓝这三种颜色的荧光粉去调颜色的.RGB色彩模式是工业界的一种颜色标准, ...

  3. 控制三色LED灯的闪烁——Arduino

    最近要弄下Arduino.动过手,知道问题,细节可能在哪. 知识点我不清楚,直接看程序.直接控制也相对简单. 程序 /*实战案例1:控制三色LED灯的闪烁2019/3/12 */ int redpin ...

  4. 【Arduino基础】三色LED灯实验

    实验现象 使用Arduino驱动RGB三基色LED灯产生七色光的变化. 理论学习 三基色组合七色光原理: 红+绿=黄 绿+蓝=青 红+蓝=紫 红+绿+蓝=白 可以由3种基色组合出来"红黄绿青 ...

  5. Arduino简单实例十一_四脚三色LED灯

    1)       说明: LED灯是发光二级管,反着接电阻无穷大,正着接不需要考虑电阻.一般小的LED灯可通过的最大电流为30mA,如电压为5V,加一个220欧电阻后,电流约22mA左右,则可以保证不 ...

  6. Arduino UNO R3开发板+MQ-2烟雾浓度传感器+火焰传感器+舵机+无源蜂鸣器+风扇+步进电机+WIFI模块+RGB三色LED灯+SIM900A所构成的室内安全报警模块

    该系统模块主要由Arduino UNO R3开发板+MQ-2烟雾浓度传感器+火焰传感器+舵机+无源蜂鸣器+风扇+步进电机+WIFI模块+RGB三色LED灯+SIM900A所组成,MQ-2烟雾浓度传感器 ...

  7. 51单片机入门学习篇-led灯、按键、数码管、中断

    文章目录 前言 一.Proteus仿真 二.Keil代码编写 1.流水灯 2.来回点灯 3.按键操作 4.中断操作 5.数码管 6 动态数码管 三. 练习题 总结 前言 本文用来记录博主学习单片机的过 ...

  8. 按键控制三个LED灯亮关

    实验材料: arduino模版 面包板 LED灯 按键 源代码如下: int LED 8 int buttonPin 2 int buttonPin_NUM = 0; void setup() { p ...

  9. 51单片机入门 第一篇:LED灯

    文章目录 前言 一.LED原理图 二.创建keil5工程 三.代码的编写 四.程序的烧录 总结 前言 本篇文章讲正式带大家开始学习51单片机,希望这些文章能够很好的帮助到大家学习51单片机. 一.LE ...

最新文章

  1. 【Java 并发编程】线程简介 ( 原子操作 | volatile 关键字使用场景 )
  2. 2017-9-26 NOIP模拟赛
  3. List和Set以及Map的选用
  4. 14010.xilinx-EMIO扩展SPI设备
  5. 单一工作流的执行➕回滚框架初步想法(基于事件驱动模式)
  6. 抽象工厂模式java_抽象工厂模式
  7. 【软件测试】单元测试是软件测试的最基础环节
  8. java地铁最短,地铁最短路径
  9. 机器学习中为什么需要梯度下降_机器学习 —— 多元梯度下降
  10. Android图片压缩
  11. Intel 64 Memory ordering principles
  12. 什么是WAP?wap技术简介(转)
  13. 数字钟Matlab仿真,简单数字钟仿真电路图大全(五款数字钟仿真电路图) - 全文...
  14. Java实现九宫格游戏
  15. shopnc route.php,shopnc商城专题页的伪静态支持
  16. 如何读写8bit rgb彩色png图像
  17. Git与GitHub基础全套完整版教程(持续更新....)
  18. bilibili_api,仅用 3 行代码获取B站(弹幕、评论、用户)数据
  19. [转]git图解(3):分支操作
  20. STM32简易示波器

热门文章

  1. 北航22届的朋友,去年拿到大厂Offer,用同样简历去找工作,今年。。。
  2. drop table可以删除多张表吗_python全球疫情分析,告诉你海外疫情到底有多严峻 | 附290行代码...
  3. Linux安装人大金仓v7,人大金仓kingbaseV7 windows环境下安装
  4. 防己黄芪汤五苓散与“渴肿膝痛综合征”
  5. python的各种推导式
  6. 极坐标t1t2几何意义_选修44极坐标与参数方程
  7. 第2节 物理层基本概念及PacketTracer仿真
  8. web开发作品演示之每天都要上报体温微信小程序
  9. 易源数据_易源数据-今日油价【最新版】_商业智能_数据API_数据应用-云市场-阿里云...
  10. 抖音小店无货源——手把手教你开店,新手必看这七点