23 Temmuz 2013 Salı

VHDL PROGRAMLAMA

FOR DÖNGÜSÜ

Bu makalede size VHDL Programlamada for döngüsünden bahsedeceğiz...




For Döngüsü 
Sıralı Bildirimi---- ---- Kullanılan>Süreç
Fonksiyon
Prosedür

Sözdizimi
  optional_label: for döngüsü aralık parametreler
  sıralı ifadeler
 end döngü etiket;



Kurallar ve Örnekler

For Döngüsü belirtilen aralık türüne alır bir döngü parametresi tanımlar. Örneğin, aralık 0 ila 3 bir tamsayı anlamına gelir:
  
process (A)
begin
 Z <= "0000";
 for I in o to 3 döngü
  if (A = I) then
   Z(I) <= '1';
  end if;
 end loop;
end process;

Bu 'yüksek,' düşük ve 'aralığı olarak özellikler de for döngüsünde bir bir yineleme tanımlamak için kullanılabilir:
process (A)#
 variable TMP : std_ulogic;
begin
 TMP := '0';
 for I in A'low to A'high döngü
  TMP := TMP xor A(I);
 end loop;
 ODD <= TMP;
end process;


Aralığı bir sayısı sabit tür örneğin, herhangi bir ayrık aralığı olabilir:
  tipi İLKÖĞRETİM (KIRMIZI, YEŞİL, MAVİ) 'dir;
 tipi RENK tamsayı aralığı 0 ile 255 DİZİ (İLKÖĞRETİM) 'dir;
 - Diğer ifadeleri
 MUX: süreci
 begin
 for SEL in PRIMARY loop
  V_BUS <= VIDEO(SEL);
  wait for 10 ns;
 end loop;
end process MUX;;

Döngü parametresi ilan edilmesi gerekmez: dolaylı olarak döngü içinde ilan edilir. Bu döngü içinde değiştirilemez:
 
for I in 1 to 10 loop
 if (REPEAT = '1') then
  I := I-1; -- Illegal
 end if;
end loop;


Sentez Sorunlar
For döngüsü sağlayan sentezi için desteklenir:
  1. Döngü aralığı (yani yineleme belirli sayıda ima) statik ve
  2. Döngü hayır bekle ifadeleri içerir.

18 Temmuz 2013 Perşembe

VHDL İF-ELSE KOMUTU

VHDL İF-ELSE KOMUTU



Bu makalede sizlere Vhdl programlama dilinde İf-Else kontrol yapılarından bahsedeceğim


İF-ELSE


Tanım:


Açıklamada, bir veya daha fazla ilgili koşulların değerine bağlı olarak yürütme bir veya durdurur.

Tanımlama

VHDL İF-ELSE KOMUTU
If diğer sıralı tabloların koşullu yürütme kontrol eder. En az bir Boole durumda (eğer anahtar sözcüğünden sonra belirtilen) içerir. Kalan koşulları else-if maddesi ile belirlenir. Başka madde daha sonra else-if doğru olarak kabul edilir. Bunlardan herhangi bir gerçek olarak döner veya kontrol edilmesi için daha fazla koşullar vardır.
Koşulları kadar  tek tek değerlendirilir. Bir durumdur sonra doğru olduğunda o fıkra sonra belirtilen tabloların dizisi yürütülür. Hiçbir koşul o zaman kontrol if sonra bir sonraki açıklamaya geçirilir.
Açıklamada sık sık else-if ne de başka bir madde de (örneğin 1) destekliyorsa,-daha sonra açıklamada, adlı bir basitleştirilmiş şeklinde kullanılabilir eğer.
Bir durum toplantı, bazı ifadeler yürütülecek neden gerektiğini, ancak yerine başka eylemler yapılmalıdır bu durumda, başka bir madde (örneğin 2) kullanılır.
Farklı iç içe koşullar (örneğin 3) kontrol edilmesi olduğunda else-if madde kullanılır. Bu öncelik koşulları ve sinyaller için de kullanılabilir.
If ifadeleri (örneğin 4) iç içe olabilir.



Örnekler

Örnek 1
I1: if Status_Signal = hold
      then A1: Outputs <= 'X';
    end if I1;


Atama durumu Status_Signal = beklemeye doğrudur sadece gerçekleştirilecektir. Aksi takdirde, son izleyen deyim I1 idam edilecektir.
Örnek 2

function
 AND_FUNC (x, y: in Bit) return Bit is
begin
  I2: if x = '1' and y = '1'
        then return '1';
      else return '0';
      end if I2;
end 
AND_FUNC;

Değişkenler x ve y hem '1 eşit olduğunda ', işlev değeri '1 döner'. Aksi takdirde, '0 'döndürülür.
Örnek 3

Signal Code_of_Operation : Bit_Vector(1 downto 0);I3: if Code_of_Operation(1) = '1'
      then F := Operand_1 + Operand_2;
    elsif Code_of_Operation(0) = '1'
      then F := Operand_1 - Operand_2;
      else F := "00000000";
    end if I3;

Bu örnekte, Code_of_Operation en bit sayısı 1 bit sayısı 0 daha yüksek bir önceliğe sahiptir. Bit sayısı 1 '1 'bir değere sahip olduğunda, o zaman iki işlenen eklenir. Eğer değilse (yani '0 '), sonra bit sayısı 0 kontrol edilir. Bu '1 'ise, o zaman iki işlenen çıkarılır. Aksi takdirde, Code_of_Operation iki bit '0 'olduğu zaman, F sinyali tamamen sıfırlı atanır.
Örnek 4
if Status = RUN
  then
    if Code_of_Operation = CONC
      then
        F := Operand_1 & Operand_2 ;
      else
        F := "00000000";
    end if;
  Output_1 <= F;  
