2016-12-04 16 views
0

Verilog에서 가산기 용 게이트 레벨 코드를 작성했습니다. 가산기의 출력은 아래와 같습니다. 볼 수 있듯이 합계와 합계는 항상 z에 있습니다. 나는 이유를 모른다. 내가 뭘 놓쳤는 지 확인할 수 있니? 시간 내 줘서 고마워.Verilog 모듈의 가산기 출력 값이 잘못되었습니다.

OUTPUT :

A = X, B = X, CIN = X, 써머 = Z, COUT = Z시 = 0

A = 0, B = 0, CIN = 0, 써머 = Z, COUT = Z시 = 10

A = 0, B = 1, CIN = 0, 써머 = Z, COUT = Z시 = 20

A = 1, B = 0, CIN = 0, summ = z, 시간 = 30에서 cout = z

a = 1, b = 1, cin = 0, summ = z, cout = z 시 = 40

A = 0, B = 0, CIN = 1, 써머 = Z, COUT = Z시 = 50

A = 0, B = 1, CIN = 1, 써머 = Z , COUT = Z시 = 60

A = 1, B = 0, CIN = 1, 써머 = Z, COUT = Z시 = 70

A = 1, B = 1, CIN = 1 , summ = z, 시간 = 80에서 cout = z

module tb(); 

reg a, b, cin; 
wire cout, summ; 


FA_gatelevel gatelevel(.a(a), .b(b), .cin(cin), .summ(summ), .cout(cout)); 

initial begin 

    #10 a = 0; b = 0; cin = 0; 
    #10 a = 0; b = 1; cin = 0; 
    #10 a = 1; b = 0; cin = 0; 
    #10 a = 1; b = 1; cin = 0; 
    #10 a = 0; b = 0; cin = 1; 
    #10 a = 0; b = 1; cin = 1; 
    #10 a = 1; b = 0; cin = 1; 
    #10 a = 1; b = 1; cin = 1; 

end 


initial begin 


$monitor("a = %0h, b = %0h, cin = %0h, sum = %0h, co = %0h at time = `%0t",a,b,cin,summ,cout,$time); // gate level 

    #200 $finish; 
end 

endmodule 

.

module FA_gatelevel(a, b, cin, summ, cout); 

input a,b,cin; 
output summ,cout; 

FA_co ins_co(.a(a), .b(b), .cin(cin), .cout(cout)); 
FA_sum ins_sum(.a(a), .b(b), .cin(cin), .summ(summ)); 

endmodule 

.

module FA_co (a, b, cin, cout); 

input a, b, cin; 
output cout; 
wire ab, bc, ca; 

and g0 (a,b,ab); 
and g1 (b,c,bc); 
and g2 (c,a,ca); 
or g3 (ab,bc,ca,cout); 

endmodule 

.

module FA_sum(a, b, cin, summ); 

input a, b, cin; 
output summ; 

xor g0 (a,b,cin,summ); 


endmodule 

답변

1

Verilog 게이트 프리미티브에 연결할 때 출력은 항상 첫 번째 연결입니다.