技术文章和新闻稿

将Sigma-Delta ADC从行为模型设计为Verilog和VHDL

由Ali Behboodian,Mathworks和Jeff Miller,MathWorks


使用不同的工具和语言来开发模拟混合信号IC,使设计过程容易出错,耗时和复杂。基于模型的设计通过使工程师能够完成所有设计阶段来解决这些问题马铃薯金宝app。通过使用Simulin金宝appk模型作为设计的基石,团队可以测试并验证设计在发展的各个阶段,减少在执行阶段发现昂贵的结构变化或错误的机会。

在这篇文章中,我们使用基于模型的设计与MATLAB和Simulink来设计的sigma-delta模拟数字转换器(AD金宝appC)。与ADC的高层次行为模型开始,我们精心设计,最后生成综合的VHDL代码。

该设计的文件都可以下载。我们鼓励你打开Simulink模型,探索设计的不同方面。金宝app

Sigma-Delta ADC转换器

Sigma-Delta ADC转换器几乎完全用于需要高分辨率输出的应用,例如高保真音频或工业测量。为了实现所需的高分辨率,必须以高于奈奎斯特速率的速率对模拟信号进行采样。通常,电路设计的复杂性与采样率成比例。因此,Sigma-Delta ADC传统上用于采样低频信号 - 即,奈奎斯特率相对较低的信号,例如移动电话中的语音。

的Σ-ΔADC由模拟和数字部分(图1)的。模拟部分,其包括一个Σ-Δ调制器,以高速率采样输入,并产生一个二进制输出,其平均值随时间跟踪的模拟输入。数字部分,其包括抽取滤波,通过运行所述Σ-Δ调制器的输出找到的平均值低通抽选FIR滤波器。在本文的后面,我们将利用滤波器​​的输入的二元特性实现了非常高效过滤器架构。

图1. Sigma-Delta ADC的高级模型。点击图片查看大图。

开发行为模型

我们首先开发一个高层次的行为Simulink模型。金宝app该模型是在浮点。我们用它作为系统的图形表示和一个可执行的规范。

在MATLAB中设计的数字部分中的过滤器基于模拟设备AD1877 16位Sigma-Delta ADC的规格。它是一阶段FIR滤波器,将信号点缀为64倍,并且具有大约3,000个抽头。我们使用以下Matlab脚本来生成数字滤波器

decimation_factor = 64;passband_ripple = .006;%D bstopband_attenuation = 90;%D bFS = 48E3;通带= 21.6e3;%D b阻带= 26.4e3;%D bInput_Sampling_Rate = Decimation_Factor * FS;F = fdesign.decimator(Decimation_Factor,'低通'通带,阻带,... Passband_Ripple,Stopband_Attenuation,Input_Sampling_Rate);H =设计(F);

阐述设计

在此阶段,行为模型尚不适用于定点FPGA或ASIC实现。原因是过滤器非常大,计算得昂贵。正如我们详细说明设计的那样,我们将减少过滤器尺寸以准备实现。然后,我们将使用输入的二进制性质到过滤器,使设计更有效。最后,我们会将数字转换为固定点。高级行为模型将作为参考。

优化滤波器设计

与约3000水龙头单级过滤器,我们原来的数字滤波器需要算术运算符的显著数量。使用MATLAB,我们把它分成三个阶段的抽取滤波器(图2)。每一级具有40,12,和194的滤波器抽头,分别与每个阶段通过的8,2倍分别抽取该信号,和4,总共64。这种方法的一个因素降低系数的总数的约10%,显着降低了运算的数量要求。

图2.三级滤波器的设计。

我们将原始单级滤波器的频率响应与新的三级滤波器进行比较(图3)。我们看到,三级滤波器的幅度响应与原始单级滤波器的幅度响应非常紧密地匹配。

图3.单级和三阶段过滤器的比较。红线表示规范掩码。点击图片查看大图。

在Simuli金宝appnk环境中,我们测试我们的详细设计并验证它是否与行为模型相比(图4)。使用多速率,多级滤波器设计显着降低了计算复杂性,但为过滤器引入了更大的组延迟。在图4的底部所示的滤波器输出迹线中,该延长延迟是明显的,其中第二迹线的末端由于更大的滤波器延迟而明显地在第一迹线的末端滞后。

图4.验证三级滤波器的设计在Simulink。金宝app点击图片查看大图。

详细说明过滤器的第一阶段

如上所述,第一阶段是40分送滤波器。通常,为了实现这种过滤器,我们需要40个乘法和每个输出样本的39个添加。但是,由于模拟部分向滤波器的第一阶段提供二进制信号,我们可以使用查找表来实现第一阶段。此方法不需要乘法,只有4个添加。另外两个阶段将以常规方式实施。

