主要内容

fpga Range-Doppler处理,算法设计和HDL代码生成

这个例子展示了如何设计一个range-Doppler反应准备FPGA(现场可编程门阵列)实现。这个例子与FPGA实现匹配相应的行为模型在仿真软件®使用相控阵系统工具箱™。金宝app

验证功能的硬件实现模型的正确性,为例比较了仿真模型的输出结果的行为模型。这个词在这里部署意味着设计一个模型,该模型适用于在一个FPGA实现。验证了模型部署就绪,这种情况的例子。硬件使用定点数据类型的实现设计。

相控阵系统工具箱提供了浮点range-Doppler响应通过行为模型phased.RangeDopplerResponse系统对象™。这个行为模型用于验证实现模型的正确性。

定点设计师™提供数据类型和工具发展中定点和单精度算法优化性能在嵌入式硬件。Bit-true模拟可以观察执行有限的范围和精度的影响没有实现硬件的设计。

这个示例使用HDL编码器™生成HDL代码开发了仿真软件模型和验证使用高密度脂蛋白HDL代码校验™工具。金宝app高密度脂蛋白验证器是用来生成一个cosimulation试验台模型验证HDL代码自动生成的行为。testbench使用ModelSim®的cosimulation HDL代码生成。

Range-Doppler响应算法

phased.RangeDopplerResponse使用该算法系统对象生成range-Doppler响应。

  1. 夏令时间维度:过滤器匹配滤波器的信号产生响应范围。匹配滤波器是滤波器的系数设置为time-reverse副本传送信号。

  2. 标准时间维度:计算FFT生成多普勒回应。

输入数据是一个矩阵M×N的值,其中M细胞的数量,N是脉冲的数量。计算响应范围,使用一个冷杉过滤整个行(夏令时间)和计算FFT在列(标准时间)。

硬件实现模型

这个例子中重用输入数据和参数的例子phased.RangeDopplerResponse参考页面的例子。

信号通过Serializer1D进行序列化和反序列化和Deserializer1D块,分别。这些块输入和输出约束代码生成,所以设定FFT长度为64,使用输入数据多维数据集的一个子集。

实现模型使用一个32位字长和一小部分的长度31位。

通过使用该命令打开金宝app仿真软件模型。

modelname =“金宝appSimulinkRangeDopplerProcessingHDLWorkflowExample”;open_system (modelname);%确保模型是可见的范围,而不是阻碍集(allchild (0)“可见”,“关闭”);

仿真软件金宝app模型包括两个分支从输入块。顶端分支的浮点操作的行为模型phased.RangeDopplerResponse系统对象。底部分支的功能与使用定点数据类型实现模型,设计了模块支持HDL代码生成模型的HDL编码库。金宝app金宝app

输入和产生的系数是range-Doppler示例数据。输入是一个M×N的矩阵,其中M细胞的数量范围(夏令时间维度)和N是脉冲的数量(标准时间维度)。的输出phased.RangeDopplerResponse对象是一个M-by-L矩阵,其中M范围内细胞的数量和L是FFT长度。因为实现模型的输入和输出数据流,输入被序列化和量化序列化和数字转换子系统和输出反序列化成range-Doppler矩阵映射的输出反序列化和Dequantize子系统。

预处理和后处理的数据

打开序列化和数字转换子系统。

open_system ([modelname/序列化和数字转换])

输入数据是在适应冷杉过滤器延迟通过使用矩阵连接块。然后序列化的数据Serializer1D块用于级联的重塑和数据类型转换(定点量化)。

open_system ([modelname“/反序列化和Dequantize”])

该子系统使用Deserializer1D块使用的数据类型和重塑块转换为输出流转换为一个range-Doppler地图。

匹配滤波范围处理子系统

open_system ([modelname“/ RangeDopplerResponseHDL /匹配滤波-范围处理”])

输入流处理与离散冷杉滤波器块匹配系数的夏令时间(行)尺寸范围的响应。块适合硬件实现和延迟7个周期。寄存器的冷杉过滤器必须重置为初始值为0的每一行。这个执行重置通过使用一个布尔值方波实现使用一个计数器和一个比较恒定的块。

