第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Go中Nor觸發(fā)器邏輯門的實(shí)現(xiàn)

Go中Nor觸發(fā)器邏輯門的實(shí)現(xiàn)

Go
拉丁的傳說(shuō) 2022-06-06 15:14:33
我正在嘗試在 Go 中實(shí)現(xiàn)以下觸發(fā)器電路邏輯,并且在變量聲明方面遇到了一些困難:我的目標(biāo)是模擬邏輯門和電路,因?yàn)樗梢栽谖锢砩瞎ぷ?。我已?jīng)為或門 [func nor()] 和觸發(fā)器本身 [func norFlipFlop()] 實(shí)現(xiàn)了一個(gè)函數(shù)。我面臨的問(wèn)題是聲明 out0 和 out1 因?yàn)樗鼈兿嗷ヒ蕾?。如下所示,out0 定義為 nor(a1, out1),out1 定義為 nor(out0, a0)。這顯然會(huì)吐出一個(gè)編譯錯(cuò)誤,因?yàn)樵诙x out0 時(shí) out1 尚未初始化和定義。有沒(méi)有辦法讓這個(gè)邏輯工作,同時(shí)盡可能接近物理電路邏輯?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)}
查看完整描述

1 回答

?
慕森卡

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超8個(gè)贊

首先,觸發(fā)器存儲(chǔ)狀態(tài),因此您需要某種值來(lái)保留狀態(tài)。此外,除了 A0 和 A1 為 0(假)且 Out0 和 Out1 都為 1(真)的條件(通常在硬件中避免)之外,輸出(Out0 和 Out1)通常是彼此的補(bǔ)碼,并且是有效的觸發(fā)器僅存儲(chǔ)一個(gè)布爾值,因此您可以只使用bool. 您通常“脈沖”輸入以設(shè)置(設(shè)為真)或重置(設(shè)為假)觸發(fā)器的值。例如:


package main


import "fmt"


type flipFlop bool


func (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())

}

如果您想更密切地模擬硬件,您需要跟蹤硬件狀態(tài)。也許是這樣的:


package main


import "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)

}


我希望這會(huì)有所幫助(順便說(shuō)一句,我不是電子工程師 :)。


查看完整回答
反對(duì) 回復(fù) 2022-06-06
  • 1 回答
  • 0 關(guān)注
  • 180 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)