I2S 收發器(VHDL)

邏輯主頁

程式碼下載

版本 1.0:i2s_transceiver.vhd (7.5 KB)
首次公開發布

特點

  • 整合式晶片內音訊(Integrated Interchip Sound,簡稱「I2S」)收發器組件的 VHDL 原始碼
  • 符合 I2S 匯流排規範
  • 可配置取樣率
  • 可設定串列位元時脈頻率
  • 可配置資料寬度
  • 僅限主控
  • 提供完整的範例設計(請參閱附加資訊部分)

介紹

本文詳細介紹了一個用於 FPGA 的主控 I2S 收發器元件,該元件以 VHDL 編寫。此元件透過 I2S 介面接收音訊數據,並以取樣率將接收到的資料透過平行介面傳輸給使用者邏輯。它還以採樣率從用戶邏輯輸入平行數據,並透過 I2S 介面將這些數據發送出去。圖 1 展示了整合到系統中的 I2S 收發器的典型範例。

圖 1. 範例實現

背景

I2S(也稱為 IIS)是一種用於數位音訊的標準化串列通訊匯流排。此匯流排由三條線路組成:串列時脈(SCK)、字選擇(WS)和串列資料(SD)。圖 2 顯示了 I2S 通訊鏈路的資料定框結構。

圖 2. I2S 資料定框

串列資料線傳輸兩個分時多工的資料通道-左聲道和右聲道。資料以二進位互補格式,先傳送最高有效位元(MSB)。字選擇線指示目前正在傳輸哪個通道(低位 = 左聲道,高位 = 右聲道)。此通道資料字的 MSB 在字選擇線切換後的一個時脈週期內傳輸,然後傳輸其餘資料字。資料位元在時脈下降緣傳輸,在時脈上升緣讀取。

I2S 傳送器或 I2S 接收器均可充當主控。主控提供串列時脈和字選擇訊號。

音訊編解碼器通常還需要一個「主時脈」(MCLK)來運作其內部電路。MCLK 頻率通常是取樣率的倍數,例如 256*Fs(當中 Fs 為取樣率)。具體要求取決於特定的音訊編解碼器。

工作原理

此 I2S 收發器輸入主控時脈,並使用計數器從主控時脈取得串列時脈和字選擇訊號。串列時脈頻率是主時脈的整數倍,字選擇頻率(即取樣率)也是串列時脈的整數倍。

接收資料在串列時脈上升緣從 sd_rx 連接埠同步到內部接收移位暫存器。在字選擇切換後的一個串列時脈週期內,對應通道的移位功能處於啟用狀態,並持續移位資料字的寬度,然後再次停用。收發器在每個字選擇切換時分別在 r_data_rxl_data_rx 連接埠上呈現左右聲道的接收資料。

相反,在每個字選擇切換時,r_data_txl_data_tx 輸入連接埠上呈現的左右聲道資料平行載入到內部傳送移位暫存器中。此資料在串列時脈下降緣從 sd_tx 連接埠同步輸出。在字選擇切換後一個串列時脈週期內,對應通道的移位功能處於啟用狀態,並持續超過資料字寬度一個串列時脈週期,然後再次停用。根據 I2S 匯流排規範,如果資料寬度與接收 I2S 裝置不匹配,則額外傳輸位元會將 sd_tx 資料線設為「0」。

配置 I2S 收發器

I2S 收發器透過設定 ENTITY 中的通用參數進行設定。

sclk_ws_ratio

字選擇(ws)訊號的頻率即取樣率。sclk_ws_ratio 參數定義每個字選擇週期的串列時脈(sclk)週期數。

image

mclk_sclk_ratio

mclk_sclk_ratio 參數定義每個串列時脈(sclk)週期的主控時脈(mclk)週期數。

image

d_width

參數 d_width 定義每個資料字的大小(以位元為單位)。

此值無需等於字選擇半週期內的串列時脈週期數(即通道資料傳輸期間的串列時脈週期數)。如果字選擇半週期內有多餘的時脈週期,則在多餘的串列時脈週期內,串列資料接收埠(sd_rx)上的任何資料都將被忽略,並且串列資料傳送埠(sd_tx)會針對這些多餘的位元輸出「0」。

提供主控時脈

I2S 收發器需要主控時脈 mclk 輸入才能運作。此時脈與發送給 I2S 收發器正在通訊的 I2S 從裝置的主控時脈訊號相同。

通常,所需的取樣率(Fs)是已知的,且 I2S 裝置需要一個為其取樣率倍數的主控時脈。例如,假設所需的取樣率是常用的 44.1kHz,而 I2S 設備接受 256*Fs 的主控時脈。這表示使用者需要向 I2S 裝置和 I2S 收發器提供 11.29MHz 的 mclk

可以使用 PLL 在 FPGA 內部產生 mclk 訊號。

連接埠描述

表 1 描述了 I2S 收發器的連接埠。

表 1. 連接埠描述

串流音訊資料處理

I2S 收發器將接收的資料透過 l_data_rxr_data_rx 連接埠提供給使用者邏輯。這兩個接收資料連接埠在每次 ws 訊號轉接時都會更新。由於新的左聲道資料僅在 ws = 0 時接收,因此 l_data_rx 連接埠會在 ws 訊號上升緣(即左聲道資料字完成時)同時取得新值。同樣,新的右聲道資料僅在 ws = 1 時接收,因此 r_data_rx 連接埠會在 ws 訊號下降緣(即右聲道資料字完成時)同時取得新值。使用者邏輯可以使用 ws 訊號指示有新資料可用,從而以取樣率檢索該資料。圖 3 展示了此行為。

同樣,I2S 收發器會在每次 ws 訊號轉接時閂鎖 l_data_txr_data_tx 連接埠上的新傳送資料。使用者邏輯可以使用 ws 訊號指示其輸出資料何時閂鎖,因此可以自由地在這些連接埠上呈現下一組發送資料。在左聲道資料字傳輸期間,在 ws 下降緣閂鎖的 l_data_tx 值會在 sd_tx 上傳輸。同樣,在右聲道資料字傳輸期間,在 ws 上升緣閂鎖的 r_data_tx 值會在 sd_tx 上傳輸。圖 3 展示了此行為。

圖 3. 時序圖

重置

reset_n 輸入連接埠必須為邏輯高電平,I2S 收發器才能運作。此連接埠上的低電平訊號會非同步重置組件。重置期間,元件將 sclkwssd_tx 連接埠保持低電位。所有正在進行的發送操作都會停止。所有正在進行的接收操作都會被放棄,並且 l_data_rxr_data_rx 輸出埠會被清空。所有內部資料緩衝區都會被清空。重置解除後,I2S 收發器將恢復工作。

結論

此 I2S 收發器是一款可設定的可編程邏輯元件,可透過標準 I2S 匯流排傳送和接收音訊資料。它作為主控設備運行,為介面提供串列時脈和字選擇訊號。使用者可配置特定的取樣頻率、資料寬度、主控時脈以及每個字的串列時脈週期數。

附加資訊

I2SBUS_specification.pdf (59.8 KB)

I2S Pmod 快速入門 (VHDL) - 本設計使用本頁所述的 I2S 收發器組件,將 FPGA 與 Cirrus Logic CS5343 多位音訊 ADC 以及 Cirrus Logic CS4344 立體聲 DAC 連接。