逻辑元素
美好的一天,我将开始撰写有关使用Golang语言编写虚拟机的一系列文章。 我选择这种语言是因为它易于阅读,并且在标准库中具有必需的功能,将来会派上用场。
对于那些知道如何为简单逻辑门制作真值表的人,本文绝对不包含任何新信息。 如果您知道该怎么做,那就不要浪费时间,继续第二部分。
逻辑门是具有一个或多个输入和一个或多个输出的设备。 在这一部分中,我们将仅考虑其中最简单的一个。 对于门的建模,我们将仅使用信号0和1,而不使用实际门的输入,输出特性。
由于我们将使用Golang,因此每个元素都可以表示为一个函数。
在Go中,该函数如下所示:
func ( ) {
缓冲液
这是具有一个输入和一个输出的最简单的元素。 实际上,它用于放大信号或产生延迟;有时可以用导体代替。
对于缓冲区,我们的函数将如下所示:
func Buf(v bool) bool { return v }
逆变器
相同的缓冲器,只有输出将信号反相。
对于逆变器,该函数将如下所示:
func Inv(v bool) bool { return !v }
或
该元件至少需要一个等于1的信号才能在输出端获得1。
func Or(v, s bool) bool { return v || s }
和
当为其所有输入提供1时,它总是返回1,在所有其他情况下,它返回0。
func And(v, s bool) bool { return v && s }
异或
为了在输出端获得1,必须将不同的信号(0和1)或(1和0)施加到输入。 此操作很有用,因为它允许您交换两个变量而无需使用额外的内存。
func Xor(v, s bool) bool {
还是不
它用作“或”元件,只有反相器连接到其输出,我们才能从中获得信号。
func Nor(v, s bool) bool { return !(v || s) }
不
该元素的工作原理与And元素完全相同,只是输出信号反相。
func Nand(v, s bool) bool { return !(v && s) }
异或与反演
该元素的工作方式与OR元素相同,只是输出信号反相。
func Xnor(v, s bool) bool {
现在已经编写了函数,您可以将它们组装到Gate包中,在此基础上我们将实现更复杂的事情。 我们的程序包层次结构将类似于真实的计算机抽象层次结构。 源代码可以在
这里找到。