阅读:1007回复:0
请教高手关于流水线的问题
我用的是c5409芯片做音频编解码,现在用汇编时遇到一个严重的问题:程序单步执行肯定是对的,但是全速执行就会出错,但是出错的地方很不固定,也就是说同样的错误不是每一次都犯,所以导致结果每次都不能完全一样(应该是一样的)。我很困难地找到四个地方,改了一下,使语句不是那么紧凑,也加了一些NOP,但是现在发现这样的地方很多,而且出错的地方随机性更大(就是有时两个大循环就出错,但是下一次可能五六个大循环才出错),这让我调试起来非常困难。而且我想,流水线冲突应该每次都错吧,我现在这个错误是不是硬件性能跟不上导致的(之前用C语言做,速度是汇编的3倍,但重来不出错),请高手指教!
举例: LD @1h, B SUB @2h, B LD @3h, 2, A SUB @4h, A ABS A, A SUB @4h, -3, A, A BCD L1, BLT LD @5h, B LD @6h, A XC 1, ALT ********此处易出错 LD #0h, A L1: SUB @5h, A ADD A, -4, B STL B, @5h 相应的c语言是: if( @1h < @2h ) @5h += ( @6h - @5h ) >> 4 else if( abs( (@3h << 2) - @4h ) >= (@4h >> 3) ) @5h += ( @6h - @5h ) >> 4 else @5h += ( - @5h ) >> 4 |
|