如何仅使用2:1 MUX来实现以下功能?


8

我在理解如何实现布尔函数方面遇到困难,尤其是考虑到我只能使用2:1的多路复用器,并且变量D作为残差变量时尤其困难。

函数如下:

F(A,B,C,D,E)=(6,7,12,13,14,15,22,23,24,25,26,27,28,29,30,31)

我创建了真值表,并使用卡诺图将函数最小化为:

F(A,B,C,D,E)=AB+BC+CDE¯+CDE

我还设法设计了一个16:1 MUX,其中A,B,C和E作为选择器,D作为残差变量。

我了解多路复用器的工作原理,并且完全有能力从现有的实现中导出真值表,但是我只是根本不了解如何获取真值表,卡诺图和最小化的SOP函数以及仅使用2:1来实现该函数MUX和D作为残差变量。

我不一定要直接回答,尽管很高兴看到。我对解释,算法或实际上可以帮助我自己提出实现的任何事物都更感兴趣。

我希望能够可视化功能与实现之间的联系,而不仅仅是学习如何在不理解其本质的情况下内心实现它。

感谢您的时间!

编辑:虽然我理解了可接受的答案,但它是正确的答案,但随后我才需要对我的2:1多路复用器的数据线使用以下输入:逻辑0,逻辑1和变量D。变量A, B,C仅应用作选择器线。

我创建了F(A,B,C,D)= AB + BC + CD的VK映射,然后使用该映射导出F(A,B,C)的VK映射,如下所示。

在此处输入图片说明 编辑:对于右边的地图,ABC = 000的值应为0,而不是1。这是我从笔记本上将表格复制到excel中时犯的一个错误。

之后,我创建了以下多路复用器实现:

在此处输入图片说明

多路复用器设计取自一本电子书。该实施虽然效率不高,但仍有效。我使用M(X,Y,Z)= XZ'+ YZ公式计算了多路复用器的输出,最右边的多路复用器的输出为:

MUX7=ABC¯+DB¯C+BC

使用另一个卡诺图,以上内容简化为AB + BC + CD,这是我需要实现的功能。

MUX本身的设计是从电子书中借用的。在这本书中,从我的图表中可以看到,最左侧的MUX的数据输入已编号,标签代表F(A,B,C)VK映射单元的十进制等效项。例如,如果您查看单元格101(5的二进制数),则该单元格中的值就是实现中相应标记的MUX输入的输入,在这种情况下为“ D”。

有人能解释为什么数据输入线以该特定顺序标记(0、4、2、6、1、5、3、7)吗?


F(A,B,C,D,E)不会减少为A(B + C)+ CD吗?
Tony Stewart Sunnyskyguy EE75'9

对于A = msb,F = 00110 + 00111 + 011xx + 10110至11111,这是您的入门方式吗?
托尼·斯图尔特Sunnyskyguy EE75'9

感谢您抽出宝贵时间阅读我的问题。它很可能会减少。我没有使用任何代数来最小化函数,只是使用了卡诺图。无论如何,函数本身并不像问题的最终目标那样重要。从技术上讲,无论函数看起来如何,我都对实现本身感兴趣。
user1969903'9

它减少到F = AB + BC + C D.
jonk

Answers:


8

我认为这并不太复杂,假设您已经正确计算出想要的方程式(我会假设您已经做好了。)首先查看2英寸MUX的方程式:

M2(A,B,S)=AS¯+BS

从中可以得出一些有用的结果:

M2(0,x,y)=xyM2(x,0,y)=xy¯M2(x,y,0)=xM2(1,x,y)=x+y¯M2(x,1,y)=x+yM2(x,y,1)=yM2(x,y,x)=xyM2(x,y,y)=x+yM2(0,0,x)=0M2(0,1,x)=xM2(1,0,x)=x¯M2(1,1,x)=1

因此可以得出以下结论:

F=AB+BC+CDx=AB=M2(A,B,A)y=BC=M2(B,C,B)z=CD=M2(C,D,C)F=x+y+zF=M2(M2(x,y,y),z,z)

简而言之,您将需要(5)2英寸多路复用器:

原理图

模拟此电路 –使用CircuitLab创建的原理图

那里也有很好的对称性。注意到了吗?

添加:您询问仅能使用0、1或D作为多路复用器数据输入源。我假设您的意思是所有A,B,C和D都可以用作复用器选择器。(否则,我认为不会达到结果。)因此,这仅意味着您需要使用我之前提到的其他一些有用的结果。最简单的想法是仅添加三个更多的2英寸多路复用器:

原理图

模拟该电路

我不确定是否有进一步优化它的方法。我还没有研究所有可能性。

再次编辑:是的!使用OP的新添加的解决方案,下面的两个流程就可以解决了。左边的回答他问题的第一部分,右边的回答他问题的第二部分。

原理图

模拟该电路

