主要内容

IP Core生成I2C控制器IP,用于配置音频编解码芯片

这个示例演示了如何使用使用statflow™块建模的I2C主控制器建模I2C控制器,以配置音频编解码器芯片。

在本例中,您可以:

  1. 使用Simulink®中使用StateFlow®块模型I2C主控制器金宝app

  2. 使用I2C主控制器模块为I2C控制器建模,用于配置音频编解码芯片

  3. 使用blackbox子系统和双向端口功能处理I2C IP核中的三态逻辑

  4. 使用IP核心生成工作流为I2C控制器生成IP核心

1.I2C协议概述

I2C总线,也称为IC总线,是一个简单,多主机,多从属,双向双线总线,由串行数据(SDA)和串行时钟(SCL)线组成。连接到总线的每个设备都是可通过唯一的7位或10位地址寻址的软件,并维护一个简单的主从关系。串行,8位定向,双向数据传输可以在标准模式下高达100 kbit / s,快速模式高达400 kbit / s,高达3.4 Mbit / s高 -速度模式。I2C总线有两个节点:主节点和从节点。主节点生成时钟并启动与从站的通信。由主设备寻址的从节点接收时钟并在确认期间响应主机。有四种操作模式是主发送,主接收,从站发送和从机接收。主机通过发送起始位后跟7或10位地址,后跟读(1)或写(0)位来开始通信。如果存在对应于该地址的从站,则它会响应ACK位。主服务器基于读取或写入位继续发送或接收模式。 Similarly, the slave continues its operation based on the read or write instruction from the master. The figure below shows the timing diagram of I2C protocol.

2.使用StateFlow块在Simulink中建模广义I2C主控制器金宝app

在设计中配置多个外围设备可能是一个繁琐的过程。相反,创建一个通用I2C主控制器,您可以直接使用它配置音频编解码器芯片。下图显示了使用Simulink中的状态流块实现的通用I2C主控制器的体系结构。金宝app

上面的部分显示了I2C主控制器模块。要配置外设,必须向I2C主控制器块提供特定于设备的配置。使用I2C主控制器配置音频编解码芯片的框图如下所示。

下面的模型显示了I2C主控制器,它在Simulink中使用状态流块进行建模。金宝app

modelname ='hdlcoder_i2c_master_controller';open_system (modelname);open_system (“hdlcoder_I2C_master_controller / I2C_MasterController”);

I2C主控制器仅支持I2C写入,目前不支持I2C回读。I2C主金宝app控制器由两部分组成,I2C主控制器图和三态缓冲黑盒。I2C主控制器图通过三态缓冲黑盒向从设备提供串行数据、SDA和串行时钟、SCL。三态缓冲黑盒ox使用手写VHDL代码,用于SDA端口的双向功能。由于Simulink不支持双向端口建模,因此在模型中添加了三态缓冲区blackbox。金宝app

要创建黑盒,请执行以下步骤。

1.创建一个子系统,该子系统包含要导入用于创建黑箱的HDL源代码的输入和输出端口。I2C三状态缓冲区黑箱如下所示。

2.要将子系统指定为黑色框界面,请右键单击子系统并选择HDL代码> HDL块属性并将架构设置为Blackbox,如下图所示。

3.数据端口I2C_SDAI2C主控制器是双向的。要将端口设置为双向的,右键单击I2C_SDAport,然后单击HDL块属性并设置BidirectionalPort,如下所示。

4.在模拟过程中,将使用黑盒子子系统内部的实际内容进行模拟。

在代码生成过程中,HDL Coder不会生成黑箱子系统下的代码。相反,代码生成器将您手写的HDL代码集成到IP核中。I2C主控制器模块的输入可以通过在输入端添加特定于设备的配置图来提供。这个图表包含了需要为你的从设备配置的寄存器的详细信息。更多关于设备配置的内容,请参见Zedboard、Zybo board和Arrow SoC Development Kit Audio Codec configuration using I2C Master Controller。

2.1 I2C主控制器模块I/O描述

下图提供了有关I2C主控制器块的输入和输出端口的详细信息。

2.2 I2C主控制器状态流程图描述

