Habiendo logrado hacer funcionar un ejemplo básico de FPGA en la parallella, que consiste en escribir en dos posiciones de memoria y leer en otra el resultado de una operación matemática o lógica, rumbo a implementar MD5, corresponde ir modificando el ejemplo para que
Partiendo de esta linea en src/accelerator/hdl/accelerator.v
//(PUT CODE HERE!)
assign result[31:0] = reg_input0[31:0] + reg_input1[31:0];
tengo que pasarle el hash que espero, de 16 bytes (128 bits). Esos reg_inputX ya son 64 bits, así que necesitaría reg_input2 y reg_input3.
Luego necesito un contador de 0x0000...0000 a 0xFFFF...FFFF, comenzando por 24 bits, 16777216 combinaciones, que es lo que vengo manejando como unidad de cálculo. Si fuera increiblemente veloz, tendría que expandir.
Luego una operación lógica muy sencilla aplicada sobre el contador.
Luego, una comparación de los reg_inputX con la salida de la operación lógica muy sencilla.
Y finalmente, reemplazar la función lógica muy sencilla por el pipeline de MD5
Y eso es todo... no, falta todo el asunto del clocking, parar el contador cuando el comparador de igual y restar al contador la cantidad de etapas en el pipeline para saber cual era el valor originario de la comparación cierta, esto último en la CPU, no es una operación frecuente.
Y además el contador podría implementarse con DSPs, quizás el comparador tambien.
Y además, dependiendo de cuantos recursos queden libres, hacer dos o más calculadores.
No hay comentarios:
Publicar un comentario