注 : 文中講述的原理是推理和探討 , 和現實中的實現不一定完全相同 。
開始之前, 可以先參考看看我之前寫的兩篇文章 :
《設計一個 硬件 實現的 Dictionary(字典)》 https://www.cnblogs.com/KSongKing/p/10193128.html
《漫談 計算機硬件 的 設計 和 實現》 https://www.cnblogs.com/KSongKing/p/9866334.html
串行信號 是 脈沖信號 ,
我們要 引入一個 “雙穩態開關”, 或者說 “雙穩態門” 來 處理 串行信號 。
雙穩態開關, 技術上 是一個 雙穩態電路, 不過 我們 先不關心 具體的技術實現, 我們先從 邏輯層面 來看待 。
所以, 我們提出一個 “雙穩態開關”, 又稱 “雙穩態門” 的 概念 。
雙穩態門 如下圖 :
雙穩態門 有一個 輸入端 和 一個 輸出端, 為了容易區分, 我們用 箭頭 來表示 輸入端 輸出端 。
輸入端 輸入 1 時, 輸出端 輸出 1, 輸入端 的 輸入 是一個 脈沖信號, 即 脈沖 結束后, 無輸入的狀態下, 輸出端 可以 保持 輸出 1 的 狀態 。
輸入端 輸入 0 時, 輸出端 輸出 0, 輸入端 的 輸入 是一個 脈沖信號, 即 脈沖 結束后, 無輸入的狀態下, 輸出端 可以 保持 輸出 1 的 狀態 。
為了 區別 0 和 “無輸入” 的 狀態, 技術上, 采用 高電平(高電壓) 表示 1, 低電平(低電壓) 表示 0, 無電壓 表示 無輸入 。
我們 可以 看一下 脈沖信號 的 波形圖 :
如果要發送 一個內容是 “1001” 的 串行信號, 則 波形圖 如下 :
好的, 接下來, 我們就可以看看將 串行信號 轉為 並行信號 的 邏輯電路圖 :
如圖, 為了便於講解,我們在 圖上 一些位置 標上了 序號 。
簡單起見, 我們 只 設計 了 2 位 的 並行信號 輸出 。 有就是說, 串行信號 會 轉換成 2 位(bit) 的 並行信號 。
1 2 是 入口雙穩態門, 控制着 串行信號 可以 寫入 哪一位(bit) 。 初始狀態 時, 第 1 位(bit) 的 入口穩態門 處於 “1” 狀態, 輸出端 輸出 1 , 輸出端 連接 的 開關 接通, 可以向 第 1 位(bit) 寫入數據 。 而 其它位,比如 第 2 位(bit) 的 入口雙穩態門 處於 “0” 狀態, 輸出端 輸出 0 , 輸出端 連接 的 開關 斷開, 不能向 第 2 位(bit) 寫入數據 。
也就是說, 同一時間, 只能 有一個 位 的 入口雙穩態門 處於 “1” 狀態, 其它位 的 入口雙穩態門 都應該是 “0” 狀態, 這樣 同一時間 只有 一個 位 可以 寫入數據 。
這就是 串行信號 轉為 並行信號 的 基礎 。
在 初始狀態 下, 當 串行信號 的 第一個 脈沖 達到時, 第 1 位 的 入口穩態門 處於 “1” 狀態, 開關接通, 所以 第一個 脈沖 就 通過開關 寫入了 第 1 位 的 存儲位(圖中 下方 7 處) 。 存儲位 也是一個 雙穩態門, 利用 穩態開關 的 “穩態” 特性, 可以起到 “記憶”(存儲器) 的 功能 。 比如, 脈沖 是 1, 則 雙穩態門 就會 保持在 “1” 狀態, 脈沖 是 “0”, 則 雙穩態門 會 保持在 “0” 狀態 。
與此同時, 脈沖 還會 通過 圖中 3 處 的 電路, 轉換為 “1” , 輸出到 圖中 5 處 的 延時開關 。 圖中 3 處 電路 的 意義 是 不管 脈沖 是 “1” 還是 “0”, 都 轉為 “1” 。 也就是說, 只要有 串行信號 輸入, 不管是 1 還是 0 , 都會 觸發 這個 延時開關 。
延時開關 的 意思 就是 , 當 輸入端 有 1 輸入時, 延遲一段時間, 才在 輸出端 輸出 1 。
延時開關 輸出的 1 會 觸發 圖中 2 處 的 雙穩態門, 也就是 第 2 位 的 入口雙穩態門, 這可以讓 第 2 位 的 開關 接通, 使 第 2 位 進入 可以 寫入數據 的 狀態 。
同時, 延時開關 輸出的 1 還會 通過另一條線路 經過 圖中 9 處 的 “非”門, 再 到達 圖中 1 處 的 雙穩態門, 也就是 第 1 位 的 入口雙穩態門 。
延時開關 輸出的 1 經過 非門 后, 會變成 0, 這個 0 會 觸發 第 1 位 的 入口雙穩態門 變成 “0” 狀態, 即 輸出 0, 對應的 開關 會 斷開, 第 1 位 會變成 不能 寫入數據 的 狀態 。
這樣 就 完成了 寫入 第 1 個 脈沖 的 過程 。
接下來 就可以 寫入 第 2 個 脈沖 。 第 2 個 脈沖 將會寫入 第 2 位(bit)存儲位。
有一個 問題 是, 這里 為什么 要使用 “延時開關” 呢 ?
因為, 如果 不經過 延時, 圖中 3 處 產生的 “1” 直接 輸出到 圖中 2 處 的 入口雙穩態門 的 話, 會 立即 接通 第 2 位 的 開關, 使 第 2 位 立即 進入 可寫入數據 的 狀態 。 此時很有可能 第一個 脈沖 還沒有結束, 也是 第一個脈沖 會 寫入到 第 2 位, 這就產生了 錯誤 。
甚至, 如果 這個電路 有 多位(bit), 比如 3 位(bit)、 4 位(bit) …… , 則 有可能 會 觸發 第 3 位 、 第 4 位 …… 也 進入 可寫入 的 狀態, 這樣連續觸發下去 。
這樣 就 不對 了 。
可以 連續 觸發 幾位(幾級), 視 電路 的 傳輸速度 而 定 。 ^^
同時, 如果 不經過 延時, 圖中 3 處 產生的 “1” 還會 經過 圖中 9 處 的 非門 變成 “0” 觸發 第 1 位 的 入口雙穩態門 變為 “0”, 使得 第 1 位 的 開關 斷開, 第 1 位 變成 不可寫入 的 狀態 。 但這時 第 1 位 的 寫入 操作 還可能 沒有完成 。會導致 寫入 第 1 位 的 操作 也 發生錯誤 。
我們可以通過 串行信號(脈沖信號) 的 波形圖 來 形象 的 說明 上面 這個過程 :
上述過程 依次 向 下一位 遞推, 直到 最后一位 。 如: 第 1 位 寫入, 觸發 第 2 位 接通, 第 1 位 斷開; 第 2 位 寫入, 觸發 第 3 位 接通, 第 2 位 斷開; 第 3 位 寫入, 觸發 第 4 位 接通, 第 3 位 斷開; …… 。
當 到 最后一位 時, 會 反過來 觸發 第 1 位 接通, 自己 斷開, 同時 把 所有位 的 數據 寫入 緩沖區 。 這樣就完成了 一輪 接收 。 可以開始 下一輪 接收 。
當然, 最后一位 的 這個 執行過程 我們 略去了, 沒有畫出來 。
有關 延時開關, 可以參考 《RC 延時電路簡要分析》 https://wenku.baidu.com/view/0f4d8024960590c69ec376fc.html
當然 延時開關 的 實現技術 是 多樣的, 也有一些 新技術 。
延時開關 技術 可能 是 硬件技術 的 一個 關鍵技術 之一 。
因為 延時開關 的 反應速度 和 精度 關系到 串行轉並行 電路 的 穩定性 和 傳輸速度 。
延時開關 反應速度 越快, 精度 越高, 就能支持 更高頻率 的 串行信號, 串行信號 的 頻率 越高, 傳輸速度 也 越快 。
大量數據 的 串行轉並行 傳輸 需要 發送方 和 接收方 之間 發信號 通信協作, 也可以說是 發指令 。
可以把 發送方 稱為 “串行設備”, 把 接收方 稱為 “並行接口” 。
串行設備 會 發信號 通知 並行接口 准備發送數據, 並行接口 設置好 初始狀態 后 發信號 通知 串行設備 可以發送數據,
感覺 好像 三次握手 ……
串行設備 發送數據, 雙方 可以 約定 一次 發送多少 數據(Byte), 比如 1 KB , 則 接收完 1KB 后 並行接口 通知 操作系統,
操作系統 從 並行接口 的 緩沖區 中 讀取 這 1KB 數據 到 內存, 完成后 通知 並行接口,
並行接口 發信號 通知 串行設備 繼續 發送數據 。
如果 發送信號(指令) 的 線路 也是 串行線路(串行信號), 那么 上文討論的 串行轉並行 的 原理 也適用於 發送接收 信號(指令)。
理論上, 本文原理 也 適用於 Modem(調制解調器) 和 USB 的 基礎電路 和 基本原理 。
我們可能會碰到這樣的情況, Modem 或者 路由器 使用的時間長了, 可能會出現 上不了網 的 情況 。 這時, 就 關掉一下, 放一下電, 等一會兒再打開 就可以上網了 。
這可能跟 上文 中 延時開關 的 原理 有關 。
延時開關 通常 會 用 電容 和 三極管 組成, 利用 電容 充電放電 的 特性 延時, 所以 電容 的 質量 和 延時開關 的 穩定性 和 精度 有 直接關系 。
這也是 關掉 Modem 或者 路由器 , 放一下電, 等一會兒再開 就 又可以上網了 的 原因 吧 ! ^^ ^^ ^^