0t脈沖發(fā)生器(1)專欄修正以及理論分析 v1.0

前言:
? ? ? ? 去年我寫(xiě)的“【Minecraft】【元件庫(kù)】0t脈沖發(fā)生器(1)”這篇專欄頗受歡迎。然而隨著時(shí)間推移,專欄中的一些錯(cuò)誤被發(fā)現(xiàn)并被指出,值得寫(xiě)此篇專欄以修正。
? ? ? ? 本文仍然是討論P(yáng)C Minecraft,即java版的Minecraft。實(shí)驗(yàn)分別在1.8版本以及1.12.2測(cè)試,理論上講,1.8--1.12.2的版本都是適用的。因某些原因,目前我無(wú)法在更高的版本進(jìn)行測(cè)試,歡迎各位測(cè)試。
0t信號(hào)長(zhǎng)度:
? ? ? ? 在“【Minecraft】【元件庫(kù)】0t脈沖發(fā)生器(1)”專欄中,我首次使用“0t信號(hào)長(zhǎng)度”這個(gè)詞。并給出了測(cè)定標(biāo)準(zhǔn):
0t信號(hào)長(zhǎng)度定義

? ? ? ? 把0t脈沖發(fā)生器發(fā)出的0t信號(hào)接入上圖裝置中,按該0t信號(hào)能激活的活塞個(gè)數(shù)定義0t信號(hào)長(zhǎng)度。若一個(gè)0t信號(hào)僅能穩(wěn)定激活1號(hào)活塞,則該0t信號(hào)長(zhǎng)度為1;若一個(gè)0t信號(hào)能激活1、2號(hào)活塞,該0t信號(hào)長(zhǎng)度為2;…;若一個(gè)0t信號(hào)不能激活活塞,或者不能穩(wěn)定激活活塞(換位置、java會(huì)有不同測(cè)試結(jié)果的),該0t信號(hào)長(zhǎng)度定為0。
? ? ? ? 值得指出的是,“0t信號(hào)長(zhǎng)度”中的“長(zhǎng)度”與距離、時(shí)間完全沒(méi)有關(guān)系。它僅僅是描述0t信號(hào)按照上述的測(cè)定方法能激活的活塞個(gè)數(shù)。
問(wèn)題發(fā)現(xiàn):

? ? ? ? 這是一個(gè)熟悉的雙邊沿0t脈沖發(fā)生器,在輸出端如圖接上兩個(gè)活塞,拉動(dòng)拉桿,會(huì)發(fā)現(xiàn),下方bud位的活塞有時(shí)候工作有時(shí)候不工作。仔細(xì)觀察會(huì)發(fā)現(xiàn),拉桿拉下時(shí),bud位的活塞響應(yīng),而拉桿關(guān)閉時(shí),bud位的活塞不響應(yīng)。
? ? ? ? 可以說(shuō),拉桿拉下時(shí),0t發(fā)生器發(fā)出了信號(hào)長(zhǎng)度為2的0t脈沖,而拉桿關(guān)閉時(shí),0t發(fā)生器發(fā)出了信號(hào)長(zhǎng)度為1的0t脈沖。
開(kāi)始時(shí),我把它歸屬于不穩(wěn)定現(xiàn)象,也許有位置問(wèn)題,為了保險(xiǎn)起見(jiàn),我把它標(biāo)注為1。
?
也有網(wǎng)友@simpless3向我向我反映0t發(fā)生器的問(wèn)題:

同樣地,當(dāng)初我也是擔(dān)心不穩(wěn)定的問(wèn)題,為了保險(xiǎn)起見(jiàn),把0t信號(hào)長(zhǎng)度標(biāo)注為1。
? ? ? ? 然而經(jīng)過(guò)大量的實(shí)驗(yàn),這些看似“不穩(wěn)定”的現(xiàn)象卻一直很穩(wěn)定。而且這些“不穩(wěn)定”現(xiàn)象都有一個(gè)共同特點(diǎn)——觸發(fā)方式是上升沿。這不得不令人懷疑,上升沿觸發(fā)和下降沿觸發(fā)是否有區(qū)別?從而導(dǎo)致這種現(xiàn)象發(fā)生?
? ? ? ? ?經(jīng)過(guò)實(shí)驗(yàn)測(cè)得,活塞推出和收回的更新順序不同,最終導(dǎo)致了發(fā)生器發(fā)出的0t信號(hào)長(zhǎng)度不一致。
以下為理論分析:
1、下降沿觸發(fā)的0t發(fā)生器。

