【FPGA】Verilog:升降计数器 | 波纹计数器 | 约翰逊计数器 | 实现 4-bit 升降计数器的 UP/DOWN

目录
Ⅰ. 理论部分
0x00 升降计数器(UP DOWN Counter)
0x01 波纹计数器(Ripple Counter)
0x02 约翰逊计数器(Johnson Counter)
Ⅱ. 实践部分
0x00 实现:升降计数器(4-bit)
0x01 绘制输出表
0x02 设计代码
0x03 仿真代码
0x04 效果演示
0x05 注意事项
Ⅰ. 理论部分
0x00 升降计数器(UP DOWN Counter)
升降计数器 (UP DOWN Counter) 是一种接收一个 UP 或 DOWN 输入的计数器,根据此输入增加或减少计数器的当前值。
- 如果
,则顺时针方向计数;如果
,则逆时针方向计数。
- 如果
,则保持静止状态,不允许
的输入。
| 升降计数器(Up/Down Counter) |
|
|
0x01 波纹计数器(Ripple Counter)
波纹计数器 (Ripple Counter) 其实就是异步计数器的别名,是完全相同的。它采用了多个 Flip-Flop 的串联形式,第一个 Flip-Flop 接收时钟值输入,而连接在后面的 Flip-Flop 则将前一个 Flip-Flop 的输出作为输入值。
异步计数器是异步时序电路,其主要特点是内部各触发器的时钟脉冲端 CP 不全都连接在一起,因此各触发器的翻转时刻有先有后,其输出可能会产生干扰毛刺现象,但其电路结构简单。
| 波纹计数器 / 异步计数器(Ripple Counter) |
|
|
0x02 约翰逊计数器(Johnson Counter)
约翰逊计数器是一种环形计数器,它将最后一个 Flip-flop 的输出 (Q) 取反 (~Q) 并传递给第一个Flip-flop 的输入。约翰逊计数器通常使用 CD4017、CD4022 等元件,主要用作十进制计数器或八进制计数器。
| 约翰逊计数器(Johnson Counter) |
|
|
Ⅱ. 实践部分
0x00 实现:升降计数器(4-bit)
📚 请描述 4 位升降寄存器的结果和仿真过程。用 Verilog 实现 4 位升降计数器,画出输出表,并在 Verilog 中验证仿真结果。
0x01 绘制输出表
| 升计数器输出表(UP) | |||||
| Number of Clk Transitions | 输出 | ||||
| L1(MSB) | L2 | L3 | L4(LSB) | DISPLAY | |
| 1 | 0 | 0 | 0 | 1 | U |
| 2 | 0 | 0 | 1 | 0 | U |
| 3 | 0 | 0 | 1 | 1 | U |
| 4 | 0 | 1 | 0 | 0 | U |
| 5 | 0 | 1 | 0 | 1 | U |
| 6 | 0 | 1 | 1 | 0 | U |
| 7 | 0 | 1 | 1 | 1 | U |
| 降计数器输出表(DOWN) | |||||
| Number of Clk Transitions | 输出 | ||||
| L1(MSB) | L2 | L3 | L4(LSB) | DISPLAY | |
| 1 | 0 | 1 | 1 | 1 | d |
| 2 | 0 | 1 | 1 | 0 | d |
| 3 | 0 | 1 | 0 | 1 | d |
| 4 | 0 | 1 | 0 | 0 | d |
| 5 | 0 | 0 | 1 | 1 | d |
| 6 | 0 | 0 | 1 | 0 | d |
| 7 | 0 | 0 | 0 | 1 | d |
0x02 设计代码
💬 Design source:
`timescale 1ns / 1psmodule UD(input reset,input clk,input up,output[3:0] out,output[6:0] DS
);reg[3:0] out;
reg[6:0] DS;always @(posedge clk) beginif(reset) beginout[3] <= 1'b0;out[2] <= 1'b0;out[1] <= 1'b0;out[0] <= 1'b0;DS <= 1'b0;endelse beginif((up == 1'b1)) beginout = out+1;DS[0] <= 1'b0;DS[1] <= 1'b1;DS[2] <= 1'b1;DS[3] <= 1'b1;DS[4] <= 1'b1;DS[5] <= 1'b1;DS[6] <= 1'b0;endif((up == 1'b0)) beginout = out-1;DS[0] <= 1'b0;DS[1] <= 1'b1;DS[2] <= 1'b1;DS[3] <= 1'b1;DS[4] <= 1'b1;DS[5] <= 1'b0;DS[6] <= 1'b1;endendendendmodule
0x03 仿真代码
💬 Testbench:
`timescale 1ns / 1psmodule UD_tb;reg clk,reset,up;
wire[3:0] out;
wire[6:0] DS;UD u_UD(.clk(clk ),.reset(reset ),.up(up ),.out(out ),.DS(DS )
);initial clk = 1'b0;
initial reset = 1'b1;
initial up = 1'b0;always clk = #20 ~clk;always@(reset) beginreset = #30 ~reset;
endalways@(up) beginup = #50 ~up;up = #20 ~up;up = #20 ~up;up = #20 ~up;up = #20 ~up;up = #20 ~up;up = #20 ~up;up = #20 ~up;up = #20 ~up;up = #20 ~up;
endinitial begin#420$finish;
endendmodule
🚩 运行结果如下:

