Birisi bana RTL ve davranışsal Verilog kodu arasındaki farkın ne olduğunu söyleyebilir mi? Bu iki seviyedeki tasarımlar arasında açık bir kesinti var mı?
Birisi bana RTL ve davranışsal Verilog kodu arasındaki farkın ne olduğunu söyleyebilir mi? Bu iki seviyedeki tasarımlar arasında açık bir kesinti var mı?
Yanıtlar:
Davranışsal kod daha üst düzeydir ve genellikle sentezlenemez. Döngüler, gecikmeler ve "başlangıç" ifadeleri gibi yapılar davranışsaldır.
RTL kodu daha düşük seviyededir ve sentezlenmesi amaçlanmıştır. Bir devreyi, birbirine bağlı kayıtların ve bu kayıtlar arasındaki sinyaller üzerinde yapılan işlemlerin bir kombinasyonu olarak tanımlar.
Yahoo Yanıtlardan alındı ve Google ile hemen bulundu!
"Kayıt aktarım seviyesi" kodu, aralarında oturan ve bir sentez aracına girdi olarak kullanılması amaçlanan kayıtlar ve kombinatoryal mantık olarak tanımlanan koddur. Kod, dilin sentezlenebilir bir alt kümesine [1] yapışır. Açık bir gecikme yoktur, tüm zamanlama saat kenarları cinsindendir. Seviye tetiklemeli mandalları temsil eden yapılardan genellikle kaçınılır. Kayıtlar tipik olarak ayrıntıları zamanlama analizörüne verilebilecek az sayıda saatten çıkarılır. Kombinatoryal mantığın genellikle karmaşıklığını sınırlayan tek bir saat döngüsüne yerleşmesi beklenir. Bir geçit seviyesi modelinden daha yüksek bir seviyedir, ancak yine de her bir saat döngüsünde her bir kaydın sahip olduğu değeri tanımlar.
"davranışsal" kod genellikle, bir simülasyonda kullanım için daha yüksek bir seviyede behviour'u tanımlayan bir koddur, ancak sentezlenebilir olması amaçlanmamıştır. Tasarımınızı çevreleyen ortamı bir simülasyonda tanımlamak için kullanılabilir. Bireysel modüllerin ayrıntılı RTL tasarımının üstlenilmesinden önce genel tasarımın hayata geçirilmesi için bir tasarımda erken bir adım olarak kullanılabilir.
[1] İzin verilen tam alt küme, sentez araçları arasında değişiklik gösterir.
[2] Simülasyon ve sentezden ziyade tek bir döngü içine yerleşmezse, farklı sonuçlar verebilir ve zamanlama analizörü açıkça belirtilmediği sürece bir ihlal gösterecektir.
Daha genel bir tanım.
Davranışsal Kod: Tanımı gereği dijital bir bileşenin davranışını tanımlar. Gerçek HW (sentez) içine nasıl uygulanacağı hakkında bilgi vermez. Gerekli işlemi gerçekleştirmek için kayıtların ve kapıların nasıl uygulanacağı hakkında bilgi vermeyecektir. Daha çok C'de bir algoritma veya FSM yazmak gibidir.
RTL: Dijital bir bileşenin daha kesin bir biçimidir. Kodun, gerçek HW olarak nasıl uygulanacağı hakkında bilgi verir (sentezden sonra). Ayrıca verilerin kayıtlar ve kapılar arasında nasıl aktarılacağı hakkında bilgi verir.
Aynı dildir, ancak farklı stiller kullanılır. Deneyim ile bunları hızlı bir şekilde ayırabilirsiniz, işte her birinin birkaç özelliği:
Davranışsal verilog kodu genellikle bir initial begin
blok içinde yukarıdan aşağıya doğru sıralı bir bilgisayar programı gibi görünür . Çıktı konsolu gibi, simülatör tesislerine olabileceğinden Sen, üst düzey davranışsal modüllerde tanımlanmış bir giriş / çıkış portları vardır bulabilir $display()
veya dosya sistemi $open
veya dalga damper ile $dumpfile
ve $dumpvars
. Uzun simülasyon süresi bekleme süreleri #4000
ve görevleri başlatma gibi ifadeler arasındaki gecikmeleri izleyin wishbone_master.checked_read(addr, value)
. Bu üst düzey yapılar için, sentezlenen teknoloji eşdeğerinin ne olacağı / ne olabileceği açık değildir.
Sentez için verilog her zaman giriş / çıkış portlarına sahiptir, çünkü bağlı portlar olmadan modülün yan etkisi yoktur ve ortadan kaldırılabilir [1]. Gecikmeler muhtemelen belirli bir saatin döngülerini sayarak uygulanır. Bazı Verilog sistem işlevlerinin $clog2(PARAMETER)
sentez kodunda izin verilebileceğine dikkat edin, bu nedenle $function
her ikisinin de varlığı bir garanti değildir. Sentez kodu, her biri bir duyarlılık listesine sahip birçok bağımsız 'süreç' içerir. Bazı teknolojiler initial begin
bellek başlatma için bloklara izin verir, bu yüzden bu bir garanti değildir.
Sonuçta tasarımcı yazdıkları kodun amacını bilir ve sentez araç setiyle ya da bir simülatörde uygun şekilde çağırır.
[1] dahili yonga tesislerine arka kapı bağlantıları yapabilen bazı IP blokları hariç, örneğin JTAG