Altera MAX10: LED流水灯

发布时间:2023-11-02  

在时钟分频实验中我们练习了如何处理时钟,接下来我们要学习如何利用时钟来完成时序逻辑。

本文引用地址:

实现是很常见的一个实验,虽然逻辑比较简单,但是里面也包含了实现时序逻辑的基本思想。要用实现有很多种方法,在这里我们会用两种不同的方法实现。
1,模块化设计:在之前的实验中我们做了3-8译码器和时钟分频,如果把这两个结合起来,我们就能搭建一个自动操作的流水LED显示。框图如下:

2,循环赋值:这是一种很简洁的实现效果逻辑,就是定义一个8位的变量,在每个时钟上升沿将最低位赋值给最高位,其他位右移一位,这就实现了循环赋值。这8位输出到LED就能实现流水灯。

模块化设计是用硬件描述语言进行数字电路设计的精髓,代码可重复利用。而且模块化的设计使得程序的结构也很清晰。这里我们首先看看流水灯的模块化设计。利用了之前的3-8译码器和分频器,你需要把这两个程序也拷贝到一个工程。

// ********************************************************************
// >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
// ********************************************************************
// File name    : flashled.v
// Module name  : flashled
// Author       : STEP
// Description  : segment initial
// Web          : www.stepfpga.com 
// 
// --------------------------------------------------------------------
// Code Revision History : 
// --------------------------------------------------------------------
// Version: |Mod. Date:   |Changes Made:
// V1.0     |2017/03/02   |Initial ver
// --------------------------------------------------------------------
// Module Function:流水灯的模块化设计 
module flashled (clk,rst,led); 	
input clk,rst;						
	output [7:0] led;				 
         reg   [2:0] cnt ;                               //定义了一个3位的计数器,输出可以作为3-8译码器的输入         
         wire clk1h;                                     //定义一个中间变量,表示分频得到的时钟,用作计数器的触发                 
         //例化module decode38,相当于调用
        decode38 u1 (                                   
			.sw(cnt),                       //例化的输入端口连接到cnt,输出端口连接到led  
			.led(led)
			);         //例化分频器模块,产生一个1Hz时钟信号		
        divide #(.WIDTH(32),.N(12000000)) u2 (         //传递参数
			.clk(clk),
			.rst_n(rst),                   //例化的端口信号都连接到定义好的信号
			.clkout(clk1h)
			);                                      //1Hz时钟上升沿触发计数器,循环计数		
        always @(posedge clk1h or negedge rst)
	     if (!rst)
		cnt <= 0;
	     else
		cnt <= cnt +1;         
		endmodule

模块化设计结构清晰,verilog语言是很灵活的。对于流水灯还有一种很简洁的实现方法。

// ********************************************************************
// >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
// ********************************************************************
// File name    : flashled.v
// Module name  : flashled
// Author       : STEP
// Description  : segment initial
// Web          : www.stepfpga.com 
// 
// --------------------------------------------------------------------
// Code Revision History : 
// --------------------------------------------------------------------
// Version: |Mod. Date:   |Changes Made:
// V1.0     |2017/03/02   |Initial ver
// --------------------------------------------------------------------
// Module Function:流水灯的模块化设计 
module flashled (clk,rst,led); 	
input clk,rst;						
	output [7:0] led;				         
	wire clk1h;                                 //定义一个中间变量,表示分频得到的时钟,用作计数器的触发                 
	//例化分频器模块,产生一个1Hz时钟信号		
        divide #(.WIDTH(32),.N(12000000)) u2 (         //传递参数
			.clk(clk),
			.rst_n(rst),                   //例化的端口信号都连接到定义好的信号
			.clkout(clk1h)
			);                                      //1Hz时钟上升沿触发循环赋值	
        reg [7:0] led;
        always@(posedge clk1h or negedge rst)
	begin
		if(!rst)
			led <= 8'b11111110;            // <=为非阻塞赋值
		else 
			led <= {led[0],led[7:1]};      
			//当时钟上升沿来一次,执行一次赋值,赋值内容是led[0]与led[7:1]重新拼接成8位赋给led,相当于循环右移
	end	

按照下面表格定义输入输出信号

信号 引脚 信号 引脚
clk J5 led[3] M12
rst J9 led[4] L15
led[0] N15 led[5] K12
led[1] N14 led[6] L11
led[2] M14 led[7] K11

配置好以后编译下载程序。可以调整例化分频器时传递的参数来调整流水灯的速度。

掌握了verilog里面例化module的用法,采用模块化设计程序。模块化设计是非常重要的设计思想。在下一节我们会学习按键的另外用法按键消抖。

文章来源于:电子产品世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    累计装车超过70万辆,主控MCU出货达到数百万颗,新增加小鹏P7、广汽传祺GS5以及奇瑞瑞虎8等知名畅销车型。2022年将加大现有转向流水灯/贯穿式尾灯方案推广力度,同时开发车灯LED驱动恒流专用芯片......
    我们还应注意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们就看不到“流水”效果了。   51单片机流水灯电路图(三)   下图为主控芯片和流水灯......
    80C51单片机-LED流水灯效果;本文将介绍一个基于8051单片机的跑马灯实验,通过编写代码实现LED流水灯效果。这个实验将使用8051单片机的P2口来控制8个LED灯,实现流水灯效果。 实验......
    用51单片机控制的LED流水灯设计;  1.引言   当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以......
    用单片机控制的LED流水灯设计;1.引言 当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以......
    使用74HC595驱动LED流水灯实验;本次实验系统环境 Matlab版本: 2021b 系统环境 :Win10专业版 模型与原理图 本次实验的simulink模型如图5.2所示,实验......
    单片机控制花样流水灯原理图及程序;  AT89C51单片机流水灯c语言程序   1、首先先在proteus画出仿真图,方便仿真程序   2、下面来编写程序,先来写入头函数   3、根据......
    51单片机学习:LED流水灯实验;实验名称:LED流水灯实验接线说明:实验现象:下载程序后“LED模块”的D1-D8指示......
    基于Microchip MCU的汽车流水转向灯方案;此方案的主要芯片选用汽车级MCU PIC16F15324-I/SLVAO,输出11个信道,每信道控制2颗LED,形成流水灯效果。LY E67F是......
    proteus仿真51流水灯(汇编);本文为《proteus仿真51流水灯和点阵(心形)》的后续文章,上文链接:https://www.cnblogs.com/xing-2/p/11147890......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>