主要内容

generatehdl

生成量化DSP滤波器的HDL代码(需要滤波器设计HDL编码器)

描述

例子

generatehdl (filtSO“InputDataType”,nt)为指定的过滤器系统对象™和输入数据类型生成HDL代码,nt

生成的文件是一个单一的源文件,其中包括实体声明和体系结构代码。的当前工作文件夹中可以找到此文件hdlsrc子文件夹。

generatehdl (filtSO“InputDataType”,nt“FractionalDelayDataType”,fd)生成一个的HDL代码dsp。VariableFractionalDelayfilter系统对象。指定输入数据类型,nt,和分数延迟数据类型,fd

generatehdl (filterObj)生成指定的HDL代码dfilt使用默认设置的过滤器对象。

例子

generatehdl (___、名称、值)除了以前语法中的输入参数外,还使用可选的名称-值参数。使用这些属性可以覆盖默认的HDL代码生成设置。

有关更多详细信息,请参阅Filter Design HDL Coder™文档中的相应属性:

例子

全部折叠

设计一个具有以下规格的直接形式对称等纹波滤波器:

  • 归一化通带频率为0.2

  • 归一化阻带频率为0.22

  • 1 dB的通带纹波

  • 阻带衰减60 dB

设计函数返回dsp。FIRFilter实现规范的系统对象™。

filtSpecs = fdesign.lowpass(“Fp,置,美联社,Ast”, 0.2, 0.22, 1、60);防火=设计(filtSpecs,“equiripple”“FilterStructure”“dfsymfir”“SystemObject”,真正的)
FIRe = dsp。FIRFilterwith properties: Structure: 'Direct form symmetric' NumeratorSource: 'Property' Numerator: [-0.0011 -0.0017 -0.0025 -0.0031 -0.0031 -0.0024 ... ] InitialConditions: 0 Show all properties

要生成HDL代码,调用generatehdl函数。方法为输入指定定点数据类型时,筛选器是System对象InputDataType(Filter Design HDL Coder)财产。编码器生成文件MyFilter.vhd在默认目标文件夹中,hdlsrc

generatehdl(火,“InputDataType”15) numerictype(16日,“名字”“MyFilter”);
###生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex48836167/hdlsrc/MyFilter。##开始生成MyFilter VHDL实体###开始生成MyFilter VHDL架构###成功完成VHDL代码生成过程的过滤器:MyFilter ## HDL延迟是2个样本

设计一个具有以下规格的直接形式对称等纹波滤波器:

  • 归一化通带频率为0.2

  • 归一化阻带频率为0.22

  • 1 dB的通带纹波

  • 阻带衰减60 dB

设计函数返回dsp。FIRFilter实现规范的系统对象™。

filtSpecs = fdesign.lowpass(“Fp,置,美联社,Ast”, 0.2, 0.22, 1、60);防火=设计(filtSpecs,“equiripple”“FilterStructure”“dfsymfir”“SystemObject”,真正的)
FIRe = dsp。FIRFilterwith properties: Structure: 'Direct form symmetric' NumeratorSource: 'Property' Numerator: [-0.0011 -0.0017 -0.0025 -0.0031 -0.0031 -0.0024 ... ] InitialConditions: 0 Show all properties

为FIR等纹波滤波器生成VHDL代码和VHDL测试台。当筛选器是System对象时,必须为输入数据类型指定定点数据类型。编码器生成文件MyFilter.vhd而且MyFilterTB.vhd在默认目标文件夹中,hdlsrc

generatehdl(火,“InputDataType”15) numerictype(16日,“名字”“MyFilter”...“GenerateHDLTestbench”“上”“TestBenchName”“MyFilterTB”)
生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex63281302/hdlsrc/MyFilter。### MyFilter VHDL实体开始生成### MyFilter VHDL架构开始生成###成功完成过滤器的VHDL代码生成过程:MyFilter ## HDL延迟为2个样本### VHDL测试台开始生成。###已生成输入刺激;长度4486个样本。生成测试台:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex63281302/hdlsrc/MyFilterTB。创建刺激向量…###完成生成VHDL测试平台。

设计一个具有完全并行(默认)架构和可编程系数的直接形式对称等纹波滤波器。的设计函数返回dsp。FIRFilter具有默认低通滤波器规范的系统对象™。

Firfilt =设计(fdesign.lowpass,“equiripple”“FilterStructure”“dfsymfir”“SystemObject”,真正的)
Firfilt = dsp。FIRFilterwith properties: Structure: 'Direct form symmetric' NumeratorSource: 'Property' Numerator: [-0.0024 -0.0021 0.0068 0.0167 0.0111 -0.0062 ... ] InitialConditions: 0 Show all properties

要生成HDL代码,调用generatehdl函数。当筛选器是System对象时,必须为输入数据指定定点数据类型。要为系数生成处理器接口,必须指定一个附加的名-值对参数。

generatehdl (firfilt“InputDataType”15) numerictype(16日,“CoefficientSource”“ProcessorInterface”)
###生成/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex74213987/hdlsrc/firfilt。###开始生成firfilt VHDL实体###开始生成firfilt VHDL架构###成功完成VHDL代码生成过程的过滤器:firfilt ## HDL延迟是2个样本

