fpganedir.com'da ara

fpganedir mail

COMPONENT

Component, entity-architecture çiftini temsil eder. Hiyerarşik düzende, başka bir architecture  içinde çağrılacak (instantiate) olan bir alt sistemi tayin eder. Component çağırma,bir karttaki sokete entegre yerleştirmeye benzer.
Bu sayede daha önceden oluşturduğumuz  programları, yeni oluşturacağımız projelerde kullanabiliriz.

Component Tanımlanması

 component  component ismi
       generic (  generic ismi : tip := değer;  diğer generikler...  );
        port (   port ismi : mod :=tip;  diğer portlar...    );
end component;

Component Program içerisinde çağrılması

Etiket : component ismi
              generic map ( generic ismi => değer, diğer generic... )
               port map ( port ismi> => sinyal ismi, diğer portlar.. );

ÖRNEK 1

Component ile tanımlayacağız program

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity and_gate is
      Port ( in1      : in  STD_LOGIC;
                 in2      : in  STD_LOGIC;
                 output : out  STD_LOGIC);
end and_gate;

architecture Behavioral of and_gate is
   begin
        output<=in1 and in2;
   end Behavioral;

Component 'i çağıracağımız program

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity component_example is
     Port ( A : in  STD_LOGIC;
               B : in  STD_LOGIC;
               C : out  STD_LOGIC);
end component_example;

architecture Behavioral of component_example is

COMPONENT and_gate
      PORT(    in1 : IN std_logic;
                      in2 : IN std_logic;         
                      output : OUT std_logic    );
END COMPONENT;

begin
  U: and_gate PORT MAP(  in1 =>A ,
                                                 in2 =>B ,
                                                  output => C );
end Behavioral;

DETAYLI AÇIKLAMA

Bir component çağrılmadan önce tanımlanması edilmelidir. Component tanımlanması  kart örneğindeki soketi tanımlamak gibidir. Yani kullanılacak olan design entity’nin sanal arayüzünü tanımlamaktır.Yani onun program içerisinde yerinin hazırlanmasıdır.

Component tanımlanması  package, design entity, architecture ya da block içinde yapılabilir. Genelde bu işlem package içinde yapılır. Bu sayede, içinde component tanımlanmış  package’ı kullanan tüm architecture’lar için, o component kullanılabilir duruma gelir.

ÖRNEK 2

architecture STRUCTURE_2 of EXAMPLE is
component XOR_4 is
   port( A,B: in BIT_VECTOR(0 to 3);            -- Component deklarasyonu burada yapılıyor.
               C: out BIT_VECTOR(0 to 3));         --XOR_4 isimli component’in 4 bitlik A, B girişleri ve C çıkışı var.
end component XOR_4;
signal S1,S2 : BIT_VECTOR(0 to 3);
signal S3 : BIT_VECTOR(0 to 3);
begin
 -- Component’in kullanılması (instantiation) X1 etiketi ile yapılıyor. A,B ve C          port                                                                     --   arayüzleri ise S1, S2 ve S3 sinyalleri ile ilişkilendiriliyor.
       X1 : XOR_4 port map(S1,S2,S3);
end architecture STRUCTURE_2

NOT: Bir architecture içinde deklare edilen component’ler sadece o architecture içinde kullanılabilir.
Bir component architecture içinde deklare edilecekse, bu işlem begin ifadesinden önce yapılmalıdır. Böyle bir durumda component sadece architecture içinde kullanılabilir.

Component Program içinde çağrılması

VHDL Tasarım hiyerarşisini tanımlamak ya da bir netlist oluşturmak için component kullanımına ihtiyaç vardır.  Netlist bir tasarımın yapısal tanımlamasıdır. Component çağrılması (instantiation) ile yeni bir hiyerarşik yapı oluşturulur ve birbirine bağlanan componentler ile bir netlist meydana getirilir.
Component kullanımı üç farklı yolla yapılabilir:

Generic map (opsiyonel) generic’lerin kendilerine tahsis edilen değerlerinin adreslenmesi için kullanılır.
Port map içinde, her ifade farklı bir sinyale adreslenir.

Component kullanımı:

Çağırılan component’in ismi  tanımlanan  component ile aynı olmalıdır. Componentler generic ve port parametreleri ile çağrılırlar. Bu işlem iki farklı yolla yapılabilir: 1)yerleşime bağlı liste 2)İsme bağlı liste

1. Yerleşime bağlı listede, parametreler component tanımlanırken  belirtilen sırayla yazılır.

architecture Structural of ALU is
signal X,Y,S,C : bit ; --ALU yapısına ait X,Y,S ve C sinyalleri tanımlanıyor.

component HalfAdder is
    port ( In1, In2         : in bit;
              Sum, Carry : out bit);
end component HalfAdder;
begin
  HA : HalfAdder port map (X,Y,S,C); --HalfAdder component’i çağrılıyor.
                                                                 --In1,In2,Sum ve Carry portları sırasıyla X,Y,S ve C isimleriyle kullanılıyor.

     . . .
end architecture Structural;

2. İsme bağlı listede, parametreler component tanımlanırken belirtilen sıradan farklı yazılır. Bu durumda portlar açıkça ilgili yere açık bir şekilde referans verilmelidir.

architecture Structural of ALU is
signal X,Y,S,C : bit;
component HalfAdder is
   port (In1, In2 : in bit;
         Sum, Carry : out bit);
end component HalfAdder;
begin
   HA : HalfAdder port map (Sum=>S, Carry=>C,  In1=>X, In2=>Y);  --HalfAdder component’i çağrılıyor.
                                                                                                                       --Sum, Carry, In1 ve In2, portlarının
                                                                                                                       --isimlerinin karşılığı burada belirtiliyor.
    . . .
end architecture Structural;

Entity Kullanımı:

Herzaman bir component tanımlamaya gerek yoktur. İstenirse entity/architecture çifti de doğrudan çağrılabilir.
Bu tür çağrımlarda, Çağrılan tasarım entity ve Architecture yazılması yeterli olacaktır.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity ornek_2 is
    Port ( A : in  STD_LOGIC;
              B : in  STD_LOGIC;
              C : out  STD_LOGIC);
end ornek_2;

architecture Davranis of ornek_2 is
   begin
       u1:entity and_gate(Behavioral) --And_gate programındaki architecture isimi
            port map(A,B,C);
end Davranis;

 

 

Anasayfa | Fpga | VHDL | VHDL Sözlüğü | Embedded Sistem | Android | Sayısal Tasarım | Simulasyon | PCB | Örnekler | Forum | İletişim
Copyright © 2010-2013 FPGAnedir. All Rights Reserved.