zoukankan      html  css  js  c++  java
  • FPGA -- 实验二:流水灯

      上次的闪烁灯实验,重新熟悉了FPGA开发的流程,这次实现一个最简单的流水灯

      BJEPM开发板上有4个LED,和黑金里面的教程类似,因此以这个为模板来进行

      基本思路是:(原理参考verilog那些事建模篇)

      设计四个模块,扫描周期一样,但是是在周期内的不同时间段来实现

      

      设计框图:

      

      下面直接上代码了

      led1_module:

     1 /****************************************
     2 *文件名:led1_module.v
     3 *功能:实现第一个流水灯扫描效果
     4 ****************************************/
     5 
     6 module led1_module(
     7     CLK,RST_n,
     8     LED1
     9 );
    10 
    11 input CLK;
    12 input RST_n;
    13 output LED1;
    14 
    15 //************************************
    16 //因为扫描周期为1s,所以每个灯亮0.25s
    17 //50MHZ的晶振下计数值为12_500_000
    18 parameter COUNT_1S = 26'd50_000_000;
    19 
    20 
    21 //************************************
    22 reg [25:0]count;
    23 
    24 always @(posedge CLK or negedge RST_n)
    25     if(!RST_n)
    26         count <= 26'd0;
    27     else if(count == COUNT_1S)
    28         count <= 26'd0;
    29     else
    30         count <= count + 1'b1;
    31         
    32 //***************************************
    33 reg rLED1;
    34 
    35 always @(posedge CLK or negedge RST_n)
    36     if(!RST_n)
    37         rLED1 <= 1'd0;
    38     else if(count >= 0 && count <= 26'd12_500_000)
    39         rLED1 <= 1'd1;
    40     else 
    41         rLED1 <= 1'd0;
    42         
    43 assign LED1 = rLED1;
    44 
    45 endmodule

      led2_module:

     1 /****************************************
     2 *文件名:led2_module.v
     3 *功能:实现第二个流水灯扫描效果
     4 ****************************************/
     5 
     6 module led2_module(
     7     CLK,RST_n,
     8     LED2
     9 );
    10 
    11 input CLK;
    12 input RST_n;
    13 output LED2;
    14 
    15 //************************************
    16 //因为扫描周期为1s,所以每个灯亮0.25s
    17 //50MHZ的晶振下计数值为12_500_000
    18 parameter COUNT_1S = 26'd50_000_000;
    19 
    20 
    21 //************************************
    22 reg [25:0]count;
    23 
    24 always @(posedge CLK or negedge RST_n)
    25     if(!RST_n)
    26         count <= 26'd0;
    27     else if(count == COUNT_1S)
    28         count <= 26'd0;
    29     else
    30         count <= count + 1'b1;
    31         
    32 //***************************************
    33 reg rLED2;
    34 
    35 always @(posedge CLK or negedge RST_n)
    36     if(!RST_n)
    37         rLED2 <= 1'd0;
    38     else if(count >= 26'd12_500_000 && count <= 26'd25_000_000)
    39         rLED2 <= 1'd1;
    40     else 
    41         rLED2 <= 1'd0;
    42         
    43 assign LED2 = rLED2;
    44 
    45 endmodule

      led3_module:

     1 /****************************************
     2 *文件名:led3_module.v
     3 *功能:实现第三个流水灯扫描效果
     4 ****************************************/
     5 
     6 module led3_module(
     7     CLK,RST_n,
     8     LED3
     9 );
    10 
    11 input CLK;
    12 input RST_n;
    13 output LED3;
    14 
    15 //************************************
    16 //因为扫描周期为1s,所以每个灯亮0.25s
    17 //50MHZ的晶振下计数值为12_500_000
    18 parameter COUNT_1S = 26'd50_000_000;
    19 
    20 
    21 //************************************
    22 reg [25:0]count;
    23 
    24 always @(posedge CLK or negedge RST_n)
    25     if(!RST_n)
    26         count <= 26'd0;
    27     else if(count == COUNT_1S)
    28         count <= 26'd0;
    29     else
    30         count <= count + 1'b1;
    31         
    32 //***************************************
    33 reg rLED3;
    34 
    35 always @(posedge CLK or negedge RST_n)
    36     if(!RST_n)
    37         rLED3 <= 1'd0;
    38     else if(count >= 26'd25_000_000 && count <= 26'd37_500_000)
    39         rLED3 <= 1'd1;
    40     else
    41         rLED3 <= 1'd0;
    42         
    43 assign LED3 = rLED3;
    44 
    45 endmodule

      led4_module:

     1 /****************************************
     2 *文件名:led4_module.v
     3 *功能:实现第四个流水灯扫描效果
     4 ****************************************/
     5 
     6 module led4_module(
     7     CLK,RST_n,
     8     LED4
     9 );
    10 
    11 input CLK;
    12 input RST_n;
    13 output LED4;
    14 
    15 //************************************
    16 //因为扫描周期为1s,所以每个灯亮0.25s
    17 //50MHZ的晶振下计数值为12_500_000
    18 parameter COUNT_1S = 26'd50_000_000;
    19 
    20 
    21 //************************************
    22 reg [25:0]count;
    23 
    24 always @(posedge CLK or negedge RST_n)
    25     if(!RST_n)
    26         count <= 26'd0;
    27     else if(count == COUNT_1S)
    28         count <= 26'd0;
    29     else
    30         count <= count + 1'b1;
    31         
    32 //***************************************
    33 reg rLED4;
    34 
    35 always @(posedge CLK or negedge RST_n)
    36     if(!RST_n)
    37         rLED4 = 1'd0;
    38     else if(count >= 26'd37_500_000 && count <= 26'd50_000_000)
    39         rLED4 <= 1'd1;
    40     else 
    41         rLED4 <= 1'd0;
    42         
    43 assign LED4 = rLED4;
    44 
    45 endmodule

      led_module:

     1 /*********************************************
     2 *文件名:led_module.v
     3 *功能:实现四位LED流水灯效果(扫描频率为1s)
     4 *平台:win7 64 quartus ii 64bit
     5 *连接:CLK -- 12    RST_n -- 44
     6         LED1-4     --        21-18    (高电平点亮)
     7 *********************************************/
     8 
     9 module led_module(
    10         CLK,RST_n,
    11         LED1,LED2,LED3,LED4
    12 );
    13 
    14 input CLK;
    15 input RST_n;
    16 output LED1;
    17 output LED2;
    18 output LED3;
    19 output LED4;
    20 
    21 led1_module U1(
    22     .CLK(CLK),
    23     .RST_n(RST_n),
    24     .LED1(LED1)
    25 );
    26 
    27 led2_module U2(
    28     .CLK(CLK),
    29     .RST_n(RST_n),
    30     .LED2(LED2)
    31 );
    32 
    33 led3_module U3(
    34     .CLK(CLK),
    35     .RST_n(RST_n),
    36     .LED3(LED3)
    37 );
    38 
    39 led4_module U4(
    40     .CLK(CLK),
    41     .RST_n(RST_n),
    42     .LED4(LED4)
    43 );
    44 
    45 endmodule

      在软件综合过后,下载到板子里,可以看到最终实现流水灯效果~~~

  • 相关阅读:
    线程中更新ui方法汇总
    Chromium Embedded Framework
    adb提取安装的apk
    下拉列表 Spinner
    更改activity切换方式
    左右页面滑动
    静态成员函数(面向对象的static关键字)
    静态数据成员(面向对象的static关键字)
    静态函数(面向过程的static关键字)
    静态局部变量(面向过程的static关键字)
  • 原文地址:https://www.cnblogs.com/zhq-blog/p/6186797.html
Copyright © 2011-2022 走看看