编码器为过滤器对象生成这个VHDL实体。

创建一个带有系数的直接形式的反对称过滤器:

Coeffs = fir1(22,0.45);Firfilt = dsp。FIRFilter (“分子”多项式系数,“结构”"直接形式反对称")
Firfilt = dsp。FIRFilterwith properties: Structure: 'Direct form antisymmetric' NumeratorSource: 'Property' Numerator: [3.6133e-04 0.0031 8.4473e-04 -0.0090 -0.0072 ... ] InitialConditions: 0 Show all properties

要生成HDL代码,调用generatehdl函数。当筛选器是System对象时,必须为输入数据指定定点数据类型。要生成部分串行的体系结构,请指定串行分区。要启用CoefficientMemory属性,必须设置CoefficientSourceProcessorInterface

generatehdl (firfilt“InputDataType”15) numerictype(16日,...“SerialPartition”7 [4],“CoefficientMemory”“DualPortRAMs”...“CoefficientSource”“ProcessorInterface”)
###生成/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex21465785/hdlsrc/firfilt。###开始生成firfilt VHDL实体###开始生成firfilt VHDL架构###时钟速率是该架构输入采样率的7倍。###成功完成VHDL代码生成过程的过滤器:firfilt ### HDL延迟是3个样本

生成的代码包括用于可编程系数的双端口RAM接口。

探索相同过滤器的不同串行实现的时钟速率和延迟。使用对称结构还允许滤波器逻辑共享对称系数的乘法器。

创建一个直接形式对称FIR滤波器与这些规格:

  • 过滤器订单13

  • 6分贝点的归一化截止频率为0.4

设计函数返回dsp。FIRFilter实现规范的系统对象™。

FIR =设计(fdesign.lowpass(“N,俱乐部”13。4)“FilterStructure”“dfsymfir”“SystemObject”,真正的)
FIR = dsp。FIRFilterwith properties: Structure: 'Direct form symmetric' NumeratorSource: 'Property' Numerator: [0.0037 0.0045 -0.0115 -0.0417 1.0911e-17 0.1776 ... ] InitialConditions: 0 Show all properties

要生成HDL代码,调用generatehdl函数。当筛选器是System对象时,必须为输入数据指定定点数据类型。

为了进行基线比较,首先生成一个默认的完全并行体系结构。

generatehdl(杉木、“名字”“FullyParallel”...“InputDataType”numerictype(15) 1, 16日)
生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex94948885/hdlsrc/FullyParallel。###开始生成FullyParallel VHDL实体###开始生成FullyParallel VHDL架构###成功完成VHDL代码生成过程的过滤器:FullyParallel ## HDL延迟是2个样本

通过将分区大小设置为有效的过滤器长度来生成一个完全串行的体系结构。系统时钟速率是输入采样速率的6倍。报告的HDL延迟比默认的并行实现大一个示例。

generatehdl(杉木、“SerialPartition”6“名字”“FullySerial”...“InputDataType”numerictype(15) 1, 16日)
生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex94948885/hdlsrc/FullySerial。###开始生成FullySerial VHDL实体###开始生成FullySerial VHDL架构###时钟速率是该架构输入采样率的6倍。###成功完成VHDL代码生成过程的过滤器:FullySerial ## HDL延迟是3个样本

生成具有三个相等分区的部分串行架构。这个体系结构使用了三个乘数。时钟速率是输入速率的两倍,延迟与默认的并行实现相同。

generatehdl(杉木、“SerialPartition”,[2 2 2],“名字”“PartlySerial”...“InputDataType”numerictype(15) 1, 16日)
生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex94948885/hdlsrc/PartlySerial。开始生成PartlySerial VHDL实体###开始生成PartlySerial VHDL架构###时钟速率是该架构输入采样率的2倍。###成功完成VHDL代码生成过程的过滤器:PartlySerial ## HDL延迟是3个样本

通过启用累加器重用来生成级联串行体系结构。按大小降序指定三个分区。注意,时钟速率比部分串行(没有累加器重用)示例中的速率高。

generatehdl(杉木、“SerialPartition”,[3 2 1],“ReuseAccum”“上”“名字”“CascadeSerial”...“InputDataType”numerictype(15) 1, 16日)
生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex94948885/hdlsrc/ cascadeseral。vhd ### cascadesial VHDL实体的开始生成### cascadesial VHDL架构的开始生成###时钟速率是该架构输入采样率的4倍。###成功完成VHDL代码生成过程的过滤器:cascadesmaterial# # HDL延迟是3个样本

您也可以生成级联串行体系结构,而无需显式地指定分区。编码器自动选择分区大小。

generatehdl(杉木、“ReuseAccum”“上”“名字”“CascadeSerial”...“InputDataType”numerictype(15) 1, 16日)
生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex94948885/hdlsrc/ cascadeseral。vhd ### cascadesial VHDL实体的开始生成### cascadesial VHDL架构的开始生成###时钟速率是该架构输入采样率的4倍。串行分区# 1有3个输入。串行分区# 2有3个输入。###成功完成VHDL代码生成过程的过滤器:cascadesmaterial# # HDL延迟是3个样本

