花样流水灯的verilog实现

LED(Light emitting diode)发光二极管将电能转化为可见光,正向电压导通,反向电压截止。对于该板子,二极管用低电压导通,其实验原理图为:

所谓流水灯,即让LED像水一样的点亮,从左向右依次点亮,最右位点亮后,再从左向右移动。以下是以移位方式实现的verilog代码:

module led(
            clk,  //50M时钟输入
            reset,    //复位信号,高电平复位
            led      //led输出
);

input clk;
input reset;
output[7:0] led;

wire clk,reset;

reg [7:0]led,led_temp;
reg [40:0] count;    //分频计数器,系统时钟频率过高,需要计数的方式来产生延时,使led保持状态一段时间

always @ (posedge clk or negedge reset)
    begin
     if(!reset)//复位
       begin
           led_temp<=8‘h80;
           count<=41‘h0;
       end
      else
        begin
          count<=count+1;
          if(count==41‘hff_ff_ff)    //判别counter数值,做输出处理
            begin
             led_temp<=led_temp>>1;
             led<=~led_temp;
             count<=0;
             if(led_temp==8‘h01)
               led_temp<=8‘h80;
            end
        end
    end
endmodule

花样流水灯根据循坏赋值方式实现:

module led_water(clk,led,reset);
input clk;
input reset;
output [7:0] led;

reg [7:0] led;
reg [23:0] counter;
reg [4:0] led_state;
reg clk_div;

always @(posedge clk)
  begin
     if(counter==24‘h500000)
      begin
        clk_div<=~clk_div;
        counter<=24‘h000000;
      end
     else
        counter<=counter+1‘b1;
  end 

always @(posedge clk_div or negedge reset)
  begin
    if(!reset)
      begin
       led<=8‘hff;
       led_state<=4‘b0000;
      end
    else
     begin
      case (led_state)
        5‘b00000: led<=8‘b1111_1110;
        5‘b00001: led<=8‘b1111_1101;
        5‘b00010: led<=8‘b1111_1011;
        5‘b00011: led<=8‘b1111_0111;
        5‘b00100: led<=8‘b1110_1111;
        5‘b00101: led<=8‘b1101_1111;
        5‘b00110: led<=8‘b1011_1111;
        5‘b00111: led<=8‘b0111_1111;

        5‘b01000: led<=8‘b1011_1111;
        5‘b01001: led<=8‘b1101_1111;
        5‘b01010: led<=8‘b1110_1111;
        5‘b01011: led<=8‘b1111_0111;
        5‘b01100: led<=8‘b1111_1011;
        5‘b01101: led<=8‘b1111_1101;
        5‘b01110: led<=8‘b1111_1110;

        5‘b01111: led<=8‘b1110_0111;
        5‘b10000: led<=8‘b1101_1011;
        5‘b10001: led<=8‘b1011_1101;
        5‘b10010: led<=8‘b0111_1110;

        5‘b10011: led<=8‘b1011_1101;
        5‘b10100: led<=8‘b1101_1011;
        5‘b10101: led<=8‘b1110_0111;

        5‘b10110: led<=8‘b1010_1010;
        5‘b10111: led<=8‘b0101_0101;

        5‘b11000: led<=8‘b1000_0000;
        5‘b11001: led<=8‘b0100_0000;
        5‘b11010: led<=8‘b0010_0000;
        5‘b11011: led<=8‘b0001_0000;
        5‘b11100: led<=8‘b0000_1000;
        5‘b11101: led<=8‘b0000_0100;
        5‘b11110: led<=8‘b0000_0010;
        5‘b11111: led<=8‘b0000_0001;
        default:led<=8‘b1111_1111;
      endcase
     led_state<=led_state+1‘b1;
    end
  end
endmodule

综合优化后,板子呈现花样流水灯样式。

时间: 2024-10-12 18:32:50

花样流水灯的verilog实现的相关文章

C51单片机实现呼吸灯和花样流水灯程序

1.用C51单片机实现花样流水灯,代码如下: #include <reg52.h> #define LED_A P1 //led灯所用的接口,是哪个口就写P几void delayms(){ unsigned char x = 0; unsigned char i; unsigned char y = 0; while(y < 0.001) //定义led灯的切换的延时时间,越小越快. {   //(y < 0.001);(x<100);(i<100)都可以修改 x =

呼吸灯和花样流水灯 51单片机实现

