| 查看: 220 | 回复: 2 | |||
| 当前主题已经存档。 | |||
[交流]
【讨论】关于DSP C6000中32位乘法的实现
|
|||
|
之前在论坛里看到了这个帖子讨论关于DSP C6000中32位乘法的实现: http://bbs.matwav.com/viewthread ... amp;;extra=page%3D1 但是我有点不理解,正好最近正要用这个,所以重新拿出来请大家指点一下,谢谢了 理论上说, A 32 bits; A = C*2^16 +D; B 32 bits; B= E*2^16 +F; C,D,E,F, 16 bits each A*B = C*E*2^32 + (D*E+C*F)*2^16+ D*F 2^n 补n个零即可。上面的乘法都是16位,需要自己写一些加法。 Sworder网友给了基本算法:32bit的数值可以分成两部分16bit的数值。分别用MSB和LSB表示。(也就是高16位和低16位)继续上面的例子:A-MSB A-LSB (记做:AM AL) B-MSB B-LSB (记做:BM BL)并且假设乘法结果是C,则C也是32bit的, 于是有: C-MSB C-LSB (记做:CM CL) A×B = AM×BM AM×BL AL×BM AL×BL --------------------- CM = AM×BM CL = AM×BL + AL×BM AL×BL(忽略不计) 复制代码按照以上的思路就可以实现你的要求了。需要注意一下,当计算AM×BM的时候,是signed乘以signed。当计算AM×BL的时候,是signed乘以unsigned。当计算AL×BM的时候,是unsigned乘以signed。 我的疑问是:两个32Bit数相乘得到 本来结果可能为64位,但是此处使结果C仍然取32位,如果说AM*BM超过了16Bit,那么你把它左移16位当成结果C的高位,AM*BL+AL*BM当成C的低位,AL*BL忽略, 这样岂不是忽略掉了理想结果中位权重最高的那些高16位??这个如何理解??烦请高手指点一下!!谢谢了 |
» 猜你喜欢
溴的反应液脱色
已经有4人回复
参与限项
已经有5人回复
推荐一本书
已经有7人回复
有没有人能给点建议
已经有5人回复
假如你的研究生提出不合理要求
已经有12人回复
全日制(定向)博士
已经有5人回复
萌生出自己或许不适合搞科研的想法,现在跑or等等看?
已经有4人回复
Materials Today Chemistry审稿周期
已经有4人回复
对氯苯硼酸纯化
已经有3人回复
所感
已经有4人回复
2楼2009-07-24 10:51:13
3楼2009-07-24 12:13:32













回复此楼