赞
踩
逻辑代码如图1所示,其中输入输出均是signed型。仿真结果如图2所示。
为什么会出现这样的结果呢?必须知道,计算机中的数都是以补码形式存在并计算。
所以运算正确。
如果输入时a,b没有定义为signed,那么c的结果就是00011+1011 = 1110 = (e)16 。如图3、4所示。而你又希望结果是有符号的,那么就手动操作了,过程与上述就算c的过程一样。
对于上述情况,由于c只作为外部使用(a,b组合变量的直接输出,类似线网类型),且a,b都定义了signed类型,所以即使不给c定义signed类型,最后输出结果也会是signed类型。但是,如果内部使用到了的c,那么此时一定要将c定义为signed类型,否则就会当成无符号类型。如图5所示。c在always语句中用到了d<=c-b。
再举一个例子,c的组合输出中可能含有不是signed的逻辑值,如图6、7、8、9所示。
不难发现,图6、8的区别在于c的组合逻辑中可能输出的值一个是0(没有指定位宽,则系统认为是signed),一个是6‘d0(指定了位宽,则系统认为不是signed型)。则由两者的输出结果来看,逻辑输出中有一个不是signed型,则对应的输出就不是signed型,否则才为signed型。
如图11所示,其中变量都是经过signed定义的,只需要使用**>>>**(注意是三个>),则会自动进行有符号的移位操作,比图10中方便不少。
同理左移如图12所示。左边是signed声明,右边无
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。