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

news2025/3/13 18:01:56

文章灵感来源于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-point
    DT_input = fixdt(1,16,14);
    DT_filter = fixdt(1,18,15);
    DT_coeff = fixdt(1,18);
    DT_power = fixdt(1,18,11);
else  % floating-point
    DT_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;
    else
        detected = 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.coloradmin.cn/o/1520702.html

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

相关文章

电脑文件守护者:揭秘文件自动备份的重要性与实用方案

在信息爆炸的时代&#xff0c;电脑已成为我们生活和工作中不可或缺的重要工具。而存储在电脑中的文件&#xff0c;无论是工作文档、学习资料还是个人照片&#xff0c;都承载着我们的珍贵记忆和辛勤付出。然而&#xff0c;电脑故障、病毒感染、人为误操作等因素都可能导致文件丢…

Chrome的V8引擎 和操作系统交互介绍

Chrome的V8引擎是一个用C编写的开源JavaScript和WebAssembly引擎&#xff0c;它被用于Chrome浏览器中&#xff0c;以解释和执行JavaScript代码。V8引擎将JavaScript代码转换为机器代码&#xff0c;这使得JavaScript能够以接近本地代码的速度运行。 V8引擎与操作系统的交互主要体…

力扣大厂热门面试算法题 30-32

30. 串联所有单词的子串&#xff0c;31. 下一个排列 &#xff0c;32. 最长有效括号&#xff0c;每题做详细思路梳理&#xff0c;配套Python&Java双语代码&#xff0c; 2024.03.15 可通过leetcode所有测试用例。 目录 30. 串联所有单词的子串 解题思路 完整代码 Java …

UE5.1 iClone8 正确导入角色骨骼与动作

使用iClone8插件Auto Setup 附录下载链接 里面有两个文件夹,使用Auto Setup C:\Program Files\Reallusion\Shared Plugins 在UE内新建Plugins,把插件复制进去 在工具栏出现这三个人物的图标就安装成功了 iClone选择角色,导入动作 选择导出FBX UE内直接导入 会出现是否启动插件…

SpringBoot集成Redisson实现接口限流

系列文章目录 文章目录 系列文章目录前言前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Dat…

由浅到深认识C语言(8)

该文章Github地址&#xff1a;https://github.com/AntonyCheng/c-notes 在此介绍一下作者开源的SpringBoot项目初始化模板&#xff08;Github仓库地址&#xff1a;https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址&#xff1a;https://blog.csdn…

AHU 汇编 实验六

一、实验名称&#xff1a;实验6 输入一个16进制数&#xff0c;把它转换为10进制数输出 实验目的&#xff1a; 培养汇编中设计子程序的能力 实验过程&#xff1a; 源代码&#xff1a; data segmentbuff1 db Please input a number(H):$buff2 db 30,?,30 dup(?),13,10buff3 …

PytorchAPI的使用及在GPU的使用和优化

API 调用API&#xff1a;和手动实现的思路是一样的。#1&#xff0c;#2这两个步骤是通用的步骤&#xff0c;相当于建立一个模型&#xff0c;之后你具体的数据直接丢进去就行了。只需要按着这样的样式打代码就行&#xff0c;死的东西&#xff0c;不需要你自己创造。 import torc…

力扣串题:反转字符串

特殊思路&#xff1a;k的重新赋值&#xff1a;当再加就超过字符串的长度时&#xff0c;需要把k变为字符串的剩余长度&#xff0c;不必理会当剩余长度介于k和2k之间的部分 char* reverseStr(char* s, int k) {for(int i0;i<strlen(s);ii2*k){kik>strlen(s)? strlen(s)-i…

三维卡通数字人解决方案,支持unity和Maya

企业对于品牌形象和宣传手段的创新需求日益迫切&#xff0c;美摄科技凭借其在三维卡通数字人领域的深厚积累&#xff0c;推出了面向企业的三维卡通数字人解决方案&#xff0c;帮助企业轻松打造独具特色的虚拟形象&#xff0c;提升品牌影响力和市场竞争力。 美摄科技的三维卡通…

服务器遭遇挖矿病毒syst3md及其伪装者rcu-sched:原因、症状与解决方案

01 什么是挖矿病毒 挖矿病毒通常是恶意软件的一种&#xff0c;它会在受感染的系统上无授权地挖掘加密货币。关于"syst3md"&#xff0c;是一种特定的挖矿病毒&#xff0c;它通过在受感染的Linux系统中执行一系列复杂操作来达到其目的。这些操作包括使用curl从网络下载…

汇总全网免费API,持续更新(新闻api、每日一言api、音乐。。。)

Public&FreeAPI 网址&#xff1a;apis.whyta.cn &#xff08;推荐&#xff09; UomgAPI 网址&#xff1a;https://api.uomg.com 教书先生 网址&#xff1a;https://api.oioweb.cn/ 山海API https://api.shserve.cn/ 云析API铺 https://api.a20safe.com/ 韩小韩…

AI智能分析网关V4将HTTP消息推送至安防监控视频汇聚EasyCVR平台的操作步骤

TSINGSEE青犀视频智能分析网关V4内置了近40种AI算法模型&#xff0c;支持对接入的视频图像进行人、车、物、行为等实时检测分析&#xff0c;上报识别结果&#xff0c;并能进行语音告警播放。硬件管理平台支持RTSP、GB28181协议、以及厂家私有协议接入&#xff0c;可兼容市面上常…

AI_寻路系统_基本寻路

学习笔记&#xff0c;仅供参考&#xff01; 1、创建了一个新的第三人称项目&#xff0c;重命名为navsystem1. 2、将使用 寻路网格体边界体积&#xff08;Navigation Mesh Bounds Volume&#xff09; 来指定关卡中需要生成寻路的区域。代理将使用此信息在关卡中到达目的地。搜索…

浏览器同源策略及跨域问题

同源策略&#xff1a;同源策略是一个重要的安全策略&#xff0c;它用于限制一个源的文档或者它加载的脚本如何能与另一个源的资源进行交互。它能帮助阻隔恶意文档&#xff0c;减少可能被攻击的媒介。 同源策略的作用&#xff1a;保护浏览器中网站的安全&#xff0c;限制ajax只…

汽修门店管理系统,打造高效汽修服务【汽修店软件管理系统】

在汽车后市场&#xff0c;汽修门店的运营效率直接影响着客户的满意度和店铺的利润。为了提升服务质量和工作效率&#xff0c;越来越多的汽修店开始引入汽修门店管理系统。那么&#xff0c;如何搭建汽修店软件管理系统&#xff0c;汽修门店管理系统怎么使用。 首先&#xff0c;我…

python基础——元组【特点,创建,常见操作方法:index,len,count】

&#x1f4dd;前言&#xff1a; 上一篇文章python基础——列表讲解了关于列表的先关知识&#xff0c;还介绍了很多列表的常见操作方法&#xff0c;这篇文章我们就基于上篇文章带大家认识的有关序列的知识&#xff0c;继续讲解python中另一种常见的数据容器——元组&#xff1a;…

(学习日记)2024.03.12:UCOSIII第十四节:时基列表

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

分布式与集群,二者区别是什么?

&#x1f413;分布式 分布式系统是由多个独立的计算机节点组成的系统&#xff0c;这些节点通过网络协作完成任务。每个节点都有自己的独立计算能力和存储能力&#xff0c;可以独立运行。分布式系统的目标是提高系统的可靠性、可扩展性和性能。 分布式服务包含的技术和理论 负…