缓冲& Transpose-Column

打开缓冲& Transpose-Column子系统。

open_system ([modelname“RangeDopplerResponseHDL /缓冲和转置-列”])

range-processed数据反序列化使用级联Deserializer1D块和与重塑块转换为矩阵形式。这个数据现在是零填充和转置计算FFT在标准时间(列)维度。现在range-processed和转置数据序列化了FFT计算(多普勒处理)。

FFT-Doppler处理

打开FFT-Doppler处理子系统。

open_system ([modelname/ RangeDopplerResponseHDL / FFT -多普勒处理的])

流(在列)数据的FFT计算使用FFT块173周期的延迟。流基数2 ^ 2体系结构使用FFT长度为64。

Buffer-FFT转变

打开Buffer-FFT转变子系统。

open_system ([modelname“/ RangeDopplerResponseHDL /缓冲- FFT转变”])

Doppler-processed串行数据反序列化使用Deserialized1D块和转置。FFT-processed数据需要重新安排zero-centric光谱数据,由使用选择器的组合模拟块和一个矩阵连接。

序列化输出

打开序列化输出子系统。

open_system ([modelname“RangeDopplerResponseHDL /序列化输出”])

range-Doppler地图数据处理后在形式的一个矩阵,然后序列化使用重塑和Serializer1D块的输出流。

实现模型和行为模型的比较结果

通过单击模拟模型按钮或使用sim卡命令。

sim (modelname);

验证功能实现模型的正确性,减去行为模型的响应矩阵的响应矩阵实现模型和检查差异(误差)是接近于零(或者,在量化的实现模型)。

导出的响应数据从仿真软件MATLAB®工作区,数组中的格式。金宝app减去行为反应向量实现模型响应,重塑误差矩阵为一个一维数组,和情节元素的误差指数y轴的轴和错误。使用显示亮度图像函数显示range-Doppler地图。使用下面的脚本和错误的响应。

