GCKontrol实现定点计算
![](https://public.fangzhenxiu.com/fixComment/commentContent/imgs/1663240649730_l51umb.jpg?imageView2/0)
在不同的处理器中,根据计算方式的不同,可分为浮点计算与定点计算。顾名思义,浮点计算在计算过程中,小数点的位置是变动的,定点计算小数点的位置则不变。 浮点计算的优点是表示数的动态范围大,精度也可以很细;缺点是有一些处理器不支持浮点计算,并且计算过程也很复杂。 定点计算的优点是运算速度快,硬件相对简单;缺点是计算过程中容易溢出,产生误差。 GCKontrol支持对硬件的定点计算,在实现动态系统时(如控制系统或数字滤波器),由于时间或内存大小的限制,通常不采用浮点软件仿真。所以在对二元整数值进行定标,需采用定点数学。 GCKontrol的定点数描述:在硬件中,数字以二进制形式存储。二进制是固定长度的二进制(1和0)序列。硬件组件或软件函数解析1和0序列的方式由数据类型说明。定点数据类型和 GCKontrol内置整数类型之间会有区别。其中之一就是,内置整数数据类型只代表整数,而定点数据类型还包含二进制小数点位置或数字定标信息。 二进制数以定点或浮点数据表示。GCKontrol的定点数据类型将具备这三个特征:字大小以位为单位、二进制小数点位置,以及符号位(有/无符号)。二进制小数点的位置用来定标和解释定点值。定点数据类型可以是整数、小数或广义定点数。这三种数据类型之间的主要区别是默认二进制小数点的位置。 定点值的动态范围小于字长相同的浮点值。为避免溢出并最大限度地减少量化误差,必须对定点数进行定标。 GCKontrol支持由二进制小数点来定标的定点数据类型,可指定任意线性定标。物理值与整数值换算公式如下: 其中,n为定标值,offset为偏移,两者可在GCKontrol软件中进行配置,配置后软件将自动换算对应的最值范围。 GCKontrol定点数的精度是其数据类型和定标可表示的连续值之间的差值,等于其最低有效位的值。最低有效位的值(因此也是数字的精度)由小数位数决定。定点值的误差小于等于其数据类型和定标所确定精度的一半。 例如二进制小数点右侧具有四位的定点表示的精度为 (即 0.0625),这是其最低有效位的值。此数据类型和定标范围内的任何数字的误差都小于等于 (即 0.03125),即精度的一半。 有限精度表示数字,并不是可用范围内每个数字都可精确表示。如果数字不能由指定的数据类型和定标值精确表示,则使用舍入方法将该值转换为可表示的数字。虽然在舍入操作中会丢失一定的精度,但计算成本和偏置量取决于舍入方法本身。 类型 | 说明 | 值的范围 |
int8 | 有符号8位整数 | 到 |
uint8 | 无符号8位整数 | 0到 |
int16 | 有符号16位整数 | 到 |
uint16 | 无符号16位整数 | 0到 |
int32 | 有符号32位整数 | 到 |
uint32 | 无符号32位整数 | 0到 |
int64 | 有符号64位整数 | 到 |
uint64 | 无符号64位整数 | 0到 |
在GCKontrol的建模过程中,我们支持对特定的一些模块进行输出信号属性设置,并且全局参数也支持一样的设置。
![](https://public.fangzhenxiu.com/fixComment/commentContent/imgs/1663240652480_x3u4vd.jpg?imageView2/0)
如上图,常量模块属性设置第三项可以设置输出的信号属性,若选择Auto,则输出的信号属性默认按照GCKontrol对于不同种类模块定义的特殊规则去输出。 ![](https://public.fangzhenxiu.com/fixComment/commentContent/imgs/1663240654687_le0skt.jpg?imageView2/0)
如上图,常量模块输出的信号属性可以按照需求去自定义输出,若不勾选定点计算,则输出为当前数据类型的纯整型输出。若勾选定点计算,则用户可以配置模块输出的定标与偏移,根据定标和偏移GCKontrol自动计算出对应的最值范围。相反的如果用户去定义最值范围,GCKontrol也会自动计算出此时与之对应的定标和偏移。 ![](https://public.fangzhenxiu.com/fixComment/commentContent/imgs/1663240646772_eu550o.jpg?imageView2/0)
如上图,配置好输出信号属性后,可以在菜单栏的数据下方,勾选“显示信号属性”,模块输出端口的右下方就会显示出当前信号流上的信号属性。 ![](https://public.fangzhenxiu.com/fixComment/commentContent/imgs/1663240647234_ngz1ze.jpg?imageView2/0)
运行仿真后,数据标签支持展示对应的物理值和整数值,便于调试。 ![](https://public.fangzhenxiu.com/fixComment/commentContent/imgs/1663240650077_fqlrz0.jpg?imageView2/0)
同样的,在全局参数中,也可以有相同的配置,使用方式也一样,如上图可知,运行结果一致。 ![](https://public.fangzhenxiu.com/fixComment/commentContent/imgs/1663240653212_v8smmb.jpg?imageView2/0)
外部输入的d轴电压、q轴电压和转子角度theta分别从double的数据类型,使用数据转换模块,将double类型的数据转换为int16的数据类型。根据原始工程数据,可以得知这三个变量的数据区间,将d轴电压和q轴电压定标设置为5,将转子角度的定标设置为12(其他模块统一使用数据类似为int16,定标为5的信号属性)。 ![](https://public.fangzhenxiu.com/fixComment/commentContent/imgs/1663240652833_yw4rov.jpg?imageView2/0)
运行仿真后,我们可以使用数据标签来查看当前信号流上的数据,下图为某一时刻的物理值: ![](https://public.fangzhenxiu.com/fixComment/commentContent/imgs/1663240653677_hf8rqs.jpg?imageView2/0)
![](https://public.fangzhenxiu.com/fixComment/commentContent/imgs/1663240650640_99md08.jpg?imageView2/0)
![](https://public.fangzhenxiu.com/fixComment/commentContent/imgs/1663240651138_ywk855.jpg?imageView2/0)
根据以上配置,运算出abc的数据。最终将abc输出的整数数据转换为double类型的数据,继续传输到工程中。 ![](https://public.fangzhenxiu.com/fixComment/commentContent/imgs/1663240654200_a88f9b.jpg?imageView2/0)
以上展示的只是部分支持定点计算的模块,若需要了解更多定点计算概念以及模块支持情况,请查看GCKontrol帮助手册《定点计算》章节。 下图为原始工程浮点计算的部分重要数据结果与定点计算下同样的数据结果图片比较: ![](https://public.fangzhenxiu.com/fixComment/commentContent/imgs/1663240651625_xqduns.jpg?imageView2/0)
![](https://public.fangzhenxiu.com/fixComment/commentContent/imgs/1663240655062_a2vzxy.jpg?imageView2/0)
可以看到GCKontrol实现的定点计算运算结果与浮点计算结果几乎一致。 在GCKontrol中我们证明了,浮点运算可以转换为定点运算,并且两种运算的仿真结果匹配度极高。在复杂的系统集成场景下,GCKontrol支持生成定点计算的C代码,将代码在嵌入式系统中运行,编译到嵌入式系统(比如STM32),最终应用在总线板卡、控制器、芯片和示波器等硬件上,去耗费极少的时间,占用较少的资源,进行高效的仿真。 著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2022-09-29
最近编辑:1年前