我是靠谱客的博主 体贴芹菜,最近开发中收集的这篇文章主要介绍双 JK 触发器 74LS112 逻辑功能。真值表_数字电路学习笔记(七):经典组合逻辑器件(上)...,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

c25312dd7f65e7cab03d84959d60a3fb.png

一、集成电路

在引入“集成电路”后,电路设计实现了从原子到分子的质变。集成电路,最重要的当然是“集成”二字了……总体来说,我们希望设计出的集成电路具有:

  • 可复用
  • 可扩展
  • 高封装度
  • 健壮(泛指其可靠性、安全性、一致性等)

等特点。从定义上说,每一个在此之前提到的电路都可以被做成一个集成电路;但这些只能叫做专用集成电路,被用在特定的设备中,不具有可复用性,所以不在本文讨论范围中。同时,由于文章目前进展到组合逻辑电路,因此涉及的几项电路也都是以组合逻辑为基础的,不会牵涉到时序逻辑等内容。

与之前设计的朴素的电路不同,现实中的组合逻辑器件为了便于功能扩展,往往还有一些功能端口,可以控制是否输出,检测是否有输入等,实现与其他逻辑电路的配合。

为探究几种常见的组合逻辑电路,我们从一个实际的例子入手:计算器。简单一点,我们的计算器先实现加法和减法。(不保证最终的成果和现实中的设计一致)这也是我在前言中展示的Minecraft电路所做的。大概的思路如下:

c55133e532b089e1dcdce8c82a691e43.png

这个东西只能做一位数的加法,但将它稍微扩展,就可以计算更多位数。我们还要忽略一些小细节,比如涉及存储的部分,以及二进制计算和十进制的转换(详见第二章关于“余三码”的介绍)。

二、编码器

编码器能够将单一的输入信号编码。比如,计算机键盘按下一个键,就会被编码成一个八位的ASCII码。

在计算器项目中,首先需要的,是把单一的“按钮输入”事件映射成一个二进制数。按钮板共有十个键,所以有十条输出,每条对应一个按钮。通过编码,可以将其变成易于逻辑理解的输入。由于目标是做计算,映射成二进制码(其实是BCD码)当然最为合理。(同样参见第二章:数制与编码)

我们假设每次只输入一个信号,不会两路同时产生输入。那么真值表如下:

dced953bd68f5bd6be3f39784276e76f.png
未标注的表示为0

表示一个四位二进制数,从高位到低位。任何时候,列出真值表辅助分析都是个好习惯;但在这里,用真值表列式显然不现实。所以,直接分析:例如
,在
时为1,所以
(实际上,我们把其他项都当作了无关项,这会有一些隐藏的问题,后面分析)。同理:

这样,我们的第一个编码器就做成了:

8c31900d1ce048f2bccdac2f6e241774.png

这种简单的设计在绝大多数情况下就够用了,但有两个问题:

  1. 我们假设每个时刻只有一路输入,但这是不靠谱的。比如,如果同时按下3和4,那么实际输出的是0111;
  2. 我们不知道当输出是0000时,究竟表示的是按下了0,还是什么输入都没有。无论如何,让“0”输入直接吊着而不接进电路显然不好。

36edfe48fcf410fcaaa6ac32178621b8.png
输入 3,4 的样子;要注意这不是 3+4,而只是无意义的输出,比如 3 和 5 的输出也是 0111

问题1的解决方法是优先编码:如果同时按下两个键,则只编码比较大的数,而忽视较小的数,相当于把真值表变成:

8ac726ab25757f874b9e08c41c9bf003.png

这样,如果按下3和4,则输出0100,3则被当成了无关项,不影响输出。虽然这使得电路变复杂了,但提升了健壮性,符合设计方针,是值得的。

问题2的解决方法自然是把所有位加在一起,单独作为一路输出——只要这路有输出,就代表有输入。

略过计算过程(可以作为练习),我们最终得到的,就是一个类似这样的电路:

fe0bb313bd96eb067d3b673cbbe7eb8a.png

