Quiero entender cómo se sintetizan diferentes construcciones en el código VHDL en RTL.
- ¿Alguien puede decirme la diferencia entre la construcción If-Else y las construcciones de declaración de caso de un proceso en VHDL en términos de cómo la herramienta de síntesis inferencia el código en el circuito RTL?
- Considere el caso de múltiples if-else anidados y la combinación de declaraciones de casos con la construcción if-else dentro de un proceso.
- ¿También cuándo usar qué construcción?
PD: He visto una pregunta relacionada "Declaraciones if múltiples en proceso en vhdl" pero eso no responde a mi pregunta de todos modos.
vhdl
code-design
rtl
nurabha
fuente
fuente
dec
/jz
instrucciones, lo cual es mucho más eficiente. Quizás se aplique una optimización similar aquí.Respuestas:
La
if-elsif-else
construcción infiere una red de enrutamiento prioritario:simular este circuito : esquema creado con CircuitLab
Esto corresponde a
La
case
construcción, por otro lado, infiere un gran cambio:Esto corresponde a
Obviamente, estos son diseños muy simplificados con una sola expresión de valor, lo que resulta en una salida.
Según lo anterior, puede ver cómo se anidarían / mezclarían.
Dado que
if-else
infiere prioridad, debe usarse cuando puede ocurrir más de una condición de entrada. Usarcase
, por otro lado, es apropiado cuando las entradas son mutuamente excluyentes.fuente
if-else
construcción, sin embargo, es donde surge esa cadena. La primera condición debe fallar para que se pruebe la segunda condición. Este no es el caso para, er, lacase
construcción, y esta es la razón por la cual unaif-else
declaración no puede sintetizarse como un solo mux grande.case
declaración también puede generar lógica secuencial. Encontré "Real World VHDL" , una serie de diapositivas de conferencias de la Universidad de Glasgow, que pueden serle útiles.En esta antigua publicación de blog , el autor escribió y sintetizó dos versiones funcionalmente equivalentes de código VHDL. Uno usando if-else, el otro usando mayúsculas y minúsculas. El resultado:
Y su conclusión:
También hay docenas de publicaciones sobre este tema en Stack Overflow para cada idioma concebible. La conclusión es generalmente la misma, que no hay diferencia en cuanto al rendimiento. Ocasionalmente, si hay una gran cantidad de casos, un compilador puede ser lo suficientemente inteligente como para crear una tabla de búsqueda que arroje un rendimiento ligeramente mejor.
Un sintetizador VHDL puede hacer algo similar. Pero aún necesitaría una gran cantidad de casos, en cuyo caso (juego de palabras) probablemente quiera usar una declaración de caso de todos modos, ya que proporciona una mejor legibilidad cuando hay una gran cantidad de opciones.
fuente