为每个过滤器级联创建一个两级级联过滤器:

  • 直接形成对称FIR滤波器

  • 过滤器订单8

  • 6分贝点的归一化截止频率为0.4

每次呼叫设计函数返回dsp。FIRFilter实现规范的系统对象™。的级联函数返回一个两级级联过滤器。

Lp =设计(fdesign.lowpass(“N,俱乐部”8。4)“FilterStructure”“dfsymfir”“SystemObject”,真正的)
Lp = dsp。FIRFilterwith properties: Structure: 'Direct form symmetric' NumeratorSource: 'Property' Numerator: [-0.0061 -0.0136 0.0512 0.2657 0.4057 0.2657 ... ] InitialConditions: 0 Show all properties
HP = design(fdesign.highpass(“N,俱乐部”8。4)“FilterStructure”“dfsymfir”“SystemObject”,真正的)
HP = dsp。FIRFilter与属性:结构:'直接形式对称'分子来源:'属性'分子:[0.0060 0.0133 -0.0501 -0.2598 0.5951 -0.2598…显示所有属性
Casc =级联(lp,hp)
Casc = dsp。过滤器Cascade with properties: Stage1: [1x1 dsp.FIRFilter] Stage2: [1x1 dsp.FIRFilter] CloneStages: true

要生成HDL代码,调用generatehdl函数用于级联滤波器。当筛选器是System对象时,必须为输入数据指定定点数据类型。

为每个级联阶段指定不同的分区作为单元格数组。

generatehdl (casc和“InputDataType”15) numerictype(16日,“SerialPartition”,{[3 2],[4 1]})
###为filter启动VHDL代码生成过程:casfilt级合阶段# 1 ###为filter启动VHDL代码生成过程:casfilt_stage1生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex16715237/hdlsrc/casfilt_stage1。vhd ### casfilt_stage1 VHDL实体的开始生成### casfilt_stage1 VHDL架构的开始生成###时钟速率是该架构输入采样率的3倍。###启动过滤器的VHDL代码生成过程:casfilt_stage2生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex16715237/hdlsrc/casfilt_stage2vhd开始生成casfilt_stage2 VHDL实体###开始生成casfilt_stage2 VHDL架构###时钟速率是该架构输入采样率的4倍。生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex16715237/hdlsrc/casfilt。## vhd开始生成casfilt VHDL实体###开始生成casfilt VHDL架构###成功完成VHDL代码生成过程的过滤器:casfilt ## HDL延迟是2个样本

要了解级联的每个筛选阶段的有效筛选长度和分区选项,请调用hdlfilterserialinfo函数。该函数返回一个分区向量,对应于所需数量的乘数。请求第一阶段的串行分区可能性,并选择若干乘法器。

hdlfilterserialinfo (casc)。Stage1,“InputDataType”numerictype(15) 1, 16日)
| 0 | |总系数A / Symm |有效  | --------------------------------------------------- | 9 | 0 | 4 | 5 |有效的滤波器长度SerialPartition值是5。表的'SerialPartition'值与相应的值的折叠因子和乘数为给定的过滤器。| |折叠因素乘数| SerialPartition  | -------------------------------------------------- | 1 | 5 | (1 1 1 1 1) | | 2 | 3 | (2 2 1) | | 3 | 2 | 2 [3] | | 4 | 2 | 1 [4] | | 5 | 1 | [5] |

为两个乘法器的目标选择一个串行分区向量,并将该向量传递给generatehdl函数。以这种方式调用函数将返回第一个可能的分区向量,但是有多个分区向量可以实现双乘数架构。每个阶段根据乘法器的数量使用不同的时钟速率。编码器生成一个定时控制器来派生这些时钟。

Sp1 = hdlfilterserialinfo(casc. Sp1)。Stage1,“InputDataType”15) numerictype(16日,“乘数”, 2)
sp1 =1×23 - 2
Sp2 = hdfilterserialinfo (casc. filterserialinfo)。Stage2,“InputDataType”15) numerictype(16日,“乘数”3)
sp2 =1×32 2 1
generatehdl (casc和“InputDataType”15) numerictype(16日,“SerialPartition”, {sp1, sp2})
###为filter启动VHDL代码生成过程:casfilt级合阶段# 1 ###为filter启动VHDL代码生成过程:casfilt_stage1生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex16715237/hdlsrc/casfilt_stage1。vhd ### casfilt_stage1 VHDL实体的开始生成### casfilt_stage1 VHDL架构的开始生成###时钟速率是该架构输入采样率的3倍。###启动过滤器的VHDL代码生成过程:casfilt_stage2生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex16715237/hdlsrc/casfilt_stage2vhd ###开始生成casfilt_stage2 VHDL实体###开始生成casfilt_stage2 VHDL架构###时钟速率是该架构输入采样率的2倍。生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex16715237/hdlsrc/casfilt。## vhd开始生成casfilt VHDL实体###开始生成casfilt VHDL架构###成功完成VHDL代码生成过程的过滤器:casfilt ## HDL延迟是2个样本

