时序逻辑电路 计数器的实现

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. 设计一个以1秒频率闪烁的LED灯(亮灭各500ms)

    源文件: module cnt_1( clk, Reset_n, Led ); input clk; input Reset_n; output reg Led; reg [24:0]counter; ...

  2. (二十)【数电】(第六章 时序逻辑电路)计数器

    文章目录 A 计数器 A.a 异步计数器工作原理分析 A.b 同步计数器工作原理分析 A.c MSI集成计数器示例及其应用 A.d 基于MSI MSI计数器的任意进制计数器设计 A.e 移位寄存器型计 ...

  3. 时序逻辑电路的设计(二) -- 篮球比赛24秒倒计时电路(附Multisim)

    一.实验任务及要求 1. 设计要求 篮球比赛中,进攻一方取得球权后双方开始比赛,若24秒到,该进攻一方仍然没有投球时,需要交换发球权.本实验要求设计一个24秒违例计时器(倒计时方式),当计时24秒时间 ...

  4. C# Android wifi控制灯,求助如何在基于安卓通过WiFi与Arduino通信,实现对LED灯的控制。...

    满意答案 dkmeng 推荐于 2017.12.15 采纳率:55%    等级:9 已帮助:567人 项目需要的硬件如下: Arduino Uno Ethernet Shield LED灯 2个. ...

  5. 一个I/O口控制两个LED灯

    方案1: 优点:平时基本没有功耗: 缺点:电路复杂. 经本人在PIC18F4550测试板上测试,完全没有问题. 方案二: 本人没有测试. 优点:电路简单 缺点:平时还有功耗,二极管VD1一直导通态. ...

  6. 【时序逻辑电路】——计数器

  7. 【正点原子FPGA连载】第八章LED灯闪烁实验 -摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0

    1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下 ...

  8. LED灯多种方式闪烁的FPGA实现

    一.Quartus开发工具简介 Quartus Prime是inter FPGA(Altera FPGA在2015年被inter收购)的开发套件,到inter FPGA的官网可下载软件的安装包.在下载 ...

  9. 【正点原子FPGA连载】 第八章 LED灯闪烁实验摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

    1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=692450874670 3)全套实验源码+手册+视频下载地址: h ...

最新文章

  1. Swing编程基础 之四
  2. kettle 使用java版本_Kettle最新版本8.X详解
  3. Castle.ActiveRecord的ProxyFactory配置
  4. C语言再学习 -- 循环语句
  5. mongoose 批量修改字段_记一次脚本批量修改数据库字符集所埋下的一个坑及解决思路...
  6. OCR系列——文本检测任务
  7. php_curl.dll libssh2.dll 始终无法加载的原因 及解决办法
  8. centos7 LVM调整,划分home部分容量到root
  9. [swift] LeetCode 206. Reverse Linked List
  10. 剑指offer(C++)-JZ76:删除链表中重复的结点(数据结构-链表)
  11. ubuntu使用VNC实现远程桌面
  12. Linux安装redis及redis的php扩展。
  13. 【车牌识别】基于matlab GUI字符匹配车牌识别(18省份)【含Matlab源码 1617期】
  14. 在线工具:找到神器,助你轻松应对各种职场难题
  15. 【LKJ】LKJ2000型记录装置显示界面说明
  16. 数值分析(2):线性代数方程组的直接解法
  17. 蜂巢迷宫 c语言,最强大脑的蜂巢迷宫 创意源于此
  18. opencv实战——机器视觉检测和计数
  19. 2022纪中游记(进行中)
  20. QT QColor颜色选择器并获取rgb值

热门文章

  1. 数据驱动是怎么跑偏的
  2. (个人笔记)Django学习笔记整理
  3. flex、grid布局实践——神仙网址分享
  4. 新年开工项目经理要做的几件事
  5. 谈谈软件测试职业的规划!
  6. python自动点名程序_利用python+tkinter开发一个点名软件
  7. 未来五年最有前景的编程语言是什么?
  8. 马云卸任演讲:因为信任,所以简单
  9. Elasticsearch架构选型指南——不止是搜索引擎,还有......
  10. D53 LeetCode 587.安装栅栏(困难)