Vhdl de process kullanmı hakkında

Başlatan yamak, 18 Mart 2012, 22:58:48

yamak

Mesela
process(a)
 begin
       if a="00" then
          code<="000";
       elsif a="01" then
          code<="001";
       elsif a="10" then
          code<="010";
       elsif a="11" then
          code<=011";
      end if;
  end process;

Şeklinde oluşturulmuş bir process mi performans açısından daha iyi dir. yoksa bunu hiç process kullanmadan doğruluk tablosu oluşturup karnaugh gibi indirgeme yöntemleri kullanıp sadece kapılar kullanarak tasarlasak mı daha iyi olur?

Bir de yine böyle bir şeyi with kullanarak mı yapsak performans açısından daha iyi olur. Yoksa yine kapılar kullanarak tasarlasak mı daha iyi olur?

Örneğin
with  D_in select 
              D_out <= "00" when "0001",
                                "01" when "0010",
                                "10" when "0100",
                                "11" when "1000",
                                "ZZ" when others;

böyle mi daha iyidir. Atıyorum:
D_out(0)<=D_in(1) and D_in(2) and (not D_in(0));
D_out(0)<=D_in(3) and (not D_in(2)) and (not D_in(1));

Böyle mi?

teknikelektronikci

selam
vhdl fpga konusunda iyi degilimdir ama temel bi bilgim ile fikrimi söyleyecek olursam bence process kullanmadan yapmak daha iyi cünkü sonucta process(ler) disaridan gelen clock palsleri ile calisir yani olurda clock gelmezse bir islem yapmazlar ama bildigim kadariyla and or lar ile yapilmis islemler yani processsiz islemlerde clock gerekmiyor eger yazdiklarim dogru ise olurda clock kaynagi gelmezde quarz bozulursa islem yapilamaz i$ yarida kalir =) yanlisim varsa düzeltiniz
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

yamak

Hocam clk sız process de oluşturulabiliyo. Yani devrende kristal bağlantısı olmasa da process kullanılabiliyo.Örneğin;
entity deneme is
	port(
			i0,i1:in std_logic;
			o1:out std_logic
			);
end deneme;

architecture Behavioral of deneme is

begin
process(i0,i1)
begin
o1<='0';
if (i0='1' and i1='0') then
	o1<='0';
elsif(i0='1' and i1='1' ) then
	o1<='1';
end if;
end process;

teknikelektronikci

hmm evet ama duyarlilik listesinde clock yok :) ama haklisiniz ben duyarlilik listesinde clock gerektirenleri demek istemisdim =) bilgi icin tesekkürler
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

speak48

ister prosesli yap ister prosessiz   eğer aynı işi tanımlıyorsan çıkacak devre aynı olacağı için performansları aynıdır.
hdl programlama dilir değil donanım tanımlama dilidir.

yamak

#5
Alıntı Yaphdl programlama dilir değil donanım tanımlama dilidir.
Bunun farkındayım. Bununla ne alakası var tüm tasarımlar aynı performansta mı çalışır?Mesela hiç indigme yapdan oluşturduğun tasarımla indirgeme yaparak oluşturduğun tasarım aynı performansta mı çalışır? Ya da fpga nın kaynaklarını aynı derecede mi kullanır?

z

VHDL bilmiyorum. Alt seviyeli bir dil olan ABEL'de sadeleştirme iki şekilde yapılabiliyor.

Bunlar hız optimizasyonu yada kaynakların optimizasyonu. VHDL'de de benzer durum olması lazım.

Hız önemli ise kapı sayısı önemsenmeyebiliyor, kullanılan kapı vs sayısı azaltılabiliyor yada tam tersi artırılabiliyor. 

Kaynak optiimizasyonu seçildiğinde ise amaç sadece kapı vs sayısını azaltmak hedefleniyor.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

elektroacemi

ISE de VHDL kodunu derlerken şematiğe çevirme var diye hatırlıyorum. Yukardaki kısmı farklı yöntemlerde yazıp şematiğe bakarak yorum yapılabilir diğe düşünüyorum. Ama bence en garanti yöntem bir girişi farklı yöntemlerle bir çıkışa yönlendirmek, her yöntemi harici osiloskopla veya ISE deki dahili osilatörle ölçerek girişe en hızlı cevap veren yöntemi bulmak...

speak48

indirgemeler kapı seviyesinde değilde mos seviyesinde asicde yapılırsa performans değişebilir.
ama fpga da yapı sabit ve sentezleyici hdl'i o yapıya uydururken gerekli indirgemeleri yapıyor.
senin yapmaya çalıştığın donanım bir  encoderdir 4x2 bunuda 2 çıkış 4 giriş olduğu için fpga da 2 tane 4 girişli lut elemanıyla gerçekleyecektir.
ister and orla yaz ister prosesle.

berat23

kapı seviyesinde sadeleştirme fpga için bir anlam ifade etmez,fpga kapı değil lut tabanlı bir sequential yapılardan oluşur.if ile veya when ile process yapmanız bu durumda birşey ifade etmez,sentezleyici bu sadeleştirmeleri donanıma en uygun biçimde yapacaktır.

yamak

Cevaplar için teşekkürler arkdaşlar anladım

pic365

Programlar böyle optimizasyonları yapmaya çalışıyor ama hiçbiri kusursuz değil. Xilinx ISE'den bahsedecek olursam sentez aşamasında (map ve p&r öncesi) devreniz zaten kapı seviyesine indirgeniyor. Devre FPGA'in LUTlarına map edilecek olsa da kapı seviyesinde tasarım yapmanız performansı etkiler. Hatta aynı devreyi iki farklı kodla yazsanız bile ISE birinde timing'i çok rahat tutturup, diğerinde çok büyük negatif slack verebilir. Bir de sentez ve implemantasyonda random yapılan işlemler var. MAP ayarlarında "cost table" diye bir şey var. Varsayılan değeri sıfır. Devrenin performansından memnun değilseniz o değeri değiştirip tekrar sentez yapın. RTL'de hiçbir değişiklik yapmadığınız halde devrenizin performansı değişecek. Çünkü random işlemler nedeniyle işiniz şansa da bağlı.

İlk mesajdaki üç kodu değerlendirecek olursam ben 3. kodu kullanırım. Belki ISE zaten devreyi o halde optimize edecek ama sentez süresinin kısalması bile bir kazançtır, kaldı ki devrenin optimize edileceği de kesin değil. Elinizde 1. ve 2. sıradaki kod varsa 2. kodu kullanmanızı tavsiye ederim. Belki bu forumda daha önce yazmıştım ama ISE clock'suz process'lerin sentezinde bazen saçmalıyor. Verdikleri kod örneklerine bakılırsa zaten when-else yapısını daha çok kullanıyorlar ya da kullanmamızı istiyorlar.