为何Verilog中`-3'd300>5000`的判断结果为真?
Verilog中
-3'd300>5000判断为真的原因解析 这个现象的核心是Verilog对常量的位数截断和无符号数运算规则导致的,具体拆解为两点:
3'd300的数值被截断为4
Verilog里,3'd表示3位无符号十进制数,这类数的取值范围是0~7。300远超出这个范围,会被自动截断为低3位二进制。300的二进制是100101100,取低3位得到100,对应十进制4,所以3'd300实际等价于3'd4。负号作用于无符号数生成超大值
当计算-3'd300时,Verilog会把3'd4提升到仿真器默认的宽位(通常是32位)进行运算。由于3'd4是无符号类型,负号会被解析为“0减去该无符号数”的无符号减法:0 - 4在32位无符号运算中,结果是2^32 - 4 = 4294967292,这个数值对应的二进制是11111111111111111111111111111100,远大于5000,因此-3'd300 > 5000的判断结果为真。
你看到的-3'd300二进制显示为00000000000000000000000000000100应该是仿真输出的误解,实际该值是32位的超大无符号数,自然比5000大。
内容的提问来源于stack exchange,提问作者kittygirl
相关产品推荐
相关产品推荐