end if
;

Ifadeler eğer Yerleştirme yasal, ancak deyimi seviyeleri karıştırmamak için dikkatli olmalıdır.

Önemli Notlar

  • If ifadeleri ile en tipik hatalardan biri deyimi sonunda, end if ve if boşluk atlamak ve endif olarak yazmaktadır.
  • if bir mimari eş zamanlı ifadeler bölümünde kullanılamaz sıralı bir ifadedir. Bir sinyal için yeni bir değer atama belirli bir durumu etkilenir gerekiyorsa, o zaman bir koşullu sinyal ataması (sırayla süreç veprosedürler içinde kullanılamaz olan) kullanılmalıdır.





2 Temmuz 2013 Salı

VHDL ÖRNEKLERİ

VHDL ÖRNEKLERİ


Bu makalemde size Vhdl programlama dilinde If, Case, When With ile hazırladığımız örnke kod bloklarını paylaşacağız.Kolay gele..



VHDL ÖRNEKLERİ


 - ================================================ =============================
 - Dosya adı: mux4_1.vhd (mux = çoklayıcı)
 - Yazar: Hedef Ozel Ders
 - Oluşturulma: 00.04.10 son değişiklik: 00.04.13
 - ================================================ =============================
 - Bu gibi fonksiyonu ile 4 giriş çoklayıcı olduğunu:
 - Sel Giriş => çıkış yorumlar
 - MSB LSB
 - 0 0 In0 => çıkış
 - 0 1 1 arada => çıkış
 - 1 0 in2 => çıkış
 - 1 1 in3 => çıkış
 -
 --------
 - IF ve CASE sadece bir süreç içinde kullanılabilir.
 - ZAMAN ve İLE sadece bir süreç dışında kullanılabilir.
 -
 - ZAMAN karşılık IF
 - İLE için OLGU correpsonds
 - ================================================ =============================

 KÜTÜPHANE IEEE;
 Ieee.std_logic_1164 KULLANIM TÜM; -. Kullanılan araç bağımlı farklı olabilir.
 Ieee.std_logic_unsigned KULLANIM TÜM; -. Kullanılan araç bağımlı farklı olabilir.

 ENTITY mux4_1 IS
    PORT (s0: STD_LOGIC IN;
          s1: STD_LOGIC IN;
          In0: STD_LOGIC IN;
          in1: STD_LOGIC IN;
          in2: STD_LOGIC IN;
          in3: STD_LOGIC IN;
          çıkışı: OUT STD_LOGIC
         );
 END mux4_1;
 - ================================================ =============================
 - ================================================ =============================
 Mux4_1 MİMARLIK if_example IS

 - ================================================ =============================
 BEGIN 

 mux: SÜRECİ (s0, s1, In0, in1, in2, in3)
 BEGIN

   (S0 = '0 'VE s1 = '0') THEN
     çıkışı <= In0;
   ELSIF (s0 = '1 'AND s1 = '0') SONRA
     çıkışı <= 1 arada;
   ELSIF (s0 = '0 'VE s1 = '1') SONRA
     çıkışı <= in2;
   ELSIF (s0 = '1 'AND s1 = '1') SONRA
     çıkışı <= in3;
   BAŞKA - (s0 veya s1 0 veya 1 değil)
     çıkışı <= 'X';
   IF END;

 SÜREÇ mux END;

 END if_example;

 - ================================================ =============================
 - ================================================ =============================
 Mux4_1 MİMARLIK case_example IS

 - ================================================ =============================
 BEGIN 

 mux: SÜRECİ (s0, s1, In0, in1, in2, in3)
   DEĞİŞKEN sel: STD_LOGIC_VECTOR (1 0 DOWNTO);
 BEGIN
   sel: = s1 ve s0; - birleştirmek s1 ve s0

   OLGU sel IS
     ZAMAN "00" => çıkışı <= In0;
     ZAMAN "01" => çıkışı <= 1 arada;
     ZAMAN "10" => çıkışı <= in2;
     ZAMAN "11" => çıkışı <= in3;
     NE ZAMAN DİĞER => çıkışı <= 'X';
   END OLGU;

 SÜREÇ mux END;
  
 END case_example;

 - ================================================ ============================= 
  - ================================================ ============================= 
  Mux4_1 MİMARLIK with_example IS

 SİNYAL sel: STD_LOGIC_VECTOR (1 0 DOWNTO);
 - ================================================ =============================
 BEGIN 
   sel <= s1 ve s0; - birleştirmek s1 ve s0
   Sel SEÇİMİ İLE
     çıkışı <= In0 ZAMAN "00",
               in1 ZAMAN "01",
               in2 ZAMAN "10",
               in3 "11",
               'X' ZAMAN DİĞER;
     
 END with_example;

 - ================================================ ============================= 
  - ================================================ ============================= 
  Mux4_1 MİMARLIK when_example IS

 - ================================================ =============================
 BEGIN 

     <= In0 (s1 ve s0) = "00" ELSE çıktı
               (s1 ve s0) = "01" ELSE in1
               in2 ZAMAN BAŞKA (s1 ve s0) = "10"
               (s1 ve s0) = "11" ELSE in3
               'X';
     
 END when_example;