基于verilog实现IIS音频数据接收


前言

IIS(Inter-IC Sound)协议在 1986 年左右提出,其主要用于在音频设备(如数字信号处理器、数模转换器、编解码器等)之间传送数字音频数据。是一种专门用于音频数据传输的串行总线标准,其设计目标是简单高效地在数字音频设备之间传输音频数据。

一、IIS信号介绍

IIS主要是由MCLK、SCLK(BCLK)、LRCK(WS)、DATA(SD)四根信号信号线组成,其中MCLK被称为主时钟用于同步整个芯片内部的音频采样与转换过程,SCLK被称为位时钟,其为数据传输提供比特级的时序基准。每传输一位数据,BCLK 脉冲就会出现一次,其频率决定了数据传输速率;LRCK被称为左右时钟,该信号指示当前传输的是左声道还是右声道数据,当LRCK == 0时表示左时钟数据,在LRCK == 1 时表示右声道音频数据;而DATA是串行数据传输线,其数据是按位传输,通常 MSB(最高有效位)先传。
这里着重介绍一下SCLK和LRCK,LRCK为左右时钟,其采样速率在市面上大多为48K和44.1K,少数为32K或者其它,而SCLK的速率依据需要传递的采样速率和数据位宽决定,其计算公式为SCLK == 2 * LRCK * DATA_WIDTH ,例如LRCK == 48K,IIS_DATA == 32bit,则SCLK == 2 * 48K * 32 == 3.072M.

二、IIS数据格式

市面上常见的IIS音频格式主要有三种,分别为标准IIS模式(也称Phillip Standard)、左对齐模式和右对齐模式;其中标准IIS音频时序如下:
标准IIS时序
由图可看知,其在数据传输周期中,其数据是在LRCK的第二个周期上升沿有效
左对齐IIS音频时序如下:
IIS左对齐模式
由图可看知,其在数据传输周期中,其数据是在LRCK的第一个周期上升沿有效
右对齐模式如下:
IIS右对齐模式
IIS右对齐模式也叫sony模式,也称日本模式,具体传输模式如图。

三、PCM音频

PCM 音频作为数字音频处理中最基本的编码方式,通过对模拟音频信号进行采样和量化,将音频信号转换为数字数据,使得声音可以高保真地存储、处理和传输。虽然 PCM 数据量较大,但其无损和简单高效的特性使其在数字音频领域中占有重要地位。无论是在家庭娱乐、专业录音还是数字通信中,PCM 都扮演着关键角色,其音频格式如下:
PCM音频

四、代码设计

首先我们得明白,在FPGA中去接收ADC的数据需要考虑时钟同步的问题,之前已知时钟同步时靠MCLK进行同步,但是这是几个音频芯片的控制,FPGA的工作时钟将要大于MCLK的时钟,故接收时得先进行时钟同步以避免异步导致的数据回复异常问题,IIS音频是单bit的串行协议,所以对于单bit而言做时钟同步的最好方法是打两拍过渡即可,代码如下:

module iis_sync #
(
   parameter      TAP  =   2  // 延时拍数
)
(
   input                   clk_sys,
   input                   i2s_bclki,
   input                   i2s_lrcki,
   input                   i2s_sdati,

   output   reg            i2s_bclko,
   output   reg            i2s_lrcko,
   output   reg            i2s_sdato
);

//*****************************************************************************
// Signals
//*****************************************************************************
wire                       bclk_pedge;
wire                       i2s_lrcki_w;
wire                       i2s_sdati_w;

//*****************************************************************************
// Processes
//*****************************************************************************
always @( posedge clk_sys )
begin
   i2s_bclko <= bclk_pedge;
end

always @( posedge clk_sys )
begin
   if ( bclk_pedge == 1'b1 )
      i2s_lrcko <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值