Implementé el codificador DES (Data Encryption Standard) en VHDL utilizando ISE IDE de Xilinx en una arquitectura secuencial que fue bastante fácil y directa. Ahora mi tarea es hacer lo mismo utilizando la arquitectura segmentada para que todo funcione con la máxima frecuencia de reloj posible. Leí numerosos artículos del sitio de IEEE relacionados con el desalineado, pero aún así no pude entender completamente el tema. ¿Que es diferente? Hasta ahora entendí que tengo que hacerlo así:
No hay instrucciones complejas en el código de cada módulo. Por ejemplo, si tuviera la instrucción "x < = a * b * c", tendría que dividirla en dos instrucciones para el bucle for y cuando el iterador sea igual a 0, haga "temp < = a * b" y cuando iterador es igual a 1 do "x < = temp * c". Solo un ejemplo, pero muestra la forma de pensar, en lugar de instrucciones complejas, muchas sencillas (con loops o para generar).
Una vez que la entrada A llega a la Ronda 2 de Feistel, la entrada B (por ejemplo, la siguiente palabra de texto simple de 64 bits) se carga inmediatamente a la Ronda 1 de Feistel y así sucesivamente, lo que nos permite procesar 16 palabras "casi simultáneamente". Eso requerirá que tengamos un registro de sincronización antes y después de cada módulo de función de Feistel. También leí algo sobre los módulos para "canalización" y "módulo de control", aunque ninguno de los artículos mencionó cómo funcionaron. Para ser honesto, no tengo ninguna idea sobre cómo implementar esta parte.
¿Mis suposiciones están equivocadas en alguno de los 2 puntos? ¿Podría alguien explicarme en detalle cómo morder este problema? ¿Alguien tiene un ejemplo de trabajo codificado / descodificador DES en FPGA? Estaré agradecido por cada ayuda.