jueves, 30 de diciembre de 2010

Error: Aggregate expression cannot be scalar type . . .


El mensaje de error:  " Aggregate expression cannot be scalar type ieee.std_logic_1164.std_logic" 

Puede tener diferentes fuentes. En este caso analizaremos el error asociado a la siguiente expresión:

dato_out(7 downto 0)   <=   data_shift(7 downto 0);

En realidad el problema acá es que algunos compiladores no permiten el uso de un 'rango' en lado izquierdo de una instrucción de asignación. Por lo que la solución es bastante sencilla, tanto como definir una señal 'temporaria' a la cual se la usara como intermedia para la asignación libre de error:


signal data_out_tmp: std_logic_vector (7 downto 0); 
. . . 
data_out_tmp <=  data_shift(7 downto 0);


data_out          <= data_out_tmp; 


Un error menos ! :) 


HapyyNew Year !
Feliz Año Nuevo ! 

martes, 14 de diciembre de 2010

Slack Positivo/Negativo ?

Slack = Tiempo Requerido - Tiempo de Arribo

Donde:

Tiempo Requerido: usualmente el periodo del reloj
Tiempo de Arribo: tiempo que tarda una señal en llegar a cierto punto.

Un Slack positivo de un valor n, significa que el tiempo de arribo al nodo en cuestión puede ser incrementado por n sin afectar el retardo general del circuito. Si todos los Slacks del reporte son positivos, de 10 !!!!
Contrariamente, un Slack negativo implica que el path es demasiado lento, y deberá ser 'acelerado' si se desea que el diseño trabaje a la frecuencia deseada. Si hay algun Slack negativo, mmmmm a trabajar... primero encontrar la razon (investigar el timing path presentado por el Post P&R Timing report), y después ver como se puede solucionar (pipelining, etc)

El valor del Slack es presentado por el post-P&R Timing Report. Generalmente el reporte ordena los Slacks de menor valor, comenzando con los valores negativos si hay, a los Slacks de mayor valor. La cantidad de información presentada depende del seteo de la herramienta. Por lo general, por defecto se muestran los primeros 5 o 10 paths con menor Slack, pero esta cantidad de paths a presentar es configurable por el usuario. Por ejemplo en ISE 12, seleccione Implement Design->Place & Route -> Generate Post_place & Route Static Timing. Presione botón derecho del mouse, y seleccione Properties. 'Number of Paths in Error/Verbose Report' es la propiedad a cambiar para seleccionar la cantidad de paths a ser mostrados durante el timing report.

Qué significa Timing Score en el Timing Report de ISE (Xilinx) ?

Cuando el proceso 'Place & Route' es ejecutado, se reporta un mensaje como el siguiente:

Timing Score: nnnn

donde nnnn es un numero que puede ser '0' o puede ser cualquier otro número.

Qué significa éste número?
El Timing Score representa el valor total que representa los análisis de los tiempos para todos las restricciones (constraints) y por cuanto las restricciones no se cumplen. Es decir, es la suma en picosegundos de TODAS las restricciones que no se cumplen. También se puede decir que es la suma del valor absoluto de TODOS los Slacks, cuando los slacks son negativos), expresados en picosegundos.
Mientras mas chico es el valor del Timing Score, es mejor el resultado.

Por todo lo dicho qué significa que el Timing Score sea igual a '0'??????

Significa que TODOS los timing constraints se cumplieron satisfactoriamente.

Ahora bien, la información dada por el Timing Score cuando éste numero es distinto de '0', no es muy útil. Por ejemplo, si se obtiene un Timing Score de 20,000; esto número puede significar:
a- Un simple path está fallando el timing constraint por 20ns.
b- 200 paths están fallando el timing constraint por 1 ns.
En el caso a) se puede asegurarse que el path que no cumple el timing por 20ns , seguro que fallara en Hardware. Mientras que en el caso b), el sistema 'puede' llegar a trabajar en Hardware, aunque no en los casos de bajo voltaje o alta temperatura.

Como conclusión, si el Timing Score es '0', todo bien ! ; si el Timing Score es != '0' (distinto de '0'), será necesario chequear en detalle el post P&R Timing Report para ver cual/es son los paths que no cumplen la(s) restricción(es).