2017-11-16 4 views
1

두 개의 반가 사 모듈을 사용하여 기본 전체 덧셈기를 설계하고이를 테스트 벤치로 테스트하려고했습니다. 컴파일 오류는 없지만 출력 (Waveform)에서 Sum 및 Carry에 대해 Z와 X를 얻습니다. 나는이 오류를 바로 잡기 위해 무엇을 볼지 모르겠다.기본 전체 덧셈기의 출력에서 ​​"Z와 X"얻기

이것을 바로 잡기 위해 다음 단계 (또는 몇 가지 포인터)를 점검해야하는 조언이 도움이 될 것입니다. 위의 대한

module half_adder(x,y,S,C); 
 
input x,y; 
 
output S,C; 
 

 
xor G1(S,x,y); 
 
and G2(C,x,y); 
 

 
endmodule 
 

 
module full_adder(x,y,z,S,C); 
 
input x,y,z; 
 
output S,C; 
 
wire S1,C1,C2; 
 

 
half_adder HA1(S1,C1,x,y); 
 
half_adder HA2(S,C2,S1,z); 
 
or G3(C,C1,C2); 
 

 
endmodule

테스트 벤치 : 여기

는 전체 가산기에 대한 Verilog 코드입니다

module tb_fulladder; 
 
wire S,C; 
 
reg x,y,z; 
 

 
full_adder DUT(x,y,z,S,C); 
 

 
initial 
 
begin 
 
x=1'b0;y=1'b0;z=1'b0; 
 
#50 
 
x=1'b0;y=1'b0;z=1'b1; 
 
#50 
 
x=1'b0;y=1'b1;z=1'b0; 
 
#50 
 
x=1'b0;y=1'b1;z=1'b1; 
 
#50 
 
x=1'b1;y=1'b0;z=1'b0; 
 
#50 
 
x=1'b1;y=1'b0;z=1'b1; 
 
#50 
 
x=1'b1;y=1'b1;z=1'b0; 
 
#50 
 
x=1'b1;y=1'b1;z=1'b1; 
 
end 
 

 
initial 
 
#500 
 
$finish; 
 

 
endmodule

그는 파형입니다 재 :

enter image description here

답변

0

당신은 half_adder로 연결에서 실수를했다. 포트 신호의 순서를 변경해야합니다. 변경 :

half_adder HA1(S1,C1,x,y); 
half_adder HA2(S,C2,S1,z); 

로는 :

half_adder HA1 (x,y,S1,C1); 
half_adder HA2 (S1,z,S,C2); 

나는 내부 전체와 반 가산기 신호의 파형을 보면이를 발견했다.

위와 같은 이유로 연결 기준 대신 연결 별 이름을 사용하는 것이 더 좋습니다. 예를 들어, 다음을 사용하십시오.

half_adder HA1 (.x(x), .y(y), .S(S1), .C(C1)); 

이 구문을 사용하면 포트 순서가 중요하지 않습니다. 무료 IEEE Std 1800-2012, 23.3.2 모듈 인스턴스화 구문을 참조하십시오.

+1

대단히 감사합니다 .. – sundar

관련 문제