Go中Nor触发器逻辑门的实现

我正在尝试在 Go 中实现以下触发器电路逻辑,并且在变量声明方面遇到了一些困难:

http://img.mukewang.com/629da96d0001c3d703210180.jpg

我的目标是模拟逻辑门和电路,因为它可以在物理上工作。我已经为或门 [func nor()] 和触发器本身 [func norFlipFlop()] 实现了一个函数。我面临的问题是声明 out0 和 out1 因为它们相互依赖。如下所示,out0 定义为 nor(a1, out1),out1 定义为 nor(out0, a0)。这显然会吐出一个编译错误,因为在定义 out0 时 out1 尚未初始化和定义。有没有办法让这个逻辑工作,同时尽可能接近物理电路逻辑?


func nor(a int, b int) int {

    if a + b == 0 {

        return 1

    } else {

        return 0

    }

}   


func norFlipFlop(a1 int, a0 int) (int, int) {

    out0 := nor(a1, out1)

    out1 := nor(out0, a0)

    return out1, out0

}


func main() {

    out1, out0 := norFlipFlip(1, 1)

    out := fmt.Sprint(out1, out0)

    fmt.Println(out)

}


拉丁的传说
浏览 158回答 1
1回答

慕森卡

首先,触发器存储状态,因此您需要某种值来保留状态。此外,除了 A0 和 A1 为 0(假)且 Out0 和 Out1 都为 1(真)的条件(通常在硬件中避免)之外,输出(Out0 和 Out1)通常是彼此的补码,并且是有效的触发器仅存储一个布尔值,因此您可以只使用bool. 您通常“脉冲”输入以设置(设为真)或重置(设为假)触发器的值。例如:package mainimport "fmt"type flipFlop boolfunc (ff flipFlop)GetOut0() bool {    return bool(ff)}func (ff flipFlop)GetOut1() bool {    return !bool(ff)}func (ff *flipFlop)PulseA0() {    *ff = true}func (ff *flipFlop)PulseA1() {    *ff = false}func main() {    var ff flipFlop    ff.PulseA0()    fmt.Println(ff.GetOut0(), ff.GetOut1())    ff.PulseA1()    fmt.Println(ff.GetOut0(), ff.GetOut1())}如果您想更密切地模拟硬件,您需要跟踪硬件状态。也许是这样的:package mainimport "fmt"type flipFlop struct {    A0, A1 bool    out0, out1 bool}func nor(a, b bool) bool { return !(a || b) }func (ff *flipFlop)Eval() {    // Evaluate the circuit until it is stable    for {        prev0, prev1 := ff.out0, ff.out1        ff.out0 = nor(ff.A1, ff.out1)        ff.out1 = nor(ff.A0, ff.out0)        if ff.out0 == prev0 && ff.out1 == prev1 {            break // flip flop is stable        }    }}func main() {    var ff flipFlop    fmt.Println(ff)    // Pulse a0    ff.A0 = true    ff.Eval()    fmt.Println(ff)    ff.A0 = false    ff.Eval()    fmt.Println(ff)    // Pulse a1    ff.A1 = true    ff.Eval()    fmt.Println(ff)    ff.A1 = false    ff.Eval()    fmt.Println(ff)}我希望这会有所帮助(顺便说一句,我不是电子工程师 :)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go