Diferencia entre RTL y Verilog conductual

10

¿Alguien puede decirme cuál es la diferencia entre RTL y el código de comportamiento de Verilog? ¿Hay alguna demarcación clara entre los diseños en estos dos niveles?

Akash Singh
fuente

Respuestas:

5

El código de comportamiento es de nivel superior 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 ser sintetizado. Define un circuito como una combinación de registros interconectados y las operaciones realizadas en las señales entre esos registros.

¡Tomado de Yahoo Answers y encontrado inmediatamente con Google!

Leon Heller
fuente
1
los bucles se pueden usar en código rtl siempre que el número de iteraciones sea limitado. Algunas herramientas también admiten el uso de bloqueos iniciales para especificar las condiciones de encendido.
Peter Green
Esta pregunta / respuesta fue en realidad la primera respuesta que Google me dio
Drewster,
3

El código de "nivel de transferencia de registro" es el código que se describe en términos de registros y lógica combinatoria que se ubica entre ellos y está destinado a ser utilizado como entrada para una herramienta de síntesis. El código se adhiere a un subconjunto sintetizable [1] del idioma. No hay retrasos explícitos, todos los tiempos son en términos de bordes de reloj. Las estructuras que representan pestillos activados por nivel generalmente se evitan. Los registros suelen estar sincronizados con un pequeño número de relojes cuyos detalles se pueden proporcionar al analizador de tiempos. Por lo general, se espera que la lógica combinatoria [2] se establezca dentro de un solo ciclo de reloj que limita su complejidad. Tiene un nivel 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" es generalmente 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. Se puede usar como un primer paso en un diseño para obtener el diseño general en su lugar antes de que se alcance 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 establece dentro de 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 lo haga.

Peter Green
fuente
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 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.

Digeek
fuente
1

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

El código de comportamiento verilog generalmente se parece más a un programa de computadora secuencial que se ejecuta de arriba a abajo dentro de un initial beginbloque. Puede encontrar que no hay puertos de entrada / salida definidos en los módulos de comportamiento de nivel superior, ya que la salida puede ser a instalaciones de simulador, como la consola $display()o el sistema de archivos con $openo el dumper de forma de onda con $dumpfiley $dumpvars. Esté atento a los retrasos entre las declaraciones implementadas utilizando largas esperas de tiempo de simulación, por ejemplo, #4000e invocando tareas wishbone_master.checked_read(addr, value). Para estas construcciones de nivel superior, no es obvio cuál 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]. Los retrasos probablemente se implementan contando los ciclos de algún reloj en particular. Tenga en cuenta que algunas funciones del sistema Verilog, por ejemplo, $clog2(PARAMETER)pueden permitirse en el código para síntesis, por lo que la presencia de $functionno es una garantía de ninguna manera. El código para la síntesis tiende a comprender muchos 'procesos' independientes, cada uno con una lista de sensibilidad. Algunas tecnologías permiten initial beginbloques para la inicialización de la memoria, por lo que, una vez más, eso no es una garantía.

Finalmente, 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

shuckc
fuente