常用数字电路模块:计数器与分频器(一)

本文介绍常见的电路——计数器,方便后续讲解分频电路。

一、计数器

(1)计数器代码
  计数器,顾名思义就是在时钟的节拍下进行计数,一个简单的N位计数器的代码如下所示,这个计数器从0计数到2N -1(共计数了2N个数,也就是N位计数器。例如0,1,2,3,计数到2的2次方-1,共计2的2次方个数,是一个2位计数器)


module count#(parameter N=8)(
input clk,
input clear,
output[N-1:0] cnt_Q
);
reg[N-1:0] cnt;
assign cnt_Q = cnt;//傀儡8位寄存器always@(posedge clk)if(clear)cnt <= 'h0;      //同步清 0,高电平有效elsecnt <= cnt+1'b1; //加法计数endmodule

  上述代码中,有一行很不起眼,always@(posedge clk):同步复位。
  当复位信号发生变化时,并不立即生效,而是等到有效时钟沿采集到复位信号的变化后,才会对寄存器进行复位操作。 同步复位的过程是依赖于时钟信号的,所以称之为同步。由于在现有的大多数逻辑器件库中,触发器DFF都是只包含有异步复位端口,所以同步复位的使用会造成冗余组合逻辑的使用,浪费资源将同步复位改为异步复位:

always@(posedge clk or negedge reset)  //异步复位if(!reset) beginout1 <= 0   ;elseout1 <= in1 ;

   异步复位则不依赖于系统时钟,一旦信号发生变化,就会立即对寄存器进行复位操作。 异步复位信号一般会持续相对较长的时间,保证寄存器能复位完成。但是由于复位信号是异步的,我们不知道它会在什么时刻被释放。如果异步复位信号撤销时,不满足recovery time和removal time时,可能会造成亚稳态。
  为减少亚稳态的产生,采用傀儡寄存器寄存,进行异步复位同步释放

module sync_async_reset(clock,reset_n,rst_n);input clock, reset_n;output rst_n;reg rst_nr1, always @(posedge clock or negedge reset_n) beginif(!reset_n) beginrst_nr1 <= 1'b0;rst_n <= 1'b0;		//异步复位endelse beginrst_nr1 <= 1'b1;rst_n <= rst_nr1;		//同步释放endend//新的系统复位信号rst_n//信号rst_n作为新的系统复位信号,后续可以用来直接“异步复位”endmodule

  上述描述的计数器通过 clear 信号清除计数值,然后下一周期开始加 1 计数;当计数器计到能够存储的最大数值时, 例如本例为 8 个 1,即 8’hff 就会自动回到 0,然后开始下一轮计数。
改进计数器实现0~k范围内计数,其中k不等于2N:

   always@(posedge clk)if(clear)cnt <=  'h0;    //同步清 0,高电平有效else if(cnt==K)cnt <= 'h0;elsecnt <= cnt+1'b1; //加法计数

  前面是累加计数,下面是一个既可以递增也能递减,且具备初始值装载和复位的计数器,代码如下所示:

module updown_count#(parameter N=8)(input clk,input clear,input load,input up_down,input [N-1:0] preset_D,output[N-1:0] cnt_Q
);
reg[N-1:0] cnt;
assign cnt_Q = cnt;always@(posedge clk)if(clear)cnt <= 'h0;      //同步清 0,高电平有效else if(load)cnt <= preset_D; //同步预置else if(up_down)cnt <= cnt+1;    //加法计数elsecnt <= cnt-1;    //减法计数endmodule

二、计数器的用途

(1)基本的计数功能与分频
  计数器的基本功能顾名思义就是计数了,用来计数,产生某个信号等等。利用这个功能,可以实现信号的分频,具体会在后面的分频电路中进行描述。
(2)看门狗
  计数器其实就可以设计成看门狗。在初始状态时,看门狗电路首先装载一个大数;当状态机或者程序开始运行后,看门狗开始倒计数。如果状态机或程序运行正常,每隔一段时间应发出指令或信号让看门狗重新装载一个大的初始值,并再次开始倒计数。如果看门狗减到 0 就认为程序或状态机没有正常工作,就需要强制整个系统复位。
