This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430FR6047:在 Python 中仿真 IQmath

Guru**** 2188815 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1450348/msp430fr6047-simulating-iqmath-in-python

器件型号:MSP430FR6047

工具与软件:

我正在尝试在 Python 中模拟一些 IQmath 操作。 我已经注意到_Q15div (0x003c、0x888)不会生成0xc000、而是生成0xc001。 正确答案是-0.5 (0xc000)、但除法返回-0.499969482421875 (0xc001)。 我注意到 IQmath pdf 中的14位_QNdiv 精度表可作为显示差异的原因。 我想知道:

*库的-0.4999答案是否正确? 或者它应该是-0.5? 即它是错误吗?

*有没有办法用 Python (或其他高级语言)来做这个数学,得到同样的结果? 如果我将60 (0x003c)除以-120 (0xff88)、得到-0.5。

我的目标是在 Python 中模拟固件。 如果数学有一点不准确、对我的代码来说无关紧要、但我确实需要对其进行仿真(这更难做到)。

谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是否要创建虚拟机并模拟机器代码?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    模拟机器码。 我想复制机器码的输出。 我必须采取与去年为另一个处理器复制浮点舍入误差类似的措施。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    IQ 数学没有什么特别之处。 它只是定点的简化版本。 整数运算进行整数运算。

    定点加减微不足道、但乘法和除法需要固定二进制点。 导致额外的危险。 其中一个是如何处理最低有效端上会丢失的额外位。 你只是截断或舍入吗? 选择将影响结果的 lsb。

    看看_QNdiv.o 中的代码、我看到对乘法硬件的引用。 我不会深入研究,但这表明它是使用乘数来计算一个互惠。 但会引入其自身的误差来源。