DSP

IQmath library在Davinci/Omap框架下的使用探讨

2019-07-13 16:34发布

               在CCS下面写C代码的时候,一般不会考虑定点DSP是怎么实现浮点运算的。但实际上这是一个比较严重的问题。在DSP芯片上进行浮点运算有两种实现方法:硬浮点和软浮点。顾名思义,硬浮点是通过协处理器来实现浮点运算;软浮点就是通过代码或编译器来模拟浮点运算。当然前者的速度会快些,后者则更经济。在CCS上做开发的时候,编译器自动包含了fastRTS库,其中就提供了基本的浮点运算支持,如浮点加减乘除、求倒数等。另外,DSP Lib提供另外一些DSP函数,如FFT、CORR、FIR/IIR/ADAPTIVE、CONV等,但都没有比较完整的数学函数。当然,这对于算法的开发是非常不利的,所以TI还提供了另外一个专门的数学函数库IQmath。目前只有win版本,其中包括了IQmath_xxx.lib/IQmath_xxxe.lib/IQmath_pc.lib三种,pc是针对x86主机的版本,另外两个需要在TI的工具链下才能正常编译。那么在xDM框架下可不可以调用IQmath中的函数呢?   问题:          在我的代码中按下面的方式调用了sin/cos函数: 方案:
  • 如果不用IQmath库支持,codec engine会报错:不能找到sinf()/cosf(),但实际上代码里面写的是sin()/cos(),也就是说xdc在编译的时候把函数调用替换成浮点方式了但不能找到对应的库支持。
  • 试图加入IQmath库,前面已经提到IQmath是win的.lib,不能由Linux调用。虽然在http://topic.csdn.net/t/20020904/09/994403.html 一文中提到怎么用gcc来调用vc的.lib,但正如http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/99/p/7255/28365.aspx 提到的,在原理上IQmath只能用TI提供的工具链来编译。也就是说,在Davinci/Omap软件框架下,DSP端的可执行文件由CGTools来做编译。这样就需要了解CGtools是怎么处理库文件的。
    • 在Codec Engine Algorithm Creator User's Guide里面找到这样一句话:In order to include a library, legacy.lib, which was built outside the package using a legacy build system, you can copy the library into the package directory and include it in Pkg.otherFiles in the package.bld file.
              Pkg.otherFiles = [   'legacy.lib',   'readme.txt',];
 
  这样做也许可以把库加进去,但实际上能不能加目前还在实验中。我会在下次修改的时候把结果补充上来 从上面的代码中很容易看出来我是想做FFT,但实际我是想用这个做实验,看Davinci/Omap是怎么实现软浮点的。但这个实验还没有做完时,小组就决定用查表的方式来实现sin/cos了,所以导致这篇文章只写了一半。 而事实证明,只需要把IQmath库加入到编译过程中就可以使用其中的函数了。具体操作过程是由一位师姐实现的,现在还没有学会。