创建一个直接表单I SOS过滤器与这些规格:

  • 采样频率为48khz

  • 过滤器顺序5

  • 3 dB点的截止频率为10.8 kHz

设计函数返回dsp。BiquadFilter实现规范的系统对象™。自定义累加器数据类型避免量化错误。

Fs = 48e3;Fc = 10.8e3;N = 5;Lp =设计(fdesign.lowpass(“n, f3db”、N、Fc Fs),“黄油”...“FilterStructure”“df1sos”“SystemObject”,真正的)
Lp = dsp。结构:'直接形式I' SOSMatrixSource: '属性' SOSMatrix: [3x6 double] ScaleValues: [4x1 double] NumeratorInitialConditions: 0 DenominatorInitialConditions: 0 OptimizeUnityScaleValues: true显示所有属性
Nt_accum =数字类型(“Signedness”“汽车”“字”, 20岁,...“FractionLength”15);Nt_input = numerictype(1,16,15);lp。NumeratorAccumulatorDataType =“自定义”;lp。CustomNumeratorAccumulatorDataType = nt_accum;lp。DenominatorAccumulatorDataType =“自定义”;lp。CustomDenominatorAccumulatorDataType = nt_accum;

要列出此筛选器的所有可能的串行体系结构规范,请调用hdlfilterserialinfo函数。当筛选器是System对象时,必须为输入数据指定定点数据类型。

hdlfilterserialinfo (lp),“InputDataType”nt_input)
对于给定滤波器,具有相应乘数的折叠因子的表。| |乘数折叠因素  | -------------------------------- | 6 | 3 | | 9 | 2 | | | 1 |

要生成HDL代码,调用generatehdl与串行体系结构之一的功能。指定NumMultipliersFoldingFactor财产,但不是两者。例如,使用NumMultipliers属性:

generatehdl (lp),“NumMultipliers”2,“InputDataType”nt_input)
生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex90334139/hdlsrc/lp。vhd ###开始生成lp VHDL实体###开始生成lp VHDL架构###成功完成VHDL代码生成过程的过滤器:lp ### HDL延迟是2个样本

属性指定相同的体系结构FoldingFactor财产。

generatehdl (lp),“FoldingFactor”9“InputDataType”nt_input)
生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex90334139/hdlsrc/lp。vhd ###开始生成lp VHDL实体###开始生成lp VHDL架构###成功完成VHDL代码生成过程的过滤器:lp ### HDL延迟是2个样本

这两个命令生成的过滤器总共使用两个乘法器,延迟时间为9个时钟周期。这种架构比并行实现使用更少的区域,代价是延迟。

使用分布式算术选项来减少过滤器实现中的乘法器数量。

创建一个直接形式的FIR滤波器并计算滤波器长度,FL

