1 / 76

1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones

José Alejandro Piñeiro Riobó. } IMPLEMENTACIÓN VLSI DEL ALGORITMO CORDIC EN MODO VECTORIZACIÓN UTILIZANDO RADIX ALTO ~. 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones. ALGORITMO CORDIC.

Download Presentation

1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. José Alejandro Piñeiro Riobó }IMPLEMENTACIÓN VLSI DEL ALGORITMO CORDIC EN MODO VECTORIZACIÓN UTILIZANDO RADIX ALTO~ 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones

  2. ALGORITMO CORDIC • Algoritmo iterativo para la rotación de un vector en un sistema de coordenadas lineales, circulares o hiperbólicas. 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones • Permite realizar transformaciones de coordenadas y el cálculo de una gran variedad de funciones trigonométricas e hiperbólicas, entre otras. • Utilizado en procesado digital de señales y gráficos 3D, álgebra matricial, radar y robótica, entre otras aplicaciones.

  3. ALGORITMO CORDIC • Algoritmo iterativo para la rotación de un vector en un sistema de coordenadas lineales, circulares o hiperbólicas. 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones • Permite realizar transformaciones de coordenadas y el cálculo de una gran variedad de funciones trigonométricas e hiperbólicas, entre otras. • Utilizado en procesado digital de señales y gráficos 3D, álgebra matricial, radar y robótica, entre otras aplicaciones.

  4. ALGORITMO CORDIC • Algoritmo iterativo para la rotación de un vector en un sistema de coordenadas lineales, circulares o hiperbólicas. 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones • Permite realizar transformaciones de coordenadas y el cálculo de una gran variedad de funciones trigonométricas e hiperbólicas, entre otras. • Utilizado en procesado digital de señales y gráficos 3D, álgebra matricial, radar y robótica, entre otras aplicaciones.

  5. ALGORITMO CORDIC • Algoritmo iterativo para la rotación de un vector en un sistema de coordenadas lineales, circulares o hiperbólicas. 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones • Permite realizar transformaciones de coordenadas y el cálculo de una gran variedad de funciones trigonométricas e hiperbólicas, entre otras. • Utilizado en procesado digital de señales y gráficos 3D, álgebra matricial, radar y robótica, entre otras aplicaciones.

  6. ALGORITMO CORDIC • Formulación convencional: recurrencia radix 2(se extrae 1 bit del resultado en cada iteración). • Iteraciones lentas. • Elevada latencia para un tamaño de palabra elevado. 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones • Soluciones: • Uso de sumadores rápidos (CLA) y/o aritmética redundante (carry-save, signed-digit). • Empleo de recurrencias con un radix alto r = 2b (se extraen b bits del resultado en cada iteración).

  7. ALGORITMO CORDIC • Formulación convencional: recurrencia radix 2(se extrae 1 bit del resultado en cada iteración). • Iteraciones lentas. • Elevada latencia para un tamaño de palabra elevado. 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones • Soluciones: • Uso de sumadores rápidos (CLA) y/o aritmética redundante (carry-save, signed-digit). • Empleo de recurrencias con un radix alto r = 2b (se extraen b bits del resultado en cada iteración).

  8. ALGORITMO CORDIC • Formulación convencional: recurrencia radix 2(se extrae 1 bit del resultado en cada iteración). • Iteraciones lentas. • Elevada latencia para un tamaño de palabra elevado. 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones • Soluciones: • Uso de sumadores rápidos (CLA) y/o aritmética redundante (carry-save, signed-digit). • Empleo de recurrencias con un radix alto r = 2b (se extraen b bits del resultado en cada iteración).

  9. ALGORITMO CORDIC • Formulación convencional: recurrencia radix 2(se extrae 1 bit del resultado en cada iteración). • Iteraciones lentas. • Elevada latencia para un tamaño de palabra elevado. 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones • Soluciones: • Uso de sumadores rápidos (CLA) y/o aritmética redundante (carry-save, signed-digit). • Empleo de recurrencias con un radix alto r = 2b (se extraen b bits del resultado en cada iteración).

  10. ALGORITMO CORDIC • Formulación convencional: recurrencia radix 2(se extrae 1 bit del resultado en cada iteración). • Iteraciones lentas. • Elevada latencia para un tamaño de palabra elevado. 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones • Soluciones: • Uso de sumadores rápidos (CLA) y/o aritmética redundante (carry-save, signed-digit). • Empleo de recurrencias con un radix alto r = 2b (se extraen b bits del resultado en cada iteración).

  11. ALGORITMO CORDIC • Formulación convencional: recurrencia radix 2(se extrae 1 bit del resultado en cada iteración). • Iteraciones lentas. • Elevada latencia para un tamaño de palabra elevado. 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones • Soluciones: • Uso de sumadores rápidos (CLA) y/o aritmética redundante (carry-save, signed-digit). • Empleo de recurrencias con un radix alto r = 2b (se extraen b bits del resultado en cada iteración).

  12. ALGORITMO CORDIC CON RADIX ALTO EN MODO VECTORIZACIÓN • Modo vectorización.- Rotación del vector inicial hasta que se sitúa sobre el eje de coordenadas X. Resultados: xN+1=módulo y zN+1=argumento. • Fundamento: descomposición del ángulo de rotación q en una suma de ángulos elementales: • Los coeficientes si toman valores enteros en el intervalo {-(r -1), ... , 0, ... , (r -1)}, siendo el radix r = 2b. 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones

  13. ALGORITMO CORDIC CON RADIX ALTO EN MODO VECTORIZACIÓN • Modo vectorización.- Rotación del vector inicial hasta que se sitúa sobre el eje de coordenadas X. Resultados: xN+1=módulo y zN+1=argumento. • Fundamento: descomposición del ángulo de rotación q en una suma de ángulos elementales: • Los coeficientes si toman valores enteros en el intervalo {-(r -1), ... , 0, ... , (r -1)}, siendo el radix r = 2b. 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones

  14. a1 a3 a2 ALGORITMO CORDIC CON RADIX ALTO EN MODO VECTORIZACIÓN 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones Y q =a1+a2+a3+... X

  15. ALGORITMO CORDIC CON RADIX ALTO EN MODO VECTORIZACIÓN • Modo vectorización.- Rotación del vector inicial hasta que se sitúa sobre el eje de coordenadas X. Resultados: xN+1=módulo y zN+1=argumento. • Fundamento: descomposición del ángulo de rotación q en una suma de ángulos elementales: • Los coeficientes si toman valores enteros en el intervalo {-(r -1), ... , 0, ... , (r -1)}, siendo el radix r = 2b. 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones

  16. ALGORITMO CORDIC CON RADIX ALTO EN MODO VECTORIZACIÓN • Expresión de las recurrencias: d[i+1] = d[i] +sir -2iw[i] w[i+1] = r(w[i] -sid[i]) z[i+1] = z[i] + tan-1(sir -i) • con d[1] =xin, w[1] = r yin, z[1] = 0. • Los coeficientes si se seleccionan mediante el redondeo de w[i] truncado a t bits fraccionales: si=round (w[i]t ) 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones

  17. ALGORITMO CORDIC CON RADIX ALTO EN MODO VECTORIZACIÓN • Expresión de las recurrencias: d[i+1] = d[i] +sir -2iw[i] w[i+1] = r(w[i] -sid[i]) z[i+1] = z[i] + tan-1(sir -i) • con d[1] =xin, w[1] = r yin, z[1] = 0. • Los coeficientes si se seleccionan mediante el redondeo de w[i] truncado a t bits fraccionales: si=round (w[i]t ) 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones

  18. ALGORITMO CORDIC CON RADIX ALTO EN MODO VECTORIZACIÓN • Expresión de las recurrencias: d[i+1] = d[i] +sir -2iw[i] w[i+1] = r(w[i] -sid[i]) z[i+1] = z[i] + tan-1(sir -i) • con d[1] =xin, w[1] = r yin, z[1] = 0. • Los coeficientes si se seleccionan mediante el redondeo de w[i] truncado a t bits fraccionales: si=round (w[i]t ) 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones

  19. ALGORITMO CORDIC CON RADIX ALTO EN MODO VECTORIZACIÓN • Necesidad de dos escalados de la recurrencia (empleo de los factores M1 y M2) para asegurar convergencia. • Uno antes y otro después de la primera microrrotación. 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones • Para simplificar el primer escalado, se utiliza un radix R inferior en la primera microrrotación, siendo: R = 2B> 2ëb/2û+1, para t >2 • Extensión del rango de convergencia. • Comparación de los F bits más significativos de xin e yin. • Si yin >xin+2-F, intercambio, z[1] =p/2 y se decrementa.

  20. ALGORITMO CORDIC CON RADIX ALTO EN MODO VECTORIZACIÓN • Necesidad de dos escalados de la recurrencia (empleo de los factores M1 y M2) para asegurar convergencia. • Uno antes y otro después de la primera microrrotación. 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones • Para simplificar el primer escalado, se utiliza un radix R inferior en la primera microrrotación, siendo: R = 2B> 2ëb/2û+1, para t >2 • Extensión del rango de convergencia. • Comparación de los F bits más significativos de xin e yin. • Si yin >xin+2-F, intercambio, z[1] =p/2 y se decrementa.

  21. ALGORITMO CORDIC CON RADIX ALTO EN MODO VECTORIZACIÓN • Necesidad de dos escalados de la recurrencia (empleo de los factores M1 y M2) para asegurar convergencia. • Uno antes y otro después de la primera microrrotación. 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones • Para simplificar el primer escalado, se utiliza un radix R inferior en la primera microrrotación, siendo: R = 2B> 2ëb/2û+1, para t >2 • Extensión del rango de convergencia. • Comparación de los F bits más significativos de xin e yin. • Si yin >xin+2-F, intercambio, z[1] =p/2 y se decrementa.

  22. ALGORITMO CORDIC CON RADIX ALTO EN MODO VECTORIZACIÓN • Necesidad de dos escalados de la recurrencia (empleo de los factores M1 y M2) para asegurar convergencia. • Uno antes y otro después de la primera microrrotación. 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones • Para simplificar el primer escalado, se utiliza un radix R inferior en la primera microrrotación, siendo: R = 2B> 2ëb/2û+1, para t >2 • Extensión del rango de convergencia. • Comparación de los F bits más significativos de xin e yin. • Si yin >xin+2-F, intercambio, z[1] =p/2 y se decrementa.

  23. ALGORITMO CORDIC CON RADIX ALTO EN MODO VECTORIZACIÓN • Existencia de un factor de escala Ki en las variables d y w en cada microrrotación. • El factor de escala global viene dado por: • K depende del ángulo. • Cómputo de ln(K -1): g[i+1] = g[i] - (1/2)ln(1+si2r -2i). • Compensación evaluando la función exponencial: xr = xC·exp(ln(K -1)) = xC·K -1 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones

  24. ALGORITMO CORDIC CON RADIX ALTO EN MODO VECTORIZACIÓN • Existencia de un factor de escala Ki en las variables d y w en cada microrrotación. • El factor de escala global viene dado por: • K depende del ángulo. • Cómputo de ln(K -1): g[i+1] = g[i] - (1/2)ln(1+si2r -2i). • Compensación evaluando la función exponencial: xr = xC·exp(ln(K -1)) = xC·K -1 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones

  25. ALGORITMO CORDIC CON RADIX ALTO EN MODO VECTORIZACIÓN • Existencia de un factor de escala Ki en las variables d y w en cada microrrotación. • El factor de escala global viene dado por: • K depende del ángulo. • Cómputo de ln(K -1): g[i+1] = g[i] - (1/2)ln(1+si2r -2i). • Compensación evaluando la función exponencial: xr = xC·exp(ln(K -1)) = xC·K -1 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones

  26. ALGORITMO CORDIC CON RADIX ALTO EN MODO VECTORIZACIÓN • Existencia de un factor de escala Ki en las variables d y w en cada microrrotación. • El factor de escala global viene dado por: • K depende del ángulo. • Cómputo de ln(K -1): g[i+1] = g[i] - (1/2)ln(1+si2r -2i). • Compensación evaluando la función exponencial: xr = xC·exp(ln(K -1)) = xC·K -1 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones

  27. ALGORITMO CORDIC CON RADIX ALTO EN MODO VECTORIZACIÓN • Existencia de un factor de escala Ki en las variables d y w en cada microrrotación. • El factor de escala global viene dado por: • K depende del ángulo. • Cómputo de ln(K -1): g[i+1] = g[i] - (1/2)ln(1+si2r -2i). • Compensación evaluando la función exponencial: xr = xC·exp(ln(K -1)) = xC·K -1 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones

  28. ARQUITECTURA • Arquitectura palabra-serie. • Formato de punto fijo. • Arquitectura para el cálculo del argumento del vector de entrada: función tan-1(yin/xin). • Arquitectura para el cálculo de módulo y argumento: (xin2+yin2)½ y tan-1(yin/xin). 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones

  29. ARQUITECTURA • Arquitectura palabra-serie. • Formato de punto fijo. • Arquitectura para el cálculo del argumento del vector de entrada: función tan-1(yin/xin). • Arquitectura para el cálculo de módulo y argumento: (xin2+yin2)½ y tan-1(yin/xin). 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones

  30. ARQUITECTURA • Arquitectura palabra-serie. • Formato de punto fijo. • Arquitectura para el cálculo del argumento del vector de entrada: función tan-1(yin/xin). • Arquitectura para el cálculo de módulo y argumento: (xin2+yin2)½ y tan-1(yin/xin). 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones

  31. ARQUITECTURA • Arquitectura palabra-serie. • Formato de punto fijo. • Arquitectura para el cálculo del argumento del vector de entrada: función tan-1(yin/xin). • Arquitectura para el cálculo de módulo y argumento: (xin2+yin2)½ y tan-1(yin/xin). 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones

  32. d[i+1] = d[i] +sir -2iw[i] w[i+1] = r(w[i] -sid[i]) z[i+1] = z[i] + tan-1(sir -i) d[j+1] = d[j] + ejd[j]r -j g[j+1] = r (g[j] - rj ln(1+ejr -j)) • Arquitectura completa = Arquitectura argumento (modificada)+ vía g. g[i+1] = g[i] - (1/2)ln(1+si2r -2i)

  33. Bloques de M1 y M2.- Obtención de los factores de escalado. • Bloques de si y ej.- Selección de los coeficientes mediante redondeo. • Vías d y w.- Realización de los escalados y las microrrotaciones. • Vía z.- Determinación del ángulo elemental en cada microrrotación y cómputo del ángulo total. • Vía g.- Cómputo de ln(K -1) y, junto con la vía d, realización de las iteraciones de compensación. • Unidad de control (FSM). g

  34. IMPLEMENTACIÓN • Parámetros de diseño. • Precisión: n= 32 bits. • Radix r = 512, valor t= 3 bits . • Radix R = 32, valor F= 5 bits. • Tamaño de palabra interno: q= 38 bits fraccionales. • Es necesario realizar N= 4 microrrotaciones para alcanzar la precisión de n= 32 bits. n ³B+ (N -1)·b 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones

  35. IMPLEMENTACIÓN • Parámetros de diseño. • Precisión: n= 32 bits. • Radix r = 512, valor t= 3 bits . • Radix R = 32, valor F= 5 bits. • Tamaño de palabra interno: q= 38 bits fraccionales. • Es necesario realizar N= 4 microrrotaciones para alcanzar la precisión de n= 32 bits. n ³B+ (N -1)·b 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones

  36. IMPLEMENTACIÓN • Parámetros de diseño. • Precisión: n= 32 bits. • Radix r = 512, valor t= 3 bits . • Radix R = 32, valor F= 5 bits. • Tamaño de palabra interno: q= 38 bits fraccionales. • Es necesario realizar N= 4 microrrotaciones para alcanzar la precisión de n= 32 bits. n ³B+ (N -1)·b 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones

  37. IMPLEMENTACIÓN • Parámetros de diseño. • Precisión: n= 32 bits. • Radix r = 512, valor t= 3 bits . • Radix R = 32, valor F= 5 bits. • Tamaño de palabra interno: q= 38 bits fraccionales. • Es necesario realizar N= 4 microrrotaciones para alcanzar la precisión de n= 32 bits. n ³B+ (N -1)·b 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones

  38. IMPLEMENTACIÓN • Flujo de diseño basado en VHDL. • Herramientas CAD utilizadas en el diseño lógico: • HDLdesk, de Cadence (simulación funcional de los componentes). • Design Analyzer, de Synopsys (síntesis lógica y simulación pre-layout). • Librería de celdas estándar 0.7 mm CMOS doble metal de ES2. 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones

  39. IMPLEMENTACIÓN • Flujo de diseño basado en VHDL. • Herramientas CAD utilizadas en el diseño lógico: • HDLdesk, de Cadence (simulación funcional de los componentes). • Design Analyzer, de Synopsys (síntesis lógica y simulación pre-layout). • Librería de celdas estándar 0.7 mm CMOS doble metal de ES2. 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones

  40. IMPLEMENTACIÓN • Flujo de diseño basado en VHDL. • Herramientas CAD utilizadas en el diseño lógico: • HDLdesk, de Cadence (simulación funcional de los componentes). • Design Analyzer, de Synopsys (síntesis lógica y simulación pre-layout). • Librería de celdas estándar 0.7 mm CMOS doble metal de ES2. 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones

  41. IMPLEMENTACIÓN • Flujo de diseño basado en VHDL. • Herramientas CAD utilizadas en el diseño lógico: • HDLdesk, de Cadence (simulación funcional de los componentes). • Design Analyzer, de Synopsys (síntesis lógica y simulación pre-layout). • Librería de celdas estándar 0.7 mm CMOS doble metal de ES2. 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones

  42. IMPLEMENTACIÓN • Flujo de diseño basado en VHDL. • Herramientas CAD utilizadas en el diseño lógico: • HDLdesk, de Cadence (simulación funcional de los componentes). • Design Analyzer, de Synopsys (síntesis lógica y simulación pre-layout). • Librería de celdas estándar 0.7 mm CMOS doble metal de ES2. 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones

  43. IMPLEMENTACIÓN • Multiplicadores-Acumuladores (MAC): • Evaluación de la operación: h=a +b ·c. • Representación de los operandos: • Complemento a dos: sumando ( a ) y multiplicando ( c ). • SD-radix 4: multiplicador ( b); reduce a la mitad el número de productos parciales a acumular. 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones

  44. IMPLEMENTACIÓN • Multiplicadores-Acumuladores (MAC): • Evaluación de la operación: h=a +b ·c. • Representación de los operandos: • Complemento a dos: sumando ( a ) y multiplicando ( c ). • SD-radix 4: multiplicador ( b); reduce a la mitad el número de productos parciales a acumular. 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones

  45. IMPLEMENTACIÓN • Multiplicadores-Acumuladores (MAC): • Evaluación de la operación: h=a +b ·c. • Representación de los operandos: • Complemento a dos: sumando ( a ) y multiplicando ( c ). • SD-radix 4: multiplicador ( b); reduce a la mitad el número de productos parciales a acumular. 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones

  46. IMPLEMENTACIÓN • Multiplicadores-Acumuladores (MAC): • Evaluación de la operación: h=a +b ·c. • Representación de los operandos: • Complemento a dos: sumando ( a ) y multiplicando ( c ). • SD-radix 4: multiplicador ( b); reduce a la mitad el número de productos parciales a acumular. 1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones

  47. ARCHITECTURE behave OF mac_d IS -- Declaración del componente CSA_TREE -- Declaración de señales y constantes for U1 : csa_tree Use Entity work.csa_tree(crypt); BEGIN partial1:process(b) begin for i in 0 to 7 loop b0(i)<=b(3*i); b1(i)<=b(3*i+1); b2(i)<=b(3*i+2); end loop; end process partial1; partial2:process(b0,b1,b2,c) begin for i in 0 to 7 loop res(i)(0)<=b0(i) xor ((c(0) nand b1(i)) nand ('0' nand b2(i))); for j in 1 to 40 loop res(i)(j)<=b0(i) xor ((c(j) nand b1(i)) nand (c(j-1) nand b2(i))); end loop; res(i)(41)<=b0(i) xor ((c(40) nand b1(i)) nand (c(40) nand b2(i))); end loop; end process partial2; partial3:process(res,add_ct,a) begin if add_ct='0' then PP1(57 downto 42)<=(others=>res(0)(41)); PP1(41 downto 0)<= res(0); else PP1(57 downto 48)<=(others=>a(40)); PP1(47 downto 7)<= a; PP1(6 downto 0)<=(others=>’0’); end if; PP2(57 downto 44)<=(others=>res(1)(41)); PP2(43 downto 2)<= res(1); PP3(57 downto 46)<=(others=>res(2)(41)); PP3(45 downto 4)<= res(2); PP4(57 downto 48)<=(others=>res(3)(41)); PP4(47 downto 6)<= res(3); -- Sigue la construcción de prod. parc. hasta PP8 end process partial3; U1 : csa_tree port map (PP1,PP2,PP3,PP4,PP5,PP6,PP7,PP8,ssm,crr); END behave;

  48. ARCHITECTURE behave OF mac_d IS -- Declaración del componente CSA_TREE -- Declaración de señales y constantes for U1 : csa_tree Use Entity work.csa_tree(crypt); BEGIN partial1:process(b) begin for i in 0 to 7 loop b0(i)<=b(3*i); b1(i)<=b(3*i+1); b2(i)<=b(3*i+2); end loop; end process partial1; partial2:process(b0,b1,b2,c) begin for i in 0 to 7 loop res(i)(0)<=b0(i) xor ((c(0) nand b1(i)) nand ('0' nand b2(i))); for j in 1 to 40 loop res(i)(j)<=b0(i) xor ((c(j) nand b1(i)) nand (c(j-1) nand b2(i))); end loop; res(i)(41)<=b0(i) xor ((c(40) nand b1(i)) nand (c(40) nand b2(i))); end loop; end process partial2; partial3:process(res,add_ct,a) begin if add_ct='0' then PP1(57 downto 42)<=(others=>res(0)(41)); PP1(41 downto 0)<= res(0); else PP1(57 downto 48)<=(others=>a(40)); PP1(47 downto 7)<= a; PP1(6 downto 0)<=(others=>’0’); end if; PP2(57 downto 44)<=(others=>res(1)(41)); PP2(43 downto 2)<= res(1); PP3(57 downto 46)<=(others=>res(2)(41)); PP3(45 downto 4)<= res(2); PP4(57 downto 48)<=(others=>res(3)(41)); PP4(47 downto 6)<= res(3); -- Sigue la construcción de prod. parc. hasta PP8 end process partial3; U1 : csa_tree port map (PP1,PP2,PP3,PP4,PP5,PP6,PP7,PP8,ssm,crr); END behave;

More Related