An MI is a signed value from 32767 to -32768. When you divide by 1000, I would expect to see what you are seeing due to word wrap to a negative value when the value gets larger than 32767 (accessing the sign bit/MSB). As said by Flex727, you will probably need to utilize one of the double word formats ML, DW etc. to allow values large enough to not roll over the word. You could also cascade counters by making one counter count to 1000 and counting the number times it gets there with a second counter.