Vhdl'de Birden Fazla Process Kullanımı

Başlatan vitruvius, 03 Mayıs 2012, 10:47:24

speak48

    if(buton_g='1')  dediği için buton 1 olduğu sürece çalışır.
prosese eklemek sadece event olduğunda çalışcak anlamına gelmez
simulasyon yapılmıcaksan prosese koymasanda donanım gerçeklenebiliniyor.

yamak

Benim kafam karıştı şimdi process in içindeki kodların çalışması için duyarlılık listesindeki sinyallerin herhangi birinde bir değişiklik olması gerekmez mi?

vitruvius

Alıntı yapılan: yamak - 04 Mayıs 2012, 23:12:50
Benim kafam karıştı şimdi process in içindeki kodların çalışması için duyarlılık listesindeki sinyallerin herhangi birinde bir değişiklik olması gerekmez mi?

Ben de böyle düşünüp process(buton_g) yapmıştım.

speak48

bu kafa karışıklığın sebebi burada 3 farklı mantık olması
1. yazılım mantığı bunun uzaktan yakından alakası yoktur.
2. donanım simulasyon mantığı kafanızı karıştıran bu olmuş.ben verilogta yazıyorum aynı şekilde always@(buton_g) desekte always@(*) yada always@(armut) desek çıkacak devrede hiçbir değişiklik olmaz. burada clock ve reset gibi özel birşey olmadığı sürece donanıma değil simulasyona faydası vardır.
3. donanım mantığı burada esas olan kod değildir rtl dir. yazdığımız kodun rtlde ne olduğunu bilmezsek ne yapacağını tam olarak bilemeyiz en azından ben bilemiyorum.tavsiyem yapacağınız donanımı önce rtlde şekillendirin taslak yapın sonra koda dökün ikisini karşılaştırın aynımı.ben tasarımlarımı böyle yapıyom.pek fazla çalışma yapmadım ama yaptıklarımın hiç birinde hata çıkmadı yapmak istediğim şeyi birebir yaptı.

yamak

Zaten yazılım mantığına göre yazmıyoruz kodları da.Sonuçta process in çalışma şekli belli.Tamam bu kodda tüm şartlar belirtilmediğinden latch oluşur.Ama sonsuz döngü oluşması aklıma yatmadı.Sonuçta buton_g de bi değişiklik olacak o kodlar bir kere çalışacak ve bitecek.

speak48

#20


bu devre ne yapar?
invert girişi tersler .giriş çıkışa bağlı . çıkış ilk başta  sıfır girişte sıfır ozaman çıkışı bir yapar. aha çıkış değişti 1 oldu bu sefer 1i sıfır yapacak.
bu işlemi nezaman yapar  çıkış 1 olurolmaz yani aralıksız kendisini tersler durur. sonsuz döngüye benzemiyormu?

bunu anladıysak gerisi bu devreyle koddaki devrenin benzerliğini görmeye kalır.



aynı şekilde bu devrede buton 1 olduğu sürece yukardaki devre ile aynı işi yapar

bu devreyi kodlarsak

process(button)
  if(button==1)
      if (çıkış==1)
           çıkış==0;
      else
           çıkış==1;
  else
      çıkış==çıkış;

sizin dediğinize göre sadece buton değiştiğinde çalışcak 
ama burada buton değişince değişen şey devrenin çalışma şekli
devre güçü kesmediğimiz sürece çalışmaya devam edektir.

donanım mantığını şimdi görebiliyor musunuz?


yamak

Tamam hocam anladım şimdi olayı. Teşekkür ederim.

pic365

Alıntı yapılan: yamak - 05 Mayıs 2012, 17:37:41
Ama sonsuz döngü oluşması aklıma yatmadı.Sonuçta buton_g de bi değişiklik olacak o kodlar bir kere çalışacak ve bitecek.
Bu sadece simülatörler için geçerli bir durum. Zaten o process combinatorial olduğu için sayac'ın duyarlılık listesine eklenmemesi de bir hata olarak düşünülebilir. Sentez programı sayac'ı otomatik olarak listeye ekleyecektir. Sayac listedeyken simülasyon mantığıyla düşündüğümüz zaman process yine sonsuz döngüye girer.

@speak48
Belki latch'i herkes bilmiyordur diye sonsuz döngü ifadesini kullanmıştım, normalde sayısal tasarımda kullanılan bir ifade değil tabii.  :)

Latch ile ilgili başka bir başlıkta bir şeyler yazmışız daha önce.
https://www.picproje.org/index.php/topic,35505.msg252175.html#msg252175

yamak

Alıntı YapSayac listedeyken simülasyon mantığıyla düşündüğümüz zaman process yine sonsuz döngüye girer.
Evet haklısınız process kendi kendi tetikleyecek bu durumda.