%取消注释以下行代码可视化响应%行为输出behavioralResponse = out.RangeDopplerResponseBehavioral (:: 1);%响应从工作空间块behavioralResponsedB = mag2db (abs (behavioralResponse));%转换为数据库rangeGrid = out.RangeGrid (:, 1, 1);%范围网格dopplerGrid = out.DopplerGrid (:, 1, 1);%多普勒网格
%可视化range-Doppler(行为)的地图
f1 =图(1);%图处理f1。Name =“行为”;%图名称fax1 =轴;%轴处理显示亮度图像(fax1 dopplerGrid、rangeGrid behavioralResponsedB)
包含(fax1“多普勒”);ylabel (fax1“范围”)标题(fax1的行为反应)
% HDL输出idx =找到(out.Valid);%寻找有效的输出HdlResponse = out.RangeDopplerResponseHdl (:,:, idx (1));%响应从工作空间块HdlResponsedB = mag2db (abs (HdlResponse));%转换为数据库
%可视化range-Doppler (HDL)地图
f2 =图(2);%图处理f2。Name =“高密度”;%图名称fax2 =轴;%轴处理显示亮度图像(fax2 dopplerGrid、rangeGrid HdlResponsedB);%使用行为输出的范围和多普勒网格
包含(fax2“多普勒”)ylabel (fax2“范围”)标题(fax2“HDL响应”)
%的错误%减去HDL的行为反应的反应errorMatrix = abs (HdlResponse - behavioralResponse);%矩阵减去
%的误差矩阵转换成一个行向量,可以得到二维轴
errorStream =重塑(errorMatrix 1 []);%误差矩阵转换为一维,行明智
%的指数和高密度脂蛋白和行为的结果之间的最大误差
Ymax = max (errorStream);%找到最大误差Xmax =找到(errorStream = = Ymax);%找到最大误差的指标
%绘制误差在2 d情节和注释的最大错误% HDL和行为反应之间的关系。f3 =图(3);%图处理f3。Name =“错误”;%图名称fax3 =轴;%轴处理情节(fax3 errorStream)%的阴谋
ylabel (fax3“错误”);包含(fax3“数据点指数”)标题(fax3的行为和高密度脂蛋白之间的误差模型);
textstr = strcat (“ErrorMax = 'num2str (Ymax));文本(fax3、Xmax Ymax textstr);

数据显示range-Doppler地图之间的错误行为和实现模型。

代码生成和验证

本节讨论的过程生成HDL代码range-Doppler响应实现模型和验证功能的正确性。行为模型提供了参考价值,以确保高密度脂蛋白的输出模型是在公差范围内。基于仿真软件模型在前面的部金宝app分中描述的设置,实现模型的目的是使用定点运算块支持HDL代码生成。金宝app另外,如果你开始一个新的模型,您可以运行hdlsetup功能配置的仿真软件模型HDL代码生成。金宝app配置模型试验台模型创建、打开金宝app模型设置中,选择试验台HDL代码生成在左边面板中,并检查高密度脂蛋白试验台Cosimulation模型试验台生成输出属性组。

模型设置

后定点实现验证和实现模型产生相同的结果作为浮点行为模型,您可以生成HDL代码和试验台。对于代码生成和试验台,设置这些HDL代码生成的参数配置参数对话框。模型中设置以下参数设置在HDL代码生成:

  • 目标:Xilinx Vivado合成工具;Virtex7家庭;设备xc7vx485t;包ffg1761速度1;和目标300 MHz的频率。

  • 优化:清除所有优化。

  • 全局设置:将重置类型设置为异步的。

  • 试验台:选择高密度脂蛋白试验台、Cosimulation模型和系统Verilog DPI试验台。

使用Cosimulation HDL代码验证

模型建立后,使用高密度脂蛋白工作流顾问生成使用高密度脂蛋白HDL代码编码工具,并生成一个系统使用HDL Verilog DPI试验台测试模型验证器。高密度脂蛋白工作流顾问开始,右键单击RangeDopplerResponseHDL子系统,导航到HDL代码,然后单击高密度脂蛋白工作流顾问。或者,您可以使用这些命令来生成代码和系统Verilog HDL试验台。

% makehdl ([modelname ' / RangeDopplerResponseHDL ']);%生成HDL代码% makehdltb ([modelname ' / RangeDopplerResponseHDL ']);%生成Cosimulation试验台

后生成HDL代码和测试台上,一个新的仿真软件模型命名金宝appgm_ < modelname > _mq包含一个ModelSim®Cosimulation块创建在您的工作目录中。这个图显示生成的模型。

打开试验台模型使用这些命令。

modelname % modelname = [' gm_ ', ' _mq '];% open_system (modelname);

ModelSim发射和运行cosimulation模型显示仿真结果。您可以单击播放按钮运行测试的长椅上,或者你可以通过命令窗口使用以下命令运行它。

% sim (modelname);

Simu金宝applink仿真试验台模型配置QuestaSim®与高密度脂蛋白的信号模型和仿真软件的时间范围。

试验台范围显示复数的输出响应向量实现模型和cosimulation输出以及两者之间的错误输出。

定点字长(精度)和资源利用的权衡

这个示例使用一个32位字长和一小部分长度的31位设计、仿真和实现。有权衡与提高数据精度对资源的利用率。

这个图显示了字长精度对。

下一个图显示了片附近地区利用单词的长度。

下一个图显示了片寄存器利用率对单词长度。

下一个图显示了DSP块利用单词的长度。

下一个图显示了块RAM瓷砖利用率对单词长度。

总结

这个示例演示了一个工作流设计的仿真软件模型hardware-compatible range-Dopple金宝appr响应块,并验证结果与一个等价的行为从相控阵系统设置工具箱。示例还显示了如何生成一个定点的HDL代码实现和验证模型的生成的代码功能的正确性。金宝app这个例子展示了如何设置和启动ModelSim co-simulate HDL代码并比较其输出到输出生成的HDL实现模型。cosimulation ModelSim用于HDL代码仿真和比较结果输出生成的实现模型。