verilog
디스플레이 시스템 작업은 주로 로그 파일에서 시뮬레이션 흐름을 추적하기 위해 정보 및 디버그 메시지를 표시하는 데 사용되며 더 빠른 디버그에도 도움이 됩니다. 값을 인쇄할 수 있는 다양한 표시 작업 및 형식 그룹이 있습니다.
$display
둘 다 및 $write
인수 목록에 나타나는 순서대로 인수를 표시합니다.
$display(<list_of_arguments>);
$write(<list_of_arguments>);
$write
줄 바꿈 문자
를 추가하지 않습니다. $display
동안 문자열의 끝까지 아래의 예에서 확인할 수 있습니다.
module tb;
initial begin
$display ("This ends with a new line ");
$write ("This does not,");
$write ("like this. To start new line, use newline char
");
$display ("This always start on a new line !");
end
endmodule
시뮬레이션 로그 ncsim> run This ends with a new line This does not,like this. To start new line, use newline char Hi there ! ncsim: *W,RNQUIE: Simulation is complete.
$strobe
현재 델타 시간 단계의 끝에 변수의 최종 값을 인쇄하고 $display
와 같은 유사한 형식을 갖습니다. .
module tb;
initial begin
reg [7:0] a;
reg [7:0] b;
a = 8'h2D;
b = 8'h2D;
#10; // Wait till simulation reaches 10ns
b <= a + 1; // Assign a+1 value to b
$display ("[$display] time=%0t a=0x%0h b=0x%0h", $time, a, b);
$strobe ("[$strobe] time=%0t a=0x%0h b=0x%0h", $time, a, b);
#1;
$display ("[$display] time=%0t a=0x%0h b=0x%0h", $time, a, b);
$strobe ("[$strobe] time=%0t a=0x%0h b=0x%0h", $time, a, b);
end
endmodule
$strobe
변수 b의 최종 업데이트 값을 보여줍니다. 0x2E인 시간 10ns에서 , 및 $display
11ns의 다음 시뮬레이션 델타에서만 이를 선택합니다.
ncsim> run [$display] time=10 a=0x2d b=0x2d [$strobe] time=10 a=0x2d b=0x2e [$display] time=11 a=0x2d b=0x2e [$strobe] time=11 a=0x2d b=0x2e ncsim: *W,RNQUIE: Simulation is complete. ncsim> exit
$monitor
인수 목록의 변수 또는 표현식이 변경될 때마다 변수 또는 표현식 값을 자동으로 인쇄하는 데 도움이 됩니다. $display
을 호출하는 것과 유사한 효과를 얻습니다. 인수가 업데이트될 때마다.
module tb;
initial begin
reg [7:0] a;
reg [7:0] b;
a = 8'h2D;
b = 8'h2D;
#10; // Wait till simulation reaches 10ns
b <= a + 1; // Assign a+1 value to b
$monitor ("[$monitor] time=%0t a=0x%0h b=0x%0h", $time, a, b);
#1 b <= 8'hA4;
#5 b <= a - 8'h33;
#10 b <= 8'h1;
end
endmodule
$monitor
인수 변수의 값 변경을 모니터링하고 표시하는 메인 스레드의 백그라운드에서 실행되도록 생성되는 작업과 같습니다. 새로운 $monitor
작업은 시뮬레이션 중에 여러 번 실행할 수 있습니다.
ncsim> run [$monitor] time=10 a=0x2d b=0x2e [$monitor] time=11 a=0x2d b=0xa4 [$monitor] time=16 a=0x2d b=0xfa [$monitor] time=26 a=0x2d b=0x1 ncsim: *W,RNQUIE: Simulation is complete.
디스플레이 함수 내에서 변수를 인쇄하려면 적절한 형식 지정자 각 변수에 대해 지정해야 합니다.
인수 | 설명 |
---|---|
%h, %H | 16진수 형식으로 표시 |
%d, %D | 10진수 형식으로 표시 |
%b, %B | 바이너리 형식으로 표시 |
%m, %M | 계층 이름 표시 |
%s, %S | 문자열로 표시 |
%t, %T | 시간 형식으로 표시 |
%f, %F | '실수'를 10진수 형식으로 표시 |
%e, %E | '실수'를 지수 형식으로 표시 |
module tb;
initial begin
reg [7:0] a;
reg [39:0] str = "Hello";
time cur_time;
real float_pt;
a = 8'h0E;
float_pt = 3.142;
$display ("a = %h", a);
$display ("a = %d", a);
$display ("a = %b", a);
$display ("str = %s", str);
#200 cur_time = $time;
$display ("time = %t", cur_time);
$display ("float_pt = %f", float_pt);
$display ("float_pt = %e", float_pt);
end
endmodule
시뮬레이션 로그 ncsim> run a = 0e a = 14 a = 00001110 str = Hello time = 200 float_pt = 3.142000 float_pt = 3.142000e+00 ncsim: *W,RNQUIE: Simulation is complete.
일부 문자는 줄 바꿈, 탭 및 양식 피드와 같은 다른 표시 목적을 나타내기 때문에 특별한 것으로 간주됩니다. 이러한 특수 문자를 인쇄하려면 , 이러한 문자가 나타날 때마다 이스케이프해야 합니다. .
인수 | 설명 |
---|---|
개행 문자 | |
탭 문자 | |
캐릭터 | |
" | " 문자 |
%% | % 문자 |
module tb;
initial begin
$write ("Newline character
");
$display ("Tab character stop");
$display ("Escaping " %%");
/*
// Compilation errors
$display ("Without escaping "); // ERROR : Unterminated string
$display ("Without escaping ""); // ERROR : Unterminated string
*/
end
endmodule
시뮬레이션 로그 ncsim> run Newline character Tab character stop Escaping " % ncsim: *W,RNQUIE: Simulation is complete.
verilog
매개변수는 다른 사양으로 모듈을 재사용할 수 있도록 하는 Verilog 구성입니다. 예를 들어, 4비트 가산기는 비트 수에 대한 값을 허용하도록 매개변수화될 수 있으며 모듈 인스턴스화 중에 새 매개변수 값이 전달될 수 있습니다. 따라서 N비트 가산기는 4비트, 8비트 또는 16비트 가산기가 될 수 있습니다. 함수 호출 중에 전달되는 함수에 대한 인수와 같습니다. parameter MSB = 7; // MSB is a parameter with a constant value 7 paramet
Verilog는 하드웨어 설명 언어이며 설계자가 RTL 설계를 시뮬레이션하여 논리 게이트로 변환할 필요가 없습니다. 시뮬레이션이 필요한 이유는 무엇입니까? 시뮬레이션은 RTL 코드가 의도한 대로 동작하는지 확인하기 위해 다른 시간에 다른 입력 자극을 설계에 적용하는 기술입니다. 기본적으로 시뮬레이션은 설계의 견고성을 검증하기 위해 잘 따라야 하는 기술입니다. 또한 가공된 칩이 실제 세계에서 사용되는 방식과 다양한 입력에 반응하는 방식과 유사합니다. 예를 들어, 위의 디자인은 출력 pe 보여진 바와 같이. 시뮬레이션을 통해