2 Introduccin La descripcin funcional describe al sistema en trminos de sus operaciones. La descripcin estructural especifica cmo el sistema est hecho, cuales son sus subsistemas o componentes y como es que ellos se interconectan. La descripcin estructural permite tener mltiples niveles de jerarqua y un componente puede ser especificado, ya sea con una descripcin funcional o estructural. En el segundo caso, tales componentes pueden a la vez contener una red de elementos mas primitivos. Finalmente, en el ltimo nivel, ste es especificado por su comportamiento. 3 COMP 4 COMP 2 COMP 3 COMP 1 COMP 11 COMP 13 COMP 12 C O M P
1 3 1 C O M P
1 3 2 Diferentes jerarquias en un sistema 4 Componentes de una descripcin estructural En una descripcin estructural, los componentes se comunican entre si a travs de seales. Un componente puede ser un sistema individual especificado por medio de su Entidad y Arquitectura, o bien puede ser insertado en la arquitectura con la palabra reservada component. Los componentes deben ser instanciados en la descripcin estructural. La instanciacin de componentes es una proposicin bsica en una arquitectura estructural. Las diferentes instancias son concurrentes una con otra. Un componente instanciado no est completo sin un mapa de sus puertos una referencia de cmo se har la conexin entre los puertos del componente con las seales del nivel jerrquico mas alto. 5 D Clk Q A B C Dex Clkex En Clkin Qout Entity Dlatch_en is port ( Dex, Clkex, En : in bit; Qout : out bit ); End Entity Dlatch_en; DLatch AND2 Architecture Struct of Dlatch_en is Signal Clkin : bit; Begin gate: entity work.And2 (beh) port map ( A => Clkex, B => En, C => Clkin ); latch: entity work.DLatch (beh) port map ( D => Dex, clk => Clkin, Q => Qout ); End Architecture Struct; Dlatch_en 6 Entity And2 is port ( A, B : in bit; C : out bit ); End Entity And2; Architecture Beh of And2 is Begin C <= A and B after 2 ns; End Architecture Beh; Entity Dlatch is port ( D, Clk : in bit; Q : out bit ); End Entity And2; Architecture Beh of Dlatch is Begin Process (clk, D) begin if clk = 1 then Q <= D after 3 ns; end if; end process; End Architecture Beh; 7 Antes de que un componente pueda ser usado, ste debe ser instanciado. La instanciacin consiste en seleccionar una especificacin compilada de la librera y ligarla a la arquitectura donde ser usada. Cada instancia de un componente contiene dos partes: nombre_de_la_instancia : entity work.nombre_de_la_entidad ( nombre_de_la_arquitectura ) Donde Work es el nombre de la librera donde todos los elementos definidos por el usuario son salvados. Componentes e instanciacin directa de componentes 8 Instanciacin Directa Es la forma ms simple de construir un sistema estructuralmente. Se requiere la especificacin compilada del componente a instanciar y la proposicin con la instanciacin. El nombre de la arquitectura es obligatorio cuando la entidad a instanciarse tiene asociadas mas de una arquitectura. En otro caso, puede omitirse. 9 Mapeo de puertos por posiciones Los mapas de puertos especifican las conexiones entre los puertos de una entidad (componente) y las seales en la arquitectura donde los componentes son instanciados. Existen dos formas para hacer el mapeo de puertos: Asociacin de puertos posicional o asociacin de puertos por nombre. En la asociacin posicional, las seales en el mapa de puertos deben listarse en el mismo orden en el cual se declararon los puertos en la entidad del componente. Para que la asociacin sea posible, las seales deben ser del mismo tipo. Entity And2 is port ( A, B : in bit; C : out bit ); End Entity And2; Architecture Beh of And2 is Begin C <= A and B after 2 ns; End Architecture Beh; S o m e S y s t e m X Y Z Entity SomeSystem is . . . . End Entity SomeSystem; Architecture Struct of SomeSystem is Begin . . . gate: entity work.And2 (beh) port map ( , , ); . . . . End Architecture Struct; A B C 10 Mapeo de puertos por nombre En el mapeo por posiciones se debe tener cuidado del orden para no cometer errores. La asociacin de puertos por nombre da mayor claridad y reduce la posibilidad de cometer errores, por que para cada asociacin debe especificarse:el nombre de la seal a asociar, el smbolo => y el nombre del puerto como aparece en la entidad del componente. No importa el orden en que se realicen las asociaciones. Entity And2 is port ( A, B : in bit; C : out bit ); End Entity And2; Architecture Beh of And2 is Begin C <= A and B after 2 ns; End Architecture Beh; S o m e S y s t e m X Y Z Entity SomeSystem is . . . . End Entity SomeSystem; Architecture Struct of SomeSystem is Begin . . . gate: entity work.And2 (beh) port map ( A => , B => , C => ); . . . . End Architecture Struct; A B C 11 Asociaciones complejas 3 2 1 0 7 6 5 4 3 2 1 0 3 2 1 0 BANDERAS MEMORIA ACUMULADOR OPERACIN_DE_REGISTROS CF ZF OF MF Opcode(3) Opcode(2) Opcode(1) Opcode(0) OperandA(3) OperandA(2) OperandA(1) OperandA(0) OperandB(3) OperandB(2) OperandB(1) OperandB(0) Signal Banderas : Bit_Vector ( 3 downto 0); Signal Memoria : Bit_Vector ( 7 downto 0); Signal Acumulador : Bit_Vector ( 3 downto 0); Entity Op_Reg is port ( CF : out bit; ZF : out bit; OF : out bit; MF : out bit; Opcode : in bit_vector( 3 downto 0); OperandA : in bit_vector( 3 downto 0); OperandB : in bit_vector( 3 downto 0) ); End entity Op_Reg; 12 Asociaciones complejas VHDL proporciona flexibilidad para asociaciones complejas. Tanto seales como puertos pueden ser asignadas elemento a elemento o bien por bloques. Cualquier asignacin de seales y puertos es permitida, siempre que se conserve que los elementos son compatibles (del mismo tipo y tamao). . . . . Operation_Register : Entity Work.Op_Reg port map ( CF => Flags(3), ZF => Flags(2), OF => Flags(1), MF => Flags(0), Opcode => Memoria ( 7 downto 4), OperandA => Memoria (3 downto 0), OperandB => Acumulador ); . . . . 13 Puertos sin conexin Es posible que un puerto no este conectado, para ello debe especificarse como abierto (open). El estndar de VHDL permite manejar esta situacin simplemente sin agregar al mapa de puertos al puerto que se quedar sin conexin. Sin embargo, las herramientas de simulacin muchas veces no dan estas facilidades por que el programa no puede determinar si el puerto no aparece por que no estar conectado, o bien por olvido del usuario. Input1 Output1 Input2 Output2 Input3 SigA SigB SigC SigD SigE Comp1 Comp1 : Entity Work.SomeEntity port map ( Inpu1 => SigA, Input2 => SigB, Input3 => SigC, Output1 => SigD, Output2 => SigE ); Input1 Output1 Input2 Output2 Input3 SigA SigB SigC SigD SigE Comp2 Comp2 : Entity Work.SomeEntity port map ( Inpu1 => SigA, Input2 => SigB, Input3 => SigC, Output1 => SigD, Output2 => Open ); 14 Instanciacin por Componente Para diseos grandes sera conveniente que todos los mdulos se pudiesen hacer por separado y que se pudiera hacer referencia a otros componentes cuyo comportanmiento no ha sido an especificado. Para una especificacin estructural sera suficiente con tener una declaracin de la interfaz del componente (como requisito del sistema). La declaracin de la interfaz del componente es llamada declaracin del componente (component declaration) y es ubicada en la parte declarativa del cuerpo de la arquitectura (o en un paquete). Instanciacin Directa Instanciacin del Componente Instanciacin del Componente Declaracin del Componente Instanciacin del Componente 15 Declaracin de Componentes La sintaxis para la declaracin de componentes es muy similar a la declaracin de entidades, esto no es coincidencia puesto que los componentes y las entidades juegan un papel similar en la definicin de mdulos externos. Sintaxis: component nombre_del_componente is generic ( lista de parmetros ); ports ( lista de puertos ); end component nombre_del_componente; Ejemplo: Architecture Struct of Reg4 is component DFF is generic ( t_prop : time; -- tiempo de propagacin t_setup : time ); -- tiempo de ajuste ports ( d, clk, rst : in Bit; q : out Bit; ); end component DDF; begin . . . . 16 Entidades y Componentes Existen dos diferencias importantes entre Entidades y Componentes: La declaracin de una Entidad define una interfaz de un mdulo real, es decir, un sistema o circuito que fsicamente existe; el sistema es una unidad de diseo separada y puede ser simulada individualmente, analizada o sintetizada. La declaracin de un componente por otro lado define la interfaz de un mdulo virtual o que no-existe; es especificado dentro de una arquitectura como para indicar que ah se va a situar al componente real. 17 D Clk Q RST B I T 1 D Clk Q RST B I T 0 D Clk Q RST B I T 3 D Clk Q RST B I T 2 RegD(0) RegQ(0) RegQ(1) RegQ(2) RegQ(3) RegD(1) RegD(2) RegD(3) CLK Rst REG4B Entity Reg4B is port ( RegD : in bit_vector; RegQ : out bit_vector; Rst, Clk : in bit ); End entity Op_Reg; Architecture Struct of Reg4B is component DFF is generic ( t_prop : time; -- tiempo de propagacin t_setup : time ); -- tiempo de ajuste ports ( d, clk, rst : in Bit; q : out Bit; ); end component DDF; Begin bit0: Component DDF generic map ( t_prop => 2 nS, t_setup => 1 nS ) port map ( D => RegD(0), Q => RegQ(0), Rst => Rst, Clk => clk ); . . . . End Architecture Struct;