First, I wouldn't set the IMO to 2 MHz. I would put down a clock component, set that to 2 MHz and let the system take care of dividing the clock down for you.
I can see a couple of ways of doing this:
If you just want to do this on a regular basis, use a lookup table and a down counter. (Use the lookup table to disable the down counter, use the count to change states, register the lookup table outputs, and use a control to reset the down counter to start this action.) No code needed, meeting timing should be pretty easy and it should be very reliable.
Alternatively, you can do all of this in a datapath, with the different states time slices you want. The advantage here is less resources, but it is more difficult to do and understand.
You *might* be able to make timing bit banging things via the CPU, but I think using pure hardware is a better way to go here.
Thanks for your reply ScottA_91 . Really appreciate it. I have looked into LUT and down counter and I understand what you're suggesting. The problem is I don't know how to implement what you just said. Would you be able to elaborate your first suggestion please? I am trying to meet the time requirements for the CCD and I hoping to keep these fixed these once they work. Cheers.
Thanks a lot. sorry for the late reply. This is looking promising. I will try it and report back. Cheers.