這里分析下,拉桿關(guān)閉后,發(fā)生了什么。
I.拉桿關(guān)閉,1號(hào)活塞進(jìn)入Blockevent列表(后簡(jiǎn)稱BE表)。MC更新到BE表后,1號(hào)活塞開(kāi)始收回。
II.1號(hào)活塞收回時(shí),方塊依次變成36號(hào)方塊。順序是:α→β→γ。
III.2號(hào)活塞先受到α方塊(活塞本體)更新,開(kāi)始收回。然后4號(hào)活塞受到激活(γ方塊不再壓線),開(kāi)始推出。
IV.3號(hào)活塞受到2號(hào)活塞更新,開(kāi)始收回,紅石塊不再為紅石線提供信號(hào)。5號(hào)活塞受到4號(hào)活塞更新,準(zhǔn)備推出,但是5號(hào)活塞發(fā)現(xiàn)紅石線已經(jīng)沒(méi)有信號(hào)了,取消推出。
V.4號(hào)活塞受到紅石線熄滅的更新,完成0t瞬推。
?
最終體現(xiàn)結(jié)果是,只有4號(hào)活塞瞬推了,0t信號(hào)長(zhǎng)度為1。實(shí)測(cè)也符合分析結(jié)果。
2、上升沿觸發(fā)的0t脈沖發(fā)生器。

拉桿拉下后,會(huì)發(fā)生什么。
I.拉桿拉下,1號(hào)活塞進(jìn)入BE表。MC更新到BE表后,1號(hào)活塞開(kāi)始推出。
II.1號(hào)活塞推出時(shí),方塊依次變成36號(hào)方塊,順序是:β→α。
III.4號(hào)活塞先受到激活(β方塊取消壓線),開(kāi)始推出。2號(hào)活塞受到α方塊(活塞本體)更新,開(kāi)始推出。
IV.5號(hào)活塞受到4號(hào)活塞更新,開(kāi)始推出。3號(hào)活塞受到2號(hào)活塞更新,開(kāi)始推出,紅石塊不再為紅石線提供信號(hào)。
V.4號(hào)活塞受到紅石線熄滅的更新,完成0t瞬推。
VI.5號(hào)活塞受到4號(hào)活塞更新,也發(fā)現(xiàn)紅石線熄滅了,完成0t瞬推。
?
最終體現(xiàn)結(jié)果是,4號(hào)和5號(hào)活塞瞬推了,0t信號(hào)長(zhǎng)度為2。實(shí)測(cè)也符合分析結(jié)果。
造成這種差別的原因是,1號(hào)活塞推出、收回時(shí),方塊從實(shí)體方塊變成36號(hào)方塊的順序不同。推出時(shí)是由遠(yuǎn)及近(β→α),而收回是由近到遠(yuǎn)(α→β→γ)*。
?
舊專欄修正:
序號(hào)3的0t發(fā)生器,0t信號(hào)長(zhǎng)度:2
序號(hào)4的0t發(fā)生器,0t信號(hào)長(zhǎng)度:2(上升沿觸發(fā))、1(下降沿觸發(fā))
序號(hào)5的0t發(fā)生器,0t信號(hào)長(zhǎng)度:4(上升沿觸發(fā))、3(下降沿觸發(fā))
新0t脈沖發(fā)生器補(bǔ)充:
1、

觸發(fā)方式:上升沿
從觸發(fā)到發(fā)出0t延時(shí):0gt(BE及之前),1gt(BE之后)
0t信號(hào)長(zhǎng)度:1
復(fù)位時(shí)間:3gt(收到下降沿信號(hào))
備注:體積較小
變式:略

備注:
*:在1.8和1.12.2中測(cè)試,活塞收回時(shí),實(shí)體方塊變36號(hào)方塊有時(shí)候是按照α→β→γ順序進(jìn)行,有時(shí)候是β→α→γ的順序進(jìn)行。目前發(fā)現(xiàn)這個(gè)與活塞朝向,游戲版本有關(guān)。但α總是先于γ,不會(huì)影響0t脈沖發(fā)生器的穩(wěn)定性。
舊專欄傳送門(mén):https://www.bilibili.com/read/cv544167
End