1. 定点化工程认知与课程地图

在嵌入式控制器、FPGA 与 ASIC 的开发链条中,定点化并不是一个孤立的“数值转换”动作,而是连接算法模型与可综合硬件之间的关键工程环节。浮点模型在 Simulink 中验证通过,只说明算法逻辑成立;一旦要部署到没有 FPU 的 MCU、资源受限的 FPGA 或流片成本极高的 ASIC,就必须把浮点运算映射为定点运算,并保证精度、动态范围、时序和资源都在可接受范围内。本章先建立整体认知:定点化在各类目标平台中的位置、完整流程、工具链分工,以及最终要交付什么。

定点化在三种目标平台中的位置

不同目标平台对定点的诉求并不相同。嵌入式控制器(如 Cortex-M 系列 MCU)通常没有硬件浮点单元,或只有单精度 FPU,双精度浮点会以软件库形式运行,速度慢、代码大;定点化后可用整数指令完成乘加,显著降低周期与功耗。FPGA 没有天然的浮点算子,浮点 IP 面积和延迟都很大,定点化后可直接映射到 DSP48 一类的硬核乘法器,兼顾吞吐与资源。ASIC 则对面积、功耗、时序最敏感,定点位宽的每一位都直接对应硅面积,位宽优化往往能带来可观的成本收益。

因此,定点化的本质是:在满足系统精度与稳定性要求的前提下,用尽可能少的位宽表达算法中的每一个变量,并让运算在目标硬件上高效执行。它同时涉及数值分析、模型重构、硬件映射和验证四个维度,缺一不可。

Simulink 定点化设计与验证 —— 全流程与交付物地图 ① 浮点算法模型 Simulink / MATLAB ② 定点化改造 Fixed-Point Designer ③ 精度与范围验证 仿真 / 误码 / 溢出 ④ 代码 / HDL 生成 Embedded Coder / HDL Coder ⑤ 目标平台验证 MCU / FPGA / ASIC 目标平台差异与定点化关注点 嵌入式控制器 MCU • 无 FPU 或仅单精度 FPU • 关注:执行周期、代码体积 • 常用 Q15 / Q31 格式 • 交付:定点 C 代码 + 标定表 FPGA • 无原生浮点算子 • 关注:DSP 资源、流水线延迟 • 定点位宽直接决定面积 • 交付:定点 HDL + 时序报告 ASIC • 面积 / 功耗 / 时序最敏感 • 每一位宽对应硅面积 • 位宽优化收益最大 • 交付:RTL + 综合约束 + 验证报告 工具链分工与关键交付物 MATLAB / Simulink 浮点模型、测试激励 Fixed-Point Designer 数据类型、定标、范围分析 Embedded Coder 定点 C 代码、标定接口 HDL Coder 定点 HDL、时序/资源报告 核心交付物:定点化模型 · 定标表 · 定点代码/HDL · 精度验证报告 · 资源与时序报告

完整流程:从浮点模型到可部署实现

一个规范的定点化流程通常包含五个阶段。第一阶段是浮点模型准备:确保 Simulink 模型在浮点下功能正确,并准备好覆盖典型工况的测试激励与参考输出。第二阶段是定点化改造:为模型中每个信号和参数指定定点数据类型,包括字长、小数位和符号性,常用 fixdt(1,16,12) 这类表达式描述。第三阶段是精度与范围验证:通过仿真对比浮点与定点输出,统计最大绝对误差、相对误差,并检查是否发生溢出或饱和。第四阶段是代码或 HDL 生成:用 Embedded Coder 生成定点 C 代码,或用 HDL Coder 生成可综合 HDL。第五阶段是目标平台验证:把生成代码部署到 MCU 或 FPGA,用真实输入验证行为与资源占用。

这五个阶段不是单向瀑布,而是迭代闭环。若精度验证发现误差超标,需要回到第二阶段调整定标;若资源报告显示 DSP 占用过高,可能需要重新分配位宽。理解这个闭环,是后续每一章操作的基础。

关键概念:定标、位宽与误差

定点数的值由存储整数和定标共同决定。以 Q 格式为例,Qm.n 表示 1 位符号、m 位整数、n 位小数,总位宽为 1+m+n。例如 Q1.14 对应 16 位有符号数,分辨率是 2-14≈6.1×10-5,可表示范围约为 ±2。若一个物理量范围是 ±10,直接使用 Q1.14 会溢出,需要选择更大的整数位,例如 Q4.11,此时分辨率降为 2-11≈4.9×10-4。这就是精度与范围之间的基本权衡。

误差主要来自两方面:量化误差(由分辨率决定,通常为半个 LSB)和溢出误差(由范围不足引起,可能造成严重失真)。工程上通常先保证不溢出,再在剩余位宽中尽量提高分辨率。对于中间运算结果,还需要考虑累加位宽增长,例如两个 16 位数相乘得到 32 位结果,累加时还要额外增加保护位。

建议在项目初期就建立“信号—物理量—范围—定标—位宽”的对应表,后续所有验证和代码生成都以这张表为基准,避免定标散落在模型各处难以维护。

课程地图与学习路径

本课程共 30 章,围绕上述流程展开。前几章建立认知与工具环境,包括定点化工程定位、Simulink 定点建模基础、Fixed-Point Designer 入门。中间部分深入核心技能:数据类型与定标规则、量化与溢出处理、范围分析与自动定标、精度对比与误差评估、定点化模型重构技巧。随后进入实现与验证:Embedded Coder 生成定点 C 代码、HDL Coder 生成定点 HDL、资源与时序分析、目标平台在环验证。最后通过综合案例把全流程串起来,并讨论常见问题排查与工程规范。

学习时建议始终带着一个具体对象,例如一个 PID 控制器或一个 FIR 滤波器,把每章方法应用到同一对象上,逐步完成从浮点模型到定点实现的完整闭环。这样到课程结束时,你手里不只有知识,还有一个可复现的定点化工程样例。

本章要点:定点化是算法到硬件的桥梁;MCU、FPGA、ASIC 的关注点不同;完整流程是“浮点模型→定点改造→精度验证→代码/HDL 生成→目标验证”的迭代闭环;定标与位宽决定精度和范围,是后续所有工作的基础。