SystemC vs HDLs

9

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 obtuve 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 me sugirieron que antes de continuar debería cambiar a usar SystemC para la implementación. Ahora, me confundí muchísimo porque este era mi pensamiento:

Verilog -> Como lenguaje HDL se dirige específicamente al diseño de hardware. Tiene algunos niveles de abstracción como Verilog estructural y conductual, 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 tableros Zynq). En el lado negativo, Verilog no ofrece suficiente abstracción para la verificación y es por eso que tiene cosas como System Verilog.

SystemC -> Esta es una biblioteca de clase C ++ que introduce efectivamente el concepto de tiempo en C ++ y le permite hacer una simulación dirigida por eventos. Claramente, es mucho más de alto nivel que cualquier HDL y las cosas aquí se pueden implementar mucho más rápido. Esto lo convierte en una herramienta muy buena 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 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 mayor nivel de abstracción es útil.

Entonces, mis preguntas son:

  1. ¿Son correctas estas nociones de qué sistema C y Verilog (o idiomas HDL si lo desea)?
  2. ¿Cuándo debo usar SystemC y cuándo Verilog?
  3. Me dicen que incluso en Verilog, usar mucho código de comportamiento puede ser un poco problemático en secciones críticas de la implementación porque básicamente le estás dando muchas menos restricciones a la herramienta de síntesis sobre cómo sintetizarlo. Con un mayor nivel de abstracción, ¿no sería esto un problema? es decir, si uso systemC, podría terminar con un diseño grande muy lento, que necesita mucha energía ...
  4. La persona que sugirió SystemC mencionó que parece que estoy haciendo "exploración arquitectónica" y es por eso que preferiría Verilog. ¿Qué significa eso exactamente? Tenía la impresión de que la arquitectura generalmente se refiere al conjunto de instrucciones y la microarquitectura a una implementación de un conjunto de instrucciones (por lo que la microarquitectura es el rtl real que ejecuta las instrucciones). Entonces, ¿la exploración arquitectónica significa que él piensa que estoy implementando un procesador para ver qué tan factible es un conjunto de instrucciones?
  5. Dijo que un argumento para usar SystemC es que es mucho más fácil porque es un mayor nivel de abstracción que un HDL. También afirmó que era más fácil acertar en el momento 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!

Andrés AG
fuente
Hola, ¿puedo preguntar qué curso académico fue?
Reflexión
Hola, estudié informática. Hablando estrictamente, esto no es parte del curso estándar, elegí construir un procesador basado en el Transputer para mi tesis de maestría desde cero.
Andrés AG el

Respuestas:

3

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

  1. Parcialmente. Distinguió entre 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í. Primero, SystemVerilog también es un HDL con un subconjunto totalmente sintetizable que podría reanudarse como un Verilog con correcciones obvias (por ejemplo, un solo logictipo para cables) y muchos mecanismos de abstracción sintetizables (por ejemplo, Interfaces). Es compatible con muchas herramientas, incluido Vivado. SystemC por otro lado, no esdirectamente sintetizable (ni siquiera cualquier subconjunto), está destinado a modelado de nivel superior y exploración arquitectónica, aunque algunos subconjuntos se pueden alimentar en una herramienta de síntesis de alto nivel como Vivado HLS que luego se traduce en Verilog sintetizable (aunque no legible para humanos) .

  2. Verilog y el subconjunto sintetizable de SystemVerilog son lenguajes para el diseño de hardware, generalmente se utilizan para describir hardware a nivel de transferencia de registro, es decir, como un conjunto de bloques como registros, funciones combinacionales, máquinas de estado finito, etc. Verilog-2001 también puede describir adecuadamente hw como una lista de red de nivel de puerta, mientras que SV también se puede usar para un nivel de abstracción mucho más alto, 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 los bloques completos se describen solo de manera conductual de alto nivel. También es muy potente para la exploración arquitectónica, es decir, parámetros y características variables de una arquitectura y evaluar cambios en el rendimiento general.

  3. Eso es cierto solo si intenta describir cosas de una manera no RTL mientras desarrolla un modelo RTL. Por ejemplo, la forma correcta de describir un bloque que realiza una acumulación múltiple repetitiva es una máquina de estados finitos que maneja un multiplicador combinacional, un sumador combinacional y un registro; si por comportamiento se refería a describir esto como en un software (un bucle for), entonces Sí, el código de comportamiento no funcionará. Si te referías a describir cada uno de los bloques que describí (mult, add, reg y FSM) a través dealwaysbloques, eso está perfectamente bien y funcionará en una lista de red al darse cuenta exactamente de lo que especificó con excelentes resultados (a menudo mejor que un enfoque extremadamente 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 apega 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 ISA, de hecho, en los procesadores modernos, el diseño de ISA es solo una pequeña pieza 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, ¿puede el DMA ser controlado por algún núcleo o solo por uno especial? ¿El caché L1 es completamente o un conjunto asociativo? ¿Tiene un caché? en absoluto, o administrar memoria en SW?), incluido el ISA y también la micro arquitectura del procesador. Creo que lo que su amigo quiso decir es que está explorando varias configuraciones de su procesador, que de hecho es exploración arquitectónica (o exploración micro arquitectónica si lo prefiere). Sin embargo, podría haber pasado por alto 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 HLS permiten insertar fácilmente etapas de canalización, mientras que tendría que hacerlo manualmente en RTL (o usar el ajuste de ruta de datos, pero creo que eso no es 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 hinchado, indebible y, a menudo, completamente incorrecto que luego debe sintetizarse; las herramientas simplemente no están diseñadas para este trabajo.

Francesco Conti
fuente
Gracias por la ayuda. Ya comencé el proyecto usando Verilog, ¡pero aún aprendí mucho de tu respuesta!
Andrés AG
3

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

Por esta razón, mi consejo es que no use SystemC para este proyecto. Puede terminar usándolo en su 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 que no usáramos SystemC por la razón que describí anteriormente.

Markt
fuente
0

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

Si los vendedores son la solución obvia para convertir a los diseñadores RTL a la programación del sistema, simplemente necesitan brindar soporte en el lenguaje apropiado para el diseño de FPGA. Según la encuesta Mentor 2012 Wilson, el lenguaje para FPGA es VHDL. Ver http://blogs.mentor.com/verificationhorizons/blog/2013/08/05/part-8-the-2012-wilson-research-group-functional-verification-study/

Jim Lewis
fuente
0

SystemC se utiliza para diseños complejos. Por ejemplo, especificar algo a nivel arquitectónico. Ventaja: menos líneas de código que los diseños de Verilog, tiempo de simulación más rápido, modelos precisos de ciclo. No le crea a la persona que dice que SystemC "no" es sintetizable. Por supuesto que es. Para que te hagas una idea, en Verilog tenemos un nivel de abstracción, puedes modelar con nivel de cambio / 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 utilizando Verilog, cuya síntesis es compatible con muchas herramientas EDA.

Típicamente para diseños más grandes, los modelos SystemC y testbench están diseñados por un diseñador de arquitectura. Estos modelos luego se entregan al diseñador de electrónica para convertirlos en RTL usando Verilog / VHDL.

MayurKubavat
fuente