InglésFrancésEspañol

icono de página de OnWorks

verilator - Online en la nube

Ejecute verilator en el proveedor de alojamiento gratuito de OnWorks sobre Ubuntu Online, Fedora Online, emulador en línea de Windows o emulador en línea de MAC OS

Este es el verificador de comandos que se puede ejecutar en el proveedor de alojamiento gratuito de OnWorks utilizando una de nuestras múltiples estaciones de trabajo en línea gratuitas, como Ubuntu Online, Fedora Online, emulador en línea de Windows o emulador en línea de MAC OS.

PROGRAMA:

NOMBRE


Verilator: convierte el código de Verilog a C ++ / SystemC

SINOPSIS


verilator --ayuda
verilator --versión
verilator --cc [opciones] [top_level.v] ... [opt_c_files.cpp / c / cc / a / o / so]
verilator --sc [opciones] [top_level.v] ... [opt_c_files.cpp / c / cc / a / o / so]
verilator --lint-only [top_level.v] ...

DESCRIPCIÓN


Verilator convierte código Verilog sintetizable (no conductual), más algo de síntesis,
SystemVerilog y un pequeño subconjunto de afirmaciones de Verilog AMS, en código C ++ o SystemC. Eso
no es un simulador completo, sino un compilador.

Verilator se invoca con parámetros similares a GCC, Cadence Verilog-XL / NC-Verilog, o
VCS de Synopsys. Lee el código Verilog especificado, lo escribe y, opcionalmente, agrega
cobertura y código de seguimiento de forma de onda. Para los formatos C ++ y SystemC, genera .cpp y .h
archivos.

Los archivos creados por Verilator luego se compilan con C ++. El usuario escribe un poco de C ++
contenedor, que crea una instancia del módulo de nivel superior y pasa este nombre de archivo en el
línea de comando. Estos archivos C se compilan en C ++ y se vinculan con los archivos Verilated.

El ejecutable resultante realizará la simulación real.

Para comenzar, vaya a "EJEMPLO DE EJECUCIÓN C ++".

ARGUMENTO RESUMEN


Este es un breve resumen de los argumentos a Verilator. Consulte las descripciones detalladas en
las siguientes secciones para obtener más información.

{file.v} Nombres de archivo de nivel superior de Verilog
{file.c / cc / cpp} Archivos C ++ opcionales para compilar
{file.a / o / so} Archivos C ++ opcionales para vincular

+ 1364-1995ext + Utilice Verilog 1995 con la extensión de archivo
+ 1364-2001ext + Utilice Verilog 2001 con la extensión de archivo
+ 1364-2005ext + Utilice Verilog 2005 con la extensión de archivo
+ 1800-2005ext + Utilice SystemVerilog 2005 con la extensión de archivo
+ 1800-2009ext + Utilice SystemVerilog 2009 con la extensión de archivo
+ 1800-2012ext + Utilice SystemVerilog 2012 con la extensión de archivo
--assert Habilita todas las aserciones
--autoflush Flush streams después de todas las pantallas $
--bbox-sys Blackbox $ desconocido llamadas al sistema
--bbox-unsup Funciones de idioma no compatibles con Blackbox
--compartimiento Anular el binario de Verilator
-CFLAGS Indicadores del compilador de C ++ para el archivo MAKE
--cc Crear salida C ++
--cdc Análisis de cruce de dominios de reloj
--clk Marcar la señal especificada como reloj
--compilador Ajuste para el compilador de C ++ especificado
- límite de convergencia Ajustar el tiempo de estabilización de la convergencia
--coverage Habilita toda la cobertura
--coverage-line Habilita la cobertura de la línea
--coverage-toggle Habilitar cambiar la cobertura
--coverage-user Habilita la cobertura de usuarios de SVL
--coverage-underscore Habilita la cobertura de _signals
-D [= ] Establecer la definición del preprocesador
--debug Habilita la depuración
--debug-check Habilita la depuración de aserciones
--debugi Habilitar la depuración en un nivel específico
--debugi- Habilitar la depuración de un archivo fuente a nivel
--idioma predeterminado Idioma predeterminado para analizar
+ definir + = Establecer la definición del preprocesador
--dump-tree Habilita el volcado de archivos .tree
--dump-treei Habilitar el volcado de archivos .tree a nivel
--Dump-tree- Habilitar el volcado de archivos .tree en un archivo de origen a un nivel
-E Preprocesar, pero no compilar
- límite de error Abortar después de este número de errores
--exe Enlace para crear ejecutable
-F Analizar opciones de un archivo, relativamente
-F Analizar opciones de un archivo
--gdb Ejecute Verilator bajo GDB de forma interactiva
--gdbbt Ejecute Verilator en GDB para realizar un seguimiento
--help Muestra esta ayuda
-I El directorio para buscar incluye
--si-profundidad Sintonizar la advertencia IFDEPTH
+ incdir + El directorio para buscar incluye
--inhibit-sim Create función para apagar sim
--inline-mult Ajuste el módulo en línea
-LDFLAGS Indicadores de pre-objeto del vinculador para makefile
-LDLIBS Indicadores de la biblioteca del vinculador para makefile
--idioma Estándar de idioma predeterminado para analizar
+ libext + + [ext] ... Extensiones para buscar módulos
- pelusa solo pelusa, pero no produce salida
--MMD Crea archivos de dependencia .d
--MP Crea objetivos de dependencia falsos
--Mdir Nombre del directorio del objeto de salida
--mod-prefix Nombre para anteponer a clases inferiores
--no-clk Evitar marcar la señal especificada como reloj
--no-pins64 No use vluint64_t para sigs de 33-64 bits
--no-skip-idéntico Desactiva la omisión de salida idéntica
+ notimingchecks ignorado
-O0 Desactivar optimizaciones
-O3 Optimizaciones de alto rendimiento
-O Optimizaciones seleccionables
-o Nombre del ejecutable final
--no-order-clock-delay Deshabilita las asignaciones de habilitación del reloj de pedidos
--partido de salida Divida los archivos .cpp en pedazos
--output-split-cfuncs Funciones .cpp divididas
--output-split-ctrace Funciones de rastreo divididas
-P Deshabilita los números de línea y los espacios en blanco con -E
--pins-bv Especificar tipos para puertos de nivel superior
--pins-sc-uint Especificar tipos para puertos de nivel superior
--pins-sc-biguint Especifica tipos para puertos de nivel superior
--pins-uint8 Especifica tipos para puertos de nivel superior
- filtro de tubería Filtrar toda la entrada a través de un script
--prefijo Nombre de la clase de nivel superior
--profile-cfuncs Funciones de nombre para la creación de perfiles
- depuración privada; ver documentos
- depuración pública; ver documentos
--report-unoptflat Diagnóstico adicional para UNOPTFLAT
--savable Habilitar modelo guardar-restaurar
--sc Crear salida SystemC
--stats Crear archivo de estadísticas
--stats-vars Proporciona estadísticas sobre variables
-sv Habilita el análisis de SystemVerilog
+ systemverilogext + Sinónimo de + 1800-2012ext +
--módulo superior Nombre del módulo de entrada de nivel superior
--trace Habilita la creación de formas de onda
--traza de profundidad Profundidad de rastreo
--trace-max-matriz Anchura máxima de la broca para el seguimiento
--trace-max-width Profundidad máxima de la matriz para el seguimiento
--trace-params Habilita los parámetros de seguimiento
--trace-structs Habilita el rastreo de nombres de estructuras
--trace-underscore Habilita el seguimiento de _signals
-U Undefine preprocessor define
--desenrollar-recuento Ajustar el máximo de iteraciones de bucle
--unroll-stmts Ajustar el tamaño máximo del cuerpo del bucle
--unused-regexp Sintonice las señales de pelusa NO UTILIZADAS
-V Versión detallada y configuración
-v Biblioteca Verilog
+ verilog1995ext + Sinónimo de + 1364-1995ext +
+ verilog2001ext + Sinónimo de + 1364-2001ext +
-Werror- Convertir advertencia en error
-Wfuture- Deshabilitar las advertencias de mensajes desconocidos
-Wno- Desactivar advertencia
-Wno-lint Desactiva todas las advertencias de pelusa
-Wno-style Deshabilita todas las advertencias de estilo
-Wno-fatal Desactiva la salida fatal en las advertencias
--x-asignar Asigne inicialmente X a este valor
--x-initial-edge Habilita los disparadores de flanco X-> 0 y X-> 1 iniciales
-y Directorio para buscar módulos

