代码下载
ADC AD7991 Pmod控制器(顶层文件):pmod_adc_ad7991.vhd (12.5 KB)
I2C主控制器(必须同时包含在项目中):i2c_master.vhd (14.1 KB)
特点
- 用于Digilent PmodAD2模块(基于ADI公司AD7991模数转换器的Pmod)的简化接口VHDL源代码
- 持续输出4个转换通道的最新数据至对应并行接口
- 处理I2C通信及ADC Pmod的所有数据采集
- 可配置系统时钟频率
介绍
本文详述了与Digilent ADC AD7991 Pmod接口的VHDL组件,如图1所示。图 2 展示了集成到系统中的这款 ADC Pmod 控制器的典型示例。如图所示,ADC Pmod控制器连接Pmod的I2C端口,通过执行事务从ADC的4个转换通道采集数据。数据持续更新并通过简单并行接口输出,可连接至用户逻辑或FPGA输出端口。
图 1 。 Digilent ADC AD7991 Pmod模块
图 2 。 实现示例
操作原理
ADC Pmod控制器主要由状态机和I2C主控组件构成。
状态机
该设计采用图 3 所示的状态机来实现其操作。启动时,该组件立即进入启动状态。该状态持续100ms以确保Pmod完成上电。在随后的read_data 状态 中,控制器从Pmod的ADC获取最新数据。通过单次I2C事务完成数据传输,并将每个ADC通道的4位头信息和12位数据分别存储于独立缓冲区。在output_result 状态 中,利用头信息将12位数据结果路由至正确的并行输出端口。随后在read_data 和output_result 状态间循环切换,保持ADC数据持续更新。任何时候复位组件都将使其返回初始状态。
图 3 。 状态图
I2C 主控制器
在read_data 状态期间,状态机控制I2C主控组件与Pmod上的ADC进行通信。I2C主控的文档可在此处查阅。
系统时钟频率
在实体中,通用参数sys_clk_freq 必须设置为提供给ADC Pmod控制器clk 端口的系统时钟频率(以Hz为单位)。
I2C 上拉电阻
与大多数Digilent的Pmod板不同,上文图2所示的I2C上拉电阻并未包含在PmodAD2上。若缺少这些电阻,I2C总线将无法正常工作。
用户可按图示在电路中接入2.2kΩ电阻解决此问题。
Digilent其他多款采用I2C的Pmod模块已包含这些电阻,并配有连接器可将额外Pmod接入同一I2C总线。若该ADC Pmod与上述Pmod配合使用,用户可直接利用这些板上已有的上拉电阻,无需额外操作。
I2C 地址
Digilent的PmodAD2参考手册指出,与AD7991通信时应使用"0101000"作为I2C地址。但Analog Devices生产的AD7991存在多个版本,其I2C地址各不相同(参见数据手册第12页表8)。型号AD7991-0使用地址"0101000",而AD7991-1使用地址"0101001"。
遗憾的是,Digilent生产的该Pmod混用了两个版本(可能无意为之),导致部分Pmod无法按描述工作。具体Pmod的版本可通过查看AD7991上的部件标记确定,如图4所示。
图 4 。 AD7991部件标记
"C55"代表AD7991-0型号,无需修改。
"C56"代表AD7991-1型号,需修改pmod_adc_ad7991.vhd文件第119行以适配此差异:
i2c_addr <= "0101001";
端口描述
表 1 描述了 ADC Pmod 控制器的端口。
表 1. 端口描述
连接方式
该Pmod配备8针连接器。表2提供了该连接器的引脚定义。需将ADC Pmod控制器的端口分配至FPGA引脚,这些引脚已按清单路由至该连接器。Pmod板上J1连接器的两排引脚已内部连通,因此只需将单侧连接至FPGA。
表 2. ADC 7991 Pmod引脚定义及与ADC Pmod控制器的连接
该Pmod模块还配备了一个跳线。JP1跳线必须将中间引脚连接至标有V4的引脚。这样可将ADC的第4通道连接至J2接口的输入引脚,从而启用该通道。
复位
为使 ADC Pmod 控制器组件运行,reset_n 输入端口必须为逻辑高电平。该端口的低电平将异步复位组件。复位期间,该组件会中止与Pmod的当前事务。同时清除并行数据输出和i2c_ack_err 输出信号。复位释放后,ADC Pmod控制器将重新启动,继续采集并输出ADC数据。
结论
本ADC AD7991 Pmod控制器是可编程逻辑组件,用于连接Digilent的PmodAD2模块(ADC AD7991 Pmod)。它负责处理与该Pmod的所有通信,采集Pmod ADC四个通道的数据,并通过四个并行输出端口持续提供更新数据流。
相关主题





