Consider computing the second block of the Salsa20 stream cipher with nonce 0 and key (1,2,3,...,32). Rather than displaying the arrays produced by the second-block computation, this section displays the xor between those arrays and the corresponding first-block arrays, to emphasize the "active" bits—the bits where the computations differ.
The Salsa20 hash function starts with a 4×4 input array who's only difference from the first block is the different block counter, as shown by the following xor:
By the end of the first round, the difference has propagated to two other entries in the same column:
At this point there are still just a few active bits. The difference depends on a few carries but is still highly predictable.
The second round then propagates the difference across columns:
By the end of the third round, every word has been affected:
A substantial fraction of the bits are now active, although two words still have stretches of bits that were not (and were unlikely to be) active.
By the end of the fourth round, those last two stretches of inactivity have been eliminated:
That's just 4 out of the 20 rounds in Salsa20. In every subsequent round, there are hundreds of active bits, for a total of more than 4000 active bits. Each of those 4000 active bits interacts with carries in a random-looking way, producing random-looking differences, not shown here.
Clearly, no less than 4 rounds can be used to safely achieve full diffusion. At this point, Salsa20/4 is no longer competitive with other fast PRNG alternatives. I'll additionally update my answer with the results from Dieharder tests later, when I have time. I will also test ChaCha.