| 查看: 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位??这个如何理解??烦请高手指点一下!!谢谢了 |
» 猜你喜欢
博士读完未来一定会好吗
已经有6人回复
小论文投稿
已经有3人回复
Bioresource Technology期刊,第一次返修的时候被退回好几次了
已经有9人回复
心脉受损
已经有3人回复
到新单位后,换了新的研究方向,没有团队,持续积累2区以上论文,能申请到面上吗
已经有8人回复
申请2026年博士
已经有6人回复
请问哪里可以有青B申请的本子可以借鉴一下。
已经有5人回复
2楼2009-07-24 10:51:13
3楼2009-07-24 12:13:32














回复此楼