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