程式碼下載
PS/2 主機收發器(頂層檔案):ps2_transceiver.vhd (11.2 KB)
解彈跳邏輯(必須包含在項目中):debounce.vhd (2.4 KB)
特點
- PS/2 主機收發器的 VHDL 原始碼
- 輸出從 PS/2 裝置接收的 PS/2 代碼
- 當有新的接收編碼可用時設定標誌輸出
- 驗證接收資料的同位、起始和停止位元
- 接受並向 PS/2 設備發送命令
- 在傳輸操作進行中/完成時通知用戶
- 可設定的系統時脈頻率
- 在 PS/2 和系統時脈域之間同步
- 對傳入的 PS/2 訊號進行解彈跳
簡介
本文詳細介紹了一個用於 CPLD 和 FPGA 的 PS/2 主機收發器元件,該元件採用 VHDL 語言編寫。此元件接收來自 PS/2 裝置的資料傳輸,並透過平行介面將 PS/2 資料提供給使用者邏輯。它還透過平行介面接受來自用戶邏輯的命令,並根據 PS/2 協定將其傳輸到 PS/2 裝置。此元件使用 Quartus II 13.1 版本設計。圖 1 展示了整合到系統中的 PS/2 主機收發器的典型範例。此處提供的 PS/2 滑鼠介面實作了該 PS/2 主機收發器,用於從標準 PS/2 滑鼠傳輸資料。此處提供的 PS/2 鍵盤介面實作了此 PS/2 主機收發器設計的簡化版本(僅使用接收邏輯,不包含傳送功能)。
圖 1. 範例實現
背景
PS/2(IBM 個人系統/2)是一種透過 6 針 Mini-DIN 連接器將鍵盤和滑鼠連接到 PC 相容電腦系統的介面。計算系統必須為鍵盤或滑鼠提供 5V 電源和接地連接。通訊透過兩線串列介面進行,該介面由一條時脈線和一條數據線組成。兩條線都需要上拉電阻(圖 1 所示的電阻為 2kohm)。圖 1 中的 120ohm 串聯電阻用於將 3.3V FPGA I/O 連接到 5V 訊號。
圖 2 展示了接收傳輸的格式。時脈和資料訊號在非活動狀態時均為邏輯高電位(注意上拉電阻)。設備同時提供時脈和數據。時脈頻率在 10kHz 至 16.7kHz 之間(即週期為 60-100us)。資料以起始位元(邏輯低電位)開始,接著是一個資料位元組、一個同位位元,最後是一個停止位元(邏輯高電位)。資料以 LSB 優先發送。每個位元應在時脈訊號的下降緣讀取。完成後,時脈和資料訊號均返回邏輯高電位。

圖 2. PS/2 接收時序圖
圖 3 顯示了傳送傳輸格式。主機首先透過將時脈線拉低 100us 來請求傳輸資料。這會抑制 PS/2 匯流排。抑制 100us 之後,主機釋放時脈並在資料線上輸出一個低電平起始位元。然後,設備開始產生時脈。在每個下降緣,主機移出資料位,首先是最低有效位元(LSB),然後是同位位元。在下一個時脈上,主機釋放資料線,資料線被其上拉電阻拉高以發出停止位元訊號。在時脈上升緣讀取每個訊號後,設備發出邏輯低電平確認位,告知主機已收到資料。主機在最後一個下降緣讀取該確認位,然後設備繼續釋放時脈線和資料線,使其恢復到邏輯高電平。

