FPGA开发——LED流水灯实现先从左往右流水,再从右往左流水

一、概述

我们在设计完一个方向的流水灯的设计时,总是会想实现让流水灯倒着流水回去的设计,这里我也是一样,实现这种设计的方法有很多种,其中就有直接使用case语句将所有可能包含进去编写,这种设计方法是最简单的,还有就是使用多个计数器的方式进行标志判断,实现方向流水的切换,以及我们最常用的状态机方法的实现。因为这里的设计不太难,所以我就讲解前面两种实现方式,至于最后一种方法感兴趣的可以去实现一下。

二、实现思路

1、方法一

这个方法就是不考虑其他条件,直接从第一个LED状态开始编写,一直编写到所有的LED状态编写完(这里以四个LED为例)

2、方法二

这个方法的实现思路就是在第一个计数器(LED流水间隔时间计数器)计数的基础上叠加一个计数器统计不同方向流水完成,使用次计数器编写状态标志位。从而利用标志位实现不同方向流水。

三、测试文件的编写

1、方法一

//模块定义
module  led(input rst_n,input clk,output reg [3:0]  led_out
);//参数定义
parameter TIME_500ms= 25_000_000;
//内部信号定义
reg [24:0]  cnt;//计数500ms所需要的二进制位数
wire        add_cnt;//计数器开启条件
wire        end_cnt;//计数器结束条件
reg  [3:0]  state_n;//计数器实现功能,0.5秒技术
always @(posedge clk or negedge rst_n)beginif(!rst_n)begincnt<=0;endelse if(add_cnt)beginif(end_cnt)cnt<=0;elsecnt<=cnt+1;endelsecnt<=0; 
end
assign add_cnt=1'b1;
assign end_cnt=add_cnt && cnt ==(TIME_500ms-1);//LED从左往右,在从右往左流水always @(posedge clk or negedge rst_n)beginif(!rst_n)led_out<=4'b0001;else case(state_n)3'd0:led_out<=4'b0001;3'd1:led_out<=4'b0010;3'd2:led_out<=4'b0100;3'd3:led_out<=4'b1000;3'd4:led_out<=4'b0100;3'd5:led_out<=4'b0010;3'd6:led_out<=4'b0001;default:led_out<=4'b0001;endcase
end  always @(posedge clk or negedge rst_n)beginif(!rst_n)state_n <=0;else if(state_n==3'd6 && end_cnt)state_n<=0;else if(state_n<3'd6 && end_cnt)state_n<=state_n+1;
end 
endmodule

2、方法二

//模块定义
module  led(input rst_n,input clk,output reg [3:0]  led_out
);//参数定义
parameter TIME_500ms= 25_000_000;
//内部信号定义
reg [24:0]  cnt;//计数500ms所需要的二进制位数
wire        add_cnt;//计数器开启条件
wire        end_cnt;//计数器结束条件
reg  [3:0]  state_n;
reg  [1:0]  cnt_state;
wire        add_cnt_state;//计数器开启条件
wire        end_cnt_state;//计数器结束条件reg         cnt_flag;
//计数器实现功能,0.5秒技术
always @(posedge clk or negedge rst_n)beginif(!rst_n)begincnt<=0;endelse if(add_cnt)beginif(end_cnt)cnt<=0;elsecnt<=cnt+1;endelsecnt<=0; 
end
assign add_cnt=1'b1;
assign end_cnt=add_cnt && cnt ==(TIME_500ms-1);always @(posedge clk or negedge rst_n)beginif(!rst_n)begincnt_state<=0;endelse if(add_cnt_state)beginif(end_cnt_state)cnt_state<=0;elsecnt_state<=cnt_state+1;end
end
assign add_cnt_state=end_cnt;
assign end_cnt_state=add_cnt_state && (cnt_state ==3);always @(posedge clk or negedge rst_n)beginif(!rst_n)begincnt_flag<=0;endelse if(end_cnt_state)begincnt_flag<=~cnt_flag;endelsecnt_flag<=cnt_flag;
end//功能编写
always @(posedge clk or negedge rst_n)beginif(!rst_n)led_out<=4'b0001;else if(cnt_flag==1'b0 && end_cnt)beginled_out<={led_out[2:0],led_out[3]};//循环以为实现轮流闪烁end else if(cnt_flag==1'b1 && end_cnt)beginled_out<={led_out[0],led_out[3:1]};//循环以为实现轮流闪烁end elseled_out<=led_out;
end 
endmodule

四、测试文件的编写

