You've got a mix of <= (non-blocking) and = blocking in a combinational description. You've assigned sw using a blocking statement, and your latch design is assigning shift using non-blocking statements. I don't think this would even work in an FPGA after you fix the non-blocking ...