首页 > 其他分享 >FPGA:流水灯设计

FPGA:流水灯设计

时间:2024-07-26 22:29:21浏览次数:13  
标签:Reset led FPGA clk LED 流水 input 设计 reg

本次基于FPGA实现流水灯,即让LED[0:7]从左到右依次电量,每个LED灯频闪周期为1s钟,在这里,给出下面三种实现思路:

1、实验思路

1、使用位运算符
在复位时令LED灯为LED=8’b0000_0001,然后每过一秒钟,左移一位,如果LED灯状态为LED=8’b1000_0000,下一次再让LED=8’b0000_0001即可实现流水灯。
2、使用循环位移
使用循环位移和位拼接符,复位时如果我们令led=1000_0000,然后开始计时,我们让led[6:0]和led[7]进行拼接,得到0000_0001,再过一秒,同样进行拼接,得到0000_0010,使用这个方法无需考虑上面的末尾情况。
3、使用3-8译码器
再加入一个计数器,作为状态输入端,我们有8个输出,所以需要三个输入端口,复位令计数器为0,每过一秒状态计数器的值加1,最后状态计数器的值作为3-8译码器的输入端口即可。

2、代码编写

下面给出上面三种思路对应设计文件的verilog代码:
1、使用位运算符

module led_run1(
	clk,Reset_n,led
);
input clk;
input Reset_n;
output reg[7:0] led; 
reg [24:0] counter;
always@(posedge clk or negedge Reset_n)
if (!Reset_n)
	counter<=0;
else if(counter == 24999999)
//else if(counter == 24999)   //节约仿真时间
	counter <=0;
else 
	counter <= counter+1;
always@(posedge clk or negedge Reset_n)
if (!Reset_n)
	led <= 8'b0000_0001;
