2011-03-10 2 views
0

$ 표시 문을 사용하여 initial 또는 always를 사용하지 않는 Verilog 모듈을 디버깅하려고합니다. 그러나 이들은 초기 또는 항상 블록 외부에서 불법으로 보입니다. 왜 그런가요? 내 대안은 무엇입니까?

답변

1

왜? 이것이 IEEE 표준에서 어떻게 지정했기 때문입니다.

대안은 테스트 벤치에서 모듈 인스턴스로 범위를 좁히는 것입니다. 테스트 벤치에는 initial 또는 always 블록이 있으며, $display이라고합니다. 또 다른 유용한 시스템 작업 $monitor입니다 :

module tb; 

reg a = 0; 

dut dut (.a(a)); 

initial begin 
    $monitor("time=%0t, a=%b, b=%b", $time, a, dut.b); 
    #5 a = 1; 
    #5 a = 0; 
    #5 $finish; 
end 

endmodule 

module dut (input a); 
    wire b = ~a; 
endmodule 
당신은 시뮬레이션을 실행할 때 출력의이 종류를 얻어야한다

:

time=0, a=0, b=1 
time=5, a=1, b=0 
time=10, a=0, b=1 

업데이트 : dut.b 신호는 아래 범위에 당신을 허용하는 계층 지정자입니다 최상위 모듈 (tb)의 다른 모듈로 복사하십시오. dut은 인스턴스 이름이고 b은 dut 인스턴스 내의 신호 이름입니다. 마침표는 인스턴스 이름과 신호 이름을 구분합니다.

+0

나는 테스트 벤치에서 모듈을 조사하는 방법을 모르겠다. $ display 문을 허용하기 위해 변수의 시작과 끝을 표시하는 모듈을 만들었습니다. 변수를 검사하고자하는 모듈에서 호출됩니다. 이것은 동일한 일을 성취합니까? –

+0

모듈을 조사하는 방법에 대한 정보로 내 답변을 업데이트했습니다. 포트 연결을 사용하여 모듈 신호를'$ display' 모듈로 모듈에 연결한다면 여러분이 설명한 것은 잘될 것입니다. – toolic

관련 문제