Given the information you have provided, you will have trouble getting the help you're looking for, because you haven't presented enough evidence that you have tried to solve this problem on your own. Listing a 3 bit counter's output isn't enough, as it just shows you can count in binary. What approaches have you tried? Maybe post a circuit diagram of a failed attempt. If you can't do that, then perhaps a better place to start is to ask a different question, specifically targeting the four types of flip flops that you must use.
I'm not trying to come off as some pedantic internet poster, I just want to make sure you get the help you need while still learning the fundamentals that your course is trying to teach you.
For simulation, I can't really recommend anything off-hand since that is not my area of expertise, but I did download LogicSim and it looks useful. I tested a quick SR circuit and it did the right thing -- just make sure you don't leave anything floating.
Here's a list of other free digital logic simulators.
This is a cool assignment! Have fun with it and post up what you've come up with, and I'm sure you'll get the help you need.
Serial/parallel-load shift registers and bit rotations are going to work most naturally with a D flip flop, since they just send data straight through; binary counters are going to work most naturally with a T flip flop, since each counter bit Ck = Ck,previous XOR carryk, where carry is the carry bit from the previous stage.
If you look at JK flip-flops, however, they are the "universal" flip-flop that can act as a D- or T- flip-flop depending on the input signals.
To get a D from a T, or vice versa, you need an XOR gate. To get a T from a JK, you just tie the JK inputs together. To get a D from a JK, you need an inverter, as the J/K inputs need to be opposites.
In your application, you've got enough complexity, that I suspect the gate counts are going to be very close, and it's probably not worth worrying about -- unless you have to optimize, in which case you'll just have to try it for each case.
IMHO, the D flip-flop is conceptually the simplest to use, and it works naturally with most of your operations, so I'd start with that.
Best Answer
Make a logic table that shows how to get from the inputs and current state to the signal you need to generate the next state you want:
D
is the input to the D flip-flop you are construcing.Q
is the current state (output) of your flip-flop.T
is the input to the T-flip-flop you are using internally to build a DFF, andQ'
is the next state you are going to produce after a clock edge.Now, what gate that you know about maps the D and Q inputs to the T signal you need?