Filtdes = fdesign.lowpass(“N, Fc,美联社,Ast”, 30岁,0.4,0.05,0.03,“线性”);filt =设计(filtdes,“FilterStructure”“dffir”“SystemObject”,真正的);FL = length(find(firfilt。分子~= 0)
Fl = 31

指定一组分区,使分区大小加起来等于筛选器长度。这只是一个分区选项,您可以指定其他大小的组合。

generatehdl (firfilt“InputDataType”15) numerictype(16日,...“DALUTPartition”,[8 8 8 7])
###结构fir具有对称系数,考虑转换为结构symmetricfir以减少面积。###生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex00198568/hdlsrc/firfilt。###开始生成firfilt VHDL实体###开始生成firfilt VHDL架构###时钟速率是此架构输入采样率的16倍。###成功完成VHDL代码生成过程的过滤器:firfilt ### HDL延迟是3个样本

为了进行比较,创建一个直接形式的对称FIR滤波器。对称情况下的滤波器长度较小。

Filtdes = fdesign.lowpass(“N, Fc,美联社,Ast”, 30岁,0.4,0.05,0.03,“线性”);filt =设计(filtdes,“FilterStructure”“dfsymfir”“SystemObject”,真正的);FL = ceil(length(find(firfilt。分子~= 0))/2)
Fl = 16

指定一组分区,使分区大小加起来等于筛选器长度。这只是一个分区选项,您可以指定其他大小的组合。提示:使用hdlfilterdainfo函数显示有效过滤器长度、LUT分区选项和可能的DARadix过滤器的值。

generatehdl (firfilt“InputDataType”15) numerictype(16日,...“DALUTPartition”, 8 [8])
###生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex00198568/hdlsrc/firfilt。###开始生成firfilt VHDL实体###开始生成firfilt VHDL架构###时钟速率是此架构输入采样率的17倍。###成功完成VHDL代码生成过程的过滤器:firfilt ### HDL延迟是3个样本

使用分布式算术选项来减少过滤器实现中的乘法器数量。

创建一个直接形式的FIR多相抽取器,并计算滤波器长度。

D = fdesign.decimator(4);Filt =设计(d,“SystemObject”,真正的);FL = size(多相(filt),2)
Fl = 27

指定与筛选器大小相加的分布式算术LUT分区。当您将分区指定为多相滤波器的矢量时,每个子滤波器将使用相同的分区。

generatehdl (filt“InputDataType”15) numerictype(16日,...“DALUTPartition”,[8 8 8 3])
生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex51670151/hdlsrc/firdecim。###开始生成firdecim VHDL实体###开始生成firdecim VHDL架构###时钟速率是该架构的4倍输入和16倍输出采样率。###成功完成VHDL代码生成过程的过滤器:firdecim ## HDL延迟是16个样本

还可以为每个子筛选器指定惟一的分区。对于同一个筛选器,将子筛选器划分指定为矩阵。第一个子过滤器的长度为1,其他子过滤器的长度为26。提示:使用hdlfilterdainfo函数显示有效过滤器长度、LUT分区选项和可能的DARadix过滤器的值。

D = fdesign.decimator(4);Filt =设计(d,“SystemObject”,真正的);generatehdl (filt“InputDataType”15) numerictype(16日,...“DALUTPartition”,[1 0 0 0;8 8 8 2;8 8 6 4;8 8 8 2])
生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex51670151/hdlsrc/firdecim。###开始生成firdecim VHDL实体###开始生成firdecim VHDL架构###时钟速率是该架构的4倍输入和16倍输出采样率。###成功完成VHDL代码生成过程的过滤器:firdecim ## HDL延迟是16个样本

使用分布式算术选项来减少过滤器实现中的乘法器数量。

创建级联过滤器

创建一个两级级联过滤器。为每个阶段定义不同的LUT分区,并指定单元格数组中的分区向量。

Lp =设计(fdesign.lowpass(“N,俱乐部”8。4)“filterstructure”“dfsymfir”...“SystemObject”,真正的);HP = design(fdesign.highpass(“N,俱乐部”8。4)“filterstructure”“dfsymfir”...“SystemObject”,真正的);Casc =级联(lp,hp);Nt1 = numerictype(1,12,10);generatehdl (casc和“InputDataType”nt1,“DALUTPartition”,{[3 2],[2 2 1]})
###启动过滤器的VHDL代码生成过程:casfilt级合阶段# 1 ###启动过滤器的VHDL代码生成过程:casfilt_stage1生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex17169310/hdlsrc/casfilt_stage1。开始生成casfilt_stage1 VHDL实体###开始生成casfilt_stage1 VHDL架构###时钟速率是该架构输入采样率的13倍。###启动过滤器的VHDL代码生成过程:casfilt_stage2生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex17169310/hdlsrc/casfilt_stage2vhd开始生成casfilt_stage2 VHDL实体###开始生成casfilt_stage2 VHDL架构###时钟速率是该架构输入采样率的29倍。生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex17169310/hdlsrc/casfilt。##开始生成casfilt VHDL实体###开始生成casfilt VHDL架构###成功完成VHDL代码生成过程的过滤器:casfilt ## HDL延迟是4个样本

分布式算术选项

使用hdlfilterdainfo函数显示有效过滤器长度、LUT分区选项和可能的DARadix级联的每个筛选阶段的值。该函数返回一个LUT分区向量,对应于所需数量的地址位。

请求第一阶段的LUT分区可能性。

hdlfilterdainfo (casc)。Stage1,“InputDataType”, nt1);
| 0 | |总系数A / Symm |有效  | --------------------------------------------------- | 9 | 0 | 4 | 5 |有效的滤波器长度SerialPartition值是5。表的“DARadix”值与相应的值的折叠因子和倍数为给定滤波器的LUT集。多个| | |折叠因素LUT-Sets DARadix  | ------------------------------------------------ | 1 | 12 | 2 ^ 12 | | 3 | 6 | 2 ^ 6 | | 4 | 4 | 2 ^ 4 | | 5 | 3 | 2 ^ 3 | | 7 | 2 | 2 ^ 2 | | 13 | 1 | 2 ^ 1 |附近地区的细节与相应的“DALUTPartition”值。| |马克斯地址宽度大小(位)| |附近地区细节DALUTPartition  | --------------------------------------------------------------------------- | 5 | 416 | 1 x32x13 | [5] | | 4 | 216 | 1 x16x12 1 x2x12 | [4 1] | | 3 | 124 | 1 x4x13, 1 x8x9 | 2 [3] | | 2 | 104 | 1 x2x12, 1 x4x12 1 x4x8 | |(2 2 1)注:1。LUT Details表示LUT的个数和大小。例如,1x1024x18表示1024个18位宽位置的LUT。

要为第二个阶段请求LUT分区可能性,必须首先确定第二个阶段的输入数据类型。