ARGUMENTOS


{archivo.v}
Especifica el archivo Verilog que contiene el módulo superior que se va a verificar.

{archivo.c / .cc / .cpp / .cxx}
Especifica archivos C ++ opcionales que se vincularán con el código Verilog. Si algún archivo C ++
se especifican de esta manera, Verilator incluirá una regla de creación que genera una módulo
ejecutable. Sin archivos C ++, Verilator se detendrá en el módulo__TODOS una biblioteca,
y suponga que continuará vinculando con reglas de creación que usted mismo escriba. Ver también el
-Opción CFLAGS.

{archivo.a / .o / .so}
Especifica objetos opcionales o archivos de biblioteca que se vincularán con el código Verilog, como
abreviatura de -LDFLAGS " ". Si algún archivo se especifica de esta manera, Verilator
incluirá una regla de creación que utilice estos archivos al vincular el módulo ejecutable.
Por lo general, esto solo es útil cuando se usa con la opción --exe.

+ 1364-1995ext +ext
+ 1364-2001ext +ext
+ 1364-2005ext +ext
+ 1800-2005ext +ext
+ 1800-2009ext +ext
+ 1800-2012ext +ext
Especifica el estándar de idioma que se utilizará con una extensión de nombre de archivo específica, ext.

Para compatibilidad con otros simuladores, consulte también los sinónimos "+ verilog1995ext +"ext,
"+ verilog2001ext +"exty "+ systemverilogext +"ext.

Para cualquier archivo de origen, el idioma especificado por estas opciones tiene prioridad sobre cualquier
idioma especificado por las opciones "--default-language" o "--language".

Estas opciones surten efecto en el orden en que se encuentran. Por lo tanto, lo siguiente
utilice Verilog 1995 para "av" y Verilog 2001 para "bv".

verificador ... + 1364-1995ext + v av + 1364-2001ext + v bv

Estas banderas solo se recomiendan para diseños heredados de idiomas mixtos, ya que es preferible
La opción es editar el código para reparar nuevas palabras clave o agregar las
"` begin_keywords ".

Nota "` begin_keywords "es una construcción SystemVerilog, que especifica only la
se debe reconocer un conjunto de palabras clave. Cualquiera que sea el conjunto elegido, la semántica será
los de SystemVerilog. Por el contrario, "+ 1364-1995ext +", etc., especifique la sintaxis y
semántica que se utilizará.

--afirmar
Habilite todas las afirmaciones.

Consulte también --x-assign y --x-initial-edge; configurando "--x-asignar único" y / o
"--x-initial-edge" puede ser deseable.

--descarga automática
Después de cada $ display o $ fdisplay, vacíe el flujo de salida. Esto asegura que
los mensajes aparecerán inmediatamente pero pueden reducir el rendimiento; para obtener el mejor rendimiento, llame
"fflush (stdout)" ocasionalmente en el bucle C principal. Valores predeterminados desactivados, que se almacenarán en búfer
salida proporcionada por las llamadas normales de C stdio.

--bbox-sys
Ponga en caja negra todas las llamadas a funciones o tareas del sistema $ desconocidas. Las tareas del sistema serán simples
NOPed, y las funciones del sistema serán reemplazadas por cero sin tamaño. Argumentos a tal
Las funciones se analizarán, pero no se comprobarán de otro modo. Esto evita errores cuando
en presencia de llamadas PLI específicas de la empresa.

--bbox-unsup
Caja negra algunas características de lenguaje no admitidas, actualmente tablas UDP y cmos y
primitivas tran gate. Esto puede permitir pelar el resto del diseño incluso cuando
Hay construcciones no compatibles.

--compartimiento nombre de archivo
Rara vez necesario. Reemplace el nombre de archivo predeterminado para Verilator. Cuando una dependencia
(.d), este nombre de archivo se convertirá en una dependencia de origen, de modo que
el cambio en este binario hará que se reconstruyan los archivos de salida.

-FLAG banderas
Agregue los indicadores del compilador de C especificados a los archivos MAKE generados. Cuando se ejecuta make en el
Makefile generado estos se pasarán al compilador de C ++ (gcc / g ++ / msvc ++).

--cc
Especifica C ++ sin el modo de salida SystemC; ver también --sc.

--Centros para el Control y la Prevención de Enfermedades
Experimental. Realice algunas comprobaciones de cruce de dominios de reloj y emita advertencias relacionadas
(CDCRSTLOGIC) y luego salga; Si se necesitan advertencias distintas a las de los CDC, haga una
segunda ejecución con --lint-only. También se escribe información de advertencia adicional al
archivo {prefijo} __ cdc.txt.

Actualmente, solo verifica algunos elementos que otras herramientas de los CDC pasaron por alto; si tienes interés en
agregando cheques CDC más tradicionales, comuníquese con los autores.

--Clk nombre-señal
A veces es bastante difícil para Verilator distinguir las señales de reloj de otras
señales de datos. Ocasionalmente, las señales del reloj pueden terminar en la lista de verificación de
señales que determinan si es necesaria una evaluación adicional. Esto se degradará en gran medida
el rendimiento del modelo verificado.

Con --clk , el usuario puede especificar el reloj raíz en el modelo, luego Verilator
marcará la señal como clocker y propagará el atributo clocker automáticamente a
otras señales derivadas de eso. De esta forma, Verilator intentará evitar tomar el
la señal del reloj en la lista de verificación.

