47 / 63 · 概念
實際按鈕輸入:同步、去彈跳與單次事件
區分非同步輸入同步化與接點去彈跳,設計連續取樣型去彈跳器。
單元可免費閱讀,註冊課程即可儲存學習進度。
一次按鈕可能產生多次切換
機械按鈕接點在穩定前可能反覆接觸、分離,同時其訊號又是不受系統時脈控制的非同步輸入。同步化處理進入時脈域,去彈跳則將短暫重複切換判斷為單一穩定狀態。只加兩級正反器正反器在指定的時脈邊緣儲存輸入,並保持至下一個邊緣。輸入須滿足 setup 與 hold 條件。 詳細內容,彈跳不會自動消失。
- 非同步按鈕: 同時存在接點彈跳與時脈非同步問題
- 同步化: 將單一位元準位接收到時脈域
- 除彈跳: 只有連續穩定的取樣才被接受為狀態變化
- 邊緣偵測: 對已確認的 0→1 產生單週期事件
此流程假設按鈕是維持足夠久的單位元準位。短脈衝、多位元一致傳遞、非同步時脈本身的處理,仍需另外設計。
連續 N 個樣本規則
目前核准狀態為 q、同步輸入為 x,count 為連續與 q 不同的樣本數。每次 x=q 就清 count;x≠q 則增加 count,在第 N 個連續樣本將 q 更新為 x,並把 count 歸零。
以 N=3、初始 q=0 為例。每欄是觀察同步輸入的取樣瞬間,並非實體接點電壓。
| 樣本 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|---|
| x | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 1 |
| count 後 | 0 | 1 | 0 | 1 | 2 | 0 | 0 | 1 | 0 |
| q 後 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
| rise event | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
查看波形資料
| 訊號 | 波形 | 匯流排值 |
|---|---|---|
| 取樣 | 234523452 | 0 → 1 → 2 → 3 → 4 → 5 → 6 → 7 → 8 |
| x | 0101...01 | |
| q 後 | 0....1... | |
| 上升緣事件 | 0....10.. |
明定延遲與計數器寬度
取樣間隔為 時,依輸入變化相位,核准約需 至 ,前級同步延遲另加。若保守要求「穩定 10 ms」,選 N 時也須考慮第一與最後樣本的間距。取樣間的短暫切換看不到,因此連續樣本一致不代表實際電壓全程從未改變;必須一併指定開關特性與取樣條件。
若 count 只存 0~N−1,所需寬度為 。也要處理 N=1:第一個相反樣本就應立即接受,所以 N−1 比較的順序很重要。
一次按壓對應一個事件
核准的新狀態為 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 位元,所以須先確認儲存範圍。