Verilog While döngüsü, döngü synthesisable nedir???

Döngü aracı bağlıdır ve bunun FPGA için iyi olmaz ise Döngü Memnuniyet ama için
 
Ben yapısal ve davranışsal ifadeler birleştiren bir verilog kodu yazmak zorunda. Ama ben her saat döngüsünde bu yapısal kod yürütmek gerekiyor. I her zaman blok içinde bu Strustural statemnets yazabilir miyim?? aksi hw bunu yapıyorsun? hızlı cevap çok yardım olacak ...
 
Ben easely unrolled üzerinden yazılabilen tüm döngüler synthesisable olduğunu düşünüyorum. Bu iş için, döngü değişkeninin yerine, döngü önüne sermek olacak bir Önişlemci gibi düşünüyorum, ve orada sen gitmek ...
 
[Quote = ankit12345] için (i = 0, i <10, i + +) umarım bu işe düşünüyorum ..... nerede bu kadar ...... (I = 0, ı
 
iki şey halledilir eğer herhangi bir döngü sentezlenebilir olduğunu .. 1. sonlu döngü 2 olmalıdır. döngü içinde hiçbir gecikme tablolar
 
Nedense takip Verilog kodu Quartus II 10,0 düzgün çalışmıyor. Ben en önemli grubu biraz sağında tüm bitler ayarlanmış bir fonksiyon yazmak çalışıyorum: [KOD] fonksiyonunu [31:0] maskesi (giriş [31:0] kademe); integer indeksi; mask = dokunun; için ( index = 1; indeksi <32; index = index * 2) başlamak mask = maskesi | (maske >> indeks); sonunda endfunction [/CODE] kodu for döngüsü farklı tekrarlamalar eşzamanlı vardır sanki sentezler. Herhangi bir açıklama takdir. TM
 
Yazdığınız kodu eşzamanlı o zaman sentez anlayışı gibi görünüyor ama ne yapmak istediğinizi anlamıyorum
 
Ne yapmak istiyorum basittir. Şu soldaki 1 Her pozisyonda 1 adlı bir kelime dönmek için istediğiniz herhangi bir giriş kelimesi önüne alındığında. Örneğin, ben 32b'00000001111111111111111111111111 istiyorum 32b'00000001000000000000000000000000 verilen Yoksa bunu engelleyici bir atama kullanır beri döngü, bunu yapmalıyız 32b'00011111111111111111111111111111 istiyorum 32b'00010100101001010101001010010011 verilmiştir. Her yineleme sonra 32b'00000001000000000000000000000000 ile başlayan I 32b'00000000110000000000000000000000 / / index == 1 32b'00000000111100000000000000000000 / / index == 2 32b'00000000111111110000000000000000 / / index == 4 32b'00000000111111111111111100000000 / / index == 8 32b'00000000111111111111111111111111 almalısınız / / index == 16 Ancak, sonunda kodu aslında tüm yineleme concurrantly ortaya sanki 32b'00000000110100010000000100000000 üretir.
 
neden bir fonksiyonu değil, bir modül kullanabilirim? Bir modülde bir başlangıç ​​deyimi kullanabilirsiniz ve o amele olurdu.
 
cevap jducluzeau için teşekkürler, ancak bir işlev çalışmaz ise, neden bir modül çalışmak istiyorsunuz? Bir modül kullanırken yanında diğer arabağlantı sorunları vardır. Bir fonksiyonu ile, kullandığı her modül kendi kopyası olabilir.
 
Yerine modül fonksiyonu kullanılır neden hiç kullanmadım. Başka bir modül modülünü kullanabilirsiniz. Bu kod çalışması gerekir. modülü maskeleyici (maske, musluk); çıkış [31:0] mask; girişi [31:0] tuşuna dokunun; genvar i; atamasını maskesi [31] = [31] vurun; (i = 1 için üretmek; i
 
Oluşturmak kullanarak örnek için teşekkürler. Daha önce inşa olduğunu asla kullanmadım. Ben bunun yanlış olduğunu eğer başka alanlarda proje ile ilgili bir sorun olabilir, çünkü bu, özgün kod ile yanlış anlamaya gerek yok.
 
maske deneyin = maskesi | (musluk >> indeksi), ben sorunun bu hattan geliyor düşünüyorum. Şematik görüntüleyici açın Sorunu göreceksiniz.
 
Aslında tam tersi önerecektim - orijinal kod maskesi kullandıklarını = maskesi | (musluk >> indeks); yerine mask = maske | (maske >> indeksi), hatta o, seni nerede göremiyorum olsun çıkış olsun. örneğin, bir 1, kaydırılan, 0, 1, 2, 4, 8 kez bir sonucu olarak 11101000100000001 bir model beklenebilir. Daha sonra ya-ing sonuç 1,2,4,8 kat musluk kayması gibi görünüyor. Bu yardımcı olmadığını görmek için bir ara değişken hale getirebilir.
 
Şahsen ben döngü ile bunu yapmazdı. Bazen döngü okunabilirlik için yardımcı olur, ama senin ki ilk bakışta çok açık değildir. 100 'lines gerektiriyorsa sürece ben oldukça iyi okunabilirlik için durum açıklamaları ile gitmek istiyorum.
 
Bir sabit bir süre için çalışır eğer döngü .. synthesisable is kodunuzu bir kez yürütür ne olur hangi bir donanım düşünebilirsiniz, ve sonra onun kopyaları döngü için kullandıktan sonra sentez olacaktır .... Unutmayın, hiçbir dinamik sentez değil .. şey thats senaryoyu görselleştirebilirsiniz olduğunu ..
 
Gönderdi herkese teşekkürler. Ben dev gemide LED ve dizin * 2 ve index +1 aslında şimdi aynı doğru sonuçlar üreten doğrulanmadı 7 segment için bu işlevi sonucu dışarı dökülüyor; (maske >> endeksi) | Doğru deyimi maskesi = maske . Ben orijinal hata ne emin değilim. Ben jducluzeau adlı bir döngü için bir oluşturmak döngü ile değil gibi yazılmış bir işlevi kullanmaya karar verdi. Bu eser ve anlaşılabilir bir durumdur.
Code:
 fonksiyonunu [31:0] maskesi (giriş [31:0] kademe); integer indeksi; maske [31] = [31] vurun; (; indeksi> = 0; index = index - 1 index = 30) Başlamadan maske [index] = musluk [index] | maskesi [index + 1]; sonunda endfunction
 

Welcome to EDABoard.com

Sponsor

Back
Top