1.用C51单片机实现花样流水灯,代码如下: #include <reg52.h> #define LED_All P1 //led灯所用的接口,单片机接口不同,led灯不同void delayms(){unsigned char x = 0; unsigned char i;unsigned char y = 0;while(y < 0.001) //定义led灯的切换的延时时间,越小越快{   //i,x,y均可以修改x = 0; while(x<100){i = 0;whil

永远的流水灯(Verilog)

1. 为了更好地学习FPGA和深入理解Verilog语法,首先从最简单的流水灯做起.虽然简单,但是也包含了不少知识.通过这次实验项目,可以了解开发软件的使用及Verilog的编程方法,熟悉模块化设计的方法. 2. 该项目主要实现的功能为: (1)10位的流水灯 (2)中间两个led灯每隔100ms闪烁一次 (3)两边的led灯每隔100ms流动一下,从中间向两边流水. 3.  具体实现如下 (1)首先定义一个时间计数寄存器counter,每当达到预定的100ms时,计数寄存器就清零,否则的话寄存

20180805 玩玩FPGA开发,学学Verilog,学学基本操作,制作流水灯

20180805 玩玩FPGA开发,学学Verilog,学学基本操作,制作流水灯 我毕业设计做的就是FPGA,但是什么都没有学.校外毕设老师对我非常无奈,不过还好,校内的指导老师送了我一个很久很久的开发板,配套的教程是2010年的竞赛教程,教程里的截图很显然的win7风格--下面是老师送的开发板上的照片,能玩的地方有:小灯和数码管,还有一个VGA的输出接口.(家里没有VGA线,懒得买,所以就不玩这个了) 图:老师送的板子和下载线 一.开发环境搭建 这点没什么可说的,就是下载一个ISE14.7(板

MiS603开发板 第四章 流水灯实验

作者:MiS603开发团队 日期:20150911 公司:南京米联电子科技有限公司 论坛:www.osrc.cn 网址:www.milinker.com 网店:http://osrc.taobao.com EAT博客:http://blog.chinaaet.com/whilebreak 博客园:http://www.cnblogs.com/milinker/ MiS603开发板 第四章 流水灯实验 关于流水灯,网上有太多的例子了.其实只要掌握上面分频计数的技巧,设计流水灯是件极其简单的事情.从

四位流水灯Led_4

流水灯实验是我们学习开发板或语言的入门程序,通过流水灯这个可视化的实验,会增加我们对学习语言的乐趣, 会让我们觉得其实语言也是可以玩出花样的,接下来呈上代码,大家可以下到自己的板子里试试,. //Led_4.v module Led_4(clk,rst,led); input clk; input rst; output [3:0] led; reg [3:0] led; always @(posedge clk or negedge rst) begin if(!rst) begin led

第一个FPGA工程—LED流水灯

这一章我们来实现第一个FPGA工程-LED流水灯.我们将通过流水灯例程向大家介绍一次完整的FPGA开发流程,从新建工程,代码设计,综合实现,管脚约束,下载FPGA程序.掌握本章内容,大家就算正式的开始入门FPGA开发了. 1.1.1.电路说明 1.1.2.新建工程 第一步:从开始菜单启动Quartus II 13.1(64 bit) ,如下图. 第二步:菜单栏选择File->New Project Wizard,新建工程. 第三步:弹出新建工程对话框,点击Next,下一步. 第三步:如下图,依次

[51单片机] EEPROM 24c02 [I2C代码封装-保存实现流水灯]

这里把EEPROM 24c02封装起来,今后可以直接调用,其连线方式为:SDA-P2.1;SCL-P2.0;WP-VCC >_<:i2c.c 1 /*----------------------------------------------- 2 名称:IIC协议 3 内容:函数是采用软件延时的方法产生SCL脉冲,固对高晶振频率要作 一定的修改....(本例是1us机器 4 周期,即晶振频率要小于12MHZ) 5 ---------------------------------------

3. 戏说VHDL之入门游戏一:流水灯

一.   流水灯 1.1流水灯原理 流水灯是每个学电子的入门“游戏” ,示意图如图1,其原理极其简单,但是可玩性却极强,可以就8个LED写出不同花样的程序.在1.2中我们列出两个不同思路的代码作为VHDL的入门例程. 图1 流水灯电路图 1.2 流水灯例程 这里提供两个不同的代码. 第一个代码的思路是先对系统时钟分频,产生1s信号(即变量count取值到25000000,这样分频时间=20ns*25000000*2=1s),然后使用移位操作符指令进行操作.该指令是在VHDL93中引入的,包括sl