Altifigence Academy

47 / 63 · 概念

實際按鈕輸入:同步、去彈跳與單次事件

區分非同步輸入同步化與接點去彈跳,設計連續取樣型去彈跳器。

一次按鈕可能產生多次切換

機械按鈕接點在穩定前可能反覆接觸、分離,同時其訊號又是不受系統時脈控制的非同步輸入。同步化處理進入時脈域,去彈跳則將短暫重複切換判斷為單一穩定狀態。只加兩級正反器正反器在指定的時脈邊緣儲存輸入,並保持至下一個邊緣。輸入須滿足 setup 與 hold 條件。 詳細內容,彈跳不會自動消失。

區分三個階段的職責
  1. 非同步按鈕: 同時存在接點彈跳與時脈非同步問題
  2. 同步化: 將單一位元準位接收到時脈域
  3. 除彈跳: 只有連續穩定的取樣才被接受為狀態變化
  4. 邊緣偵測: 對已確認的 0→1 產生單週期事件

此流程假設按鈕是維持足夠久的單位元準位。短脈衝、多位元一致傳遞、非同步時脈本身的處理,仍需另外設計。

連續 N 個樣本規則

目前核准狀態為 q、同步輸入為 x,count 為連續與 q 不同的樣本數。每次 x=q 就清 count;x≠q 則增加 count,在第 N 個連續樣本將 q 更新為 x,並把 count 歸零。

以 N=3、初始 q=0 為例。每欄是觀察同步輸入的取樣瞬間,並非實體接點電壓。

樣本012345678
x010111101
count 後010120010
q 後000001111
rise event000001000
N=3:連續確認相反值後才接受
查看波形資料
波形資料:每個字元表示一個區間;句點保持先前狀態;p 表示一個時脈週期。
訊號波形匯流排值
取樣2345234520 → 1 → 2 → 3 → 4 → 5 → 6 → 7 → 8
x0101...01
q 後0....1...
上升緣事件0....10..

明定延遲與計數器寬度

取樣間隔為 TsT_s 時,依輸入變化相位,核准約需 (N−1)Ts(N-1)T_s 至 NTsNT_s,前級同步延遲另加。若保守要求「穩定 10 ms」,選 N 時也須考慮第一與最後樣本的間距。取樣間的短暫切換看不到,因此連續樣本一致不代表實際電壓全程從未改變;必須一併指定開關特性與取樣條件。

若 count 只存 0~N−1,所需寬度為 max⁡(1,⌈log⁡2N⌉)\max(1,\lceil\log_2 N\rceil)。也要處理 N=1:第一個相反樣本就應立即接受,所以 N−1 比較的順序很重要。

一次按壓對應一個事件

核准的新狀態為 q_next,則 rise=q‾ qnextrise=\overline q\,q_{next}。上表採用與核准同一樣本產生事件的政策。若以另一暫存器暫存器儲存多個位元的狀態。本課程中的同步暫存器會在時脈邊緣儲存指定的輸入。 詳細內容比較 q 與延遲一週期的 q,可能因觀察位置而多一段延遲,因此也須指定何時消費事件。

自己試試看

N=3、初始 q=0,輸入 1,1,0,1,1,1,哪個樣本會改變狀態?N=8 的計數器若存 0~7,最小寬度是多少?

查看解說

第三個樣本的 0 清除連續計數,因此第六個樣本才接受 1。count=0~7 需要 3 位元;若另一實作存到 8,就需要 4 位元,所以須先確認儲存範圍。

此選擇適用於本瀏覽器,隨時可從頁尾變更。