圖 3. PS/2 傳送時序圖
工作原理
圖 4 描述了 PS/2 主機收發器的狀態圖。只要元件未執行傳送傳輸,它就處於 receive 狀態。在此狀態下,它可以偵測設備發起的傳輸,接收資料並將其輸出到使用者邏輯。如果使用者邏輯透過置位 tx_ena 訊號請求發送傳輸,主機將閂鎖數據,並經歷一系列狀態以執行發送傳輸。它首先進入 inhibit 狀態,在此狀態下抑制 PS/2 時脈線 100us。在此期間,它進入 transact 狀態,在此狀態下發送資料和同位位元,並評估設備的確認位元。最後,它進入 tx_complete 狀態,在此狀態下等待裝置釋放 PS/2 匯流排,然後返回 receive 狀態。
圖 4. 狀態圖
圖 5 概念性地展示了 PS/2 主機收發器的工作原理。來自 PS/2 時脈和資料連接埠的輸入訊號經過同步和去解彈跳處理(解彈跳組件的 VHDL 程式碼及相關文件可在此處取得)。隨後,產生的內部 PS/2 資料訊號在 PS/2 時脈的下降緣以串列方式載入到移位暫存器中。在 receive 狀態下,空閒計數器決定傳輸何時完成,完成時間由 PS/2 時脈保持高邏輯電平超過 55us(即超過最壞情況 PS/2 時脈週期的一半)來定義。組合誤差校驗邏輯會使用對應的資料來驗證起始位元、停止位元和同位位元。當 PS/2 連接埠空閒且資料有效時,此元件輸出接收到的 PS/2 編碼,並將 ps2_code_new 訊號設為高電平,以指示 ps2_code 匯流排上有新的可用編碼。該程式碼將保留在匯流排上,直到接收到另一個程式碼。ps2_code_new 訊號保持高電平直到另一個 PS/2 傳輸開始(當低 PS/2 時脈訊號清除空閒計數器時)。
圖 5. 概念架構
當請求傳送傳輸時,tx_cmd 匯流排上提供的傳送資料和同位位元會被載入到移位暫存器。inhibit 狀態會在 PS/2 時脈線上輸出邏輯低電位以禁止匯流排。在 transact 狀態期間,PS/2 時脈被釋放,移位暫存器中的指令會在 PS/2 時脈下降緣以串列方式移出到 PS/2 資料線。對位元進行計數,並在適當的時間釋放資料線以接收設備的確認位元。
連接埠描述
表 1 描述了 PS/2 主機收發器的連接埠。
表 1. 連接埠描述
設定時序參數
系統時脈速度會影響主機收發器的時序操作。為了確保元件正常運行,必須正確設定 ENTITY 中宣告的兩個 GENERIC 參數 clk_freq 和 debounce_counter_size。clk_freq 參數必須設定為系統時脈頻率(以 Hz 為單位)。所提供程式碼中的預設設定為 50MHz(元件模擬和測試的頻率)。debounce_counter_size 參數必須設定為 2^debounce_counter_size / clk_freq = 5us。對於 50MHz 系統時脈,debounce_counter_size = 8。
範例傳輸
圖 6 顯示了範例接收傳輸的時序圖。PS/2 時脈訊號變成低電位後,ps2_code_new 標示解除宣告,表示新的 PS/2 接收傳輸正在進行中。傳輸完成後,ps2_code_new 標示宣告,表示新的 PS/2 編碼已收到,並可在 ps2_code 匯流排上使用。在本例中,接收到的 PS/2 編碼為 x“35”。 rx_error 訊號保持低電平,表示傳輸期間未偵測到任何錯誤。
圖 6. PS/2 接收傳輸範例
圖 7 顯示了傳送傳輸範例的時序圖。一旦使用者邏輯置位 tx_ena 輸入,PS/2 主機收發器便會閂鎖 tx_cmd 連接埠上的指令。tx_busy 訊號變成高電平,表示傳送傳輸正在進行中,使用者邏輯可以解除宣告 tx_ena 訊號。收發器執行傳輸。完成後,它會解除宣告 tx_busy 輸出訊號,表示傳輸已完成,收發器再次可用。ack_error 訊號保持低電平,表示 PS/2 裝置在傳輸結束時發出了預期的確認位元。
圖 7. PS/2 發送傳輸範例
總結
此 PS/2 主機收發器介面是一個可編程式邏輯元件,用於處理與 PS/2 裝置的傳輸。它同步時脈域、消除輸入訊號解彈跳、執行錯誤檢查、發送命令、接收數據,並在設備的新數據在其平行輸出匯流排上可用時通知用戶邏輯。
相關主題
PS/2 鍵盤介面 (VHDL)
PS/2 鍵盤到 ASCII 轉換器 (VHDL)
PS/2 滑鼠介面(VHDL)
解彈跳邏輯電路(帶有 VHDL 範例)





