当前位置:   article > 正文

Verilog计时(微秒、毫秒和秒)脉冲的产生及同步整形电路_verilog延时毫秒

verilog延时毫秒

SoC设计中,有时需要产生微秒、毫秒或者秒脉冲。同样,一个复杂电路中,很多不同的内部电路中也需要产生这类定时脉冲。比较好的方法是设计一个定时器电路,它产生不同类型的定时脉冲,供所有其他电路使用以降低逻辑资源消耗。定时器电路可以产生us_tick(微秒标记),ms_tick(毫秒标记)和sec_tick(秒标记),供整个系统使用,如图6.36所示。假设输入时钟频率为200MHz,每个时钟周期长为5ns,那么产生微秒标记就需要计数器进行从0到199的循环计数。此后,我们就可以利用us_tick和一个在0到999之间进行循环计数的计数器来产生ms_tick以此类推,可以产生ms_tick和sec_tick。

定时器电路的代码及仿真结果如下。

  1. module timetick_gen(clk_100,reset,us_tick,ms_tick,sec_tick);
  2. input clk_100,reset;
  3. output us_tick,ms_tick,sec_tick;
  4. reg [7:0] us_counter;
  5. wire [7:0] us_counter_nxt;
  6. reg us_tick;
  7. wire us_tick_nxt;
  8. reg [9:0] ms_counter,ms_counter_nxt;
  9. reg ms_tick;
  10. wire ms_tick_nxt;
  11. reg [9:0] sec_counter;
  12. wire[9:0] sec_counter_nxt;
  13. reg sec_tick;
  14. wire sec_tick_nxt;
  15. assign us_counter_nxt = (us_counter == 'd99)?'d0:(us_counter + 1'b1);
  16. assign us_tick_nxt = (us_counter == 'd99);
  17. always@(*)begin
  18.  ms_counter_nxt = ms_counter;
  19.  if(us_tick)begin
  20.   if(ms_counter == 'd999) ms_counter_nxt = 'd0;
  21.   else ms_counter_nxt = ms_counter_nxt + 1;
  22.  end
  23. end
  24. assign ms_tick_nxt = (ms_counter == 'd999);
  25. assign sec_counter_nxt = ms_tick?((sec_counter == 'd999)?'d0:(sec_counter + 1)):sec_counter;
  26. assign sec_tick_nxt = (sec_counter == 'd999);
  27. always@(posedge clk_100 or negedge reset)begin
  28.  if(!reset)begin
  29.   us_counter <= 'd0;
  30.   ms_counter <= 'd0;
  31.   sec_counter <= 'd0;
  32.   us_tick <= 'd0;
  33.   ms_tick <= 'd0;
  34.   sec_tick <= 'd0;
  35.  end
  36.  else begin
  37.   us_counter <= us_counter_nxt;
  38.   ms_counter <= ms_counter_nxt;
  39.   sec_counter <= sec_counter_nxt;
  40.   us_tick <= us_tick_nxt;
  41.   ms_tick <= ms_tick_nxt;
  42.   sec_tick <= sec_tick_nxt;
  43.  end
  44. end
  45. endmodule

测试代码如下:

  1. `timescale 1ns/1ns
  2. module testbench;
  3. reg clk_100_tb;
  4. reg reset_tb;
  5. wire us_tick_tb,ms_tick_tb,sec_tick_tb;
  6. parameter CLK_HALF_PERIOD = 5;
  7. initial begin
  8.  clk_100_tb = 0;
  9.  forever #CLK_HALF_PERIOD clk_100_tb = ~clk_100_tb;
  10. end
  11. initial begin
  12.  reset_tb = 0;
  13.  #100 reset_tb = 1'b1;
  14. end
  15. timetick_gen    timetick_gen_test
  16.   (.clk_100(clk_100_tb),
  17.   .reset(reset_tb),
  18.   .us_tick(us_tick_tb),
  19.   .ms_tick(ms_tick_tb),
  20.   .sec_tick(sec_tick_tb));
  21.   
  22. endmodule

仿真结果如下:

波形整形电路

有时,我们需要根据特定的输入波形产生所需的输出波形,例如,将下降沿延长几个时钟周期、去掉几个上升沿等。接下来我们将讨论一些通用的例子,理解波形整形的基本概念和方法,并推广到其他类似的应用之中。其基本思路是将一个输入波形的上升沿和下降沿通过触发器进行延迟,延迟后的波形与原始波形通过组合逻辑电路处理后得到所需的波形。

在下面的例子中,输人信号为A,我们希望产生上升沿被延迟两个时钟周期、下降沿被延迟一个时钟周期的输出信号为B,如图6.37所示。

输入信号A通过两个触发器进行移位寄存,产生A_del1和A_del2。使用下面的组合逻辑产生最终输出的信号B:B=A_del2 & A_del1, 如下图所示:

NOW

学习Xilinx FPGA最好的资料其实就是官方手册,下表总结了部分手册的主要介绍内容,关注我,持续更新中......

文件名主标题内容简单介绍是否有中文版
UG4767 Series FPGAs GTX/GTH  TransceiversGTX和GTH介绍,PCIe、serdes等学习必备
UG4717 Series FPGAs SelectIO Resources描述 7 系列 FPGA 中可用的 SelectIO资源。
UG1114PetaLinux Tools DocumentatonPetaLinux 工具文档 参考指南是,V2019.2
UG949UltraFAST 设计方法指南(适用于 Vivado  Design Suite)赛灵思® UltraFast™  设计方法是用于为当今器件优化设计进程的一套最佳实践。这些设计的规模与复杂性需要执行特定的步骤与设计任务,从而确保设计每一个阶段的成功开展。依照这些步骤,并遵循最佳实践,将帮助您以最快的速度和最高的效率实现期望的设计目标是,V2018.1
IP手册pg057FIFO GeneratorFIFO生成器IP使用手册
pg104Complex Multiplier复数乘法器IP使用手册
pg122RAM-Based Shift Register 移位寄存器IP使用手册

推荐阅读

【Vivado那些事】如何查找官网例程及如何使用官网例程

【Vivado使用误区与进阶】总结篇

【Vivado那些事】Vivado中常用的快捷键(二)其他常用快捷键

SystemVerilog数字系统设计_夏宇闻 PDF

图书推荐|ARM Cortex-M0 全可编程SoC原理及实现

简谈:如何学习FPGA

1202年了,还在使用虚拟机吗?Win10安装Ubuntu子系统及图形化界面详细教程

Github 上有哪些优秀的 VHDL/Verilog/FPGA 项目

AD936x+ZYNQ搭建收音机(一)

AD936x+ZYNQ搭建OpenWIFI

无招胜有招-Vivado非工程模式下的详细设计

追寻ARM的起源-Acorn电脑简史及FPGA实现

面试中经常会遇到的FPGA基本概念,你会几个?

Xilinx FPGA MIPI 接口简单说明

介绍一些新手入门FPGA的优秀网站

Vivado ML(机器学习) 2021尝鲜

推荐一些可以获取免费的国外的原版书籍(电子版)网站

【Vivado那些事】FPGA的配置方式

FPGA 的重构

浅析FPGA局部动态可重构技术

ISP(图像信号处理)算法概述、工作原理、架构、处理流程

国产CPU概括

从电子游戏历史看IC发展的助推剂

80年代电子游戏及电脑游戏的发展历史

PCIe总线的基础知识

万字长文带你回顾电子游戏的七十多年历史(完整版)

FPGA中异步复位,同步释放的理解

OpenFPGA系列文章总结

用Verilog设计一个16 位 RISC 处理器

介绍一些新手入门FPGA的优秀网站(新增)

Verilog数字系统基础设计-CRC

FPGA 的布局规划艺术

Verilog数字系统基础设计-奇偶校验

建立和保持时间及时序简单理解

(Xilinx)FPGA中LVDS差分高速传输的实现

Xilinx Multiboot实例演示

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/411198
推荐阅读
相关标签
  

闽ICP备14008679号