Case ifadesi, verilen ifadenin liste ve dallardaki diğer ifadelerden biriyle eşleşip eşleşmediğini kontrol eder. Genellikle bir cihazı uygulamaya alışkındır.
If-else yapısı, kontrol edilmesi gereken birçok ölçüm birimi varsa ve bir cihaz yerine öncelik kodlayıcıda sentezlenecekse uygulanamayabilir.
İçinde Veri günlüğü bir case ifadesi Verilog anahtar sözcükleri, case ('casez', 'casex') ve endcase arasındaki kodun tamamını içerir. Bir vaka ifadesi, kabaca hemşirelik if-else-if ifadesindeki Associate'e benzeyen, pek çok şeyden birini seç yapısı olabilir.
Sözdizimi
Bir Verilog case ifadesi case anahtar sözcüğüyle başlar ve endcase anahtar sözcüğüyle biter.
string.format java
Parantez içindeki ifadenin alan birimi özel olarak bir kez değerlendirilmesi amaçlanır ve alternatiflerin yazılma sırasına göre listesiyle karşılaştırılır.
Ve seçimin verilen ölü ölçü birimiyle eşleştiğine dair ifadeler. Birden fazla ifadeden oluşan bir blok sıralanmalı ve başlangıç ve bitiş dahilinde olmalıdır.
case () case_item1 : case_item2, case_item3 : case_item4 : begin end default: endcase
Durumlardan hiçbiri verilen ifadeyle eşleşmiyorsa, varsayılan öğe ölçü birimi içindeki ifadeler ölü olur. Varsayılan bildirim zorunlu değildir ve bir vaka bildirimi boyunca yalnızca bir varsayılan bildirim bulunur. Vaka ifadeleri iç içe geçmiştir.
Öğelerden hiçbiri ifadeyle eşleşmezse ve varsayılan bir ifade verilmezse, yürütme hiçbir şey yapmadan vaka bloğundan çıkacaktır.
Örnek
boolean java'ya dize
Aşağıdaki moda modülü, üç farklı 3 bitlik giriş arasından birini çıkış olarak belirtilen işarete yönlendirmek için 2 bitlik bir opt for sinyali içerir.
Bir case ifadesi, sel değerini desteklenen çıktıya doğru girişi atamak için kullanılır. sel 2 bitlik bir sinyal olabildiği için, sıfırdan 3'e kadar yirmi 2 komboya sahip olacaktır. Varsayılan ifade, sel 3 ise çıkışın sıfıra ayarlanmasına yardımcı olur.
module my_mux (input [2:0] a, b, c, // three 3-bit inputs [1:0]sel, // 2-bit opt for signal to choose on from a, b, c output reg [2:0] out); // Output 3-bit signal // invariably block is dead whenever a, b, c or sel changes in value invariably @ (a, b, c, sel) begin case(sel) 2'b00 : out = a; // If sel=0, output can be a 2'b01 : out = b; // If sel=1, output is b 2'b10 : out = c; // If sel=2, output is c default : out = 0; // If sel is something, out is commonly zero endcase end endmodule
Vaka Bildirimi Başlığı
Bir vaka bildirimi başlığı, genellikle tek bir kod satırında, case ('casez', 'casex') anahtar sözcüğünü ve ardından case ifadesini içerir.
Bir case ifadesine full_case veya paralel_case yönergeleri eklerken, yönergelerin ölçü birimi, case ifadesi başlığının ucundaki case ifadesini takip ederek ve takip eden kod satırlarındaki case öğelerinden herhangi birinin öncesine gerçek zamanlı olarak bir yorum olarak eklenir.
Vaka öğesi
Vaka öğesi, alışılmış bit, vektör veya Verilog ifadesinin vaka ifadesiyle karşılaştırılmasıdır.
' Gibi farklı üst düzey programlama dillerinden farklı olarak C ', Verilog vaka ifadesi örtülü break ifadeleri içerir.
Bu vaka ifadesiyle eşleşen ilk vaka öğesi, karşılık gelen vaka öğesi ifadesinin ölü olmasına neden olur, dolayısıyla bunun için atlanan ölçü biriminin atlandığı geri kalan tüm vaka öğeleri, vaka ifadesine tabi tutulur.
özel ve genel java
Vaka öğesi bildirimi
Bir vaka öğesi ifadesi, eğer vaka öğesi bu vaka ifadesiyle eşleşiyorsa, bir veya daha fazla Verilog ifadesi ölüdür. VHDL gibi değil, Verilog durumunda şeylerin kendileri de ifadeler olabilir.
Verilog kod belgesinin ayrıştırılmasını değiştirmek için Verilog vaka öğesi ifadelerinin anahtar kelimeler arasına eklenmesi gerekir. 'başlamak' Ve 'son' belirli bir vaka öğesi için birden fazla ifadenin ölmesi gerekiyorsa.
Casez
Verilog'da, casez ifadesinin 'z' ve '?'yi etkinleştiren bir varyasyonu olan bir casez ifadesi vardır. vaka karşılaştırması boyunca 'umursamıyorum' değerleri olarak ele alınacak değerler.
'Z' ve '?' vaka ifadesinin içinde mi yoksa vaka öğesinin içinde mi oldukları umurumda değil olarak kabul edilen ölçüm birimi.
'Umurumda değil' ile gizli bir vaka ifadesi yazarken, bir casez ifadesi kullanın ve '?' kullanın. kasa içindeki 'z' karakterleri yerine karakterler amaçlanan şeyleri 'umursamıyor' bitleri.
Casex
Verilog'da, 'z', '?' ve 'x' değerlerinin karşılaştırma boyunca 'umursamıyorum' değerleri olarak ele alınmasını sağlayan case ifadesinin bir varyasyonu olan bir casex ifadesi vardır.
'x', 'z' ve '?' vaka ifadesinin içinde mi yoksa vaka öğesinin içinde mi oldukları umurumda değil olarak kabul edilen ölçüm birimi.
Tam Vaka Açıklaması
Tam bir vaka ifadesi, tüm elde edilebilir vaka ifadesi ikili kalıplarının bir vaka öğesi veya bir vaka varsayılanıyla eşleştirildiği bir vaka ifadesi olabilir.
bir komut arp
Bir vaka ifadesi bir vaka varsayılanını içermiyorsa ve yazdırılan vaka ifadelerinin hiçbiriyle eşleşmeyen bir ikili vaka ifadesini aramak mümkünse, vaka ifadesi dolu değildir.
Tam bir vaka ifadesi, alınabilen her ikili, ikili olmayan ve ikili ve ikili olmayan modellerin karışımının, vaka ifadesinin içinde bir vaka öğesi olarak kutulandığı bir vaka ifadesi olabilir.
Verilog, vaka ifadelerinin sentez veya yüksek yoğunluklu lipoprotein simülasyonunun tam olmasını istemez, ancak Verilog vaka ifadeleri, bir vaka varsayılanı eklenerek tam hale getirilir. VHDL, vaka bildirimlerinin yüksek yoğunluklu lipoprotein simülasyonu ile dolu olmasını ister, bu da genellikle Hemşirelik 'diğerleri' maddesinde Associate'i arzu eder.
Paralel Durum Açıklaması
Paralel bir vaka ifadesi, bir vaka ifadesini yalnızca bir vaka öğesiyle eşleştirmenin mümkün olduğu bir vaka ifadesi olabilir.
Bir vaka öğesiyle eşleşebilecek bir vaka ifadesine bakmak mümkünse, eşleşen vaka öğeleri ölçü birimi, örtüşen vaka öğeleri olarak belirtilir ve bu nedenle vaka ifadesi paralel değildir.
Donanım Şeması
RTL kodu, 4'e 1 çoklayıcıyı temsil eden bir donanım şeması elde etmek için geliştirildi.
Yukarıdaki tasarım yürütüldükten sonra, sel 3 olduğunda çıkış sıfırdır ve diğer değerler için atanmış girişlere karşılık gelir.
java mvc
ncsim> run [0] a=0x4 b=0x1 c=0x1 sel=0b11 out=0x0 [10] a=0x5 b=0x5 c=0x5 sel=0b10 out=0x5 [20] a=0x1 b=0x5 c=0x6 sel=0b01 out=0x5 [30] a=0x5 b=0x4 c=0x1 sel=0b10 out=0x1 [40] a=0x5 b=0x2 c=0x5 sel=0b11 out=0x0 ncsim: *W,RNQUIE: Simulation is complete.
Bir vaka ifadesinde karşılaştırma yalnızca ifadenin her bir biti 0, 1, x ve z dahil alternatiflerden biriyle eşleştiğinde başarılı olur. Yukarıdaki örnekte sel'deki bitlerden herhangi biri x veya z ise, varsayılan Diğer alternatiflerin hiçbiri eşleşmediğinden deyim yürütülecektir. Böyle bir durumda çıktının tamamı sıfır olacaktır.
ncsim> run [0] a=0x4 b=0x1 c=0x1 sel=0bxx out=0x0 [10] a=0x3 b=0x5 c=0x5 sel=0bzx out=0x0 [20] a=0x5 b=0x2 c=0x1 sel=0bxx out=0x0 [30] a=0x5 b=0x6 c=0x5 sel=0bzx out=0x0 [40] a=0x5 b=0x4 c=0x1 sel=0bxz out=0x0 [50] a=0x6 b=0x5 c=0x2 sel=0bxz out=0x0 [60] a=0x5 b=0x7 c=0x2 sel=0bzx out=0x0 [70] a=0x7 b=0x2 c=0x6 sel=0bzz out=0x0 [80] a=0x0 b=0x5 c=0x4 sel=0bxx out=0x0 [90] a=0x5 b=0x5 c=0x5 sel=0bxz out=0x0 ncsim: *W,RNQUIE: Simulation is complete.
Tasarımdaki vaka ifadesinin vaka öğesi alternatiflerinde x ve z varsa sonuçlar farklı olacaktır.
module mux (input [2:0] a, b, c, output reg [2:0] out); // Case items have x and z, and sel has to match the exact value for // output to be assigned with the corresponding input always @ (a, b, c, sel) begin case(sel) 2'bxz: out = a; 2'bzx: out = b; 2'bxx: out = c; default: out = 0; endcase end endmodule
Case ve if-else arasındaki fark
Case ifadesi if-else-if'ten iki açıdan farklıdır:
- Bir şekilde verilen ifadeler if-else blok daha geneldir, vaka bloğunda ise tek bir ifade birden fazla öğeyle eşleştirilir.