永远的流水灯(Verilog)

1. 为了更好地学习FPGA和深入理解Verilog语法,首先从最简单的流水灯做起。虽然简单,但是也包含了不少知识。通过这次实验项目,可以了解开发软件的使用及Verilog的编程方法,熟悉模块化设计的方法。

2. 该项目主要实现的功能为:

(1)10位的流水灯

(2)中间两个led灯每隔100ms闪烁一次

(3)两边的led灯每隔100ms流动一下,从中间向两边流水。

3.  具体实现如下

(1)首先定义一个时间计数寄存器counter,每当达到预定的100ms时,计数寄存器就清零,否则的话寄存器就加1。然后计算计数器计数的最大值。时钟频率为50MHZ,也就是周期为1/50M 为20ns,要计数的最大值为T100MS= 100ms/20ns-1 = 4999_999。

代码实现为

always @ (posedge clk or negedge rst)

if(!rst)      //高电平复位

counter<=25‘d0;

else if(counter==T100ms)

counter<=25‘d0;

else

counter<=counter+1‘b1;

(2)如何控制led的亮灭呢,无非就是给端口赋高低电平,有的是高电平亮,有的是低电平亮,我用的FPGA学习板为高电平亮。每隔100ms对其端口值取反就可以实现闪烁的led

(3)流水灯的实现。在FPGA中实现流水灯的方法有很多种,我只列取了三种供参考学习。首先是运用FPGA的并行处理特点,建立四个always模块分别对每隔led分别控制,所对应的时序图如图1-a,每一个模块控制相应的led灯,彼此之间互不影响,依靠总的时钟进行工作。

图1-a

这种方法能够充分体现FPGA并行处理的特点,实现起来也很容易。

顶层代码为

moduletop_module(CLK, RSTn, LED_Out);

input CLK;

input RSTn;

output [3:0]LED_Out;

wire LED1_Out;

led1_module U1

(

.CLK(CLK),

.RSTn(RSTn),

.LED_Out(LED1_Out)

);

wire LED2_Out;

led2_module U2

(

.CLK(CLK),

.RSTn(RSTn),

.LED_Out(LED2_Out)

);

wire LED3_Out;

led3_module U3

(

.CLK(CLK),

.RSTn(RSTn),

.LED_Out(LED3_Out)

);

wire LED4_Out;

led4_module U4

(

.CLK(CLK),

.RSTn(RSTn),

.LED_Out(LED4_Out)

);

assign LED_Out = {LED4_Out, LED3_Out,LED2_Out, LED1_Out};

第二种方法为循环移位法。通过给led赋初值,然后循环左移或者循环右移,但是需要设置一个条件。否则就会出现溢出的情况。如图2-a设置一个条件当要出现溢出的时候让它回到初始的状态,这样就可以实现流水了。

图2-a

代码实现为

always @(posedge clk or negedge rst)

if(!rst)

led<=4‘b0001;        //初值,最低位led[0]灯亮

else if(counter==T100ms)

begin

if(led==4‘b0000)      //当溢出最高位时

led<=4‘b0001;    //回到复位时的状态

else

led<=led<<1;     //循环左移一位

end

第三种数据拼接法,所谓的数据拼接就把原来的数据拆成一位一位的,在特定位置上拼接上一个数。例如在4位的led的低位拼接一个1. Led[3:0]<={led[2:0],1’b1};接即实现了数据的拼接,当然可以实现任意位,任意bit数的拼。和循环移位类似,数据拼接的实现只是把移位命令改成拼接的命令即可。

时间: 2024-12-30 07:41:26

永远的流水灯(Verilog)的相关文章

【黑金教程笔记之002】【建模篇】【Lab 01 永远的流水灯】—笔记&amp;勘误

学习并行操作的思想. 勘误001: Page 17,模块图下方,“扫描频配置定为100Hz”应为10Hz. 勘误002: Page 17,最后一行 “10ms”应为100ms:“2.5ms”应为25ms:(ps:这里用1000ms,每个led亮250ms效果比较明显) 源码如下: 1 /************************************************* 2 module name:led0_module.v 3 function:drive led on for

花样流水灯的verilog实现

LED(Light emitting diode)发光二极管将电能转化为可见光,正向电压导通,反向电压截止.对于该板子,二极管用低电压导通,其实验原理图为: 所谓流水灯,即让LED像水一样的点亮,从左向右依次点亮,最右位点亮后,再从左向右移动.以下是以移位方式实现的verilog代码: module led( clk, //50M时钟输入 reset, //复位信号,高电平复位 led //led输出 ); input clk; input reset; output[7:0] led; wir

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

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

第一个FPGA工程—LED流水灯

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

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开发板 第四章 流水灯实验 关于流水灯,网上有太多的例子了.其实只要掌握上面分频计数的技巧,设计流水灯是件极其简单的事情.从

【黑金教程笔记之003】【建模篇】【Lab 02 闪耀灯和流水灯】—笔记

(1)       扫描频率和闪耀频率? 模块: /**************************************** module name:flash_module function:flash a led at 10Hz by yf.x 2014-11-4 ***************/ module flash_module( CLK, RST_n, LED ); input CLK,RST_n; output LED; /************************

FPGA 流水灯

VerilogHDL那些事儿_建模篇(黑金FPGA开发板配套教程) 作者:akuei2 说明:参照该书将部分程序验证学习一遍 学习时间:2014年5月2号 主要收获: 1. 对FPGA有初步了解: 2. 功能模块和控制模块: 3. 并行操作的思维: 4. 使用"并行操作"进行流水灯实验. FPGA是什么? 1. 一个很好的比喻是:FPGA是"一堆乐高积木",而Verilog是"搭积木的手".FPGA并没有实际的形状,要通过Verilog描述出形状

2. 流水灯小计

流水灯里面注意的问题 在学习单片机时我们刚开始都是通过点亮一个LED灯来给我们自己一个真实的直观的认识,因此在建立的第一个FPGA工程的时候,我们也使用了一个点亮LED的范例,这里我们将讨论在FPGA中如何实现点亮LED这一话题. 1.程序编写  一般FPGA的核心电平是1.2V,管脚电平是3.3V,所以,要想点亮哪个LED,只要给连接的那个管脚赋0,不点亮赋1就可以了(注意此处对管脚赋0或1取决于硬件电路的设计,一般来讲如果LED的负极挂接在FPGA的IO口上时则赋0点亮,反之赋1点亮). 点

(原创)基于FPGA的调光流水灯(Verilog,CPLD/FPGA)

1.Abstract     前几天做了一个呼吸灯,觉得确实挺有意思的:可惜的是只有一个灯管亮,板子上有四个灯,要是能让这些灯有序地亮起来,那应该更有趣味了!跟传统的一样,逻辑上做成一个流水灯的样式,这种带有PWM调光的吸引样式,真可谓是超级流水灯了.     做这个是在已做好的呼吸灯的基础上进行添加功能的,整理好了也在随笔里边,这里就直接引用出来.     基于Verilog的PWM呼吸灯:http://www.cnblogs.com/hechengfei/p/4106538.html 2.C