FPGA:流水灯设计

本次基于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)  //节约仿真时间beginif(led == 8'b1000_0000)   //如果是最后一个灯亮,则再回去led <= 8'b0000_0001;elseled <= (led<<1); //如果是其他情况,则左移一位即可endendmodule

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、板级验证

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1488931.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

磁盘管理与磁盘卷--红帽Linux操作系统<>

分区的两种格式 1、MBR分区 MBR(Master Boot Record&#xff0c;主引导记录)是传统的分区机制&#xff0c;使用BI0S引导PC设备&#xff0c;寻址空间只有32bit长。 分区空间最大支持2.2TB 支持的分区数量:4个主分区或者3个主分区1个扩展分区 为什么MBR最多只能有4个主分区?…

深入剖析:GaussDB与MySQL在COUNT查询中的并行化技术

引言 数据库查询性能优化是数据库管理和开发中的一个重要议题。在处理大数据量的COUNT查询时&#xff0c;传统的单线程处理方式可能无法满足现代应用的性能需求。GaussDB(for MySQL)和MySQL作为流行的数据库系统&#xff0c;它们在并行查询优化方面有着各自的策略和技术。本文…

嵌入式中什么是三次握手

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」&#xff0c;点个关注在评论区回复“666”之后私信回复“666”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; 在网络数据传输中&#xf…

第2章 编译SDK

安装编译依赖 sudo apt-get update sudo apt-get install clang-format astyle libncurses5-dev build-essential python-configparser sconssudo apt-get install repo git ssh make gcc libssl-dev liblz4-tool \ expect g patchelf chrpath gawk texinfo chrpath diffstat …

数据结构(Java):Map集合Set集合哈希表

目录 1、介绍 1.1 Map和Set 1.2 模型 2、Map集合 2.1 Map集合说明 2.2 Map.Entry<K&#xff0c;V> 2.3 Map常用方法 2.4 Map注意事项及实现类 3、Set集合 3.1 Set集合说明 3.2 Set常用方法 3.3 Set注意事项及其实现类 4、TreeMap&TreeSet 4.1 集合类TreeM…

盛元广通实验室自动化生物样本库质量控制管理系统

随着我国生物医学研究的不断深入和精准医疗的快速发展&#xff0c;对高质量生物样本的需求日益增长。近年来&#xff0c;我国生物样本库建设取得了显著进展。各级政府、高校和医院纷纷投入资源建设生物样本库&#xff0c;推动了生物样本资源的有效整合和利用。生物样本库的质量…

【C++】初识C++基础篇·一(命名空间,函数重载,缺省参数,引用);

文章目录 前言1.输入与输出输出输入cin和scanf的对比 2.命名空间2.1namespace存在的意义2.2namespace的使用3.缺省参数4.函数重载重载函数的调用规则 5.引用 前言 我们先通过一段简单的代码来拉开C的序幕&#xff1b; //text.cpp #include<iostream> #include<stdio…

钡铼网关实时数据互联,加速IEC104与MQTT云平台对接

随着工业4.0时代的到来&#xff0c;电力系统中的数据采集、监控与远程控制需求日益增长。IEC 104&#xff08;IEC 60870-5-104&#xff09;作为国际电工委员会&#xff08;IEC&#xff09;制定的电力自动化通信协议&#xff0c;广泛应用于电力系统的状态监测、数据采集和设备控…

【推研小灶】复旦与南大之间:一次独特的计算机保研之旅

写在前面 上午10点填完志愿等待复试通知&#xff0c;利用这段时间记录一下我简短的夏令营和预推免。今年变为线下之后&#xff0c;部分学校的入营情况、考核方式有明显变化。加上CS方向保研名额总体变多&#xff0c;形势有点小乱&#xff0c;甚至填报系统都在9.29中秋节当天&a…

如何优化 Nginx 处理特定 MIME 类型的性能?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01; 文章目录 如何优化 Nginx 处理特定 MIME 类型的性能&#xff1f;一、了解 MIME 类型二、分析性能瓶颈三、优化配置1. 开启 Gzip 压缩2. 调整缓存策略3. 优化服务器资源分配…

【C++进阶学习】第九弹——哈希的原理与实现——开放寻址法的讲解

前言&#xff1a; 在前面&#xff0c;我们已经学习了很多存储机构&#xff0c;包括线性存储、树性存储等&#xff0c;并学习了多种拓展结构&#xff0c;效率也越来越高&#xff0c;但是是否有一种存储结构可以在大部分问题中都一次找到目标值呢&#xff1f;哈希可能能实现 目录…

el-tree树添加向下移动按钮,前端界面调整顺序

需求&#xff1a;树上添加向下按钮&#xff0c;再不调用接口的情况下&#xff0c;调整树的顺序结构 遇到的问题&#xff1a;第一次点击更新的&#xff0c;数据和视图是调整好的&#xff0c;再次点击页面调整顺序&#xff0c;只有数据被调整了&#xff0c;视图没有发生改变。 &…

我澄清下,大数据界面虽然有点花,但对趋势的判断还是很准的!

我澄清下&#xff0c;大数据界面虽然有点花&#xff0c;但对趋势的判断还是很准的&#xff01; 艾斯视觉的观点认为&#xff1a;在这个充满不确定性的世界里&#xff0c;大数据就像一位智者&#xff0c;透过那些令人眼花缭乱的界面&#xff0c;总能以它独到的洞察力&#xff0…

链路聚合加单臂路由

一、实验目的及拓扑 实验目的&#xff1a;在路由器及交换机之间建立链接聚合&#xff0c;交换机接入两台主机并通过路由器子接口自动分配IP地址&#xff0c;通过单臂路由实现两台主机互联 二、基本配置 1、交换机配置 [S1]vlan batch 10 20 [S1-Eth-Trunk1]dis th # interf…

eclipse ui bug

eclipse ui bug界面缺陷&#xff0c;可能项目过多&#xff0c;特别maven项目过多&#xff0c;下载&#xff0c;自动编译&#xff0c;加载更新界面异常 所有窗口死活Restore不回去了 1&#xff09;尝试创建项目&#xff0c;还原界面&#xff0c;失败 2&#xff09;关闭所有窗口&…

mysql面试(六)

前言 本章节详细讲解了一下mysql执行计划相关的属性释义&#xff0c;以及不同sql所出现的不同效果 执行计划 一条查询语句经过mysql查询优化器的各种基于成本和各种规则优化之后&#xff0c;会生成一个所谓的 执行计划&#xff0c;这个执行计划展示了这条查询语句具体查询方…

模拟can信号实现通信

实车上算法一般通过ros进行通信&#xff0c;车辆和控制器之间则通过can通信实现&#xff0c;今天来学习一下如何模拟这个can。 can信号的发送和接收一般是需要载体的&#xff0c;我们一般都有can0和can1设备可以使用&#xff0c;在电脑上创建这个设备&#xff1a; 加载vcan内核…

数据库开发:MySQL基础(二)

MySQL基础&#xff08;二&#xff09; 一、表的关联关系 在关系型数据库中&#xff0c;表之间可以通过关联关系进行连接和查询。关联关系是指两个或多个表之间的关系&#xff0c;通过共享相同的列或键来建立连接。常见的关联关系有三种类型&#xff1a;一对多关系&#xff0c;…

Talk|新加坡国立大学赵轩磊:Pyramid Attention Broadcast - 通向视频模型的实时生成

本期为TechBeat人工智能社区第612期线上Talk&#xff01; 北京时间7月25日(周四)20:00&#xff0c;新加坡国立大学博士生—赵轩磊的Talk已准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “Pyramid Attention Broadcast - 通向视频模型的实时生成”&#x…

Spring Boot中如何实现全链路调用日志跟踪?

​ 博客主页: 南来_北往 系列专栏&#xff1a;Spring Boot实战 引言 在Spring Boot中实现全链路调用日志跟踪&#xff0c;主要依赖于Mapped Diagnostic Context&#xff08;MDC&#xff09;功能。MDC是一种用于在多线程条件下记录日志的功能&#xff0c;它可以看作是与当…