24小时热门版块排行榜    

CyRhmU.jpeg
查看: 208  |  回复: 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位??这个如何理解??烦请高手指点一下!!谢谢了
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

nancy23980

铜虫 (小有名气)

期待高人来解决
2楼2009-07-24 10:51:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

雨中林轩

银虫 (正式写手)


貌似来这里的人大多不是电子信息方面的
3楼2009-07-24 12:13:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 雨中林轩 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见