学会System Generator(8)Reinterpret和Convert详解

本文深入探讨了FPGA设计中SystemGenerator的Reinterpret与Convert模块的功能及应用。Reinterpret模块用于重新解释数据类型而不改变其位值,适用于无符号数与带符号数之间的转换以及小数点位置的调整。Convert模块则提供了数据类型的转换、量化方式的选择以及数据截位等功能。这两个模块对于控制数据类型和位宽在FPGA设计中至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文是该系列的第8篇。第2篇中以数字滤波器的设计为主题,介绍了System Generator的完整设计流程;第7篇介绍了其中数据类型的选择位宽截断的问题。本文将对其中使用到的Reinterpret和Convert模块进行详细介绍。


模块功能概述

数据转换,数据类型、位宽等问题都会影响到计算精度,对于设计者而言,需要考虑的就是相关影响是否可以接受,即是否会影响到实际的系统性能。FPGA设计中还经常需要截位,否则位宽在整个系统中不断积累,大大增加资源的消耗。

数据类型的转换和截位是FPGA系统设计的重要内容,博主在《FPGA数字信号处理》系列的很多设计中都有详细讨论。而在System Generator设计中,完成这项任务的便是Reinterpret和Convert模块。

数据类型转换模块在导出到FPGA设计中(定点与浮点之间的转换、浮点与浮点之间的转换),会使用Floating-Point IP核实现,具体可参考《FPGA数字信号处理》,本系列不详细介绍。


Reinterpret block

1.block特性

这个block可以完成以下数据转换功能:

  • 将无符号数转换为带符号数;
  • 将带符号数转换为无符号数;
  • 通过重新规定小数点位置来定义数据范围。

需要注意的是,“转换”在这个block中的含义更接近于其英文直译“重新解释”。事实上,数据在经过该block后,其位宽与每一位的值都没有发生任何改变,变化的只有其所表示的“意义”。正如博主在《FPGA数字信号处理》系列中强调的一样,一个二进制数是无符号数还是带符号数、小数点在哪一位仅仅取决于设计者如何规定和看待它。而Reinterpret改变的便是这种“规定和看待”方式

比如,“1100”这个数,当视作UFix_4_0(无符号定点数、4Bits位宽、小数部分0bit)时,其值为12;当视作Fix_4_2(带符号定点数、4Bits位宽、小数部分2Bits)时,其值为-1。因为reinterpret实现的只是一种意义上的转换,因此其在转换为FPGA设计后,不会消耗任何资源

既然reinterpret的输出和输入完全相同,那么加入此模块有什么作用?

  • 从FPGA设计转换到Simulink环境中时会按设定的“意义”解析数据格式;
  • 完成不同格式数据之间的的拼接。
2.参数设置

这里写图片描述
(1).选中“Force Arithmetic Type”后,输出数据格式的“意义”将转换为(没有选中,则输出与输入的表征意义相同):无符号数(Unsigned)、带符号数二进制补码(Signed(2’s comp))、浮点数(Floating-point)。

(2).选中“Force Binary Point”后,可以重新规定输出数据的小数点位置。比如设置为31时,表明数据中的低31Bits为小数部分。


Convert block

1.block特性

该block不仅可以完成数据类型的转换,还具有如下特性:

  • 重新设置数据的量化、溢出方式;
  • 重新设置定点数格式(进行数据截位)。
2.参数设置

这里写图片描述
其中大部分参数设置方法与Gateway In模块的设置完全相同,具体可参考本系列第5篇。这里只讲述两者不同的地方。

(1).Convert模块的量化方式可以配置为“Round(unbiased: even values)”,这是针对“四舍五入”量化方式的缺点所作的改进:

  • 传统的四舍五入所有的中间值(如1.5、2.5)都会向更大的值量化,即不是完全对称的,这样会导致一组数据量化后平均值高于量化前的平均值。
  • unbiased: even values在处理中间值时会向更接近的偶数量化。比如1.5会量化为2;2.5仍然会量化为2(因为二者最接近的偶数都是2)。这样量化规则在整体上会呈现出对称性

(2).选中“Provide enable port”后,block会增加一个en使能管脚,只有当使能有效时convert block才会执行数据转换功能,否则将保持当前状态不变。

(2).Latency设置了Convert输出数据要经过多少个采样时钟周期的延时。注意不要混淆“采样时钟周期”和“FPGA时钟周期”的概念,在过采样系统中,一个采样时钟周期可能等于多个FPGA时钟周期。
这里写图片描述
前文提到Convert在导出到FPGA中时会以Floating-Point IP核的方式实现,“Implementation”标签下可以设置Latency在FPGA中的实现方式:

●选中“Pipeline for maximum performance”时,Latency以流水线的方式实现,即在计算过程中增加中间级寄存器,以更多的资源实现更快的计算速度和更大的数据吞吐量。

●未选中“Pipeline for maximum performance”时,Latency以在IP核末尾增加一级移位寄存器的方式实现,这样只是单纯的实现了延时功能。

### System GeneratorConvertReinterpret功能及其差异 #### Convert模块的作用 Convert模块用于执行数据类型之间的精确转换操作。当需要改变数值的数据表示形式时,比如从一种固定点格式转变为另一种不同精度或范围的固定点格式,或者在浮点数整型之间切换的时候,就会用到这个组件[^1]。例如,在FIR滤波器的应用场景里,为了适应后续处理环节的要求或是减少硬件资源消耗,可以采用Convert把输出结果由`Fixed_36_33`调整成更为紧凑高效的`Fixed_16_13`格式[^3]。 #### Reinterpret模块的特点 相比之下,Reinterpret并不涉及实际数值大小的变化过程,而是通过重新解释二进制位串的意义来进行所谓的“逻辑上的再定义”。这意味着它能够快速地更改小数点的位置而不影响原始数据本身的内容。这使得该工具非常适合用来微调内部运算过程中产生的中间变量的小数位置,从而达到优化算法表现的目的。如案例所示,可以通过设置让其将输入流中小数点移动至第31比特处,以此方式实现对信号强度的有效增强——即相当于进行了四倍放大的效果。 #### 使用场景的选择依据 对于具体的工程实践而言,选择哪一类方法取决于项目需求技术指标: - 如果目标在于确保最终产品具备足够的动态响应区间并维持较高的测量分辨率,则倾向于运用Convert手段来精细化管理各个阶段间传递过来的信息量级; - 当面临计算密集度较高却受限于物理空间布局的情况下,借助Reinterpret灵活操控各层结构内的参数分布不失为明智之举,因为这样做既不会额外增加过多的时间延迟也不会占用宝贵的硅片面积。 ```matlab % MATLAB/Simulink环境下System Generator建模片段示意 model = 'my_system_generator_model'; open_system(model); add_block('xilinx/Signal Processing Blocks/Convert', [model '/convert']); set_param([model '/convert'], 'OutputDataTypeMode', 'Specify via dialog'); add_block('xilinx/Signal Processing Blocks/Reinterpret', [model '/reinterpret']); set_param([model '/reinterpret'], 'NewBinaryPointPosition', '31'); % 小数点移至第31位 ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值