此处设计一个数器,使 学习板上 的 LED 状态每 500ms翻转一次。 学习板上晶振为50MHz,也就是说时钟周期为 20ns , 这样可以计算得出 500ms = 500_000_000ns/20,即需要计数器 计数 25_000_000 次,也就是需要一个至少 25 位的计数器( 位的计数器( 225>25_000_000>224 )。且每当计数次达到需要清零并重新计数。
  
  1、计数器原理
  
         计数是一种最简单基本的运算,计数器就是实现这种运算的逻辑电路,计数器在数字系统中主要是对脉冲的个数进行计数,以实现测量、计数和控制的功能,同时兼有分频功能,计数器是由基本的计数单元和一些控制门所组成,计数单元则由一系列具有存储信息功能的各类触发器构成,这些触发器有RS触发器、T触发器、D触发器及JK触发器等。
  
  2、计数器verilog实现
  
                   端口名称   I/0                功能描述
  
  Clk50M input 模块的工作时钟,频率为50M
  
  Rst_n input 模块复位,低电平复位
  
  led output 低电平时LED亮
  
  module counter(Clk50M,Rst_n,led);
  
  input Clk50M; //系统时钟
  
  input Rst_n; //全局复位
  
  output reg led;//led 输出
  
  reg [24:0]cnt;//定义25位寄存器
  
  //计数器计数进程
  
  always@(posedge Clk50M or negedge Rst_n)//最后一条执行完成后,再开始执行其中的第一条语句,如此往复循环,直到整个仿真结束,对一组反复执行的活动进行建模
  
  if(Rst_n == 1'b0)
  
  cnt <= 25'b0;
  
  else if(cnt == 25'd24_999_999)
  
  cnt <= 25'b0;
  
  else
  
  cnt <= cnt + 1'b1;
  
  //LED输出控制进程 0.5s 翻转一次
  
  always@(posedge Clk50M or negedge Rst_n)
  
  if(Rst_n == 1'b0)
  
  led <= 1'b1;
  
  else if(cnt == 25'd24_999_999)
  
  led <= ~led ;
  
  else
  
  led <= led;
  
  endmodule
  
  3、仿真及板级验证
  
  `timescale 1ns/1ns
  
  `define clock_period 20//时钟周期
  
  module counter_tb;
  
  reg clk;
  
  reg rst_n;
  
  wire led;
  
  counter counter0(
  
  .Clk50M(clk),
  
  .Rst_n(rst_n),
  
  .led(led)
  
  );
  
  initial clk = 1;
  
  always #(`clock_period/2) clk = ~clk;
  
  initial begin
  
  rst_n = 1'b0;
  
  #(`clock_period*200)
  
  rst_n = 1'b1;
  
  #2000000000;
  
  $stop;
  
  end
  
  endmodule
  
  <!DOCTYPE html>
  
  <html lang="zh">
  
  <head>
  
  <meta charset="UTF-8">
  
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  
  <title>Document</title>
  
  <style>
  
  .wrapper {display: flex;border: 1px solid orangered;padding: 10px;}
  
  .col {border: 1px solid #808080;height: 500px;width: 200px;margin: 0 10px;padding: 10px;}
  
  .item {border: 1px solid #808080;www.dasheng178.com margin: 5px 0;}
  
  </style>
  
  </head>
  
  <body>
  
  <div class="wrapper">
  
  <div class="col1 col">
  
  <div class="item" id="item1" draggable="true">item1</div>
  
  <div class="item" id="item2" draggable="true">item2</div>
  
  <div class="item" id="item3" draggable="true"www.michenggw.com>item3</div>
  
  </div>
  
  <div class="www".xianggelila2.com"col2 col"></div>
  
  <div class="col3 col"></div>
  
  <div class="col4 col"></div>
  
  </div>
  
  <script>
  
  let cols = document.getElementsByClassName('col');
  
  for (let col of cols) {
  
  col.ondragenter = e =www.gcyl159.com/ > {
  
  console.log('放置元素 ondragenter',www.qinlinyu.cn '<' + e.dataTransfer.getData('item') + '>');
  
  }
  
  col.ondragover = e => {
  
  e.preventDefault();
  
  console.log('放置元素 ondragover', '<' + e.dataTransfer.getData('item') + '>');
  
  }
  
  col.ondragleave = e => {
  
  console.log('放置元素 ondragleave', '<' + e.dataTransfer.getData('item') + '>');
  
  }
  
  col.ondrop = function(e) {
  
  console.log('放置元素 ondrop', '<' + e.dataTransfer.getData('item') + '>');
  
  this.append(document.getElementById(e.dataTransfer.getData('item')));
  
  }
  
  }
  
  let items = document.getElementsByClassName('item');
  
  for (let item of items) {
  
  item.ondragstart = e => {
  
  console.log('拖拽元素 ondragstart');
  
  e.dataTransfer.setData('item', e.target.id);
  
  }
  
  item.ondragend = e => {
  
  console.log('拖拽元素 ondragend');
  
  4、时序仿真波形

FPGA学习记录_设计一个计数器的更多相关文章

  1. [Python 学习]2.5版yield之学习心得 - limodou的学习记录 - limodou是一个程序员,他关心的焦点是Python, DocBook, Open Source …

    [Python 学习]2.5版yield之学习心得 - limodou的学习记录 - limodou是一个程序员,他关心的焦点是Python, DocBook, Open Source - [Pyth ...

  2. 实验楼Python学习记录_挑战字符串操作

    自我学习记录 Python3 挑战实验 -- 字符串操作 目标 在/home/shiyanlou/Code创建一个 名为 FindDigits.py 的Python 脚本,请读取一串字符串并且把其中所 ...

  3. FPGA学习:VHDL设计灵活性&不同设计思路比较

    概要 由于VHDL编程实现数字电路具有很高的灵活性,为多种不同的思路编写实现同一种功能提供了可能.这些不同的设计思路,在耗费资源,可靠性,速度上也有很大的差异,往往需要我们根据实际需求和资源条件选择适 ...

  4. python学习记录_中断正在执行的代码,执行剪切板中的代码,键盘快捷键,魔术命令,输入和输出变量,记录输入和输出变量_

    2018-03-28 00:56:39 中断正在执行的代码 无论是%run执行的脚本还是长时间运行的命令ctrl + cIn [1]: KeyboardInterrupt 执行剪切板中的代码 ctrl ...

  5. 学习笔记_第一个strut程序_之中文乱码,过滤器解决方案及过程总结

    1.  第一次碰到加过滤器的过程,就是在学习struct1的时候,中文乱码 几个需要注意的关键字 2.什么叫package 所谓package就是打包的意思,就是说以下程序都是处于这个包内,所以一开始 ...

  6. MySQL的一些操作(学习记录_备忘)

    有个问题一直困扰着我,就是在windows下,使用命令行登录mymql时,得cd进mysql的\bin目录下.但我已经将mysql的\bin加入了环境变量,似乎不起作用. mysql 不允许创建表名全 ...

  7. FPGA学习记录 - Quartus II 未使用管脚设置为三态输入

    未使用管脚设置为三态输入 Assignments  -> Device 或双击器件

  8. Thrift学习记录

    Thrift学习记录 Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎,以构建在C++,Java,Python,PHP,Ruby,Erlang, ...

  9. git原理学习记录:从基本指令到背后原理,实现一个简单的git

    一开始我还担心 git 的原理会不会很难懂,但在阅读了官方文档后我发现其实并不难懂,似乎可以动手实现一个简单的 git,于是就有了下面这篇学习记录. 本文的叙述思路参照了官方文档Book的原理介绍部分 ...

随机推荐

  1. DMA是什么意思

    DMA是让硬盘不用通过CPU来控制读写 它的意思是直接存储器存取,是一种快速传送数据的机制,DMA技术的重要性在于,利用它进行数据存取时不需要CPU进行干预,可提高系统执行应用程序的效率.利用DMA传 ...

  2. (译)学习如何构建自动化、跨浏览器的JavaScript单元测试

    作者:Philip Walton 译者:Yeaseon 原文链接:点此查看 译文仅供个人学习,不用于任何形式商业目的,转载请注明原作者.文章来源.翻译作者及链接,版权归原文作者所有. ___ 我们都知 ...

  3. [CF106C]Buns

    面包师Lavrenty打算用馅料做几个面包,然后把它们卖掉. Lavrenty有\(n\)克面团和\(m\)种不同的馅料.馅料种类的下标从\(1到m\),他知道他的第\(i\)种馅料剩下\(a_i\) ...

  4. TW实习日记:第23天

    主要的项目已经在修改一些细节以提高用户体验的阶段了,所以并不是太忙,主要就是对样式和一些细节修修改改.然后下午帮助同事的新项目做了一个功能点,主要就是调通接口就行,因为参数巨多,所以总要和网端那边的后 ...

  5. TW实习日记:第13天

    昨天困扰的问题终于解决了.因为是百度地图api提供的函数,所以这个解决办法并不适用于所有异步请求,仅仅针对百度地图api的调用接口函数和回调函数.有两种解决方法可以解决百度地图api中常出现的请求回调 ...

  6. java实现遍历一个字符串的每一个字母(总结)

    基础:牢记字符串操作的各种方法: ​​​ ​ String s = "aaaljlfeakdsflkjsadjaefdsafhaasdasd"; // 出现次数 int num = ...

  7. POJ 1921 Paper Cut(计算几何の折纸问题)

    Description Still remember those games we played in our childhood? Folding and cutting paper must be ...

  8. VBA基础之Excel 工作表(Sheet)的操作(二)

    二. Excel 工作表(Sheet)的操作1. Excel 添加工作表(Sheet) 方法名 参数 参数值 说明 Add Before 工作表名称 在指定的工作表前面插入新的工作表 After 工作 ...

  9. windows编程入门最重要的

    要入门 Windows 编程,最重要的不是阅读什么教材,使用什么工具,而是先必须把以下几个对于初学者来说非常容易困惑的重要概念搞清楚: 1. 文字的编码和字符集.这部分需要掌握 ANSI 模式和 Un ...

  10. [core python programming]chapter 7 programming MS office

    excel.pyw会有问题,解决如下: 因为python3x中没有tkMessageBox模块,Tkinter改成了tkinter你可以查看你的py当前支持的模块.在交互式命令行下输入>> ...