Why are master-slave D flip flops preferred for pipeline stage buffers?
When you are building a pipeline, you need to introduce a delay in the datapath - that is basically what a pipeline does.
If you use &quot;naked&quot; D flops, they will all change their output on the same clock edge. Assume you have a D flop barrier, your combinatorial logic, and then another barrier: this is your basic pipeline building block. When the clock edge comes, the input and output barriers sample their input, and immediately present it at their output. This means that there is the possibility that the input of the output barrier will change while it is sampling it, possibly violating hold times.
If you instead use master slave flops, this does not happen, as the input is sampled on one edge, and copied to the output on the opposing edge.