y = casc.Stage1(fi(0,nt1));Nt2 = y.numerictype;hdlfilterdainfo (casc)。Stage2,“InputDataType”nt2);
| 0 | |总系数A / Symm |有效  | --------------------------------------------------- | 9 | 0 | 4 | 5 |有效的滤波器长度SerialPartition值是5。表的“DARadix”值与相应的值的折叠因子和倍数为给定滤波器的LUT集。多个| | |折叠因素LUT-Sets DARadix  | ------------------------------------------------ | 1 | | 28日2 ^ 28 | | 3 | 14 | 2 ^ 14 | | 5 | 7 | 2 ^ 7 | | 8 | 4 | 2 ^ 4 | | 15 | 2 | 2 ^ 2 | | 29日| 1 | 2 ^ 1 |附近地区的细节与相应的“DALUTPartition”值。| |马克斯地址宽度大小(位)| |附近地区细节DALUTPartition  | ---------------------------------------------------------------------------- | 5 | 896 | 1 x32x28 | [5] | | 4 | 488 | 1 x16x27 1 x2x28 | [4 1] | | 3 | 304 | 1 x4x28, 1 x8x24 | 2 [3] | | 2 | 256 | 1 x2x28, 1 x4x23 1 x4x27 | |(2 2 1)注:1。LUT Details表示LUT的个数和大小。例如,1x1024x18表示1024个18位宽位置的LUT。

每个阶段有不同的LUT分区

选择地址宽度和折叠因子,得到每个阶段的LUT分区。第一阶段使用最大地址大小为5位的lut。第二阶段使用最大地址大小为3位的lut。它们以相同的时钟速率运行,并且具有不同的LUT分区。

Dp1 = hdlfilterdainfo(casc。Stage1,“InputDataType”nt1,...“LUTInputs”5,“FoldingFactor”3);Dp2 = hdlfilterdainfo(casc。Stage2,“InputDataType”nt1,...“LUTInputs”3,“FoldingFactor”5);generatehdl (casc和“InputDataType”nt1,“DALUTPartition”, {dp1、dp2});
###启动过滤器的VHDL代码生成过程:casfilt级合阶段# 1 ###启动过滤器的VHDL代码生成过程:casfilt_stage1生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex17169310/hdlsrc/casfilt_stage1。开始生成casfilt_stage1 VHDL实体###开始生成casfilt_stage1 VHDL架构###时钟速率是该架构输入采样率的13倍。###启动过滤器的VHDL代码生成过程:casfilt_stage2生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex17169310/hdlsrc/casfilt_stage2vhd开始生成casfilt_stage2 VHDL实体###开始生成casfilt_stage2 VHDL架构###时钟速率是该架构输入采样率的29倍。生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex17169310/hdlsrc/casfilt。##开始生成casfilt VHDL实体###开始生成casfilt VHDL架构###成功完成VHDL代码生成过程的过滤器:casfilt ## HDL延迟是4个样本

不同的DARadix每个阶段的价值

您还可以指定不同的DARadix级联中每个过滤器的值。只能在命令行上指定不同的级联分区。中指定分区时产生高密度脂蛋白对话框中,所有级联阶段使用相同的分区。检查结果hdlfilterdainfo设置DARadix每个阶段的值。

generatehdl (casc和“InputDataType”nt1,...“DALUTPartition”,{[3 2],[2 2 1]},“DARadix”,{2 ^ 3、2 ^ 7})
###启动过滤器的VHDL代码生成过程:casfilt级合阶段# 1 ###启动过滤器的VHDL代码生成过程:casfilt_stage1生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex17169310/hdlsrc/casfilt_stage1。开始生成casfilt_stage1 VHDL实体###开始生成casfilt_stage1 VHDL架构###时钟速率是该架构输入采样率的5倍。###启动过滤器的VHDL代码生成过程:casfilt_stage2生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex17169310/hdlsrc/casfilt_stage2vhd开始生成casfilt_stage2 VHDL实体###开始生成casfilt_stage2 VHDL架构###时钟速率是该架构输入采样率的5倍。生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex17169310/hdlsrc/casfilt。##开始生成casfilt VHDL实体###开始生成casfilt VHDL架构###成功完成VHDL代码生成过程的过滤器:casfilt ## HDL延迟是4个样本

为级联过滤器的不同阶段指定不同的过滤器体系结构。您可以根据硬件限制指定串行、分布式算术(DA)和并行体系结构的组合。

创建级联过滤器

创建一个三级过滤器。每个阶段都是不同的类型。

H1 = dsp。FIRFilter (“分子”,[0.05 -。25 .88 0.9 .88 -。25 0.05]);H2 = dsp。FIRFilter (“分子”,[-0.008 0.06 -0.44 0.44 -0.06 0.008],...“结构”"直接形式反对称");H3 = dsp。FIRFilter(“分子”,[-0.008 0.06 0.44 0.44 0.06 -0.008],...“结构”“直接形式对称”);Casc = cascade(h1,h2,h3);

为每个阶段指定体系结构

为第一阶段指定DA体系结构,为第二阶段指定串行体系结构,为第三阶段指定完全并行(默认)体系结构。

获得DARadix第一个体系结构的值,使用hdlfilterdainfo,然后从中选择一个值博士

Nt =数字类型(1,12,10);[dp,dr,lutsize,ff] = hdfilterdainfo (casc。Stage1,...“InputDataType”10) numerictype(12日);博士
博士=6 x1细胞{' 2 ^ 12}{2 ^ 6的}{2 ^ 4的}{' 2 ^ 3}{2 ^ 2的}{2 ^ 1的}

