| 查看: 238 | 回复: 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位??这个如何理解??烦请高手指点一下!!谢谢了 |
» 猜你喜欢
085600材料工程一志愿中科大总分312求调剂
已经有9人回复
博士推荐
已经有6人回复
298求调剂
已经有8人回复
0856材料求调剂
已经有11人回复
311求调剂
已经有7人回复
材料学调剂
已经有4人回复
面上模板改不了页边距吧?
已经有3人回复
高分子化学与物理调剂
已经有5人回复
版面费该交吗
已经有18人回复
285求调剂
已经有5人回复
3楼2009-07-24 12:13:32














回复此楼