从零开始利用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),查看仿真结果与黄金法则的对比输出:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/748239.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是响应式设计?响应式设计的基本原理是什么?如何做?

文章目录 一、是什么二、实现方式媒体查询百分比vw/vhrem小结 三、总结参考文献 一、是什么 响应式网站设计&#xff08;Responsive Web design&#xff09;是一种网络页面设计布局&#xff0c;页面的设计与开发应当根据用户行为以及设备环境(系统平台、屏幕尺寸、屏幕定向等)…

软考高级:BPR 和 BPM概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

【四 (1)数据可视化之如何选用正确的图表】

目录 文章导航一、数据分析中可视化的作用1、揭示数据关联和模式2、支持数据分析和决策3、提升沟通和共享效果4、强调关键信息和发现5、增强故事叙述和记忆效果6、有效增强数据交互性数据7、复杂信息易理解8、数据多维度显示 二、如何选用合适的图表1、简洁性避免使用过于复杂或…

软考高级:企业应用集成概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

八 超级数据查看器   讲解稿   详情3  分享和外观

八 超级数据查看器 讲解稿 详情3 分享和外观 app下载地址 下载地址4 ​ 讲解稿全文&#xff1a; 第3讲 分享 顶栏颜色 外观设置 现在讲解分享功能。点击&#xff0c;会打开分享对话框&#xff0c;我们这里演示2个&#xff0c;可以按照标题做出分享&#xff0c;在第一组…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:Badge)

可以附加在单个组件上用于信息标记的容器组件。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 支持单个子组件。 说明&#xff1a; 子组件类型&#xff1a;系统组件和自定义组件&#xf…

异次元发卡源码系统/荔枝发卡V3.0二次元风格发卡网全开源源码

– 支付系统&#xff0c;已经接入易支付及Z支付免签接口。 – 云更新&#xff0c;如果系统升级新版本&#xff0c;你无需进行繁琐操作&#xff0c;只需要在你的店铺后台就可以无缝完成升级。 – 商品销售&#xff0c;支持商品配图、会员价、游客价、邮件通知、卡密预选&#…

腾讯在线文档下载文档html格式

腾讯在线文档下载文档html格式 步骤 chrome 浏览器打开该文档&#xff08;edge不行&#xff09; 同时按住ctrlp快捷键调出腾讯文档内置的打印页面&#xff0c;打印范围要选择整个工作薄&#xff0c;纸张建议调大一点&#xff0c;边距建议较窄&#xff0c;缩放要选择宽度撑满&…

“风口”上的量化大厂“绣球”抛向中低频人才

量化人才这几年是人才舞台上的“香饽饽”。 遵循着低频不如高频、小厂不如大厂的薪资逻辑&#xff0c;各路人才被各路机构“哄抢”&#xff0c;薪资一路走高。 但2024年的“信号”再强烈不过——量化大厂们到了改变的时候了。 而量化大厂们显然对此已“心知肚明”....... “…

空气源热泵、地源热泵和水源热泵三种热泵的优缺点和选型比较

空气源热泵 空气源热泵是由电动机驱动的,利用空气中的热量作为低温热源,经过空调冷凝器或蒸发器进行热交换,然后通过循环系统,提取或释放热能,利用机组循环系统将能量转移到建筑物内用户需求。 1、适用范围广:适用温度范围在-7至40℃,并且一年四季全天候使用,不受阴、…

软件测试 —— 案例系统缺陷报告

知识&#xff1a; 1、缺陷等级&#xff1a; 1-Urgent(致命错误)&#xff1a;影响全局的死机、通信中断、重要业务不能完成 2-Very High(严重错误)&#xff1a;规定的功能没有实现或不完整或产生错误结果&#xff1b;使系统不稳定、或破坏数据等 3-High(一般错误)&#xff1a;…

Github 2024-03-16 Rust开源项目日报 Top10

根据Github Trendings的统计,今日(2024-03-16统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10TypeScript项目2Go项目1RustDesk: 用Rust编写的开源远程桌面软件 创建周期:1218 天开发语言:Rust, Dart协议类型:GNU Affero Gene…

NCDA大赛中哪些HTML5设计作品展现出色?

与传统的HTML网页设计相比&#xff0c;HTML5网页设计主要是对网页内容的加强。HTML5已成为目前最流行的标记语言&#xff0c;拥有成熟的社区和广泛的浏览器支持&#xff0c;HTML5完整的功能和强大的扩展性使设计师和开发者能够点铁成金。HTML5可以一手控制更多可控元素&#xf…

【AI+应用】一步步搭建聊天机器人搭配多种国内外大模型以及api接口调用

如果你看过我之前写的一篇文章 【AI应用】怎么快速制作一个类chatGPT套壳网站&#xff0c; 你可能顺利地使用chatGPT、Gemini&#xff0c; 用得很happy。 突然有一天&#xff0c;你发现一些网站&#xff0c;除了chatGPT、Gemini &#xff0c;还可以切换使用国内外其他的大模型…

Pulsar 社区周报 | No.2024.03.15 LTS 3.0.3 新版发布

“ 各位热爱 Pulsar 的小伙伴们&#xff0c;Pulsar 社区周报更新啦&#xff01;这里将记录 Pulsar 社区每周的重要更新&#xff0c;周五发布。 ” 本期主题&#xff1a;LTS 3.0.3 发布 Apache Pulsar 新版发布&#xff1a; LTS&#xff08;稳定性长期支持版&#xff09;新版&am…

SpringMVC基础之工作流程

文章目录 SpringMVC 的工作流程1. 总图2. DispatcherServlet3. 必需的配置4. 加载配置文件的两个时机5. 定义控制器6. 创建 JSP 视图 SpringMVC 的工作流程 1. 总图 如上图&#xff0c;Spring MVC 程序的完整执行流程如下&#xff1a; 用户通过浏览器发送请求&#xff0c;请求…

Docker 系列2【docker安装mysql】【开启远程连接】

文章目录 前言开始步骤1.增加mysql挂载目录2.下载镜像2.启动容器具体步骤4.无法连接5.测试连接 总结 前言 本文开始&#xff0c;默认已经安装docker&#xff0c;如果你还没有完成这个步骤&#xff0c;请查看这一篇文章【docker安装与使用】 开始步骤 1.增加mysql挂载目录 m…

【Unity】进度条和血条的三种做法

前言 在使用Unity开发的时候&#xff0c;进度条和血条是必不可少的&#xff0c;本篇文章将简单介绍一下几种血条的制作方法。 1.使用Slider Slider组件由两部分组成&#xff1a;滑动区域和滑块。滑动区域用于显示滑动条的背景&#xff0c;而滑块则表示当前的数值位置。用户可…

双线性插值缩放算法原理以及matlab与verilog的实现(二)

系列文章目录 双线性插值缩放算法原理以及matlab与verilog的实现&#xff08;一&#xff09; 文章目录 系列文章目录前言一、前提回顾二、FPGA实现步骤2.1 找到源图像四个像素点求目标像素点2.2 FPGA实现步骤2.3 总体框架2.4 ROM缓存模块2.5 VGA模块2.6 双线性算法模块 三、下…

mysql实战开发之 mysql 删除一张表某个字段的sql语句

有一张表, 我需要删除这张表其中的某一个或者某几个字段, 相信大家在日常开发中应该会遇到这种情况, 然后刚好自己接触的项目安装的mysql关闭了允许远程连接的设置, 也就是说不允许使用类似于navicat 等可视化工具连接, 那么就没办法通过可视化工具直接去通过鼠标操作就可以 完…