Verilog 实现流水灯

这篇具有很好参考价值的文章主要介绍了Verilog 实现流水灯。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、实验平台

软件:PC、Quartus Prime 18.1、Modelsim 10.5b
硬件:Altera FPGA开发板(EP4CE6E22F17C8)

2、实验目的

编写Verilog HDL代码驱动开发板上8颗LED实现流水灯效果

2.1、实验要求

1、每次点亮一颗LED,持续(亮灯)时间,1S
2、方向从右到左,最左边LED亮满1s之后,实现最右边的灯亮

3、实验流程

3.1、实验原理

根据开发板的原理图,可得到以下资料

Verilog 实现流水灯

根据硬件原理图所示,8颗发光二极管,所有的阳极都接通3.3V的正电压,也即————高电平,所以如果我们想要
发光二极管导通的话,需要在阴极接通低电平,就可以让LED亮起来。

3.2、框架设计

由于只是驱动8颗LED,即发光二极管,故可得到以下框架

Verilog 实现流水灯

3.3、功能模块划分

由于本设计比较简单,故没有必要划分多个模块	

Verilog 实现流水灯
信号定义

信号名 端口类型 信号说明
Clk i 输入时钟信号,50MHz
Rst_n i 输入复位信号,低电平有效
Led[7:0] o 输出LED信号,低电平有效

3.4、时序信号图

Verilog 实现流水灯

时钟信号:
	频率为50MHz,对应周期20ns,50%占空比的方波信号,多用于时序逻辑电路的控制信号;
复位信号:
	信号名后加上“_n”,表明该信号为低电平有效,当复位信号有效时,所有时序逻辑恒定在一个固定的状态;
计数器信号:
	要产生计时/定时效果,则需要生成计数器完成相应逻辑控制。由于开发板所搭载的晶振为50MHz,也即是说,
1秒钟晶振产生50M—>5000_0000次振动。而verilog所描述的时序逻辑都是基于时钟信号的控制————
上升沿或者下降沿,更新寄存器/触发器的值,我们让计数器在每一次时钟信号的上升沿处更新(自加1),
那么,计数器每计满5000_0000次,就是1s;然后在计满1秒的时候产生1个有效期为1个时钟周期的脉冲信号,
用以驱动LED信号进行变化;
led信号:
	系统处于复位状态时,LED全灭或者全亮,其后受计数器信号的驱动,做流水效果。

3.5、代码实现

相信基于以上的讲解,大家都能尝试着自己写出代码,这里给出一份Demo,以供参考:
/*================================================*\
		  Filename ﹕led_water.v
			Author ﹕Adolph
	  Description  ﹕8位流水灯
		 Called by ﹕No file
Revision History   ﹕ 2022-4-18 
		  			  Revision 1.0
  			  Email﹕ adolph1354238998@gamil.com
\*================================================*/
module led_water(
		//端口信号声明
	input wire 	clk		,//50MHz
	input wire	rst_n	,//reset ,low valid

	output [7:0]led_o	 //最后一个端口信号没有“,”
);
//参数定义
	parameter CNT_MAX = 26'd5000_0000;
//内部信号声明
	reg [25:0]	cnt_1s;//1s 计数器,计数最大值 5000_0000 - 1
	wire 		flag_1s;//计数器每计满1s,使能一个时钟周期

	reg [7:0]	led_reg;//输出信号的寄存信号
