FPGA配置高速ADC篇(2)_4线SPI配置时序分析-CSDN博客
FPGA配置高速ADC篇(3)_3线SPI配置时序分析-CSDN博客
FPGA配置高速ADC篇(4)_基于verilog的4线SPI实现-CSDN博客
FPGA配置高速ADC篇(5)_基于verilog的3线SPI实现-CSDN博客
FPGA配置高速ADC篇(6)_AD9639四线SPI配置实战-CSDN博客
FPGA配置高速ADC篇(7)_AD9639三线SPI配置实战-CSDN博客
FPGA配置高速ADC篇(8)_AD9249三线SPI配置实战-CSDN博客
FPGA配置高速ADC篇(9)_ADS52j90四线SPI配置实战-CSDN博客
FPGA配置高速ADC篇(10)_ADS528X_SPI配置实战-CSDN博客
*******获取工程代码,加V博主:FPGA_GO*******
前几篇博主小飞分别以ADI公司和TI公司的高速ADC为实例(AD9429、AD9639、ADS52J90),向大家演示FPGA是如何通过SPI接口向该ADC读写寄存器配置数据的,所述的方法都是通用型的SPI读写操作,适用于任何FPGA与高速ADC的SPI配置。
本篇(最后一篇)博主小飞再介绍一种更简单的SPI写操作方式。大家可能已经发现,ADI和TI的某些高速ADC只有SPI写的功能,也就是说只能往ADC里配置寄存器参数,而不能把参数再读出来。这样的话,FPGA设计SPI代码时就没必要考虑读寄存器参数这个功能了,而如果只是往ADC里写配置数据,那么就有更为简单的实现方式,理解起来也非常容易~
比如TI公司的ADS5281和ADS5282这两款芯片,就是8通道、50MSPS/65MSPS、12bit采样精度的高速串行ADC,使用的非常广泛,而其只有写寄存器的功能,而没有读寄存器的功能。
如下图所示为ADS5282的功能框图,且配置接口包含4个信号:低电平有效的reset、SPI的Cs、SPI的SCLK以及SPI的SDATA,其中SDATA只作为配置数据输入接口,相当于sdin。
本篇实例操作方式采用的是virtex5系列的FPGA,操作软件为ISE14.7。如下图所示为博主小飞设计的基于该系列ADC的8通道数据采集板卡:
TI的该款ADC的SPI写配置时序图如下所示:
简单来说,就是在在CS_n低电平期间,SCLK上升沿时,SDATA写入8bit的地址(A7-A0)和16bit配置数据(D15-D0),共24个SCLK周期完成写寄存器操作,另外该芯片无读寄存器功能。
本次的SPI写配置逻辑的顶层逻辑接口如下图所示:
本例程以3个寄存器的写操作为例,介绍一种简单的SPI写配置方式,如下图所示为定义的3个24bit寄存器参数,高8位是地址,低16位是数据:
如下图所示为写操作的逻辑,状态0初始化,状态1不断发送24bit寄存器参数,状态2为配置完一个寄存器参数,等待5个时钟周期,再进行下一个寄存器参数的配置,这里的操作只显示了第一个寄存器配置,其余两个与这里是完全一样的。这种写操作方式和前面多篇介绍的写操作也是类似,大家可以相互对比一下~
关键之处来了!前几篇例程里都需要在系统时钟域下的状态机里描述SCLK的输出状态,以保证SCLK和SDATA的时序关系。这里咱们就没这个必要了,直接对系统时钟取反输出,即可作为SCLK。
如下图所示为写3个寄存器的时序图,可以看到SCLK为5M系统时钟的取反,和CS_n以及SDATA的SPI写时序关系正好合适!
咱们再看看逻辑实现的写过程的具体时序图。
下图所示为写C_AcfgReg1=24'h14_00_ff的实际时序:
下图所示为写C_AcfgReg2= 24'h25_00_00的实际时序:
下图所示为写C_AcfgReg3= 24'h2A_00_00的实际时序:
本篇是高速ADC的 SPI 配置最后一篇,博主小飞主要是想告诉大家,咱们很多时候不需要读ADC寄存器的数据,只需配置好ADC让其正常工作就可以了。这种情况下,咱们就用这篇介绍的简单方式就可以,非常便于理解和实际操作~