Habilidades de programación Verilog
FPGA/CPLD
Las ideas y técnicas de diseño son un tema muy importante. Debido a limitaciones de espacio, este artículo solo presenta algunas ideas y técnicas de diseño de uso común, incluidas las operaciones de tenis de mesa. Métodos de sincronización para conversión de serie a paralelo, operaciones de canalización e interfaces de datos.
Espero que este artículo atraiga la atención de los ingenieros. Si estos principios se pueden utilizar conscientemente para guiar el trabajo de diseño futuro, lograremos el doble de resultado con la mitad de esfuerzo.
Operación de ping-pong
La "operación de ping-pong" es una técnica de procesamiento que se utiliza a menudo en el control del flujo de datos. El método típico de operación de ping-pong se muestra en la Figura 1.
Ping
El flujo de procesamiento de la operación Pong es: el flujo de datos de entrada pasa a través de la "unidad de selección de datos de entrada"
El flujo de datos se asigna de forma isócrona al área de dos buffers de datos, el módulo de buffer de datos puede ser cualquier módulo de almacenamiento, y las unidades de almacenamiento más utilizadas son RAM de doble puerto (DPRAM), RAM de puerto único (SPRAM), FIFO, etc. En el primer ciclo de almacenamiento en búfer, el flujo de datos de entrada se almacena en caché en el "módulo de búfer de datos 1"; en el segundo ciclo de almacenamiento en búfer, el flujo de datos de entrada se almacena en caché mediante la conmutación de la "unidad de selección de datos de entrada"
Almacene en caché al "Módulo de búfer de datos 2" y, al mismo tiempo, envíe los datos del primer ciclo almacenados en caché por el "Módulo de búfer de datos 1" al "Módulo de procesamiento de operaciones de flujo de datos" mediante la selección de la "Unidad de selección de datos de entrada" p>
Realice el procesamiento de cálculo; en el tercer ciclo de almacenamiento en búfer, la "unidad de selección de datos de entrada" se cambia nuevamente para almacenar en búfer el flujo de datos de entrada al
"módulo de búfer de datos 1", y al mismo tiempo. tiempo, "módulo de búfer de datos 2" Los datos almacenados en caché del segundo ciclo se cambian a través de la "unidad de selección de datos de entrada" y se envían al "módulo de procesamiento de operaciones de flujo de datos" para el procesamiento de operaciones. Etcétera.
La característica más importante de la operación de ping-pong es que la "unidad de selección de datos de entrada"
y la "unidad de selección de datos de salida" cambian según el ritmo y en cooperación entre sí. otro, para que el flujo de datos almacenado en el búfer no se detenga. Se envía al "módulo de procesamiento y operación de flujo de datos"
para su operación y procesamiento. Trate el módulo de operación de ping-pong como un todo y párese en ambos extremos de este módulo para observar los datos. El flujo de datos de entrada y el flujo de datos de salida son continuos sin pausas, por lo que es muy adecuado para procesar el flujo de datos.
Procesamiento de pipelines. Por lo tanto, las operaciones de ping-pong se utilizan a menudo en algoritmos de canalización para completar el almacenamiento en búfer y el procesamiento de datos sin problemas.
La segunda ventaja de la operación ping-pong es que
puede ahorrar espacio en el buffer. Por ejemplo, en aplicaciones de banda base WCDMA, un cuadro se compone de 15 intervalos de tiempo. A veces es necesario retrasar todo el cuadro de datos en un intervalo de tiempo para el posprocesamiento. Un método más directo es almacenar en un búfer los datos y luego procesarlos. con un retraso de 1 franja horaria. En este momento, la longitud del búfer es 1
longitud de datos de cuadro completo. Suponiendo que la velocidad de datos es de 3,84 Mbps y 1 cuadro tiene una longitud de 10 ms, la longitud del búfer requerida en este momento es 38400
.bits. Si utiliza la operación de ping-pong, solo necesita definir dos RAM que puedan almacenar datos en 1 intervalo de tiempo (la RAM de un solo puerto es suficiente). Al escribir datos en una RAM, los datos se leen de otra RAM y luego se envían a la unidad de procesamiento para su procesamiento. En este momento, la capacidad de cada RAM es de solo 2560 bits. La capacidad total de las dos RAM es de solo 5120 bits. .
Además, el uso inteligente de las operaciones de ping-pong también puede lograr el efecto de utilizar módulos de baja velocidad para procesar flujos de datos de alta velocidad. Como se muestra en la Figura 2, el módulo de búfer de datos utiliza RAM de doble puerto e introduce un módulo de preprocesamiento de datos de primer nivel después de DPRAM. Este preprocesamiento de datos puede realizar varias operaciones de datos según las necesidades, como en el diseño WCDMA, desensanchado, decodificación,. desrotación, etc. del flujo de datos de entrada. Suponga que la velocidad de flujo de datos de entrada del puerto
A es de 100 Mbps y que el período de almacenamiento en búfer de la operación de ping-pong es de 10 ms. A continuación se analiza la velocidad de datos de cada puerto de nodo.
La velocidad del flujo de datos de entrada en el puerto A es de 100 Mbps. Dentro del primer período de búfer de 10 ms, llega a DPRAM1 desde B1 a través de la "unidad de selección de datos de entrada". La velocidad de datos de B1 también es de 100 Mbps y DPRAM1 necesita escribir 1 Mb de datos en 10 ms. De manera similar, en los segundos 10 ms, el flujo de datos se cambia a DPRAM2. La velocidad de datos del puerto B2 también es de 100 Mbps y se escriben 1 Mb de datos en los segundos 10 ms. En los terceros 10 ms, el flujo de datos se cambia nuevamente a DPRAM1 y se escriben 1 Mb de datos en DPRAM1.
Un análisis cuidadoso revelará que en el tercer ciclo del búfer, el tiempo que le queda a DPRAM1 para leer los datos y enviarlos al "módulo de preprocesamiento de datos 1" es de 20 ms. Algunos ingenieros no entienden por qué el tiempo de lectura de DPRAM1 es de 20 ms. Este tiempo se obtiene de la siguiente manera: primero, dentro de los 10 ms posteriores a la escritura de datos en DPRAM2 en el segundo ciclo del búfer, DPRAM1 puede realizar operaciones de lectura.
Además, a partir de los 5 ms del primer ciclo del búfer (el tiempo absoluto es 5 ms), DPRAM1 puede escribir datos en direcciones después de 500 K mientras lee desde la dirección 0. Cuando se alcanzan los 10 ms, DPRAM1 acaba de terminar de escribir 1 Mb de datos. después de leer datos de 500 K, DPRAM1 lee 5 ms durante este tiempo de almacenamiento en búfer a partir de los 5 ms del tercer ciclo de almacenamiento en búfer (el tiempo absoluto es 35 ms), de la misma manera, puede escribir en la dirección después de 500 K. desde la dirección 0, se lee durante otros 5 ms, por lo que hasta que los datos almacenados en el primer ciclo de DPRAM1 se sobrescriban por completo, DPRAM1 puede leer hasta 20 ms y los datos a leer son 1 Mb, por lo que la velocidad de datos del puerto C1 es: 1Mb/20ms=50Mbps. Por lo tanto, solo se requiere que la capacidad mínima de rendimiento de datos del "módulo de preprocesamiento de datos 1" sea de 50 Mbps. De manera similar, solo se requiere que la capacidad mínima de rendimiento de datos del "módulo de preprocesamiento de datos 2" sea de 50 Mbps. En otras palabras, mediante la operación ping-pong, se reduce la presión de sincronización del "módulo de preprocesamiento de datos" y la velocidad de procesamiento de datos requerida es solo la mitad de la velocidad de datos de entrada.
La esencia de implementar un módulo de baja velocidad para procesar datos de alta velocidad mediante la operación ping-pong es que la conversión de serie a paralelo del flujo de datos se realiza a través de la unidad de caché de DPRAM, y la El "módulo de preprocesamiento de datos 1" y el "módulo de preprocesamiento de datos" se utilizan en paralelo. ¡El procesamiento de datos desviados es la encarnación del principio de intercambio de área y velocidad!
Conversión de serie a paralelo
La conversión de serie a paralelo es una habilidad importante en el diseño de FPGA
Es un método común para el procesamiento de flujo de datos. y es también un área y velocidad de intercambio de la expresión directa del pensamiento. Existen varios métodos de implementación para la conversión de serie a paralelo. Dependiendo de los requisitos de cantidad y clasificación de datos, se pueden utilizar registros, RAM, etc. En la ilustración anterior de la operación ping-pong, la conversión de serie a paralelo del flujo de datos se realiza a través de DPRAM y, debido al uso de DPRAM, el búfer de datos se puede abrir muy grande para diseños con cantidades relativamente pequeñas. , los registros se pueden utilizar para completar la conversión de serie a paralelo. Si no hay requisitos especiales, se debe utilizar un diseño de sincronización síncrona para completar la conversión entre serie y paralelo. Por ejemplo, cuando los datos pasan de serie a paralelo, el orden de disposición de los datos es primero de gama alta, lo que se puede lograr utilizando la siguiente codificación:
prl_temp<={prl_temp,srl_in} ; p>
Entre ellos, prl_temp es el registro del búfer de salida paralelo, srl_in es la entrada de datos en serie. Para la conversión de serie a paralelo con un orden de disposición específico, se pueden utilizar declaraciones de casos para determinar la implementación. Para conversiones complejas de serie a paralelo, también se pueden utilizar máquinas de estados. El método de conversión de serie a paralelo es relativamente simple y no es necesario entrar en detalles aquí.
Idea de diseño de operación de tubería
En primer lugar, es necesario señalar que la tubería descrita aquí se refiere a una idea de diseño de flujo de procesamiento y operación secuencial, no Se utiliza la optimización de la sincronización en el diseño de FPGA y ASIC.
El procesamiento de tuberías es un método de diseño común en el diseño de alta velocidad. Si el flujo de procesamiento de un determinado diseño se divide en varios pasos y todo el procesamiento de datos es "flujo único", es decir, no hay retroalimentación ni operación iterativa, y la salida del paso anterior es la entrada del siguiente paso. , puede considerar utilizar el método de diseño de tuberías. Aumente la frecuencia de funcionamiento del sistema.
El diagrama estructural del diseño de la tubería se muestra en la Figura 3. Su estructura básica es: n pasos de operación adecuadamente divididos y conectados en serie. La característica y el requisito más importantes de la operación de la tubería es que el procesamiento de cada paso del flujo de datos sea continuo en el tiempo si cada paso de la operación se simplifica y se supone que pasa por un flip-flop D (es decir, se utiliza un registro para crear un. beat), luego operación de canalización Al igual que un banco de registros de desplazamiento, el flujo de datos fluye a través del flip-flop D en secuencia para completar la operación de cada paso. El momento del diseño de la tubería se muestra en la Figura 4.
Una clave para el diseño de tuberías reside en la disposición razonable de toda la secuencia de diseño, lo que requiere una división razonable de cada paso de la operación. Si el tiempo de operación de la etapa delantera es exactamente igual al tiempo de operación de la etapa trasera, el diseño es el más simple. La salida de la etapa delantera se puede importar directamente a la entrada de la etapa trasera. la etapa frontal es mayor que el tiempo de operación de la etapa posterior, la salida de la etapa frontal debe ajustarse Solo cuando los datos se almacenan en caché correctamente, se pueden importar al extremo de entrada de la etapa posterior; La etapa frontal resulta ser más corta que el tiempo de operación de la etapa posterior, el flujo de datos debe desviarse mediante la lógica de copia o los datos deben almacenarse y procesarse posteriormente en la etapa frontal; de lo contrario, provocará un desbordamiento de datos posterior.
Los métodos de procesamiento de canalizaciones se utilizan a menudo en el diseño WCDMA, como receptores RAKE, buscadores, adquisición de preámbulo, etc. La razón por la cual el método de procesamiento de tuberías tiene una frecuencia más alta es que se copia el módulo de procesamiento, que es otra encarnación concreta de la idea de intercambiar área por velocidad.
Método de sincronización de la interfaz de datos
La sincronización de la interfaz de datos es un problema común en el diseño de FPGA/CPLD, y también es un punto clave y difícil debido a la inestabilidad de muchos diseños. interfaz de datos. Hay un problema con la sincronización.
En la etapa de diseño del diagrama de circuito, algunos ingenieros agregan manualmente puertas BUFT o NOT para ajustar el retraso de los datos, a fin de garantizar los requisitos de tiempo de establecimiento y retención del reloj del módulo de nivel actual para los datos. del módulo de nivel superior. Para tener un muestreo estable, algunos ingenieros generan muchas señales de reloj con una separación de 90 grados. A veces usan flancos positivos para alcanzar los datos y, a veces, usan flancos negativos para ajustar la posición de muestreo de los datos. Ambos enfoques son altamente indeseables, porque una vez que el chip se actualiza o se trasplanta a otros chips, se debe rediseñar la implementación del muestreo. Además, estos dos enfoques dan como resultado un margen insuficiente para la implementación del circuito. Una vez que cambian las condiciones externas (como el aumento de temperatura), el tiempo de muestreo puede verse completamente interrumpido, provocando la parálisis del circuito.
La siguiente es una breve introducción a varios métodos de sincronización de interfaz de datos en diferentes circunstancias:
1. Retrasos de entrada y salida (retrasos entre chips, cableado de PCB y algunos componentes de la interfaz del controlador). etc.) ¿Cómo completar la sincronización de datos en condiciones que son impredecibles o pueden cambiar?
Para retrasos de datos que son impredecibles o variables, es necesario establecer un mecanismo de sincronización y se puede utilizar una señal de habilitación de sincronización o de indicación de sincronización. Además, el propósito de la sincronización de datos también se puede lograr accediendo a los datos a través de RAM o FIFO.
El método para almacenar datos en RAM o FIFO es el siguiente: use los datos que acompañan al reloj proporcionado por el chip de nivel superior como señal de escritura, escriba los datos en RAM o FIFO y luego use el muestreo El reloj de este nivel (generalmente los datos. El reloj principal de procesamiento) puede leer los datos. La clave de este enfoque es que los datos escritos en RAM o FIFO deben ser confiables. Si se utiliza RAM o FIFO síncrona, se requiere que haya una señal de indicación adjunta con una relación de retardo relativa fija con los datos. ser una indicación válida de los datos, o puede ser el reloj utilizado por el módulo de nivel superior para imprimir los datos. Para datos lentos, también es posible muestrear RAM asíncrona o FIFO, pero no se recomienda.
Los datos están organizados en un formato fijo y mucha información importante se encuentra al principio de los datos. Esta situación es muy común en los sistemas de comunicación. En los sistemas de comunicación, muchos datos se organizan según "marcos". Dado que todo el sistema tiene altos requisitos de reloj, a menudo se diseña especialmente una placa de reloj para generar y controlar relojes de alta precisión. Y los datos tienen una posición inicial. ¿Cómo completar la sincronización de los datos y encontrar el "cabezal" de los datos?
El método de sincronización de datos puede adoptar completamente el método anterior, usar la señal indicadora de sincronización o usar RAM o FIFO para almacenar en caché. Hay dos formas de encontrar el encabezado de datos. La primera es muy simple: simplemente transmita una señal de indicación de la posición inicial de los datos a lo largo del camino. Para algunos sistemas, especialmente los sistemas asíncronos, se utiliza un código de sincronización (como el entrenamiento). A menudo se inserta en la secuencia), el extremo receptor puede descubrir el "cabezal" de los datos después de detectar el código de sincronización a través de la máquina de estado. Este método se denomina "detección ciega".
Los datos de nivel superior y el reloj de nivel actual son asíncronos, lo que significa que los relojes del chip o módulo de nivel superior y el chip o módulo de nivel actual están en dominios de reloj asíncronos.
Antes se introdujo brevemente un principio en la sincronización de datos de entrada: si el ritmo de los datos de entrada tiene la misma frecuencia que el reloj de procesamiento del chip de nivel actual, el registro de datos de entrada se puede muestrear directamente. con el reloj principal del chip de nivel actual, complete la sincronización de los datos de entrada si los datos de entrada y el reloj de procesamiento de este chip de nivel son asíncronos, especialmente cuando la frecuencia no coincide, la sincronización de los datos de entrada solo puede realizarse. completarse muestreando los datos de entrada dos veces con el cambio de reloj de procesamiento. Cabe señalar que el uso de registros para muestrear dos veces los datos en el dominio del reloj asíncrono es para prevenir efectivamente la propagación de estados metaestables (estados de datos inestables), de modo que todos los datos procesados por los circuitos posteriores sean niveles válidos. Sin embargo, este enfoque no garantiza que los datos muestreados por el registro de dos niveles sean del nivel correcto. Este método de procesamiento generalmente produce una cierta cantidad de datos de nivel erróneos. Por lo tanto, solo es adecuado para unidades funcionales que no son sensibles a una pequeña cantidad de errores.
Para evitar niveles de muestreo erróneos en el dominio del reloj asíncrono, los métodos de caché RAM y FIFO generalmente se utilizan para completar la conversión de datos en el dominio del reloj asíncrono. La unidad de caché más utilizada es DPRAM. El reloj de nivel superior se usa para escribir datos en el puerto de entrada y el reloj de nivel actual se usa para leer datos en el puerto de salida. Dominios de reloj asincrónicos.
2. ¿Es necesario agregar restricciones al diseñar la sincronización de la interfaz de datos?
Se recomienda agregar restricciones apropiadas, especialmente para el diseño de alta velocidad; asegúrese de agregar las restricciones correspondientes de ciclo, configuración, tiempo de espera, etc.
Las restricciones adicionales aquí tienen dos funciones:
a. Mejorar la frecuencia de trabajo del diseño y cumplir con los requisitos de sincronización de datos de la interfaz. La síntesis, el mapeo, el diseño y el cableado de la lógica se pueden controlar mediante ciclos adicionales, tiempo de configuración, tiempo de espera y otras limitaciones para reducir los retrasos en la lógica y el cableado, aumentando así la frecuencia de operación y cumpliendo con los requisitos de sincronización de datos de la interfaz.
b.
Obtenga el informe de análisis de tiempos correcto. Casi todas las plataformas de diseño de FPGA incluyen herramientas de análisis de tiempo estático, que se pueden utilizar para obtener informes de análisis de tiempo después del mapeo o colocación y enrutamiento para evaluar el rendimiento del diseño. Las herramientas de análisis de tiempos estáticos utilizan restricciones como criterio para determinar si los tiempos cumplen con los requisitos de diseño. Por lo tanto, los diseñadores deben ingresar las restricciones correctamente para que las herramientas de análisis de tiempos estáticos puedan generar informes de análisis de tiempos correctos.
Xilinx
Las restricciones comunes relacionadas con las interfaces de datos incluyen Period, OFFSET_IN_BEFORE, OFFSET_IN_AFTER,
OFFSET_OUT_BEFORE y OFFSET_OUT_AFTER, etc. Las restricciones comunes de Altera relacionadas con las interfaces de datos incluyen; Punto,
tsu, tH, tco, etc.