quartus osilator

Başlatan teknikelektronikci, 23 Ekim 2010, 18:49:03

teknikelektronikci

merhaba arkadaslar

max2 kullanarak vhdl ile ufak basit uygulamalar yapiyorum ve ayni anda ögrenmeye calisyiorum
o yüzden pek fazla bilgim yok
max2 nin 12. pinine bagli 66 Mhz osilatörüm var fakat ben bunun 66Mhz clock girisi oldugunu ve 66 Mhz quartus veya vhdl de nasil belirtebilirim

yaptiigm port kisminda

clk : in  STD_LOGIC;

proccess lerde ise duyarlilik listesine clk yazip
if (clk'EVENT and clk='1') then  diye devam ediyorum fakat bunun ne kadar dogru oldugunu bilmiyorum sanki ben harici degilde dahiliyi kullaniyormusum gibi geliyor bu gibi osilatör ayarlarini nasil yapabilirim acaba ? simdiden tesekü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!

dincay

http://www.altera.com/literature/an/an496.pdf adresinde Max2'nin icindeki dahili osilatorun nasil kullanilacagi anlatilmis.
Dahili osilatoru kullanmak icin Megafunction Wizard'dan modul olusturman gerekiyor.

muuzoo

#2
VHDL ile kod yazarken bu tarz bir tanımlama yapmanıza gerek yok. Yazdığınız kodu derlerken, pin tanımlamalarının olduğu bir dosya olması lazım. Ben Xilinx kullandığım için emin olmamakla birlikte sizde .qsf uzantılı, pin atamalarının yapıldığı bir dosya olmalı. Orda pin atamalarında clk sinyali için giriş olarak uygun pini tanımladıysanız bir sıkıntı olmaz. Process kısmında kullandığınız
if(clk'EVENT and clk='1')

tanımlaması doğrudur. Ayrıca bunun yerine şu da kullanılabilir :
if(rising_edge(clk))

gunluk.muuzoo.gen.tr - Kişisel karalamalarım...

teknikelektronikci

Alıntı yapılan: muuzoo - 27 Ekim 2010, 16:07:36
VHDL ile kod yazarken bu tarz bir tanımlama yapmanıza gerek yok. Yazdığınız kodu derlerken, pin tanımlamalarının olduğu bir dosya olması lazım. Ben Xilinx kullandığım için emin olmamakla birlikte sizde .qsf uzantılı, pin atamalarının yapıldığı bir dosya olmalı. Orda pin atamalarında clk sinyali için giriş olarak uygun pini tanımladıysanız bir sıkıntı olmaz. Process kısmında kullandığınız
if(clk'EVENT and clk='1')

tanımlaması doğrudur. Ayrıca bunun yerine şu da kullanılabilir :
if(rising_edge(clk))




üstadlar cevaplar icin tesekürler
@muzzoo
hocam bende aynen böyle yapiyorum ama derleme esnasinda internal clock mesajii cikiyor hafta sonu tekrar bakip cevap yazayim ayrica clk kaynagini gösteriyorum ama ben bunun 66 Mhz oldugunu nerede belirtecem ?

@dincay
link icin tesekü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!

muuzoo

Mesajı olduğu gibi buraya kopyalarsanız daha sağlıklı cevap verilebilir. Daha önce de belirttiğim gibi 66 mhz diye bir belirtme yapmıyoruz. Çünkü kaynağın hızını siz zaten biliyor ve tasarımınızı buna göre yapıyorsunuz. Demek istediğim o dışarıdan uygulanan bir saat işareti. Siz oraya 66 değil de 33 verseniz de sistem çalışcak ama zamanlamalarınız değişecektir. Zaman kritik uygulamalar yapıyorsanız (örneğin ddr2 haberleşmesi) sentezleyiciye özel hız bilgilerini o zaman veriyorsunuz. Misal a sinyalindeki zayıflama şu kadar nanosaniyeyi geçmesin gibi. Ama sizin durumunuzda bir belirtme yapmanıza gerek yok. Önemli olan sizin saat işaretinin hızını bilmeniz ve tasarımınızı ona göre yapmanız. Yoksa pic programlada olduğu gibi osilatör frekansı şu kadar diye bir tanımlama yapmıyoruz.
gunluk.muuzoo.gen.tr - Kişisel karalamalarım...

teknikelektronikci

cevabiniz icin tesekür ederim bu aralar ugrasamyiorum ama mesaji koymaya calisacam peki ben for döngüsü ile gecikme yapiyrum ama döngüdeki degeri turkplc üstadin programindan aldim bu gecikme degeri nasil hesaplanir veya ben 1 sn gecikme yapmak istersem frekansin üssünü alip ms cinsinden bulup degeri ona göremi hesaplayacam yani asm de oldugu gibi makinsa saykili bölü bilmem diye bir formül vardi asm deki formülü burda kullanmak mümkünmüdür ?
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!

muuzoo

For ile gecikmeden kastınızı anlayamadım. VHDL'de mantık biraz daha farklıdır. Şöyle düşünebilirsiniz. Process (clk'ya bağlı olduğunu varsayıyorum) içinde yazdığınız her kodun c dilinde sonsuz bir while döngüsüne tekabül ettiğini kabul edebilirsiniz. Eğer gecikme yapmak istiyorsanız çeşitli teknikler mevcut. Bir sayaç saydırıp değerini kontrol etmek en basitlerinden biri. Gecikme hesaplaması ise şöyle yapılır. Kullandığınız osilatör frekansınız 100 MHz olsun. Bu durumda "f=1/t" formülüne göre sizin bir çevrim süreniz 10ns (1/100.000.000 = 10*10^-9) olur. Yani process içinde yazdığınız tüm komutlar 10ns içinde gerçekleştirilecek demektir. 100Mhz hızda bir saniye gecikme demek 100.000.000 döngü kullanmak demektir. Bir sayacı 100.000.000'a kadar saydırarak 1 sn gecikme elde etmiş olursunuz.
gunluk.muuzoo.gen.tr - Kişisel karalamalarım...