将属性值设置为单元格数组,其中每个单元格应用于一个阶段。若要禁用特定阶段的属性,请使用默认值(分区为-1,分区为2)DARadix).

generatehdl (casc和“InputDataType”元,...“SerialPartition”{1, 3, 1},...“DALUTPartition”, {3 [4], 1,1},...“DARadix”, {2 ^ 6 2 2});
###结构fir具有对称系数,考虑转换为结构symmetricfir以减少面积。###为filter启动VHDL代码生成进程:casfilt_stage1生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex13094988/hdlsrc/casfilt_stage1vhd ### casfilt_stage1 VHDL实体的开始生成### casfilt_stage1 VHDL架构的开始生成###时钟速率是该架构输入采样率的2倍。###启动过滤器的VHDL代码生成过程:casfilt_stage2生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex13094988/hdlsrc/casfilt_stage2vhd开始生成casfilt_stage2 VHDL实体###开始生成casfilt_stage2 VHDL架构###时钟速率是该架构输入采样率的3倍。###启动过滤器的VHDL代码生成过程:casfilt_stage3生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex13094988/hdlsrc/casfilt_stage3vhd开始生成casfilt_stage3 VHDL实体###开始生成casfilt_stage3 VHDL架构###成功完成VHDL代码生成过程的过滤器:casfilt_stage3 ###生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex13094988/hdlsrc/casfilt。## vhd开始生成casfilt VHDL实体###开始生成casfilt VHDL架构###成功完成VHDL代码生成过程的过滤器:casfilt ## HDL延迟是3个样本

您可以指定输入系数来测试具有可编程系数的过滤器。

创建一个具有完全并行(默认)架构的直接形式对称FIR过滤器。在向量中定义过滤器对象的系数b.编码器生成测试台代码,使用第二组系数测试系数接口,c.编码器修整c到过滤器的有效长度。

B = [-0.01 0.1 0.8 0.1 -0.01];C = [-0.03 0.5 0.7 0.5 -0.03];C = C (1:ceil(长度(C)/2));Filt = dsp。FIRFilter (“分子”b“结构”“直接形式对称”);generatehdl (filt“InputDataType”15) numerictype(16日,...“GenerateHDLTestbench”“上”...“CoefficientSource”“ProcessorInterface”“TestbenchCoeffStimulus”c)
###生成/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex66247050/hdlsrc/firfilt。###开始生成firfilt VHDL实体###开始生成firfilt VHDL架构###成功完成VHDL代码生成过程的过滤器:firfilt ### HDL延迟是2个样本### VHDL测试台的开始生成。###已生成输入刺激;长度为3107个样本。生成测试台:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex66247050/hdlsrc/firfilt_tb。创建刺激向量…###完成生成VHDL测试平台。

创建筛选器规范。在生成HDL代码时,为系数指定一个可编程接口。

Fs = 48e3;Fc = 10.8e3;N = 5;F_lp = fdesign.lowpass(“n, f3db”、N、Fc Fs);Filtiir =设计(f_lp,“黄油”“FilterStructure”“df2sos”“SystemObject”,真正的);filtiir。OptimizeUnityScaleValues = 0;generatehdl (filtiir“InputDataType”15) numerictype(16日,...“CoefficientSource”“ProcessorInterface”)
生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex92389569/hdlsrc/filtiir。vhd ### filtiir VHDL实体的开始生成### filtiir VHDL架构的开始生成###二阶部分,###二阶部分,###一阶部分,### 3 ###成功完成过滤器的VHDL代码生成过程:filtiir ## HDL延迟为2个样本

编码器为过滤器对象生成这个VHDL实体。

探索为多速率过滤器指定时钟端口的各种方法。

默认设置

创建一个多相采样速率转换器。默认情况下,编码器生成一个输入时钟(clk),输入时钟使能(clk_enable),以及一个时钟使能输出信号ce_out.的ce_out信号表示输出样本准备就绪。的ce_in输出信号表示输入样本何时被接受。您可以使用此信号来控制上游数据流。

Firrc = dsp。FIRRateConverter (“InterpolationFactor”5,“DecimationFactor”3);generatehdl (firrc“InputDataType”numerictype(15) 1, 16日)
###生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex09049114/hdlsrc/firrc。###开始生成firrc VHDL实体###开始生成firrc VHDL架构###成功完成VHDL代码生成过程的过滤器:firrc ## HDL延迟是2个样本

生成的实体有以下信号:

自定义时钟名称

您可以为输入时钟使能和输出时钟使能信号提供自定义名称。不能重命名ce_in信号。

