邪门了!请问运算中的符号问题?
module plus_sub(a,
b,
c,
d1,
d2
);
input a;
input b;
output c;
output d1;
output d2;
assign c = ~b+1;
assign d1 = a + (~b+1);
assign d2 = a + c;
endmodule
请问在程序中的d1、d2有什么区别?
为什么运算结果不一样?
仿真显示:
当a=4‘b1001,b=4’b0011时,d1=00110,d2=10110 应该是由于仿真器的原因,因为是硬件语言,事实上三条语句谁先执行是不确定的,所以才会有其他的答案,如果先执行c再执行后面的都对,但是如果先执行D1,再执行C,再执行D2,那么D2就正确了。所以要避免这样写,最好用非阻塞 回复 1# lanpad
我找到原因了,不是楼上说的仿真器的问题,是运算符的问题。
c的定义为4位,d为5位
c=~b+1,我记得在c语言里就这么条规定,对b取反,先把b转成与c相同的位数,因为双方都是4位的,所以不变,c=~(0011)+1=1100+1=1101;
d1 =a + (~b+1) = 01001 + (~(00011)+1) = 01001 + (11100+1)=01001+11101=00110;
d2 = a + c = 01001 + 01101 = 10110
OK,完毕 回复lanpad
我找到原因了,不是楼上说的仿真器的问题,是运算符的问题。
c的定义为4位,d为5位
c ...
zombes 发表于 2012-3-11 18:02 http://www.fpgaw.com/images/common/back.gif
高手!
多谢了!
太需要这样的经典了
页:
[1]