0
$ 표시 문을 사용하여 initial 또는 always를 사용하지 않는 Verilog 모듈을 디버깅하려고합니다. 그러나 이들은 초기 또는 항상 블록 외부에서 불법으로 보입니다. 왜 그런가요? 내 대안은 무엇입니까?
$ 표시 문을 사용하여 initial 또는 always를 사용하지 않는 Verilog 모듈을 디버깅하려고합니다. 그러나 이들은 초기 또는 항상 블록 외부에서 불법으로 보입니다. 왜 그런가요? 내 대안은 무엇입니까?
왜? 이것이 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 인스턴스 내의 신호 이름입니다. 마침표는 인스턴스 이름과 신호 이름을 구분합니다.
나는 테스트 벤치에서 모듈을 조사하는 방법을 모르겠다. $ display 문을 허용하기 위해 변수의 시작과 끝을 표시하는 모듈을 만들었습니다. 변수를 검사하고자하는 모듈에서 호출됩니다. 이것은 동일한 일을 성취합니까? –
모듈을 조사하는 방법에 대한 정보로 내 답변을 업데이트했습니다. 포트 연결을 사용하여 모듈 신호를'$ display' 모듈로 모듈에 연결한다면 여러분이 설명한 것은 잘될 것입니다. – toolic