Tenga en cuenta que el nombre de la señal se especifica mediante la ruta de jerarquía RTL. Por ejemplo, v.foo.bar. Si
la señal es la entrada al módulo superior, directamente el nombre de la señal. Si lo encuentras
es difícil encontrar el nombre exacto, intente utilizar "/ * verilator clocker * /" en el archivo RTL para
marcar la señal directamente.

--compilador nombre-compilador
Habilita ajustes y soluciones para el compilador de C ++ especificado.

sonido metálico
Sintonice el sonido metálico. Esto puede reducir la velocidad de ejecución, ya que permite varias soluciones.
para evitar límites tontos codificados en el clang. Esto incluye romper estructuras profundas.
como para msvc como se describe a continuación.

gcc Tune para Gnu C ++, aunque el código generado debería funcionar en casi cualquier C ++ compatible
compilador. Actualmente el predeterminado.

msvc
Sintonice para Microsoft Visual C ++. Esto puede reducir la velocidad de ejecución, ya que permite
varias soluciones para evitar límites tontos codificados en MSVC ++. Esto incluye
dividir expresiones entre paréntesis profundamente anidadas en sub-expresiones para evitar
error C1009 y dividir bloques profundos en funciones para evitar el error C1061.

- límite de convergencia
Rara vez necesario. Especifica el número máximo de iteraciones en tiempo de ejecución antes de crear un
modelo no pudo converger error. El valor predeterminado es 100.

--cobertura
Habilita todas las formas de cobertura, alias para "--coverage-line --coverage-toggle
--coverage-user ".

--línea de cobertura
Especifica que se debe insertar un código de análisis de cobertura de línea de bloque básico.

El análisis de cobertura agrega declaraciones en cada punto de cambio de flujo de código, que son las
ramas de declaraciones IF y CASE, un superconjunto de cobertura de línea Verilog normal. A
en cada una de estas ramas se incrementa un contador único. Al final de una prueba, los contadores
junto con el nombre del archivo y el número de línea correspondiente a cada contador se escriben en
registros / cobertura.pl.

Verilator deshabilita automáticamente la cobertura de las sucursales que tienen un $ stop en ellas, ya que
Se asume que las ramas de $ stop contienen una verificación de error que no debería ocurrir. Verificador A / *
cover_block_off * / comment realizará una función similar en cualquier código de ese bloque
o menos, o / * verilator coberturas_en / coberturas_off * / deshabilitarán la cobertura alrededor de las líneas
de código.

Nota Verilator puede contar en exceso los bloques combinatorios (no sincronizados) cuando esos bloques
recibir señales que tienen la advertencia UNOPTFLAT desactivada; para la más precisa
Los resultados no desactivan esta advertencia cuando se usa la cobertura.

--cobertura-alternar
Especifica que se debe insertar el código de análisis de cobertura de alternancia de señal.

Cada bit de cada señal en un módulo tiene un contador insertado. El contador lo
Incremento en cada cambio de flanco del bit correspondiente.

Las señales que forman parte de tareas o bloques de inicio / fin se consideran variables locales y
no están cubiertos. Las señales que comienzan con guiones bajos, son números enteros o son muy anchas
(> 256 bits de almacenamiento total en todas las dimensiones) tampoco están cubiertos.

La jerarquía está comprimida, de modo que si se crea una instancia de un módulo varias veces,
La cobertura se sumará para ese bit en TODAS las instancias de ese módulo con el
mismo conjunto de parámetros. Un módulo instanciado con diferentes valores de parámetro es
se considera un módulo diferente y se contará por separado.

Verilator toma una decisión mínimamente inteligente sobre qué dominio de reloj es la señal.
va a, y solo busca bordes en ese dominio de reloj. Esto significa que los bordes pueden ser
se ignora si se sabe que la lógica receptora nunca podría ver el borde. Esta
El algoritmo puede mejorar en el futuro. El resultado neto es que la cobertura puede ser menor que
lo que se vería al mirar los rastros, pero la cobertura es más precisa
representación de la calidad del estímulo en el diseño.

Puede haber bordes contados cerca del tiempo cero mientras el modelo se estabiliza. Es bueno
Practique poner a cero toda la cobertura justo antes de soltar el reinicio para evitar contar tales
comportamiento.

Se puede utilizar un par de / * verilator coberturas_activado / desactivado * / comentario alrededor de señales que no
necesitan análisis de alternancia, como RAM y archivos de registro.

--cobertura-subrayado
Habilite la cobertura de señales que comienzan con un guión bajo. Normalmente, estas señales son
descubierto. Consulte también --trace-underscore.

--cobertura-usuario
Permite la cobertura funcional insertada por el usuario. Actualmente, todos los puntos de cobertura funcionales
se especifican mediante SVA, que deben habilitarse por separado con --assert.

Por ejemplo, la siguiente declaración agregará un punto de cobertura, con el comentario
"DefaultClock":

DefaultClock: propiedad de la cubierta (@ (posedge clk) cyc == 3);

-Dvar=propuesta de
Define el símbolo de preprocesador dado, sin permitir. Similar a + definir; + definir
es bastante estándar en todas las herramientas de Verilog, mientras que -D es un alias para la compatibilidad con GCC.

--depurar
Seleccione la imagen de depuración construida de Verilator (si está disponible) y habilite más
aserciones (equivalente a "--debug-check"), mensajes de depuración (equivalente a
"--debugi 4") y archivos de volcado de formato intermedio (equivalente a "--dump-treei 3").

--comprobación de depuración
Rara vez necesario. Habilite las comprobaciones de aserción de depuración interna, sin cambiar la depuración
verbosidad. Se habilita automáticamente cuando se especifica --debug.

--debugi
--debugi-
Rara vez se necesita: para uso de desarrolladores. Establezca el nivel de depuración interna globalmente al
nivel de depuración especificado (1-10) o establezca el archivo fuente de Verilator especificado en el
nivel especificado (por ejemplo, "--debugi-V3Width 9"). Los niveles más altos producen más detalles
mensajes.

--idioma predeterminado propuesta de
Seleccione el idioma que se utilizará de forma predeterminada al procesar por primera vez cada archivo Verilog.
El valor de idioma debe ser "1364-1995", "1364-2001", "1364-2005", "1800-2005",
"1800-2009" o "1800-2012".

Cualquier idioma asociado con una extensión de archivo en particular (consulte las distintas +langext +
options) se utilizará con preferencia al idioma especificado por --default-language.

La marca --default-language solo se recomienda para el código heredado que usa el mismo
idioma en todos los archivos fuente, ya que la opción preferible es editar el código para reparar
palabras clave nuevas o agregue las "palabras clave_comienzo" adecuadas. Para diseños heredados de idiomas mixtos,
los varios +langDeben usarse las opciones ext +.

Si no se especifica ningún idioma, ya sea por esta bandera o +langext + opciones, luego la última
Se utiliza el lenguaje SystemVerilog (IEEE 1800-2012).

+ definir +var=propuesta de
+ definir +var=propuesta de+var2=valor2...
Define el símbolo del preprocesador dado, o varios símbolos si están separados por más.
Similar a -D; + define es bastante estándar en todas las herramientas de Verilog, mientras que -D es un alias
para compatibilidad con GCC.

