Johnson counter using structural modelling in verilog
Your Johnson counter is lacking an output.
You should use nonblocking assignments for sequential logic.
Assign qn using a continuous assignment outside the always block i.e. use assign qn = ~q; so that it correctly obtains the complemented value of the current value of q