2016-03-28 9 views
0

Ben yeni başlayan biriyim ve ben üretmek blok kullanarak bir dalga-taşıma-toplayıcı yazmak istedim.Tüm çıkışlı bir dalga-taşıma-toplayıcı üretmek için verilog kullanmak X

module ripple_carry_adder(ia, ib, ci, so, co); 

parameter N = 32; 
input[N-1:0] ia; 
input[N-1:0] ib; 
input ci; 
output[N-1:0] so; 
output co; 

wire [N:0] carry; 
assign carry[0] = ci; 

genvar j; 
generate for(j = 0; j < N; j = j + 1) 
begin:r_loop 
    wire t1, t2, t3; 
    xor g1(t1, ia[i], ib[j]); 
    xor g2(so[j], t1, carry[j]); 
    and g3(t2, ia[i], ib[j]); 
    and g4(t3, t1, carry[j]); 
    or g5(carry[j+1], t2, t3); 
end 
endgenerate 

assign co = carry[N]; 
endmodule 

Ve testbench modülü: Bu yüzden şu modülü yazmak

`include "ripple_carry_adder.v" 
`timescale 1ns/1ps 
module ripple_carry_adder_tb; 

parameter N = 32; 

reg clk; 
reg[N-1:0] a, b; 
wire[N-1:0] sum; 
reg cin; 
wire cout; 

ripple_carry_adder rca(.ia(a), .ib(b), .ci(cin), .so(sum), .co(cout)); 
initial begin 
    #10; 
    a = 0; 
    b = 0; 
    cin = 0; 
    clk = 0; 
    #10; 
end 

always @(posedge clk) 
begin 
    #50; 
    #1 a <= $random() % 1000000; 
    #1 b <= $random() % 1000000; 
end 

always @(a or b) 
    #5 $display("%d + %d = %d", a, b, sum); 

always #5 clk = ~clk; 

endmodule 

Ama bilinmeyen tüm bitler sonuç var: result

denemekten boşuna 1 saat geçirdim hatayı bulmak için. Bana yardımcı olabilir misiniz?

+4

' I' okuyarak default_nettype daha fazla ayrıntı elde edebilirsiniz [i] 'tanımlanmamıştır. Tanımsız değişkenler tek bir bit teli çıkarır. Belki de j demek istedin? – Greg

+0

Aman Tanrım! Çok teşekkürler ! –

+0

Ancak bu derleyicinin bir uyarı bile önermediği çok garip :( –

cevap

1

Benim yorumumda belirtildiği gibi, ia[i] numaralı i tanımsız. j'a değiştirmek istenen işlevi almalıdır.

Verilog, bildirilmemiş herhangi bir değişkeni tek bir bit tel olarak ele alacaktır, normal benavior olarak kabul edilir ve nadiren uyarı alırsınız. Bazı simülatörlerin beyan edilmemiş değişkenleri işaretleme seçenekleri vardır. IEEE Std 1364-2001 (aka Verilog-2001) 'de eklenmiş bir seçenek yoktur. Varsayılan net türünü `define_nettype makrosuyla geçersiz kılabilirsiniz. Makro bildirimi açıkça bildirildikten sonra tüm ağları none olarak ayarlayarak. Sen ia `IEEE Std 1364-2001 § 19.2 ` default_nettype veya IEEE Std 1800-2012 § 22,8 `default_nettype

+0

Çok teşekkür ederim! Detaylı cevabınızdan çok şey öğrendim! –

+0

Kaynak kodunun başında "' default_nettype none "yazıyorum ve işe yarıyor Ne yazık ki, bu durumda, bazı ekstra "tel" ler eklemeliyim. Benim kekimi yiyemiyorum ve onu yiyemem :( –

+0

Geri yüklemek için diğer dosyaların başlığına '' 'default_nettype wire' 'koyabilirsiniz. Sadece çılgınlığı her yere koyarak çıldırmayın, herşeyi ayıklamak için bir kabus yapar. – Greg

İlgili konular