산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> verilog

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.

Verilog 스트로브

$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

Verilog 지속적인 모니터

$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.

Verilog 형식 지정자

디스플레이 함수 내에서 변수를 인쇄하려면 적절한 형식 지정자 각 변수에 대해 지정해야 합니다.

인수 설명
%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.

Verilog 탈출 시퀀스

일부 문자는 줄 바꿈, 탭 및 양식 피드와 같은 다른 표시 목적을 나타내기 때문에 특별한 것으로 간주됩니다. 이러한 특수 문자를 인쇄하려면 , 이러한 문자가 나타날 때마다 이스케이프해야 합니다. .

인수 설명
개행 문자
탭 문자
캐릭터
" " 문자
%% % 문자
  
  
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

  1. Verilog 튜토리얼
  2. Verilog 연결
  3. Verilog 할당
  4. Verilog 차단 및 비 차단
  5. Verilog 기능
  6. Verilog 작업
  7. Verilog `ifdef 조건부 컴파일
  8. Verilog 계층적 참조 범위
  9. Verilog 클록 생성기
  10. Verilog 디스플레이 작업