fpganedir.com'da ara

fpganedir mail

EXIT

Bir döngüden çıkmak için kullanılır. Exit  ifadesi bir koşul içeriyorsa, döngüden çıkış o koşula bağlı demektir.

Exit işlemi yürütüldükten sonra, sıradaki ilk ifade işleme alınır. Döngü ismi kullanma zorunluluğu yoktur. Eğer etiket kullanılmazsa, en içteki döngüden çıkılır. Eğer daha dıştaki bir döngüden çıkılmak istenirse etiket kullanılmalıdır.

exit;
exit döngü_ismi;
exit döngü_ismi when koşul;

NOT: Exit ifadesi genellikle next ifadesi ile karıştırılır. Burada unutulmaması gereken nokta, exit kullanıldığında döngüden çıkıldığı, next kullanıldığında ise döngüden çıkmadan sıradaki tekrarlı işleme geçileceğidir.

ÖRNEK 1

Loop_1: for count_value in 1 to 10 loop
                     exit Loop_1 when reset = '1';
                       A_1: A(count_value) := '0';
                 end loop Loop_1;
A_2: B <= A;;

Örnekte, döngü içindeki her tekrarda reset=’1’ koşulu kontrol ediliyor. Eğer reset 1 olmuşsa döngüden çıkılarak A_2 etiketli satıra geçiliyor. Reset  ‘1’ değilse döngü işletilmeye devam ediliyor.

ÖRNEK 2

Loop_X: loop
           a_v := 0;
           Loop_Y:    loop
                      Exit_1:    exit Loop_X when condition_1;
                                       Output_1(a_v) := Input_1(a_v);
                                        a_v := a_v + 1;
                      Exit_2:     exit when condition_2;
           end loop Loop_Y;
           Assign_Y: B(i) <= Output_1(i) after 10 ns;
           Exit_3:    exit Loop_X when condition_3;
 end loop Loop_X;
 Assign_X: A <=B after 10 ns;

Örnekte, içiçe geçmiş LOOP_X ve LOOP_y döngüleri görülüyor.  Condition_1 TRUE olduğunda Exit_1 ifadesi işleme alınır ve Loop_X döngüsünden çıkılır. Sıradaki işlem olan Assign_X ifadesine geçilir.

Condition_1 değeri False iken, sıradaki satırlar işleme girdikten sonra ve condition_2  koşulu kontrol edilir. Bu koşul değeri TRUE olursa LOOP_Y döngüsünden çıkılır. Exit_2 ifadesinde döndü ismi belirtilmediğinden, içteki ilk döngü olan Loop_Y sonlandırılırarak  Assign_Y satırına geçilir. Condition_3 koşul değeri TRUE ise LOOP_X sonlandırılır. Bu ifade sadece bir döngü içinde olduğundan Exit_3’te LOOP_X etiketini kullanmaya gerek yoktur.

ÖRNEK 3

Bu örnekte, sayi değişkeni olarak verilen bir değere kadar olan  sayıların toplamını bize verecek bir program tasarlıyacağız. Programda bir basla girişi olacak ve basla'nın yükselen ucunda program aktif olacak.

Sayi 5 ise, toplam
1+2+3+4+5=15 olacak

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity sum is
Port ( basla : in  STD_LOGIC;
           sayi : in  STD_LOGIC_VECTOR(5 downto 0);
          toplam : out  STD_LOGIC_VECTOR(15 downto 0) );
end sum;

architecture Behavioral of sum is
begin
    process(basla)
            variable temp:integer:=0;
            variable i:integer:=0;
    begin
         if basla='1' and basla'event then
                 temp:=0;
                 i:=0;
                 SUM_LOOP:loop
                            i:=i+1;
                            temp:=temp+i;
                           exit SUM_LOOP when i= CONV_INTEGER(sayi);
                  end loop;
                   toplam<= CONV_STD_LOGIC_VECTOR(temp,16);            
         end if;
   end process;
end Behavioral;

Programın ModelSim'de simülasyonunu yaptıktan sonra aşağıdaki tabloyu elde ederiz.

 

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.