fpganedir.com'da ara

fpganedir mail

SIRALI TİP

Elemanları sıralı listeleme yöntemi ile tanımlanan kullanıcıya özel veri tipidir. Bir sıralı tip içindeki elemanlar birbirlerinden farklı olmalıdır. Fakat aynı isimli elemanlar farklı sıralı tipler içinde kullanabilirler. Buna overloading denir.

type tip ismi is (eleman_1, eleman_2, ...);

NOT:

 

ÖRNEK 1

type NotGood is (X, '0', '1', X); -- Yanlış (X aynı yerde iki kez kullanılmış)
type MyBit is (L, H);--Doğru
type Test is ('0', '1', L, H); --Doğru (Aynı L ve H elementleri bir önceki enumaration tipinde de kullanılmış.)
type  Door is (Exit, Entrance); --Yanlış (Vhdl özel kod kullanılamaz)
type Business is (12_h, 9_h); --Yanlış (Harf ile başlamak zorunda)
type XYZ is (_tyr, _abc);-- Yanlış (Harf ile başlamak zorunda)
type WTG is (Red, hgt_3, ogrenci_4);--Doğru

ÖRNEK 2

type RENK is (MAVI, KIRMIZI, SARI, YESIL);
type MY_LOGIC is (’0’, ’1’, ’U’, ’Z’);
variable TEMP: RENK;
signal SIG: MY_LOGIC;
. . .
TEMP:= BLUE;
SIG <= ’Z’;

Enumeration Overloading

Vhdl programlarında, bir tip elemanı birden fazla sıralı tipte kullanıldığı zaman aşırı yüklenme meydana gelir. Herhangi bir hataya ya da anlamsızlığa sebep olmamak için kullanacağımız sıralı tipi programda belirtmek zorundayız.

Aşağıdaki örneğe baktığımızda:

type RENK is (MAVI, KIRMIZI, SARI, YESIL, BEYAZ);
type BIRINCIL_RENK is (MAVI, KIRMIZI, SARI);
...
A <= RENK’(KIRMIZI);

A değerine kırmızı değerini ataken hangi data type’ını kullandığımızı  RENK’ifadesi ile belirtmek zorundayız.

Sıralı Tip Kodlaması

Sıralı tip tanımlaması yaptıktan sonra, VHDL derleyicisi otomatik olarak, birinci değer 0, ikinci değer 1 , .. olmak şartıyla tip elemanlarına birer sayı atar ve bunları bit vector formatına çevirir.

Aşağıdaki örneğe baktığımızda:

type RENK is (MAVI, KIRMIZI, SARI, YESIL, BEYAZ);

Tip elemanlarına aşağıdaki değerler atanır.

 MAVI =”000”
KIRMIZI=”001”
SARI=”010”
YESIL=”011”
BEYAZ=”100”

Sonuç olarak
MAVI<KIRMIZI< SARI< YESIL<BEYAZ eşitliği elde edilir.

VHDL derleyicinin atadığı sayı değerlerini istediğimiz gibi de atayabiliriz.

ÖRNEK 3:

type RENK is (MAVI, KIRMIZI, SARI, YESIL, BEYAZ);
attribute ENUM_ENCODING: string;
attributeENUM_ENCODING of RENK: type is ”010 000 011 100 001”;

Tip elemanlarına aşağıdaki değerler atanır:

 MAVI =”010”
KIRMIZI=”000”
SARI=”011”
YESIL=”100”
BEYAZ=”001”

Sonuç olarak
KIRMIZI<BEYAZ<MAVI<SARI<YESIL eşitliği elde edilir.

ÖRNEK 4:

library IEEE;
use
IEEE.STD_LOGIC_1164.ALL;

entity ENUMERATION_TY is
      Port ( CLK   : in  STD_LOGIC;
                OUT1 : out  STD_LOGIC);
end ENUMERATION_TY;

architecture Behavioral of ENUMERATION_TY is
type RENK is (mavi,kirmizi,sari,yesil,beyaz);
signal my_renk:RENK:=sari;
signal temp:RENK;
begin
    process(CLK)
         variable sayac:integer:=0;
         begin
              if CLK='1' and CLK'event then
                   sayac:=sayac+1;
                   if sayac=6 then
                         sayac:=1;
                   end if;
                   case sayac is
                             when 1  => temp<=mavi;
                             when 2 => temp<=kirmizi;
                             when 3 => temp<=sari;
                             when 4 => temp<=yesil;
                             when others => temp<=beyaz;
                  end case;
                  if temp<my_renk then
                      OUT1<='1';
                  else
                      OUT1<='0';
                 end if;
            end if;
    end process;
end Behavioral;

 

 

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.