当前位置: 首页 > news >正文

从零开始利用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中对数据类型进行了规范:

if fxpt_mode  % fixed-pointDT_input = fixdt(1,16,14);DT_filter = fixdt(1,18,15);DT_coeff = fixdt(1,18);DT_power = fixdt(1,18,11);
else  % floating-pointDT_input = 'double';DT_filter = 'double';DT_coeff = 'double';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:

    if all(CompareOut <= 0) && (MidSample > threshold)detected = true;elsedetected = false;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),查看仿真结果与黄金法则的对比输出:

相关文章:

  • C# RAM Stable Diffusion 提示词反推 Onnx Demo
  • 基于 Spark 的电商用户行为分析系统
  • AI智能分析网关V4将HTTP消息推送至安防监控视频汇聚EasyCVR平台的操作步骤
  • 大语言模型(LLM)Token 概念
  • 如何配置Apache的反向代理
  • Linux动态库*.so函数名修改
  • 动态规划 Leetcode 377 组合总和IV
  • 记事小本本
  • web学习笔记(三十三)
  • 基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的稻田虫害检测系统详解(深度学习+Python代码+UI界面+训练数据集)
  • Pytorch搭建AlexNet 预测实现
  • 分布式调用与高并发处理(二)| Dubbo
  • 单片机FLASH深度解析和编程实践(上)
  • PHP异世界云商系统开源源码
  • linux中tar归档与(zip,gzip,bzip格式)压缩和解压
  • [ JavaScript ] 数据结构与算法 —— 链表
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 345-反转字符串中的元音字母
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • JavaScript设计模式与开发实践系列之策略模式
  • java多线程
  • JAVA多线程机制解析-volatilesynchronized
  • js写一个简单的选项卡
  • Protobuf3语言指南
  • Shell编程
  • 产品三维模型在线预览
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 初识MongoDB分片
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 解决iview多表头动态更改列元素发生的错误
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 设计模式 开闭原则
  • 写给高年级小学生看的《Bash 指南》
  • 一个JAVA程序员成长之路分享
  • 移动端 h5开发相关内容总结(三)
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 怎样选择前端框架
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • (0)Nginx 功能特性
  • (03)光刻——半导体电路的绘制
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (附源码)计算机毕业设计大学生兼职系统
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (转)德国人的记事本
  • (转载)深入super,看Python如何解决钻石继承难题
  • (轉貼) UML中文FAQ (OO) (UML)
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .gitignore文件设置了忽略但不生效
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .net core控制台应用程序初识
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .NET 中 GetProcess 相关方法的性能
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • ?