【FPGA】时序逻辑电路——基于计数器实现一个以1秒频率闪烁的LED灯
时序逻辑电路 计数器的实现
1 D触发器
分析:
特性:输出端Q只在CK处于上升沿的时候变化
图中波形的形成过程:
当D处于高电平时,CK未处于上升沿时,Q仍处于低电平
当CK来到上升沿,Q需要根据D发生变化,由于D是高电平,所以Q要从低电平变化成高电平
D从高电平变化成低电平,但是此时CK未来到上升沿,所以Q不随着D变化(虽然D变了,Q仍保持刚刚的状态——存储功能)
CK来到上升沿,此时D又恢复了高电平,所以Q不变
2 计数器
原理:加法器基本结构图
这样就能实现 每一个时序上升沿,计数器结果都加1
今天我们的任务是:
设计一个以1秒频率闪烁的LED灯(亮灭各500ms)
怎么知道500ms亮,500ms灭呢?
我们就需要一个计数器,计数到什么时候到了500ms
时钟的频率我们设置为
50MHz 20ns
,也就是两个上升沿(一个周期)的时间是20ns
每到一个上升沿,计数器的值加一次
由于500ms亮和灭,所以我们需要计数器计数 500ms/20ns = 25000000次
而一个四位计数器肯定计数不了这么多的值,那么需要多少位呢?
- 源代码
module led_flash(clk,reset_n,//reset是复位信号, _n 表示低电平有效,也就是低电平时复位led);input clk;input reset_n;output reg led;reg [24:0] counter;//25位计数器always@(posedge clk or negedge reset_n) //当clk处于上升沿或者reset处于下降沿的时候下面的代码就生效if(!reset_n) // if(reset_n == 0)counter <= 0; // <= 是非阻塞赋值的意思else if (counter == 2500_0000) //-1)counter <= 0;elsecounter <= counter + 1'd1;//需要让 led 灯每500ms翻转一次always@(posedge clk or negedge reset_n) if(!reset_n) led <= 0;else if (counter == 2500_0000) //-1) 要减1led <= !led; //翻转endmodule
仿真代码
`timescale 1ns / 1psmodule led_flash_tb();reg clk;reg reset_n;wire led;led_flash UUT(.clk(clk),.reset_n(reset_n),.led(led));initial clk = 1;always #10 clk =! clk; initial begin reset_n = 0;#201; //避开上升沿 reset_n = 1;#20_0000_0000; // 2sendendmodule
- 仿真
从仿真的结果看
比预想的500ms 多了 20ns
原因是这里如果想计数2500_0000次,应该写2499_9999
这里以计数到4为例,如果要计数到4的话,实际上不是计数了4次,而是5次
- 0-1
- 1-2
- 2-3
- 3-4
- 4-0
所以应该改为 2500_0000-1
改过之后 就可以了
改过之后 就可以了
【FPGA】时序逻辑电路——基于计数器实现一个以1秒频率闪烁的LED灯相关推荐
- 设计一个以1秒频率闪烁的LED灯(亮灭各500ms)
源文件: module cnt_1( clk, Reset_n, Led ); input clk; input Reset_n; output reg Led; reg [24:0]counter; ...
- (二十)【数电】(第六章 时序逻辑电路)计数器
文章目录 A 计数器 A.a 异步计数器工作原理分析 A.b 同步计数器工作原理分析 A.c MSI集成计数器示例及其应用 A.d 基于MSI MSI计数器的任意进制计数器设计 A.e 移位寄存器型计 ...
- 时序逻辑电路的设计(二) -- 篮球比赛24秒倒计时电路(附Multisim)
一.实验任务及要求 1. 设计要求 篮球比赛中,进攻一方取得球权后双方开始比赛,若24秒到,该进攻一方仍然没有投球时,需要交换发球权.本实验要求设计一个24秒违例计时器(倒计时方式),当计时24秒时间 ...
- C# Android wifi控制灯,求助如何在基于安卓通过WiFi与Arduino通信,实现对LED灯的控制。...
满意答案 dkmeng 推荐于 2017.12.15 采纳率:55% 等级:9 已帮助:567人 项目需要的硬件如下: Arduino Uno Ethernet Shield LED灯 2个. ...
- 一个I/O口控制两个LED灯
方案1: 优点:平时基本没有功耗: 缺点:电路复杂. 经本人在PIC18F4550测试板上测试,完全没有问题. 方案二: 本人没有测试. 优点:电路简单 缺点:平时还有功耗,二极管VD1一直导通态. ...
- 【时序逻辑电路】——计数器
- 【正点原子FPGA连载】第八章LED灯闪烁实验 -摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0
1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下 ...
- LED灯多种方式闪烁的FPGA实现
一.Quartus开发工具简介 Quartus Prime是inter FPGA(Altera FPGA在2015年被inter收购)的开发套件,到inter FPGA的官网可下载软件的安装包.在下载 ...
- 【正点原子FPGA连载】 第八章 LED灯闪烁实验摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0
1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=692450874670 3)全套实验源码+手册+视频下载地址: h ...
最新文章
- Swing编程基础 之四
- kettle 使用java版本_Kettle最新版本8.X详解
- Castle.ActiveRecord的ProxyFactory配置
- C语言再学习 -- 循环语句
- mongoose 批量修改字段_记一次脚本批量修改数据库字符集所埋下的一个坑及解决思路...
- OCR系列——文本检测任务
- php_curl.dll libssh2.dll 始终无法加载的原因 及解决办法
- centos7 LVM调整,划分home部分容量到root
- [swift] LeetCode 206. Reverse Linked List
- 剑指offer(C++)-JZ76:删除链表中重复的结点(数据结构-链表)
- ubuntu使用VNC实现远程桌面
- Linux安装redis及redis的php扩展。
- 【车牌识别】基于matlab GUI字符匹配车牌识别(18省份)【含Matlab源码 1617期】
- 在线工具:找到神器,助你轻松应对各种职场难题
- 【LKJ】LKJ2000型记录装置显示界面说明
- 数值分析(2):线性代数方程组的直接解法
- 蜂巢迷宫 c语言,最强大脑的蜂巢迷宫 创意源于此
- opencv实战——机器视觉检测和计数
- 2022纪中游记(进行中)
- QT QColor颜色选择器并获取rgb值