Firrc = dsp。FIRRateConverter (“InterpolationFactor”5,“DecimationFactor”3)
Firrc = dsp。FIRRateConverter与属性:InterpolationFactor: 5 DecimationFactor: 3 NumeratorSource: 'Property'分子:[0 -6.6976e-05 -1.6044e-04 -2.2552e-04…显示所有属性
generatehdl (firrc“InputDataType”15) numerictype(16日,...“ClockEnableInputPort”“clk_en1”...“ClockEnableOutputPort”“clk_en2”)
###生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex09049114/hdlsrc/firrc。###开始生成firrc VHDL实体###开始生成firrc VHDL架构###成功完成VHDL代码生成过程的过滤器:firrc ## HDL延迟是2个样本

生成的实体有以下信号:

多时钟输入

若要为受支持的多速率滤波器生成多个时钟输入信号,请设置金宝appClockInputs财产“多”.在这种情况下,编码器不会生成任何输出时钟启用端口。

decim = dsp.CICDecimator(7,1,4);generatehdl (decim“InputDataType”15) numerictype(16日,...“ClockInputs”“多”)
生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex09049114/hdlsrc/cicDecOrIntFilt。vhd # # # # # #开始代cicDecOrIntFilt VHDL的实体开始代cicDecOrIntFilt硬件描述语言(VHDL)架构# # # # 1:部分积分器# # # # 2:部分积分器# # # # 3:部分积分器# # # # 4:部分积分器# # # # 5节:梳子# # # # 6节:梳子# # # # 7节:梳子# # # # 8节:梳子# # #成功完成硬件描述语言(VHDL)过滤器的代码生成过程:cicDecOrIntFilt # # # HDL延迟7样品

生成的实体有以下信号:

创建筛选器对象。然后调用generatehdl,并指定一个合成工具。

LPF = fdesign.lowpass(“fp,置,美联社,ast”, 0.45, 0.55, 1、60);Firfilt =设计(lpf,“equiripple”“FilterStructure”“dfsymfir”...“SystemObject”,真正的);generatehdl (firfilt“InputDataType”13)、numerictype(1、14日,...“HDLSynthTool”“第四的”);
###生成/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex92219095/hdlsrc/firfilt。###开始生成firfilt VHDL实体###开始生成firfilt VHDL架构###成功完成VHDL代码生成过程的过滤器:firfilt ## HDL延迟是2个样本

编码器生成一个名为firfilt_quartus.tcl,使用Altera®Quartus II合成工具的默认脚本属性。

类型hdlsrc / firfilt_quartus.tcl
Load_package flow set top_level firfilt set src_dir "。/hdlsrc“设置prj_dir”q2dir文件mkdir ../$prj_dir CD ../$prj_dir project_new $top_level -revision $top_level -overwrite set_global_assignment -name FAMILY "Stratix II" set_global_assignment -name DEVICE EP2S60F484C3 set_global_assignment -name TOP_LEVEL_ENTITY $top_level set_global_assignment -name vhdl_FILE "../$src_dir/firfilt. txtVhd " execute_flow -compile project_close

您可以将脚本自动化属性设置为虚拟值,以说明编码器如何从属性构造合成脚本。

设计一个过滤器并生成HDL。指定要包含在合成脚本中的合成工具和自定义文本。

LPF = fdesign.lowpass(“fp,置,美联社,ast”, 0.45, 0.55, 1、60);Firfilt =设计(lpf,“equiripple”“FilterStructure”“dfsymfir”...“Systemobject”,真正的);generatehdl (firfilt“InputDataType”13)、numerictype(1、14日,...“HDLSynthTool”“伊势”...“HDLSynthInit”'init行1:模块名称为%s\ninit行2\n'...“HDLSynthCmd”'命令:HDL文件名是%s\n'...“HDLSynthTerm”'term line 1\nterm line 2\n');
###生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex64737676/hdlsrc/firfilt。###开始生成firfilt VHDL实体###开始生成firfilt VHDL架构###成功完成VHDL代码生成过程的过滤器:firfilt ## HDL延迟是2个样本

编码器生成一个名为firfilt_ise.tcl.注意您指定的自定义文本的位置。您可以使用此特性向生成的脚本添加合成指令。

类型hdlsrc / firfilt_ise.tcl
init line 1:模块名称为firfilt init line 2命令:HDL文件名为firfilt。VHD术语线1术语线2

输入参数

全部折叠

从中生成HDL代码的过滤器,指定为过滤器系统对象。要创建筛选器系统对象,请使用设计函数或查看对象的引用页。您可以从DSP System Toolbox™中使用以下系统对象:

输入数据类型,指定为numerictype(定点设计师)对象。仅当输入筛选器是System对象时,此参数才适用。调用numerictype(年代,w, f),在那里年代1表示有符号,0表示无符号,w字的长度是以位为单位的吗f是小数位数。

分数延迟数据类型,指定为numerictype(定点设计师)对象。此参数仅在输入筛选器为时适用dsp。VariableFractionalDelay系统对象。调用numerictype(年代,w, f),在那里年代1表示有符号,0表示无符号,w字的长度是以位为单位的吗f是小数位数。

过滤器,从中生成HDL代码,指定为dfilt对象。属性可以创建此对象设计函数。有关支持的筛选器功能的概述,请参见金宝app过滤器配置选项(Filter Design HDL Coder)

选择

您可以使用fdhdltool(Filter Design HDL Coder)函数生成HDL代码代替(需要过滤器设计HDL编码器)。将输入和分数延迟数据类型指定为参数,然后在Generate HDL对话框中设置其他属性。

版本历史

R2006a之前介绍

另请参阅

(Filter Design HDL Coder)|(Filter Design HDL Coder)