1. 定点化工程认知与课程地图
在嵌入式控制器、FPGA 与 ASIC 的开发链条中,定点化并不是一个孤立的“数值转换”动作,而是连接算法模型与可综合硬件之间的关键工程环节。浮点模型在 Simulink 中验证通过,只说明算法逻辑成立;一旦要部署到没有 FPU 的 MCU、资源受限的 FPGA 或流片成本极高的 ASIC,就必须把浮点运算映射为定点运算,并保证精度、动态范围、时序和资源都在可接受范围内。本章先建立整体认知:定点化在各类目标平台中的位置、完整流程、工具链分工,以及最终要交付什么。
定点化在三种目标平台中的位置
不同目标平台对定点的诉求并不相同。嵌入式控制器(如 Cortex-M 系列 MCU)通常没有硬件浮点单元,或只有单精度 FPU,双精度浮点会以软件库形式运行,速度慢、代码大;定点化后可用整数指令完成乘加,显著降低周期与功耗。FPGA 没有天然的浮点算子,浮点 IP 面积和延迟都很大,定点化后可直接映射到 DSP48 一类的硬核乘法器,兼顾吞吐与资源。ASIC 则对面积、功耗、时序最敏感,定点位宽的每一位都直接对应硅面积,位宽优化往往能带来可观的成本收益。
因此,定点化的本质是:在满足系统精度与稳定性要求的前提下,用尽可能少的位宽表达算法中的每一个变量,并让运算在目标硬件上高效执行。它同时涉及数值分析、模型重构、硬件映射和验证四个维度,缺一不可。
完整流程:从浮点模型到可部署实现
一个规范的定点化流程通常包含五个阶段。第一阶段是浮点模型准备:确保 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 滤波器,把每章方法应用到同一对象上,逐步完成从浮点模型到定点实现的完整闭环。这样到课程结束时,你手里不只有知识,还有一个可复现的定点化工程样例。