每个输入通道仅使用一个电阻和一个电容,就可以数字化高频模拟输入信号。
在新型赛灵思FPGA上使用低电压差分信号(LVDS),只需一个电阻和一个电容就能够数字化输入信号。由于目前这一代赛灵思器件上提供有数百个 LVDS 输入,理论上使用单个 FPGA 就能够数字化数百个模拟信号。
我们团队近期探索了可能的设计领域的一隅,对中心频率为 3.75MHz 和精度为 5 位的有限带宽输入信号进行了数字化,同时还针对 128 元线性超声阵列换能器的输出信号研究了多种数字化方案。首先让我们详细介绍一下演示项目。
2009 年赛灵思推出了 LogiCORE™ 软 IP 核。结合外置比较器、一个电阻和一个电容,就可实现一种能够数字化频率高达 1.205kHz[1] 输入信号的模数转换器(ADC)。
用 FPGA 的 LVDS 输入取代外置比较器,同时结合使用增量调制器 ADC 架构,仅使用一个电阻和一个电容就能数字化频率高得多的模拟输入信号。
ADC 拓扑和实验平台
使用赛灵思 FPGA 上的 LVDS 输入实现的单通道增量调制器 ADC[2]的方框图见图 1。这里模拟输入驱动 LVDS_33 缓冲器非反相输入,输入信号范围基本为 0-3.3V。以比模拟输入信号频率高得多的时钟频率对 LVDS_33 缓冲器输出进行采样并通过一个 LVCMOS33 输出缓冲器和一个外置一阶 RC滤波器反馈给 LVDS_33 缓冲器的反相输入。采用这一电路,只要选择合适的时钟频率 (F)、电阻 (R) 和电容 (C),反馈信号就会跟随输入模拟信号。
简单而且所用元件数少,让这个方法颇具吸引力。而且由于 LVDS_33 输入缓冲器有相对较高的输入阻抗,在许多应用中传感器输出可以直接连接到 FPGA 输入,无需前置放大器或缓冲器。
作为实例,图 2 显示的是在 F=240MHz、R=2K 和 C=47pF 时的输入信号(黄色、通道 1)和反馈信号(蓝色、通道2)。所示的输入信号是用 Agilent 33250A 函数发生器使用其 200MHz、12 位任意输出函数功能生成的。输入信号的傅里叶转换由小组使用的Tektronix DPO 3054示波器计算完成,显示为红色(通道 M)。在这些频率上,示波器探头的输入电容(以及接地问题)不会降低示波图所显示的反馈信号的质量,但图 2 的确体现了该电路的运行情况。
通过对 1 Vpp 3.75MHz 正弦波运用布莱克曼–纳托尔 (Blackman-Nuttall) 窗口,我们定义了图 2 所示的有限带宽输入信号。虽然理论上窗口化信号的本底噪声基本比中心频率的幅度小 100dB,Agilent 33250A 函数发生器的采样频率和 12 位精度让演示信号质量远逊于理论水平。由于换能器的机械属性,众多超声换能器产生的中心频率接近 3.75MHz 的输出信号自然是有限带宽信号,因此对采用这种方法来说是理想的信号源。
我们使用 Digilent Cmod S6 开发模块[3]配合安装在小型PCB上的赛灵思 Spartan®-6 XC6SLX4 FPGA,并使用 8 个 RC 网络和输入连接器,让圆形系统来同时数字化多达 8 路信号,即得到图 2 所示的图。每个通道并联端接一个 50Ω 的接地电阻,以正确端接信号发生器的同轴电缆。需要注意的是为实现这样的性能,我们小组将 LVCMOS33 缓冲器的驱动强度设置为 24mA,压摆率设置为 FAST,如图 5 中的实例VHDL源代码中记录的情况。
函数发生器产生的 3.75 MHz 输入信号(黄色,通道 1)和反馈信号(蓝色,通道 2)。
由 Tektronix DPO 3054 示波器计算完成的输入信号傅里叶转换显示为红色(通道 M)。
定制的原型电路板还支持使用 FTDI FT2232HUSB2.0 微型模块[4],用于把数据包化的串行比特流传输到主机 PC 上供分析。图 3 所示的是当馈给图 2 的模拟信号时,原型电路板产生的比特流的傅里叶转换幅度。与 240MHz 采样频率的分谐波有关的峰值清晰可见,另外还有与输入信号相关的 3.75MHz 频率下的峰值。
大量抽头
通过给比特流施加带通有限脉冲响应 (FIR) 滤波器,就能够产生模拟输入信号的 N 位二进制表达:ADC 输出。但是由于数字比特流的频率远远高于模拟输入信号,用户需要使用带有大量抽头的 FIR 滤波器。不过由于被滤波的数据只有 0 和 1 两个数值,所以无需使用乘法器(只需要加法器将 FIR 滤波器系数相加即可)。
图 4 所示的 ADC 输出是在主机 PC 上使用我们用免费在线 FIR 滤波器设计工具 TFilter[5]设计的中心频率为3.75MHz 的 801 抽头带通滤波器产生的。该滤波器在 2.5MHz - 5MHz 通带外的衰减率为 36dB 甚至更高,3MHz - 4.5MHz 之间的纹波为 0.58dB。
图 4 所示的 ADC 输出信号的精度大约为 5 位。这是最终的过采样率的函数,用户可以使用针对较低输入频率优化的设计来获得更高精度。
图 4 所示的 ADC 输出信号在 240MHz 上也被严重地过采样,可以大幅度缩小 ADC 输出带宽。在带通滤波器和抽取模块的硬件实现中,在通过抽取将有效采样率降至 1/16 到 15MHz 时(比有限带宽输入信号的最高频率快 3 倍),可以只计算第 16 个滤波器输出值,从而降低硬件需求。
图 3 - 本图所示的是与图 2 相关的配置产生的比特流的傅里叶转换。
图 4 - 使用中心频率为 3.75MHz 的 801 抽头带通滤波器产生的 ADC 输出。
图 5 所示的是与 Digilent Cmod S6 开发模块结合使用,产生图 2 所示的反馈信号以及与图 3 的傅里叶转换有关的比特流数据的 VHDL 源代码。一个 LVDS_33 输入缓冲器直接实例化并分别连接到模拟输入和反馈信号 sigin_p 和sigin_n。内部信号 sig由 LVDS_33 缓冲器的输出驱动,并由内置的触发器采样,以产生 sigout。信号 sigout 是经滤波用于产生N位ADC输出的串行比特流。我们使用免费的赛灵思 ISE® Webpack 工具实现该项目[6]。
图 5 所示的是 VHDL 代码和与图 1 的电路相关的 UCF 文件部分。
VHDL 源代码
LIBRARY IEEE ;
USE IEEE.STD_LOGIC_1164.ALL ; LIBRARY UNISIM ;
USE UNISIM.VCOMPONENTS.ALL ;
ENTITY deltasigma IS
PORT (clk :IN STD_LOGIC ;
sigin_p :IN STD_LOGIC ;
sigin_n :IN STD_LOGIC ;
sigout :OUT STD_LOGIC) ; END deltasigma ;
ARCHITECTURE XCellExample OF deltasigma IS SIGNAL sig :STD_LOGIC ;
BEGIN
myibufds:IBUFDS
GENERIC MAP (DIFF_TERM => FALSE,
IBUF_LOW_PWR => FALSE, IOSTANDARD => “DEFAULT”)
PORT MAP (O => sig,
I => sigin_p, IB => sigin_n);
mydeltasigma:PROCESS(clk) BEGIN
IF (clk = ‘1’ AND clk’EVENT) THEN
sigout <= sig ; END IF ;
END PROCESS mydeltasigma ; END XCellExample ;
UCF文件
NET “clk” LOC = J1 |IOSTANDARD = LVCMOS33; NET “sigin_p” LOC = N12|IOSTANDARD = LVDS_33; NET “sigin_n” LOC = P12|IOSTANDARD = LVDS_33;
NET “sigout” LOC = P7 |IOSTANDARD = LVCMOS33| SLEW = FAST|DRIVE = 24;
图 5 - VHDL 源代码和 UCF 文件内容
减少元件数量
本文描述的 ADC 架构已经被近期发表的几篇文章不准确地引用为德尔塔-西格玛 (ΔΣ) 型架构[7]。虽然真正的ΔΣ型 ADC 有优势,这种方法的简便性和元件数少使之对部分应用有吸引力。而且由于 LVDS_33 输入缓冲器有相对较高的输入阻抗,在许多应用中传感器输出能够直接连接到 FPGA 输入,无需使用前置放大器或缓冲器。这在许多系统中都能体现出明显的优势。
本文方法的另一个优势是通过叠加能够“混合”多个串行比特流,使用单个滤波器就能恢复输出信号。例如在基于阵列的超声系统中,串行比特流可以延迟时间来实现聚焦算法,然后以向量方式相加,这样使用一个滤波器就能恢复数字化且聚焦的超声波向量。
使用 FIR 滤波器生成 ADC 输出是一种简单直观的暴力方法,这里主要用于演示目的。在大多数设计中,ADC 输出将使用传统的积分器/低通滤波器解调器拓扑[2]生成。