Finsim is a verilog compiler.
I had a long case (that can't easily be shortened) where random numbers that were left shifted by a multiple of 32 would get weird behavior. In the end, I ran this:
tmp1 and tmp2 are both defined as reg [106:0] $write("comparing:\ntmp1: %h\ntmp2: %h\n\n",tmp1,tmp2); if (tmp1[106:0] !== tmp2[106:0]) $write("Bits [106:0] doesn't match\n"); if (tmp1[106:50] === tmp2[106:50]) $write("but bits [106:50] DO match\n"); if (tmp1[49:0] === tmp2[49:0]) $write("but bits [49:0] DO match\n"); // The top matches, the bottom matches, but the whole thing doesn't match! if (tmp1[106:0] !== tmp2[106:0] && tmp1[106:50] === tmp2[106:50] && tmp1[49:0] === tmp2[49:0]) $write("THIS IS AN IMPOSSIBLE STATE\n");And managed to get the output: ----- Bits [106:0] doesn't match but bits [106:50] DO match but bits [49:0] DO match THIS IS AN IMPOSSIBLE STATE ----- Go figure. I never got a chance to root cause this bug - and the testcase is IP, so I can't reproduce it here, unfortunately. Maybe if finsim paid me as a verification engineer... ;)