本文是基于LATTICE的FPGA实现的参考设计,事实上该设计可以用在任何支持 LVDS输入的FPGA器件上。
1. 简介
简单的西格玛-德尔塔模数转换器(Simple Sigma-Delta Analog-to-Digital Converter,以下简称SSD ADC)参考设计的目标是在 CPLD或FPGA中实现模数转换器。该参考设计支持使用外部模拟比较器,或在具有差分LVDS输入支持的CPLD/FPGA中也可以选择地使用片上LVDS缓冲器。实施这种参考设计可以消除对专用和昂贵的模数电路(ADC)、电源监视器和/或传感器的需要。
该设计可以用很少的逻辑资源来实现,并且足够灵活,可以满足各种应用程序。简单的Sigma-Delta ADC是监测系统中各种传感器和电源轨道的理想选择。
1.1 特性
简单的模数转换器参考设计特点:
- 参数化的采样精度
- 可调的采样频率
2.概览
在这个参考设计中,模拟输入信号被过采样并转换为数字值。简单的Sigma-Delta ADC(SSD ADC)是通过内部和外部组件的组合来实现的:模拟比较器、低通RC网络、采样元件、累加器和简单的数字低通滤波器(LPF)。在支持LVDS I/O的CPLDs或FPGAs中,只有RC网络需要在外部实现,从而减少了部件数量和成本。用户可以输入参数值来定义ADC的比特精度和采样率。
2.1 框图
以下逻辑都在FPGA/PLD中实现:
- 比较器(支持LVDS输入的器件,里面的的LVDS对上含有比较器)
- 采样单元
- 具有抽取功能的累加器
- 具有抽取功能的低通滤波器
3. 参数描述
ADC_WIDTH —— 定义ADC的输出宽度。
ACCUM_BITS —— 此参数定义了第一级累积和抽取过滤器的深度。(2^ACCUM_BITS)是累加器的深度和抽取因子。ACCUM_BITS必须大于或等于ADC_WIDTH。
LPF_DEPTH_BITS —— 此参数定义了第二级低通滤波器的深度。(2 ^ LPF_DEPTH_BITS)是低通滤波器的深度和抽取因子
INPUT_TOPOLOGY —— 参数定义外部模拟输入的拓扑、直连或RC网络。
4. 信号模述
clk —— SSD ADC的时钟(过采样时钟)
rstn —— SSD ADC的复位,低有效
analog_cmp —— 从模拟比较器的输出端接收到的数据。
analog_out —— 反馈到RC网络的PWM信号
digital_out —— 由SSD ADC转换而成的模拟信号的数字表示。位宽由ADC_WIDTH参数定义[ADC_WIDTH-1:0]。
sample_rdy —— 高有效标志,表示SSD ADC的数字值有效。输出的高脉冲为1 clk周期宽。
5. 模拟量到数字量的转换
一般来说,西格玛-德尔塔(或同等的,德尔塔-西格玛)模数转换器架是昂贵的,高精度的模拟元件和简单的数字电路,用于简单的模拟转换器和复杂的,是相对便宜的数字技术。
同样地,在这个参考设计中,使用一个廉价的RC网络和一个简单的1位ADC(比较器)来提供高速数字电路,以合理的精度产生更高分辨率的数字输出。
5.1 RC网络的设计
RC网络的输出是数字脉冲序列的平均值,用于精确跟踪比较器端子的模拟输入电压。图5.1和图5.2说明了用于此参考设计的两个可能的RC网络。
图5.1是最简单的网络,在反馈路径中有一个单一的电阻器和电容。它们包括一个用于PWM反馈信号模拟输出的低通滤波器。它具有零件数量低的优点。其主要缺点是模拟信号被限制在比较器的输入电压范围内。
PWM反馈信号在PLD或FPGA引脚的0V到VCCIO之间波动。因此,在比较器的负输入端的滤波后的反馈信号理论上可以匹配0V和VCCIO之间的任何输入电压。然而,当使用一个内部的LVDS缓冲器作为比较器时,工作输入电压范围可明显小于VCCIO,根据器件的不同(例如,对于MachXO™LVDS,它大约是VCCIO – 0.5 V),这给模拟输入电压范围设定了一个实际的上限。
时间常数,τ = RC,应该做得足够大,以充分过滤PWM流,但不能太大,以抑制响应时间。考虑到过采样的时钟频率,即fCLK,那么建议使用τ×fCLK = 200到1000。可选电阻器可与模拟输入一致,以保护比较器的高阻抗输入。
图5.2是一个更加复杂和灵活的网络。通过适度地增加分压电路,它具有灵活的模拟输入电压范围的优点,同时将输入电压固定到比较器的负端子上。
给定模拟输入电压摆动ΔVIN和PWM反馈电压摆动VCCIO,可以借助以下公式计算分量值:
Δ𝑉𝐼𝑁/𝑉𝐶𝐶𝐼𝑂 = 𝑅1/𝑅2 (1)
式中:
Δ𝑉𝐼𝑁 = (𝑉𝐼𝑁𝑀𝐴𝑋 − 𝑉𝐼𝑁𝑀𝐼𝑁) (2)
并且
𝑉𝑅𝐸𝐹 = 𝑉𝐼𝑁𝑀𝐴𝑋 𝑥 𝑅2/(𝑅1 +𝑅2) (3)
例如,如果VIN从0V波动到12V,VCCIO=为3.3 V,则R1 / R2 =为3.64,VREF=为2.59 V。
为r1和r2选择的实际值取决于两个因素。首先,由模拟输入所看到的输入阻抗,其次,低通滤波器的时间常数。输入阻抗为R1 + R2 //(ωC)-1,通常要求其较大。时间常数方程为τ = RPC,其中RP = R1 // R2。与前面的拓扑结构一样,建议使用τ×fCLK≈200到1000。
需要注意的是,上述方程中使用的ΔVIN范围将由ADC数字输出的零到全尺度表示。超过该范围的模拟输入值将不会被PWM反馈完全补偿,并导致比较器负端从VREF偏移。
为了设置VREF,可以使用各种方法,包括简单的电阻分压器、齐纳二极管或精密带隙电压参考装置。所使用的方法可能是测量误差的一个来源,也是影响ADC总体精度的一个贡献因素,如下所述。也可以从期望的或实际的VREF开始,以确定给定电路的模拟输入电压范围。
5.2 SSD ADC 比较器
简单的西格玛德尔塔参考设计利用了一个比较器作为一个1位的模数转换器。该比较器可以是离散的外部器件,例如国家半导体LMV311或同等器件。另外,一些CPLD和FPGA设备支持具有片内LVDS输入缓冲器。这些缓冲器实际上是非常快的模拟比较器。虽然针对LVDS规范进行了优化,但这些缓冲区作为1位ADC非常有用,特别是与上面所示的“网络”输入拓扑一起使用。
在参考设计中,通过约束IO类型为LVDS25来使用LVDS缓冲器。如果使用外部比较器来代替,则使用合适的数字IO类型来代替,如IO_TYPE=LVCMOS33。HDL源文件将保持不变。
5.3 SSD ADC采样单元
ADC的关键是过采样的概念。在参考设计中使用单个触发器来捕获比较器的输出,以过采样时钟速率fCLK驱动。信号CLK_IN在参考设计中充当这个时钟。采样元件的输出用模拟输入的高频脉宽调制(PWM)表示。
5.4 SSD ADC数字滤波器设计
简单的Sigma-Delta ADC参考设计采用了两阶数字滤波器设计,如图2.1所示。过滤器提供了PWM流的整流和一定的抗锯齿。
第一阶段滤波器(积分器或累加器)将PWM流从1位高频数据流转换为多位中频数据流。累加器的位深度必须至少与所需的数字输出位宽度一样大。
该累加器可以被建模为一个所有系数都等于1的FIR滤波器。累加器的输出数据宽度为ACCUM_BITS,抽取率为2ACCUM_BITS。因此,该蓄能器的输出频率为:
𝐹𝐴𝐶𝐶𝑈𝑀 = 𝑓𝐶𝐿𝐾 /2 ^ 𝐴𝐶𝐶𝑈𝑀_𝐵𝐼𝑇𝑆 (4)
通过定制累加器计数器为2以外的值,可以实现更大范围的fACCUM。第二状态滤波器对累加器数据执行算术平均函数,对ADC的输出频率提供进一步的抽取以及抗混叠函数。同样,平均函数可以被建模为一个所有系数都等于1的FIR滤波器,也被称为“盒”型FIR滤波器。累加器的输出数据宽度为ADC_WIDTH,抽取率为2 LPF_DEPTH_BITS。因此,平均电路的输出频率为:
𝐹𝐴𝐷𝐶 = 𝐹𝐴𝐶𝐶𝑈𝑀 /2 ^ 𝐿𝑃𝐹_𝐷𝐸𝑃𝑇𝐻_𝐵𝐼𝑇𝑆 = 𝑓𝐶𝐿𝐾 /2 ^ 𝐴𝐶𝐶𝑈𝑀_𝐵𝐼𝑇𝑆+𝐿𝑃𝐹_𝐷𝐸𝑃𝑇𝐻_𝐵𝐼𝑇𝑆 (5)
在参考设计中,fCLK = 62.5 MHz,ACCUM_BITS = 10和LPF_DEPTH_BITS = 3。因此,输出样本频率fADC =为7.629 KHz。虽然盒式滤波器提供了实现的简单性,但它是一个相对较差的抗混叠滤波器,只提供了-13 dB的停止带衰减。虽然SSD ADC适用于低频传感器输入和电压轨道监测,但它目前也不适用于需要忠实重建数字化输入波形的应用程序,如音频。在更大的晶格CPLD和FPGA设备中,可以实现更复杂的数字滤波器实现,但这些都超出了本参考设计的范围。
5.5. SSD ADC分辨率
最大理论分辨率与转换器的比特数有关:
其中 delta VIN的定义如上述RC网络设计部分。因此,一个8位转换器理论上可以解析3.3V到± 6.44mv。实际分辨率受到测量电路中的不确定度误差和噪声的影响,如下所述。与其他类似复杂度的ADC转换器相比,
Sigma-Delta型转换器的分辨率非常好。表5.1显示了一些例子,在转换正弦波输入时的信噪比和ENOB结果。
5.6. SSD ADC的绝对精度
许多因素有助于ADC的绝对准确性。任何模拟测量的精度都与参考文献的精度直接相关,在本例中是VREF和VCCIO。提供PWM输出缓冲器的VCCIO电压源的稳定性和准确性是SSD ADC绝对测量能力的最大单一限制因素。必须观察到电压源的适当的滤波和解耦。在VCCIO上存在的任何噪声都会直接影响测量电路。
典型的数字器件,如CPLD和FPGA,规定电源电压容差在5%以内。这相当于1/20,或4.3位。设计者可以将额外的成本和复杂性提高到1%,或1/100,或6.6位。从这些最大分辨率中减去VREF的不确定性、输入电阻分频器分量公差、较差的电源滤波以及由于其他I/O的切换而产生的VCCIO噪声。此外,值可能会随时间和温度而漂移。
必须考虑这些因素,以确保此应用或任何ADC应用程序的预期绝对测量性能。
6. 时序图
下面的时序图显示了简单的西格玛-增量ADC跟踪一个模拟输入。(该模拟包括作为参考设计测试台。)
积分器信号是一个模拟由SSD ADC反馈PWM模拟_out驱动的RC滤波器网络的测试台构造。测试台比较器的输出为analog_cmp,是对SSD ADC的输入。在功能模拟中,一个内部的accum信号显示了超过1024个样本的积累和抽取。SSD ADC的输出是数字输出的。它演示了在前八个accum值上的平均函数。
7. 实现及逻辑资源使用量
注意:
1.这种实现的参数设置包括: ADC_WIDTH= 8、ACCUM_BITS = 10和LPF_DEPTH_BITS = 3、“网络”拓扑和内部LVDS缓冲区。
2.性能和利用特性的生成使用LCMXO2-1200HC-6MG132CES,使用diamond ®3.3软件,LSE和SynplifyPro®。当在不同的设备中使用此设计时,密度、速度或等级,性能和利用率可能会有所不同。
3.性能和利用特性的生成使用LCMXO2280C-5FT256C,与diamond 3.3软件与LSE和Synplify Pro。当在不同的设备中使用此设计时,密度、速度或等级,性能和利用率可能会有所不同。
4.性能和利用特性是生成使用LFXP2-5E-5FT256C,与diamond 3.3软件与Synplify Pro。当在不同的设备中使用此设计时,密度、速度或等级,性能和利用率可能会有所不同。
5.性能和利用率特性是使用ice40UP5K-SG48I生成的,使用Radiant 1.0 SP1软件与LSE和Synplify Pro。当在不同的设备、密度或速度、性能和利用率中使用此设计时
源码及工程如下:
相关阅读:
FPGA数字IO如何实现DAC功能
看完这两篇是不是觉得FPGA确实挺好玩的^_^