计算机系统体系结构1部分。 逻辑门

逻辑元素


美好的一天,我将开始撰写有关使用Golang语言编写虚拟机的一系列文章。 我选择这种语言是因为它易于阅读,并且在标准库中具有必需的功能,将来会派上用场。

对于那些知道如何为简单逻辑门制作真值表的人,本文绝对不包含任何新信息。 如果您知道该怎么做,那就不要浪费时间,继续第二部分。

逻辑门是具有一个或多个输入和一个或多个输出的设备。 在这一部分中,我们将仅考虑其中最简单的一个。 对于门的建模,我们将仅使用信号0和1,而不使用实际门的输入,输出特性。

由于我们将使用Golang,因此每个元素都可以表示为一个函数。
在Go中,该函数如下所示:

func (   )    {     //     return    } 

缓冲液


这是具有一个输入和一个输出的最简单的元素。 实际上,它用于放大信号或产生延迟;有时可以用导体代替。

BUF a
00
1个1个

对于缓冲区,我们的函数将如下所示:

 func Buf(v bool) bool {    return v } 

逆变器


相同的缓冲器,只有输出将信号反相。

不是
01个
1个0

对于逆变器,该函数将如下所示:

 func Inv(v bool) bool {    return !v } 


该元件至少需要一个等于1的信号才能在输出端获得1。

ba或b
000
01个1个
1个01个
1个1个1个

 func Or(v, s bool) bool {    return v || s } 


当为其所有输入提供1时,它总是返回1,在所有其他情况下,它返回0。

ba和b
000
01个0
1个00
1个1个1个

 func And(v, s bool) bool {    return v && s } 

异或


为了在输出端获得1,必须将不同的信号(0和1)或(1和0)施加到输入。 此操作很有用,因为它允许您交换两个变量而无需使用额外的内存。

b异或
000
01个1个
1个01个
1个1个0

 func Xor(v, s bool) bool { //  (v ^ s)    ,   bool     ,       return (v || s) && !(v && s) } 

还是不


它用作“或”元件,只有反相器连接到其输出,我们才能从中获得信号。

b一个也不是b
001个
01个0
1个00
1个1个0

 func Nor(v, s bool) bool {    return !(v || s) } 


该元素的工作原理与And元素完全相同,只是输出信号反相。

ba nand b
001个
01个1个
1个01个
1个1个0

 func Nand(v, s bool) bool {    return !(v && s) } 

异或与反演


该元素的工作方式与OR元素相同,只是输出信号反相。

b一个XNOR b
001个
01个0
1个00
1个1个1个

 func Xnor(v, s bool) bool { //       return !((v || s) && !(v && s)) } 

现在已经编写了函数,您可以将它们组装到Gate包中,在此基础上我们将实现更复杂的事情。 我们的程序包层次结构将类似于真实的计算机抽象层次结构。 源代码可以在这里找到。

Source: https://habr.com/ru/post/zh-CN476100/


All Articles