When I looked up Johnson Code in Wikipedia, there were no articles on how the code was generated using Shift Registers. The code is very easy to generate by taking an output from the last shift register, complementing it, and inputting the complement to the first shift register.