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:
- ¿Son correctas estas nociones de qué sistema C y Verilog (o idiomas HDL si lo desea)?
- ¿Cuándo debo usar SystemC y cuándo Verilog?
- 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 ...
- 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?
- 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!