--árbol de vertedero
Rara vez necesario. Habilite la escritura de archivos de depuración .tree con el nivel de volcado 3, que volca el
etapas críticas estándar. Para obtener más información sobre el formato, consulte los aspectos internos de Verilator.
manual. --dump-tree se habilita automáticamente con --debug, así que "--debug
--no-dump-tree "puede ser útil si los archivos de volcado son grandes y no se desean.

--dump-treei
--Dump-tree-
Rara vez se necesita: para uso de desarrolladores. Establecer el nivel de volcado de árbol interno globalmente a un
nivel de volcado específico o establezca el archivo de origen de Verilator especificado en el
nivel de descarga de árboles (por ejemplo, "--dump-treei-V3Order 9"). El nivel 0 deshabilita los vertederos y es
equivalente a "--no-dump-tree". El nivel 9 permite el vaciado de cada etapa.

-E Procesar previamente el código fuente, pero no compilar, como con 'gcc -E'. La salida está escrita
para estandarizar. Tenga cuidado con la habilitación de mensajes de depuración, ya que también irán a
estándar hacia fuera.

- límite de error
Después de encontrar este número de errores o advertencias, salga. El valor predeterminado es 50.

--exe
Genera un ejecutable. También necesitará pasar archivos .cpp adicionales en el
línea de comando que implementa el bucle principal para su simulación.

-F presentar
Leer el archivo especificado y actuar como si todo el texto dentro de él se especificara como comando
parámetros de línea. Cualquier ruta relativa es relativa al directorio que contiene el
archivo especificado. Consulte también -f. Nota -F es bastante estándar en todas las herramientas de Verilog.

-f presentar
Leer el archivo especificado y actuar como si todo el texto dentro de él se especificara como comando
parámetros de línea. Cualquier ruta relativa es relativa al directorio actual. Ver también
-F. Nota -f es bastante estándar en todas las herramientas de Verilog.

El archivo puede contener // comentarios que se ignoran hasta el final de la línea. Cualquier $ VAR,
$ (VAR) o $ {VAR} se reemplazarán con la variable de entorno especificada.

--gdb
Ejecute Verilator debajo de un GDB interactivo (o variable de entorno VERILATOR_GDB
valor) sesión. Consulte también --gdbbt.

--gdbbt
Si se especifica --debug, ejecute Verilator debajo de un proceso de GDB e imprima un seguimiento
al salir, luego salga de GDB inmediatamente. Sin --debug o si GDB no parece funcionar,
esta bandera se ignora. Destinado a la fácil creación de backtraces por parte de los usuarios; de lo contrario
vea la bandera --gdb.

--ayuda
Muestra este mensaje y la versión del programa y sale.

-Idir
Ver y.

--si-profundidad propuesta de
Rara vez necesario. Establezca la profundidad a la que se disparará la advertencia IFDEPTH, el valor predeterminado es 0
que desactiva esta advertencia.

+ incdir +dir
Ver y.

--inhibir-sim
Rara vez necesario. Cree una función "inhibitSim (bool)" para habilitar y deshabilitar la evaluación.
Esto permite que un banco de pruebas de nivel superior deshabilite módulos que no son importantes en un
simulación dada, sin necesidad de recompilar o cambiar los módulos SystemC
instanciado.

--inline-mult propuesta de
Ajuste la alineación de módulos. El valor predeterminado de 2000 especifica que hasta 2000 nuevos
Las operaciones se pueden agregar al modelo insertando, si más de este número de
Como resultado de las operaciones, el módulo no está en línea. Valores más grandes o un valor <= 1
alineará todo, dará lugar a tiempos de compilación más largos, pero potencialmente más rápido
tiempos de ejecución. Esta configuración se ignora para módulos muy pequeños; ellos siempre lo serán
en línea, si está permitido.

-LDFLAGS banderas
Agregue los indicadores del vinculador C especificados a los archivos MAKE generados. Cuando se ejecuta make en el
archivo MAKE generado estos se pasarán al enlazador C ++ (ld) * después * del primario
archivo que se está vinculando. Esta bandera se llama -LDFLAGS ya que ese es el nombre tradicional en
simuladores; habría sido mejor llamado LDLIBS ya que esa es la variable Makefile
controla. (En Make, LDFLAGS está antes del primer objeto, LDLIBS después. -L
las bibliotecas deben estar en la variable Make LDLIBS, no en LDFLAGS).

--idioma propuesta de
Un sinónimo de "--default-langauge", para compatibilidad con otras herramientas y versiones anteriores
versiones de Verilator.

+ libext +ext+ext...
Especifique las extensiones que deben usarse para buscar módulos. Si por ejemplo módulo
x se hace referencia, mire en x.ext. Note + libext + es bastante estándar en Verilog
instrumentos. El valor predeterminado es .v y .sv.

- solo pelusa
Verifique los archivos en busca de violaciones de pelusa solamente, no cree ninguna otra salida.

Es posible que también desee que la opción -Wall habilite los mensajes que se consideran estilísticos
y no habilitado por defecto.

Si el diseño no se va a verificar por completo, consulte también --bbox-sys y
- opciones de bbox-unsup.

--MMD
Habilite la creación de archivos de dependencia .d, que se utilizan para realizar la detección de dependencias, similar a
Opción gcc -MMD. Activado de forma predeterminada, use --no-MMD para deshabilitarlo.

--diputado
Al crear archivos de dependencia .d con --MMD, cree objetivos falsos. Similar a gcc -MP
.

--Mdir directorio
Especifica el nombre del directorio de objetos Make. Se colocarán todos los archivos generados
en este directorio. Si no se especifica, se utiliza "obj_dir". El directorio se crea si
no existe y existen los directorios principales; de lo contrario, cree manualmente el Mdir
antes de llamar a Verilator.

--mod-prefijo nombre superior
Especifica el nombre que se antepone a todas las clases de nivel inferior. Por defecto es el mismo que
--prefijo.

--no-clk
Evita que la señal especificada se marque como reloj. Consulte "--clk".

--no-pins64
Alias ​​compatible con versiones anteriores para "--pins-bv 33".

--no-salta-idéntico
Rara vez necesario. Desactiva la omisión de ejecución de Verilator si todos los archivos de origen están
idénticos, y todos los archivos de salida existen con fechas más recientes.

+ notimingchecks
Ignorado por compatibilidad con otros simuladores.

-O0 Desactiva la optimización del modelo.

