While eating lunch I was thinking about your CCL and a simple 4-way CCL reminds me of the old "put the game-of-life" on a FPGA deal. So what if you model each pixel as a cell, and if you're set "on" then either propagate a GUID to the southeast cells, or if you got a GUID from the northwest cells, then propagate that GUID instead of your own? If you're on, propagate a zero to the southeast? Whats a good GUID? Probably some combo of your pixel's X/Y coord and/or just a (very large) random number.
FPGA's do cellular automata pretty well because you can create an ever larger matrix of them until you run into some hardware limit.
This is not exactly what you're trying to do, but it sure is simple and a possible start. I'm guessing when you're done you'll end up with a really smart peripheral that looks like a CA accelerator.
That's perfectly possible, but only the newer FPGAs are big enough to store the whole image in the registers.
If I had a bigger FPGA, I would not bother doing all this memory juggling that I am doing now and place all my data into the registers.
And then wait for 10 hours for the software to produce the bitstream!
Probably some combo of your pixel's X/Y coord and/or just a (very large) random number.
I would go with X/Y because it requires less memory than a random number.
Besides, random numbers on FPGAs need extra (though not much!) logic to produce them in LFSRs.
FPGA's do cellular automata pretty well because you can create an ever larger matrix of them until you run into some hardware limit.
This is not exactly what you're trying to do, but it sure is simple and a possible start. I'm guessing when you're done you'll end up with a really smart peripheral that looks like a CA accelerator.