//逻辑实现
	//时序逻辑描述1s计数器
	always@(posedge clk or negedge rst_n)begin
		if(!rst_n)
			cnt_1s <= 26'd0;
		else if(cnt_1s >= CNT_MAX - 26'd1) //归零条件
			cnt_1s <= 26'd0;
		else
			cnt_1s <= cnt_1s + 26'd1;
	end
	
	assign flag_1s = cnt_1s >= CNT_MAX - 26'd1;

  //移位实现流水灯
	always@(posedge clk or negedge rst_n)begin
		if(!rst_n)
			led_reg <= 8'b0000_0000;//全亮
		else if(flag_1s)
			if(led_reg == 8'b0000_0000)
				led_reg <= 8'b1111_1110;
			else
				led_reg <= {led_reg[6:0],led_reg[7]};//拼接实现循环移位
		else
			led_reg <= led_reg;
	end

	assign led_o = led_reg;
	
endmodule 

3.6、测试文件

/*================================================*\
		  Filename ﹕ tb_led_water
			Author ﹕ Adolph
	  Description  ﹕ 流水灯仿真测试文件
		 Called by ﹕ No file
Revision History   ﹕ 2022-4-18 
		  			  Revision 1.0
  			  Email﹕ adolph1354238998@gmail.com
\*================================================*/
`timescale  1ns/100ps //定义仿真系统基本时间单位、时间精度
module tb_led_water();

//激励信号
	reg			tb_clk		;
	reg			tb_rst_n	;

//观测信号
	wire [7:0]	tb_led_o	;
	
//参数重定义
	defparam U_led_water.CNT_MAX = 100;
	

//模块例化
	led_water	U_led_water/*例化名称*/(
		/*input 			*/.clk	(tb_clk  ),//50MHz
		/*input				*/.rst_n(tb_rst_n),//low valid
	
		/*output reg [7:0] 	*/.led_o(tb_led_o)
	);

//时间生成
	initial tb_clk = 1'b0;
	always #10 tb_clk = ~tb_clk;

//系统初始化
	initial begin
		tb_rst_n = 1'b0;
		#38 ;
		tb_rst_n = 1'b1;
		
		#18000; //系统运行时间??? 2000ns * 9
		$stop; //系统函数。暂停仿真
	end

endmodule 

仿真图
关于Modelsim的使用,请自行百度
Verilog 实现流水灯
Verilog 实现流水灯

跟据仿真波形图,可以看到一切如我们预期那样,实现了LED的循环流水效果。

3.7、上板验证

基于前面的步骤的结束,我们开始上板验证
在quartus的Pin planner 中进行引脚绑定

Verilog 实现流水灯

然后进行全编译,待到全编译通过后,连接好开发板,电源线和下载都要连接好,然后打开电源

Verilog 实现流水灯

下载编程文件

Verilog 实现流水灯

如果是第一次使用开发板的童鞋,参看这里更新驱动,切记,前提条件是开发板正确和PC连接,并且已经通电!!!
驱动更新成功后,点击“Start”进行编程,右上角的Progress为下载进度,成功后会有“100% Successful”提示字样,然后在开发板上可以看到相应的效果——流水灯。
Verilog 实现流水灯文章来源地址https://www.toymoban.com/news/detail-506839.html

4、总结

到这里基本上就结束了,给大家提几点在学习过程中可能会出现的错误
	1、我们的文件名和Module后面的模块名要保持一致,不然在仿真的时候会找不到文件的
	2、文件编写过程中,除开注释部分,其他的全部使用英文输入法编辑,如果在代码部分出现了中文也会报错
	3、reg信号只能在always进程中被赋值,wire型信号只能被assign赋值
	...
然后大家可以在提供的基础代码上进行创新,比如:
	1、实现流水灯的速率改变,提速或降速
	2、流水的方式改变,实现从左至右,然后再从右至左,循环往复

到了这里,关于Verilog 实现流水灯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 实验 6 流水灯设计

    6.1 实验目的 编 写 Verilog HDL 代 码 驱 动 开 发 板 上 10 颗 LED 实现流水灯效果 6.2 实 验 仪 器 与 器 材 1. EDA 开发软件 一 套 2.微机 一 台 3.实验开发系统 一 台 4.打印机 一 台 5.其他器件与材料 若 干 6.3 实 验 说 明 1、 10 位的流水灯,从左到右流水,每隔 500ms 流动一下

    2024年01月16日
    浏览(32)
  • ARM实验5-流水灯仿真实验

    一、实验名称:流水灯仿真实验 二、实验目的: 掌握ARM处理器的输入输出接口。 掌握通过MDK提供的仿真功能,实现系统的仿真运行。 通过该编程实验,进一步巩固和强化学生ARM汇编编程的能,ARM应用程序框架,培养学生实际应用的能力。 三、实验内容: 按下面电路图,编

    2024年02月15日
    浏览(26)
  • 单片机Proteus软件仿真一(手把手教你实现LED流水灯)

    1 单片机8051系列 爬虫是不能发了,审核总是不通过,算了,发点其他的。 51单片机是对兼容英特尔8051指令系统的单片机的统称。51单片机广泛应用于家用电器、汽车、工业测控、通信设备中。因为51单片机的指令系统、内部结构相对简单,所以国内许多高校用其进行单片机入

    2024年02月01日
    浏览(36)
  • Verilog HDL——LED流水灯工程&LED点阵显示

    LED流水灯 根据8位LED灯与EPM240引脚I/O对应关系 配置CPLD引脚: Hardware SetupUSB-Blaster[USB-0]JTAG Mode 下载工程: LED点阵显示 LED点阵电路: 00IC-EPM240 开发板采用的点阵型号是 10788。8×8LED 点阵共有 16 个引脚,分别控制 8 行和 8 列,行列共同决定其中一个 LED 的亮灭。图中 ROW 为行,

    2024年02月03日
    浏览(34)
  • 5.2 FPGA:基于verilog的LED流水灯设计(多种方法)

    目录 设计目标:8个LED灯以每0.5s的速率进行循环闪烁 方法1:移位法实现 设计模块 仿真代码 实验结果  方法2:循环移位方法  设计模块 方法3:使用三八译码器实现流水灯 顶层模块 底层模块 当仿真时时间长,可以减小设计代码的计数次数,对分析移位功能没有影响。 设计

    2024年02月06日
    浏览(33)
  • 【C51基础实验 LED流水灯】

    前言: 前几篇学会了LED驱动原理,并且成功点亮了一颗LED和实现了LED的闪烁,那么这篇紧接着就来解锁LED的新功能,LED流水灯。当然这里前提是基于肉眼余晖可见光达成的效果。 开发板上 LED 模块电路原理图如下图所示: 看上图中 LED 采用共阳接法 ,D1-D8 连接到单片机的

    2024年02月10日
    浏览(28)
  • 【FPGA】verilog基础语法与应用:位操作 / 模块调用——流水灯(跑马灯)

    今天的实验是计数器实验的升级,设计让8个LED灯以每个0.5s的速率循环闪烁 1 移位法实现 1.1 移位方法1 每个LED灯代表一位,共8位,亮为1,灭为0 如何实现这样的逻辑呢? 移位操作即可! 怎么样才能移位呢? 第一个状态需满足最低位为1,然后每次左移1个 源代码 仿真代码 功

    2024年01月16日
    浏览(39)
  • 多路彩灯控制器LED流水灯花型verilog仿真图视频、源代码

    名称:多路彩灯控制器LED流水灯花型verilog 软件:Quartus 语言:Verilog 代码功能:      用quartus和modelism,设计一个多路彩灯控制器,能够使花型循环变化,具有复位清零功能,并可以选择花型变化节奏。具体要求如下:  1)彩灯控制器由16路发光二极管构成,当控制开关打开时

    2024年02月04日
    浏览(39)
  • 基于Verilog HDL的按键控制流水灯即打地鼠小游戏的设计

    (1)用4个按键key0-key3对应控制4个小灯LED0-LED3;用触摸按键进行模式切换;用一位数码管显示当前控制模式,两位数码管显示当前得分。 (2)触摸按键没有按下时处于模式1,按下后处于模式2。用模式数码管显示当前的控制模式。 (3)模式1工作方式:当点亮LED0时,若按下

    2024年02月12日
    浏览(37)
  • S5PV210 | 裸机汇编LED流水灯实验

    目录 S5PV210 | 裸机汇编LED流水灯实验 开发板: 1.原理图 2.Datasheet相关 3.代码 3-1. 代码实现(流水灯,仅作演示) 3-2.工具 mkv210_image 代码 4.运行 SD卡启动 5.参考 上图中,当按下 POWER 键后, VDD_5V 和 VDD_IO 会产生 5V 和 3.3V 的电压,其中 D26 无须 GPIO 控制,为常亮状态,即我们所说的

    2024年02月03日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包