使用FPGA-in-the-Loop验证数字上升变换器
这个例子向您展示了如何生成验证数字上升变换器设计滤波器设计高密度脂蛋白编码器使用FPGA-in-the-Loop模拟™。
需求
这个示例所需的工具:
FPGA设计软件
一个支持的FPGA开发金宝app板及配件(ML403董事会不支持这个例子)。关于硬件支持的更多信息,请参阅金宝app金宝app支持FPGA器件FPGA验证。
使用以太网连接:千兆以太网适配器安装在主机上,千兆以太网交叉电缆
连接使用JTAG: JTAG电缆与USB导火线I或II, USB霸卡驱动程序
连接使用PCI Express®: FPGA板安装到主机的PCI Express插槽。
为DUC创建层叠滤波器
数字上升变换器(DUC)是一个数字电路,将数字基带信号转换为通频带的信号。DUC由三个过滤阶段;每个阶段过滤器低通插值滤波器的输入信号,采样率的变化紧随其后。在这个例子中,DUC两个FIR插值滤波器的级联,中投插值过滤器,所述示例中高密度脂蛋白数字上升变换器(DUC)。
1。创建两个冷杉和中投过滤器。
pfir = [0.0007 0.0021 -0.0002 -0.0025 -0.0027 0.0013 0.0049 0.0032…-0.0034 -0.0074 -0.0031 0.0060 0.0099 0.0029 -0.0089 -0.0129…-0.0032 0.0124 0.0177 0.0040 -0.0182 -0.0255 -0.0047 0.0287…0.0390 0.0049 -0.0509 -0.0699 -0.0046 0.1349 0.2776 0.3378…0.2776 0.1349 -0.0046 -0.0699 -0.0509 0.0049 0.0390 0.0287…-0.0047 -0.0255 -0.0182 0.0040 0.0177 0.0124 -0.0032 -0.0129…-0.0089 0.0029 0.0099 0.0060 -0.0031 -0.0074 -0.0034 0.0032…0.0049 0.0013 -0.0027 -0.0025 -0.0002 0.0021 0.0007);
hpfir = dsp。FIRInterpolator (2 pfir);hpfir。FullPrecisionOverride = false;hpfir。CoefficientsDataType =“自定义”;hpfir。CustomCoefficientsDataType = numerictype ([], 16);hpfir。ProductDataType =“自定义”;hpfir。CustomProductDataType = numerictype(31)[], 31日;hpfir。AccumulatorDataType =“自定义”;hpfir。CustomAccumulatorDataType = numerictype(15)[], 16日;hpfir。OutputDataType =“自定义”;hpfir。CustomOutputDataType = numerictype(15)[], 16日;hpfir。RoundingMethod =“最近的”;
cfir = [-0.0007 -0.0009 0.0039 0.0120 0.0063 -0.0267 -0.0592 -0.0237…0.1147 0.2895 0.3701 0.2895 0.1147 -0.0237 -0.0592 -0.0267…0.0063 0.0120 0.0039 -0.0009 -0.0007);
hcfir = dsp。cfir FIRInterpolator (2);hcfir。FullPrecisionOverride = false;hcfir。CoefficientsDataType =“自定义”;hcfir。CustomCoefficientsDataType = numerictype ([], 16);hcfir。ProductDataType =“自定义”;hcfir。CustomProductDataType = numerictype(31)[], 31日;hcfir。AccumulatorDataType =“自定义”;hcfir。CustomAccumulatorDataType = numerictype(15)[], 16日;hcfir。OutputDataType =“自定义”;hcfir。CustomOutputDataType = numerictype(15)[], 16日;hcfir。RoundingMethod =“最近的”;
hcic = dsp。CICInterpolator (32 1 5);hcic。FixedPointDataType =“最低部分单词长度”;hcic。OutputWordLength = 20;
2。使用这些过滤器创建一个级联滤波器。
hduc = dsp。FilterCascade (hpfir hcfir hcic);
级联滤波器的频率响应是如下图所示。
fvtool (hduc“算术”,“固定”);
生成HDL代码
级联滤波器时准备好,生成DUC使用过滤器设计高密度脂蛋白HDL代码编码功能generatehdl
,属性“AddPipelineRegisters”设置为“上”。
generatehdl (hduc“名字”,“hdlduc”,“AddPipelineRegisters”,“上”,“InputDataType”15)numerictype(16日);
这个选项插入管道寄存器之间的过滤阶段,允许生成过滤器合成在一个更高的时钟频率。
如果你没有滤波器设计高密度脂蛋白编码器,您可以使用预生成的HDL文件在当前目录中。
建立了FPGA设计软件
在使用FPGA-in-the-Loop之前,确保你的系统环境访问FPGA设计软件的设置正确。您可以使用函数hdlsetuptoolpathFPGA设计软件添加到当前MATLAB系统路径。
配置和构建FPGA-in-the-Loop
费尔向导指导您在构建FPGA-in-the-Loop所需的配置设置。用以下命令启动向导:
filWizard
1。在硬件选项,选择FPGA开发板连接到您的主机电脑。如果有必要,你也可以定制高级选项下的董事会IP和MAC地址。单击*下一个”继续。
2。在源文件中,添加以下DUC HDL生成文件的源文件表使用浏览。
hdlduc.vhdhdlduc_stage1.vhd hdlduc_stage2.vhd hdlduc_stage3.vhd
选择顶级旁边的复选框hdlduc.vhd
。单击*下一个”继续。
3所示。DUT的I / O端口的输入和输出端口信息,如端口名称、方向、宽度和高密度脂蛋白的端口类型是自动生成的文件。端口类型,如时钟和数据,生成基于端口的名称;你可能在必要时改变选择。对于这个示例,生成的端口类型是正确的,你可以点击下一个。
4所示。在Build选项,指定费尔输出文件的文件夹。您可以使用这个例子的默认值。点击构建。点击构建使费尔FPGA-in-the-Loop模拟向导来生成所有必需的文件和执行以下操作:
生成一个费尔块在一个新的模型®模型金宝app
打开一个命令行窗口编译FPGA项目和生成FPGA编程文件
FPGA项目编译过程需要几分钟。当这个过程完成后,系统提示您关闭命令行窗口。现在关闭这个窗口。
配置费尔块
准备FPGA-in-the-Loop模拟,遵循以下步骤配置费尔块。
1。打开开放模式按钮打开试验台模型和生成的费尔块复制到模型。
2。双击费尔块打开块面具。点击负载编程的FPGA编程文件生成的。
3所示。在运行时选项下,改变超频的因素到128年。这指定一个输入值由FPGA时钟采样128次之前输入的变化值。
4所示。在费尔块面具,单击信号属性选项卡。改变filter_out的数据类型1)fixdt(20日
匹配的数据类型行为过滤块。
5。点击好吧关闭块面具。
验证生成过滤器
在本例中,生成的过滤器运行在FPGA与行为过滤块。延迟被添加到行为的输出滤波器与高密度脂蛋白延迟生成的过滤器。
模拟运行。观察输出波形从行为过滤块,费尔块和误差。因为行为过滤块没有管道寄存器,有小差异行为过滤块输出和费尔块输出。这些错误是在误差范围内。
这个总结的例子。