2016-03-21 18 views
-1

Verilog için ALU yazmayı deniyorum. Ve deneyimlediğim birkaç hata var. Aşağıdaki kullanırALU için Verilog modülü düzgün çalışmıyor.

module yMux(z, a, b, c); 
parameter SIZE = 2; 
output [SIZE-1:0] z; 
input [SIZE-1:0] a, b; 
input c; 
yMux1 mine[SIZE-1:0](z, a, b, c); // 2-­bit 2 -­to-­1 mux and it would be cumbersome to write 32 mux instantiation lines. 
endmodule 

Son olarak yMux yukarıda: Burada

module yMux1(z, a, b, c); 
output z; 
input a, b, c; 
wire notC, upper, lower; 
// Gates and interconnections for MUX 

// if c is 0, z=a. 
// if c is 1, z=b 
not my_not(notC, c); 
and upperAnd(upper, a, notC); 
and lowerAnd(lower, c, b); 
or my_or(z, upper, lower); 
endmodule 

olduğunu

olduğunu

Her

Öncelikle burada benim kodudur:

module yAlu(z, ex, a, b, op); 

input [31:0] a, b; 
input [2:0] op; 
output [31:0] z, ztemp; 
output ex; 
wire[31:0]a0,a1,a2,a3,a4, atemp; 

assign slt = 0; 
assign ex = 0; 

assign a0 = a & b; 
assign a1 = a | b; 
assign a2 = a + b; 
assign a3 = a - b; 
assign a4 = a[31]^b[31]; 

yMux #(32) lo(zLo, a0, a1, op[0]); 
yMux #(32) hi(zHi, a2, a3, op[0]); 
yMux #(32) temp(atemp, zLo, zHi, op[1]); 
assign z = (op[2] == 1) ? a4 : atemp; 
assign slt = z; 

endmodule 

Ve yAlu.v aşağıdaki kullanır Yukarıdaki testler:

aşağıdaki gibi sırayla

Sorularım: sadece yukarıda

Question 1. 

Kod 0 çalışır ve 1. Mesele daha çalışmaz. Örneğin, 2. kaynak kodunda,

a = $ rasgele; b = $ rasgele;

bunun için çalışmıyor. a = 1 veya 0, b = 1 veya 0.

Question 2. 

ben emin "slt" fonksiyonu düzgün çalıştığını olduğumda sadece çalışır. Bunu öğreten hoca, bana derste ne gibi bir şey yaptıklarını söylemedi, ama biz, googling ya da başka bir şeyle, bize slt tasarladı.

Question 3. 

Derlediğim her seferde Hata alıyorum. Bu neden?

yAlu.v:38: warning: Port 1 (z) of yMux expects 32 bits, got 1. 
    yAlu.v:38:  : Padding 31 high bits of the port. 
    yAlu.v:39: warning: Port 1 (z) of yMux expects 32 bits, got 1. 
    yAlu.v:39:  : Padding 31 high bits of the port. 
    yAlu.v:40: warning: Port 2 (a) of yMux expects 32 bits, got 1. 
    yAlu.v:40:  : Padding 31 high bits of the port. 
    yAlu.v:40: warning: Port 3 (b) of yMux expects 32 bits, got 1. 
    yAlu.v:40:  : Padding 31 high bits of the port. 

I can't fix this at all. 

ben bile doğru yapıyorum bilmiyorum. Bana söylediği şeyi yapmamı sağlayan kılavuz, örnek çıktıların yanı sıra yeterince açıklamaya da sahip değil.

Zaten zamanında bitiremedim, bu yüzden önemli değil sanırım sorunum için çözümü bilmem gerektiğini düşünüyorum.

Bana yardım ederseniz çok teşekkür ederim.

+3

Etiket etiketini durdur! Verilog, assembler veya C ile hiçbir şekilde ilgili değildir! Bir programlama dili bile değil. – Olaf

cevap

3

Uyarıların gösterdiği gibi, bağlantı noktası genişliğiniz eşleşmiyor. Tek bir uyarıya bakın ve diğeri de mücadele etmek için aynıdır.

yAlu.v:38: warning: Port 1 (z) of yMux expects 32 bits, got 1. 
    yAlu.v:38:  : Padding 31 high bits of the port. 

modülü bağlantı noktalarını a, b, c ve z, SIZE parametresi tarafından tanımlanan genişliği, her bildirir.

module yMux(z, a, b, c); 
parameter SIZE = 2; 
output [SIZE-1:0] z; 
input [SIZE-1:0] a, b; 

Ayrıca, SIZE başlatmasını ise geçersiz kılınır. Şimdi, SIZE değeri Dolayısıyla a her arasında genişliği 32'dir, b, c ve z32-bit olup.İşte

yMux #(32) lo(zLo, a0, a1, op[0]); 
yMux #(32) hi(zHi, a2, a3, op[0]); 
yMux #(32) temp(atemp, zLo, zHi, op[1]); 

, limanlar zLo, zHi değil ve liman bağlantılı olarak doğrudan kullanılan ilan olduğunu.

IEEE 1800-2012 atfen, bölüm 6.10- Kapalı beyanlar: bir tanımlayıcı bir liman ifade bildiriminde kullanılırsa

, varsayılan ağ tipi bir kapalı ağ vektör genişliği ile, kabul edilecektir port ifade beyanı. Bir bildirilmemiş tanımlayıcı örneğine bir bağlantı olarak kullanıldığında

Bu, daha sonra bir kapalı ağ anlaşılmaktadır. Böylece

, zLo, zHidolaylı tek bir bit ağları olarak ilan ve kalan 32 bit sıfır dolgulu bulunmaktadır.

wire [31:0] zLo,zHi; 

, böyle bir durumda bir hata olsun default_nettype none derleyici yönergesini kullanmak için: izler ve çıkarılacaktırbütün uyarılar olarak sadece bunları yayınlama.

Daha fazla bilgi için, örtülü bildirimler için bkz. Sutherland SV Gotchas kağıdı, bölüm 2.2 ve SystemVerilog IEEE 1800-2012.

+0

Açıkça bildirilmeden 32 bit olarak örtülü olarak ilan edilen kabloları belirlemenin bir yolu var mı? – NoName

+1

Telleri örtülü olarak beyan etmek genellikle istenmeyen bir durumdur. Ancak, buradan [blog bağlantısı] 'na başvurabilirsiniz (http://hereitellyouwhatilearnttoday.blogspot.in/2012/11/disable-implicit-declaration-of-wires.html). Bunu deneyebilirsin. – sharvil111