前言

学习说明此文档为本人的学习笔记,注重实践,关于理论部分会给出相应的学习链接。

学习视频:是根据野火FPGA视频教程——第十三讲
https://www.bilibili.com/video/BV1nQ4y1Z7zN?p=3

理论学习

计数器在数字系统中主要是对脉冲的个数进行技术,实现测量、计数、控制及分频功能。控制器中的指令地址,运算器做乘法、除法。

基础知识请参考本人《数字电路技术基础》计数器部分:

《数字电子技术基础》6.3 时序逻辑电路——寄存器、计数器及脉冲发生器功能介绍_追逐者-桥的博客-CSDN博客寄存器和移位寄存器、计数器功能介绍https://blog.csdn.net/ARM_qiao/article/details/124415549

实战演练

一、设计规划

1.1 实验目标

让计数器计数1s时间间隔,来实现LED灯每隔1s闪烁一次

1.2 硬件资源

二、程序设计

2.1 模块框图及波形图

2.2 代码编写

//
// Company: 追逐者——桥的小作坊
// Create Date: 2022/05/05 20:35:58
// Module Name: counter
// Tool Versions: Vivado 2018_3
// Description:
// Revision 0.01 - File Created
// Additional Comments:FPGA学习代码
//
module counter
#(
parameter  COUNT_MAX = 25'd24_999_999          //作为模块的一个参数,再实例化时可修改
)              (output reg led_out ,input  wire sys_clk, sys_rst_n);
//    parameter  COUNT = 25'd24_999_999;    //可用于模块名后,再实例化时可修改
//    localparam COUNT = 25'd24_999_999;    //只能用于模块内部使用reg [24:0] count;always @(posedge sys_clk or negedge sys_rst_n)if(sys_rst_n == 1'b0)count <= 25'd0;else if(count == COUNT_MAX)count <= 25'd0;else count <= count + 25'd1;always @(posedge sys_clk or negedge sys_rst_n)if(sys_rst_n == 1'b0)led_out <= 1'b0;else if(count == COUNT_MAX)led_out <= ~led_out;elseled_out <= led_out;
endmodule

如果计数器结束,不只触发LED灯闪烁,而且还会触发其他输出。当多的时候不如向声明一个常数变量一样,生成一个触发标志,使用标志进行功能的触发,这样在更改调试触发条件时只需要更改标志即可,不需要每个功能的触发都改。