上面的第二处改进的计数器电路描述就是一个看门狗电路,只要加上 cnt==0 作为看门复位状态即可;而 load 信号则是状态机或软件给出的喂狗动作。
(3)特殊的有限状态机
  当状态机要求没有那么严格的时候,这个时候就可以用计数器的计数值当做状态机的状态,计数增加或者减少就是改变状态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/262.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python爬虫

一.爬虫介绍 1.什么是爬虫 爬虫&#xff08;Spider&#xff09;&#xff0c;也被称为网络爬虫或网络蜘蛛&#xff0c;是一种自动化程序&#xff0c;用于在互联网上浏览和提取信息。爬虫通过模拟人类用户访问网页的行为&#xff0c;从网页中提取数据并将其存储或进行进一步处理…

ubuntu freeradius 3.0 + mariadb

安装数据库及Radius sudo apt update sudo apt install -y freeradius freeradius-mysql freeradius-utils mariadb-server mariadb-client# sudo mysql_secure_installationNOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDBSERVERS IN PRODUCTION USE…

Springboot启用HTTP响应压缩

官方文档:https://docs.spring.io/spring-boot/docs/2.3.12.RELEASE/reference/htmlsingle/#how-to-enable-http-response-compression

mmc记录

1、获取csd&#xff0c;也就是DSR寄存器 说是应该可以获取块长度、卡存储容量等&#xff0c;但是在8953上&#xff0c;没看到这个日志 参考&#xff1a; 一、有6个主要的和寄存器 1、OCR寄存器 描述了存储卡的Vdd电压描述 &#xff0c;总共32Bit Bit31 --- 卡上电状态位&…

赋能智能智造-RK3568智能主板助力机器人产业高速发展

机器人作为现代制造业的重要一环&#xff0c;正在以惊人的速度推动着生产效率和智能化水平的提升&#xff0c;它们在生产线上的准确操作和高效工作&#xff0c;为企业带来了巨大的竞争优势。关于工业机器人的编程和控制技术&#xff0c;在过去几年中已经有了很多发展和新的应用…

计算机网络——物理层

物理层 物理层是计算机网络体系结构中的底层层级&#xff0c;负责处理计算机与物理传输媒介之间的接口和通信细节。它主要关注如何在物理媒介上传输原始比特流&#xff0c;并确保数据能够可靠地从发送方传输到接收方。 物理层的主要任务包括&#xff1a; 传输介质&#xff1a…

谷歌Bard入门指南

文章目录 谷歌Bard入门指南一、简介二、使用指南三、中文化3.1 中文提问3.2 中文回答 四、Hello Game五、亮点 谷歌Bard入门指南 一、简介 Bard 是一个大型语言模型&#xff0c;也称为对话式 AI 或聊天机器人&#xff0c;经过训练&#xff0c;内容丰富且全面。Bard 接受过大量…

无线基站与无线频谱资源

文章目录 基站的主要组成天线馈线&#xff08;电缆线&#xff09;RRU&#xff08;射频拉远单元&#xff0c;Remote Radio Unit&#xff09;BBU&#xff08;室内基带处理单元&#xff0c;Building Base band Unit&#xff09;AAU&#xff08;有源天线单元&#xff0c;Active Ant…

计算机网络 day3 广播风暴 - VLAN - Trunk

目录 广播风暴&#xff1a; 1.什么是广播风暴&#xff1f; 2.危害&#xff1a; 3.防范 STP生成树协议&#xff1a;(72条消息) 生成树协议 — STP_生成树协议步骤_一下子就醒了的博客-CSDN博客 VLAN&#xff1a; VLAN是什么&#xff1f; VLAN起到的作用&#xff1a; 广…

Redis 主从配置、哨兵、集群模式

目录 Redis 主从复制 主从复制的作用&#xff1a; 主从复制流程&#xff1a; 搭建Redis 主从复制 安装 Redis 环境准备 修改内核参数 安装redis 创建redis工作目录 环境变量 定义systemd服务管理脚本 修改 Redis 配置文件&#xff08;Master节点操作&#xff09; …