要了解如何用查找表8滤波器替换40分布的FIR抽取,让我们先查看8个过滤器8个过滤器的8个抽头FIR抽取的更简单情况。在这种情况下,对于每8个二进制输入样本,滤波器会产生一个输出样本。输出样本取决于8个输入样本,可以采用256个不同的值(因为每个样本只有两个级别)。查找表将使用8个二进制输入样本作为带有256个预先计算的滤波器输出的查找表的索引。这导致非常有效的过滤器设计,没有乘数。

使用这种方法,我们将40点抽滤器分解为5个段的8个分接。我们为每个段生成查找表,并将5个查找表输出组合以产生整体结果。你可以下载MATLAB代码我们使用要生成查找表条目。

图5显示了最终设计。设计的输入是1或-1的二进制信号。请注意,设计使用下采样块和嵌入式MATLAB功能块。下采样块的输出的速率比输入慢8倍。图5中的不同颜色表示具有不同速率的信号。

图5.过滤器第一级的高效设计。点击图片查看大图。

随着嵌入式MATLAB功能块,我们可以把MATLAB代码到Simulink中,然后模拟设计。金宝app嵌入式MATLAB可以简化模型是最好的,并使用基于文本的造型最易为代表的算法。在这种情况下,MATLAB代码是相当简单的(图6)。

图6.图5中嵌入式MATLAB功能块的内容。单击图像以查看放大视图。

在这一点上,我们正确地验证设计的功能。这是最好的后续执行上的硬件过滤器的过程中发现任何差异,现在不是。在图7所金宝app示的仿真模型的原始滤波器的输出与我们的详尽的过滤器进行比较。我们看到,有最初的两种设计的输出的差异,但这种差异进入时间到零以上。的原因是不匹配的原始设计的初始条件,并使用LUT的创建的那些的详尽设计之间的差异。我们可以消除设定适当的初始条件,并把额外的延迟块的不匹配。

图7.验证图5中的详细设计。单击图像以查看放大视图。

将模型转换为固定点

到目前为止,我们所有的模型都使用浮点算术。为了有效的FPGA或ASIC实现,我们必须将模型转换为“修复点”(图8)。我们使用MATLAB和SIMULIN金宝appK将过滤器转换为固定点。在Simuli金宝appnk环境中,每个算术块可以处理浮点和定点计算,简化转换过程。我们使用Sim金宝appulink验证固定点设计的输出与参考设计的输出匹配。

图8.固定点模型。点击图片查看大图。

HDL.代码生成

MathWorks工具使我们能够产生可合成的VHDL或Verilog代码为固定点,多速率系统,其包括过滤器,所述嵌入式MATLAB功能块,并在ADC设计的数字部分中使用其它块。我们用金宝appSimulink HDL编码器从图8所示的过滤器的第一阶段生成VHDL代码过滤器设计HDL编码器从第二个和第三阶段生成VHDL代码。图9示出了从过滤器的第一阶段生成的VHDL代码的一部分。

图9.使用Simulink HDL编码器生成的VHDL代码的样本。金宝app点击图片查看大图。

金宝appSimulink HDL编码器允许我们为特定块的不同硬件实现生成VHDL或Verilog代码,例如Sum,Product和MinMax块。这些不同的实施方式通常是速度和芯片区域之间的折衷。在我们的示例中,我们使用可选的控制文件来探索图8所示的SUM块的替代实现,使用首先级联和稍后的树实现。

除了VHDL或Verilog编码,Simulink的HDL编码器可以产生一个周期精金宝app确模型对应于所述特定的实施方式的选择用于求和块制成。图10示出级联实现生成的模型。图11显示了一个树实现生成的模型。我们可以模拟生成的模型并验证其与参考模型输出。

图10.总和块的级联实现。点击图片查看大图。
图11. SUM块的树实现。点击图片查看大图。

合成结果

遵循VHDL代码生成,我们必须为硬件实现准备代码。为此,我们使用Xilinx ISE软件工具合成了我们为滤波器的第一阶段生成的VHDL代码,并为Virtex 4 VSX25-10 FPGA执行了vHDL代码。定时分析表明,我们可以以210 MHz的时钟速率运行设计。

概括

在本文中,我们使用基于模型的设计和MathWorks工具来创建Sigma-Delta ADC的高级可执行行为模型。我们详细阐述了行为模型,为FPGA的硬件实现准备它。我们在整个过程中不断验证了我们模型的输出。这种方法使我们能够在设计中揭示在设计中可能导致性能问题的差异。我们使用Simu金宝applink HDL编码器从模型生成HDL代码,并使用嵌入式MATLAB功能块将MATLAB代码纳入SIMULINK模型。使用MATLAB和SIMULINK创建的可执行模型是这种设计方法的基石。金宝app

2007年出版

查看相关功能的文章

查看相关行业的文章