In reply to nachumk:
You should be using the 1800-2012 LRM, and this is explained in _11.8.2 Steps for evaluating an expression
_
Your expression is syntactically equivalent to
4’sb0001 < -( 3’sb100 )
And the rules state that you need to propagate the size relational expression back down to the
context-determined operands of the expression BEFORE APPLYING ANY OPERATORS
4’sb0001 < -( 4’(3’sb100) ) // sign extend operands first.
4’sb0001 < -( 4’sb1100) )
4’sb0001 < 4’sb0100) // then apply negation
1’b1 // result
What the cast does is prevent the propagation of the context so that -3’sd4 is evaluated in a self determined context.
I would go back an re-think why you need to be comparing two different sized, signed operands.