SystemC vs HDLs

7

Actualmente estoy involucrado en un proyecto universitario para implementar un procesador de un conjunto de instrucciones existente. La idea es que al final del proyecto pueda sintetizar este diseño y ejecutarlo en un FPGA. Todo va bien hasta ahora, comencé a implementar el diseño en Verilog HDL hace unos días y conseguí una versión muy simple. Ahora el problema: me puse en contacto con algunas personas que han estado involucradas en el diseño de hardware durante años y sugirieron que, antes de seguir adelante, debería pasar a utilizar SystemC para la implementación. Ahora, me confundí mucho porque este era mi pensamiento:

Verilog - > Como lenguaje HDL apunta específicamente al diseño de hardware. Tiene algunos niveles de abstracción como Verilog estructural y de comportamiento, pero es una forma muy clara de especificar el RTL de un diseño. Definitivamente, puedes sintetizarlo usando un montón de herramientas, dependiendo del FPGA que elijas (en mi caso, estoy usando Xilinx Vivado 2014 y Zynq). En el lado negativo, Verilog no ofrece suficiente abstracción para la verificación y es por eso que tienes cosas como System Verilog.

SystemC - > Esta es una biblioteca de clases de C ++ que introduce efectivamente el concepto de tiempo en C ++ y le permite hacer una simulación dirigida por un evento. Claramente, es mucho más alto nivel que cualquier HDL y las cosas aquí se pueden implementar mucho más rápido. Esto lo convierte en una muy buena herramienta para cosas como la verificación e incluso la implementación de simuladores para que las personas puedan comenzar a diseñar controladores y cosas para un chip antes de que la cosa se fabrique. Aparentemente, también hay un subconjunto de SystemC que es sintetizable (creo que incluso Xilinx Vivado puede hacer esto) y en algunos casos permite que SystemC se use para diseñar sistemas muy grandes donde un alto nivel de abstracción es útil.

Por lo tanto, mis preguntas son:

  1. ¿Son estas nociones de lo que son correctas el sistema C y Verilog (o idiomas HDL si lo desea)?
  2. ¿Cuándo debo usar SystemC y cuándo Verilog?
  3. Me han dicho que incluso en Verilog, el uso de muchos códigos de comportamiento puede ser un poco problemático en las secciones críticas de la implementación porque básicamente le está dando muchas menos restricciones a la herramienta de síntesis sobre cómo sintetizarla. Con un nivel más alto de abstracción, ¿esto no sería un problema? es decir, si utilizo systemC, podría terminar con un diseño muy lento, hambriento de energía, grande ...
  4. La persona que sugirió SystemC mencionó que parece que estoy haciendo una "exploración arquitectónica" y por eso preferiría Verilog. ¿Qué significa eso exactamente? Tenía la impresión de que la arquitectura normalmente se refiere al conjunto de instrucciones y la microarquitectura a una implementación de un conjunto de instrucciones (de modo que la microarquitectura es el rtl real que ejecuta las instrucciones). Entonces, ¿significa la exploración arquitectónica que él piensa que estoy implementando un procesador para ver qué tan viable es un conjunto de instrucciones?
  5. Dijo que un argumento para usar SystemC es que es mucho más fácil porque es un nivel de abstracción más alto que un HDL. También afirmó que era más fácil acertar con la sincronización del diseño. ¿Hasta qué punto es esto cierto?

La ayuda sería muy apreciada, estoy un poco confundido y me resulta difícil obtener información clara sobre esto en línea. Gracias!

    
pregunta Andrés AG

4 respuestas

2

