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ō)一句,我不是電子工程師 :)。
- 1 回答
- 0 關(guān)注
- 180 瀏覽
添加回答
舉報(bào)