首页 > 其他 > 详细

《手把手教你学FPGA》第三章设计实例

时间:2020-10-07 14:35:02      阅读:34      评论:0      收藏:0      [点我收藏+]

设计实例

3.1.1 流水灯设计

3.1.1 试验任务

  8个LED灯依次顺序点亮,产生流水效果,相邻LED灯发光时间间隔大约为0.5s,人眼可以明显感知到这个间隔。

3.1.2 程序设计 

1、设计思路
  通过控制1/O口的高低电平可以实现LED发光或者熄灭,但是该怎样使用计数器实现延时呢?
  实验要求相邻的LED时间间隔为0.5s,FPGA开发板的晶振为50MHz,所以有0.5s/20ns=25000000(224<25000000<225),需要25位计数位宽。当有效位计数达到最大值时,实现翻转(全1变全0,往高一位进1)。
  本实验使用两个计数器。第一个计数器实现延迟间隔,计数器位宽为25bit,计数器命名为counter;第二个计数器控制哪个LED灯亮,计数器位宽为3bit,计数器命名count。
counter会一直持续计数,计数到最大值后,会翻转为0.当counter每计数至0的时候, count加1;当count计数到最大值后,也会翻转为0。
2、源代码
  module LED(
    input sys_clk,
    input sys_rst_n,
    output reg[7:0] LED
  );

 

  reg [2:0] count;
  reg [24:0] counter;

 

  always @(posedge sys_clk or negedge sys_rst_n) begin
    if (sys_rst_n == 1‘b0)
      counter <= 25‘b0;
    else
      counter <= counter + 25‘b1;
    end

 

  always @(posedge sys_clk or negedge sys_rst_n) begin
    if(sys_rst_n == 1‘b0)
      count  <=3‘b0;
    else if(counter == 25‘d0)
      count <= count + 3‘b1;
    else ;
  end

 

  always @(posedge sys_clk or negedge sys_rst_n) begin
    if(sys_rst_n == 1‘b0)
      LED <= 8‘b0;
    else begin
      case(count)
        0:LED = 8‘b00000001;
        1:LED = 8‘b00000010;
        2:LED = 8‘b00000100;
        3:LED = 8‘b00001000;
        4:LED = 8‘b00010000;
        5:LED = 8‘b00100000;
        6:LED = 8‘b01000000;
        7:LED = 8‘b10000000;
        default:LED = 8‘b00000000;
        endcase
      end
    end
  endmodule
3.2 按键控制LED实验
3.2.1 按键控制LED简介 

  按键是最常用的输入设备,广泛用于单片机/FPGA/DSP的输入控制,操作人员可以通过按键输人数据或者命令,实现简单的人机对话。FPGA开发板使用的按键是一种常开型的开关,通常按键的两个触点不按下时处于断开状态,按下时处于闭合状态。
  本实验使用按键控制发光二极管。发光二极管输入为高时发光,按键默认未按下时由于上拉电阻原因输出高电平,所以需要将按键输入取反后赋值给发光二极管输入端,即可控制发光二极管发光。按键未按下时LED灯处于熄灭状态,按键按下时LED灯处于点亮状态。

3.2.3 实验任务

  一个按键控制两个发光二极管,按下按键的可以使两个LED灯发光,未按下时两个LED灯不发光。

3.2.4 程序设计

1、设计思路

  输入为4个按键,输出为8个LED,按键按下时按键输入为低电平,而LED需要驱动为高电平才能亮,所以需要对按键输入进行取反,作为LED的输入。

2、源代码

  module KeyToLED(

    input [3:0] key,

    output wire [7:0] LED

  );

  assign LED = ~{key,key};

  endmodule

3.3 七段数码管静态显示实验

3.3.1 数码管简介

  数码管由7个条状和一个点状发光二极管制成,通过七段发光二极管亮暗的不同组合,可以显示多种数字,字母以及其他符号。

 

2.LED数码管分类
(1)共阴极接法(也叫共阴数码管)
  把发光二极管的阴极连在一起构成公共阴极。使用时公共阴极接地,这样阳极端输人高电平的段发光二极管就导通点亮,而输入低电平的段发光二极管则不点亮。
(2)共阳极接法(也叫共阳数码管)
  把发光二极管的阳极连在一起构成公共阳极。使用时公共阳极接+5V,这样阴极端输人低电平的段发光二极管就导通点亮,而输入高电平的段发光二极管则不点亮。
  数码管的逻辑图如图3.8所示,全部由发光二极管组合构成。

  技术分享图片
  本实验使用的是共阳极数码管,例如:假如要显示数字1,则b、c接低电平。

《手把手教你学FPGA》第三章设计实例

原文:https://www.cnblogs.com/lanliuliu/p/13777113.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!