我是靠谱客的博主 踏实大碗,最近开发中收集的这篇文章主要介绍以下不属于时序逻辑电路的有_学习笔记:时序电路基础,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Forward Star:学习笔记:二极管与逻辑电路​zhuanlan.zhihu.com

一文中,我们讲到了与非、或非等几种逻辑门。但是它们的运作都需要输入端持续输入信号,一旦中止,信息就会丢失。

时序电路(Sequential Circuits)就旨在解决这一问题,它能够储存信息;同样地,它也有几种基本的结构。

SR Latch

62bb4196b807f5d0aa5cc06b4205e4c5.png

光看这个图是很令人困惑的,因为尽管两个或非门中,R、S的输入给定,但是另外一个输入端却是需要从结果推过来。如果把右边那个表直接代进去,可以发现这确实成立;然而,究竟为什么会这样呢?我们可以对电路动态地分析。如果一次只能转变

中的一个,那么
的变换为
.我们就对这过程进行分析。

假设初始时

:

ae921a75a259119f535cb60741517d92.png
注意R、S以外的输入端,分别与另一个或非门的结果相连,因此它们是相同的

当我们把

转化为0时,显然先影响上面一个或非门,但由于或非的结果
仍为0,因此不会对下面的或非门产生影响,即
维持原状——这也是它能储存信息的原因;此时
,它记录的是上一次的信号。

0e5144e9bc475895da3dbc52b36380d7.png
可以看到只有R发生了变化

转化为
时,
由0变为1,那么首先影响下面的或非门,
变成0;之后,上面的或非门中输入信号“1”也将变成“0”,于是或非运算后的结果
变为1;再之后下面或非门中的输入信号“0”变为“1”,但是不影响
的结果,于是状态就稳定了下来。如图:

1653a881f2b14a45a9d10613d7074a9e.png

因此便有了右边那个对应的表,当

时,
记录上一次的信号;否则
。但注意
不能同时为1.

SR Latch在电路中的符号如下图:

fd0d3a243a6059766c4e350dfe3b1637.png

D Latch

D Latch在SR Latch的基础上改造而成。首先用一个非门把D转换为S、R:

57090f83a52f9802282a16378507bad3.png

然后再接上一个CLK接口和两个与门:

ef41a6d4feccce20962b54449d62a42d.png

这样CLK就决定了其是否工作,如果CLK为0,两个与门的结果为0,那么R、S为0,根据SR Latch,

维持原来的值;否则当CLK为1时,
才记录新值。

D Flip-Flop

尽管Latch实现了存储信息的功能,但是信号的传输有延时,这是因为非门转化器无法与D的另一端同步:

d91120f25c2a17c84c2a41cf1e1fc1f1.png

D Flip-Flop的想法是用两个D Latch,其中一个用于同步D的值,另一个决定这个值是否传给Q:

1ac3a43f159913ebbfb1cb81d294ae09.png

这样CLK就并非与之前一样,0是储存,1是同步;而是当CLK从0变为1或从1变为0时进行刷新。以上图第一个结构为例,当CLK从0变为1时,右边D Latch的CLK输入端瞬时改变,使Q与N同步;而左边D Latch因非门影响,短暂地维持了1的状态,即D与N仍然同步。因此,此时Q、N、D保持一致,实现刷新:

2957e6618ef7118654a0a47616287370.png

Register

Register将多个D Flip-Flop连在同一个CLK上,由于每个D Flip-Flop可传递一个二进制位,因此Register可以表示二进制数:

4ee87a265e231d9ebe67bb8ab4c8db42.png

将组合电路与Register结合,可以同时实现逻辑运算和数据储存,其中组合电路用于逻辑运算,Register用于存储。

同步时序电路

给所有Register接上相同的CLK信号:

7f701bcf7b0e1062c00dde0628ca8e36.png

由于Register之间的逻辑运算需要时间,我们给CLK接上周期性的信号,就可以让信息传递和逻辑运算交替进行。

如果我们把一个任务拆成多个逻辑运算的部分,使得它们能并行计算,就可以提高计算的效率:

b06840be4beedbf63aaf12d16e0a7031.png

不过这也要求CLK的频率更高,因此任务不可能无限拆分。

例题

现在有一个二进制序列,每次操作你可以选择一个子序列,将子序列所有数右移一位,即

;求出最少的操作次数,使得新序列与原序列按位异或后的值全为1(即每位取反)。

注意一个序列

为另一个序列
的子序列,当且仅当
删掉若干字符(可以不删)后等于
.

分析:我们先分析题目,显然可以发现每次子序列必须是01交替出现,即01010或10101;如果中间有连续的0或1,那么右移的时候连续的一段其实和不移的效果是一样的。那么问题就转化为最少可以把原序列分成多少个01序列。这样我们只需要看最长的一段1与最长一段0中长度的最大值即可。

我们构造:

,那么答案就是 :

即最大/最小连续子序列和.

考虑动态规划,inputs是序列中当前的数

,State就是递推出的
,State logic则是状态转移方程,Output logic则是判断当前序列是否读入完。那么每次CLK刷新,
由Next state同步到到state,并和inputs通过State logic的状态转移方程来求出Next State.

c02dc3261b19eb964a47a27dece58762.png

最后

以上就是踏实大碗为你收集整理的以下不属于时序逻辑电路的有_学习笔记:时序电路基础的全部内容,希望文章能够帮你解决以下不属于时序逻辑电路的有_学习笔记:时序电路基础所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部