任意进制计数器
看懂 74160/74161 改接套路,独立设计任意 N 进制计数器
按 空格/→ 演示下一步
全部页面点击任意一页,跳回舞台从这页播放
任意进制计数器
看懂 74160/74161 改接套路,独立设计任意 N 进制计数器
计数器构成的核心原理
上一页我们看了任意进制计数器的三种实现——复位法、置数法、级联法,外形各异。但剥掉外壳,它们的灵魂都一样:一个有限状态机。今天钻进去,看模N的本质。
传送带上 N 个固定餐位绕一圈回到起点——餐位编号即状态,前进一格即 +1 转移,转完 N 格自动归位
构成方法概述
根据目标进制 N 与现成芯片模数 M 的比较结果,选取完全不同的构成路径。
举例:N>M(置零法)
以60进制计数器为例:两片74LS161级联后总容量256远超目标模数60,须用置零法把自然计数序列截断在0~59。
N>M电路时序分析
沿时间轴看时钟、计数器、置零三方的接力:CLK 推计数 → 计数器进入 1010 → RST 拉高 → 异步清零。
举例:N<M(级联法)
目标模数 M 大于单片模数 N 时,把 k 片同模计数器级联起来扩展。
N<M级联连接图
信号从左向右流:低位计满溢出,进位CO作为高位时钟CLK的触发源。
计数器应用场景概览
前两节我们解决了「怎么搭」——任意进制、级联都搞定了。但计数器到底用来干什么?三个最经典的场景:分频、定时、顺序控制,本质都基于「数脉冲」这一个能力。
每跑一圈+1;可测配速(分频)、跑够N圈收工(定时)、第几圈对应补给站(顺序)
分频器设计实例
用决策流程展示如何从输入时钟fn得到任意整数分频输出,先判断M是否为2的幂,再选择直通路径或计数器路径。
计数器实现序列发生器
用 Python 仿真:模6计数器 + 与或非门,输出 001011 循环序列。
真值表把序列变成 Q→F 映射;卡诺图利用 m6、m7 不出现作约束项化简;计数器提供时序、组合逻辑产生输出——任意长度序列都可用此套路生成。
设计流程总览
序列检测器或计数器的完整设计,从需求到电路共过这六道关。
第一步:建立状态转换图
先把功能需求翻译成可检查的状态转换图,明确每个状态在各种输入下的唯一去向。
状态化简方法
上一步我们画出了完整的状态转换图,但里面可能有「看起来不同、其实一样」的节点。类比整理通讯录:重复联系人要合并;状态化简就是把功能重复的状态合并,以减少触发器数量。
两人无论何时打电话都是同一人接→输出相同;朋友圈互相认识→次态等价
状态编码策略
从化简后的n个状态出发,先列三种编码的硬件开销,再按场景决定取舍。
触发器选型与方程求解
从状态转换表到具体电路,核心是选定触发器类型并推出它的驱动方程。
设计举例:序列检测器
用Verilog把上一页的状态转换表与触发器方程落到代码,看清方程如何映射成HDL
L11 状态编码与编码表一致;L18 用D触发器实现状态寄存器;L24-L34 是次态卡诺图化简后的组合逻辑;L32 实现允许重叠回到S1;L37 是Mealy输出 y=Q1Q0x
动态特性分析的意义
前面我们把状态表变成了电路,逻辑推导看似完美。但请记住一个事实:逻辑正确≠电路在真实时钟下能跑起来。
跑者反应=tco,棒飞行=tpd,接棒准备=tsu,掉棒=建立时间违例
建立时间与保持时间
以CLK上升沿为锚点,看数据D在边沿前后必须保持稳定的两个时序窗口。
传输延迟特性
沿一次时钟边沿到输出稳定,信号走过的整条时间链路——这就是计数器最高工作频率的硬约束。
时序路径分析
上一页我们看到每个门都有自己的延迟。但电路实际跑多快,不由单门决定——信号要穿过整条路径才能落到下一级触发器。这就像接力赛,总成绩看的是最慢那一棒,而不是平均速度。
总成绩=各棒用时之和,最慢一棒决定上限;路径求和找最大值同理
半导体存储器
掌握触发器原理与动态时序约束,构建可靠的数字记忆
存储器的本质结构
上一讲我们认识了半导体存储器的两大族群——ROM 与 RAM。这一页要拆开它们的「骨架」,看任何存储器内部都绕不开的三块基石。
柜号=地址,柜格矩阵=存储阵列,存取动作=读写控制
存储器分类总览
同样是"存储器",RAM 和 ROM 名字像、用途却截然不同——核心区别在"数据能不能改、掉电还在不在"。
- 数据可读可写,随意修改
- 掉电后数据全部丢失(易失)
- 速度极快,做运行内存
- 典型:SRAM、DRAM
- 数据写入后一般只读
- 掉电后数据依然保存(非易失)
- 速度较慢,做程序存储
- 典型:PROM、EPROM、Flash
存储器内部结构框图
地址译码选单元,读写控方向,I/O管数据进出。
ROM基本结构
ROM由译码器和或门阵列构成:地址经译码选中唯一字线,再由或阵列汇总为各输出位。
ROM工作原理
ROM 读一次数据,从地址送到数据线上要经过四步,每步对应一套独立硬件。
掩模ROM
前页我们知道 ROM 通过字线位线的'通'与'断'来存 0 和 1。这些通断在芯片里是谁来定的?今天看最'固执'的一种——掩模 ROM:工厂一次性定型,出厂后谁来都改不了。
形状由模具一次性冲死,要改只能重开模具
可编程ROM(PROM)
上一页讲到的掩模ROM,数据是厂家在生产时通过掩模板写死的——小批量原型想改一个字,得重开一版掩模,成本动辄上万。有没有一种ROM能让用户自己写入?这就是PROM的出发点。
正常工作电流小、保持连通;过流时熔断、状态永久改变——名字与原理都同源
可擦除ROM(EPROM)
PROM 只能写一次,因为熔丝烧断就接不回去。能不能让芯片'失忆'、重新写?EPROM 的回答是——把电子困在一个'小岛'上,再用紫外线把它们赶出来。
写入=电子掉进水池被盖子困住,UV=阳光透过玻璃给电子能量跳出来
电擦除ROM(EEPROM)
上页 EPROM 擦除要拆芯片、紫外线照 20 分钟,工程师嫌麻烦——能不能只擦一个字节就改一个字节?EEPROM 正是为这个痛点而生。
每个字旁有小按钮,按一下只擦那一个字;EPROM 要把整本拿太阳晒
SRAM结构
六管存储单元的原理与工作方式
DRAM结构
单管存储单元与电容刷新机制
SRAM vs DRAM对比
SRAM和DRAM都存二进制位,但一个靠触发器稳态、一个靠电容电荷——结构差异决定速度、密度、成本的天壤之别。
- 单元结构:6个MOS管构成触发器
- 访问速度:几ns,无需刷新
- 集成密度:低,每个位6管
- 单位成本:贵
- 单元结构:1管+1电容存电荷
- 访问速度:较慢,需周期刷新
- 集成密度:高,每个位1管
- 单位成本:便宜
RAM读写时序
RAM操作分读和写两条时序路径,每条都有一组参数必须满足。
位扩展原理
前面学过 SRAM 和 DRAM 的内部结构,现在假设 CPU 需要一次读出 8 位数据,但你手头只有 4 位的存储芯片——怎么办?
车道从 1 条变 N 条,所有车同时通过(同时选通),但每条车道跑不同的车(不同数据位)
位扩展电路图
两片 4 位芯片如何拼成 8 位存储器?看地址线的并联、数据线的分接方式。
字扩展原理
上一页用位扩展把每个单元的位数补齐了,但单元总数还不够怎么办?比如要 1K×8 的容量,手头却只有 256×8 的芯片——这就需要字扩展:多片并联,让高位地址去选片。
每层书架数相同(位宽不变),楼层号就是高位地址,决定去哪一层
字扩展电路图
译码器控制芯片使能、地址线扩展
位+字复合扩展
位扩展加宽字长,字扩展增加字数,复合扩展要把两组规则同时落地。
ROM实现组合逻辑的原理
上节我们看到 ROM 是「地址→数据」的硬连线查表器。反过来看,组合逻辑本质上也是「输入→输出」的映射——这意味着组合逻辑可以被 ROM 完整替代,而且不必做任何化简。
菜名是地址,价格是数据——你不用算价格,菜单已写死;ROM 也不「算」函数,只是把真值表固化下来
设计步骤
用ROM实现组合逻辑,本质是把真值表固化进硬件,四步走完即可落地。
设计举例:码制转换器
用 Python 仿真 BCD→格雷码 ROM 转换器:地址选通、数据输出,逻辑即存储。
高亮行演示:异或公式得格雷码;列表即 ROM 烧录内容;查表函数等价组合逻辑硬件输出。
何时用ROM替代组合电路
码制转换器用 ROM 替代门电路很简洁。但 ROM 不是越用越好——什么场景下它才真正胜过门电路?这是个工程判断题。
菜品固定时,输入「菜名」直接读「价格」,不现场算成本;函数若常变则不适合
知识体系总览
- ✓计数器=模N状态机,状态数决定触发器数量与编码
- ✓时序设计流程:状态图→化简→编码→求方程
- ✓建立/保持/延迟决定时序系统最高工作频率
- ✓存储器=地址查表ROM,与组合逻辑真值表等价
- ✓计数器+ROM即可生成任意序列,是两大模块交汇点
核心概念自测
用4片容量为 1K×8 的 RAM 芯片扩展构成 4K×8 的存储器系统,下列关于扩展方式的描述正确的是?
课后思考
三问覆盖回顾、应用与边界。先独立思考,再对照参考。
参考答案置零法适 N<M,级联法适 N>M。置零法会产生毛刺,级联法增加传播延迟和级数。
参考答案ROM 用查表替代逻辑化简,门电路靠最小项实现。变量或函数多时用 ROM 更划算,但损失速度。
参考答案建立时间保证数据先于时钟到达;保持时间保证其后再变。任一为零则时序约束失效,实际电路无法稳定。