In reply to tpan:
Describe what you mean by “separate thread”. “Thread” can be an overused term, and certainly has canonical definitions that lean more heavily on a software based meaning.
You could model a CPU’s operating stages with separate modules, or separate procedural blocks, or all stuffed together in one always block. There’s probably pluses and minuses for each of these different strategies. I suggest starting out with what you think is clearest in your head, then adjust as you learn/design the thing.
Regards,
Mark