技术文章和通讯

从行为模型到Verilog和VHDL的Sigma-Delta模数转换器设计

作者:阿里·贝布迪安(Ali Behboodian),MathWorks和杰夫·米勒(Jeff Miller),MathWorks


使用不同的工具和语言来开发模拟混合信号集成电路,使得设计过程容易出错、耗时且复杂。基于模型的设计通过使工程师能够在MATLAB万博1manbetx.通过使用Simulin万博1manbetxk模型作为设计的基石,团队可以在开发的所有阶段测试和验证设计,减少在实现阶段发现昂贵的结构更改或bug的机会。

在本文中,我们使用基于模型的设计与MATLAB和Simulink设计sigma-delta模数转换器(ADC)。万博1manbetx从ADC的高级行为模型开始,我们详细阐述了设计,最后生成可合成的VHDL代码。

该设计的文件可用于下载.我们鼓励您打开Simulink模型并探索设计的不同方面。万博1manbetx

σ - delta ADC转换器

Sigma-delta ADC转换器几乎只用于需要高分辨率输出的应用,如高保真音频或工业测量。为了达到所需的高分辨率,模拟信号必须以远高于奈奎斯特速率的速率进行采样。一般来说,电路设计的复杂性与o采样率。因此,西格玛-德尔塔模数转换器传统上用于采样低频信号,即具有相对较低奈奎斯特速率的信号,如移动电话中的语音。

σ - δ ADC由模拟部分和数字部分组成(图1)。模拟部分包括一个σ - δ调制器,以高速率对输入进行采样,并产生二进制输出,其平均值随时间的变化跟踪模拟输入。数字部分,包括抽取滤波,通过运行sigma-delta调制器的输出,通过一个低通抽取FIR滤波器,找到平均值。在本文的后面,我们将利用过滤器输入的二进制特性来实现一个非常高效的过滤器体系结构。

图1.sigma-delta ADC的高级模型。点击图像查看放大视图。

开发行为模型

我们首先开发一个高级的行为Simulink模型。万博1manbetx模型是浮点型的。我们使用它作为系统的图形表示和可执行的规范。

数字部分的滤波器,在MATLAB中设计,是基于模拟设备AD1877 16位sigma-delta ADC的规范。它是一个单级FIR滤波器,可以将信号分解为64倍,大约有3000个水龙头。我们使用下面的MATLAB脚本来生成数字滤波器

抽取系数=64;通带波纹=0.006;% dBStopband_Attenuation = 90;% dBFs=48e3;通带=21.6e3;% dB阻带= 26.4 e3;% dBInput_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万博1manbetxnk环境中,我们测试了详细的设计,并验证了它与行为模型的比较(图4)。使用多速率、多级滤波器设计可显著降低计算复杂度,但会为滤波器引入更大的组延迟。图4底部所示的滤波器输出轨迹中,这种更大的延迟是显而易见的,其中第二个轨迹的末端明显滞后于第一个轨迹的末端,因为滤波器的长度更大呃延迟。

图4。在Simulink中验证三级滤波器的设计。万博1manbetx点击图像查看放大视图。

详细说明过滤器的第一级

如上所述,第一级是40抽头FIR滤波器。通常,要实现这样的过滤器,我们需要对每个输出样本进行40次乘法和39次加法。然而,由于模拟部分向滤波器的第一阶段提供二进制信号,我们可以使用查询表实现第一阶段。这种方法不需要乘法,只需要4个加法。其他两个阶段将按常规方式实施。

为了理解我们如何用查询表替换用8滤波器进行40分频的FIR抽取,让我们先看看用8滤波器进行8分频FIR抽取的更简单的例子。在本例中,对于每8个二进制输入样本,过滤器生成一个输出样本。输出样本依赖于8个输入样本,可以取256个不同的值(因为每个样本只有两个级别)。查表将使用8个二进制输入样本作为查表的索引,该查表包含256个预先计算的滤波器输出。这导致了一个非常有效的滤波器设计没有乘数。