I2C主控制器图的制作方式是在所有状态下生成所需的时钟(SCL),并根据I2C协议通过串行数据(SDA)端口提供数据。以下状态显示了时钟和起始位的生成。

以下状态用于发送从设备的7位地址。

这个函数Bitget.用于将位串行发送到SDA端口。它允许用户在参数列表中提到的整数的指定位置获取位值。从一种状态到另一种状态的转换取决于为转换条件指定的执行顺序。如上图所示,从cmd_slave_addr_pcmd_slave_addr_n状态基于转换条件(Bit_cnt> 0)发生。位_CNT的值保持递减,直到过渡条件满足。Bit_CNT的值初始化为“7”,并且其值递减直到它变为“1”,用于在SDA端口上发送从设备的7位地址。对于HDL代码生成,必须使用支持的数据类型。金宝app冒号(:)运算符如在CMD_SLAVE_ADDR_N状态(SCL(:)= 0)中使用的键盘操作员(SCL(:)= 0)将“双”类型的值转换为类型“逻辑”(SCL是状态中的逻辑数据类型所示)。下面显示的状态用于向从设备发送寄存器地址。

下面所示的状态用于将寄存器数据发送到从设备。

以下状态显示停止位生成。

3.使用I2C主控制器库块在Zedboard上配置音频编解码ADAU1761

本节介绍如何:

  1. 使用Simulink中的状态流块模拟音频编解码器ADAU1761设备配置图。金宝app

  2. 使用I2C主控制器库块配置音频编解码器ADAU1761。

  3. 对创建的模型执行模拟。

如前所述,在Zedboard上配置音频编解码器ADAU1761,需要创建ADAU1761的设备配置图。此图表应连接到先前创建的I2C主控制器库块。

笔记:您必须为自己的设备创建设备配置图。此示例演示如何使用I2C主控制器库块配置音频编解码器设备。用于ADAU1761的设备配置图特定于此设备,不能用于配置其他设备。

为ADAU1761创建的配置模型如下所示。

modelname =“hdlcoder_I2C_adau1761”;open_system (modelname);

3.1模拟音频编解码ADAU1761配置模型

对于音频编解码器芯片ADAU1761,需要配置20个寄存器。其中少数寄存器必须由I2C主控制器以突发模式写入,少数寄存器必须以字节模式写入。第一个寄存器以字节模式写入,第二个寄存器以长度为6字节的突发模式写入。其余18个寄存器以字节模式写入。

音频编解码器ADAU1761配置的模拟波形如下所示。

I2C主控制器和音频编解码器芯片ADAU1761之间的字节模式传输如下图所示。

下面的仿真显示了发送起始位,接着是从设备的7位地址(0x3B),接着是写(0)位,接着是16位寄存器地址(0x4000),接着是8位寄存器数据(0x0E)和从设备的确认。

3.2 IP核心生成工作流程

要生成音频编解码器ADAU1761配置HDL IP核,请遵循下面给出的步骤。

1.在MATLAB命令窗口中使用以下命令设置Xilinx Vivado合成工具路径。运行该命令时,请使用您自己的Vivado安装路径