Tu amigo no entendió bien lo que estás haciendo o estaba pensando en SystemC como un paso preliminar. En cualquier caso, una HDL es la única opción, y sugeriría que use SystemVerilog sintetizable que sea lo suficientemente potente como para hacer una gran cantidad de exploración, siendo el mismo esencialmente Verilog para todo lo demás.

  1. Parcialmente. Distinguió Verilog como HDL, SystemVerilog como lenguaje de verificación y dijo que SystemC tiene una mayor abstracción pero también un subconjunto sintetizable. Hay dos errores aquí. En primer lugar, SystemVerilog también es un HDL con un subconjunto completamente sintetizable que se podría reanudar como un Verilog con soluciones obvias (por ejemplo, un solo tipo logic para cables) y muchos mecanismos de abstracción sintetizables (por ejemplo, interfaces). Es soportado por muchas herramientas incluyendo Vivado. SystemC , por otra parte, no es sintetizable directamente (ni siquiera un subconjunto), está destinado a modelado de alto nivel y exploración arquitectónica, aunque un subconjunto de él puede alimentarse una herramienta de síntesis de alto nivel, como Vivado HLS, que luego se traduce en un Verilog sintetizable (aunque no se puede leer por humanos).

  2. Verilog y el subconjunto sintetizable de SystemVerilog son lenguajes para el diseño de HW, generalmente utilizados para describir HW a un nivel de transferencia de registros, es decir, como un conjunto de bloques como registros, funciones combinacionales, máquinas de estados finitos, etc. Verilog -2001 también puede describir adecuadamente hw como una lista de redes de nivel de puerta, mientras que SV también se puede utilizar para un nivel mucho más alto de abstracción, por lo tanto, sus capacidades de verificación. Por otro lado, SystemC es apropiado para el modelado de alto nivel de sistemas en los que bloques completos se describen solo en un comportamiento de alto nivel. También es muy potente para la exploración arquitectónica, es decir, los diferentes parámetros y características de una arquitectura y evaluar los cambios en el rendimiento general.

  3. Esto es cierto solo si intentas describir las cosas de una manera que no sea RTL mientras desarrollas un modelo RTL. Por ejemplo, la forma correcta de describir un bloque que realiza una acumulación múltiple multiplicada es una máquina de estados finitos que maneja un multiplicador combinacional, un sumador combinatorio y un registro. Si por comportamiento quiso decir esto como en el software (un bucle for), entonces Sí, el código de comportamiento no funcionará. Si quería describir cada uno de los bloques que describí (mult, add, reg y FSM) a través de los bloques always , eso es perfectamente correcto y funcionará en una lista de redes realizando exactamente lo que especificó con excelentes resultados (a menudo mejor que muy Enfoque estructural que limita la capacidad de la herramienta de síntesis para optimizar la lógica. De hecho, la síntesis de alto nivel de SystemC a menudo dará buenos resultados solo si se adhiere a patrones muy similares, eliminando efectivamente cualquier ventaja al usar un lenguaje de nivel superior. En cualquier caso, SystemC es una mala elección para implementar un procesador.

  4. Arquitectura es un término muy amplio que no se limita a la ISA, de hecho, en los procesadores modernos, el diseño de la ISA es solo una pequeña parte del rompecabezas. En el contexto del diseño de un sistema, la arquitectura generalmente significa el conjunto de opciones a nivel del sistema (por ejemplo, ¿el DMA puede ser controlado por cualquier núcleo o solo uno especial? ¿El caché L1 es completo o asociativo? ¿Tiene un caché? ¿En absoluto, o administrar la memoria en SW?), incluida la ISA y también la micro arquitectura del procesador. Creo que lo que quiso decir tu amigo es que estás explorando varias configuraciones de tu procesador, que en realidad es exploración arquitectónica (o exploración micro arquitectónica si lo prefieres). Sin embargo, podría haberse perdido el hecho de que va a implementar esto en un FPGA, lo que hace que la opción SystemC no tenga sentido.

  5. Esto está mal. Si está diseñando un acelerador muy simple, como un filtro de transmisión, eso podría ser cierto porque las herramientas de HLS permiten insertar fácilmente etapas de tubería, mientras que tendría que hacerlo manualmente en RTL (o usar el cambio de fecha de datapath, pero creo que no es así) posible en vivado). En todos los demás casos, y especialmente en un objeto altamente complejo y estructurado, como un procesador, HLS resultará en un Verilog inflado, no descargable y, a menudo, simplemente erróneo, que luego debe sintetizarse: las herramientas simplemente no están diseñadas para este trabajo. p>

respondido por el Francesco Conti
3

Estás en la universidad y estudias (probablemente) para ser ingeniero. Como ingeniero, debes entender cómo funcionan las cosas en un nivel bajo. Para lograr esto, debes eliminar las capas de abstracción, no agregarlas.

Por este motivo, mi consejo es que no uses SystemC para este proyecto. Puedes terminar usándolo en tu carrera profesional, pero eso es para el futuro.

Si elige usarlo de todos modos, primero debe hablar con su profesor. Cuando hice una tarea similar en la universidad, se nos dijo explícitamente a no que usáramos SystemC por el motivo que he descrito anteriormente.

    
respondido por el markt
0

Seamos honestos, es toda la programación. Lo que puede hacer en SystemC, también puede programar en VHDL o Verilog. Es solo una cuestión de soporte de herramientas. No toma SystemC ni SystemVerilog.

Si los proveedores son la solución obvia para convertir a los diseñadores de RTL en la programación del sistema, simplemente deben proporcionar soporte para el lenguaje apropiado para el diseño de FPGA. De acuerdo con la encuesta de Wilson de Mentor 2012, el lenguaje para los FPGA es VHDL. Consulte enlace

    
respondido por el Jim Lewis
0

SystemC se utiliza para diseños complejos. Por ejemplo Especificando algo a nivel arquitectónico. La ventaja es que hay menos líneas de código que los diseños de Verilog, un tiempo de simulación más rápido, modelos precisos de ciclos. No le crea a una persona que dice que SystemC no es sintetizable. Por supuesto que es. Para darle una idea, en Verilog tenemos un nivel de abstracción, puede modelar con un nivel de conmutación / nivel de comportamiento. La elección se realiza en función de la complejidad del diseño.

Una forma más familiar de describir el hardware es mediante Verilog, cuya síntesis se admite en muchas herramientas EDA.

Normalmente, para diseños más grandes, los modelos SystemC y el banco de pruebas están diseñados por el diseñador de arquitectura. Estos modelos se entregaron al diseñador de electrónica para convertirlos en RTL usando Verilog / VHDL.

    
respondido por el MayurKubavat

Lea otras preguntas en las etiquetas