主要内容

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分贝

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

filtSpecs = fdesign.lowpass(“Fp,置,美联社,Ast”, 0.2, 0.22, 1、60);FIRe = design(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(过滤器设计HDL编码器)财产。编码器生成文件MyFilter.vhd在默认目标文件夹中,hdlsrc

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

设计一个符合以下规格的直接对称等纹波滤波器:

  • 归一化通带频率0.2

  • 归一化阻带频率为0.22

  • 通带纹波为1 dB

  • 阻带衰减60分贝

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

filtSpecs = fdesign.lowpass(“Fp,置,美联社,Ast”, 0.2, 0.22, 1、60);FIRe = design(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架构##成功完成过滤器的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架构###成功完成过滤器的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 = design(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/ fulllyparallel。开始生成fulllyparallel VHDL架构##成功完成过滤器的VHDL代码生成过程:fulllyparallel ## HDL延迟为2个样本

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

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

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

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

创建一个两级级联过滤器,每个过滤器的规格如下:

  • 直接形式对称FIR滤波器

  • 滤镜顺序8

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

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

Lp = design(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 =设计(fdesign.highpass)“N,俱乐部”8。4)“FilterStructure”“dfsymfir”“SystemObject”,真正的)
HP = dsp。分子:[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]})
###启动过滤器的VHDL代码生成进程:casfilt_stage1 ###正在生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex16715237/hdlsrc/casfilt_stage1。开始生成casfilt_stage1 VHDL架构###时钟速率是该架构的输入采样速率的3倍。###开始VHDL代码生成过程的过滤器:casfilt_stage2 ###生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex16715237/hdlsrc/casfilt_stage2。开始生成casfilt_stage2 VHDL架构###时钟速率是该架构的输入采样速率的4倍。###生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex16715237/hdlsrc/casfilt。开始生成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 = hdfilterserialinfo (casc.;Stage1,“InputDataType”15) numerictype(16日,“乘数”, 2)
sp1 =1×23 - 2
Sp2 = hdfilterserialinfo (casc。Stage2,“InputDataType”15) numerictype(16日,“乘数”3)
sp2 =1×32 2 1
generatehdl (casc和“InputDataType”15) numerictype(16日,“SerialPartition”, {sp1, sp2})
###启动过滤器的VHDL代码生成进程:casfilt_stage1 ###正在生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex16715237/hdlsrc/casfilt_stage1。开始生成casfilt_stage1 VHDL架构###时钟速率是该架构的输入采样速率的3倍。###开始VHDL代码生成过程的过滤器:casfilt_stage2 ###生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex16715237/hdlsrc/casfilt_stage2。开始生成casfilt_stage2 VHDL架构###时钟速率是该架构的2倍输入采样速率。###生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex16715237/hdlsrc/casfilt。开始生成casfilt VHDL实体##开始生成casfilt VHDL架构##成功完成过滤器的VHDL代码生成过程:casfilt HDL延迟为2个样本

使用以下规范创建一个直接表单I SOS过滤器:

  • 采样频率48khz

  • 滤镜顺序5

  • 3分贝点的截止频率为10.8 kHz

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