else if(counter == 24999999)
//else if(counter == 24999)  //节约仿真时间
	begin
	if(led == 8'b1000_0000)   //如果是最后一个灯亮,则再回去
		led <= 8'b0000_0001;
	else
		led <= (led<<1); //如果是其他情况,则左移一位即可
	end

endmodule

2、使用循环位移

module led_run2(
	clk,Reset_n,led
);
input clk;
input Reset_n;
output reg[7:0] led;
reg [24:0] counter;
always@(posedge clk or negedge Reset_n)
if (!Reset_n)
	counter<=0;
else if(counter ==24999999)
//else if(counter == 24999)   //节约仿真时间
    counter<=0;
else 
	counter <= counter+1;
always@(posedge clk or negedge Reset_n)
if (!Reset_n)
	led<=8'b0000_0001;
else if(counter==24999999)
//else if(counter == 24999)   //节约仿真时间
	led <= {led[6:0],led[7]};  //使用拼接符,循环左移
endmodule

3、外接3-8译码器

module led_run3(
	clk,Reset_n,led
);
input clk;
input Reset_n;
output [7:0] led;  //此处led是由底层三八译码器驱动,不需要reg类型,已经在decoder中定义out为reg了 
reg [25:0] counter;   //为了和前面区分,这里设为1秒的速率
always@(posedge clk or negedge Reset_n)
if (!Reset_n)
	counter<=0;
else if(counter == 49999999)
//else if(counter == 24999)   //节约仿真时间
	counter <=0;
else 
	counter <= counter+1;
//使用三八译码器,八个输出刚好对应八个LED灯,三个输入利用重新产生一个变量即可
reg [2:0] counter2;  //产生三位输出作为三八译码器输出
always@(posedge clk or negedge Reset_n)
if (!Reset_n)
	counter2 <= 3'b000;
//else if(counter == 24999) 
else if(counter == 49999999)
	counter2 <= counter2+1'b1;
//例化3-8译码器模块
decoder_3_8 decoder_3_8(
	.a(counter2[2]),
	.b(counter2[1]),
	.c(counter2[0]),
	.out(led)
);
endmodule

编写测试文件,不同的设计文件更改对应的模块名即可

`timescale 1ns/1ps
module led_run_tb();
reg clk;
reg Reset_n;
wire [7:0] led;
led_run3 led_run(    //例化led_run1修改对应的前面的标签即可
	.clk(clk),
	.Reset_n(Reset_n),
	.led(led)
);
initial clk=1; //时钟初始值设为1
always #10 clk=!clk;   //每延时10ns,时钟翻转一次,这样一个周期就是20ns
initial begin
Reset_n = 0;  //复位
#201  
Reset_n = 1;  // 复位接高电平
#40000000;
$stop;
end
endmodule

3、仿真测试

在这里插入图片描述

4、板级验证

生成比特流,烧到开发板即可。

标签:Reset,led,FPGA,clk,LED,流水,input,设计,reg
From: https://blog.csdn.net/weixin_50164178/article/details/140676240

相关文章

  • 基于Python+Django的红色文化研学网站设计与实现
    ......
  • 基于微信小程序的社区养老一站式服务系统设计与实现
    ......
  • 大牛直播SDK跨平台RTMP直播推送模块技术设计和功能列表
    整体架构大牛直播SDK跨平台RTMP直播推送模块,始于2015年,支持Windows、Linux(x64_64架构|aarch64)、Android、iOS平台,支持采集推送摄像头、屏幕、麦克风、扬声器、编码前、编码后数据对接,功能强大,性能优异,配合大牛直播SDK的SmartPlayer播放器,轻松实现毫秒级的延迟体验,满足大多数行......
  • 嵌入式Python、ROS、SLAM、WebSocket和Node.js:智能巡逻监控安防机器人设计流程(代码示
    项目概述随着智能技术的发展,智能巡逻机器人在安防、监控和巡逻等领域的应用越来越广泛。本文将介绍一个结合嵌入式系统、机器人技术和后端开发的智能巡逻机器人。该机器人能够自主导航,实时检测异常情况(如火灾或入侵者),并将数据发送到后端服务器,以实现高效的监控和应急响应。主......
  • 2024“钉耙编程”中国大学生算法设计超级联赛(3)
    Preface徐神是我们的红太阳,最后2min切了一道极难的string使得在这场前期爆炸的局面最后没有崩得太难看这场前期的开题顺序有点问题导致前5题出的很慢,中后期开始三人一人写一题,然后经典三开三卡好在最后我在WA了五发后写对拍把B过了,徐神又压线过了string,但比较可惜的......
  • 网络规划设计师-日常学习5-STP汇总
    目录STP定义BPDU交换时间HelloTime:ForwardDelay:MaxAge:STP接口状态STP几个重要要素根交换机(RootSwitch)主路径(RootPath)端口角色收敛时间(ConvergenceTime)STP选举过程示例网络拓扑规划如下:分析过程选举根交换机选举根端口1、比较路径开销(到根交换机A)2......
  • 【golang设计模式】—— 外观模式
    模式定义外观模式(FacadePattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调......
  • 安徽省大学生网络与分布式系统创新设计大赛-MISC
    最终排名第七,拿到省一图穷匕见去010看到有16进制,提取出来文本太大了,工具解不了上脚本是坐标用脚本画出来解码flag{40fc0a979f759c8892f4dc045e28b820}流下没有技术的眼泪是16进制,两个一组;转换成10进制分析与ascii之间的关系,每个减去128然后转换成ascii字符......
  • 实战篇-FPGA实现RGMII数据接收
        RGMII时序        前面讲到关于关于ARP的理论知识,该章节主要通过FPGA接收以太网数据,并作数据分析。    首先关于以太网RGMII接收时序如下图所示:                                 ......
  • FPGA实验8:PWM信号发生器的设计
    一、实验目的与要求1、熟悉QuartusⅡ软件的基本使用方法;2、熟悉EDA实验开发系统的基本使用方法;3、学习VHDL程序中数据对象、数据类型、顺序语句和并行语句的综合使用。二、实验原理设计并调试好一个脉宽数控调制信号发生器,此信号发生器是由两个完全相同的可自加载加法计......