它是两个集成电路的奇怪混搭。首先是74HC147,它是10线-4线编码器,将10条线路输入编码成4位的二进制数,类似本电路实现的功能;然后是74HC148,是8线-3线编码器,所以只能编码0~7的数字,但有不少扩展端口,所以比起74HC147,通用性更高,可以几个连在一起实现更多位数的编码。它有检测是否有输入的功能。

这样,我们完成了计算器的第一部分:把按钮输入对应成一个能够计算的二进制数。

三、译码器

与编码器相对,译码器把一个二进制码译回单一的输出。在本项目的最后,也需要将计算出的数字译回0~9,方便由屏幕的驱动器再做计算。真值表如下:

e391146811aac453af1dd4ff21232172.png

的推导没什么意义,不列出了。几个例子:

所以,如果输入的是0111,输出就是

常用的译码集成电路是74HC138,翻译的是0~7之间的数字。它有一个很有意思的性质,就是八个输出正好对应八个最小项(回顾笔记(五):逻辑设计基础),可以用来拼接逻辑函数,比如

,就直接将
用或门接在一起即可。但在我们的体系中没有什么用处,因为我们只强调设计电路而不强调利用已有的电路。

四、数据分配器

注意到我们的输入不仅是一个数字,还包括“现在正在输入第_____个数字”这个开关。(这是我觉得我这个设计中不合理的地方,在后期有“加减乘除”多个运算后,这个开关会用按下对应的运算按钮代替。)这个开关,决定了究竟是由第一路还是第二路编码/存储模块处理输入的信号。这里,就运用了数据分配器。

数据分配器有两组输入:第一组只有一路,是待分配的数据;第二组是一个数(“地址码”),表示将这位数据分配到哪一路上。在我们的设计中,只需要1分2,输入一位地址码即可,0表示“上路”,1表示“下路”。

如果输入数据

和地址码
,输出
,那么真值表是:

0e57622ddbbe4fd882b25add195aad3d.png

所以

6b4c00bc2bc7d48ee97d105a2f75b5ce.png

Simple as that.

会发现,没有专门做“数据分配器”的集成电路,这是因为所有的数据分配器都可以用带控制端口的译码器实现——比如前文提到的74HC138。它的控制端口如果有输入信号,则输出被锁定在高电平。

思考,如果将

连在控制端口,而三位地址码
连在输入端口,那么,当
时,
取0或1,在
端口分别有什么输出?
呢?

五、数据选择器

虽然在本项目中没有用到数据选择器,但既然都有了分配器,它就没有道理不出场。选择器和分配器相对,负责按照输入的地址码,从几路输入中选择一路作为输出。

以8选1选择器为例。它需要八位数据输入和三位地址码,输出一位。顺便介绍一种简化真值表的方法:

b391ce9aff2578558c41e40e28430479.png

略作分析:

与哪一个
有关,取决于
的值;比如,
时,
只和
有关。因此,

d9349086f6c0641cc3d87ca26b93cc81.png

这便是74HC151的结构。另一个常用的选择器是双4选1选择器74HC153


总结:本文介绍了四类逻辑器件:

  • 编码器
  • 译码器
  • 数据分配器
  • 数据选择器

同时介绍了五个常用集成电路:

  • 74HC147(10线-4线编码器)
  • 74HC148(8线-3线编码器)
  • 74HC138(3线-8线译码器)
  • 74HC151(8选1选择器)
  • 74HC153(双4选1选择器)

在这些器件的结构推导中,有意忽略了一些额外的控制端,以不影响行文逻辑的连贯性。这些端口可以很轻松地集成进来,而不影响主体的工作。

与计算相关的器件,留至下期。

最后

以上就是体贴芹菜为你收集整理的双 JK 触发器 74LS112 逻辑功能。真值表_数字电路学习笔记(七):经典组合逻辑器件(上)...的全部内容,希望文章能够帮你解决双 JK 触发器 74LS112 逻辑功能。真值表_数字电路学习笔记(七):经典组合逻辑器件(上)...所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部