fpga简单流水灯实验代码
基于FPGA的verilog的流水灯程序
基于FPGA的流水灯verilog程序`define cnt 17d7840 //cnt是计数量此处计时0.5s。
我调试的板子晶振频率是50MHZ。
32’h17d7840就是0.5s 。
这个十六进制的数值你可以用电脑自带的计数器转换的。
`define cnt_n 17d7841 //cnt值加一,用于下边的计数寄存器led_cnt的复位module led_new (clk,rest,led);input clk;input rest;output [7:0]led;reg [7:0]led;reg [7:0]led_n;reg [31:0] led_cnt;always@(posedge clk or negedge rest)beginif(!rest) led<=8'h80;else led<=led_n;endalways@(*)beginif(!rest) led_n=8'h00;else if(led_cnt==32'h`cnt) led_n={led[6:0],led[7]};else led_n=led;endalways@(posedge clk or negedge rest)beginif(!rest) led_cnt<=32'h0;else if(led_cnt==32'h`cnt_n) led_cnt<=32'h0;else led_cnt<=led_cnt+1'b1;endendmodule十进制数转换成十六进制的操作:先在电脑的开始》附件》计数器;打开计数器,点击“科学型”,窗口右边的键盘输入你想要的计数值,然后再点十六进制就行了QUARTUS II里面的引脚绑定其中clk是芯片内部时钟,仔细观察板子,观察晶振连进板子的那个引脚就是时钟引脚了。
我板子上边标示的是clk0/17。
注意:把程序复制进去的时候请把那些注释删掉,因为我写那些注释只是在WORD文档写而已的。
基于FPGA的LED流水灯与按键消抖实验
基于FPGA的LED流水灯与按键消抖实验1.实验目的(1)通过实验进一步学习Quartus II软件的使用方法。
(2)通过实验学习流水灯的设计原理。
(3)通过实验学习按键消抖(边沿检测法)的基本原理。
2.实验仪器设备(1)FPGA开发实验箱。
(2)数字万用表。
(3)电脑。
3.预习(1)复习FPGA开发有关的流程。
(2)复习Verilog HDL语言语法。
(3)复习实验所用的相关原理。
(4)按要求编写实验中要求的硬件描述语言程序。
4.实验原理(1)LED流水灯。
流水灯是一个典型的FPGA程序设计,通过控制8位led向左依次循环点亮,达到对硬件语言、软件开发平台等的初步认识。
①if语句的使用。
Verilog HDL语言中的if语句与C语言中的十分相似,其使用方法有以下三种:a.if(条件1)语句块1;b.if(条件1)语句块1;else 语句块2;c.if(条件1)语句块1;else if(条件2)语句块2;……else if(条件n)语句块n;else 语句块n+1。
在上述三种方式中,“条件”一般为逻辑表达式或关系表达式,也可以是一位的变量。
如果表达式的值出现0(假),x(未知),z(高阻),则全部按“假”来处理;若为“1”,则按“真”来处理。
语句块若为单句,直接书写即可;若为多句,则需要用“begin end”块括起来。
建议无论多句还是单句都用“begin end”括起来。
②case语句的使用。
case语句是一个多路条件分支语句,常用于多路译码、状态机和微处理机的指令译码等场合。
case语句的语法格式为:case(条件表达式)分支1:语句块1;分支2:语句块2;……default:语句块nendcase其中,“分支n”通常都是一些常量表达式。
case语句先对“条件表达式”求值,然后同时并行对各分支项求值并进行比较,这是与if语句最大不同。
比较完成后,与条件表达式值相匹配的分支中的语句被执行。
分支项需要互斥,否则会出现逻辑矛盾。
最新verilog语言的FPGA变速花样流水灯设计
v e r i l o g语言的F PG A变速花样流水灯设计基于XILINX--XSE500E型FPGA的变速流水灯以及花样流水灯的verilog语言设计摘要临近大四毕业,诸多工科院校电子电科通信等专业会选择用FPGA项目作为课程设计的课题,笔者同样经历了这个过程,收获颇多,在此将设计成果在此分享,以帮助大家更好掌握FPGA设计。
FPGA种类繁多,时效性非常好,设计过程中十分注重实时性,在时间点控制上非常优秀。
此次设计采用XILINX的XSE500E型芯片的开发板,芯片采用FG320型接口,速度级别-4。
板载时钟50MHz,如需其他时钟周期,可采用IP 核中的clocking,其中的 DCM可以实现变频,引入DCM,输入频率50MHz,输出频率填入需要的频率即可,之后进行实例化。
此外,可以借助计数器进行延时减速,此次设计采用了计数器延时方法。
本次列举了四种流水灯相关设计:普通流水灯(向左和向右滚动),自动反复式流水灯(到最右端自动向左滚动,到左端自动向右滚动),花样流水灯,变速流水灯。
谢谢大家的支持!正文一,普通流水灯1,建模思想普通流水灯,可以向右滚动,到最右端返回最左端,也可以向左滚动,到最左端返回最右端。
普通流水灯模块涉及的端口有:clk,它是时钟输入,一般就是板载时钟,这里是50MHz,具体参照开发板说明。
还有复位输入rst,高电平有效。
此外就是led端口,这个端口有8根管脚,共8位,连接8个led灯。
采用verilog语言,端口定义格式如下:module led(input clk,input rst,output reg[7:0] led //此行定义说明led端口既是驱动管脚的,又是寄存器);采用过程建模,这里不采用行为建模和功能建模,因为这个过程就是一个大循环,规律性极强。
由于板载时钟50MHz,如果每个时钟周期都要滚动流水灯,那么速度是惊人的,人眼根本无法分辨。
所以采用计数器延时,当计数达到约4千万时候,驱动系统进行动作,可以判断,也可以进行流水灯动作。
FPGA基础试验之流水灯
综合实验报告第四组组长:韩欢02081535陈洁钰02081536侯旭涛02081514高耀02081510李欣昊02081508李昊02081506FPGA基础试验之流水灯一、实验目的通过此实验进一步了解、熟悉和掌握Quartus II开发软件的使用方法及Verilog 语言的编程方法。
学习简单时序电路的设计分析和硬件测试。
二、实验内容1.熟悉信号产生板中的FPGA的普通I/O的连接;2.根据实际的流水灯分析时序,体会用Verilog语言的编程产生相应时序;3.熟悉集成开发工具Quartus II,学会使用Quartus II对Cyclone系列FPGA的程序开发、编译与调试;4.掌握Cyclone系列FPGA的程序加载,熟练掌握将.sof文件加载到实验板的FPGA中,实现流水灯的效果。
三、实验原理流水灯,顾名思义就是让LED像水一样的点亮。
如果把流水做慢动作播放,可以想象到其实就是移动,即:把水块不断地向同一方向移动,而原来的水块保持不动,就形成了流水。
同样,如果使得最左边的灯先亮,然后通过移位,在其右侧的灯,从左向右依次点亮,而已经亮的灯又不灭,便形成了向右的流水灯。
初始状态时,四个灯都不亮,每来一个时钟脉冲,CLK,计数器就加1.这样通过移位依次点亮所有的灯,就形成了流水灯。
而当四个灯都点亮时,需要一个操作使得所有的灯恢复为初始状态。
然后,再一次流水即可。
如果是右移位,就出现向右流水的现象;反之,向左流水。
四、实验要求控制4个LED进行花式显示,根据硬件设施设计两种模式:S0:从全亮到全灭,再到全亮,依次循环;S1:从LED0开始依次点亮,为LED1亮,LED2亮,LED3亮,后再LED2亮,LED1亮,LED0亮,不停循环。
即输出为:S0时,从0000到1111不停循环转换;S1时,0111,1011,1101,1110,1101,1011,0111不断循环。
五、实验步骤(1)建立工程(2)建立Verilog文件,编写相关程序(3)将verilog文件编译为可视化电路图文件(4)将可视化电路图文件添加输入输出组合成电路图文件(5)编译语法及验证原理图(6)根据需要分配管脚并进行编译(7)下载编译后得到的文件.sof(在线方式),.pof(离线方式)。
verilog实验报告流水灯数码管秒表交通灯
流水灯实验目的:在basys2开发板上实现LED灯的花样流水的显示,如隔位显示,依次向左移位显示,依次向右移位显示,两边同时靠中间显示。
实验仪器:FPGA开发板一块,计算机一台。
实验原理:当一个正向的电流通过LED时,LED就会发光。
当阳极的电压高于阴极的电压时,LED就会有电流通过。
当在LED上增添一个典型值为1.5V—2.0V之间的电压时,LED就会有电流通过并发光。
实验内容:顶层模块:输入信号:clk_50MHz(主时钟信号),rst(重置信号),输出信号:[7:0] led(LED灯控制信号)。
module led_top(clkin,rst,led_out);input clkin, rst;output [7:0] led_out;wire clk_1hz;divider_1hz d0(clkin, rst, clk_1hz);led l0(clk_1hz, rst, led_out);endmodule分频模块:module divider_1hz(clkin,rst,clkout);input clkin,rst;output reg clkout;reg [24:0] cnt;always@(posedge clkin, posedge rst)beginif(rst) begincnt<=0;clkout<=0; endelse if(cnt==24999999) begincnt<=0;clkout=!clkout; endelse cnt<=cnt+1;endendmodule亮灯信号模块:module led(clkin,rst,led_out);input clkin,rst;output [7:0] led_out;reg [2:0] state;always@(posedge clkin, posedge rst)if(rst) state<=0;else state<=state+1;always@(state)case(state)3'b000:ledout<=8'b0000_0001;3'b001:ledout<=8'b0000_0010;3'b010:ledout<=8'b0000_0100;3'b011:ledout<=8'b0000_1000;3'b100:ledout<=8'b0001_0000;3'b101:ledout<=8'b0010_0000;3'b110:ledout<=8'b0100_0000;3'b111:ledout<=8'b1000_0000;endcaseendmodule实验中存在的问题:1 芯片选择问题automotive spartan3EXA3S100E XA3S250E CPG132spartan3EXC3S100E XC3S250E CP1322 时序逻辑部分,阻塞赋值和非阻塞赋值混用always@(posedge clk)begina=b+c;d<=e+f;end3 UCF文件格式错误NET “CLK” LOC = “B8”;NET “a” LOC = “N11”;NET “b” LOC = “G13”;NET “c[0]”LOC =“K11;数码管实验目的:设计一个数码管动态扫描程序,实现在四位数码管上动态循环显示“1”、“2”“3”“4”;实验仪器:FPGA开发板一块,计算机一台。
关于FPGA应用软件VIVADO的使用心得体会与操作流程流水灯
6、确认相关信息与设计所用的的 FPGA 器件信息是否一致,一致请点击 Finish,不一致,请返
依元素科技有限公司
3
Xilinx 全球合作伙伴
回上一步修改。
方案标准
7、得到如下的空白 Vivado 工程界面,完成空白工程新建。
二、设计文件输入 1、如下图所示,点击 Flow Navigator 下的 Project Manager->Add Sources 或中间 Sources 中的 对话框打开设计文件导入添加对话框。
方案标准
6、在弹出的 Define Module 中的 I/O Port Definition,输入设计模块所需的端口,并设置端口方 向,如果端口为总线型,勾选 Bus 选项,并通过 MSB 和 LSB 确定总线宽度。完成后点 OK。
注:led 实际宽度与代码中一致,也可在代码中修改。
7、新建的设计文件(此处为 flowing_light.v)即存在于 Sources 中的 Design Sources 中。双击 打开该文件,输入相应的设计代码。
4、选择 RTL Project 一项,并勾选 Do not specify sources at this time,勾选该选项是为了跳过
依元素科技有限公司
2
Xilinx 全球合作伙伴
在新建工程的过程中添加设计源文件。点击 Next。
方案标准
5、根据使用的 FPGA 开发平台,选择对应的 FPGA 目标器件。 在本手册中,以 Xilinx 数模混 合口袋实验室 为例,FPGA 采用 Artix-7 XC7A35T-1CSG324-C 的器件,即 Family 和 Subfamily 均 为 Artix-7,封装形式(Package)为 CSG324,速度等级(Speed grade)为-1,温度等级(Temp Grade) 为 C)。点击 Next。
fpga流水灯实验报告
竭诚为您提供优质文档/双击可除fpga流水灯实验报告篇一:vhdl流水灯课程设计报告院系:姓名:学号:课程设计名称:指导老师:时间:摘要VhDL的特点应用VhDL进行系统设计,有以下几方面的特点。
(一)功能强大VhDL具有功能强大的语言结构。
它可以用明确的代码描述复杂的控制逻辑设计。
并且具有多层次的设计描述功能,支持设计库和可重复使用的元件生成。
VhDL是一种设计、仿真和综合的标准硬件描述语言。
(二)可移植性VhDL语言是一个标准语言,其设计描述可以为不同的eDA工具支持。
它可以从一个仿真工具移植到另一个仿真工具,从一个综合工具移植到另一个综合工具,从一个工作平台移植到另一个工作平台。
此外,通过更换库再重新综合很容易移植为AsIc设计。
(三)独立性VhDL的硬件描述与具体的工艺技术和硬件结构无关。
设计者可以不懂硬件的结构,也不必管最终设计实现的目标器件是什么,而进行独立的设计。
程序设计的硬件目标器件有广阔的选择范围,可以是各系列的cpLD、FpgA及各种门阵列器件。
(四)可操作性由于VhDL具有类属描述语句和子程序调用等功能,对于已完成的设计,在不改变源程序的条件下,只需改变端口类属参量或函数,就能轻易地改变设计的规模和结构。
(五)灵活性VhDL最初是作为一种仿真标准格式出现的,有着丰富的仿真语句和库函数。
使其在任何大系统的设计中,随时可对设计进行仿真模拟。
所以,即使在远离门级的高层次(即使设计尚未完成时),设计者就能够对整个工程设计的结构和功能的可行性进行查验,并做出决策。
VhDL的设计结构VhDL描述数字电路系统设计的行为、功能、输入和输出。
它在语法上与现代编程语言相似,但包含了许多与硬件有特殊关系的结构。
VhDL将一个设计称为一个实体entity(元件、电路或者系统),并且将它分成外部的可见部分(实体名、连接)和内部的隐藏部分(实体算法、实现)。
当定义了一个设计的实体之后,其他实体可以利用该实体,也可以开发一个实体库。
verilog语言的FPGA变速花样流水灯设计
基于XILINX--XSE500E型FPGA的变速流水灯以及花样流水灯的verilog语言设计摘要临近大四毕业,诸多工科院校电子电科通信等专业会选择用FPGA项目作为课程设计的课题,笔者同样经历了这个过程,收获颇多,在此将设计成果在此分享,以帮助大家更好掌握FPGA设计。
FPGA种类繁多,时效性非常好,设计过程中十分注重实时性,在时间点控制上非常优秀。
此次设计采用XILINX的XSE500E型芯片的开发板,芯片采用FG320型接口,速度级别-4。
板载时钟50MHz,如需其他时钟周期,可采用IP核中的clocking,其中的 DCM可以实现变频,引入DCM,输入频率50MHz,输出频率填入需要的频率即可,之后进行实例化。
此外,可以借助计数器进行延时减速,此次设计采用了计数器延时方法。
本次列举了四种流水灯相关设计:普通流水灯(向左和向右滚动),自动反复式流水灯(到最右端自动向左滚动,到左端自动向右滚动),花样流水灯,变速流水灯。
谢谢大家的支持!正文一,普通流水灯1,建模思想普通流水灯,可以向右滚动,到最右端返回最左端,也可以向左滚动,到最左端返回最右端。
普通流水灯模块涉及的端口有:clk,它是时钟输入,一般就是板载时钟,这里是50MHz,具体参照开发板说明。
还有复位输入rst,高电平有效。
此外就是led端口,这个端口有8根管脚,共8位,连接8个led灯。
采用verilog语言,端口定义格式如下:module led(input clk,input rst,output reg[7:0] led //此行定义说明led端口既是驱动管脚的,又是寄存器);采用过程建模,这里不采用行为建模和功能建模,因为这个过程就是一个大循环,规律性极强。
由于板载时钟50MHz,如果每个时钟周期都要滚动流水灯,那么速度是惊人的,人眼根本无法分辨。
所以采用计数器延时,当计数达到约4千万时候,驱动系统进行动作,可以判断,也可以进行流水灯动作。
fpga流水灯课程设计
大规模数字逻辑课程设计题目:流水灯控制专业电信班级091学号8学生姓名dashitou设计时间2011-2012学年上学期教师评分2011年10 月29 日目录一、概述........................................ 错误!未定义书签。
二、 EDA技术发展及介绍........... 错误!未定义书签。
(一) EDA技术的介绍 ......................................................................... 错误!未定义书签。
(二) EDA技术的发展趋势.................................................................. 错误!未定义书签。
三、程序代码................................ 错误!未定义书签。
(一) 分频器代码................................................................................... 错误!未定义书签。
(二) 分频器block ................................................................................. 错误!未定义书签。
(三) 主程序代码................................................................................... 错误!未定义书签。
(四) 主程序block ................................................................................. 错误!未定义书签。
FPGA入门系列实验教程——LED流水灯
艾米电子工作室FPGA入门系列实验教程FPGA入门系列实验教程V1.0前言目前市场销售FPGA开发板的厂商很多,但大多只提供些简单的代码,没有详尽的文档和教程提供给初学者。
经验表明,很多学生在学习FPGA设计技术的过程中,虽然刚开始学习热情很高,但真正坚持下来一直到“学会”的却寥寥无几,除了学生个人毅力的因素外,另外一个更主要的原因就是所选的开发板缺少配套的说明文档和手把手系列的入门教程。
原本FPGA的学习门槛相对于单片机来说就高了不少,再加上缺少手把手系列教程资料,这就给初学者学习FPGA增添了更多的困难,很多初学者因为找不到入门的方法而渐渐失去了学习FPGA的兴趣和信心。
作者从接著到系统学习FPGA有两年多的时间了,学习FPGA的时间不长,期间因为没有专业的老师指导,自己摸索学习FPGA走了很多的弯路。
有过问题迎刃而解的快乐,也有过苦苦寻求结果和答案的痛苦历程,回想起自己学习FPGA的历程,从开始的茫然,到后来的疯狂看书,购买开发板,在开发板上练习各种FPGA实例,到最后能独立完成项目,一路走来,感受颇多。
发觉学习FPGA只要选择正确的方法是有捷径可走的,有很多人学习FPGA很长时间,因为没有找到正确的方法还是停留在入门阶段。
针对现状,作者从初学者的角度出发,结合作者学习FPGA的经验和亲身体会,遵循“宁可啰嗦一点,也不放过细节”的原则编写了详尽的实验教程作为艾米电子工作室开发套件的配套教程使用,主要面向FPGA初学者。
FPGA的学习只有通过大量的操作与实践才能很好并快速的掌握。
为此本实验教程从点亮LED 灯写起,深入浅出,以图文并茂的方式由易到难地列举了很多实例,采用手把手、Step by Step的方式让初学者以最快的方式掌握FPGA技术的开发流程以及Quartus II软件的使用,从而激起初学者学习FPGA的兴趣。
在教程中作者采用“授人以渔”的方式,努力做到不仅讲述怎样进行试验,而且分析为什么这样做,以便初学者深刻理解并快速掌握FPGA的学习方法。
基于FPGA的数字电路实验7:流水灯的实现
基于FPGA的数字电路实验7:流水灯的实现原创 Daniel继年前介绍的时序逻辑电路之时钟分频后,今天我们来介绍第7讲:流水灯。
流水灯,有时候也叫跑马灯,是一个简单、有趣又经典的实验,基本所有单片机的玩家们在初期学习的阶段都做过。
本次我们也来介绍一下如何通过小脚丫FPGA实现一个流水灯。
流水灯就是让一连串的灯在一定时间内先后点亮并循环往复,所以其中的关键要领就在于控制每两个相邻LED亮灭的时间差,以及所有LED灯完成一组亮灭动作后的循环。
很久都没有用过小脚丫的朋友可以再回顾一下,这上面有8个LED灯,且低电平点亮。
实现流水灯的方法绝不止一种,在这里我们采用模块化的设计思路,因为模块化设计对于之后构建大型电路系统非常有帮助,并且我们还可以借机温习一下以前学过的内容。
现在我们的目标是每过1秒后点亮下一个LED灯并且熄灭当前灯,且在第8个灯熄灭之后循环整个流程,该如何设计整个模块?我们先上图后解释。
毫无疑问,第一步需要做的就是通过分频来生成一个周期为1秒的时钟信号,不了解时钟分频童鞋可以读一下本系列的第6篇内容。
有了一个1秒钟嘀嗒一次的时钟后,我们还要考虑到循环问题,因为在第8个LED灯熄灭之后还需要再返回到第1个。
那么这个时候我们就需要一个计数器,它的作用就是数羊,一只,两只…...数到第八只后重头再来。
数8只羊需要一个3位宽的变量(23=8)。
最后,由于我们是要依次点亮,也就是说8位的输出中每次只有1位是低电平,其余均为高电平(小脚丫LED灯为低电平点亮)。
这个特性正好对应了我们之前学过的3-8译码器。
现在我们再来捋一遍。
首先,通过分频在小脚丫上生成一个周期为1秒的慢速时钟信号,这个时钟信号传送到计数器之中;这个计数器是3位宽的,因此最多可以计八次慢速时钟的嘀嗒,并且计数每增加1时,都对应着3-8译码器的下一种输出,也就对应着流水灯的下一个状态。
现在我们上代码:•••••••••••••••••••••••module runningled (clk,led); input clk,rst; output[7:0] le d; reg [2:0] cnt ; / /定义了一个3位的计数器,输出可以作为3-8译码器的输入 wire clk1hz; //定义一个中间变量,表示分频得到的时钟,用作计数器的触发 //例化分频模块,产生一个1Hz时钟信号 divide #(.WIDTH(24),.N(12000000)) u2 ( //除数为12,000,000,因此频率为1Hz .clk(clk), .rst_n(rst), .clkout(clk1hz) ); //生成计数器,上沿触发并循环计数 always@(posedge clk1hz) cnt <=< span=""> cnt +1; // 达到位宽上限后可自动溢出清零 //例化3-8译码器模块 decode38 u1 ( .X(cnt), //例化的输入端口连接到cnt,输出端口连接到led .D(led) );endmodule在第四篇讲译码器的文章里,我们介绍过,如果需要调用/例化子模块时,需要将各子模块与大模块放入同一个工程文件下进行编译。
FPGA流水灯实验报告
1、原始代码与硬件电路module led(Input wire clk,Input wire rst_n,output reg[3:0] led;)reg [25:0] cnt_1sparameter END_CNT1S = 4999999;always @(posedge clk or negedge rst_n)if (!rst_n)cnt_1s <= ‘d0;else if (cnt_1s==END_CNT_1S)cnt_1s <=’d0;else cnt_1s <= cnt_1s+1’b1;always @(posedge clk or negedge rst_n)if(!rst_n)led <= 4’b0001;else if(cnt_1s==END_CNT_1S)case(led)4’b0001: led <= 4’b0010;4’b0010: led <= 4’b0100;4’b0100: led <= 4’b1000;4’b1000: led <= 4’b0001;default: led <= 4’b0000;elseled<= led;endmodule可见引脚输出为1时LED灯被点亮。
本程序中输入时钟为50MHz,所以一个时钟周期为20ns (1/50MHz)。
因此计数器counte通过对50MHz系统时钟计数,计时到0.1s,需要累加0.1s/20ns=5000000次。
每当计时到0.1s计数器清零一次。
2、如何改变流水灯流动的快慢?要改变流水灯的快慢只需改变计数器的计数上限即可,要加快流水灯的速度就把计数器的计数上限降低一些,反之,要减慢流水灯的速度就把计数器的计数上限提高一些,改第七行的数值即可。
原始:parameter END_CNT1S = 4999999;加快速度:parameter END_CNT1S = 3999999;降低速度:parameter END_CNT1S = 9999999;3、如何改变流水灯移动的方向?要改变流水灯的方向,更改第18行到第21行的引脚赋值语句的数值即可原始方向代码:4’b0001: led <= 4’b0010;4’b0010: led <= 4’b0100;4’b0100: led <= 4’b1000;4’b1000: led <= 4’b0001;更改方向后的代码:4’b0001: led <= 4’b1000;4’b0010: led <= 4’b0100;4’b0100: led <= 4’b0010;4’b1000: led <= 4’b0001;。
流水灯verilog设计代码
else if (pin_ctrl==3'b011) begin
state <= DDOUB_RIGHT ;
if (pin_ctrl==3'b000) begin
state <= LEFT ;
end
else if (pin_ctrl==3'b001) begin
else if (pin_ctrl==3'b001) begin
state <= RIGHT ;
end
else if (pin_ctrl==3'b010) begin
end
RIGHT : begin
if (pin_ctrl==3'b000) begin
state <= LEFT ;
end
ERROR : begin
if (pin_ctrl==3'b000) begin
counter32 <= 32'b0;
end
else begin
counter32 <= counter32+1'b1;
end
end
assign clk = counter32[3] ; //16 fen pin
else if (pin_ctrl==3'b011) begin
state <= DDOUB_RIGHT ;
end
end
else begin
state <= ERROR ;
end
else if (pin_ctrl==3'b011) begin
state <= DDOUB_RIGHT ;
FPGA流水灯实验
编写代码的首要任务是管理复杂度,研究表明人能同时关注的智 力模型为 7+2,而嵌套关注通常不超过 5 层。编写一段代码的同时关 注点很容易会超过 9 个。通过智力训练提供关注智力模型数的效果微 乎其微。所以为了能编写任意大规模的代码,把同一时间关注的智力 模型数降低的方法是很有效的。而且软件工程也是在制定相关的编程 规范,对编程限制的基础上发展起来的。VerilogHDL 虽然是硬件描述 语言,但它已经摆脱了原始的电路图输入的方式,具有更高的抽象性, 所以它应该可以应该软件开发中的类似的结论来提高开发效率。就像 高级语言相对于 01 机器码编程一样。我觉得在 verilogHDL 在模仿顺 序操作上更像汇编语言,因为它没有实现顺序,选择,循环结构的相
10
了对 Led_Driver 更高层次的操作,使得操作每个 LED 站在了抽象层, 而不是是底层。
在底层你需要考虑定时器翻转多少次才能到这个时间,然后还要 用这个时间打开或关闭 LED,这样需要考虑的问题很复杂也容易出错。 在抽象层你只需要给什么时候打开或关闭 LED 就够了,它就会自动的 完成翻转工作。抽象性也是人脑处理信息的方式,例如自己的家你甚 至说不清门是什么颜色的,门的把手是什么样式的。人脑对门的处理 是抽象的,它是一个可以开和关的门。你只需要知道这个就可以进入 家中,根本不需要记得门的颜色是什么。
用FPGA实现的流水灯VHDL代码
双击图标选择 bit 文件。右键图标选 择
可编辑
-------------精选文档-----------------
Program
可编辑
-------------精选文档-----------------
设计目的:
在 8 盏 LED 灯每隔一秒钟顺序循环提供高电平使 LED 亮,复位键使 LED 全部置低电平使 LED 灭,重新进行流ED(1) LED(2) LED(3) LED(4) LED(5) LED(6) LED(7)
entity LED_FLASH_VHD is Port ( clk : in STD_LOGIC;
可编辑
-------------精选文档-----------------
rst : in STD_LOGIC; LED_RUN : out STD_LOGIC_VECTOR (7 downto 0)); end LED_FLASH_VHD;
其中 cnt 实现记数功能,对时钟进行分频。 Step 实现让具体哪一盏灯亮。 使用引脚: 复位 rst(Y18)、时钟 clk(D11)、LED 灯(N19、 N15、 R20、R18、U20、
T18、U18、W20);
具体设计:
1、 打开设计软件 Xilinx ISE 11,新建工程 2、 新建 VHDL Module 设置代码,对时钟进行分频: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
可编辑
流水灯电路设计及程序代码
流水灯电路设计及程序代码
#include <reg52.h>
#include<instrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code led[]={0xfe,0xfb,0xfd ,0xf7,0xef,0xbf,0xdf,0x7f};
delayuint z
{
uint x,y;
forx=z;x>0;x--
fory=110;y>0;y--;
}
main
{
uint i;
while1
{
P2=led[];
delay500;
_crol_led,1;
}
}
就是一组灯,然后在控制系统的控制下按照设定的顺序和时间来发亮和熄灭,这样就能形成一定的视觉效果,很多街上的店面和招牌上面就安了流水灯,看上去更美观。
这个原理其实很简单,三极管在电路中充当开关的作用,当电路导通,最左边的LED 首先点亮。
基极串出一电容连接下一个三极管的集电极。
当电容充分充电后,下一个三极管导通使得第二个LED点亮,以此类推。
可以通过调节电容的容量值,来控制流水灯点亮的时间。
感谢您的阅读,祝您生活愉快。