Fs = 48e3;Fc = 10.8e3;N = 5;Lp = design(fdesign.lowpass)“n, f3db”、N、Fc Fs),“黄油”...“FilterStructure”“df1sos”“SystemObject”,真正的)
Lp = dsp。SOSMatrixSource: 'Property' SOSMatrix: [3x6 double] ScaleValues: [4x1 double] NumeratorInitialConditions: 0 DenominatorInitialConditions: 0 OptimizeUnityScaleValues: true显示所有属性
Nt_accum = numerictype(“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。开始生成lp VHDL实体##开始生成lp VHDL架构##成功完成过滤器的VHDL代码生成过程:l## HDL延迟为2个样本

方法指定相同的架构FoldingFactor财产。

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

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

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

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

Filtdes = fdesign.lowpass(“N, Fc,美联社,Ast”, 30岁,0.4,0.05,0.03,“线性”);Firfilt =设计(filtdes,“FilterStructure”“dffir”“SystemObject”,真正的);FL =长度(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架构###时钟速率是该架构的输入采样速率的16倍。成功完成VHDL代码生成过程的过滤器:firfilt# # HDL延迟是3个样本

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

Filtdes = fdesign.lowpass(“N, Fc,美联社,Ast”, 30岁,0.4,0.05,0.03,“线性”);Firfilt =设计(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架构###时钟速率是该架构的输入采样速率的17倍。成功完成VHDL代码生成过程的过滤器:firfilt# # HDL延迟是3个样本

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

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

D = fdesign.decimator(4);Filt = design(d,“SystemObject”,真正的);FL =尺寸(多相(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架构###时钟速率是该架构的4倍输入采样速率和16倍输出采样速率。成功完成VHDL代码生成过程的过滤器:firdecim# # HDL延迟是16个样本

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

D = fdesign.decimator(4);Filt = design(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架构###时钟速率是该架构的4倍输入采样速率和16倍输出采样速率。成功完成VHDL代码生成过程的过滤器:firdecim# # HDL延迟是16个样本

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

创建级联过滤器

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

Lp = design(fdesign.lowpass)“N,俱乐部”8。4)“filterstructure”“dfsymfir”...“SystemObject”,真正的);HP =设计(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_stage1 ###正在生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex17169310/hdlsrc/casfilt_stage1。开始生成casfilt_stage1 VHDL架构###时钟速率是该架构的输入采样速率的13倍。###启动过滤器的VHDL代码生成进程:casfilt_stage2 ###生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex17169310/hdlsrc/casfilt_stage2。开始生成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表示1个1024个18位宽位置的LUT。

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

y = casc.Stage1(fi(0,nt1));Nt2 = .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表示1个1024个18位宽位置的LUT。

每个阶段有不同的LUT分区

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

Dp1 = hdfilterdainfo (casc。Stage1,“InputDataType”nt1,...“LUTInputs”5,“FoldingFactor”3);Dp2 = hdfilterdainfo (casc。Stage2,“InputDataType”nt1,...“LUTInputs”3,“FoldingFactor”5);generatehdl (casc和“InputDataType”nt1,“DALUTPartition”, {dp1、dp2});
###启动过滤器的VHDL代码生成进程:casfilt_stage1 ###正在生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex17169310/hdlsrc/casfilt_stage1。开始生成casfilt_stage1 VHDL架构###时钟速率是该架构的输入采样速率的13倍。###启动过滤器的VHDL代码生成进程:casfilt_stage2 ###生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex17169310/hdlsrc/casfilt_stage2。开始生成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_stage1 ###正在生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex17169310/hdlsrc/casfilt_stage1。开始生成casfilt_stage1 VHDL架构###时钟速率是该架构的输入采样速率的5倍。###启动过滤器的VHDL代码生成进程:casfilt_stage2 ###生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex17169310/hdlsrc/casfilt_stage2。开始生成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 =级联(h1,h2,h3);

为每个阶段指定体系结构

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

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

Nt = numerictype(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以减少面积。###启动过滤器的VHDL代码生成进程:casfilt_stage1 ###正在生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex13094988/hdlsrc/casfilt_stage1。casfilt_stage1 VHDL实体开始生成casfilt_stage1 VHDL架构的开始生成###时钟速率是该架构的2倍输入采样速率。###开始VHDL代码生成过程的过滤器:casfilt_stage2 ###生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex13094988/hdlsrc/casfilt_stage2。开始生成casfilt_stage2 VHDL架构###时钟速率是该架构的输入采样速率的3倍。###成功完成过滤器的VHDL代码生成进程:casfilt_stage2 ### Cascade stage # 3 ###启动过滤器的VHDL代码生成进程:casfilt_stage3 ###生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex13094988/hdlsrc/casfilt_stage3。##开始生成casfilt_stage3 VHDL架构###成功完成过滤器的VHDL代码生成过程:casfilt_stage3 ###生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex13094988/hdlsrc/casfilt。开始生成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(length(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 = design(f_lp,“黄油”“FilterStructure”“df2sos”“SystemObject”,真正的);filtiir。OptimizeUnityScaleValues = 0;generatehdl (filtiir“InputDataType”15) numerictype(16日,...“CoefficientSource”“ProcessorInterface”
###开始VHDL代码生成进程的过滤器:filtiir ###生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex92389569/hdlsrc/filtiir。开始生成filtiir VHDL实体###开始生成filtiir VHDL架构###二级段,# 1二级段,# 2一级段,# 3 ##成功完成filter的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架构##成功完成过滤器的VHDL代码生成过程:firrc HDL延迟为2个样本

生成的实体具有以下信号:

自定义时钟名称

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

Firrc = dsp。FIRRateConverter (“InterpolationFactor”5,“DecimationFactor”3)
Firrc = dsp。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架构##成功完成过滤器的VHDL代码生成过程:firrc HDL延迟为2个样本

生成的实体具有以下信号:

多个时钟输入

若要为支持的多速率滤波器生成多个时钟输入信号,请设置万博1manbetxClockInputs财产“多”.在这种情况下,编码器不生成任何输出时钟使能端口。

decim = dsp.CICDecimator(7,1,4);generatehdl (decim“InputDataType”15) numerictype(16日,...“ClockInputs”“多”
###开始VHDL代码生成过程的过滤器:cicDecOrIntFilt ###生成:/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 = design(lpf,“equiripple”“FilterStructure”“dfsymfir”...“SystemObject”,真正的);generatehdl (firfilt“InputDataType”13)、numerictype(1、14日,...“HDLSynthTool”“第四的”);
###生成:/tmp/Bdoc22a_1891349_36474/tp506f5d8a/hdlfilter-ex92219095/hdlsrc/firfilt。##开始生成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" set prj_dir "q2dir" file 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 "..“execute_flow -compile project_close .

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

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

LPF = fdesign.lowpass(“fp,置,美联社,ast”, 0.45, 0.55, 1、60);Firfilt = design(lpf,“equiripple”“FilterStructure”“dfsymfir”...“Systemobject”,真正的);generatehdl (firfilt“InputDataType”13)、numerictype(1、14日,...“HDLSynthTool”“伊势”...“HDLSynthInit”'init line 1:模块名称为%s\ninit line 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架构###成功完成过滤器的VHDL代码生成过程:firfilt HDL延迟为2个样本

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

类型hdlsrc / firfilt_ise.tcl
init line 1: module name is firfilt init line 2: HDL filename is firfilt。VHD期线1期线2

输入参数

全部折叠

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

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

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

过滤器,从中生成HDL代码,指定为dfilt对象。方法可以创建此对象设计函数。有关支持的筛选器功能的概述,请参见万博1manbetx过滤器配置选项(过滤器设计HDL编码器)

选择

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

版本历史

R2006a之前介绍过

另请参阅

(过滤器设计HDL编码器)|(过滤器设计HDL编码器)