During a behaviorial simulation, it seems that the synchronous elements do not work correctly when Data and Clock change at the same time.
This is not an issue with the simulation models. When using event-based simulators such as ModelSim, care must be taken to ensure that delta delays are not causing problems. When two events occur at the same time, the simulator will resort to a scheduling scheme to determine which event should happen first. When viewing the waveform, it appears as if the two events are happening simultaneously. In reality, one event happens and then the next event happens at the same time plus a delta delay. Certain coding styles can cause the data to happen prior to the clock edge, when the two events occur at the same time. This is when it would seem as if the simulation model is not working correctly. In reality, the model is working correctly. The model is seeing the data appear prior to the clock edge; hence, it will output the data at the next clock edge (plus 100 ps of intrinsic delay).
This is a well-documented issue, and there are ways in which the coding styles can be adjusted to work around this issue.
More information on this can be found in the Delta Delay section of the ModelSim Documentation.