• 从零开始利用MATLAB进行FPGA设计(三)将Simulink模型转化为定点数据类型


    文章灵感来源于MATLAB官方免费教程:HDL Coder Self-Guided Tutorial

    考虑到MATLAB官网的英文看着慢,再加上视频讲解老印浓浓的咖喱味,我决定记录利用MATLAB&Simulink&SystemGenerator进行FPGA数字信号处理的学习过程。

    往期回顾:

    从零开始利用MATLAB进行FPGA设计(一):建立脉冲检测模型的Simulink模型1

    从零开始利用MATLAB进行FPGA设计(一):建立脉冲检测模型的Simulink模型2

    从零开始利用MATLAB进行FPGA设计(二)用于HDL代码生成的Simulink模型并用于流水线设计

    目录

    1.定点数据类型(fixed point)

    2.在Simulink中修改数据类型

    2.1数据转化块Data Type Conversion

    2.2滤波器的数据类型

    2.3Data Type Duplicate模块

    3.fixed-point tool

    3.1定点工具中的迭代转换


    1.定点数据类型(fixed point)

    简单来说浮点数据类型以指数形式表示数字,定点数字类型通过指定小数点的位置表示数字。用浮点数表示很大的小数时会出现不精确的情况,定点数虽然可以表示的范围较小,但表示小数更精确。

    MATLAB和Simulink中的数字默认为64位双精度浮点数据类型,而要在FPGA上进行浮点运算需要设计浮点运算器(FPU),将信号转换成定点数据类型可以减少FPGA上的硬件资源和计算步骤。

    MATLAB中定点数据类型由字的大小(以位为单位)、二进制小数点的位置以及是否带符号组成。

    fixdt(1,18,14)

    表示:

    “1”表示有符号,“18”表示18位二进制数,“14”表示14位小数。若:

    fixdt(1,18,0)

    则等效为int(18).

    在test bench中对数据类型进行了规范:

    1. if fxpt_mode % fixed-point
    2. DT_input = fixdt(1,16,14);
    3. DT_filter = fixdt(1,18,15);
    4. DT_coeff = fixdt(1,18);
    5. DT_power = fixdt(1,18,11);
    6. else % floating-point
    7. DT_input = 'double';
    8. DT_filter = 'double';
    9. DT_coeff = 'double';
    10. DT_power = 'double';

    2.在Simulink中修改数据类型

    首先介绍如何手动一步一步更改模型中的数据类型为我们想要的类型。

    2.1数据转化块Data Type Conversion

    Data Type Conversion模块可将任何Simulink数据类型的输入信号转换为您指定的数据类型。将输入信号的数据类型转化为定点型:

    2.2滤波器的数据类型

    将FIR中系数的Data Type设置为规范好的定点型,它将以全精度定点数据类型执行加法和乘法。

    输入信号在匹配滤波器进行卷积运算后输出40位定点类型数据,在进行平方操作前将数据的位数转化为十八位,以便映射到FPGA上的单个DSP slice。

    2.3Data Type Duplicate模块

    Data Type Duplicate模块强制所有输入具有相同的数据类型,数据的其他属性(例如维度、采样时间等)保持独立。通常使用Data Type Duplicate模块将信号的数据类型更改为其中一个信号的数据类型。

    在峰值定位模块中将Data Type Duplicate模块连接到threshold和寄存器的输出上,threshold模块的输出设置为“Inherit via back propagation”。在MATLAB函数块中比较两个信号时,Simulink要求信号的类型和维度相同:

    在Unit Delay Enable中信号必须时布尔类型,所以将函数块中检测到的值分别更改为true和false:

    1. if all(CompareOut <= 0) && (MidSample > threshold)
    2. detected = true;
    3. else
    4. detected = false;
    5. end

    3.fixed-point tool

    在上述操作中进行的是手动转化数据类型,在复杂的设计中也可以通过fixed-point tool进行设计。fixed-point tool会运行仿真并收集所需的数据范围和精度、推荐定点数据类型、接受调整应用和运行。

    定点工具提供三种工作流程:

    分别是自动转换模型为定点数据类型(一步到位)、提出建议以供手动选择数据类型(多次迭代)、在转换前(后)分析数值。

    3.1定点工具中的迭代转换

    由于使用一步到位的转换方式没有成功,本文简单介绍迭代转化数据类型的方法。

    启动定点转换工具后选择希望进行转化的仿真和子系统,点击Prepare创建模型的备份版本,选择适用于FPGA的硬件实现。

    点击collect range模拟正在设计的系统,并进行数据类型覆盖

    统计的数据摘要包含已编译的数据类型(CompiledDT)、指定的数据类型(SpecifiedDT)。

    在设置中可以配置数据类型建议:

    要将已经储存的理想结果与新的定点数据类型进行比较,点击Compare Results打开仿真数据检查器:

    可以查看已经匹配的信号和未完成匹配的信号。

    如果转换后的系统的行为不符合您的要求,或者您希望探索其他数据类型选择的效果,则可以在应用新的建议设置后提出新的数据类型。继续迭代,直到找到系统的定点行为可以接受的设置。

    转换过程结束后,如果要将模型恢复到转换过程开始时的状态,单击“还原原始模型”。在转换的准备阶段之后对模型所做的任何更改都将被删除。

    上述工作全部完成后,运行Pulse detector test bench (step 3),查看仿真结果与黄金法则的对比输出:

  • 相关阅读:
    大学毕业后,我就送了2个月外卖,哭了一整晚
    如何评价自己的研究工作是否有价值
    中小企业建设数字化工厂,选择集成还是重构
    Vue 3 中的 Composition API 详解
    npm 操作报错记录1- uninstall 卸载失效
    P8198 [传智杯 #4 决赛] 背单词的小智 —二分答案
    Flink(林子雨慕课课程)
    Android 12 Bluetooth源码分析蓝牙配对
    【chatGPT API】Function Calling:将自然语言转换为API调用或数据库查询
    终于有人说清楚了Cookie、Session、Token的区别。详解,面试题
  • 原文地址:https://blog.csdn.net/WZT725/article/details/136728230