Este artículo discutirá la restricción de tiempo del Período Xilinx que nos permite describir las características de la señal de reloj que se utilizará con un diseño FPGA.
Este artículo analizará primero los diferentes retrasos que se observan cuando se propagan datos en una ruta típica de un sistema digital. Después de encontrar la ecuación para la velocidad de reloj máxima de esta ruta de datos típica, analizaremos la restricción de tiempo del Período Xilinx. Esta restricción de tiempo fundamental nos permite describir las características de la señal de reloj que se utilizará con un diseño FPGA.
En un diseño de FPGA, generalmente tenemos circuitos combinacionales con capas intermedias de registros. La figura 1 a continuación muestra un ejemplo simple de este concepto.
En esta figura, las nubes representan circuitos combinacionales.
Examinemos la velocidad de reloj máxima que se puede aplicar al diagrama de bloques de la Figura 1. Para hacer esto, examinaremos los diferentes retrasos que se introducen en los datos que se propagan desde la entrada, ADATA, a la entrada del segundo flip-flop , D2.
Como se muestra en la Figura 2, en el borde ascendente del reloj, una primera muestra de los datos de entrada, ADATA1, se toma en el primer flip-flop, FLOP1. Un flip-flop no puede actualizar su salida inmediatamente después del borde del reloj. Debido a este retraso, que se denomina retraso de reloj a Q, la salida de FLOP1 cambiará en $$ t_1 $$ como se muestra en la Figura 2. Por lo tanto, $$ t_1 = t_0 + Delta T_ {clk-to- Q} $$.
Tenga en cuenta que las partes de las formas de onda que corresponden a las muestras tomadas antes de ADATA1 se muestran en rojo en la Figura 2.
Luego, ADATA1 será procesado por el circuito combinacional entre FLOP1 y FLOP2. Supongamos que, en función del valor de la entrada, el retraso de este circuito combinatorio puede variar entre un valor mínimo y uno máximo que son $$ Delta T_ {comb, ; min} $$ y $$ Delta T_ {comb, ; max} $$, respectivamente. Cuando el circuito responde con su retraso mínimo, obtenemos los datos en $$ t_2 = t_0 + Delta T_ {clk-to-Q} + Delta T_ {comb, ; min} $$. Cuando el circuito muestra su retraso máximo, tenemos los datos procesados en $$ t_3 = t_0 + Delta T_ {clk-to-Q} + Delta T_ {comb, ; max} $$. Por lo tanto, para asegurarnos de que los datos sean válidos para cualquier entrada, debemos esperar hasta $$ t_3 $$ como se muestra en la figura.
Además de los retrasos que hemos analizado hasta ahora, hay otro problema importante de temporización llamado tiempo de configuración del elemento síncrono ($$ Delta T_ {setup} $$). De acuerdo con la restricción de tiempo de configuración, un elemento síncrono puede tomar una muestra con éxito de su entrada solo si la señal de entrada es estable al menos $$ Delta T_ {setup} $$ antes del borde del reloj de muestreo.
En la Figura 1, Flop2 muestreará los datos procesados por el circuito combinacional. Por lo tanto, debemos tener en cuenta la restricción de tiempo de configuración de FLOP2.
Con las formas de onda de ejemplo que se muestran en la Figura 2, el borde de muestreo de FLOP2 está en $$ t_0 + Delta T_ {clk} $$ donde $$ Delta T_ {clk} $$ es el período del reloj. Por lo tanto, los datos procesados por el circuito combinado deben estar listos en $$ t_4 $$ que es $$ Delta T_ {configuración} $$ antes de $$ t_0 + Delta T_ {clk} $$, es decir $$ t_4 = t_0 + Delta T_ {clk} – Delta T_ {setup} $$. Por lo tanto, $$ t_3 leq t_4 $$ debe ser satisfecho lo que da
$$ t_0 + Delta T_ {clk-to-Q} + Delta T_ {comb, ; max} leq t_0 + Delta T_ {clk} – Delta T_ {setup} $$
A partir de esto, sabemos que el período mínimo de reloj será $$ Delta T_ {clk, ; min} = Delta T_ {clk-to-Q} + Delta T_ {comb, ; max} + Delta T_ {setup} $$.
Esto da la frecuencia de reloj máxima como
$$ f_ {clk, ; max} = frac {1} { Delta T_ {clk-to-Q} + Delta T_ {comb, ; max} + Delta T_ {setup}} $$
Con una frecuencia de reloj superior a $$ f_ {clk, ; max} $$, el correcto funcionamiento del circuito no está garantizado. Tenga en cuenta que solo hemos analizado la propagación de datos desde la entrada ADATA a la entrada del segundo flip-flop D2. Se puede aplicar un análisis similar al resto de la ruta de datos y, luego, podemos elegir una frecuencia de reloj máxima que satisfaga los requisitos de tiempo de todas las partes de la ruta de datos.
Si necesitamos operar este circuito a una frecuencia de reloj superior a $$ f_ {clk, ; max} $$, podemos examinar agregando más capas de registros. Esto reducirá $$ T_ {comb, ; max} $$ y aumentar $$ f_ {clk, ; max} $$ según la ecuación 1.
Tenga en cuenta que el sesgo del reloj también puede afectar la velocidad de reloj máxima que podemos aplicar a un circuito. El sesgo del reloj es un fenómeno en el que la misma señal de reloj originada llega a diferentes componentes en diferentes momentos. Puede encontrar algunos detalles sobre el fenómeno del sesgo del reloj y los métodos para desviar las señales del reloj en mi artículo sobre los recursos del reloj de los FPGA. La discusión anterior no ha incluido el efecto del sesgo de reloj en la ecuación de velocidad de reloj máxima. Consulte el Capítulo 16 de Diseño de hardware RTL usando VHDL: Codificación para eficiencia, portabilidad y escalabilidad para obtener más información.
Queda una pregunta importante: ¿cómo tenemos en cuenta todos estos requisitos de tiempo cuando sintetizamos el código VHDL del diagrama de bloques en la Figura 1? Podemos asumir una frecuencia de reloj basada en los requisitos de nivel del sistema, pero ¿cómo transmitimos estos datos a la herramienta de síntesis? Esto se logra mediante las restricciones de tiempo y síntesis que soporta una herramienta de diseño FPGA. Como sugiere su nombre, una restricción obliga a la herramienta de diseño a satisfacer un requisito particular. Este requisito en particular puede o no cumplirse si no especificamos la restricción correspondiente. En otras palabras, una restricción dirige el software hacia la implementación del código HDL de una manera particular.
Tenga en cuenta que hay muchas restricciones pero, en este artículo, nos centraremos en una restricción fundamental de tiempo y síntesis para las herramientas Xilinx, que se llama la restricción PERÍODO.
La restricción PERÍODO de Xilinx define el período del reloj que se utilizará para operar el código HDL implementado. Por ejemplo, suponga que ha escrito el código VHDL para el diagrama de bloques de la Figura 1. Luego, tiene un puerto llamado CLK en su entidad. Si no especifica la restricción de PERÍODO para este reloj, el software de síntesis no sabe realmente la frecuencia del reloj que se conectará al puerto CLK. El software sintetizará su código en función de algunas configuraciones predeterminadas, incluso si no tiene la restricción PERÍODO. Sin embargo, cuando conecta su diseño a un reloj con una frecuencia determinada, su circuito puede o no funcionar como se espera.
Cuando especifica la restricción de PERÍODO para CLK en la Figura 1, el software de síntesis realiza un análisis de tiempo similar al que hicimos manualmente en la sección anterior. Encuentra todos los elementos síncronos que están conectados a CLK y, a continuación, examina los requisitos de tiempo de todos los circuitos combinacionales que están entre dos elementos síncronos conectados a CLK. Si su diseño puede funcionar de manera confiable a la frecuencia de reloj especificada, el software informará que se cumplieron los requisitos de tiempo, de lo contrario, dará las rutas que tienen problemas de tiempo.
Tenga en cuenta que PERIOD es una restricción global y se aplicará a todas las rutas que se encuentren entre dos elementos síncronos conectados a CLK.
Supongamos que operaremos el diagrama de bloques de la Figura 1 a una velocidad de reloj de 50 MHz. Para especificar la restricción PERIOD para el puerto CLK, primero debemos agregar un "archivo de restricción definido por el usuario (.ucf)" a nuestro proyecto Xilinx como se explicará en la siguiente sección. Luego, podemos incluir la siguiente línea en nuestro archivo ucf para especificar el período de reloj:
PERÍODO NETO CLK = 20 ns;
Aquí, "NET" y "PERÍODO" son palabras clave y CLK es el nombre de nuestra señal de reloj. Otra sintaxis para especificar esta restricción es mediante el uso de la palabra clave TIMESPEC:
NET CLK TNM = SYSCLK;
TIMESPEC TS_SYSCLK = PERIOD SYSCLK 20;
La primera línea utiliza la palabra clave TNM, que significa "nombre de tiempo", para crear un grupo definido por el usuario con el nombre SYSCLK. La segunda línea utiliza la palabra clave TIMESPEC para definir las especificaciones de tiempo en el grupo creado. Tenga en cuenta que después de la palabra clave TIMESPEC, tenemos un nombre de TIMESPEC arbitrario que debe comenzar con "TS". Además, tenga en cuenta que la unidad predeterminada para el tiempo es nanosegundos. Xilinx recomienda usar la segunda sintaxis para especificar una restricción de PERÍODO. Sin embargo, esta sintaxis puede parecer un poco confusa al principio. Para sentirse más cómodo con la sintaxis de estos dos métodos, aplique su conocimiento a los siguientes ejemplos:
PERÍODO NETO clk20MHz = 50;
NET clk50mhz TNM = registros_50mhz;
TIMESPEC TS01 = registros de PERÍODO_50mhz 20;
Con la restricción de período, también podemos especificar el borde inicial, el ciclo de trabajo y la fluctuación de fase del reloj utilizado. A continuación se muestra un ejemplo.
TIMESPEC TS_master = PERÍODO "master_clk" 50 HIGH 30 INPUT_JITTER 50 ps;
Esto define un período de reloj de 50 nanosegundos, con un tiempo inicial máximo de 30 nanosegundos, e INPUT_JITTER a 50 ps. Tenga en cuenta que la palabra clave ALTA o BAJA se puede usar para indicar si el primer pulso en el período es alto o bajo. Además, tenga en cuenta que podemos encerrar los nombres de TIMESPEC y NET entre comillas dobles (consulte la página 35 de la Guía de restricciones de Xilinx y este Registro de respuestas).
En un artículo anterior, discutimos el código VHDL para un algoritmo básico de división binaria. Ahora, usaremos una restricción de PERÍODO para especificar la frecuencia de reloj de nuestro algoritmo de división. Primero, debemos agregar un archivo de restricción definido por el usuario (.ucf) a nuestro proyecto. En el software ISE, haga clic en "Nueva fuente" y seleccione "Archivo de restricciones de implementación" como el tipo de archivo fuente. Esto se muestra en la Figura 3 a continuación. Asigne un nombre a este nuevo archivo de origen "My_Constraints.ucf" y continúe con el resto del "Asistente de nueva fuente".
Copie las siguientes líneas a su archivo ucf:
NET "clk" LOC = "p85";
NET "clk" TNM_NET = clk;
TIMESPEC TS_clk = PERÍODO "clk" 300 MHz HIGH 50%;
Aquí, clk es el nombre de la señal de reloj utilizada en nuestro algoritmo de división. La primera línea especifica que el puerto clk de la entidad divisora se conectará al pin P85 del FPGA (hemos utilizado spartan 6 xc6slx9 con el paquete TQG144 para este proyecto). Las siguientes dos líneas crean un grupo definido por el usuario con el nombre clk y utiliza la palabra clave TIMESPEC para definir las especificaciones de tiempo en el grupo creado. El reloj será una señal de 300 MHz con un ciclo de trabajo del 50%. Tenga en cuenta que, con TIMESPEC, puede especificar la frecuencia de reloj en lugar del período de reloj como se utilizó en los ejemplos de la sección anterior. Además, este ejemplo especifica el ciclo de trabajo como un porcentaje (50%).
Ahora, implemente el diseño y elija "Informe de tiempo estático post-PAR" del "Resumen de diseño" para ver si los requisitos de tiempo se cumplieron o no. Al final del informe, verá el "Resumen de tiempos" como se muestra en la Figura 4.
Como puede ver, no hay errores de tiempo y la frecuencia máxima del diseño es de aproximadamente 334 MHz.
Como otro experimento, aumentemos la frecuencia de reloj a 350 MHz en el archivo ucf y examinemos nuevamente el "Informe de temporización estática post-PAR". En este caso, el "Resumen de tiempo" será como se muestra en la Figura 5.
Ahora, hay errores de tiempo y la frecuencia de reloj máxima es más baja que la frecuencia deseada. A partir del informe de temporización podemos descubrir el camino que tiene retrasos inaceptables y, luego, podemos intentar mejorar la temporización de nuestro diseño aplicando diferentes técnicas. Puedes encontrar algunas referencias a estas técnicas aquí.
Para ver una lista completa de mis artículos, visite esta página.
ga('create', 'UA-1454132-1', 'auto'); ga('require', 'GTM-MMWSMVL'); ga('require', 'displayfeatures'); ga('set',{'dimension1':'digital-ics,embedded,eda,digital-ics,engineering-consulting'}); ga('set',{'contentGroup1':'digital-ics,embedded,eda,digital-ics,engineering-consulting'}); ga('send', 'pageview');
!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n; n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window, document,'script','https://connect.facebook.net/en_US/fbevents.js'); fbq('init', '1808435332737507'); // Insert your pixel ID here. fbq('track', 'PageView'); fbq('track', 'ViewContent', { content_ids: ['digital-ics','embedded','eda','digital-ics','engineering-consulting'], content_type: 'category'});
_linkedin_data_partner_id = "353081"; (function(){var s = document.getElementsByTagName("script")[0]; var b = document.createElement("script"); b.type = "text/javascript";b.async = true; b.src = "https://snap.licdn.com/li.lms-analytics/insight.min.js"; s.parentNode.insertBefore(b, s);})(); } if(jstz.determine().name().indexOf("Europe") === -1) { showSocialCode(); // NOT EU } else { showSocialCode(); window.addEventListener("load", function () { window.cookieconsent.initialise({ "palette": { "popup": { "background": "#252e39" }, "button": { "background": "#14a7d0" } }, "type": "opt-out", "content": { "message": "This website uses tracking cookies to ensure you get the best experience on our website.", "href": "https://www.allaboutcircuits.com/privacy-policy/", "dismiss": "OK, GOT IT" }, onInitialise: function (status) { var type = this.options.type; var didConsent = this.hasConsented(); if (type == 'opt-out' && didConsent) { console.log("eu"); //showSocialCode(); } },
onStatusChange: function (status, chosenBefore) { var type = this.options.type; var didConsent = this.hasConsented(); if (type == 'opt-out' && didConsent) { console.log("eu"); //showSocialCode(); } },
onRevokeChoice: function () { var type = this.options.type; if (type == 'opt-out') { console.log("eu"); //showSocialCode(); } },
}) }); }
Los días felices de la PDA y Blackberry han quedado definitivamente atrás, pero el factor…
Tutorial sobre cómo pronosticar usando un modelo autorregresivo en PythonFoto de Aron Visuals en UnsplashForecasting…
Si tienes un iPhone, los AirPods Pro son la opción obvia para escuchar música, ¡aunque…
Ilustración de Alex Castro / The Verge Plus nuevos rumores sobre el quinto Galaxy Fold.…
Se rumorea que los auriculares premium de próxima generación de Apple, los AirPods Max 2,…
El desarrollador Motive Studio y el editor EA han lanzado un nuevo tráiler de la…