-O3 Habilita optimizaciones lentas para el código que genera el propio Verilator (a diferencia de
"-CFLAGS -O3" que afecta la optimización del compilador de C. -O3 puede reducir la simulación
tiempos de ejecución a costa del tiempo de compilación. Esto actualmente establece --inline-mult -1.

-Ocarta de optimizacion
Rara vez necesario. Habilita o deshabilita optimizaciones específicas, con la optimización
seleccionado en base a la carta aprobada. Una letra minúscula desactiva una optimización, una
la letra mayúscula lo habilita. Esto está diseñado para uso de depuración únicamente; ver la fuente
código para asignaciones de optimizaciones dependientes de la versión a letras -O.

-o
Especifique el nombre del ejecutable final creado si usa --exe. Por defecto es
--prefijo si no se especifica.

--sin-orden-retraso-del-reloj
Rara vez necesario. Deshabilita una corrección de errores para ordenar las habilitaciones del reloj con retraso
asignaciones. Esta bandera solo debe usarse cuando lo sugieran los desarrolladores.

--partido de salida bytes
Permite dividir los archivos .cpp / .sp de salida en varias salidas. Cuando un archivo C ++
excede el número especificado de operaciones, se creará un nuevo archivo en la próxima
límite de función. Además, las rutinas lentas se colocarán en archivos __Slow.
Esto acelera la compilación ya que la optimización se puede desactivar en las rutinas lentas,
y los archivos restantes se pueden compilar en máquinas paralelas. Usando --output-split
solo debería tener un impacto trivial en el rendimiento. Con GCC 3.3 en un Opteron de 2 GHz,
--output-split 20000 resultará en la división en aproximadamente un minuto de compilación
trozos

--funciones-división-de-salida declaraciones
Permite dividir funciones en los archivos .cpp / .sp de salida en múltiples funciones.
Cuando una función generada excede el número especificado de operaciones, una nueva función
se creará. Con --output-split, esto permitirá a GCC compilar más rápido, en un
pequeña pérdida de rendimiento que empeora con la disminución de los valores de división. Tenga en cuenta que
esta opción es más fuerte que --output-split en el sentido de que --output-split no
dividir dentro de una función.

--salida-división-ctrace declaraciones
Permite dividir las funciones de seguimiento en los archivos .cpp / .sp de salida en varios
funciones. Tiene la misma configuración predeterminada que --output-split-cfuncs.

-P Con -E, deshabilita la generación de marcadores de línea y líneas en blanco, similar al indicador GCC -P.

--pins64
Alias ​​compatible con versiones anteriores para "--pins-bv 65". Tenga en cuenta que es un 65, no un 64.

--pins-bv anchura
Especifica entradas / salidas de SystemC mayores o iguales a anchura bits de ancho deberían
use sc_bv's en lugar de uint32 / vluint64_t's. El valor predeterminado es "--pins-bv 65". Versiones
antes de Verilator 3.671 predeterminado a "--pins-bv 33". Cuanto más se use sc_bv, peor
para el rendimiento. Utilice el atributo "/ * verilator sc_bv * /" para seleccionar puertos específicos para
ser sc_bv.

--pins-sc-uint
Especifica que las entradas / salidas de SystemC de más de 2 bits de ancho deben usar sc_uint
entre 2 y 64. Cuando se combina con la combinación "--pins-sc-biguint", resulta
en sc_uint se usa entre 2 y 64 y sc_biguint se usa entre 65 y 512.

--pins-sc-biguint
Especifica que las entradas / salidas de SystemC de más de 65 bits de ancho deben usar sc_biguint
entre 65 y 512, y sc_bv a partir de 513. Cuando se combina con el
"--pins-sc-uint", da como resultado que sc_uint se utilice entre 2 y 64 y
sc_biguint se utiliza entre 65 y 512.

--pins-uint8
Especifica entradas / salidas de SystemC que son más pequeñas que la configuración --pins-bv y 8
bits o menos deben usar uint8_t en lugar de uint32_t. Del mismo modo, los alfileres de ancho 9-16
use uint16_t en lugar de uint32_t.

- filtro de tubería comando
Rara vez necesario y experimental. Verilator generará el comando especificado como un
tubería de subproceso, para permitir que el comando realice ediciones personalizadas en el código Verilog
antes de que llegue a Verilator.

Antes de leer cada archivo de Verilog, Verilator pasará el nombre del archivo al subproceso '
stdin con 'read_verilog " "'. El filtro puede leer el archivo y realizar
cualquier filtrado que desee y envía el contenido del nuevo archivo a Verilator en stdout
con 'Content-Length'. La salida a stderr desde el filtro se alimenta a través de Verilator's
stdout y si el filtro sale con un estado distinto de cero, Verilator termina. Ver el
t / t_pipe_filter prueba para un ejemplo.

Para depurar la salida del filtro, intente usar la opción -E para ver la salida preprocesada.

--prefijo nombre superior
Especifica el nombre de la clase de nivel superior y el archivo MAKE. El valor predeterminado es V antepuesto a
el nombre del conmutador --top-module, o V antepuesto al primer nombre de archivo Verilog
pasado en la línea de comando.

--perfil-cfuncs
Modifique las funciones de C ++ creadas para admitir la creación de perfiles. Las funciones serán
minimizado para contener una declaración "básica", generalmente un solo bloque o cable
declaración. (Tenga en cuenta que esto ralentizará el ejecutable en un ~ 5%).
El nombre de la función tendrá el sufijo del nombre base del módulo Verilog y el número de línea.
la declaración vino. Esto permite que los informes de gprof u oprofile se correlacionen con
las declaraciones de fuentes originales de Verilog.

--privado
Opuesto de --público. Es el predeterminado; esta opción existe para compatibilidad con versiones anteriores.

--público
Esto es solo para uso de depuración histórica. Su uso puede resultar en una mala simulación de
relojes generados.

Declara públicas todas las señales y módulos. Esto desactivará las optimizaciones de señal como
si todas las señales tuvieran un / * verilator public * / comentarios e inlining. Esto también se convertirá
off inlining como si todos los módulos tuvieran un / * verilator public_module * /, a menos que el módulo
habilitado específicamente con / * verilator inline_module */.

--informe-unoptflat
Diagnósticos adicionales para advertencias UNOPTFLAT. Esto incluye para cada bucle, los 10 más anchos
variables en el ciclo, y las 10 variables más desplegadas en el ciclo. Estos son
candidatos para dividir en múltiples variables para romper el ciclo.

Además produce un archivo GraphViz DOT de todos los componentes fuertemente conectados
dentro de la fuente asociada con cada bucle. Esto se produce independientemente de si
--dump-tree está configurado. Estos gráficos pueden ayudar a analizar el problema, pero pueden resultar muy
grande de hecho.

Existen varios comandos para ver y manipular archivos DOT. Por ejemplo el punto
El comando se puede utilizar para convertir un archivo DOT a PDF para imprimir. Por ejemplo:

punto -Tpdf -O Vt_unoptflat_simple_2_35_unoptflat.dot

generará un PDF Vt_unoptflat_simple_2_35_unoptflat.dot.pdf a partir del archivo DOT.

--salvable
Habilite la inclusión de funciones de guardar y restaurar en el modelo generado.

El código de usuario debe crear un objeto VerilatedSerialize o VerilatedDeserialze luego
llamar a los operadores << o >> en el modelo generado y cualquier otro dato el proceso
Necesita salvarse / restaurarse. Por ejemplo:

void save_model (const char * filenamep) {
VeriladoGuardar os;
os.open (nombrearchivop);
os << hora_principal; // el código de usuario debe guardar la marca de tiempo, etc.
os << * topp;
}
void restore_model (const char * filenamep) {
VerilatedRestore os;
os.open (nombrearchivop);
os >> main_time;
os >> * topp;
}

--Carolina del Sur
Especifica el modo de salida SystemC; ver también --cc.

- estadísticas
Crea un archivo de volcado con estadísticas sobre el diseño en {prefix} __ stats.txt.

--estadísticas-vars
Crea estadísticas más detalladas que incluyen una lista de todas las variables por tamaño (sin formato
- las estadísticas solo dan un recuento). Vea --stats, que está implícito en esto.

-sv Especifica que las características del lenguaje SystemVerilog deben estar habilitadas; equivalente a "--language
1800-2005 ". Esta opción está seleccionada de forma predeterminada, existe por compatibilidad con
otros simuladores.

+ systemverilogext +ext
Un sinónimo de "+ 1800-2012ext +"ext.

--módulo superior nombre superior
Cuando la entrada Verilog contiene más de un módulo de nivel superior, especifica el nombre de
el módulo Verilog de nivel superior para convertirse en el superior, y establece el valor predeterminado para if --prefix
no se utiliza. Esto no es necesario con diseños estándar con una sola tapa.

--rastro
Agrega código de rastreo de forma de onda al modelo. Verilator generará adicionales
{prefix} __ Trace * archivos .cpp que deberán compilarse. Además
verilated_vcd_sc.cpp (para trazas SystemC) o verilated_vcd_c.cpp (para ambos) debe ser
compilado y vinculado. Si utiliza los Makefiles generados por Verilator, estos serán
agregado como destinos de origen para usted. Si no está utilizando los archivos MAKE de Verilator,
deberá agregarlos a su Makefile manualmente.

Tener el rastreo compilado puede resultar en algunas pequeñas pérdidas de rendimiento, incluso cuando
las formas de onda no se encienden durante la ejecución del modelo.

--traza de profundidad
Especifique el número de niveles de profundidad para habilitar el seguimiento, por ejemplo, --trace-level 1 to
solo ve las señales del nivel superior. Predeterminado para todo el modelo. Usando un pequeño número
disminuirá la visibilidad, pero mejorará en gran medida el tiempo de ejecución y el tamaño del archivo de seguimiento.

--trace-max-matriz profundidad
Rara vez necesario. Especifique la profundidad máxima de la matriz de una señal que se puede rastrear.
El valor predeterminado es 32, ya que rastrear matrices grandes puede ralentizar enormemente las simulaciones rastreadas.

--trace-max-ancho anchura
Rara vez necesario. Especifique el ancho máximo de bits de una señal que se puede rastrear.
El valor predeterminado es 256, ya que el rastreo de vectores grandes puede ralentizar enormemente las simulaciones rastreadas.

--no-trace-parámetros
Desactive el seguimiento de parámetros.

--trace-estructuras
Habilite el rastreo para mostrar el nombre de la estructura empaquetada, la unión y los campos de matriz empaquetada,
en lugar de un simple autobús lleno combinado. Debido a restricciones de formato de archivo VCD, esto puede
dan como resultado tiempos de rastreo significativamente más lentos y archivos de rastreo más grandes.

--trace-subrayado
Habilite el seguimiento de señales que comienzan con un guión bajo. Normalmente, estas señales son
no salida durante el rastreo. Consulte también --coverage-underscore.

-Uvar
No define el símbolo de preprocesador dado.

--desenrollar-recuento bucles
Rara vez necesario. Especifica el número máximo de iteraciones de bucle que se pueden desenrollar.
Consulte también la advertencia BLKLOOPINIT.

--unroll-stmts declaraciones
Rara vez necesario. Especifica el número máximo de declaraciones en un bucle para que ese bucle
ser desenrollado. Consulte también la advertencia BLKLOOPINIT.

--expresación regular no utilizada regexp
Rara vez necesario. Especifica una expresión regular simple con * y? que si un nombre de señal coincide
suprimirá la advertencia SIN UTILIZAR. El valor predeterminado es "* no utilizado *". Establecerlo en "" inhabilita
pareo.

-V Muestra la versión detallada, incluida la información de configuración compilada en
Verilador. (Similar a perl -V.)

-v nombre de archivo
Lea el nombre del archivo como una biblioteca Verilog. Cualquier módulo del archivo se puede utilizar para
resuelve las instancias de celda en el módulo de nivel superior, de lo contrario se ignora. Nota -v es bastante
estándar en todas las herramientas Verilog.

+ verilog1995ext +ext
+ verilog2001ext +ext
Sinónimos de "+ 1364-1995ext +"ext y "+ 1364-2001ext +"ext respectivamente

-Pared
Habilite todas las advertencias, incluidas las advertencias de estilo de código que normalmente están deshabilitadas por
predeterminada.

-Error-mensaje
Convierta el mensaje de advertencia especificado en un mensaje de error. Esto es generalmente para
disuadir a los usuarios de violar reglas importantes en todo el sitio, por ejemplo
"-Werror-NOUNOPTFLAT".

-Wfuturo-mensaje
Rara vez necesario. Suprima comentarios desconocidos de Verilator o mensajes de advertencia con el
código de mensaje. Esto se usa para permitir código escrito con pragmas para una versión posterior de
Verilator para ejecutarse en una versión anterior; agregar argumentos -Wfuture- para cada código de mensaje
o comentar que la nueva versión admite lo que la versión anterior no admite.

-No-mensaje
Desactiva el mensaje de advertencia especificado. Esto anulará cualquier directiva lint_on en
la fuente, es decir, la advertencia aún no se imprimirá.

-No-pelusa
Desactive todos los mensajes de advertencia relacionados con la pelusa y todas las advertencias de estilo. Esto es equivalente
a "-Wno-ALWCOMBORDER -Wno-CASEINCOMPLETE -Wno-CASEOVERLAP -Wno-CASEX -Wno-CASEWITHX
-Wno-CMPCONST -Wno-ENDLABEL -Wno-IMPLICIT -Wno-LITENDIAN -Wno-PINCONNECTEMPTY
-Wno-PINMISSING -Wno-SYNCASYNCNET -Wno-UNDRIVEN -Wno-UNSIGNED -Wno-UNUSED -Wno-WIDTH "
más la lista que se muestra para Wno-style.

Se recomienda encarecidamente que limpie su código en lugar de usar esta opción, es
Solo está diseñado para usarse cuando se ejecutan casos de prueba de código recibido de terceros.

-Estilo Wno
Deshabilite todos los mensajes de advertencia relacionados con el estilo de código (tenga en cuenta que de forma predeterminada ya están
discapacitado). Esto es equivalente a "-Wno-DECLFILENAME -Wno-DEFPARAM -Wno-INCABSPATH
-Wno-PINCONNECTEMPTY -Wno-PINNOCONNECT -Wno-SYNCASYNCNET -Wno-UNDRIVEN -Wno-UNUSED
-Wno-VARHIDDEN ".

-Wno-fatal
Cuando se detecten advertencias, imprímalas, pero no salga del simulador.

Tener mensajes de advertencia en las compilaciones es descuidado. Se recomienda encarecidamente que limpie
su código, use lint_off en línea, o use -Wno -... flags en lugar de usar esta opción.

-Aviso-mensaje
Habilita el mensaje de advertencia especificado.

-Aviso-pelusa
Habilite todos los mensajes de advertencia relacionados con la pelusa (tenga en cuenta que de forma predeterminada ya están habilitados),
pero no afectan los mensajes de estilo. Esto es equivalente a "-Wwarn-ALWCOMBORDER
-Wwarn-CASEINCOMPLETE -Wwarn-CASEOVERLAP -Wwarn-CASEX -Wwarn-CASEWITHX -Wwarn-CMPCONST
-Aviso-ETIQUETA FINAL -Aviso-IMPLÍCITO -Aviso-LITENDIANO -Aviso-FALTA -AVISO-AVISO-REALCVT
-Aviso-NO FIRMADO -Aviso-ANCHO ".

-Estilo de advertencia
Habilite todos los mensajes de advertencia relacionados con el estilo de código. Esto es equivalente a "-Wwarn
ASIGNADO -Wwarn-DECLFILENAME -Wwarn-DEFPARAM -Wwarn-INCABSPATH -Wwarn-PINNOCONNECT
-Wwarn-SYNCASYNCNET -Wwarn-UNDRIVEN -Wwarn-UNUSED -Wwarn-VARHIDDEN ".

--x-asignar 0
--x-asignar 1
--x-asignar rápido (predeterminado)
--x-asignar único
Controla el valor de dos estados que se reemplaza cuando se encuentra una asignación a X.
--x-assign = rápido, el valor predeterminado, convierte todas las X en lo que sea mejor para el rendimiento.
--x-assign = 0 convierte todas las X en 0 y también es rápido. --x-assign = 1 convierte todas las X en
1 s, esto es casi tan rápido como 0, pero es más probable que encuentre errores de reinicio como activos altos
la lógica disparará. --x-assign = unique llamará a una función para determinar el valor, esto
permite la aleatorización de todas las X para encontrar errores de reinicio y es el más lento, pero el más seguro para
encontrar errores de reinicio en el código.

Si usa --x-assign unique, es posible que desee sembrar su generador de números aleatorios como
que cada ejecución de regresión obtiene una secuencia de aleatorización diferente. Utilice el sistema
srand48 () o para Windows srand () función para hacer esto. Probablemente también querrás
imprima las semillas seleccionadas y codifique para permitir la repetición con esa misma semilla para que pueda
reproducir errores.

Nota. Esta opción se aplica solo a las variables que se asignan explícitamente a X en el
Código fuente de Verilog. Los valores iniciales de los relojes se establecen en 0 a menos que --x-initial-edge sea
especificado. Los valores iniciales de todas las demás variables de retención de estado se establecen como si
Se ha especificado --x-assign único.

- borde-inicial-x
Permite la emulación de simuladores controlados por eventos que generalmente activan un borde en un
transición de X a 1 ("posedge") o de X a 0 ("negedge"). Por lo tanto, el siguiente código,
donde "rst_n" no está inicializado, establecería "res_n" en "1'b1" cuando "rst_n" se establezca por primera vez
a cero:

reg res_n = 1'b0;

siempre @ (negedge rst_n) comenzar
si (rst_n == 1'b0) comenzar
res_n <= 1'b1;
final
final

En Verilator, de forma predeterminada, los relojes no inicializados reciben un valor de cero, por lo que lo anterior
El bloque "siempre" no se dispararía.

Si bien no es una buena práctica, hay algunos diseños que dependen de que XX 0 active un
"negedge", particularmente en secuencias de reinicio. El uso de --x-initial-edge con Verilator
replicar este comportamiento. También se asegurará de que XX 1 active un "posedge".

Nota. Algunos usuarios han informado que el uso de esta opción puede afectar la convergencia y que
puede ser necesario utilizar --converge-limit para aumentar el número de convergencia
iteraciones. Esto puede ser otro indicio de problemas con el diseño modelado que
Debería ser dirigido.

-y dir
Agregue el directorio a la lista de directorios en los que se deben buscar archivos de inclusión
o bibliotecas. Las tres banderas -y, + incdir y -I tienen un efecto similar; + incdir y + y
son bastante estándar en todas las herramientas de Verilog, mientras que -I es un alias para la compatibilidad con GCC.

Verilator utiliza por defecto el directorio actual ("-y.") Y cualquier --Mdir especificado, aunque
estas rutas predeterminadas se utilizan después de cualquier directorio especificado por el usuario. Esto permite '-y
"$ (pwd)" 'que se utilizará si se desean nombres de archivo absolutos para los mensajes de error en lugar de
nombres de archivo relativos.

EJEMPLO C + + EJECUCIÓN


Compilaremos este ejemplo en C ++.

mkdir prueba_nuestra
cd prueba_nuestra

gato < nuestro.v
módulo nuestro;
inicio inicial $ display ("Hola mundo"); $ terminar; fin
endmódulo
EOF

gato < sim_main.cpp
#include "Vour.h"
#include "verilated.h"
int main (int argc, char ** argv, char ** env) {
Verilado :: commandArgs (argc, argv);
Vour * top = nuevo Vour;
while (! Verilated :: gotFinish ()) {top-> eval (); }
eliminar la parte superior;
salida(0);
}
EOF

Si instaló Verilator desde fuentes, o un tarball, pero no como parte de su operación
sistema (como un RPM), primero debe señalar el kit:

exportar VERILATOR_ROOT = / ruta / a / donde / verilator / estaba / instalado
export PATH = $ VERILATOR_ROOT / bin: $ PATH

Ahora ejecutamos Verilator en nuestro pequeño ejemplo.

verilator -Pared --cc nuestro.v --exe sim_main.cpp

Podemos ver el código fuente en el directorio "obj_dir". Consulte la sección ARCHIVOS a continuación para
descripciones de algunos de los archivos que se crearon.

ls -l obj_dir

Entonces podemos compilarlo

cdobj_dir
hacer -j -f Vour.mk Vour

(Verilator incluyó una regla de compilación predeterminada y una regla de enlace, ya que usamos --exe y pasamos un
Archivo .cpp en la línea de comandos de Verilator. También puede escribir sus propias reglas de compilación, como
mostraremos en la sección SYSTEMC.)

Y ahora lo ejecutamos

discos compactos ..
obj_dir / Vour

Y obtenemos como salida

Hola Mundo
- our.v: 2: Verilog $ finish

Realmente, es mejor escribir un Makefile para hacer todo esto por usted. Entonces, cuando tu
cambios de fuente, se ejecutarán automáticamente todos estos pasos. Ver el directorio test_c en
la distribución por ejemplo.

EJEMPLO SISTEMAC EJECUCIÓN


Este es un ejemplo similar al anterior, pero usando SystemC.

mkdir test_our_sc
cd prueba_nuestro_sc

gato < nuestro.v
módulo nuestro (clk);
input clk; // Se requiere reloj para obtener la activación inicial
siempre @ (posedge clk)
begin $ display ("Hola mundo"); $ terminar; fin
endmódulo
EOF

gato < sc_main.cpp
#include "Vour.h"
int sc_main (int argc, char ** argv) {
Verilado :: commandArgs (argc, argv);
sc_clock clk ("clk", 10, 0.5, 3, verdadero);
Vour * top;
top = new Vour ("top"); // SP_CELL (arriba, Vour);
arriba-> clk (clk); // SP_PIN (arriba, clk, clk);
while (! Verilated :: gotFinish ()) {sc_start (1, SC_NS); }
eliminar la parte superior;
salida(0);
}
EOF

Si instaló Verilator desde fuentes, o un tarball, pero no como parte de su operación
sistema (como un RPM), primero debe señalar el kit:

exportar VERILATOR_ROOT = / ruta / a / donde / verilator / estaba / instalado
export PATH = $ VERILATOR_ROOT / bin: $ PATH

Ahora ejecutamos Verilator en nuestro pequeño ejemplo.

verilator -Muro --sc our.v

Entonces podemos compilarlo

hacer -j -f Vour.mk Vour__ALL.a
make -j -f Vour.mk ../sc_main.o verificado.o

Y enlace con SystemC. Tenga en cuenta que su ruta a las bibliotecas puede variar, dependiendo de la
sistema operativo.

exportar SYSTEMC_LIBDIR = / ruta / a / donde / libsystemc.a / existe
exportar LD_LIBRARY_PATH = $ SYSTEMC_LIBDIR: $ LD_LIBRARY_PATH
# Podría ser necesario si SystemC 2.3.0
exportar SYSTEMC_CXX_FLAGS = -pthread

g ++ -L $ SYSTEMC_LIBDIR ../sc_main.o Vour__ALL * .o verilated.o \
-o Vour -lsystemc

Y ahora lo ejecutamos

discos compactos ..
obj_dir / Vour

Y obtenemos el mismo resultado que el ejemplo de C ++:

Hola Mundo
- our.v: 2: Verilog $ finish

Realmente, es mejor que uses un Makefile para hacer todo esto por ti. Entonces, cuando tu fuente
cambios, ejecutará automáticamente todos estos pasos. Vea el directorio test_sc en el
distribución por ejemplo.

COMPARACIÓN & MEJORAMIENTO


Para un mejor rendimiento, ejecute Verilator con los indicadores "-O3 --x-assign = fast --noassert". los
-O3 flag requerirá tiempos de compilación más largos, y --x-assign = fast puede aumentar el riesgo de
restablecer errores en el comercio por rendimiento; consulte la documentación anterior para estos indicadores.

Los cambios menores en el código de Verilog también pueden generar grandes ganancias. No debería tener UNOPTFLAT
advertencias de Verilator. Arreglar estas advertencias puede resultar en grandes mejoras; un usuario
arregló su única advertencia UNOPTFLAT haciendo un simple cambio a un pestillo de reloj utilizado para la puerta
relojes y obtuvo una mejora del 60% en el rendimiento.

Más allá de eso, el rendimiento de un modelo verificado depende principalmente de su compilador C ++ y
tamaño de las cachés de su CPU.

De forma predeterminada, el archivo lib / verilated.mk tiene la optimización desactivada. Esto es para el
beneficio de los nuevos usuarios, ya que mejora los tiempos de compilación a costa de los tiempos de ejecución. Para agregar
optimización como opción predeterminada, establezca una de tres variables, OPT, OPT_FAST u OPT_SLOW
lib / verilated.mk. O utilice la opción -CFLAGS y / o -LDFLAGS en el comando verilator
línea para pasar las banderas directamente al compilador o enlazador. O, solo por una carrera, pase
ellos en la línea de comando para hacer:

hacer OPT_FAST = "- O2" -f Vour.mk Vour__ALL.a

OPT_FAST especifica optimizaciones para aquellos programas que son parte de la ruta rápida, principalmente
código que se ejecuta en cada ciclo. OPT_SLOW especifica optimizaciones para archivos de ruta lenta
(más rastreo), que se ejecutan solo en raras ocasiones, pero que tardan mucho en compilarse con
optimización activada. OPT especifica la optimización general y afecta a todas las compilaciones, incluidas
los que afectan OPT_FAST y OPT_SLOW. Para obtener mejores resultados, utilice OPT = "- O2" y vincule con
"-estático". Se pueden obtener casi los mismos resultados con tiempos de compilación mucho mejores con
OPT_FAST = "- O1 -fstrict-aliasing". Una mayor optimización como "-O3" puede ayudar, pero gcc
los tiempos de compilación pueden ser excesivos por debajo de O3 incluso en diseños de tamaño mediano. Alternativamente, algunos
los diseños más grandes reportan un mejor desempeño usando "-Os".

Desafortunadamente, usar el optimizador con archivos SystemC puede resultar en compilaciones
varios minutos. (Las bibliotecas SystemC tienen muchas funciones pequeñas en línea que impulsan la
tuercas del compilador.)

Para obtener mejores resultados, use GCC 3.3 o más reciente. GCC 3.2 y versiones anteriores tienen errores de optimización
detección de alias de puntero, que puede resultar en pérdidas de rendimiento 2x.

Si va a ejecutar muchas simulaciones en una sola compilación, investigue la retroalimentación
Compilacion. Con GCC, usando -fprofile-arcs, entonces -fbranch-probabilities producirá
otro 15% más o menos.

Los compiladores modernos también admiten la optimización del tiempo de enlace (LTO), que puede ayudar especialmente si
enlaza en código DPI. Para habilitar LTO en GCC, pase "-flto" tanto en la compilación como en el enlace.
Tenga en cuenta que LTO puede provocar tiempos de compilación excesivos en diseños grandes.

Si está utilizando sus propios archivos MAKE, es posible que desee compilar el código Verilado con
-DVL_INLINE_OPT = en línea. Esto hará funciones en línea, sin embargo, esto requiere que todos los cpp
Los archivos se compilarán en una sola ejecución del compilador.

Puede descubrir más posibilidades de ajuste perfilando el código Verilog. Usar
Verilator's --profile-cfuncs, luego GCC's -g -pg. A continuación, puede ejecutar oprofile o
gprof para ver en qué parte del código C ++ se gasta el tiempo. Ejecute la salida de gprof a través de
verilator_profcfunc y le dirá qué números de línea de Verilog en los que la mayoría de los
se está gastando el tiempo.

Cuando haya terminado, informe al autor de los resultados. Me gusta estar al tanto de cómo Verilator
compara y puede sugerir mejoras adicionales.

Utilice verilator en línea utilizando los servicios de onworks.net


Servidores y estaciones de trabajo gratuitos

Descargar aplicaciones de Windows y Linux

Comandos de Linux

Ad