二、11【FPGA】时序逻辑电路——计数器
前言
学习说明此文档为本人的学习笔记,注重实践,关于理论部分会给出相应的学习链接。
学习视频:是根据野火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]
综上所述,目前个人感觉还是界面绑定比较方便。
管脚绑定后硬件的连线图:
五、总结
二、11【FPGA】时序逻辑电路——计数器相关推荐
- 【FPGA】时序逻辑电路——基于计数器实现一个以1秒频率闪烁的LED灯
时序逻辑电路 计数器的实现 1 D触发器 分析: 特性:输出端Q只在CK处于上升沿的时候变化 图中波形的形成过程: 当D处于高电平时,CK未处于上升沿时,Q仍处于低电平 当CK来到上升沿,Q需要根据D ...
- 数字电路和模拟电路-10时序逻辑电路的分析和设计
前言:学习同步时序逻辑电路的分析.设计 一.同步时序逻辑电路的分析 1.时序逻辑电路的分析步骤 步骤一 逻辑图 同步or异步 计数器or状态机 一条总线同步,多条总线是异步 计数器无输入,状态机有输入 ...
- 4 FPGA时序约束理论篇之时钟周期约束
时钟周期约束 时钟周期约束,顾名思义,就是我们对时钟的周期进行约束,这个约束是我们用的最多的约束了,也是最重要的约束. 下面我们讲一些Vivado中时钟约束指令. 1. Create_cloc ...
- 3 FPGA时序约束理论篇之IO约束
I/O约束 I/O约束是必须要用的约束,又包括管脚约束和延迟约束. 管脚约束 管脚约束就是指管脚分配,我们要指定管脚的PACKAGE_PIN和IOSTANDARD两个属性的值,前者指定了管脚的 ...
- 1 FPGA时序约束理论篇之建立保持时间
读万卷书–时序约束理论篇 周期约束理论 首先来看什么是时序约束,泛泛来说,就是我们告诉软件(Vivado.ISE等)从哪个pin输入信号,输入信号要延迟多长时间,时钟周期是多少,让软件PAR(Pl ...
- 2 FPGA时序约束理论篇之时序路径与时序模型
时序路径 典型的时序路径有4类,如下图所示,这4类路径可分为片间路径(标记①和标记③)和片内路径(标记②和标记④). 对于所有的时序路径,我们都要明确其起点和终点,这4类时序路径的起点和终点分 ...
- 5 FPGA时序约束理论篇之两种时序例外
两种时序例外 多周期路径 上面我们讲的是时钟周期约束,默认按照单周期关系来分析数据路径,即数据的发起沿和捕获沿是最邻近的一对时钟沿.如下图所示. 默认情况下,保持时间的检查是以建立时间的检查为 ...
- 6 FPGA时序约束理论篇之xdc约束优先级
xdc约束优先级 在xdc文件中,按约束的先后顺序依次被执行,因此,针对同一个时钟的不同约束,只有最后一条约束生效. 虽然执行顺序是从前到后,但优先级却不同:就像四则运算一样,±x÷都是按照从 ...
- FPGA学习笔记(1)简单的时序逻辑电路——流水灯
FPGA学习笔记(1)简单的时序逻辑电路--流水灯 编程语言为Verilog HDL 原理 (1)设计一个计数器,使开发板上的4个LED状态每500ms翻转一次.开发板上的晶振输出时钟频率为50MHz ...
- 数电学习(六、时序逻辑电路)(二)
文章目录 若干常用的时序逻辑电路 寄存器 移位寄存器 计数器 同步计数器 同步二进制计数器 同步二进制加法计数器 经典设计 74161 同步二进制减法计数器 同步二进制加减计数器 同步十进制计数器 异 ...
最新文章
- vs.net2003在代理下的一个奇怪小问题
- matlab 神经网络设计多层隐含层_数据预测之BP神经网络具体应用以及matlab代码
- VSCode+BeetleX.VueHost开发Vue应用
- qotd服务_QOTD:Java线程与Java堆空间
- [SQL实战]之获取所有部门中当前员工薪水最高的相关信息
- 原理 rpm_图文详解,微型直流电机的工作原理
- MySQL错误Another MySQL daemon already running with the same unix socket.
- HDUOJ-------1753大明A+B(大数之小数加法)
- 1001	Hello,World!
- 火山中文编程 -- 存款本息和
- 小程序项目:基于微信小程序的培训机构系统——计算机毕业设计
- 【ENSP模拟器】RIP(HCNP)——RIPv2的配置及实现
- Advanced Javascript outlining插件说明
- 什么是云计算?云计算概念集合
- 5款主流智能音箱入门款测评:苹果小米华为天猫小度,谁的表现更胜一筹?
- 前端编程中,如何消除浏览器缓存
- 华为区块链,构建可信政务服务
- 诚之和:Python数据科学使用numpy求行均值
- 化妆品APP开发快速制作
- 【ABAP】OPEN SQL(六)「DELETE语句 | MODIFY语句」