代码下载
ADC AD7476A Pmod控制器(顶层文件): pmod_adc_ad7476a.vhd (6.0 KB)
双MISO接口SPI主控制器(必须包含在项目中): spi_master_dual_miso.vhd (9.5 KB)
特点
- 用于Digilent PmodAD1模块(基于ADI AD7476A模数转换器的Pmod)的简化接口VHDL源代码
- 通过两个并行接口持续输出双通道ADC的最新数据
- 处理串行通信及ADC Pmod模块的所有数据采集
- 可配置系统时钟频率
介绍
详细说明连接Digilent ADC AD7476A Pmod的VHDL组件,如图1所示。图2展示该ADC Pmod控制器集成至系统的典型应用实例。如图所示,ADC Pmod控制器连接Pmod端口并执行事务,从Pmod的两个ADC通道获取数据。数据随后通过两个简易并行接口输出,可连接用户逻辑或FPGA输出端口。
图 1. Digilent ADC AD7476A Pmod模块
图 2. 实现示例
背景
该模块采用两颗ADI AD7476A 12位模数转换器,支持双通道同步采样,最高速率达1MSPS。Pmod上的ADC芯片共享片选信号和串行时钟信号。正确应用这些信号可启动转换并控制Pmod的串行数据流。
操作原理
控制器采用技术论坛SPI主控组件的改良版本,持续启动采样并获取ADC数据。数据采集完成后,通过adc_0_data 和adc_1_data 端口输出。控制器等待50纳秒后重启流程(ADC两次转换间需50ns间隔)。由此实现无需用户干预的持续ADC数据更新。
SPI主控配置为CPOL=1且CPHA=1,以满足AD7476A转换器要求。该SPI主控组件经修改增加第二MISO通道,作为第一通道的镜像通道。
公式1定义了输出数据的更新频率。该频率受用户提供的clk 输入端口系统时钟频率及spi_clk_div GENERIC赋值影响。(配置时钟章节详述了如何正确设置spi_clk_div )。所有频率单位均为MHz。
ADC Pmod控制器设置为在系统时钟允许范围内提供最快更新速率,同时将串行时钟速率保持在AD7476A数据手册规定的20MHz上限以内。当系统时钟为40MHz的整数倍时,可获得最快更新速率。
时钟配置
通过为ENTITY中定义的GENERIC spi_clk_div赋值来配置该ADC Pmod控制器的时钟。公式2定义了该值的计算方法。

其中fclk 表示所提供系统时钟的频率(单位MHz)。系统时钟通过clk 输入端口提供。
例如代码中指定的默认值为spi_clk_div = 3。这是因为撰写本文时最常见的Digilent开发套件Basys3的系统时钟为100 MHz。100/40 = 2.5,向上取整得3。
公式3定义了由此产生的串行时钟频率fsclk 。
该计算确保串行时钟接近ADC规定的最大通信频率20MHz,从而在给定系统时钟下提供最大的ADC数据更新频率。当输入时钟频率(MHz)为40的整数倍时,此参数达到最优。
端口描述
表1描述了ADC Pmod控制器的端口。
表 1. 端口描述
连接方式
该Pmod配有6针连接器J1。表2提供了该连接器的引脚定义。需将ADC Pmod控制器的端口分配至所列的连接器对应FPGA引脚。
表 2. ADC Pmod引脚定义及与ADC Pmod控制器的连接
复位
reset_n 输入端口必须保持逻辑高电平才能使ADC Pmod控制器组件工作。该端口的低电平将异步复位组件。复位期间,该组件将中止与ADC Pmod的当前事务,并清除adc_0_data 和adc_1_data 输出。复位释放后,ADC Pmod控制器将恢复运行。
结论
本ADC Pmod控制器是可编程逻辑组件,用于连接Digilent的ADC AD7476A Pmod。其负责处理与该ADC Pmod的所有通信,通过两个并行输出端口持续提供双通道ADC的更新数据流。