//count_flag:计数到最大值产生标志信号,每当计数满标志信号有效时取反
reg count_flag;
always @(posedge sys_clk or negedge sys_rst_n)if(sys_rst_n == 1'b0)count <= 25'd0;else if(count == OUNT_MAX - 25'd1) count_flag <= 1'b1;elsecount_flag <= 1'b0;
always @(posedge sys_clk or negedge sys_rst_n)if(sys_rst_n == 1'b0)led_out <= 1'b0;else if(count_flag == 1'b1)led_out <= ~led_out;elseled_out <= led_out;

综合后的RTL视图,可以右键点击视图,查看对应的代码。

三、逻辑仿真

3.1 仿真文件的编写

`timescale 1ns / 1ns
//
// Company: 追逐者——桥的小作坊
// Create Date: 2022/05/05 20:35:58
// Module Name: counter
// Tool Versions: Vivado 2018_3
// Description:
// Revision 0.01 - File Created
// Additional Comments:FPGA学习代码
//
module tb_counter();reg SYS_CLK, SYS_RST_N;wire LED_OUT;initial beginSYS_CLK = 1'b1;SYS_RST_N <= 1'b0;#20 SYS_RST_N <= 1'b1;endalways #10 SYS_CLK = ~SYS_CLK;counter #(.COUNT_MAX (25'd15)         //作为模块的一个参数,再实例化时可修改) count_inst(.led_out( LED_OUT ),.sys_clk( SYS_CLK ), .sys_rst_n(SYS_RST_N));
endmodule

3.2 仿真波形图对比

 对比上面波形图,虽然源代码是0.5s变换一次电平,但是由于仿真代码中设置的最大计数是15,因此再15后,计数器下一个状态变为0,同时改变输出电平。

四、上板验证

4.1 管脚绑定

界面绑定

Ctrl+s保存成XDC文件

编写绑定程序

set_property IOSTANDARD LVCMOS33 [get_ports led_out]
set_property IOSTANDARD LVCMOS33 [get_ports sys_clk]
set_property IOSTANDARD LVCMOS33 [get_ports sys_rst_n]
set_property PACKAGE_PIN M21 [get_ports led_out]
set_property PACKAGE_PIN W19 [get_ports sys_clk]
set_property PACKAGE_PIN N15 [get_ports sys_rst_n]

综上所述,目前个人感觉还是界面绑定比较方便。

管脚绑定后硬件的连线图:

五、总结

新语法总结
重点掌握
1、paramter 的用法(出现在模块内部的局部定义)
知识点总结
1、能够通过自己慢慢的分析绘制出时序逻辑电路的波形;
2、学会根据计数器的计数时钟来精确计算我们要想计数的时间和个数,熟练的控制计数
器;
3、能够了解 flag 脉冲标志信号的意义,如何精确产生,以及应用场景;
4、学会分析简单时序逻辑的 RTL 视图,理解设计的 RTL 代码就是硬件的思想。

二、11【FPGA】时序逻辑电路——计数器相关推荐

  1. 【FPGA】时序逻辑电路——基于计数器实现一个以1秒频率闪烁的LED灯

    时序逻辑电路 计数器的实现 1 D触发器 分析: 特性:输出端Q只在CK处于上升沿的时候变化 图中波形的形成过程: 当D处于高电平时,CK未处于上升沿时,Q仍处于低电平 当CK来到上升沿,Q需要根据D ...

  2. 数字电路和模拟电路-10时序逻辑电路的分析和设计

    前言:学习同步时序逻辑电路的分析.设计 一.同步时序逻辑电路的分析 1.时序逻辑电路的分析步骤 步骤一 逻辑图 同步or异步 计数器or状态机 一条总线同步,多条总线是异步 计数器无输入,状态机有输入 ...

  3. 4 FPGA时序约束理论篇之时钟周期约束

    时钟周期约束   时钟周期约束,顾名思义,就是我们对时钟的周期进行约束,这个约束是我们用的最多的约束了,也是最重要的约束.   下面我们讲一些Vivado中时钟约束指令. 1. Create_cloc ...

  4. 3 FPGA时序约束理论篇之IO约束

    I/O约束   I/O约束是必须要用的约束,又包括管脚约束和延迟约束. 管脚约束   管脚约束就是指管脚分配,我们要指定管脚的PACKAGE_PIN和IOSTANDARD两个属性的值,前者指定了管脚的 ...

  5. 1 FPGA时序约束理论篇之建立保持时间

    读万卷书–时序约束理论篇 周期约束理论   首先来看什么是时序约束,泛泛来说,就是我们告诉软件(Vivado.ISE等)从哪个pin输入信号,输入信号要延迟多长时间,时钟周期是多少,让软件PAR(Pl ...

  6. 2 FPGA时序约束理论篇之时序路径与时序模型

    时序路径   典型的时序路径有4类,如下图所示,这4类路径可分为片间路径(标记①和标记③)和片内路径(标记②和标记④).   对于所有的时序路径,我们都要明确其起点和终点,这4类时序路径的起点和终点分 ...

  7. 5 FPGA时序约束理论篇之两种时序例外

    两种时序例外 多周期路径   上面我们讲的是时钟周期约束,默认按照单周期关系来分析数据路径,即数据的发起沿和捕获沿是最邻近的一对时钟沿.如下图所示.   默认情况下,保持时间的检查是以建立时间的检查为 ...

  8. 6 FPGA时序约束理论篇之xdc约束优先级

    xdc约束优先级   在xdc文件中,按约束的先后顺序依次被执行,因此,针对同一个时钟的不同约束,只有最后一条约束生效.   虽然执行顺序是从前到后,但优先级却不同:就像四则运算一样,±x÷都是按照从 ...

  9. FPGA学习笔记(1)简单的时序逻辑电路——流水灯

    FPGA学习笔记(1)简单的时序逻辑电路--流水灯 编程语言为Verilog HDL 原理 (1)设计一个计数器,使开发板上的4个LED状态每500ms翻转一次.开发板上的晶振输出时钟频率为50MHz ...

  10. 数电学习(六、时序逻辑电路)(二)

    文章目录 若干常用的时序逻辑电路 寄存器 移位寄存器 计数器 同步计数器 同步二进制计数器 同步二进制加法计数器 经典设计 74161 同步二进制减法计数器 同步二进制加减计数器 同步十进制计数器 异 ...

最新文章

  1. vs.net2003在代理下的一个奇怪小问题
  2. matlab 神经网络设计多层隐含层_数据预测之BP神经网络具体应用以及matlab代码
  3. VSCode+BeetleX.VueHost开发Vue应用
  4. qotd服务_QOTD:Java线程与Java堆空间
  5. [SQL实战]之获取所有部门中当前员工薪水最高的相关信息
  6. 原理 rpm_图文详解,微型直流电机的工作原理
  7. MySQL错误Another MySQL daemon already running with the same unix socket.
  8. HDUOJ-------1753大明A+B(大数之小数加法)
  9. 1001 Hello,World!
  10. 火山中文编程 -- 存款本息和
  11. 小程序项目:基于微信小程序的培训机构系统——计算机毕业设计
  12. 【ENSP模拟器】RIP(HCNP)——RIPv2的配置及实现
  13. Advanced Javascript outlining插件说明
  14. 什么是云计算?云计算概念集合
  15. 5款主流智能音箱入门款测评:苹果小米华为天猫小度,谁的表现更胜一筹?
  16. 前端编程中,如何消除浏览器缓存
  17. 华为区块链,构建可信政务服务
  18. 诚之和:Python数据科学使用numpy求行均值
  19. 化妆品APP开发快速制作
  20. 【ABAP】OPEN SQL(六)「DELETE语句 | MODIFY语句」

热门文章

  1. 解决win10安装失败原因和方法
  2. ContentProvider
  3. 形象理解数字证书的基本安全功能
  4. 农民股神六万元博出千万身家
  5. 读书笔记:专为中国人写的记忆书-数字密码表
  6. 股权激励与期权激励的区别是什么?
  7. 设计模式(一):工厂模式
  8. 基于宽表的数据建模应用
  9. 两路VL53L0X激光测距传感器的使用
  10. ZOJ 3551 Bloodsucker(概率)