刀具轨迹(“ToolName”“Xilinx Vivado”“刀具路径”“C: \ Xilinx \ Vivado \ 2017.4 \ bin \ vivado.bat ');

2.在ADAU1761配置模型中,选择I2C_IP子系统,并右键单击“打开HDL工作流顾问”。在任务1.1中,选择IP核心代对于目标工作流,通用Xilinx平台针对Target平台和锡林克斯万岁对于合成工具。还可以选择族、设备、包和速度,如下图所示。

3.在任务1.2中,将所有端口的“目标平台接口”设置为“外部端口”。

4. vhdl文件hdlcoder_i2c_tristate.vhd中存在Tristate HDL逻辑。将其复制到当前的工作目录中。

/ /将文件中的hdlcoder_i2c_trstate .vhd文件复制到hdlcoder_i2c_trstate .vhd文件中

5.在任务3.2中,在附加源文件中添加三个缓冲区VHDL文件。然后右键单击“生成RTL代码和IP内核”,然后单击“运行到选定的任务”。

将生成用于配置ADAU1761的I2C IP核。下图显示IP核生成报告。

生成的IP内核可用于用户参考设计。用于创建参考设计,请参阅为Zynq板上的音频系统编写参考设计

4.使用I2C主控制器库块在Zybo板上配置音频编解码器SSM2603

本节介绍如何:

  1. 在Simulink中使用statflow块建模音频编解码器SSM2603设备配置图。金宝app

  2. 使用I2C主控制器库块配置音频编解码器SSM2603。

  3. 对创建的模型执行模拟。

要在Zybo board上配置音频编解码器SSM2603,需要创建SSM2603的设备配置图。此图应连接到先前创建的I2C主控制器库块。

笔记:SSM2603使用的设备配置图是针对本设备的,不能用于配置其他设备。

为SSM2603创建的配置模型如下所示。

modelname =“hdlcoder_I2C_ssm2603”;open_system (modelname);

4.1模拟音频编解码SSM2603配置模型

音频编解码芯片SSM2603需要配置11个寄存器。所有将以字节方式写入。

用于音频编解码器SSM2603的配置的仿真波形如下所示。

下面的模拟显示了发送起始位、从设备的7位地址(0x1A)、写入(0)位、8位寄存器地址(0x0C)、8位寄存器数据(0x10)和从设备的确认。

4.2 IP核心生成工作流

SSM2603配置模型的IP核心生成步骤与上面提到的步骤3.2,IP核生成工作流程相同。生成的IP内核可用于用户参考设计。用于创建参考设计,请参阅创作Zybo板上的音频系统参考设计

5使用I2C主控制器库块在Arrow SoC Development Kit上配置音频编解码SSM2603

本节介绍如何:

  1. 在simulink中使用状态流块的模型音频编解码器SSM2603设备配置图。金宝app

  2. 使用I2C主控制器库块配置音频编解码器SSM2603。

  3. 对创建的模型执行模拟。

为了在Arrow SoC Development Kit上配置音频编解码SSM2603,需要创建SSM2603的设备配置图。此图表应连接到先前创建的I2C主控制器库块。

笔记:SSM2603使用的设备配置图是针对本设备的,不能用于配置其他设备。

Arrow SoC Development Kit上SSM2603的配置模型与Zybo板上SSM2603的配置模型相同。关于SSM2603配置模型,请参阅本文的第4节。

5.1模拟音频编解码SSM2603配置模型

Arrow SoC Development Kit上的音频编解码芯片SSM2603配置与Zybo板上的音频编解码芯片SSM2603配置相同。请参考本文的4.1节进行模拟。

5.2 IP核生成流程

要生成音频编解码SSM2603配置HDL IP核,请遵循以下步骤。

1.使用Matlab命令窗口中的以下命令设置Intel Quartus工具路径。运行命令时使用自己的Quartus安装路径

刀具轨迹(“ToolName”“四轮交替II”“刀具路径”'C:\intelFPGA\18.1\quartus\bin64\quartus.exe');

2.在SSM2603配置模型中,选择I2C_SSM2603子系统并通过右键单击打开HDL工作流顾问。在任务1.1中,选择IP核心代对于目标工作流,通用Altera平台针对Target平台和Altera Quartus II对于合成工具。还可以选择族、设备、包和速度,如下图所示。

3.在任务1.2中,将所有端口的“目标平台接口”设置为“外部端口”。

4.三态HDL逻辑出现在Verilog文件hdlcoder_I2C_tristate_arrowssm2603.vhd中。将其复制到当前的工作目录中。

copyfile(完整文件(matlabroot、“工具箱”、“hdlcoder”、“HDLCodermos”、“hdl_I2C_tristate_Arrowsm263.vhd”)、“hdl_I2C_tristate_Arrowsm263.vhd”);

5.在任务3.2中,在附加源文件中添加三态缓冲区Verilog文件。然后右键单击“生成RTL代码和IP内核”,然后单击“运行到选定的任务”。

将生成用于配置SSM2603的I2C IP核。下图显示IP核生成报告。

生成的IP内核可用于用户参考设计。用于创建参考设计,请参阅创作英特尔板上音频系统的参考设计