走對這幾步 讓 I2S 收發(fā)器跑起來(lái)!
文章 概述
本文引用地址:http://dyxdggzs.com/article/202408/462424.htm本文介紹了I2S收發(fā)器的配置與實(shí)現,用于FPGA的VHDL編程。I2S是數字音頻的標準化串行通信總線(xiàn),由SCK、WS和SD三條線(xiàn)路組成。文章闡述了I2S收發(fā)器的工作原理,包括數據傳輸方式、操作理論、配置方法、端口描述以及音頻數據事務(wù)傳輸。
本文詳細介紹了一個(gè)主 I2S 收發(fā)器組件用于 FPGA,以 VHDL 編寫(xiě)。 組件通過(guò) I2S 接口接收音頻數據,并將接收到的數據在某一采樣率上傳送給并行接口上的用戶(hù)邏輯芯片。 它還在某一采樣率上從用戶(hù)邏輯芯片上接收并行數據,并通過(guò) I2S 接口將這些數據傳輸出去。 圖1說(shuō)明了將 I2S 收發(fā)器集成到系統中的一個(gè)典型示例。
圖 1 示例實(shí)現
背景
I2S (也稱(chēng)為 IIS) 是用于數字音頻的標準化串行通信總線(xiàn)。該總線(xiàn)由串行時(shí)鐘 (SCK)、字段選擇信號 (WS)和串行數據 (SD) 3條線(xiàn)路組成。圖2顯示了 I2S 通信鏈路的數據幀。
圖 2. I2S 數據幀串行數據線(xiàn)傳輸兩個(gè)時(shí)間復用的數據通道——左信道和右信道。數據首先以2’s 二進(jìn)制補碼形式傳輸最高有效位(MSB)。字段選擇信號 (WS)表示當前正在傳輸的聲道(低=左聲道,高=右聲道)。該通道數據字段的MSB在字段選擇信號 (WS)切換后傳輸一個(gè)時(shí)鐘周期,然后是數字節的其余部分。數據位在下降時(shí)鐘沿上傳輸,在上升時(shí)鐘沿上讀取。I2S發(fā)送器或I2S接收器都可以充當主機(master)。主機提供串行時(shí)鐘和字段選擇信號。音頻編解碼器通常也需要一個(gè)“主時(shí)鐘”(MCLK) 來(lái)運行其內部電路。MCLK 頻率通常是采樣率的倍數,例如 256*Fs (其中 Fs 是采樣率)。要求取決于具體的音頻編解碼器。
操作理論這個(gè)I2S 收發(fā)器輸入一個(gè)主時(shí)鐘,并通過(guò)計數器從它得到串行時(shí)鐘和字段選擇信號。串行時(shí)鐘頻率是主時(shí)鐘的整數倍,字段選擇頻率(即采樣率)是串行時(shí)鐘的整數倍。接收數據從串行時(shí)鐘上升沿上的 sd_rx 端口時(shí)鐘進(jìn)入內部接收移位寄存器。在字段選擇切換后,為適當的通道啟用一個(gè)串行時(shí)鐘周期的移位,并繼續保持數據字段的寬度,然后再次禁用。在每個(gè)字段選擇開(kāi)關(guān)上,收發(fā)器分別在 r_data_rx 和 l_data_rx 端口上呈現右聲道和左聲道的接收數據。相反,在 r_data_tx 和 l_data_tx 輸入端口上呈現的左右數據在每個(gè)字段選擇開(kāi)關(guān)上并行加載到內部傳輸移位寄存器中。這些數據在串行時(shí)鐘下降沿上的 sd_tx 端口被時(shí)鐘輸出。在字段選擇切換后,為適當的通道啟用一個(gè)串行時(shí)鐘周期的移位,并在數據字段的寬度之外繼續一個(gè)串行時(shí)鐘,然后再次禁用。根據 I2S 總線(xiàn)規范,額外的傳輸位將 sd_tx 數據線(xiàn)設置為’ 0 ',以防數據寬度與接收 I2S 設備不匹配。
配置I2S 收發(fā)器
I2S 收發(fā)器通過(guò)在 ENTITY 中設置通用參數進(jìn)行配置。
sclk_ws_ratio
字段選擇 (ws) 信號的頻率是采樣率。 sclk_ws_ratio 參數定義了每個(gè)字段選擇周期的串行時(shí)鐘*(sclk)* 周期數。
mclk_sclk_ratio
mclk_sclk_ratio 參數定義了每個(gè)串行時(shí)鐘*(sclk)* 周期的主時(shí)鐘 (mclk) 周期數。
d_width
參數 d_width 以位為單位定義每個(gè)數據字段的大小。這并不需要等于一個(gè)字段選擇半周期內串行時(shí)鐘周期的數量(即在信道數據傳輸期間串行時(shí)鐘的數量)。如果在字段選擇半周期內有多余的時(shí)鐘周期,那么在額外的串行時(shí)鐘周期內串行數據接收端口 (sd_rx) 上的任何數據都將被忽略,并且串行數據傳輸端口 (sd_tx) 為這些額外的位輸出 ’ 0 '。
提供主時(shí)鐘 (Master Clock)
I2S 收發(fā)器需要一個(gè)主時(shí)鐘 時(shí)鐘輸入 來(lái)操作。該時(shí)鐘是發(fā)送到 I2S 收發(fā)器正在通信的 I2S 從設備的同一主時(shí)鐘信號。
通常,期望的采樣率 (Fs) 是已知的,I2S 設備需要一個(gè)該采樣率的若干倍的主時(shí)鐘。例如,假設期望的采樣率是常用的 44.1 kHz,并且 I2S 設備接受 256*Fs 的主時(shí)鐘。這意味著(zhù)用戶(hù)需要為 I2S 設備和 I2S 收發(fā)器提供11.29 MHz的 mclk 。mclk 信號可以在 FPGA 內部使用鎖相環(huán)導出。
端口的描述
I2S收發(fā)器接口說(shuō)明如表1所示。
表 1 . 端口的描述
音頻數據事務(wù)傳輸
I2S 收發(fā)器使 l_data_rx 和 r_data_rx 端口上的用戶(hù)邏輯可以使用接收到的數據。這兩個(gè)接收數據端口在每次 ws 轉換時(shí)都會(huì )更新。由于新的左聲道數據僅在 ws = ’ 0 '時(shí)接收,因此 l_data_rx 端口與 ws 的上升沿同時(shí)獲得新值,即當左聲道數據字段完成時(shí)。同樣,新的右聲道數據僅在 ws = " 1 " 時(shí)接收,因此 r_data_rx 端口與 ws 的下降沿并發(fā)獲得新值,即當右聲道數據字段完成時(shí)。用戶(hù)邏輯可以使用 ws 信號來(lái)指示新數據可用,從而以采樣率檢索該數據。圖3 說(shuō)明了這種行為。
類(lèi)似地,I2S 收發(fā)器在每個(gè) ws 轉換的 l_data_tx 和 r_data_tx 端口上鎖存新的傳輸數據。用戶(hù)邏輯可以使用 ws 信號來(lái)指示何時(shí)將其輸出數據鎖存,因此可以自由地在這些端口上呈現下一組傳輸數據。鎖存在 ws 下降沿上的 l_data_tx 值在左聲道數據字段傳輸期間在 sd_tx 上傳輸。同樣,鎖存在 ws 上升沿上的 r_data_tx 值在右聲道數據字段傳輸期間在 sd_tx 上傳輸。圖3 顯示了這種行為。圖 3. 時(shí)間圖
評論