diferencia entre RTL y verilog de comportamiento

9

¿Puede alguien decirme cuál es la diferencia entre RTL y el código de Verilog de comportamiento? ¿Existe una demarcación clara entre los diseños en estos dos niveles?

    
pregunta Akash Singh

4 respuestas

5

El código de comportamiento es de alto nivel y generalmente no se puede sintetizar. Las construcciones como bucles, retrasos y declaraciones "iniciales" son de comportamiento.

El código RTL es de nivel inferior y está destinado a sintetizarse. Define un circuito como una combinación de registros interconectados y las operaciones realizadas en las señales entre esos registros.

¡Tomado de las respuestas de Yahoo y encontrado inmediatamente con Google!

    
respondido por el Leon Heller
3

El código de "nivel de transferencia de registro" es un código descrito en términos de registros y lógica combinatoria que se encuentra entre ellos y está destinado a ser utilizado como entrada a una herramienta de síntesis. El código se adhiere a un subconjunto sintetizable [1] del lenguaje. No hay retrasos explícitos, todo el tiempo es en términos de bordes de reloj. En general, se evitan las estructuras que representan los cierres activados por nivel. Por lo general, a los registros se les asigna una pequeña cantidad de relojes cuyos detalles se pueden entregar al analizador de temporización. Generalmente se espera que la lógica combinatoria [2] se establezca dentro de un solo ciclo de reloj que limita su complejidad. Es más alto que un modelo de nivel de puerta, pero aún define qué valor tiene cada registro en cada ciclo de reloj.

El código de "comportamiento" generalmente es un código que describe el comportamiento en un nivel superior para su uso en una simulación pero no pretende ser sintetizable. Puede usarse para describir el entorno que rodea su diseño en una simulación. Puede usarse como un paso temprano en un diseño para obtener el diseño general en su lugar antes de que se supere el diseño RTL detallado de los módulos individuales.

[1] El subconjunto exacto permitido varía entre las herramientas de síntesis.
[2] Si no se resuelve en un solo ciclo, la simulación y la síntesis pueden dar resultados diferentes y el analizador de tiempo mostrará una violación a menos que se indique explícitamente que no.

    
respondido por el Peter Green
2

Una definición más generalizada.

Código de comportamiento: por definición, define el comportamiento de un componente digital. No proporciona información sobre cómo se implementará en el HW real (síntesis). No proporcionará información sobre cómo se implementarán los registros y las puertas para realizar la operación requerida. Es más como escribir un algoritmo o FSM en C.

RTL: Es la forma más precisa de un componente digital. Proporciona información sobre cómo se implementará el código como HW real (después de la síntesis). También proporciona información sobre cómo se transferirán los datos entre registros y puertas.

    
respondido por el Digeek
1

Es el mismo idioma, pero se utilizan diferentes estilos. Con la experiencia que puede diferenciarlos rápidamente, aquí hay algunos rasgos de cada uno:

El código de verificación de comportamiento generalmente se parece más a un programa de computadora secuencial que se ejecuta de arriba a abajo dentro de un bloque initial begin . Es posible que no haya puertos de entrada / salida definidos en los módulos de comportamiento de nivel superior, ya que la salida puede ser a instalaciones del simulador, como la consola $display() o el sistema de archivos con $open o el volcado de forma de onda con $dumpfile y $dumpvars . Observe los retrasos entre las declaraciones implementadas usando largas esperas de tiempo de simulación, por ejemplo. #4000 e invocando tareas wishbone_master.checked_read(addr, value) . Para estas construcciones de nivel superior no es obvio lo que sería / podría ser el equivalente de tecnología sintetizada.

Verilog para síntesis siempre tiene puertos de entrada / salida, ya que sin puertos conectados, el módulo no tiene efectos secundarios y puede eliminarse [1]. Retrasos probablemente implementados contando ciclos de algún reloj en particular. Tenga en cuenta algunas funciones del sistema Verilog, por ejemplo, $clog2(PARAMETER) puede estar permitido en el código de síntesis, por lo que la presencia de $function no es una garantía de ninguna manera. El código para la síntesis tiende a comprender muchos de los "procesos" independientes, cada uno con una lista de sensibilidad. Algunas tecnologías sí permiten los bloques initial begin para la inicialización de la memoria, por lo que nuevamente no es una garantía.

En última instancia, el diseñador conoce el propósito del código que escribe y lo invocará adecuadamente con el conjunto de herramientas de síntesis o en un simulador.

[1] a excepción de ciertos bloques de IP que pueden hacer conexiones de puerta trasera a instalaciones de chips internos, por ejemplo. JTAG

    
respondido por el shuckc

Lea otras preguntas en las etiquetas