这里我们要放着的条件都是一样的,所以只要使用同一个测试文件就可以

//定义时间尺度
`timescale 1ns/1ps
module led_tb();//重定义
defparam  led_inst.TIME_500ms = 25;
//内部变量定义
reg clk;
reg rst_n;
wire [3:0] led_out;//模块实例化
led led_inst(/*input              */ .rst_n    (rst_n     ),/*input            */ .clk      (clk       ),/*output reg [3:0] */ .led_out  (led_out   )
);//时钟
parameter CLK_CLY =20;
initial clk=0;
always  #(CLK_CLY/2) clk=~clk;//复位
initial beginrst_n =1'b0;#(CLK_CLY*2);#3;rst_n =1'b1;
end 
//激励endmodule

五、仿真波形图

从波形图中我们可以看到LED灯首先会从0001——1000进行流水,然后又会从1000——0001进行反方向流水,与我们设计的要求一致,设计简单,所以就不进行下板验证了。 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32通信协议 总集篇 (速记版)

名称引脚常用在双工时钟电平设备USARTTX、RX单片机和pc,单片机和单片机全双工异步单端点对点I2CSCL、SDA单片机和单片机半双工同步单端多设备SPISCLK、MOSI、MISO、CS单片机和单片机全双工同步单端多设备CANCAN_H、CAN_L智能汽车半双工异步差分多设备USBDP、DM半双工异步差分点…

[php7系列]--php7里的返回类型声明和标量类型声明及不要用isset判断数组是否定义某个KEY-最好使用array_key_exists

一、[php7系列]--php7里的返回类型声明和标量类型声明 php7里增加了返回类型声明和标题类型声明&#xff0c;可以理解为对一个方法的输入输出进行了类型验证&#xff0c;在PHP7之前&#xff0c;方法里的数组、对象参数是有类型声明的&#xff0c;但其它的整数、字符串等类型声明…

【海贼王航海日志:前端技术探索】HTML你学会了吗?(一)

目录 1 -> HTML概念 2 -> HTML结构 2.1 -> 认识HTML标签 2.2 -> HTML文件基本结构 2.3 -> 标签层次结构 3 -> 快速生成代码框架 4 -> HTML常见标签 4.1 -> 注释标签 4.2 -> 标题标签 4.3 -> 段落标签 4.4 -> 换行标签 4.5 ->…

ES(ElasticSearch)倒排索引

目录 正排与倒排索引 1.正排索引 作用&#xff1a; 优点&#xff1a; 缺点&#xff1a; 2.倒排索引 原理&#xff1a; 倒排索引的构建流程&#xff1a; 倒排索引的搜索流程&#xff1a; 优点&#xff1a; 缺点&#xff1a; 3. 应用场景 倒排索引中有几个非常重要的概念…

【二叉树的锯齿形层序遍历】python刷题记录

R2-树与二叉树篇 层序遍历双端队列deque # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution:def zigzagLevelOr…

【读代码】高斯掩模

目录 问题&#xff1a; 主要功能&#xff1a; 问题&#xff1a; 看不懂实现的功能 主要功能&#xff1a; 从输出张量中提取与边界框对应的区域&#xff0c;并计算该区域与高斯核之间的均方误差&#xff08;MSE&#xff09;损失 例子 假设我们有以下输入&#xff1a; boxe…

我的创作纪念日(一)——Giser?Noder?不如“Computer”

目录 Giser&#xff1f;Noder&#xff1f;不如“Computer” 一、根源&#xff1a;保持学习习惯的刚需 二、机缘&#xff1a;processOn的另类替代 三、日常&#xff1a;对技术栈丰富的思考 四、成就&#xff1a;保持心态健康的活着 五、憧憬&#xff1a;能一直心态健康的活…

前端实现【 批量任务调度管理器 】demo优化

一、前提介绍 我在前文实现过一个【批量任务调度管理器】的 demo&#xff0c;能实现简单的任务批量并发分组&#xff0c;过滤等操作。但是还有很多优化空间&#xff0c;所以查找一些优化的库&#xff0c; 主要想优化两个方面&#xff0c; 上篇提到的&#xff1a; 针对 3&…

CSS技巧专栏:一日一例 14-纯CSS实现模拟水波波动填充按钮特效

CSS技巧专栏:一日一例 14-纯CSS实现模拟水波波动填充按钮特效 大家好,今天介绍一个在网上很常见的模拟水波波动要灌满按钮的动画效果,效果下面图所示。 本例图片 案例分析 我们沿着Z轴从上到下数一下一共有几个层: 文字层:白色文字阴影的黑色文字,当鼠标移动上来时候…

黑马点评--给店铺类型查询添加缓存

controller/ShopTypeController.java /*** 店铺分类查询&#xff0c;用于展示首页头部店铺分类* return*/GetMapping("list")public Result queryTypeList() {return typeService.queryList();} service/IShopTypeService.java Result queryList(); service/impl/S…

fatal: Could not read from remote repository. 解决方法

问题描述&#xff1a; Git : fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists。 解决方法&#xff1a; 当在网上尝试大量方法仍然失败的时候&#xff0c;不妨试试这个方法。 在 github 上&…

探索 Redis 不同集群架构的性能与应用

1. 引言 Redis的集群配置成为了提高数据可靠性和服务可用性的关键。本文将带领大家了解Redis的四种主要集群架构&#xff0c;并重点分析哨兵模式和Redis Cluster架构和优势。 2. Redis的四种集群架构 2.1 单实例Redis 使用单个 Redis 实例提供服务。适用于小规模应用&#…

论文阅读:Deformable DETR: Deformable Transformers for End-to-End Object Detection

论文阅读&#xff1a;Deformable DETR: Deformable Transformers for End-to-End Object Detection Deformable DETR: 基于稀疏空间采样的注意力机制&#xff0c;让DCN与Transformer一起玩&#xff01; - 知乎 (zhihu.com) 【Deformable DETR 论文源码解读】Deformable Trans…

The Llama 3 Herd of Models.Llama 3 模型第1,2,3部分全文

现代人工智能(AI)系统是由基础模型驱动的。本文提出了一套新的基础模型,称为Llama 3。它是一组语言模型,支持多语言、编码、推理和工具使用。我们最大的模型是一个密集的Transformer,具有405B个参数和多达128K个tokens的上下文窗口。本文对Llama 3进行了广泛的实证评价。我们…

【error】AttributeError: module ‘cv2.dnn‘ has no attribute ‘DictValue‘(库冲突)

conda list conda remove opencv pip uninstall opencv-python conda list pip 同时卸载两个库 pip uninstall opencv-contrib-python opencv-python 没有and 直接写库名 module ‘cv2.dnn‘ has no attribute ‘DictValue‘解决办法_module cv2.dnn has no attribute d…

Linux - 环境变量、程序地址空间、进程地址空间及Linux2.6内核进程调度队列

目录 环境变量 基本概念 常见环境变量 查看环境变量的方法 测试PATH 测试HOME 测试SHELL 和环境变量相关的命令 环境变量的组织方式 通过代码获取环境变量 通过系统调用获取环境变量 程序地址空间 进程地址空间 Linux2.6内核进程调度队列 一个CPU拥有一个runqueue 优先级 活…

谈一谈爬虫开发工程师

爬虫就只是抓数据的吗&#xff1f;并不是&#xff0c;爬虫工程师的工作不再仅仅是抓取数据&#xff0c;还需要处理其他各种复杂问题&#xff0c;今天我们就来聊聊爬虫开发工程师。 一、 爬虫开发工程师工作内容 爬虫开发工程师是负责编写和维护网络爬虫程序的专业人员。他们的…

【多模态大模型】 ALBEF in NeurIPS 2021

一、引言 论文&#xff1a; Align before Fuse: Vision and Language Representation Learning with Momentum Distillation 作者&#xff1a; Salesforce Research 代码&#xff1a; ALBEF 特点&#xff1a; 该方法使用ViT进行图像特征提取&#xff0c;提出将BERT分两部分&am…

Cocos Creator2D游戏开发(3)-飞机大战(1)-背景动起来

资源见: https://pan.baidu.com/s/1cryYNdBOry5A4YEEcLwhDQ?pwdzual 步骤 1, 让背景动起来 2, 玩家飞机显现,能操控,能发射子弹 3.敌机出现 4. 碰撞效果(子弹和敌机,敌机和玩家) 5. 积分和游戏结束 6. 游戏存档,对接微信小游戏,保存历史最高分 7. cocos发布到微信小游戏 资源…

探索Python的进度条神器:tqdm

文章目录 探索Python的进度条神器&#xff1a;tqdm一、背二、tqdm简介三、安装tqdm四、tqdm的五个简单使用示例五、tqdm在不同场景下的应用六、常见问题及解决方案七、总结 探索Python的进度条神器&#xff1a;tqdm 一、背 景&#xff1a;为什么选择tqdm&#xff1f; 在Python…