As kommu4946 pointed out, the variable initialialization is in the wrong place. The process will execute every time "binary" changes, and "i" will only start a 0 in the first execution.
"i" will increment forever, the Gray coding will only be done in the first call, and the code is not synthesizeable.
I agree with other posters that it is much better to use a "for" loop.
I think it is time for you to start using a simulator and a test bench. To do design by synthesizing and then debug in the lab is a great way to waste a lot of time.
A complex project will never be completed without a simulator.