数电基础:移位寄存器、顺序脉冲、序列信号发生器

目录

一、寄存器与锁存器的区别

二、移位寄存器

(1)移位寄存器的基本原理

(2)封装成74HC194芯片

(3)级联

(4)乘除法运算

(5)构造环形计数器

三、顺序脉冲发生器

(1)移位寄存器构造顺序脉冲

(2)计数器+译码器构造顺序脉冲

四、序列信号发生器

(1)计数器+数据选择器构造序列信号


一、寄存器与锁存器的区别

经过前面的学习我们明白了,锁存器其实就是一个能保持状态不变的环形电路。他的关键在于保持不变,那么寄存器又是什么呢?他和锁存器有什么不同?

(1)触发机制不同:寄存器仅在时钟信号的特定边沿(上升沿 / 下降沿)更新数据,边沿过后输入信号变化不影响输出;锁存器在时钟信号的高 / 低电平期间持续响应输入,电平不变时保持数据。

(2)抗干扰能力不同:寄存器抗干扰性强,仅在边沿瞬间采样,受输入信号抖动影响小;锁存器在电平有效期间易受输入噪声干扰,可能误触发。

(3)使用场景不同:寄存器适合同步时序电路,用于精确时钟控制下的数据存储(如 CPU 寄存器、移位寄存器);锁存器适合异步电路或电平控制的数据暂存(如地址锁存、简单数据缓冲)。

简单来说就是寄存器往往用多个锁存器、或者触发器电路来构建一种边沿更新数据的元件。他既有锁存器保持数据持久化的特点,又不局限于1位数据,往往可以有8位甚至更多位。

二、移位寄存器

(1)移位寄存器的基本原理

移位寄存器就是用多个D触发器级联构成的。他可以存储多位数据,不仅支持一位一位的向左、向右移动的串行输出;还能支持并行输入输出。是数字电路很重要的基本单元。

简单分析其工作原理:

Di处输入串行数据,当CLK产生一个上升沿时,会将Di的数据移入下一级D触发器。逐级往后移动,呈现移位的效果。

而并行输出是把各级D触发器的输出端引出来,直接对外输出。

(2)封装成74HC194芯片

由于移位寄存器十分基本且重要,人们将其封装成了一颗芯片。他在上述结构的基础上扩展补充了一些功能,比如左移、右移、置零、保持、并行输入等等。

(3)级联

两颗74HC194芯片就能级联成8位的移位寄存器。其实只用把上一级的输出级联到下一级的输入即可。即把左边的Q3连接到右边的DiR;把右边的Q0连接到左边的DiL。而并行输入端、8位数据输出端则直接用原本的就行。

(4)乘除法运算

我们来分析一下该电路的工作流程:

(1)首先在两个移位寄存器的输入端输入M、N两个4位数值。

(2)在CLK上升沿的时候,将数据往右移动(虽然图中是从左往右移动,但是是低位向高位移动),即数据乘2了。

(3)由于CLK2只有两个上升沿,所以N只乘以4;而CLK1有4个上升沿,所以乘以16。

(4)最后16M和4N在中间的加法器相遇,低位加低位,高位加高位。最终得到8位的16M+4N的结果。

(5)构造环形计数器

如果将移位寄存器的输出端重新连接到输入端,则形成了一个环形,状态将永远在里面循环。

(1)假设你在输入1000这个值,在4个上升沿之后,每个触发器就会记录住1、0、0、0。

(2)此后就算你不输入了,Q3的输出也会重新输入到Di处进行循环,即4状态循环。

然而这样的环形计数器存在一些问题:

(1)无法自启动:当电路由于外部干扰错误的进入某个循环,无法立马恢复到我们想要的状态。

(2)利用率低:我们说4个2进制位最多可以表示16种状态,而这里仅仅只利用了其中的4个循环态。

约翰逊为了提高利用率,将其输出端改到了FF3的Q'处,构成了扭环形计数器。他的本质与环形技术器一致,但是可以在8个状态中循环了。

三、顺序脉冲发生器

(1)移位寄存器构造顺序脉冲

所谓的顺序脉冲发生器,就是在每个始终周期内,只有一个端口输出脉冲,其余端口都输出0/1(不论是0还是1,只要保证其余的都输出一样即可)

但是这样需要多少个状态的脉冲,则需要多少个触发器,比较浪费资源。于是人们想到用计数器先计数,然后将计数的输出传给译码器,由译码器再来输出。比如你要16个周期的顺序脉冲,原思路需要16个D触发器,而现在只需要1个161芯片+2个138译码器即可,大大减少了硬件的成本。

(2)计数器+译码器构造顺序脉冲

关于图中蓝色部分其实是选通信号,让38译码器间歇性工作来规避竞争冒险现象。

因为芯片的运算必定有延迟,所以161芯片输出给38译码器的可能出现一定竞争现象,而由于延迟通常很小,往往远小于半个时钟周期。

这里38译码器的使能端接入CLK反向的选通信号后,会在CLK=1期间不工作,从而不响应。而当CLK经过半个周期后才被使能工作。直接避免了竞争-冒险现象,变得更加安全。

不过这种方式使得输出的顺序脉冲宽度只有原来的一半。

四、序列信号发生器

所谓序列信号,就是一个串行的特定信号。比如10010011串行发送出去就是一个序列信号。一般情况下,一款序列信号发生器设定好了就就会持续发送这种特殊序列,不能改变。

(1)计数器+数据选择器构造序列信号

比如这里我们想要发送00010111这个8位的序列信号:

其中161芯片负责8状态切换,而数据选择器将他的8个状态作为地址去选择输出。在时钟CLK的驱动下最终串行发出。

相关推荐
FPGA技术实战21 小时前
基于XADC IP核的FPGA芯片温度读取设计
网络协议·tcp/ip·fpga开发
没有医保李先生21 小时前
STM32复位启动的过程
stm32·单片机·嵌入式硬件
丸子的蓝口袋21 小时前
FPGA DONE信号震荡
fpga开发
Nautiluss1 天前
一起玩XVF3800麦克风阵列(七)
人工智能·单片机·音频·语音识别·智能硬件
凌盛羽1 天前
在STM32G030xx的HAL库中使用DMA采集ADC多通达数据并开启DMA开启全满和半满中断
数据结构·stm32·单片机·嵌入式硬件·链表·嵌入式实时数据库
IT阳晨。1 天前
【STM32】RTC的使用和实时时钟项目
stm32·单片机·嵌入式硬件
国科安芯1 天前
车规MCU在农业无人机电机驱动中的可靠性分析
单片机·嵌入式硬件·性能优化·无人机·安全威胁分析·安全性测试
TangDuoduo00051 天前
【UART控制器HAL库常用接口】
单片机·嵌入式硬件
CinzWS1 天前
基于Cortex-M3 SoC的eFuse模块--实现与验证考量
fpga开发·架构·efuse
List<String> error_P1 天前
STM32数据手册速查
stm32·单片机·嵌入式硬件