【C++/嵌入式笔试面试八股】bootloader

bootloader 01.什么是bootloader? 嵌入式芯片启动过程全解析,彻底理解bootloader_哔哩哔哩_bilibili Bootloader(引导加载程序)是一段位于计算机系统启动区的特殊程序,主要负责加载操作系统的内核(kernel)并将控制权交给它,从而启动计算机系统。Bootloader 是计算机…

Linux下载安装opencv时报错:CMake Error

1、CMake Error at 3rdparty/ippicv/downloader.cmake:73 (file): file DOWNLOAD HAS 解决办法&#xff1a;解压后的opencv文件里的/home/kevin/opencv-3.2.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/ippicv_linux_20151201.tgz这个文件有问题&…

Python Flask构建微信小程序订餐系统 (六)

🔥 账号管理 🔥 展示账户列表 默认情况下的账户列表布局 查询用户信息 查询 所有用户信息 按照 倒序 的方式查询出来 User.query.order_by( User.uid.desc() ).all() ......@route_account.route("/index") def index():#模版文件夹取名叫 "account/login…

如何安装 Eigen

1.离线包安装&#xff08;推荐&#xff09; 1.1 安装包下载 安装包下载网址&#xff1a; http://eigen.tuxfamily.org/index.php?titleMain_Page 在该网站中&#xff0c;可以下载任意版本对应的文件&#xff0c;本例下载了 eigen-3.4.0.tar.gz 格式压缩文件&#xff08;eige…

【Python爬虫与数据分析】Jupyter的安装与快捷键

目录 一、jupyter notebook安装与配置 二、命令模式快捷键 三、编辑模式快捷键 四、文件操作 一、jupyter notebook安装与配置 安装&#xff1a;Jupyter Notebook是以网页的形式打开的一个程序&#xff0c;集成在Anaconda包里面&#xff0c;也可以直接安装python3解释器&a…

C#基础学习_泛型集合List<T>

C#基础学习_泛型集合List 为什么要使用集合? 数组元素个数是固定的,数组一旦定义,就无法改变元素总数。如果需求变化,则必须修改源码。 如果初始化元素总数非常大,则会造成浪费。 集合的特点: 根据需要动态增加元素个数,没有限制 List泛型集合的存储结构,与数组类似,…

数据库基本操作-----数据库用户管理和授权

目录 一、数据库用户管理 1&#xff0e;新建用户 2&#xff0e;查看用户信息 3&#xff0e;重命名用户 4&#xff0e;删除用户 ​编辑5&#xff0e;修改当前登录用户密码 6&#xff0e;修改其他用户密码 7&#xff0e;忘记 root 密码的解决办法 &#xff08;1&#xff09;修…

window环境下安装Node并修改保存缓存的位置

0, 卸载Node 打开cmd命令行窗口 输入&#xff1a; npm cache clean --force然后在控制面版中卸载node 1&#xff0c;官网下载Node.js 点击官网下载 如一台电脑需要多个node环境 可使用nvm命令进行操作安装并且可以切换 2&#xff0c; 配置环境变量 安装成功之后&#x…

一、Dell服务器的iDRAC管理卡连接

Dell服务器的iDRAC管理卡图文教程 1、网线连接idrac口2、查看idrac地址3、匹配IP地址4、web登录idrac页面5、登录成功页面 带有集成戴尔远程访问控制器 &#xff08;idrac&#xff09;的系统具有默认用户名和密码&#xff0c;但您也可以使用安全密码对其进行配置。默认使用web浏…

Hive(26):Select高级查询之Common Table Expressions(CTE)

1 CTE介绍 公用表表达式&#xff08;CTE&#xff09;是一个临时结果集&#xff0c;该结果集是从WITH子句中指定的简单查询派生而来的&#xff0c;该查询紧接在SELECT或INSERT关键字之前。 CTE仅在单个语句的执行范围内定义。一个或多个CTE可以在Hive SELECT&#xff0c;INSER…