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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Miniconda】Linux系统中 .condarc 配置文件的位置一般在哪里

【Miniconda】Linux系统中 .condarc 配置文件的位置一般在哪里 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希望得到…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Span)

作为Text组件的子组件&#xff0c;用于显示行内文本的组件。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 该组件从API Version 10开始支持继承父组件Text的属性&#xff0c;即如果子组件未设置…

linux内存介绍

一、linux内存框图 二、meminfo信息说明 cat /proc/meminfo MemTotal: 2017504 kB //所有可用的内存大小&#xff0c; 物理内存减去预留位和内核使用。系统从加电开始到引导完成&#xff0c;firmware/BIOS要预留一 些内存&#xff0c;内核本身要占用一些内存&#xff0…

微信小程序云开发教程——墨刀原型工具入门(表单组件)

引言 作为一个小白&#xff0c;小北要怎么在短时间内快速学会微信小程序原型设计&#xff1f; “时间紧&#xff0c;任务重”&#xff0c;这意味着学习时必须把握微信小程序原型设计中的重点、难点&#xff0c;而非面面俱到。 要在短时间内理解、掌握一个工具的使用&#xf…

16.旋转图像

给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&…

【PyTorch】基础学习:在终端中打印当前虚拟环境下的Pytorch版本信息

【PyTorch】基础学习&#xff1a;在终端中打印或查看当前虚拟环境下的Pytorch版本信息 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程…

springboot 动漫周边商城的设计与实现

摘 要 二十一世纪我们的社会进入了信息时代&#xff0c;信息管理系统的建立&#xff0c;大大提高了人们信息化水平。传统的管理方式对时间、地点的限制太多&#xff0c;而在线管理系统刚好能满足这些需求&#xff0c;在线管理系统突破了传统管理方式的局限性。于是本文针对这一…

Selenium控制已运行的Edge和Chrome浏览器——在线控制 | 人机交互(详细启动步骤和bug记录)

文章目录 前期准备1. 浏览器开启远程控制指令&#xff08;1&#xff09;Edge&#xff08;2&#xff09;Chrome 2. 执行python代码&#xff08;1&#xff09;先启动浏览器后执行代码&#xff08;2&#xff09;通过代码启动浏览器&#xff08;3&#xff09;Bug问题记录1&#xff…

kubernetes部署集群

kubernetes部署集群 集群部署获取镜像安装docker[集群]阿里仓库下载[集群]集群部署[集群]集群环境配置[集群]关闭系统Swap[集群]安装Kubeadm包[集群]配置启动kubelet[集群]配置master节点[master]配置使用网络插件[master]node加入集群[node]后续检查[master]测试集群 集群部署…

力扣面试150 两数之和 II - 输入有序数组 双指针 HashMap

Problem: 167. 两数之和 II - 输入有序数组 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( 1 ) O(1) O(1) Code class Solution {public int[] twoSum(int[] numbers, int target) {int l 0;int r numbers.length-1;while(l < r){if(numbers[l] numbers[…

Javaweb--CSS

一&#xff1a;概述 CSS &#xff08;Cascading Style Sheet&#xff08;层叠样式表&#xff09;&#xff09;是一门语言&#xff0c;用于控制网页表现。 W3C标准规定了网页是由以下组成&#xff1a; 结构&#xff1a;HTML 表现&#xff1a;CSS 行为&#xff1a;JavaScrip…

git pull 报错: 在签出前,请清理存储库工作树

问题&#xff1a; 使用vscode 用git 拉取代码&#xff0c;提示&#xff1a;在签出前&#xff0c;请清理存储库工作树** 原因&#xff1a; git仓库上的代码和本地代码存在冲突了所以会报这个报错。 解决办法&#xff1a; ①git stash 先将本地修改存储起来 ②git pull 拉取远…

mac redis启动,redis哨兵模式,redis集群的相关命令

Homebrew安装的软件会默认在/usr/local/Cellar/路径下 redis的配置文件redis.conf存放在/usr/local/etc路径下 cd /usr/local/Cellar/redis/7.0.10. 存在 cd /usr/local/opt/redis/bin/redis-server. 目录存在 cd /usr/local/etc/redis.conf 存在。配置文件 复制文件 cp …

蓝桥杯单片机快速开发笔记——矩阵键盘

一、原理分析 二、示例框架 定义了四个位控制变量&#xff0c;用于控制键盘扫描时的行列信号。 在Scan_Keys()函数中&#xff0c;首先设置行列信号&#xff0c;将其中一个行信号置为0&#xff0c;另一个行信号置为1&#xff0c;同时将列信号置为1&#xff0c;用于扫描键盘按键…

LabVIEW电液伺服作动器

LabVIEW电液伺服作动器 随着工业自动化技术的快速发展&#xff0c;电液伺服作动器在各类精密控制领域得到了广泛应用。基于CRIO架构&#xff0c;利用LabVIEW软件开发了一套电液伺服作动器测控系统&#xff0c;实现了高精度的位移同步控制与测量&#xff0c;有效提高了系统的控…

【论文阅读】IEEE Access 2019 BadNets:评估深度神经网络的后门攻击

文章目录 一.论文信息二.论文内容1.摘要2.引言3.主要图表4.结论 一.论文信息 论文题目&#xff1a; BadNets: Evaluating Backdooring Attacks on Deep Neural Networks&#xff08;BadNets:评估深度神经网络的后门攻击&#xff09; 论文来源&#xff1a; 2019-IEEE Access …

力扣映射思辨题:赎金信

思路很简单&#xff1a;查到就改 bool canConstruct(char* ransomNote, char* magazine) {for(long x0;x<strlen(ransomNote);x){for(long y0;y<strlen(magazine);y){if(magazine[y]ransomNote[x]){ransomNote[x]1;magazine[y]1;break;}}}for(long x0;x<strlen(ranso…

Text-to-SQL 工具Vanna | 查看训练数据、删除训练数据

1.查看训练数据vn.get_training_data vn.get_training_data 源码如下&#xff0c;可以看到返回的是df格式的数据 abstractmethoddef get_training_data(self, **kwargs) -> pd.DataFrame:"""Example:pythonvn.get_training_data()This method is used to ge…

如何本地部署SeaFile文件共享服务并实现无公网IP访问内网本地文件

文章目录 1. 前言2. SeaFile云盘设置2.1 Owncould的安装环境设置2.2 SeaFile下载安装2.3 SeaFile的配置 3. cpolar内网穿透3.1 Cpolar下载安装3.2 Cpolar的注册3.3 Cpolar云端设置3.4 Cpolar本地设置 4.公网访问测试5.结语 1. 前言 现在我们身边的只能设备越来越多&#xff0c…

固态存储是未来|浅析SSD架构的演进与创新技术-2

除了性能和容量这两个最大的诉求外&#xff0c;其他的需求已经成为SSD现场架构的核心竞争力。 一是安全性&#xff1a;随着数据安全威胁日益严重&#xff0c;SSD的安全设计成为关键&#xff0c;包括提供单芯片硬件信任根、遵循FIPS140-3安全标准以及支持一次性可编程位字段来锁…