VHDL 'buffer' vs. 'out'

5

Me preguntaba acerca de la opción de i / o 'buffer' para las entidades en el lenguaje VHDL. Descubrí que mi código es mucho más limpio si uso la opción 'buffer' en lugar de 'out' en cualquier circunstancia en la que quiera actuar sobre la señal de salida en algún lugar dentro de la entidad. Encuentro que puedo pensar en muy pocas razones para usar 'out' y estoy tentado de usar siempre 'buffer' en todos los casos. Entonces, mi pregunta es: ¿en qué circunstancias debería configurar mis salidas como 'fuera' (incluso cuando eso significa que tengo que agregar una declaración de señal adicional y asignación) y cuándo está bien usar 'búfer'?

    
pregunta kjgregory

1 respuesta

3

Un caso, que probablemente no se aplique, es si está usando un estándar más antiguo que VHDL-2002. Antes de eso, buffer no podía conectarse directamente a out . Por lo tanto, en un diseño jerárquico, la ruta de la señal debería declararse como buffer en todos los niveles. Además, al adherirse a estos estándares más antiguos, algunas herramientas tienen problemas para sintetizar buffer s correctamente. Pueden o no advertirte sobre esto.

Esto ya no debería ser un problema si está utilizando un estándar más nuevo. Desde el VHDL-2002 Standard :

  

a) Para un puerto formal de modo en , el real asociado debe ser un   puerto de modo en , inout o búfer .

     

b) Para un puerto formal de modo fuera , el real asociado debe ser un   puerto de modo fuera , inout o búfer .

     

c) Para un puerto formal de modo inout , el real asociado debe ser   un puerto de modo inout o buffer .

     

d) Para un puerto formal de modo búfer , el real asociado debe ser   un puerto de modo out , inout o buffer .

     

e) Para un puerto formal de modo enlace , el real asociado puede ser   un puerto de cualquier modo.

A menudo también veo consejos que indican que un buffer nunca debe ser declarado en tres. Si necesita la capacidad de tri-estado de un bus, entonces debería usar out . No pude encontrar ninguna referencia directa a cómo buffer s manejó la declaración triple en el estándar. Pero probablemente sea un buen consejo a seguir. Nuevamente, sus herramientas pueden o no quejarse si intenta sintetizar un búfer de tres estados.

    
respondido por el embedded.kyle

Lea otras preguntas en las etiquetas