0x04 效果演示

🔑 解读:每次时钟转换时,升降计数器都会在收到上行输入时将存储值递增 1,在收到下行输入时将存储值递减 1。由于是 4 位计数器,可表示的最大值为 15,最小值为 0。当接收到 UP 输入时,它将在 7 段显示屏上显示字母 "U";当接收到 DOWN 输入时,将在 7 段显示屏上显示字母 "d"。该电路设计为上升沿触发器,因此当时钟值从 0 变为 1 时,当前状态的变化将被应用到存储器中。
0x05 注意事项
📌 注意:值得注意的是,使用 7 段显示时,不要忘记在编写约束文件时不仅要为 7 段显示分配 7 个变量,还要在设计源文件中适当声明和分配 dp 和 digit 变量。即使正确分配了 7 段显示,如果没有分配 DP 和 DIGIT 变量,显示也将无法工作。

📌 [ 笔者 ] 王亦优
📃 [ 更新 ] 2023.11.10
❌ [ 勘误 ] /* 暂无 */
📜 [ 声明 ] 由于作者水平有限,本文有错误和不准确之处在所难免,本人也很想知道这些错误,恳望读者批评指正!
| 📜 参考资料 Introduction to Logic and Computer Design, Alan Marcovitz, McGrawHill, 2008 Microsoft. MSDN(Microsoft Developer Network)[EB/OL]. []. . 百度百科[EB/OL]. []. https://baike.baidu.com/. |
相关文章:
【FPGA】Verilog:升降计数器 | 波纹计数器 | 约翰逊计数器 | 实现 4-bit 升降计数器的 UP/DOWN
目录 Ⅰ. 理论部分 0x00 升降计数器(UP DOWN Counter) 0x01 波纹计数器(Ripple Counter) 0x02 约翰逊计数器(Johnson Counter) Ⅱ. 实践部分 0x00 实现:升降计数器(4-bit&…...
使用uniapp写小程序,真机调试的时候不显示log
项目场景: 当小程序文件太大的情况下使用真机调试,但是真机调试的调试器没有任何反应 问题描述 使用uniapp写小程序,真机调试的时候不显示log 原因分析: 提示:因为真机调试的时候没有压缩文件,所以调试的…...
hive数据库delete删除部分数据/删除分区内的数据
Hive delete 删除部分数据 一、hive删除数据1.1、删除整个表1.2、删除表中的特定行1.3、删除表中的特定分区1.4、删除分区内的部分数据1.5、清空表中的所有数据 二、扩展2.1、dynamic partition on Crud si not disabled, please set hive.crud.dynamic.partitiontrue to enabl…...
C/C++条件编译:#ifdef、#else、#endif等
文章目录 #undef指令从C预处理器角度看已定义条件编译1.#ifdef、#else和#endif指令 #ifndef指令#ifndef指令通常用于防止多次包含一个文件程序使用#ifndef避免文件被重复包含 #if和#elif指令条件编译还有一个用途是让程序更容易移植 参考 程序员可能要为不同的工作环境准备C程序…...
基于51单片机步进电机节拍步数正反转LCD1602显示( proteus仿真+程序+原理图+设计报告+讲解视频)
基于51单片机步进电机节拍步数正反转LCD1602显示 📑1. 主要功能:📑2. 讲解视频:📑3. 仿真📑4. 程序代码📑5. 设计报告📑6. 设计资料内容清单&&下载链接📑[资料下…...
Vim 从何而来?
Vim 编辑器的创造者、维护者和终身领导者 Bram Moolenaar 为了纪念这位杰出的荷兰程序员,我们今天来聊一聊 Vim 的历史。 Vim 无处不在。它被很多人使用。同时 Vim 可能是世界上 “最难用的软件之一” ,但是又多次被程序员们评价为 最受欢迎的 代码编辑…...
Auto.js 清除指定应用缓存
本文所有教程及源码、软件仅为技术研究。不涉及计算机信息系统功能的删除、修改、增加、干扰,更不会影响计算机信息系统的正常运行。不得将代码用于非法用途,如侵立删!Auto.js 清除指定应用缓存 环境 win10Pixel4Android13var packageName = ""; // 包名 var resu…...
[EFI]Surface Pro 4电脑 Hackintosh 黑苹果引导文件
硬件型号驱动情况主板Surface Pro 4处理器Intel Core i5-6300U 2.5GHz已驱动内存16GB DDR4 2400Mhz已驱动硬盘Samsung SSD 860 EVO 250G Media (Install on SSD External)已驱动显卡Intel HD Graphics 520 2GBmacOS 13以上自行添加显卡补丁声卡Realtek ALC3269(id 3…...
【Java 进阶篇】深入浅出:JQuery 事件绑定的奇妙世界
在前端的世界里,事件是不可或缺的一部分。用户的点击、输入、滚动等行为都触发着各种事件,而如何在代码中捕捉并处理这些事件是每位前端开发者必须掌握的技能之一。本文将带你深入浅出,探索 JQuery 中的事件绑定,为你揭开这个奇妙…...
Pair用法示例:
这里用到了 org.apache.commons.lang3.tuple.Pair 来封装数据(就是不想自己再写一个 DO 或者 VO 或者 MO) 在Java中,Pair是一种简单的数据结构,用于存储两个相关联的值。它没有特定的内置类,但可以通过自定义实现或使…...
rpc依赖安装
依赖: 0、boost:用于实现多线程等; 1、protobuf:用于实现数据的序列化、反序列化,也用于定义和生成rpc数据及接口; 2、libevent:用于实现基于IO多路复用机制的网络事件循环。 其实可以直接用包…...
文件存储服务 实时通信服务 HTTP通信协议
目录 文件存储服务实时通信服务HTTP通信协议 👍 点赞,你的认可是我创作的动力! ⭐️ 收藏,你的青睐是我努力的方向! ✏️ 评论,你的意见是我进步的财富! 文件存储服务 文件存储服务是一种用于…...
Redis - 订阅发布替换 Etcd 解决方案
为了减轻项目的中间件臃肿,由于我们项目本身就应用了 Redis,正好 Redis 的也具备订阅发布监听的特性,正好应对 Etcd 的功能,所以本次给大家讲解如何使用 Redis 消息订阅发布来替代 Etcd 的解决方案。接下来,我们先看 R…...
Hessian协议详解
前言 Hessian协议是一种基于二进制的轻量级远程调用协议,用于在分布式系统中进行跨语言的通信。它使用简单的二进制格式来序列化和反序列化数据,并支持多种编程语言,如Java、C#、Python等。Hessian协议相对于其他协议的优势在于其简单性和高…...
【AI视野·今日Sound 声学论文速览 第三十六期】Mon, 30 Oct 2023
AI视野今日CS.Sound 声学论文速览 Mon, 30 Oct 2023 Totally 7 papers 👉上期速览✈更多精彩请移步主页 Daily Sound Papers Style Description based Text-to-Speech with Conditional Prosodic Layer Normalization based Diffusion GAN Authors Neeraj Kumar, A…...
Android Jetpack的组件介绍,常见组件解析
jetpack组件有哪些 Android Jetpack是一个集成Android应用程序组件的一站式解决方案。它使开发人员能够专注于他们的应用程序的真正创新部分,而不会受到Android平台特定的限制。Jetpack组件可分为四个类别: 架构组件(Architecture Componen…...
ImportError: cannot import name ‘url_quote‘ from...
👨🏻💻 热爱摄影的程序员 👨🏻🎨 喜欢编码的设计师 🧕🏻 擅长设计的剪辑师 🧑🏻🏫 一位高冷无情的编码爱好者 大家好,我是全栈工…...
一文看分布式锁
为什么会存在分布式锁? 经典场景-扣库存,多人去同时购买一件商品,首先会查询判断是否有剩余,如果有进行购买并扣减库存,没有提示库存不足。假如现在仅存有一件商品,3人同时购买,三个线程同时执…...
Jenkins自动化部署一个Maven项目
Jenkins自动化部署 提示:本教程基于CentOS Linux 7系统下进行 Jenkins的安装 1. 下载安装jdk11 官网下载地址:https://www.oracle.com/cn/java/technologies/javase/jdk11-archive-downloads.html 本文档教程选择的是jdk-11.0.20_linux-x64_bin.tar.g…...
K8S1.23.5部署(此前1.17版本步骤囊括)及问题记录
应版本需求,升级容器版本为1.23.5 kubernetes组件 一个kubernetes集群主要由控制节点(master)与工作节点(node)组成,每个节点上需要安装不同的组件。 master控制节点:负责整个集群的管理。 …...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...



