微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > FPGA和CPLD > 如何用单个赛灵思FPGA 数字化数百个信号

如何用单个赛灵思FPGA 数字化数百个信号

时间:05-25 来源:互联网 点击:
作者:William D. Richard
副教授
华盛顿大学圣路易斯分校
wdr@wustl.edu

Mitchell Manar
学生
华盛顿大学圣路易斯分校

Jeremy Tang
学生
华盛顿大学圣路易斯分校

每个输入通道仅使用一个电阻和一个电容,就可以数字化高频模拟输入信号。

在新型赛灵思 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 源代码中记录的情况。


图 1 - 使用一个外部电阻和一个外部电容的单通道增量调制器 ADC。


图 2 - 该示波图所示的是 F=240MHz、R=2K 和 C=47pF 时 Agilent 33250A 函数发生器产生的 3.75 MHz 输入信号(黄色,通道 1)和反馈信号(蓝色,通道 2)。
由 Tektronix DPO 3054 示波器计算完成的输入信号傅里叶转换显示为红色(通道 M)。

定制的原型电路板还支持使用 FTDI FT2232H USB 2.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 文件内容

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top