2010-09-04 11 views
6

He estado rascándome la cabeza desde mi primera clase de VHDL y he decidido publicar mi pregunta aquí.¿Por qué necesito redeclarar componentes VHDL antes de crear instancias en otras arquitecturas?

Dado que tengo una entidad declarada (y también una arquitectura) y quiero instanciarla dentro de otra arquitectura, ¿por qué es que aparentemente tengo que volver a declarar la "entidad" (componente) dentro de esta arquitectura antes de crear instancias ¿eso?

¿No es el compilador lo suficientemente inteligente como para asociar una instanciación a su arquitectura solo por su nombre? ¿Dónde está la necesidad de la declaración del componente?

Respuesta

10

Usted puede crear una instancia del componente directamente, si lo desea:

MyInstantiatedEntity : entity work.MyEntity_E 
    generic map (
     config   => whatever) 
    port map (
     clk    => signal1, 
     clk_vid   => signal2, 
     ... 

Creación de una declaración de componentes le da la capacidad extra para cambiar lo que se une a la creación de instancias a través de una especificación de configuración o similar.

+0

¡Ya veo, gracias! –

+1

Puede especificar la arquitectura para: label: entity work.MyEntity_E (RTL) generic map ... – Hendrik

2

Cuando hacía mis tareas de VHDL cuando estaba en la escuela, tenía que tener todo nuestro código en un solo archivo, así que no recuerdo si podía o no escribir un archivo para cada módulo y cómo estaba hecho.

Dicho esto, tendría que declarar la entidad que usaría al definir el comportamiento, si la estuviera usando de la misma manera que definiría prototipos, estructuras, clases y demás en C o C++. La diferencia aquí es que no tiene el lujo de definir archivos de cabecera para esta "redeclaración" en VHDL (al menos no creo que haya un equivalente). Por lo tanto, me parece perfectamente razonable tener que hacer esto. Tenga en cuenta que VHDL salió cuando C era muy común y los compiladores no eran "lo suficientemente inteligentes" como lo son hoy.

Un gurú de VHDL podría tener una respuesta definitiva para esto, pero así es como lo entiendo.

+0

Creo que esta podría ser una lectura interesante, [Cómo incluir el archivo de encabezado en el módulo VHDL] (http://www.edaboard.com/thread169224.html) (no hay una manera). Puede ser relevante, pero no estoy seguro de cómo lo aplicaría. Puede definir sus "encabezados" de esta manera. –

+0

Ahh, eso tiene mucho sentido. ¡Gracias por la respuesta! –

+1

Un paquete es un poco como un archivo de encabezado; puede colocar componentes en ellos para que solo tenga que declararlos una vez. Pero la instanciación directa como Charles sugirió es el camino a seguir a menos que tenga buenas razones para no hacerlo (por ejemplo, componentes de caja negra, que necesitan usar configuraciones). –

Cuestiones relacionadas