Sí, una clasificación de radix tendría mucho sentido para datos de 8 bits. Funcionaría en tres fases y requeriría dos pequeños bloques de memoria.
El primer bloque de memoria tendría 256 ubicaciones. Se usaría para contar cuántas veces aparece cada valor de datos en el grupo de píxeles que se están ordenando. Si está clasificando 64 píxeles a la vez, entonces esta memoria debería tener 7 bits de ancho. (En realidad, para una operación continua, querrá que esta memoria tenga doble búfer, por lo tanto, 2 × 256 ubicaciones).
El segundo bloque de memoria se opera como FIFO. Cada entrada en este FIFO es un par de valor: cuenta , donde el valor tiene 8 bits de ancho y el cuenta tiene 7 bits de ancho, para una Ancho total de 15 bits. Este FIFO debe tener una profundidad de al menos 64 palabras para manejar el caso en el que cada valor de entrada solo aparecía una vez.
Comience por borrar los contadores del primer grupo de píxeles. Después de eso, las tres fases son:
-
A medida que llegan los píxeles, incremente el contador correspondiente.
-
Escanee los contadores y, cuando tenga un conteo distinto de cero, transfiera el par value: count al FIFO. Además, borre los contadores en este momento para el próximo pase. Tenga en cuenta que aquí es donde elige la dirección del orden, por la cual escanea los contadores.
-
Lea los pares value: count fuera de FIFO y genere count copias de cada valor en la salida.
Acabo de darme cuenta de que hay un problema aquí en términos de tiempo: la primera y la tercera fase requieren 64 relojes cada una, mientras que la fase media requiere 256 relojes. Esto significa que para la operación continua, la primera memoria tendrá que ser 4 memorias separadas con 256 ubicaciones cada una, deberá tener cuatro copias intercaladas de la fase media, cada una alimentando su propio FIFO, y la tercera fase tendrá que cambiar secuencialmente entre las salidas FIFO. (Tenga en cuenta que este problema no se presenta si el número de píxeles en cada grupo es al menos tan grande como el número de valores).
Esta implementación podría procesar píxeles de entrada y salida continuamente, y la latencia total desde la entrada a la salida sería 64 + 256 = 320 relojes.