使用这种方法,我们将40抽头滤波器分解为5个段,每个段有8个抽头。我们为每个段生成一个查找表,并将5个查找表输出组合起来,以生成总体结果。您可以下载MATLAB代码用来生成查找表项。

图5显示了最终的设计。该设计的输入是一个二进制信号,要么是1,要么是-1。注意,该设计使用了一个下采样块和一个嵌入式MATLAB函数块。下采样块的输出速率比输入慢8倍。图5中不同的颜色表示不同速率的信号。

图5。高效设计的第一级过滤器。点击图像查看放大视图。

利用嵌入式MATLAB函数块,可以将MATLAB代码引入Simulink进行仿真。万博1manbetx嵌入式MATLAB可以简化使用基于文本的建模最容易表示的建模算法。在本例中,MATLAB代码非常简单(图6)。

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

此时,我们验证设计功能是否正确。最好现在就识别任何差异,而不是在后续硬件上实现过滤器时。图7所示万博1manbetx的Simulink模型将原始滤波器的输出与我们精心设计的滤波器的输出进行了比较。我们看到,这两种设计的输出起初存在差异,但随着时间的推移这种差异趋于零。不匹配的原因是原始设计的初始条件与使用lut创建的详细设计的初始条件之间的差异。我们可以通过设置适当的初始条件和放置额外的延迟块来消除这种不匹配。

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

将模型转换为定点

到目前为止,我们所有的模型都使用浮点算法。为了高效的FPGA或ASIC实现,我们必须将我们的模型转换为定点(图8)。我们使用MATLAB和Simulink将滤波器转换为定点。在Simulink环境中,每个算术块都可以处理浮点和定点计算,简化转换过程。我们使用Simulink验证定点设计的输出与参考设计的输出匹配。万博1manbetx

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

高密度脂蛋白代码生成

MathWorks工具使我们能够为定点、多速率系统生成可合成的VHDL或Verilog代码,该系统包括滤波器、嵌入式MATLAB函数块和ADC设计中的数字部分使用的其他块。我们使用万博1manbetxSimulink HDL编码器从图8所示的过滤器的第一阶段生成VHDL代码滤波器设计HDL编码器从第二和第三阶段生成VHDL代码。图9显示了我们从筛选器的第一阶段生成的部分VHDL代码。

图9。使用Simulink HDL Coder生成的VHDL代码示例。万博1manbetx点击图像查看放大视图。

万博1manbetxSimulink HDL编码器允许我们为特定块的不同硬件实现生成VHDL或Verilog代码,如Sum、Product和MinMax块。这些不同的实现通常是速度和芯片面积之间的折衷。在我们的示例中,我们使用可选控制文件来探索Sum块的替代实现如图8所示,首先使用级联,然后使用树实现。

除了VHDL或Verilog代码,Simulink HDL Coder还可以生成一万博1manbetx个周期精确的模型,该模型与为Sum块所做的特定实现选择相对应。图10显示了为Cascade实现生成的模型。图11显示了为Tree实现生成的模型。我们可以模拟生成的模型,并根据参考模型验证它们的输出。

图10。Sum块的级联实现。点击图像查看放大视图。
图11.Sum块的树实现。点击图片查看放大视图。

合成的结果

在VHDL代码生成之后,我们必须准备硬件实现的代码。为此,我们合成了滤波器第一阶段生成的VHDL代码,并使用Xilinx ISE软件工具为Virtex 4 vsx25-10 FPGA执行放置和路由。时序分析表明,我们可以在210mhz的时钟速率下运行该设计。

总结

在本文中,我们使用基于模型的设计和MathWorks工具来创建sigma-delta ADC的高级可执行行为模型。我们详细阐述了行为模型,为FPGA上的硬件实现做好准备。在整个过程中,我们不断验证模型的输出。这种方法使我们能够发现设计中的差异,如果不被发现,可能会导致性能问题。我们使用Simulink HDL编码器从模型生成HDL代码,并使用嵌入式MATLAB功能块将MATLAB代码合并到Simulink模型中。使用MATLAB和Simulink创建的可执行模型是这种设计方法的基石。万博1manbetx

2007年出版的

查看相关功能的文章

查看相关行业的文章