再次编辑:排序并不复杂。它只是分配字母所属的位置。作者将(A)作为三位二进制值的高阶位,因此它表示或;将(B)设为三位二进制值的中间位,因此它表示或;并将(C)设为三位二进制值的低位,因此它表示或。各种不同的观点将同样有效。但这就是他们似乎选择的那个。022=0122=4021=0121=2020=0120=1

因此,他们现在从第一层(左)开始,布置了由(A)控制的(4)个多路复用器,并通过将这些多路复用器编号为ABC =“ x00”,ABC =“ x01”,ABC =“ x10”在精神上保持方便,最后一个ABC =“ x11”。

现在,由于对于前一个ABC =“ x00”,这意味着它接受“ 000” = 0或“ 100” = 4。因此,对于该多路复用器(mux1)的“ 0”输入,他们调查了表中ABC =“ 000” = 0的情况并将表项放入其“ 0”侧输入中。对于该多路复用器的“ 1”输入,他们查看了表中ABC =“ 100” = 4并将该表条目放入其“ 1”侧输入中。(该表在这里看起来是错误的,因为它们应该在该框中为0,并通过查看前面的扩展列进行确认。)

下一个mux down(mux2)用于ABC =“ x10”,因此使用了ABC =“ 010” = 2和ABC =“ 110” = 6;下一个mux down(mux3)用于ABC =“ x01”,因此使用了ABC =“ 001” = 1和ABC =“ 101” = 5;最后最后一个向下的Mux(mux4)用于ABC =“ x11”,因此使用ABC =“ 011” = 3和ABC =“ 111” = 7。

mux1(ABC =“ x00”)和mux2(ABC =“ x10”)共同馈入mux5。您可以在此处看到B是0或1之间的变化,因此这就是它们如何将它们连接到此处的方式。mux5的输出将为ABC =“ xy0”,其中前两位已被解码,剩下的只是解码C = 0的情况。因此,mux5的输出将进入mux7的“ 0”输入。同样,将mux3(ABC =“ x01”)和mux4(ABC =“ x11”)联合提供给mux6。B还是mux6选择的变体。mux6的输出始终与C = 1情况相关,并被馈送到mux7的“ 1”输入中。

剩下的全部是供mux7在C = 0和C = 1之间选择。


我承认我从没想过使用多路复用器的公式来指导我。我想有时候我可能会有点无知。
user1969903'9

@ user1969903:只是让您的思维漫游一下。不要被弄糊涂了。只是坐下来玩。您可能会发现一些有趣的东西。发现本身就是最有趣的。当然,这就是为什么我完全在这里并做出回应。我也从您的问题中学到了一些东西,并且享受从玩弄中得到的感觉。自己学习就可以做到这一点。将其视为您要解决的难题。(如果您不困惑,那么您可能在错误的地方。)
2016年

研究完您的答案后,我花了一些时间用多路复用器得出AND和OR的公式,并自己实现了该函数。我很高兴看到它与您发布的内容完全一样,但是上下颠倒了(我以相反的方式连接了最后两个输入,但这仍然是正确的)。如果您想进一步使用它,现在我只需要使用多路复用器2:1再次实现该功能,但是这次我不允许使用A,B,C或E作为任何数据线的输入多路复用器。余可使用的唯一数据输入是逻辑0时,逻辑1和D
user1969903

@ user1969903:可能应该将其添加到您当前的问题中(这样我的答复才更有意义),或者创建一个新问题。现在,我将添加更多的M()条件,这不会有任何问题。
2016年

好吧,实际上我已经弄清楚了,但是我不确定如何在这里共享它。明天,完成工作后,我将编辑原始问题,并将实现的版本添加给所有人,以供大家查看,并在出现错误时进行更正。
user1969903'9

3

2:1多路复用器包含一个反相器,两个“与”门和一个“或”门。通过适当的布线,您可以将其用作与门,或门,逆变器和其他一些功能。实际上,某些FPGA系列完全基于此概念。

这应该足以使您使用2:1多路复用器实现任意功能。


2

两输入多路复用器具有三个输入(a,b和select)。考虑一下当您选择它们​​中的任意两个并将其硬连接到“ 0”或“ 1”时其退化的原因。考虑一下当您选择其中任意两个并将第三个连接到其中任何一个时会发生什么。基本上,有很多方法可以将三个输入空间退化为两个输入空间。

无需做任何花哨的事情,您只需意识到多路复用器就可以为与解码的选择输入相对应的真值表行显式设置输出值。因此,使用四个输入多路复用器(以及两个选择位),您可以通过简单地对输入进行硬接线来表示任意两个输入布尔函数。

此外,应该清楚的是,可以通过创建树形拓扑并适当地对选择进行布线,可以从三个2:1多路复用器创建一个4:1多路复用器,从七个2:1多路复用器创建一个8:1多路复用器,等等。只需放下足够的2:1多路复用器即可获得所需的输入数量,然后将输出成对流入下游的2:1多路复用器,直到获得单个输出,然后考虑如何连接选择的输入。

您可以避开一个隐藏变量,因为即使您有32行的真值表,您也只有16个最小项,而且它们的分组方式使得整个子树都可以忽略。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.